SequenceDiagram/web/lib/comment.js

1 line
4.0 KiB
JavaScript

!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";function n(e){var n=e.search(l);return-1==n?0:n}function t(e,n){var t=e.getMode();return!1!==t.useInnerComments&&t.innerMode?e.getModeAt(n):t}var i={},l=/[^\s\u00a0]/,o=e.Pos,r=e.cmpPos;e.commands.toggleComment=function(e){e.toggleComment()},e.defineExtension("toggleComment",function(e){e||(e=i);for(var n=1/0,t=this.listSelections(),l=null,r=t.length-1;r>=0;r--){var a=t[r].from(),m=t[r].to();a.line>=n||(m.line>=n&&(m=o(n,0)),n=a.line,null==l?this.uncomment(a,m,e)?l="un":(this.lineComment(a,m,e),l="line"):"un"==l?this.uncomment(a,m,e):this.lineComment(a,m,e))}}),e.defineExtension("lineComment",function(e,r,a){a||(a=i);var m=this,c=t(m,e),s=m.getLine(e.line);if(null!=s&&!function(e,n,t){return/\bstring\b/.test(e.getTokenTypeAt(o(n.line,0)))&&!/^[\'\"\`]/.test(t)}(m,e,s)){var f=a.lineComment||c.lineComment;if(f){var g=Math.min(0!=r.ch||r.line==e.line?r.line+1:r.line,m.lastLine()+1),u=null==a.padding?" ":a.padding,d=a.commentBlankLines||e.line==r.line;m.operation(function(){if(a.indent){for(var t=null,i=e.line;i<g;++i){var r=(c=m.getLine(i)).slice(0,n(c));(null==t||t.length>r.length)&&(t=r)}for(i=e.line;i<g;++i){var c=m.getLine(i),s=t.length;(d||l.test(c))&&(c.slice(0,s)!=t&&(s=n(c)),m.replaceRange(t+f+u,o(i,0),o(i,s)))}}else for(i=e.line;i<g;++i)(d||l.test(m.getLine(i)))&&m.replaceRange(f+u,o(i,0))})}else(a.blockCommentStart||c.blockCommentStart)&&(a.fullLines=!0,m.blockComment(e,r,a))}}),e.defineExtension("blockComment",function(e,n,a){a||(a=i);var m=this,c=t(m,e),s=a.blockCommentStart||c.blockCommentStart,f=a.blockCommentEnd||c.blockCommentEnd;if(s&&f){if(!/\bcomment\b/.test(m.getTokenTypeAt(o(e.line,0)))){var g=Math.min(n.line,m.lastLine());g!=e.line&&0==n.ch&&l.test(m.getLine(g))&&--g;var u=null==a.padding?" ":a.padding;e.line>g||m.operation(function(){if(0!=a.fullLines){var t=l.test(m.getLine(g));m.replaceRange(u+f,o(g)),m.replaceRange(s+u,o(e.line,0));var i=a.blockCommentLead||c.blockCommentLead;if(null!=i)for(var d=e.line+1;d<=g;++d)(d!=g||t)&&m.replaceRange(i+u,o(d,0))}else{var h=0==r(m.getCursor("to"),n),C=!m.somethingSelected();m.replaceRange(f,n),h&&m.setSelection(C?n:m.getCursor("from"),n),m.replaceRange(s,e)}})}}else(a.lineComment||c.lineComment)&&0!=a.fullLines&&m.lineComment(e,n,a)}),e.defineExtension("uncomment",function(e,n,r){r||(r=i);var a,m=this,c=t(m,e),s=Math.min(0!=n.ch||n.line==e.line?n.line:n.line-1,m.lastLine()),f=Math.min(e.line,s),g=r.lineComment||c.lineComment,u=[],d=null==r.padding?" ":r.padding;e:if(g){for(var h=f;h<=s;++h){var C=m.getLine(h),p=C.indexOf(g);if(p>-1&&!/comment/.test(m.getTokenTypeAt(o(h,p+1)))&&(p=-1),-1==p&&l.test(C))break e;if(p>-1&&l.test(C.slice(0,p)))break e;u.push(C)}if(m.operation(function(){for(var e=f;e<=s;++e){var n=u[e-f],t=n.indexOf(g),i=t+g.length;t<0||(n.slice(i,i+d.length)==d&&(i+=d.length),a=!0,m.replaceRange("",o(e,t),o(e,i)))}}),a)return!0}var v=r.blockCommentStart||c.blockCommentStart,b=r.blockCommentEnd||c.blockCommentEnd;if(!v||!b)return!1;var k=r.blockCommentLead||c.blockCommentLead,L=m.getLine(f),x=L.indexOf(v);if(-1==x)return!1;var R=s==f?L:m.getLine(s),O=R.indexOf(b,s==f?x+v.length:0),T=o(f,x+1),S=o(s,O+1);if(-1==O||!/comment/.test(m.getTokenTypeAt(T))||!/comment/.test(m.getTokenTypeAt(S))||m.getRange(T,S,"\n").indexOf(b)>-1)return!1;var y=L.lastIndexOf(v,e.ch),E=-1==y?-1:L.slice(0,e.ch).indexOf(b,y+v.length);if(-1!=y&&-1!=E&&E+b.length!=e.ch)return!1;E=R.indexOf(b,n.ch);var M=R.slice(n.ch).lastIndexOf(v,E-n.ch);return y=-1==E||-1==M?-1:n.ch+M,(-1==E||-1==y||y==n.ch)&&(m.operation(function(){m.replaceRange("",o(s,O-(d&&R.slice(O-d.length,O)==d?d.length:0)),o(s,O+b.length));var e=x+v.length;if(d&&L.slice(e,e+d.length)==d&&(e+=d.length),m.replaceRange("",o(f,x),o(f,e)),k)for(var n=f+1;n<=s;++n){var t=m.getLine(n),i=t.indexOf(k);if(-1!=i&&!l.test(t.slice(0,i))){var r=i+k.length;d&&t.slice(r,r+d.length)==d&&(r+=d.length),m.replaceRange("",o(n,i),o(n,r))}}}),!0)})});