Repository navigation
Expand file tree
/
Copy pathpug.js
More file actions
1 lines (1 loc) · 10.9 KB
/
Copy pathpug.js
File metadata and controls
1 lines (1 loc) · 10.9 KB
1
!function(mod){"object"==typeof exports&&"object"==typeof module?mod(require("../../lib/codemirror"),require("../javascript/javascript"),require("../css/css"),require("../htmlmixed/htmlmixed")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../javascript/javascript","../css/css","../htmlmixed/htmlmixed"],mod):mod(CodeMirror)}(function(CodeMirror){"use strict";CodeMirror.defineMode("pug",function(config){var KEYWORD="keyword",DOCTYPE="meta",ID="builtin",CLASS="qualifier",ATTRS_NEST={"{":"}","(":")","[":"]"},jsMode=CodeMirror.getMode(config,"javascript");function State(){this.javaScriptLine=!1,this.javaScriptLineExcludesColon=!1,this.javaScriptArguments=!1,this.javaScriptArgumentsDepth=0,this.isInterpolating=!1,this.interpolationNesting=0,this.jsState=CodeMirror.startState(jsMode),this.restOfLine="",this.isIncludeFiltered=!1,this.isEach=!1,this.lastTag="",this.scriptType="",this.isAttrs=!1,this.attrsNest=[],this.inAttributeName=!0,this.attributeIsType=!1,this.attrValue="",this.indentOf=1/0,this.indentToken="",this.innerMode=null,this.innerState=null,this.innerModeForLine=!1}function javaScript(stream,state){if(stream.sol()&&(state.javaScriptLine=!1,state.javaScriptLineExcludesColon=!1),state.javaScriptLine){if(state.javaScriptLineExcludesColon&&":"===stream.peek())return state.javaScriptLine=!1,void(state.javaScriptLineExcludesColon=!1);var tok=jsMode.token(stream,state.jsState);return stream.eol()&&(state.javaScriptLine=!1),tok||!0}}function javaScriptArguments(stream,state){var tok;if(state.javaScriptArguments)return 0===state.javaScriptArgumentsDepth&&"("!==stream.peek()?void(state.javaScriptArguments=!1):("("===stream.peek()?state.javaScriptArgumentsDepth++:")"===stream.peek()&&state.javaScriptArgumentsDepth--,0===state.javaScriptArgumentsDepth?void(state.javaScriptArguments=!1):jsMode.token(stream,state.jsState)||!0)}function yieldStatement(stream){if(stream.match(/^yield\b/))return"keyword"}function doctype(stream){if(stream.match(/^(?:doctype) *([^\n]+)?/))return DOCTYPE}function interpolation(stream,state){if(stream.match("#{"))return state.isInterpolating=!0,state.interpolationNesting=0,"punctuation"}function interpolationContinued(stream,state){if(state.isInterpolating){if("}"===stream.peek()){if(state.interpolationNesting--,state.interpolationNesting<0)return stream.next(),state.isInterpolating=!1,"punctuation"}else"{"===stream.peek()&&state.interpolationNesting++;return jsMode.token(stream,state.jsState)||!0}}function caseStatement(stream,state){if(stream.match(/^case\b/))return state.javaScriptLine=!0,KEYWORD}function when(stream,state){if(stream.match(/^when\b/))return state.javaScriptLine=!0,state.javaScriptLineExcludesColon=!0,KEYWORD}function defaultStatement(stream){if(stream.match(/^default\b/))return KEYWORD}function extendsStatement(stream,state){if(stream.match(/^extends?\b/))return state.restOfLine="string",KEYWORD}function append(stream,state){if(stream.match(/^append\b/))return state.restOfLine="variable",KEYWORD}function prepend(stream,state){if(stream.match(/^prepend\b/))return state.restOfLine="variable",KEYWORD}function block(stream,state){if(stream.match(/^block\b *(?:(prepend|append)\b)?/))return state.restOfLine="variable",KEYWORD}function include(stream,state){if(stream.match(/^include\b/))return state.restOfLine="string",KEYWORD}function includeFiltered(stream,state){if(stream.match(/^include:([a-zA-Z0-9\-]+)/,!1)&&stream.match("include"))return state.isIncludeFiltered=!0,KEYWORD}function includeFilteredContinued(stream,state){if(state.isIncludeFiltered){var tok=filter(stream,state);return state.isIncludeFiltered=!1,state.restOfLine="string",tok}}function mixin(stream,state){if(stream.match(/^mixin\b/))return state.javaScriptLine=!0,KEYWORD}function call(stream,state){return stream.match(/^\+([-\w]+)/)?(stream.match(/^\( *[-\w]+ *=/,!1)||(state.javaScriptArguments=!0,state.javaScriptArgumentsDepth=0),"variable"):stream.match("+#{",!1)?(stream.next(),state.mixinCallAfter=!0,interpolation(stream,state)):void 0}function callArguments(stream,state){if(state.mixinCallAfter)return state.mixinCallAfter=!1,stream.match(/^\( *[-\w]+ *=/,!1)||(state.javaScriptArguments=!0,state.javaScriptArgumentsDepth=0),!0}function conditional(stream,state){if(stream.match(/^(if|unless|else if|else)\b/))return state.javaScriptLine=!0,KEYWORD}function each(stream,state){if(stream.match(/^(- *)?(each|for)\b/))return state.isEach=!0,KEYWORD}function eachContinued(stream,state){if(state.isEach){if(stream.match(/^ in\b/))return state.javaScriptLine=!0,state.isEach=!1,KEYWORD;if(stream.sol()||stream.eol())state.isEach=!1;else if(stream.next()){for(;!stream.match(/^ in\b/,!1)&&stream.next(););return"variable"}}}function whileStatement(stream,state){if(stream.match(/^while\b/))return state.javaScriptLine=!0,KEYWORD}function tag(stream,state){var captures;if(captures=stream.match(/^(\w(?:[-:\w]*\w)?)\/?/))return state.lastTag=captures[1].toLowerCase(),"script"===state.lastTag&&(state.scriptType="application/javascript"),"tag"}function filter(stream,state){var innerMode;if(stream.match(/^:([\w\-]+)/))return config&&config.innerModes&&(innerMode=config.innerModes(stream.current().substring(1))),innerMode||(innerMode=stream.current().substring(1)),"string"==typeof innerMode&&(innerMode=CodeMirror.getMode(config,innerMode)),setInnerMode(stream,state,innerMode),"atom"}function code(stream,state){if(stream.match(/^(!?=|-)/))return state.javaScriptLine=!0,"punctuation"}function id(stream){if(stream.match(/^#([\w-]+)/))return ID}function className(stream){if(stream.match(/^\.([\w-]+)/))return CLASS}function attrs(stream,state){if("("==stream.peek())return stream.next(),state.isAttrs=!0,state.attrsNest=[],state.inAttributeName=!0,state.attrValue="",state.attributeIsType=!1,"punctuation"}function attrsContinued(stream,state){if(state.isAttrs){if(ATTRS_NEST[stream.peek()]&&state.attrsNest.push(ATTRS_NEST[stream.peek()]),state.attrsNest[state.attrsNest.length-1]===stream.peek())state.attrsNest.pop();else if(stream.eat(")"))return state.isAttrs=!1,"punctuation";if(state.inAttributeName&&stream.match(/^[^=,\)!]+/))return"="!==stream.peek()&&"!"!==stream.peek()||(state.inAttributeName=!1,state.jsState=CodeMirror.startState(jsMode),"script"===state.lastTag&&"type"===stream.current().trim().toLowerCase()?state.attributeIsType=!0:state.attributeIsType=!1),"attribute";var tok=jsMode.token(stream,state.jsState);if(state.attributeIsType&&"string"===tok&&(state.scriptType=stream.current().toString()),0===state.attrsNest.length&&("string"===tok||"variable"===tok||"keyword"===tok))try{return Function("","var x "+state.attrValue.replace(/,\s*$/,"").replace(/^!/,"")),state.inAttributeName=!0,state.attrValue="",stream.backUp(stream.current().length),attrsContinued(stream,state)}catch(ex){}return state.attrValue+=stream.current(),tok||!0}}function attributesBlock(stream,state){if(stream.match(/^&attributes\b/))return state.javaScriptArguments=!0,state.javaScriptArgumentsDepth=0,"keyword"}function indent(stream){if(stream.sol()&&stream.eatSpace())return"indent"}function comment(stream,state){if(stream.match(/^ *\/\/(-)?([^\n]*)/))return state.indentOf=stream.indentation(),state.indentToken="comment","comment"}function colon(stream){if(stream.match(/^: */))return"colon"}function text(stream,state){return stream.match(/^(?:\| ?| )([^\n]+)/)?"string":stream.match(/^(<[^\n]*)/,!1)?(setInnerMode(stream,state,"htmlmixed"),state.innerModeForLine=!0,innerMode(stream,state,!0)):void 0}function dot(stream,state){if(stream.eat(".")){var innerMode=null;return"script"===state.lastTag&&-1!=state.scriptType.toLowerCase().indexOf("javascript")?innerMode=state.scriptType.toLowerCase().replace(/"|'/g,""):"style"===state.lastTag&&(innerMode="css"),setInnerMode(stream,state,innerMode),"dot"}}function fail(stream){return stream.next(),null}function setInnerMode(stream,state,mode){mode=CodeMirror.mimeModes[mode]||mode,mode=config.innerModes&&config.innerModes(mode)||mode,mode=CodeMirror.mimeModes[mode]||mode,mode=CodeMirror.getMode(config,mode),state.indentOf=stream.indentation(),mode&&"null"!==mode.name?state.innerMode=mode:state.indentToken="string"}function innerMode(stream,state,force){if(stream.indentation()>state.indentOf||state.innerModeForLine&&!stream.sol()||force)return state.innerMode?(state.innerState||(state.innerState=state.innerMode.startState?CodeMirror.startState(state.innerMode,stream.indentation()):{}),stream.hideFirstChars(state.indentOf+2,function(){return state.innerMode.token(stream,state.innerState)||!0})):(stream.skipToEnd(),state.indentToken);stream.sol()&&(state.indentOf=1/0,state.indentToken=null,state.innerMode=null,state.innerState=null)}function restOfLine(stream,state){if(stream.sol()&&(state.restOfLine=""),state.restOfLine){stream.skipToEnd();var tok=state.restOfLine;return state.restOfLine="",tok}}function startState(){return new State}function copyState(state){return state.copy()}function nextToken(stream,state){var tok=innerMode(stream,state)||restOfLine(stream,state)||interpolationContinued(stream,state)||includeFilteredContinued(stream,state)||eachContinued(stream,state)||attrsContinued(stream,state)||javaScript(stream,state)||javaScriptArguments(stream,state)||callArguments(stream,state)||yieldStatement(stream)||doctype(stream)||interpolation(stream,state)||caseStatement(stream,state)||when(stream,state)||defaultStatement(stream)||extendsStatement(stream,state)||append(stream,state)||prepend(stream,state)||block(stream,state)||include(stream,state)||includeFiltered(stream,state)||mixin(stream,state)||call(stream,state)||conditional(stream,state)||each(stream,state)||whileStatement(stream,state)||tag(stream,state)||filter(stream,state)||code(stream,state)||id(stream)||className(stream)||attrs(stream,state)||attributesBlock(stream,state)||indent(stream)||text(stream,state)||comment(stream,state)||colon(stream)||dot(stream,state)||fail(stream);return!0===tok?null:tok}return State.prototype.copy=function(){var res=new State;return res.javaScriptLine=this.javaScriptLine,res.javaScriptLineExcludesColon=this.javaScriptLineExcludesColon,res.javaScriptArguments=this.javaScriptArguments,res.javaScriptArgumentsDepth=this.javaScriptArgumentsDepth,res.isInterpolating=this.isInterpolating,res.interpolationNesting=this.interpolationNesting,res.jsState=CodeMirror.copyState(jsMode,this.jsState),res.innerMode=this.innerMode,this.innerMode&&this.innerState&&(res.innerState=CodeMirror.copyState(this.innerMode,this.innerState)),res.restOfLine=this.restOfLine,res.isIncludeFiltered=this.isIncludeFiltered,res.isEach=this.isEach,res.lastTag=this.lastTag,res.scriptType=this.scriptType,res.isAttrs=this.isAttrs,res.attrsNest=this.attrsNest.slice(),res.inAttributeName=this.inAttributeName,res.attributeIsType=this.attributeIsType,res.attrValue=this.attrValue,res.indentOf=this.indentOf,res.indentToken=this.indentToken,res.innerModeForLine=this.innerModeForLine,res},{startState:startState,copyState:copyState,token:nextToken}},"javascript","css","htmlmixed"),CodeMirror.defineMIME("text/x-pug","pug"),CodeMirror.defineMIME("text/x-jade","pug")});