200 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			3.8 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.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.cleanUp: {{ out = it.util.cleanUpCode(out); }} #}}
 | |
| 
 | |
| 
 | |
| {{## def.finalCleanUp: {{ out = it.util.finalCleanUpCode(out, $async); }} #}}
 | |
| 
 | |
| 
 | |
| {{## 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.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)}}')
 | |
| #}}
 |