204 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
{{## def.setupKeyword:
 | 
						|
  {{
 | 
						|
    var $lvl = it.level;
 | 
						|
    var $dataLvl = it.dataLevel;
 | 
						|
    var $schema = it.schema[$keyword];
 | 
						|
    var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
 | 
						|
    var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
 | 
						|
    var $breakOnError = !it.opts.allErrors;
 | 
						|
    var $errorKeyword;
 | 
						|
 | 
						|
    var $data = 'data' + ($dataLvl || '');
 | 
						|
    var $valid = 'valid' + $lvl;
 | 
						|
    var $errs = 'errs__' + $lvl;
 | 
						|
  }}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.setCompositeRule:
 | 
						|
  {{
 | 
						|
    var $wasComposite = it.compositeRule;
 | 
						|
    it.compositeRule = $it.compositeRule = true;
 | 
						|
  }}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.resetCompositeRule:
 | 
						|
  {{ it.compositeRule = $it.compositeRule = $wasComposite; }}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.setupNextLevel:
 | 
						|
  {{
 | 
						|
    var $it = it.util.copy(it);
 | 
						|
    var $closingBraces = '';
 | 
						|
    $it.level++;
 | 
						|
    var $nextValid = 'valid' + $it.level;
 | 
						|
  }}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.ifValid:
 | 
						|
  {{? $breakOnError }}
 | 
						|
    if ({{=$valid}}) {
 | 
						|
    {{ $closingBraces += '}'; }}
 | 
						|
  {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.ifResultValid:
 | 
						|
  {{? $breakOnError }}
 | 
						|
    if ({{=$nextValid}}) {
 | 
						|
    {{ $closingBraces += '}'; }}
 | 
						|
  {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.elseIfValid:
 | 
						|
  {{? $breakOnError }}
 | 
						|
    {{ $closingBraces += '}'; }}
 | 
						|
    else {
 | 
						|
  {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.nonEmptySchema:_schema:
 | 
						|
  (it.opts.strictKeywords
 | 
						|
    ? (typeof _schema == 'object' && Object.keys(_schema).length > 0)
 | 
						|
      || _schema === false
 | 
						|
    : it.util.schemaHasRules(_schema, it.RULES.all))
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.strLength:
 | 
						|
  {{? it.opts.unicode === false }}
 | 
						|
    {{=$data}}.length
 | 
						|
  {{??}}
 | 
						|
    ucs2length({{=$data}})
 | 
						|
  {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.willOptimize:
 | 
						|
  it.util.varOccurences($code, $nextData) < 2
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.generateSubschemaCode:
 | 
						|
  {{
 | 
						|
    var $code = it.validate($it);
 | 
						|
    $it.baseId = $currentBaseId;
 | 
						|
  }}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.insertSubschemaCode:
 | 
						|
  {{= it.validate($it) }}
 | 
						|
  {{ $it.baseId = $currentBaseId; }}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def._optimizeValidate:
 | 
						|
  it.util.varReplace($code, $nextData, $passData)
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.optimizeValidate:
 | 
						|
  {{? {{# def.willOptimize}} }}
 | 
						|
    {{= {{# def._optimizeValidate }} }}
 | 
						|
  {{??}}
 | 
						|
    var {{=$nextData}} = {{=$passData}};
 | 
						|
    {{= $code }}
 | 
						|
  {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.$data:
 | 
						|
  {{
 | 
						|
    var $isData = it.opts.$data && $schema && $schema.$data
 | 
						|
      , $schemaValue;
 | 
						|
  }}
 | 
						|
  {{? $isData }}
 | 
						|
    var schema{{=$lvl}} = {{= it.util.getData($schema.$data, $dataLvl, it.dataPathArr) }};
 | 
						|
    {{ $schemaValue = 'schema' + $lvl; }}
 | 
						|
  {{??}}
 | 
						|
    {{ $schemaValue = $schema; }}
 | 
						|
  {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.$dataNotType:_type:
 | 
						|
  {{?$isData}} ({{=$schemaValue}} !== undefined && typeof {{=$schemaValue}} != _type) || {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.check$dataIsArray:
 | 
						|
  if (schema{{=$lvl}} === undefined) {{=$valid}} = true;
 | 
						|
  else if (!Array.isArray(schema{{=$lvl}})) {{=$valid}} = false;
 | 
						|
  else {
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.numberKeyword:
 | 
						|
  {{? !($isData || typeof $schema == 'number') }}
 | 
						|
    {{ throw new Error($keyword + ' must be number'); }}
 | 
						|
  {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.beginDefOut:
 | 
						|
  {{
 | 
						|
    var $$outStack = $$outStack || [];
 | 
						|
    $$outStack.push(out);
 | 
						|
    out = '';
 | 
						|
  }}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.storeDefOut:_variable:
 | 
						|
  {{
 | 
						|
    var _variable = out;
 | 
						|
    out = $$outStack.pop();
 | 
						|
  }}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.dataPath:(dataPath || ''){{? it.errorPath != '""'}} + {{= it.errorPath }}{{?}}#}}
 | 
						|
 | 
						|
{{## def.setParentData:
 | 
						|
  {{
 | 
						|
    var $parentData = $dataLvl ? 'data' + (($dataLvl-1)||'') : 'parentData'
 | 
						|
      , $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
 | 
						|
  }}
 | 
						|
#}}
 | 
						|
 | 
						|
{{## def.passParentData:
 | 
						|
  {{# def.setParentData }}
 | 
						|
  , {{= $parentData }}
 | 
						|
  , {{= $parentDataProperty }}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.iterateProperties:
 | 
						|
  {{? $ownProperties }}
 | 
						|
    {{=$dataProperties}} = {{=$dataProperties}} || Object.keys({{=$data}});
 | 
						|
    for (var {{=$idx}}=0; {{=$idx}}<{{=$dataProperties}}.length; {{=$idx}}++) {
 | 
						|
      var {{=$key}} = {{=$dataProperties}}[{{=$idx}}];
 | 
						|
  {{??}}
 | 
						|
    for (var {{=$key}} in {{=$data}}) {
 | 
						|
  {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.noPropertyInData:
 | 
						|
  {{=$useData}} === undefined
 | 
						|
  {{? $ownProperties }}
 | 
						|
    || !{{# def.isOwnProperty }}
 | 
						|
  {{?}}
 | 
						|
#}}
 | 
						|
 | 
						|
 | 
						|
{{## def.isOwnProperty:
 | 
						|
  Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($propertyKey)}}')
 | 
						|
#}}
 |