!(function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)})((function(a){"use strict";function b(a,b,c){return c?a.indexOf(b)>=0:0==a.lastIndexOf(b,0)}function c(c,e){var f=e&&e.schemaInfo,g=e&&e.quoteChar||'"',h=e&&e.matchInMiddle;if(f){var i=c.getCursor(),j=c.getTokenAt(i);j.end>i.ch&&(j.end=i.ch,j.string=j.string.slice(0,i.ch-j.start));var k=a.innerMode(c.getMode(),j.state);if(k.mode.xmlCurrentTag){var l,m,n=[],o=!1,p=/\btag\b/.test(j.type)&&!/>$/.test(j.string),q=p&&/^\w/.test(j.string);if(q){var r=c.getLine(i.line).slice(Math.max(0,j.start-2),j.start),s=/<\/$/.test(r)?"close":/<$/.test(r)?"open":null;s&&(m=j.start-("close"==s?2:1))}else p&&"<"==j.string?s="open":p&&"</"==j.string&&(s="close");var t=k.mode.xmlCurrentTag(k.state);if(!p&&!t||s){q&&(l=j.string),o=s;var u=k.mode.xmlCurrentContext?k.mode.xmlCurrentContext(k.state):[],k=u.length&&u[u.length-1],v=k&&f[k],w=k?v&&v.children:f["!top"];if(w&&"close"!=s)for(var x=0;x<w.length;++x)l&&!b(w[x],l,h)||n.push("<"+w[x]);else if("close"!=s)for(var y in f)!f.hasOwnProperty(y)||"!top"==y||"!attrs"==y||l&&!b(y,l,h)||n.push("<"+y);k&&(!l||"close"==s&&b(k,l,h))&&n.push("</"+k+">")}else{var v=t&&f[t.name],z=v&&v.attrs,A=f["!attrs"];if(!z&&!A)return;if(z){if(A){var B={};for(var C in A)A.hasOwnProperty(C)&&(B[C]=A[C]);for(var C in z)z.hasOwnProperty(C)&&(B[C]=z[C]);z=B}}else z=A;if("string"==j.type||"="==j.string){var D,r=c.getRange(d(i.line,Math.max(0,i.ch-60)),d(i.line,"string"==j.type?j.start:j.end)),E=r.match(/([^\s\u00a0=<>\"\']+)=$/);if(!E||!z.hasOwnProperty(E[1])||!(D=z[E[1]]))return;if("function"==typeof D&&(D=D.call(this,c)),"string"==j.type){l=j.string;var F=0;/['"]/.test(j.string.charAt(0))&&(g=j.string.charAt(0),l=j.string.slice(1),F++);var G=j.string.length;if(/['"]/.test(j.string.charAt(G-1))&&(g=j.string.charAt(G-1),l=j.string.substr(F,G-2)),F){var H=c.getLine(i.line);H.length>j.end&&H.charAt(j.end)==g&&j.end++}o=!0}for(var x=0;x<D.length;++x)l&&!b(D[x],l,h)||n.push(g+D[x]+g)}else{"attribute"==j.type&&(l=j.string,o=!0);for(var I in z)!z.hasOwnProperty(I)||l&&!b(I,l,h)||n.push(I)}}return{list:n,from:o?d(i.line,null==m?j.start:m):i,to:o?d(i.line,j.end):i}}}}var d=a.Pos;a.registerHelper("hint","xml",c)}));