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