Overview
- -dompdf is an HTML to PDF converter. At its heart, dompdf is (mostly) CSS2.1 -compliant HTML layout and rendering engine written in PHP. It is a style-driven -renderer: it will download and read external stylesheets, inline style tags, and -the style attributes of individual HTML elements. It also supports most -presentational HTML attributes.
- -PDF rendering is currently provided either by PDFLib (www.pdflib.com) or by a bundled version the -CPDF class, originally R&OS CPDF written by Wayne Munro but customized by -the dompdf team to improve performance and add features. In order to use PDFLib -with dompdf the PDFLib PHP extension is required (available from PDFLib). Using -PDFLib improves performance and reduces the memory requirements of dompdf -somewhat, while the CPDF class, though slightly slower, eliminates any -dependencies on external PDF libraries.
- - diff --git a/vendor/dompdf/dompdf/www/jquery-1.4.2.js b/vendor/dompdf/dompdf/www/jquery-1.4.2.js deleted file mode 100644 index 48a88b8f4..000000000 --- a/vendor/dompdf/dompdf/www/jquery-1.4.2.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l =0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l ";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q =0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f
0)for(var j=d;j 0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e -1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"+d+">"},F={option:[1,""],legend:[1,""],thead:[1," ","
"],tr:[2,"","
"],td:[3,""],col:[2,"
"," "],area:[1,""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
"," ",""];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e 0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===" "&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/ - - - - - - - - - - -
none
-- -rotate
-- -scale
----- -translate
----- -skew
----- -mixed
-- - - diff --git a/vendor/dompdf/dompdf/www/test/css_at_font_face.html b/vendor/dompdf/dompdf/www/test/css_at_font_face.html deleted file mode 100644 index 5b4ad485e..000000000 --- a/vendor/dompdf/dompdf/www/test/css_at_font_face.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - -Give You Glory
-- Grumpy wizards make toxic brew for the evil Queen and Jack -
- -Wallpoet
-- Grumpy wizards make toxic brew for the evil Queen and Jack -
- -Love Ya Like A Sister
-- Grumpy wizards make toxic brew for the evil Queen and Jack -
- - - diff --git a/vendor/dompdf/dompdf/www/test/css_baseline.html b/vendor/dompdf/dompdf/www/test/css_baseline.html deleted file mode 100644 index af8bfb512..000000000 --- a/vendor/dompdf/dompdf/www/test/css_baseline.html +++ /dev/null @@ -1,53 +0,0 @@ - - -- - - - - - -(enter your text here) -
- --suptestsub -
- - - diff --git a/vendor/dompdf/dompdf/www/test/css_border.html b/vendor/dompdf/dompdf/www/test/css_border.html deleted file mode 100644 index f08086ef3..000000000 --- a/vendor/dompdf/dompdf/www/test/css_border.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - --
- -- -dotted -dashed -solid -double -- -groove -ridge -inset -outset -partial attributes merged
- -border:thin solid red;-border:red thin solid;-{ border:thin solid; }{border:blue; } (merged, reset all - color has no effect)-{ border:thin solid; }{border-color:green; } (merged, overwrite only color)-{ border:thin solid; }{border:blue; } (merged, reset all - color has no effect)-{ border:thin solid; }{border-color:green; } (merged, overwrite only color)-{ border:thin blue solid; }{border-color:green; } (merged, overwrite only color)-{ border:thin blue solid; }{border-style:dashed; } (merged, overwrite only style)-{ border:thin blue solid; }{border-width:thick; } (merged, overwrite only width)-{ border:thin blue solid; }{border-width:medium; } (merged, overwrite only width)-{ border:thin blue solid; }{border-width:3pt; } (merged, overwrite only width)- -top:
- -border-top:thin solid red;-border-top:red thin solid;-{ border-top:thin solid; }{border-top-color:green; } (merged, overwrite only color)-{ border-top:thin solid; }{border-top:blue; } (merged, reset all - color has no effect)- -right left bottom:
- -border-right:thin solid red;-border-left:thin solid red;-border-bottom:thin solid red;- -Individual Attributes
-{border:thin blue solid;}{border-top-color:red;}-{border:thin blue solid;}{border-right-color:red;}-{border:thin blue solid;}{border-bottom-color:red;}-{border:thin blue solid;}{border-left-color:red;}- -{border:thin blue solid;}{border-top-style:dashed;}-{border:thin blue solid;}{border-right-style:dashed;}-{border:thin blue solid;}{border-bottom-style:dashed;}-{border:thin blue solid;}{border-left-style:dashed;}- -{border:thin blue solid;}{border-top-width:medium;}-{border:thin blue solid;}{border-right-width:medium;}-{border:thin blue solid;}{border-bottom-width:medium;}-{border:thin blue solid;}{border-left-width:medium;}- -Individual side specific Attributes
- -{border:thin blue solid;}{border-color:red;}-{border:thin blue solid;}{border-color:red green;}-{border:thin blue solid;}{border-color:red green blue;}-{border:thin blue solid;}{border-color:red green blue gray;}- -{border:thin blue solid;}{border-style:dashed;}-{border:thin blue solid;}{border-style:dashed dotted;}-{border:thin blue solid;}{border-style:dashed dotted double;}-{border:thin blue solid;}{border-style:dashed dotted double groove;}- -{border:thin blue solid;}{border-width:1pt;}-{border:thin blue solid;}{border-width:1pt 2pt;}-{border:thin blue solid;}{border-width:1pt 2pt 3pt;}-{border:thin blue solid;}{border-width:1pt 2pt 3pt 4pt;}- -
-Misc. values
- ------- diff --git a/vendor/dompdf/dompdf/www/test/css_border_radius.html b/vendor/dompdf/dompdf/www/test/css_border_radius.html deleted file mode 100644 index eac599739..000000000 --- a/vendor/dompdf/dompdf/www/test/css_border_radius.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - -------- diff --git a/vendor/dompdf/dompdf/www/test/css_color_cmyk.html b/vendor/dompdf/dompdf/www/test/css_color_cmyk.html deleted file mode 100644 index 46a719e64..000000000 --- a/vendor/dompdf/dompdf/www/test/css_color_cmyk.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - -All these rectangles should look red: - - - - - - - - - - - - -
-
- -CMYK JPEG:
-- -
-CMYK: - - - - - - - - - - diff --git a/vendor/dompdf/dompdf/www/test/css_content.html b/vendor/dompdf/dompdf/www/test/css_content.html deleted file mode 100644 index 4558df51a..000000000 --- a/vendor/dompdf/dompdf/www/test/css_content.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - Look at the HTML source ! - --
quote <q>to
- - - - - - - - diff --git a/vendor/dompdf/dompdf/www/test/css_counter.html b/vendor/dompdf/dompdf/www/test/css_counter.html deleted file mode 100644 index 8eb244e1e..000000000 --- a/vendor/dompdf/dompdf/www/test/css_counter.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - -12.5b counter-increment - - - - - -CSS2 Test Suite: 12.5 counter-increment
-[index page] [section] [Previous] [Next] [Specification] -
-The style declarations contained within this page:
-span:before {content: counter(ct1) "|" counter(ct2) "|" counter(ct3) "... ";} -li span:before {counter-increment: ct1;} -li li span:before {counter-increment: ct2 2;} -li li li span:before {counter-increment: ct3 -3;} - --
--The list items in the following set of lists all have 'span' elements, and each 'span' should be preceded with generated content in the form "a|b|c... " where the letters are incremented numbers. "a" numbers increment in ones, "b" in twos, and "c" in negative threes. Note that counters are not reset for each sublist, or at any point, and so should use the default '0' as their base point. -
--
-- list item
-- list item
-- list item -
--
-- list item
-- list item
-- list item -
--
-- list item
-- list item
-- list item -
--
-- list item
-- list item
-- list item
-- list item
-- list item
-- list item
-- list item
-- list item
-
[index page] [section] [Previous] [Next] [Specification] -
- - diff --git a/vendor/dompdf/dompdf/www/test/css_float.html b/vendor/dompdf/dompdf/www/test/css_float.html deleted file mode 100644 index 55db46f74..000000000 --- a/vendor/dompdf/dompdf/www/test/css_float.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - --
- - - - diff --git a/vendor/dompdf/dompdf/www/test/css_font_selection.html b/vendor/dompdf/dompdf/www/test/css_font_selection.html deleted file mode 100644 index 4067cac52..000000000 --- a/vendor/dompdf/dompdf/www/test/css_font_selection.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -- -fooo -- -- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. - Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. - -
- Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. - Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. - Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. - Praesent egestas leo in pede. Praesent blandit odio eu enim. - -
-
- -- -test -foo -
- Pellentesque sed dui ut augue blandit sodales. - Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. - Mauris ac mauris sed pede pellentesque fermentum. -fooo -Font Selection
- -Available font-family:
--
-- serif (default) (Aliases: times, times-roman)
-- sans-serif (Aliases: helvetica)
-- monospace (Aliases: fixed, courier)
-Available font-style:
--
-- normal (default)
-- italic
-Available font-weight:
--
-- normal (default)
-- bold
-Other variations are falling back to a combination of the above
-Special fonts
--
- -- symbol
-- zapfdingbats
-Font selection
- -abcdefghijk ABCDEFGHIJK - (Helvetica) - (sans-serif) - sans-serif
-abcdefghijk ABCDEFGHIJK - (Helvetica) - (sans-serif) - helvetica
-abcdefghijk ABCDEFGHIJK - (Times-Roman) - (serif) - serif
-abcdefghijk ABCDEFGHIJK - (Times-Roman) - (serif) - times
-abcdefghijk ABCDEFGHIJK - (Times-Roman) - (serif) - times-roman
-abcdefghijk ABCDEFGHIJK - (Courier)- (monospace) - mononospace
-abcdefghijk ABCDEFGHIJK - (Courier)- (monospace) - fixed
-abcdefghijk ABCDEFGHIJK - (Courier)- (monospace) - courier
- -Font search path
- -abcdefghijk ABCDEFGHIJK - serif - "font-family:dummy1,dummy2;"
-abcdefghijk ABCDEFGHIJK - sans-serif - "font-family:dummy1,dummy2,sans-serif;"
-abcdefghijk ABCDEFGHIJK - sans-serif - "font-family:sans-serif,dummy1,dummy2;"
-abcdefghijk ABCDEFGHIJK - sans-serif - "font-family:sans-serif,courier;"
- -Font variations
- -abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:normal;"
-abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:lighter;"
-abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:100;"
-abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:200;"
-abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:300;"
-abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:400;"
-abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:500;"
-abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:600;"
-abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:700;"
-abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:800;"
-abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:900;"
-abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:bold;"
-abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:bolder;"
-abcdefghijk ABCDEFGHIJK - serif - italic - "font-style:italic; font-weight:normal;"
-abcdefghijk ABCDEFGHIJK - serif - italic - "font-style:oblique; font-weight:normal;"
-abcdefghijk ABCDEFGHIJK - serif - bold_italic - "font-style:italic; font-weight:bold;"
-abcdefghijk ABCDEFGHIJK - serif - normal - "font-variant:small-caps; font-style:normal; font-weight:normal;"
- -Font size
-abcdefghijk ABCDEFGHIJK - xx-small
-abcdefghijk ABCDEFGHIJK - x-small
-abcdefghijk ABCDEFGHIJK - small
-abcdefghijk ABCDEFGHIJK - medium
-abcdefghijk ABCDEFGHIJK - large
-abcdefghijk ABCDEFGHIJK - x-large
-abcdefghijk ABCDEFGHIJK - xx-large
-abcdefghijk ABCDEFGHIJK - 10pt
-abcdefghijk ABCDEFGHIJK - 12pt
-abcdefghijk ABCDEFGHIJK - l4pt
-abcdefghijk ABCDEFGHIJK - smaller
-abcdefghijk ABCDEFGHIJK - larger
- -Line height
-abcdefghijk ABCDEFGHIJK
-
abcdefghijk ABCDEFGHIJK 100%abcdefghijk ABCDEFGHIJK
-
abcdefghijk ABCDEFGHIJK 120%abcdefghijk ABCDEFGHIJK
-
abcdefghijk ABCDEFGHIJK 140%abcdefghijk ABCDEFGHIJK
-
abcdefghijk ABCDEFGHIJK 100%abcdefghijk ABCDEFGHIJK
-
abcdefghijk ABCDEFGHIJK 120%abcdefghijk ABCDEFGHIJK
- -
abcdefghijk ABCDEFGHIJK 140%Font combined setting
-style="font:italic small-caps bold 14pt/160% sans-serif;"
-
(all attributes)style="font:normal 10pt/160% sans-serif;"
-
(partial attributes)style="font:700 10pt/160% sans-serif;"
-
(partial attributes)style="font:small sans-serif;"
-
(partial attributes)- -- - - diff --git a/vendor/dompdf/dompdf/www/test/css_important_flag.html b/vendor/dompdf/dompdf/www/test/css_important_flag.html deleted file mode 100644 index 76751f13b..000000000 --- a/vendor/dompdf/dompdf/www/test/css_important_flag.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - -inherit style="font:italic small-caps bold 14pt/160% sans-serif;" :
- --style="font:small sans-serif;"
- -
-(partial attributes - reset inherited)
-style="font-weight:bold;"
-(partial overwrite)
-(resume partial attributes) -continue inherited
- -Handling of "!important" property flag
--Normally later css style properties defined later are overriding earlier ones.
- -
-Except if they are marked with the flag "!important".
-Those can only be overridden by style properties which are also marked "!important". -There are two classes of property overriding
--
-- inherit (nested html tags)
-- merging (more css properties to the same html tag)
-This is handled similarly for all styles, so we check only examples here
- -ul { line-height:160% }
- -
merge a { border-bottom:dashed 1pt red !important; text-decoration:none !important; }
- -dummy links, text decoration/border bottom:
- --
- -- (default)
-- border-bottom-style:none; (ignore)
-- border:1pt solid blue; (ignore)
-- border-bottom-style:none!important; (override)
-- border:1pt solid blue!important; (override)
-Inherit .monospace { font-family:monospace !important; }
-font family selection:
--
- - - diff --git a/vendor/dompdf/dompdf/www/test/css_letter_spacing.html b/vendor/dompdf/dompdf/www/test/css_letter_spacing.html deleted file mode 100644 index fb813cbbd..000000000 --- a/vendor/dompdf/dompdf/www/test/css_letter_spacing.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - -- (default)
-- font-family:sans-serif; (ignored)
-- font-family:sans-serif!important; (override)
--- -This has letter spacing of 5px
-This has letter spacing of 4px
-This has letter spacing of 3px
-This has letter spacing of 2px
-This has letter spacing of 1px
-This has normal letter spacing
-This has letter spacing of -1px
-This has letter spacing of -2px
-This has letter spacing of -3px
-This has letter spacing of -4px
-This has letter spacing of -5px
--- -This has letter spacing of 5px
-This has letter spacing of 4px
-This has letter spacing of 3px
-This has letter spacing of 2px
-This has letter spacing of 1px
-This has normal letter spacing
-This has letter spacing of -1px
-This has letter spacing of -2px
-This has letter spacing of -3px
-This has letter spacing of -4px
-This has letter spacing of -5px
--- -This has letter spacing of 5px
-This has letter spacing of 4px
-This has letter spacing of 3px
-This has letter spacing of 2px
-This has letter spacing of 1px
-This has normal letter spacing
-This has letter spacing of -1px
-This has letter spacing of -2px
-This has letter spacing of -3px
-This has letter spacing of -4px
-This has letter spacing of -5px
--- - diff --git a/vendor/dompdf/dompdf/www/test/css_line_height.html b/vendor/dompdf/dompdf/www/test/css_line_height.html deleted file mode 100644 index 7589b7952..000000000 --- a/vendor/dompdf/dompdf/www/test/css_line_height.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - -This has letter spacing of 5px. This has letter spacing of 5px. This has letter spacing of 5px.
-This has letter spacing of 4px. This has letter spacing of 4px. This has letter spacing of 4px.
-This has letter spacing of 3px. This has letter spacing of 3px. This has letter spacing of 3px.
-This has letter spacing of 2px. This has letter spacing of 2px. This has letter spacing of 2px.
-This has letter spacing of 1px. This has letter spacing of 1px. This has letter spacing of 1px.
-This has normal letter spacing. This has normal letter spacing. This has normal letter spacing.
-This has letter spacing of -1px. This has letter spacing of -1px. This has letter spacing of -1px.
-This has letter spacing of -2px. This has letter spacing of -2px. This has letter spacing of -2px.
-This has letter spacing of -3px. This has letter spacing of -3px. This has letter spacing of -3px.
-This has letter spacing of -4px. This has letter spacing of -4px. This has letter spacing of -4px.
-This has letter spacing of -5px. This has letter spacing of -5px. This has letter spacing of -5px.
-CSS Line Height Inheritance - - - -Use only <number> for line-height
-unless you like solving inexplicable inheritance problems or setting an explicit line-height on every element
-div {line-height: 1}; div div {font-size: 200%}
-The quick brown fox-
jumps over the crazy -The quick brown fox
jumps over the crazydiv {line-height: 1em}; div div {font-size: 200%}
-The quick brown fox-
jumps over the crazy -The quick brown fox
jumps over the crazydiv {line-height: 100%}; div div {font-size: 200%}
-The quick brown fox-
jumps over the crazy -The quick brown fox
jumps over the crazy-- - - - - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/css_margin.html b/vendor/dompdf/dompdf/www/test/css_margin.html deleted file mode 100644 index 0efdc932a..000000000 --- a/vendor/dompdf/dompdf/www/test/css_margin.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - -When rendered according to the -css 2.1 spec, -the 200% text in the second two div divs, those for which line-height of the parent -are specified in em or %, will overlap, the child divs being 1/2 the height of their containing -divs; while the first div div will be 2/3 the height of its containing div, -and its text won't overlap. The overlapping text in the latter div divs is because the spec requires the calculated -line-height specified in em or % be inherited by the children. In contrast, it is <number> itself that is inherited by -the children, which allows the line-height specified to be applied in reference to the font-size of the child div instead of -the ancestor.
-
-IE has an additional problem with line-height. -
-(margin: 1em;) The PHP Development -Team would like to announce the immediate availability of PHP 5.0.1. This is -a maintenance release that in addition to many non-critical bug fixes also -includes new UNIX and Windows installation docs which are now auto-generated -from the PHP Manual.
- -(margin: 1em 1em 1em -50%;) PHP 4.3.9RC1 has been released for testing. This is the first -release candidate and should have a very low number of problems and/or -bugs. Nevertheless, please download and test it as much as possible on -real-life applications to uncover any remaining issues.
- -(margin: 4em 1em 4em -1em;) PHP Tunisie has just released the second issue of its monthly -french PHP Magazine. In this issue you'll find a large plan on PostgreSQL, -Databases abstractions with PHP, your mini template engine, an article on -images generation with PHP, the migration towards PHP5 with -EasyPHP1.7... And many other articles and latests PHP news.
- -(margin: 1em auto 1em -auto;) The traditional International PHP Conference 2004 will be -taking place from 7th November to 10th November in Frankfurt (FFM). The Call -for Papers has been issued, so if you have an interesting talk, the -organizers would love to hear about it! You can expect a gathering of PHP -experts and core developers.
- - - diff --git a/vendor/dompdf/dompdf/www/test/css_media.html b/vendor/dompdf/dompdf/www/test/css_media.html deleted file mode 100644 index d01cd732c..000000000 --- a/vendor/dompdf/dompdf/www/test/css_media.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - -css @media media types
--Depending on dompdf_config.inc.php setting DOMPDF_DEFAULT_MEDIA_TYPE here the -background color appeares different: -
--
- -- print: light gray
-- screen: light blue
-- projection: light yellow
-css @import media types
--Depending on dompdf_config.inc.php setting DOMPDF_DEFAULT_MEDIA_TYPE here the -background color appeares different: -
--
- -- print: light gray
-- screen or projection: light blue
-- all: this line yellow
-yellow by import css from subfolder
- -yellow by import css from absolute local folder. -Note: Only works if www\test\images/importabs.css was copied to /absimagetest/importabs.css -
- - -css link media types
--Depending on dompdf_config.inc.php setting DOMPDF_DEFAULT_MEDIA_TYPE here the -background color appeares different: -
--
- - -- print: light gray
-- screen or projection: light blue
-- all: this line yellow background with red color
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
- diff --git a/vendor/dompdf/dompdf/www/test/css_multiple_class.html b/vendor/dompdf/dompdf/www/test/css_multiple_class.html deleted file mode 100644 index c4f68d5dd..000000000 --- a/vendor/dompdf/dompdf/www/test/css_multiple_class.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - -class="a"
-class="b"
-class="c"
-class="a b"
-class="a b c"
- - diff --git a/vendor/dompdf/dompdf/www/test/css_nth_child.html b/vendor/dompdf/dompdf/www/test/css_nth_child.html deleted file mode 100644 index 1d4e48731..000000000 --- a/vendor/dompdf/dompdf/www/test/css_nth_child.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - -CSS Selector :nth-child - - - - - - - -nth-child(1)
--- -1
-2
-3
-4
-5
-nth-child(3)
--- -1
-2
-3
-4
-5
-nth-child(odd)
--- -1
-2
-3
-4
-5
-nth-child(even)
--- -1
-2
-3
-4
-5
-nth-child(n)
--- -1
-2
-3
-4
-5
-nth-child(3n)
--- -1
-2
-3
-4
-5
-nth-child(n+2)
--- -1
-2
-3
-4
-5
-nth-child(2n+1)
--- -1
-2
-3
-4
-5
-nth-child(3n-2)
--- - - diff --git a/vendor/dompdf/dompdf/www/test/css_opacity.html b/vendor/dompdf/dompdf/www/test/css_opacity.html deleted file mode 100644 index 733e568a3..000000000 --- a/vendor/dompdf/dompdf/www/test/css_opacity.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -1
-2
-3
-4
-5
-Nested block elements
- --- -----------------------
-
-
-
-
-
-
-
-
- -Inline elements
- - - ab - cb - ef - gh - ij - kl - mn - op - qr - st - - -
- - - ab - cb - ef - gh - ij - kl - mn - op - qr - st - - -0.1-0.2-0.3-0.4-0.5-0.6-0.7-0.8-0.9-1.0- -1.0 opacity-No opacity- --- - diff --git a/vendor/dompdf/dompdf/www/test/css_outline.html b/vendor/dompdf/dompdf/www/test/css_outline.html deleted file mode 100644 index 00ce313e0..000000000 --- a/vendor/dompdf/dompdf/www/test/css_outline.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - -- - -- --
- -- -The dotted gray line is the border box -- -dotted -dashed -solid -double -- -groove -ridge -inset -outset -partial attributes merged
- -outline:thin solid red;-outline:red thin solid;-{ outline:thin solid; }{outline:blue; } (merged, reset all - color has no effect)-{ outline:thin solid; }{outline-color:green; } (merged, overwrite only color)-{ outline:thin solid; }{outline:blue; } (merged, reset all - color has no effect)-{ outline:thin solid; }{outline-color:green; } (merged, overwrite only color)-{ outline:thin blue solid; }{outline-color:green; } (merged, overwrite only color)-{ outline:thin blue solid; }{outline-style:dashed; } (merged, overwrite only style)-{ outline:thin blue solid; }{outline-width:thick; } (merged, overwrite only width)-{ outline:thin blue solid; }{outline-width:medium; } (merged, overwrite only width)-{ outline:thin blue solid; }{outline-width:3pt; } (merged, overwrite only width)- - diff --git a/vendor/dompdf/dompdf/www/test/css_overflow_hidden.html b/vendor/dompdf/dompdf/www/test/css_overflow_hidden.html deleted file mode 100644 index a2bd29155..000000000 --- a/vendor/dompdf/dompdf/www/test/css_overflow_hidden.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -overflow: hidden
- - -overflow: visible
--- - - diff --git a/vendor/dompdf/dompdf/www/test/css_position_absolute.html b/vendor/dompdf/dompdf/www/test/css_position_absolute.html deleted file mode 100644 index dafdc4391..000000000 --- a/vendor/dompdf/dompdf/www/test/css_position_absolute.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - -- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. - Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. -
Printed document - - - - - - - - -- top/left --- top/right --- top/left/right -- -- top/left/right/bottom -- -- bottom/right --- bottom/left --- bottom/left/right -- - - - diff --git a/vendor/dompdf/dompdf/www/test/css_position_all.html b/vendor/dompdf/dompdf/www/test/css_position_all.html deleted file mode 100644 index 0007c6d7d..000000000 --- a/vendor/dompdf/dompdf/www/test/css_position_all.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - -Printed document - - - - - - - -Examples from
- -position: static -
http://www.barelyfitz.com/screencast/html-training/css/positioning/-- -position: relative -- -div-before
-- ---div-1
- --- -div-1a
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.
--- -div-1b
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.
--div-1c
-div-after
-- -position: absolute -- -div-before
-- ---div-1
- --- -div-1a
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.
--- -div-1b
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.
--div-1c
-div-after
-- -position: relative + position: absolute -- -div-before
-- ---div-1
- --- -div-1a
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.
--- -div-1b
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.
--div-1c
-div-after
-- -two column absolute -- -div-before
-- ---div-1
- --- -div-1a
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.
--- -div-1b
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.
--div-1c
-div-after
-- -two column absolute height -- -div-before
-- ---div-1
- --- -div-1a
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.
--- -div-1b
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.
--div-1c
-div-after
-- -float -- -div-before
-- ---div-1
- --- -div-1a
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.
--- -div-1b
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.
--div-1c
-div-after
-- -float columns -- -div-before
-- ---div-1
- --- -div-1a
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.
--- -div-1b
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.
--div-1c
-div-after
-- -float columns with clear -- -div-before
-- ---div-1
- --- -div-1a
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.
--- -div-1b
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.
--div-1c
-div-after
-- - - - diff --git a/vendor/dompdf/dompdf/www/test/css_position_fixed.html b/vendor/dompdf/dompdf/www/test/css_position_fixed.html deleted file mode 100644 index 6e12e0ca5..000000000 --- a/vendor/dompdf/dompdf/www/test/css_position_fixed.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - -- -div-before
-- ---div-1
- --- -div-1a
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.
--- -div-1b
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.
--div-1c
-div-after
Printed document - - - - - - - --- - - -- Header line 1-
- Header line 2
- Header line 3
- Header line 4
--- ----
Section 1
- -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non -risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, -ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula -massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci -nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit -amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat -in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero -pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo -in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue -blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus -et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed -pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales -hendrerit.
- -
- -Section 2
- -Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut -orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, -ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus -sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer -id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae -elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer -adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et -sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue -eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non -elementum posuere, metus purus iaculis lectus, et tristique ligula -justo vitae magna.
- -
- -Section 3
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- - diff --git a/vendor/dompdf/dompdf/www/test/css_selectors.html b/vendor/dompdf/dompdf/www/test/css_selectors.html deleted file mode 100644 index baa7b8feb..000000000 --- a/vendor/dompdf/dompdf/www/test/css_selectors.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - -a[target=equal_1] -a[target='equal_2'] -a[target="equal_3"] - -a[href$=ends_1] -a[href$='ends_2'] -a[href$="ends_3"] - --a[href*=contains_1] -a[href*='contains_2'] -a[href*="contains_3"] -
- -a[href^=starts_1] -a[href^='starts_2'] -a[href^="starts_3"] - - - diff --git a/vendor/dompdf/dompdf/www/test/css_table_height.html b/vendor/dompdf/dompdf/www/test/css_table_height.html deleted file mode 100644 index ec638b0a3..000000000 --- a/vendor/dompdf/dompdf/www/test/css_table_height.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -- -
- - diff --git a/vendor/dompdf/dompdf/www/test/css_table_layout_fixed.html b/vendor/dompdf/dompdf/www/test/css_table_layout_fixed.html deleted file mode 100644 index d8a74691e..000000000 --- a/vendor/dompdf/dompdf/www/test/css_table_layout_fixed.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - -- - -Some text -Insert title here - - -- -
- - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/css_text_align.html b/vendor/dompdf/dompdf/www/test/css_text_align.html deleted file mode 100644 index c795af25d..000000000 --- a/vendor/dompdf/dompdf/www/test/css_text_align.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -- -Reallyyyyyyyyyy Looooooong cell conteeeent -short -Normal cell content -- - -short -ReallyyyyyyyyyyLooooooong cell conteeeent -Normal cell content -text-align: left
--Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at odio vitae libero tempus -convallis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus -mus. Vestibulum purus mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel, adipiscing nec, massa. -- -
-Phasellus vitae felis sed lectus dapibus facilisis. In ultrices sagittis ipsum. In at est. Integer -iaculis turpis vel magna. Cras eu est. Integer porttitor ligula a tellus. Curabitur accumsan ipsum -a velit. Sed laoreet lectus quis leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque. -text-align: center
--Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at odio vitae libero tempus -convallis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus -mus. Vestibulum purus mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel, adipiscing nec, massa. -- -
-Phasellus vitae felis sed lectus dapibus facilisis. In ultrices sagittis ipsum. In at est. Integer -iaculis turpis vel magna. Cras eu est. Integer porttitor ligula a tellus. Curabitur accumsan ipsum -a velit. Sed laoreet lectus quis leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque. -text-align: right
--Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at odio vitae libero tempus -convallis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus -mus. Vestibulum purus mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel, adipiscing nec, massa. -- -
-Phasellus vitae felis sed lectus dapibus facilisis. In ultrices sagittis ipsum. In at est. Integer -iaculis turpis vel magna. Cras eu est. Integer porttitor ligula a tellus. Curabitur accumsan ipsum -a velit. Sed laoreet lectus quis leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque. -text-align: justify
--Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at odio vitae libero tempus -convallis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus -mus. Vestibulum purus mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel, adipiscing nec, massa. -- - - diff --git a/vendor/dompdf/dompdf/www/test/css_text_decoration.html b/vendor/dompdf/dompdf/www/test/css_text_decoration.html deleted file mode 100644 index 11015bf82..000000000 --- a/vendor/dompdf/dompdf/www/test/css_text_decoration.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - -
-Phasellus vitae felis sed lectus dapibus facilisis. In ultrices sagittis ipsum. In at est. Integer -iaculis turpis vel magna. Cras eu est. Integer porttitor ligula a tellus. Curabitur accumsan ipsum -a velit. Sed laoreet lectus quis leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque. -- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
- -- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
- -- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
- -- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
- -- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
-- underline line-through overline -
- - - diff --git a/vendor/dompdf/dompdf/www/test/css_vertical_align.html b/vendor/dompdf/dompdf/www/test/css_vertical_align.html deleted file mode 100644 index ac447a68c..000000000 --- a/vendor/dompdf/dompdf/www/test/css_vertical_align.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - --
test
-
test
-
test
-
test
-
test
-
test
-
test
- - - diff --git a/vendor/dompdf/dompdf/www/test/css_vertical_align_w3.html b/vendor/dompdf/dompdf/www/test/css_vertical_align_w3.html deleted file mode 100644 index d1e426bce..000000000 --- a/vendor/dompdf/dompdf/www/test/css_vertical_align_w3.html +++ /dev/null @@ -1,286 +0,0 @@ - - - -
test
CSS1 Test Suite: 5.4.4 vertical-align - - - - - - - -The style declarations which apply to the text below are:
-P {font-size: 12pt;} -.one {vertical-align: sub;} -.two {vertical-align: super;} -.three {vertical-align: top; font-size: 12pt;} -.four {vertical-align: text-top; font-size: 12pt;} -.five {vertical-align: middle; font-size: 12pt;} -.six {vertical-align: bottom; font-size: 12pt;} -.seven {vertical-align: text-bottom; font-size: 12pt;} -.eight {vertical-align: baseline; font-size: 12pt;} -.nine {vertical-align: 50%; font-size: 12px; line-height: 16px;} - -P.example {font-size: 14pt;} -BIG {font-size: 16pt;} -SMALL {font-size: 12pt;} -.ttopalign {vertical-align: text-top;} -.topalign {vertical-align: top;} -.midalign {vertical-align: middle;} - --
--
-The first four words in this sentence should be subscript-aligned. The font size of the superscripted text should not be different from that of the parent element. -
-
-The first four words in this sentence should be superscript-aligned. The font size of the subscripted text should not be different from that of the parent element. -
-
-The first four words in this sentence should be top-aligned, which will align their tops with the top of the tallest element in the line (probably the orange rectangle). -
-
-- -The first four words in this sentence should be text-top-aligned, which should align their tops with the top of the tallest text in the line. - -
-
--The image at the beginning of this sentence should be middle-aligned, which should align its middle with the point defined as the text baseline plus half the x-height. -
-
-- -The first four words in this sentence should be 12pt in size and bottom-aligned, which should align their bottom with the bottom of the lowest element in the line. - -
-
-- -The first eight words ("eight" has a descender) in this sentence should be 12pt in size and text-bottom-aligned, which should align their bottom with the bottom of the lowest text (including descenders) in the line. - -
-
-- -The first four words in this sentence should be 12pt in size and baseline-aligned, which should align their baseline with the baseline of the rest of the text in the line. - -
-
-The first four words in this sentence should have a font-size of 12px and a line-height of 16px; they are also 50%-aligned, which should raise them 8px relative to the natural baseline. -
-In the following paragraph, all images should be aligned with the top of the 14-point text, which is identical to the first section of text, whereas any size text should be aligned with the text baseline (which is the default value). -
--This paragraph -
--contains many images -
-of varying heights -
-and widths -
-all of which -
-should be aligned -
-with the top of -
-a 14-point text element -
-regardless of the line in which -
-the images appear. -
-
-In the following paragraph, all images should be aligned with the middle of the default text, whereas any text should be aligned with the text baseline (which is the default value). -
--This paragraph -
--contains many images -
-of varying heights -
-and widths -
-all of which -
-should be aligned -
-with the middle of -
-a 14-point text element -
-regardless of the line in which -
-the images appear. -
-
-In the following paragraph, all elements should be aligned with the top of the tallest element on the line, whether that element is an image or not. Each fragment of text has been SPANned appropriately in order to cause this to happen. -
--This paragraph -
- - -TABLE Testing Section - --contains many images -
-and some text -
-of varying heights -
-and widths -
-all of which -
-should be aligned -
-with the top of -
-the tallest element in -
-whichever line the elements appear. -
-
-
-The first four words in this sentence should be subscript-aligned. The font size of the superscripted text should not be different from that of the parent element. -
-
-The first four words in this sentence should be superscript-aligned. The font size of the subscripted text should not be different from that of the parent element. -
-
-The first four words in this sentence should be top-aligned, which will align their tops with the top of the tallest element in the line (probably the orange rectangle). -
-
-- -The first four words in this sentence should be text-top-aligned, which should align their tops with the top of the tallest text in the line. - -
-
--The image at the beginning of this sentence should be middle-aligned, which should align its middle with the point defined as the text baseline plus half the x-height. -
-
-- -The first four words in this sentence should be 12pt in size and bottom-aligned, which should align their bottom with the bottom of the lowest element in the line. - -
-
-- -The first eight words ("eight" has a descender) in this sentence should be 12pt in size and text-bottom-aligned, which should align their bottom with the bottom of the lowest text (including descenders) in the line. - -
-
-- -The first four words in this sentence should be 12pt in size and baseline-aligned, which should align their baseline with the baseline of the rest of the text in the line. - -
-
-The first four words in this sentence should have a font-size of 12px and a line-height of 16px; they are also 50%-aligned, which should raise them 8px relative to the natural baseline. -
-In the following paragraph, all images should be aligned with the top of the 14-point text, which is identical to the first section of text, whereas any size text should be aligned with the text baseline (which is the default value). -
--This paragraph -
--contains many images -
-of varying heights -
-and widths -
-all of which -
-should be aligned -
-with the top of -
-a 14-point text element -
-regardless of the line in which -
-the images appear. -
-
-In the following paragraph, all images should be aligned with the middle of the default text, whereas any text should be aligned with the text baseline (which is the default value). -
--This paragraph -
--contains many images -
-of varying heights -
-and widths -
-all of which -
-should be aligned -
-with the middle of -
-a 14-point text element -
-regardless of the line in which -
-the images appear. -
-
-In the following paragraph, all elements should be aligned with the top of the tallest element on the line, whether that element is an image or not. Each fragment of text has been SPANned appropriately in order to cause this to happen. -
--This paragraph -
- - diff --git a/vendor/dompdf/dompdf/www/test/css_whitespace.html b/vendor/dompdf/dompdf/www/test/css_whitespace.html deleted file mode 100644 index 5d9ef8882..000000000 --- a/vendor/dompdf/dompdf/www/test/css_whitespace.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - --contains many images -
-and some text -
-of varying heights -
-and widths -
-all of which -
-should be aligned -
-with the top of -
-the tallest element in -
-whichever line the elements appear. -
-
CSS white-space property - - - - - - --- - - diff --git a/vendor/dompdf/dompdf/www/test/css_word_wrap.html b/vendor/dompdf/dompdf/www/test/css_word_wrap.html deleted file mode 100644 index b0b1853d8..000000000 --- a/vendor/dompdf/dompdf/www/test/css_word_wrap.html +++ /dev/null @@ -1,36 +0,0 @@ - - -CSS white-space property
-Given this CSS code:
--p { - width:100px; - background-color:orange; - margin:10px 0; - font-family:monospace; -} --and this HTML code:
--<p> -P - A - R - A - G - R - A - P - H -</p> --Depending on the white-space property, the resulting presentation will be:
-
-normal
--P - A - R - A - G - R - A - P - H -
-
-nowrap
--P - A - R - A - G - R - A - P - H -
-
-pre
--P - A - R - A - G - R - A - P - H -
-
-pre-wrap
--P - A - R - A - G - R - A - P - H -
-
-pre-line
--P - A - R - A - G - R - A - P - H -
- -- - - - - - break-word
--- -I'm a veeeeeeeerryyyyyy loooooooonggggggg teeeeexxxtttt
-http://www.w3.org/TR/2011/WD-css3-text-20110412/
-normal
--- - - diff --git a/vendor/dompdf/dompdf/www/test/css_z_index.html b/vendor/dompdf/dompdf/www/test/css_z_index.html deleted file mode 100644 index 0c097ae0e..000000000 --- a/vendor/dompdf/dompdf/www/test/css_z_index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - -I'm a veeeeeeeerryyyyyy loooooooonggggggg teeeeexxxtttt
-http://www.w3.org/TR/2011/WD-css3-text-20110412/
-z-index - - - - -- z-index: 3, order: 1 -- -- z-index: 2, order: 2 -- -- z-index: 1, order: 3 -- -- z-index: auto, order: 1 -- -- z-index: auto, order: 2 -- -- z-index: auto, order: 3 -- - - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/demo_01.html b/vendor/dompdf/dompdf/www/test/demo_01.html deleted file mode 100644 index d4696381a..000000000 --- a/vendor/dompdf/dompdf/www/test/demo_01.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - - -- -- - - - - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/dom_anchor_link.html b/vendor/dompdf/dompdf/www/test/dom_anchor_link.html deleted file mode 100644 index bc9399ab5..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_anchor_link.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - --- -- ---- --
- -- -- SCHEDULE A
- Job: 132-003
-
- -- - -Job: 132-003 -Purchasers(s): Palmer -- - -Created: 2004-08-13 -Last Change: 2004-08-16 9:28 AM -- -Address: 667 Pine Lodge Dr. -Legal: N/A -- -
- -- - -Model: Franklin -Elevation: B -Size: 1160 Cu. Ft. -Style: Reciprocating -- -
- -- - - Standard Items:
- - -Item -Description -Quantity -Unit Cost -Total -- - - -1 -Sprockets (13 tooth) -50 -$10.00 -Ea. -$5,000.00 -- - -2 -Cogs (Cylindrical) -45 -$25.00 -Ea. -$1125.00 -- - -3 -Gears (15 tooth) -32 -$19.00 -Ea. -$608.00 -- - -4 -Leaf springs (13 N/m) -6 -$125.00 -Ea. -$750.00 -- - - - - - - -5 -Coil springs (6 N/deg) -7 -$11.00 -Ea. -$77.00 -- -(Tax is not included; it will be collected on closing.) -GRAND TOTAL: -$7560.00 - -
- -- -WITNESS: - PURCHASER: X -- - -- Mr. Leland Palmer -- - -This change order shall have no force or effect until approved and signed -by an authorizing signing officer of the supplier. Any change or special -request not noted on this document is not contractual. - -- -ACCEPTED THIS - -DAY OF , -20 . - - -TWIN PEAKS SUPPLY LTD. -
-PER: - -Lorem ipsum dolor sit amet
-Anchor 1
- - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at -odio vitae libero tempus convallis. Cum sociis natoque penatibus et -magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus -mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel, -adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus -facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis -turpis vel magna. Cras eu est. Integer porttitor ligula a -tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis -leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque.
- -Curabitur ut diam eu dui vestibulum pharetra. Nam pellentesque, justo -non hendrerit venenatis, mi orci pretium mi, et vehicula leo arcu quis -diam. Nullam mattis laoreet quam. Morbi mollis sem ut tellus. Nam mi -massa, lobortis eu, sollicitudin et, iaculis et, massa. Maecenas purus -mauris, luctus sit amet, pharetra in, facilisis sit amet, elit. Nullam -vel erat tempus purus molestie suscipit. Vestibulum odio lorem, -sollicitudin non, volutpat sit amet, tincidunt vel, nunc. Nulla quis -ante vestibulum odio feugiat facilisis. Proin lorem nisl, viverra at, -rhoncus quis, semper nec, mi. Donec euismod enim vitae velit. Nulla -sed lectus. Vivamus placerat, lacus sed vehicula sagittis, arcu massa -adipiscing lorem, bibendum luctus nisl tortor vitae leo.
- -Etiam a mauris. Proin justo elit, accumsan sit amet, tempus et, -blandit id, tellus. Morbi varius, nisi id iaculis aliquam, lacus -ligula facilisis velit, ac pharetra ipsum augue a massa. Etiam rhoncus -commodo orci. Mauris ullamcorper sagittis turpis. Nullam magna libero, -sagittis sed, auctor faucibus, accumsan vitae, urna. Pellentesque -volutpat. Aliquam sapien ipsum, eleifend nec, imperdiet vitae, -consectetuer id, quam. Donec a urna. Suspendisse sit amet -velit. Curabitur quis nisi id dui viverra ornare. Sed condimentum enim -quis tortor. Ut condimentum, magna non tempus tincidunt, leo nibh -molestie tellus, vitae convallis dolor ante sed ante. Nunc et -metus. Phasellus ultricies. Fusce faucibus tortor sit amet mauris.
- -Aliquam enim. Duis et diam. Praesent porta, mauris quis pellentesque -volutpat, erat elit vulputate eros, vitae pulvinar augue velit sit -amet sem. Fusce eu urna eu nisi condimentum posuere. Vivamus sed -felis. Duis eget urna vitae eros interdum dignissim. Proin justo eros, -eleifend in, porttitor in, malesuada non, neque. Etiam sed -augue. Nulla sit amet magna. Lorem ipsum dolor sit amet, consectetuer -adipiscing elit. Mauris facilisis. Curabitur massa magna, pulvinar a, -nonummy eget, egestas vitae, mauris. Quisque vel elit sit amet lorem -malesuada facilisis. Vestibulum porta, metus sit amet egestas -interdum, urna justo euismod erat, id tristique urna leo quis -nibh. Morbi non erat.
- -Cras fringilla, nulla id egestas elementum, augue nunc iaculis nibh, -ac adipiscing nibh justo id tortor. Donec vel orci a nisi ultricies -aliquet. Nunc urna quam, adipiscing molestie, vehicula non, -condimentum non, magna. Integer magna. Donec quam metus, pulvinar id, -suscipit eget, euismod ac, orci. Nulla facilisi. Nullam nec -mauris. Morbi in mi. Etiam urna lectus, pulvinar ac, sollicitudin eu, -euismod ac, lectus. Fusce elit. Sed ultricies odio ac felis.
- -Cras iaculis. Nulla facilisi.
-Anchor 2
- -Cras iaculis. Nulla facilisi. Fusce vitae arcu. Integer lectus mauris, -ornare vel, accumsan eget, scelerisque vel, nunc. Maecenas justo urna, -volutpat vel, vehicula vel, ullamcorper nec, odio. Suspendisse laoreet -nisi sed erat. Cras convallis sollicitudin sapien. Phasellus ac erat -eu mi rutrum rhoncus. Morbi et velit. Morbi odio nisi, pharetra eget, -sollicitudin sed, aliquam at, nisl. Quisque euismod diam in -sapien. Integer accumsan urna in risus.
- -Proin sit amet nisl. Phasellus dui ipsum, laoreet a, pulvinar id, -fringilla ut, libero. In hac habitasse platea dictumst. Maecenas mi -magna, cursus sed, rutrum eget, molestie nec, dui. Suspendisse -lacus. Vivamus nibh urna, accumsan sit amet, gravida sed, convallis a, -leo. Cras sollicitudin orci sit amet eros. Pellentesque eu odio et -velit tempor dignissim. Morbi vehicula malesuada enim. Pellentesque -tincidunt, tellus ac fringilla tempor, justo libero interdum nunc, eu -sollicitudin tortor augue nec tellus. Nullam eget leo quis tellus -gravida faucibus. Nam gravida. Curabitur rhoncus egestas -nunc. Curabitur mollis, nisi sed suscipit gravida, enim felis interdum -justo, vel accumsan magna nunc ut libero. Ut fermentum. Fusce luctus, -est sit amet feugiat lobortis, nisl eros bibendum libero, ut suscipit -felis ligula in massa. Proin congue elit et nisi. Cras ac nisl. Nunc -ullamcorper neque vel diam.
- -Ut pellentesque arcu ac lectus.
-Sed ac lorem. Ut pellentesque arcu ac lectus. Cum sociis natoque -penatibus et magnis dis parturient montes, nascetur ridiculus -mus. Pellentesque ultrices metus sollicitudin pede. Donec fermentum -est a velit fringilla mollis. Duis ligula. Fusce viverra laoreet -odio. Suspendisse sit amet ligula. Maecenas nunc velit, sagittis eu, -bibendum eu, placerat at, nibh. Praesent ut erat eget nisi gravida -imperdiet. Quisque vitae sapien. Ut eros.
- -Donec eros ligula, dignissim vel, ultricies id, mattis in, massa. Duis -lobortis dui nec orci. Sed ullamcorper metus non massa. Aliquam eget -mauris ac nulla elementum posuere. Sed porta, augue vitae rhoncus -aliquet, felis quam eleifend est, vitae rutrum metus arcu vel -lorem. Proin laoreet, mauris sit amet aliquet eleifend, nisl sem -molestie nisi, eu varius eros ligula non erat. Integer ac -sem. Suspendisse lectus. Aliquam erat volutpat. Fusce sit amet leo -faucibus erat molestie ultrices. Maecenas lacinia lectus eget -dui. Etiam porta porttitor ante. Phasellus sit amet lacus adipiscing -enim mollis iaculis. Fusce congue, nulla a commodo aliquam, erat dui -fermentum dui, pellentesque faucibus orci enim at mauris. Pellentesque -a diam porta magna tempor posuere. Donec lorem.
- -Sed viverra aliquam turpis. Aliquam lacus. Duis id massa. Nullam -ante. Suspendisse condimentum. Donec adipiscing, felis vel semper -sollicitudin, lacus justo pretium est, sed blandit pede risus eu -ante. Praesent ante nulla, fringilla id, ultrices et, feugiat a, -metus. Proin ac velit a metus suscipit fermentum. Integer aliquet. Sed -sapien nulla, placerat at, rutrum at, condimentum quis, libero. In -accumsan, tellus nec tincidunt malesuada, pede arcu commodo ipsum, ac -mattis tortor urna vitae enim. Aenean nonummy, mauris eget commodo -bibendum, augue sem ultrices nunc, eget rhoncus metus erat placerat -lectus. Aliquam mollis lectus in justo. Vivamus iaculis lacus sit amet -ligula. Etiam consectetuer convallis diam. Curabitur sollicitudin, -felis eu vehicula scelerisque, nisl urna aliquam orci, sit amet -laoreet mi turpis id ligula. Donec at enim non nulla adipiscing -dapibus. Aenean nisl.
- -Ut in lacus nec enim volutpat pellentesque. Integer euismod. In odio -eros, malesuada in, mattis vel, tempor nec, sem. In libero tellus, -varius vitae, bibendum in, elementum quis, nisl. Duis tortor. Etiam at -justo. Pellentesque facilisis mauris non nunc. Praesent eros mi, -dapibus eget, placerat ac, lobortis quis, sem. Nulla rhoncus -turpis. Nulla vitae mi. Proin id massa. Nunc eros.
- -Aliquam molestie pulvinar ligula.
-Anchor 3
- -Vestibulum dui risus, varius ut, semper et, consequat ultrices, -felis. Pellentesque iaculis urna in velit. Ut pharetra. Nunc -fringilla, nisi vitae fringilla placerat, enim justo semper erat, -mollis feugiat leo neque eu sem. Vestibulum orci urna, suscipit a, -accumsan nec, fringilla in, risus. Nullam ante. Nullam nec -eros. Nullam varius. Nulla facilisi. In auctor libero in -metus. Aliquam porttitor congue eros. Nulla facilisi. Mauris euismod -turpis ut felis. Ut nunc nisl, cursus quis, eleifend at, viverra -bibendum, lacus. Donec consequat lacus eu sapien. Fusce pulvinar -lectus quis nunc. In hac habitasse platea dictumst.
- -Aliquam molestie pulvinar ligula. Maecenas imperdiet, urna eget -ultrices adipiscing, nibh ante elementum neque, id molestie massa quam -ut nunc. Nullam porta. Phasellus a magna in sem volutpat -viverra. Quisque aliquet nunc ac turpis. Mauris dolor enim, viverra -rutrum, placerat et, laoreet et, justo. In id nulla. Donec -erat. Phasellus nec mi sed velit mollis cursus. Vestibulum -tincidunt. Praesent dui libero, facilisis eu, vulputate eget, aliquet -nec, ipsum. Pellentesque in nisl in mauris pretium euismod.
- - diff --git a/vendor/dompdf/dompdf/www/test/dom_br.html b/vendor/dompdf/dompdf/www/test/dom_br.html deleted file mode 100644 index 2402bf858..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_br.html +++ /dev/null @@ -1,46 +0,0 @@ - - -- - - Line break test
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at -odio vitae libero tempus convallis. Cum sociis natoque penatibus et -magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus -mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel,
- -
-adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus -facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis -turpis vel magna. Cras eu est. Integer porttitor ligula a -
-
-tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis -leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque.Line break at beginning of next paragraph:
-- -
-Line 2Line break within a font tag: -ABCDE
- -
FGHIJKLine break within two nested spans: span 1 2
- -
breakLorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at -odio vitae libero tempus convallis. Cum sociis natoque penatibus et -magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus -mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel,
- - - diff --git a/vendor/dompdf/dompdf/www/test/dom_form_fieldset.html b/vendor/dompdf/dompdf/www/test/dom_form_fieldset.html deleted file mode 100644 index 7df43970c..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_form_fieldset.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - -
-adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus -facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis -turpis vel magna. Cras eu est. Integer porttitor ligula a -
-
-tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis -leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque.Insert title here - - - - - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/dom_large_table.html b/vendor/dompdf/dompdf/www/test/dom_large_table.html deleted file mode 100644 index 0bf544970..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_large_table.html +++ /dev/null @@ -1,2198 +0,0 @@ - - - - - - - - --
- -- - -- - -SCHEDULE A
-- -404-135 - Schedule A
-APPROVED: 2004-11-18 -- -
- -- - -Job: -404-135 -Purchasers: --Komant -- - -Created: -2004-09-28 -Last change: -2004-11-18 - -- -Job address: -2904-26 Street -Legal: -28B/22/032-5210 --
- - -- - -Model: -- Elevation: -- Size: -- Style: -- - -
- - - -Item -Description -Quantity -Unit Cost -Total -- - -Standard items: -1 -add bank of drawers - to bathroom vanity -2 -$125.00 -Ea. -$250.00 -2 -add sweep outlet - central vac -1 -$100.00 -Ea. -$100.00 -3 -run central vac rough in to attached garage c/w separate circuit -1 -$120.00 -Ea. -$120.00 -4 -add fan to FIREPLACE -1 -$195.00 -Ea. -$195.00 -5 -upgrade to laminate flooring - Entire Main Floor -1 -$2,400.00 -Ea. -$2,400.00 -6 -upgrade oh door to insulated (9ft) -1 -$95.00 -Ea. -$95.00 -7 -change upper stairwell ledge to painted MDF -1 -$45.00 -Ea. -$45.00 -8 -upgrade standard door to pocket door -1 -$145.00 -Ea. -$145.00 -- - 9 -add RIDP -1 -$400.00 -Ea. -$400.00 -- - -Standard items: -1 -add bank of drawers - to bathroom vanity -2 -$125.00 -Ea. -$250.00 -2 -add sweep outlet - central vac -1 -$100.00 -Ea. -$100.00 -3 -run central vac rough in to attached garage c/w separate circuit -1 -$120.00 -Ea. -$120.00 -4 -add fan to FIREPLACE -1 -$195.00 -Ea. -$195.00 -5 -upgrade to laminate flooring - Entire Main Floor -1 -$2,400.00 -Ea. -$2,400.00 -6 -upgrade oh door to insulated (9ft) -1 -$95.00 -Ea. -$95.00 -7 -change upper stairwell ledge to painted MDF -1 -$45.00 -Ea. -$45.00 -8 -upgrade standard door to pocket door -1 -$145.00 -Ea. -$145.00 -- - 9 -add RIDP -1 -$400.00 -Ea. -$400.00 -- - -Custom items: -- -1 -upgrade to brushed chrome hardware -1 -$195.00 -Ea. -$195.00 -- -2 -box out FIREPLACE as per plan attached -1 -$250.00 -Ea. -$250.00 -- -3 -reduce WIC size by 6" to 8" to allow for large vanity ensuite -1 -$0.00 -Ea. -$0.00 -- -4 -add gas line to basement for future gas FP -1 -$300.00 -Ea. -$300.00 -- -5 -add pocket dorr to ensuite joining WIC and Ensuite. Delete 2 existing doors -1 -$0.00 -Ea. -$0.00 -- -6 -Main floor to be ISLAND Kitchen design -1 -$0.00 -Ea. -$0.00 -- - -7 -price adjustment -1 -($0.37) -Ea. -($0.37) -- - -Custom items: -- -1 -upgrade to brushed chrome hardware -1 -$195.00 -Ea. -$195.00 -- -2 -box out FIREPLACE as per plan attached -1 -$250.00 -Ea. -$250.00 -- -3 -reduce WIC size by 6" to 8" to allow for large vanity ensuite -1 -$0.00 -Ea. -$0.00 -- -4 -add gas line to basement for future gas FP -1 -$300.00 -Ea. -$300.00 -- - - - - -5 -add pocket dorr to ensuite joining WIC and Ensuite. Delete 2 existing doors -1 -$0.00 -Ea. -$0.00 -- - - -(GST is not included) -Grand total: -$4,494.63 --- - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/dom_long_table.php b/vendor/dompdf/dompdf/www/test/dom_long_table.php deleted file mode 100644 index 86cf2391c..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_long_table.php +++ /dev/null @@ -1,43 +0,0 @@ - - - -- -
-- -WITNESS: - PURCHASER: -X -- -- - Tammy Komant -This change order shall have no force or effect until approved and signed -by an authorizing signing officer of the Builder. Any change or special -request not noted on this document is not contractual.
- --
-- - -ACCEPTED THIS -18 DAY OF NOVEMBER, 2004 - - -LINCOLNBERG COMMUNITIES -
-PER: -Keith Jansen -- -
- - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/dom_nbsp.html b/vendor/dompdf/dompdf/www/test/dom_nbsp.html deleted file mode 100644 index a47a29493..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_nbsp.html +++ /dev/null @@ -1,29 +0,0 @@ - - - -- - - -Header -- - - -Footer --" . ($i * $j) . "\n"; -} -?> - - -Non-breaking space - - - -Non-breaking space representations:
--
-- Non-breaking space character - -   -   With non-breaking space: a b c
-Without non-breaking space: a b c
-- no wrap - no wrap - no wrap - no wrap - no wrap - no wrap - no wrap - no wrap -- - diff --git a/vendor/dompdf/dompdf/www/test/dom_nested_table.html b/vendor/dompdf/dompdf/www/test/dom_nested_table.html deleted file mode 100644 index c141ad283..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_nested_table.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - --
- -- -- --
-- -foo -- -bar --
- - - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/dom_ol.html b/vendor/dompdf/dompdf/www/test/dom_ol.html deleted file mode 100644 index 2957cb80a..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_ol.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - -- -- --
-- -- --
-- -a -- -b -c -d -- -e -f -- -g -h -none
--
- -- Item 1
-- Item 2
-- Item 3
-decimal
--
- -- Item 1
-- Item 2
-- Item 3
-lower-alpha
--
- -- Item 1
-- Item 2
-- Item 3
-lower-latin
--
- -- Item 1
-- Item 2
-- Item 3
-lower-roman
--
- -- Item 1
-- Item 2
-- Item 3
-lower-greek
--
- -- Item 1
-- Item 2
-- Item 3
-upper-alpha
--
- -- Item 1
-- Item 2
-- Item 3
-upper-latin
--
- -- Item 1
-- Item 2
-- Item 3
-upper-roman
--
- -- Item 1
-- Item 2
-- Item 3
-Advanced
--
- -- Item 1
-- Item 2 -
--
-- Item 1 -
--
-- Item 1
-- Item 2
-- Item 3
-- Item 2
-- Item 3 -
--
-- Item 1
-- Item 2
-- Item 3
-- Item 3
-"start" attribute (8)
--
- -- Item 1
-- Item 2
-- Item 3
-"value" attributes (1, 5, none)
--
- -- Item 1
-- Item 2
-- Item 3
-decimal-leading-zero
--
- - - diff --git a/vendor/dompdf/dompdf/www/test/dom_simple_ul.html b/vendor/dompdf/dompdf/www/test/dom_simple_ul.html deleted file mode 100644 index 1d6bd9598..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_simple_ul.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - -- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-- Item #
-Here's a simple list from my favourite website:
- --
- - diff --git a/vendor/dompdf/dompdf/www/test/dom_table.html b/vendor/dompdf/dompdf/www/test/dom_table.html deleted file mode 100644 index 1997cbd2e..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_table.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - -border-collapse: separate -- The Zend Engine II with a new object model and dozens of new features.
- -- XML support has been completely redone in PHP 5, all extensions are - now focused around the excellent libxml2 library - (http://www.xmlsoft.org/).
- -- A new SimpleXML extension for easily accessing and manipulating XML - as PHP objects. It can also interface with the DOM extension and - vice-versa.
- -- A brand new built-in SOAP extension for interoperability with Web Services.
- -- A new MySQL extension named MySQLi for developers using MySQL 4.1 and - later. This new extension includes an object-oriented interface in - addition to a traditional interface; as well as support for many of - MySQL's new features, such as prepared statements.
- -- SQLite has been bundled with PHP. For more information on SQLite, - please visit their website.
- -- Streams have been greatly improved, including the ability to access low-level socket operations on streams.
- -- And lots more...
- --
- Sublists
- work
- too!
- -
- -border-collapse: collapse -- - -head 1 -head 2 -head 3 -head 4 -- -cell 1 -cell 2 -cell 3 -- -cell 4 -cell 5 -- -cell 6 -- -cell 7 -- -
- - - diff --git a/vendor/dompdf/dompdf/www/test/dom_table_image.html b/vendor/dompdf/dompdf/www/test/dom_table_image.html deleted file mode 100644 index f563a3805..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_table_image.html +++ /dev/null @@ -1,19 +0,0 @@ - - -- - - -head 1 -head 2 -head 3 -head 4 -- -cell 1 -cell 2 -cell 3 -cell 4 -- -cell 5 -cell 6 -cell 7 -- - -cell 8 -cell 9 -cell 10 -- -cell 11 -- - - -
- - - diff --git a/vendor/dompdf/dompdf/www/test/dom_ul.html b/vendor/dompdf/dompdf/www/test/dom_ul.html deleted file mode 100644 index 7d64ec732..000000000 --- a/vendor/dompdf/dompdf/www/test/dom_ul.html +++ /dev/null @@ -1,312 +0,0 @@ - - - - - - - - -- -- Some Text -- -More Text -Blah --
- -- Item 1
-- Item 2
-- Item 3
--
- Sub 1
-- Sub 2
-- Sub 3
--
- -- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at -odio vitae libero tempus convallis. Cum sociis natoque penatibus et -magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus -mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel, -adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus -facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis -turpis vel magna. Cras eu est. Integer porttitor ligula a -tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis -leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque.
-- Curabitur ut diam eu dui vestibulum pharetra. Nam pellentesque, justo -non hendrerit venenatis, mi orci pretium mi, et vehicula leo arcu quis -diam. Nullam mattis laoreet quam. Morbi mollis sem ut tellus. Nam mi -massa, lobortis eu, sollicitudin et, iaculis et, massa. Maecenas purus -mauris, luctus sit amet, pharetra in, facilisis sit amet, elit. Nullam -vel erat tempus purus molestie suscipit. Vestibulum odio lorem, -sollicitudin non, volutpat sit amet, tincidunt vel, nunc. Nulla quis -ante vestibulum odio feugiat facilisis. Proin lorem nisl, viverra at, -rhoncus quis, semper nec, mi. Donec euismod enim vitae velit. Nulla -sed lectus. Vivamus placerat, lacus sed vehicula sagittis, arcu massa -adipiscing lorem, bibendum luctus nisl tortor vitae leo.
-- Inside. Aliquam enim. Duis et diam. Praesent porta, mauris quis pellentesque -volutpat, erat elit vulputate eros, vitae pulvinar augue velit sit -amet sem. Fusce eu urna eu nisi condimentum posuere. Vivamus sed -felis. Duis eget urna vitae eros interdum dignissim. Proin justo eros, -eleifend in, porttitor in, malesuada non, neque. Etiam sed -augue. Nulla sit amet magna. Lorem ipsum dolor sit amet, consectetuer -adipiscing elit. Mauris facilisis. Curabitur massa magna, pulvinar a, -nonummy eget, egestas vitae, mauris. Quisque vel elit sit amet lorem -malesuada facilisis. Vestibulum porta, metus sit amet egestas -interdum, urna justo euismod erat, id tristique urna leo quis -nibh. Morbi non erat.
--
- -- Item 1 disc
-- Item 2 disc
-- Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Item 4 disc
--
- -- Item 1 circle
-- Item 2 circle
-- Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Item 4 circle
--
- -- Item 1 square
-- Item 2 square
-- Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Item 4 square
--
- -- Item 1 image
-- Item 2 image
-- Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Item 4 image
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Outside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Item 7 noimage
- --
- -- sub Item 1 image
-- sub Item 2 image
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Outside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- sub Item 5 noimage
--
- -- Item 1 missing image - fallback square
-- Item 2 missing image - fallback square
-- Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Item 4 missing image - fallback square
--
- -- Item 1 nobullet
-- Item 2 nobullet
-- Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Item 4 nobullet
--
- -- Item 1 missing image - fallback none
-- Item 2 missing image - fallback none
-- Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Item 4 missing image - fallback none
--
- -- Item 1 bigimage
-- Item 2 bigimage
-- Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Item 4 bigimage
--
- -- margin Item 1 image
-- margin Item 2 image
-- Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- margin Item 4 image
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Outside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- margin Item 7 noimage
- --
- -- margin sub Item 1 image
-- margin sub Item 2 image
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- Outside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-- margin sub Item 5 noimage
--
- -- padding Item 1 image
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
--
-- padding sub Item 1 image
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
--
- -- margin Item 1 square
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
--
-- margin sub Item 1 square
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
--
- -- padding Item 1 square
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
--
-- padding sub Item 1 square
-- Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, -sed diam nonumy eirmod tempor invidunt ut labore et dolore magna -aliquyam erat, sed diam voluptua. At vero eos et accusam et justo -duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata -sanctus est Lorem ipsum dolor sit amet.
-combined list attributes list-style
- --
-- list-style:square inside url(dummy.png);
-- list-style:outside;[overwrites only position]
--
- - - diff --git a/vendor/dompdf/dompdf/www/test/encoding_entities.html b/vendor/dompdf/dompdf/www/test/encoding_entities.html deleted file mode 100644 index 1b7fc6b37..000000000 --- a/vendor/dompdf/dompdf/www/test/encoding_entities.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - -- list-style:square inside url(images/png.png);
-- list-style-position:outside;[overwrites only position]
-- list-style-position:outside;[overwrite attributes - firefox3: all; dompdf, internet explorer 8: only position]
-- list-style:none; [resets both, bullet and image]
-é © « avoir et être α β
-é © « avoir et être α β
- \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/encoding_latin1.html b/vendor/dompdf/dompdf/www/test/encoding_latin1.html deleted file mode 100644 index a0468db1d..000000000 --- a/vendor/dompdf/dompdf/www/test/encoding_latin1.html +++ /dev/null @@ -1,1162 +0,0 @@ - - - - -HTML 4.0 Latin-1 Entities - - - - - - -Latin-1 Entities
- -The following table gives the character entity reference, decimal -character reference, and hexadecimal character reference for 8-bit -characters in the Latin-1 (ISO-8859-1) character set, as well as the -rendering of each in your browser. Glyphs of the characters are -available at the Unicode -Consortium.
- -Browser support is generally best for the decimal character -references, except for the accented characters (decimal 192-214, -216-246, 248-255), where the character entity references hold a slight -edge.
- -Note that most Mac browsers will render fourteen Latin-1 characters -incorrectly. These characters are decimal 166, 178, 179, 185, 188, -189, 190, 208, 215, 221, 222, 240, 253, and 254. See ISO-8859-1 -and the Mac platform for more information.
- -- -
- - - - diff --git a/vendor/dompdf/dompdf/www/test/encoding_special.html b/vendor/dompdf/dompdf/www/test/encoding_special.html deleted file mode 100644 index 5f9b42d10..000000000 --- a/vendor/dompdf/dompdf/www/test/encoding_special.html +++ /dev/null @@ -1,570 +0,0 @@ - - - - -- -Character -Entity -Decimal -Hex -Rendering in Your Browser -- - - -Entity -Decimal -Hex -- -no-break space = non-breaking space - -  -  -- - - - -inverted exclamation mark -¡ -¡ -¡ -¡ -¡ -¡ -- -cent sign -¢ -¢ -¢ -¢ -¢ -¢ -- -pound sign -£ -£ -£ -£ -£ -£ -- -currency sign -¤ -¤ -¤ -¤ -¤ -¤ -- -yen sign = yuan sign -¥ -¥ -¥ -¥ -¥ -¥ -- -broken bar = broken vertical bar -¦ -¦ -¦ -¦ -¦ -¦ -- -section sign -§ -§ -§ -§ -§ -§ -- -diaeresis = spacing diaeresis -¨ -¨ -¨ -¨ -¨ -¨ -- -copyright sign -© -© -© -© -© -© -- -feminine ordinal indicator -ª -ª -ª -ª -ª -ª -- -left-pointing double angle quotation mark = left pointing guillemet -« -« -« -« -« -« -- -not sign -¬ -¬ -¬ -¬ -¬ -¬ -- -soft hyphen = discretionary hyphen -­ -­ -­ - - - -- -registered sign = registered trade mark sign -® -® -® -® -® -® -- -macron = spacing macron = overline = APL overbar -¯ -¯ -¯ -¯ -¯ -¯ -- -degree sign -° -° -° -° -° -° -- -plus-minus sign = plus-or-minus sign -± -± -± -± -± -± -- -superscript two = superscript digit two = squared -² -² -² -² -² -² -- -superscript three = superscript digit three = cubed -³ -³ -³ -³ -³ -³ -- -acute accent = spacing acute -´ -´ -´ -´ -´ -´ -- -micro sign -µ -µ -µ -µ -µ -µ -- -pilcrow sign = paragraph sign -¶ -¶ -¶ -¶ -¶ -¶ -- -middle dot = Georgian comma = Greek middle dot -· -· -· -· -· -· -- -cedilla = spacing cedilla -¸ -¸ -¸ -¸ -¸ -¸ -- -superscript one = superscript digit one -¹ -¹ -¹ -¹ -¹ -¹ -- -masculine ordinal indicator -º -º -º -º -º -º -- -right-pointing double angle quotation mark = right pointing guillemet -» -» -» -» -» -» -- -vulgar fraction one quarter = fraction one quarter -¼ -¼ -¼ -¼ -¼ -¼ -- -vulgar fraction one half = fraction one half -½ -½ -½ -½ -½ -½ -- -vulgar fraction three quarters = fraction three quarters -¾ -¾ -¾ -¾ -¾ -¾ -- -inverted question mark = turned question mark -¿ -¿ -¿ -¿ -¿ -¿ -- -Latin capital letter A with grave = Latin capital letter A grave -À -À -À -À -À -À -- -Latin capital letter A with acute -Á -Á -Á -Á -Á -Á -- -Latin capital letter A with circumflex -Â -Â -Â -Â -Â -Â -- -Latin capital letter A with tilde -Ã -Ã -Ã -Ã -Ã -Ã -- -Latin capital letter A with diaeresis -Ä -Ä -Ä -Ä -Ä -Ä -- -Latin capital letter A with ring above = Latin capital letter A ring -Å -Å -Å -Å -Å -Å -- -Latin capital letter AE = Latin capital ligature AE -Æ -Æ -Æ -Æ -Æ -Æ -- -Latin capital letter C with cedilla -Ç -Ç -Ç -Ç -Ç -Ç -- -Latin capital letter E with grave -È -È -È -È -È -È -- -Latin capital letter E with acute -É -É -É -É -É -É -- -Latin capital letter E with circumflex -Ê -Ê -Ê -Ê -Ê -Ê -- -Latin capital letter E with diaeresis -Ë -Ë -Ë -Ë -Ë -Ë -- -Latin capital letter I with grave -Ì -Ì -Ì -Ì -Ì -Ì -- -Latin capital letter I with acute -Í -Í -Í -Í -Í -Í -- -Latin capital letter I with circumflex -Î -Î -Î -Î -Î -Î -- -Latin capital letter I with diaeresis -Ï -Ï -Ï -Ï -Ï -Ï -- -Latin capital letter ETH -Ð -Ð -Ð -Ð -Ð -Ð -- -Latin capital letter N with tilde -Ñ -Ñ -Ñ -Ñ -Ñ -Ñ -- -Latin capital letter O with grave -Ò -Ò -Ò -Ò -Ò -Ò -- -Latin capital letter O with acute -Ó -Ó -Ó -Ó -Ó -Ó -- -Latin capital letter O with circumflex -Ô -Ô -Ô -Ô -Ô -Ô -- -Latin capital letter O with tilde -Õ -Õ -Õ -Õ -Õ -Õ -- -Latin capital letter O with diaeresis -Ö -Ö -Ö -Ö -Ö -Ö -- -multiplication sign -× -× -× -× -× -× -- -Latin capital letter O with stroke = Latin capital letter O slash -Ø -Ø -Ø -Ø -Ø -Ø -- -Latin capital letter U with grave -Ù -Ù -Ù -Ù -Ù -Ù -- -Latin capital letter U with acute -Ú -Ú -Ú -Ú -Ú -Ú -- -Latin capital letter U with circumflex -Û -Û -Û -Û -Û -Û -- -Latin capital letter U with diaeresis -Ü -Ü -Ü -Ü -Ü -Ü -- -Latin capital letter Y with acute -Ý -Ý -Ý -Ý -Ý -Ý -- -Latin capital letter THORN -Þ -Þ -Þ -Þ -Þ -Þ -- -Latin small letter sharp s = ess-zed -ß -ß -ß -ß -ß -ß -- -Latin small letter a with grave = Latin small letter a grave -à -à -à -à -à -à -- -Latin small letter a with acute -á -á -á -á -á -á -- -Latin small letter a with circumflex -â -â -â -â -â -â -- -Latin small letter a with tilde -ã -ã -ã -ã -ã -ã -- -Latin small letter a with diaeresis -ä -ä -ä -ä -ä -ä -- -Latin small letter a with ring above = Latin small letter a ring -å -å -å -å -å -å -- -Latin small letter ae = Latin small ligature ae -æ -æ -æ -æ -æ -æ -- -Latin small letter c with cedilla -ç -ç -ç -ç -ç -ç -- -Latin small letter e with grave -è -è -è -è -è -è -- -Latin small letter e with acute -é -é -é -é -é -é -- -Latin small letter e with circumflex -ê -ê -ê -ê -ê -ê -- -Latin small letter e with diaeresis -ë -ë -ë -ë -ë -ë -- -Latin small letter i with grave -ì -ì -ì -ì -ì -ì -- -Latin small letter i with acute -í -í -í -í -í -í -- -Latin small letter i with circumflex -î -î -î -î -î -î -- -Latin small letter i with diaeresis -ï -ï -ï -ï -ï -ï -- -Latin small letter eth -ð -ð -ð -ð -ð -ð -- -Latin small letter n with tilde -ñ -ñ -ñ -ñ -ñ -ñ -- -Latin small letter o with grave -ò -ò -ò -ò -ò -ò -- -Latin small letter o with acute -ó -ó -ó -ó -ó -ó -- -Latin small letter o with circumflex -ô -ô -ô -ô -ô -ô -- -Latin small letter o with tilde -õ -õ -õ -õ -õ -õ -- -Latin small letter o with diaeresis -ö -ö -ö -ö -ö -ö -- -division sign -÷ -÷ -÷ -÷ -÷ -÷ -- -Latin small letter o with stroke = Latin small letter o slash -ø -ø -ø -ø -ø -ø -- -Latin small letter u with grave -ù -ù -ù -ù -ù -ù -- -Latin small letter u with acute -ú -ú -ú -ú -ú -ú -- -Latin small letter u with circumflex -û -û -û -û -û -û -- -Latin small letter u with diaeresis -ü -ü -ü -ü -ü -ü -- -Latin small letter y with acute -ý -ý -ý -ý -ý -ý -- -Latin small letter thorn -þ -þ -þ -þ -þ -þ -- - -Latin small letter y with diaeresis -ÿ -ÿ -ÿ -ÿ -ÿ -ÿ -HTML 4.0 Special Entities - - - - - - - - -Special Entities
-The following table gives the character entity reference, decimal character reference, and hexadecimal character reference for markup-significant and internationalization characters, as well as the rendering of each in your browser. Glyphs of the characters are available at the Unicode Consortium.
-With the exception of HTML 2.0's ", &, <, and >, browser support for these entities is generally quite poor, but recent browsers support some of the character entity references and decimal character references.
-- -
- - - - diff --git a/vendor/dompdf/dompdf/www/test/encoding_symbols.html b/vendor/dompdf/dompdf/www/test/encoding_symbols.html deleted file mode 100644 index 381cbe444..000000000 --- a/vendor/dompdf/dompdf/www/test/encoding_symbols.html +++ /dev/null @@ -1,1400 +0,0 @@ - - - - -- -Character -Entity -Decimal -Hex -Rendering in Your Browser -- - - -Entity -Decimal -Hex -- -quotation mark = APL quote -" -" -" -" -" -" -- -ampersand -& -& -& -& -& -& -- -less-than sign -< -< -< -< -< -< -- -greater-than sign -> -> -> -> -> -> -- -Latin capital ligature OE -Œ -Œ -Œ -Œ -Œ -Œ -- -Latin small ligature oe -œ -œ -œ -œ -œ -œ -- -Latin capital letter S with caron -Š -Š -Š -Š -Š -Š -- -Latin small letter s with caron -š -š -š -š -š -š -- -Latin capital letter Y with diaeresis -Ÿ -Ÿ -Ÿ -Ÿ -Ÿ -Ÿ -- -modifier letter circumflex accent -ˆ -ˆ -ˆ -ˆ -ˆ -ˆ -- -small tilde -˜ -˜ -˜ -˜ -˜ -˜ -- -en space -  -  -  -- - - - -em space -  -  -  -- - - - -thin space -  -  -  -- - - - -zero width non-joiner -‌ -‌ -‌ - - - -- -zero width joiner -‍ -‍ -‍ - - - -- -left-to-right mark -‎ -‎ -‎ - - - -- -right-to-left mark -‏ -‏ -‏ - - - -- -en dash -– -– -– -– -– -– -- -em dash -— -— -— -— -— -— -- -left single quotation mark -‘ -‘ -‘ -‘ -‘ -‘ -- -right single quotation mark -’ -’ -’ -’ -’ -’ -- -single low-9 quotation mark -‚ -‚ -‚ -‚ -‚ -‚ -- -left double quotation mark -“ -“ -“ -“ -“ -“ -- -right double quotation mark -” -” -” -” -” -” -- -double low-9 quotation mark -„ -„ -„ -„ -„ -„ -- -dagger -† -† -† -† -† -† -- -double dagger -‡ -‡ -‡ -‡ -‡ -‡ -- -per mille sign -‰ -‰ -‰ -‰ -‰ -‰ -- -single left-pointing angle quotation mark -‹ -‹ -‹ -‹ -‹ -‹ -- -single right-pointing angle quotation mark -› -› -› -› -› -› -- - -euro sign -€ -€ -€ -€ -€ -€ -HTML 4.0 Entities for Symbols and Greek Letters - - - - - - - - - -Entities for Symbols and Greek Letters
-The following table gives the character entity reference, decimal character reference, and hexadecimal character reference for symbols and Greek letters, as well as the rendering of each in your browser. Glyphs of the characters are available at the Unicode Consortium.
-Browser support for these entities is generally quite poor, but recent browsers support some of the character entity references and decimal character references.
-- -
- - - - diff --git a/vendor/dompdf/dompdf/www/test/encoding_unicode.html b/vendor/dompdf/dompdf/www/test/encoding_unicode.html deleted file mode 100644 index 90c210445..000000000 --- a/vendor/dompdf/dompdf/www/test/encoding_unicode.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -献给母亲的爱 - - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/encoding_unicode_wrapping.html b/vendor/dompdf/dompdf/www/test/encoding_unicode_wrapping.html deleted file mode 100644 index 8c964d326..000000000 --- a/vendor/dompdf/dompdf/www/test/encoding_unicode_wrapping.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - -- -Character -Entity -Decimal -Hex -Rendering in Your Browser -- - - -Entity -Decimal -Hex -- -Latin small f with hook = function = florin -ƒ -ƒ -ƒ -ƒ -ƒ -ƒ -- -Greek capital letter alpha -Α -Α -Α -Α -Α -Α -- -Greek capital letter beta -Β -Β -Β -Β -Β -Β -- -Greek capital letter gamma -Γ -Γ -Γ -Γ -Γ -Γ -- -Greek capital letter delta -Δ -Δ -Δ -Δ -Δ -Δ -- -Greek capital letter epsilon -Ε -Ε -Ε -Ε -Ε -Ε -- -Greek capital letter zeta -Ζ -Ζ -Ζ -Ζ -Ζ -Ζ -- -Greek capital letter eta -Η -Η -Η -Η -Η -Η -- -Greek capital letter theta -Θ -Θ -Θ -Θ -Θ -Θ -- -Greek capital letter iota -Ι -Ι -Ι -Ι -Ι -Ι -- -Greek capital letter kappa -Κ -Κ -Κ -Κ -Κ -Κ -- -Greek capital letter lambda -Λ -Λ -Λ -Λ -Λ -Λ -- -Greek capital letter mu -Μ -Μ -Μ -Μ -Μ -Μ -- -Greek capital letter nu -Ν -Ν -Ν -Ν -Ν -Ν -- -Greek capital letter xi -Ξ -Ξ -Ξ -Ξ -Ξ -Ξ -- -Greek capital letter omicron -Ο -Ο -Ο -Ο -Ο -Ο -- -Greek capital letter pi -Π -Π -Π -Π -Π -Π -- -Greek capital letter rho -Ρ -Ρ -Ρ -Ρ -Ρ -Ρ -- -Greek capital letter sigma -Σ -Σ -Σ -Σ -Σ -Σ -- -Greek capital letter tau -Τ -Τ -Τ -Τ -Τ -Τ -- -Greek capital letter upsilon -Υ -Υ -Υ -Υ -Υ -Υ -- -Greek capital letter phi -Φ -Φ -Φ -Φ -Φ -Φ -- -Greek capital letter chi -Χ -Χ -Χ -Χ -Χ -Χ -- -Greek capital letter psi -Ψ -Ψ -Ψ -Ψ -Ψ -Ψ -- -Greek capital letter omega -Ω -Ω -Ω -Ω -Ω -Ω -- -Greek small letter alpha -α -α -α -α -α -α -- -Greek small letter beta -β -β -β -β -β -β -- -Greek small letter gamma -γ -γ -γ -γ -γ -γ -- -Greek small letter delta -δ -δ -δ -δ -δ -δ -- -Greek small letter epsilon -ε -ε -ε -ε -ε -ε -- -Greek small letter zeta -ζ -ζ -ζ -ζ -ζ -ζ -- -Greek small letter eta -η -η -η -η -η -η -- -Greek small letter theta -θ -θ -θ -θ -θ -θ -- -Greek small letter iota -ι -ι -ι -ι -ι -ι -- -Greek small letter kappa -κ -κ -κ -κ -κ -κ -- -Greek small letter lambda -λ -λ -λ -λ -λ -λ -- -Greek small letter mu -μ -μ -μ -μ -μ -μ -- -Greek small letter nu -ν -ν -ν -ν -ν -ν -- -Greek small letter xi -ξ -ξ -ξ -ξ -ξ -ξ -- -Greek small letter omicron -ο -ο -ο -ο -ο -ο -- -Greek small letter pi -π -π -π -π -π -π -- -Greek small letter rho -ρ -ρ -ρ -ρ -ρ -ρ -- -Greek small letter final sigma -ς -ς -ς -ς -ς -ς -- -Greek small letter sigma -σ -σ -σ -σ -σ -σ -- -Greek small letter tau -τ -τ -τ -τ -τ -τ -- -Greek small letter upsilon -υ -υ -υ -υ -υ -υ -- -Greek small letter phi -φ -φ -φ -φ -φ -φ -- -Greek small letter chi -χ -χ -χ -χ -χ -χ -- -Greek small letter psi -ψ -ψ -ψ -ψ -ψ -ψ -- -Greek small letter omega -ω -ω -ω -ω -ω -ω -- -Greek small letter theta symbol -ϑ -ϑ -ϑ -ϑ -ϑ -ϑ -- -Greek upsilon with hook symbol -ϒ -ϒ -ϒ -ϒ -ϒ -ϒ -- -Greek pi symbol -ϖ -ϖ -ϖ -ϖ -ϖ -ϖ -- -bullet = black small circle -• -• -• -• -• -• -- -horizontal ellipsis = three dot leader -… -… -… -… -… -… -- -prime = minutes = feet -′ -′ -′ -′ -′ -′ -- -double prime = seconds = inches -″ -″ -″ -″ -″ -″ -- -overline = spacing overscore -‾ -‾ -‾ -‾ -‾ -‾ -- -fraction slash -⁄ -⁄ -⁄ -⁄ -⁄ -⁄ -- -script capital P = power set = Weierstrass p -℘ -℘ -℘ -℘ -℘ -℘ -- -blackletter capital I = imaginary part -ℑ -ℑ -ℑ -ℑ -ℑ -ℑ -- -blackletter capital R = real part symbol -ℜ -ℜ -ℜ -ℜ -ℜ -ℜ -- -trade mark sign -™ -™ -™ -™ -™ -™ -- -alef symbol = first transfinite cardinal -ℵ -ℵ -ℵ -ℵ -ℵ -ℵ -- -leftwards arrow -← -← -← -← -← -← -- -upwards arrow -↑ -↑ -↑ -↑ -↑ -↑ -- -rightwards arrow -→ -→ -→ -→ -→ -→ -- -downwards arrow -↓ -↓ -↓ -↓ -↓ -↓ -- -left right arrow -↔ -↔ -↔ -↔ -↔ -↔ -- -downwards arrow with corner leftwards = carriage return -↵ -↵ -↵ -↵ -↵ -↵ -- -leftwards double arrow -⇐ -⇐ -⇐ -⇐ -⇐ -⇐ -- -upwards double arrow -⇑ -⇑ -⇑ -⇑ -⇑ -⇑ -- -rightwards double arrow -⇒ -⇒ -⇒ -⇒ -⇒ -⇒ -- -downwards double arrow -⇓ -⇓ -⇓ -⇓ -⇓ -⇓ -- -left right double arrow -⇔ -⇔ -⇔ -⇔ -⇔ -⇔ -- -for all -∀ -∀ -∀ -∀ -∀ -∀ -- -partial differential -∂ -∂ -∂ -∂ -∂ -∂ -- -there exists -∃ -∃ -∃ -∃ -∃ -∃ -- -empty set = null set = diameter -∅ -∅ -∅ -∅ -∅ -∅ -- -nabla = backward difference -∇ -∇ -∇ -∇ -∇ -∇ -- -element of -∈ -∈ -∈ -∈ -∈ -∈ -- -not an element of -∉ -∉ -∉ -∉ -∉ -∉ -- -contains as member -∋ -∋ -∋ -∋ -∋ -∋ -- -n-ary product = product sign -∏ -∏ -∏ -∏ -∏ -∏ -- -n-ary sumation -∑ -∑ -∑ -∑ -∑ -∑ -- -minus sign -− -− -− -− -− -− -- -asterisk operator -∗ -∗ -∗ -∗ -∗ -∗ -- -square root = radical sign -√ -√ -√ -√ -√ -√ -- -proportional to -∝ -∝ -∝ -∝ -∝ -∝ -- -infinity -∞ -∞ -∞ -∞ -∞ -∞ -- -angle -∠ -∠ -∠ -∠ -∠ -∠ -- -logical and = wedge -∧ -∧ -∧ -∧ -∧ -∧ -- -logical or = vee -∨ -∨ -∨ -∨ -∨ -∨ -- -intersection = cap -∩ -∩ -∩ -∩ -∩ -∩ -- -union = cup -∪ -∪ -∪ -∪ -∪ -∪ -- -integral -∫ -∫ -∫ -∫ -∫ -∫ -- -therefore -∴ -∴ -∴ -∴ -∴ -∴ -- -tilde operator = varies with = similar to -∼ -∼ -∼ -∼ -∼ -∼ -- -approximately equal to -≅ -≅ -≅ -≅ -≅ -≅ -- -almost equal to = asymptotic to -≈ -≈ -≈ -≈ -≈ -≈ -- -not equal to -≠ -≠ -≠ -≠ -≠ -≠ -- -identical to -≡ -≡ -≡ -≡ -≡ -≡ -- -less-than or equal to -≤ -≤ -≤ -≤ -≤ -≤ -- -greater-than or equal to -≥ -≥ -≥ -≥ -≥ -≥ -- -subset of -⊂ -⊂ -⊂ -⊂ -⊂ -⊂ -- -superset of -⊃ -⊃ -⊃ -⊃ -⊃ -⊃ -- -not a subset of -⊄ -⊄ -⊄ -⊄ -⊄ -⊄ -- -subset of or equal to -⊆ -⊆ -⊆ -⊆ -⊆ -⊆ -- -superset of or equal to -⊇ -⊇ -⊇ -⊇ -⊇ -⊇ -- -circled plus = direct sum -⊕ -⊕ -⊕ -⊕ -⊕ -⊕ -- -circled times = vector product -⊗ -⊗ -⊗ -⊗ -⊗ -⊗ -- -up tack = orthogonal to = perpendicular -⊥ -⊥ -⊥ -⊥ -⊥ -⊥ -- -dot operator -⋅ -⋅ -⋅ -⋅ -⋅ -⋅ -- -left ceiling = APL upstile -⌈ -⌈ -⌈ -⌈ -⌈ -⌈ -- -right ceiling -⌉ -⌉ -⌉ -⌉ -⌉ -⌉ -- -left floor = APL downstile -⌊ -⌊ -⌊ -⌊ -⌊ -⌊ -- -right floor -⌋ -⌋ -⌋ -⌋ -⌋ -⌋ -- -left-pointing angle bracket = bra -⟨ -〈 -〈 -〈 -〈 -〈 -- -right-pointing angle bracket = ket -⟩ -〉 -〉 -〉 -〉 -〉 -- -lozenge -◊ -◊ -◊ -◊ -◊ -◊ -- -black spade suit -♠ -♠ -♠ -♠ -♠ -♠ -- -black club suit = shamrock -♣ -♣ -♣ -♣ -♣ -♣ -- -black heart suit = valentine -♥ -♥ -♥ -♥ -♥ -♥ -- - -black diamond suit -♦ -♦ -♦ -♦ -♦ -♦ -Wrapping of non-ANSI characters - - - -No se tendrá en cuenta el hecho de que las partes tengan sus establecimientos en Estados diferentes -cuando ello no resulte del contrato, ni de los tratos entre ellas, ni de información revelada por -las partes en cualquier momento antes de la celebración del contrato o en el momento de su celebración. - - diff --git a/vendor/dompdf/dompdf/www/test/encoding_utf-8.html b/vendor/dompdf/dompdf/www/test/encoding_utf-8.html deleted file mode 100644 index 78aef0949..000000000 --- a/vendor/dompdf/dompdf/www/test/encoding_utf-8.html +++ /dev/null @@ -1,793 +0,0 @@ - - - - - -Unicode (UTF-8) Test - - - - -Unicode (UTF-8) test
- -You can use this document to check if your browser and your installed fonts display multilingual HTML documents in Unicode (UTF-8) correctly.
- - - -Latin extended
- --
- -- Letters with acute
-- AÁ aá CĆ cć EÉ eé IÍ ií LĹ lĺ NŃ nń OÓ oó RŔ rŕ SŚ sś UÚ uú YÝ yý ZŹ zź
- -- Letters with apostrophe (hacek)
-- dď LĽ lľ tť
- -- Letters with breve
-- AĂ aă GĞ gğ UŬ uŭ
- -- Letters with caron (hacek)
-- CČ cč DĎ EĚ eě NŇ nň RŘ rř SŠ sš TŤ ZŽ zž
- -- Letters with cedilla (comma)
-- CÇ cç GĢ gģ KĶ kķ LĻ lļ NŅ nņ RŖ rŗ SŞ sş TŢ tţ
- -- Letters with circumflex
-- AÂ aâ CĈ cĉ EÊ eê GĜ gĝ HĤ hĥ IÎ iî JĴ jĵ OÔ oô SŜ sŝ UÛ uû WŴ wŵ YŶ yŷ
- -- Letters with diaeresis (umlaut)
-- AÄ aä EË eë IÏ iï OÖ oö UÜ uü YŸ yÿ
- -- Letters with/without dot above
-- CĊ cċ EĖ eė GĠ gġ Iİ iı ZŻ zż
- -- Letters with double acute
-- OŐ oő UŰ uű
- -- Letters with grave
-- AÀ aà EÈ eè IÌ iì OÒ oò UÙ uù
- -- Letters with horn
-- OƠ oơ UƯ uư
- -- Letters with macron
-- AĀ aā EĒ eē IĪ iī OŌ oō UŪ uū
- -- Letters with ogonek
-- AĄ aą EĘ eę IĮ iį UŲ uų
- -- Letters with ring above
-- AÅ aå UŮ uů
- -- Letters with stroke
-- DĐ dđ HĦ hħ LŁ lł OØ oø
- -- Letters with tilde
-- AÃ aã NÑ nñ OÕ oõ
- -- Ligatures
-- AEÆ aeæ OEŒ oeœ
- -- Eth & Thorn
-- DÐ dð THÞ thþ
- -- German sharp s & long s
-- ß ſ
-Combining diacritical marks
- - - -
Greek
- --
- - - -- Capital letters
-- Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω
- -- Capital letters with tonos
-- Ά Έ Ή Ί Ό Ύ Ώ
- -- Capital letters with dialytika
-- Ϊ Ϋ
- -- Small letters
-- α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σς τ υ φ χ ψ ω
- -- Small letters with tonos
-- ά έ ή ί ό ύ ώ
- -- Small letters with dialytika
-- ϊ ϋ
- -- Small letters with dialytika and tonos
-- ΐ ΰ
-Cyrillic
- --
- - - -- Russian alphabet
- -- А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я -
- -
а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я- Belarussian alphabet
- -- А Б В Г Д Е Ё Ж З І Й К Л М Н О П Р С Т У Ў Ф Х Ц Ч Ш Ы Ь Э Ю Я -
- -
а б в г д е ё ж з і й к л м н о п р с т у ў ф х ц ч ш ы ь э ю я- Ukrainian alphabet
- -- А Б В Г Ґ Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ю Я -
- -
а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ь ю я- Bulgarian alphabet
- -- А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ь Ю Я -
- -
а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ь ю я- Macedonian alphabet
- -- А Б В Г Д Ѓ Е Ж З Ѕ И Ј К Л Љ М Н Њ О П Р С Т Ќ У Ф Х Ц Ч Џ Ш -
- -
а б в г д ѓ е ж з ѕ и ј к л љ м н њ о п р с т ќ у ф х ц ч џ ш- Serbian alphabet
- -- А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш -
- -
а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш- Mongolian alphabet
- -- -A B V G D E Ë Zh Z I J K L M N O Ö P R S T U Ü F X C Ch Sh Shh " Y ' E Ju Ja
-- А Б В Г Д Е Ё Ж З И Й К Л М Н О Ө П Р С Т У Ү Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я -
-
а б в г д е ё ж з и й к л м н о ө п р с т у ү ф х ц ч ш щ ъ ы ь э ю яArmenian
- --
- - - -- Capital letters
- -- a b g d e z ê ă th - ž i l x c’ k’ h dz ğ - č’ m j n š o č p’ dž - rr s v t’ r c w ph kh - ô f
-- -Ա -Բ -Գ -Դ -Ե -Զ -Է -Ը -Թ -Ժ -Ի -Լ -Խ -Ծ -Կ -Հ -Ձ -Ղ -Ճ -Մ -Յ -Ն -Շ -Ո -Չ -Պ -Ջ -Ռ -Ս -Վ -Տ -Ր -Ց -Ւ -Փ -Ք -Օ -Ֆ -
- -- Small letters
- -- a b g d e z ê ă th - ž i l x c’ k’ h dz ğ - č’ m j n š o č p’ dž - rr s v t’ r c w ph kh - ew ô f
-- -ա -բ -գ -դ -ե -զ -է -ը -թ -ժ -ի -լ -խ -ծ -կ -հ -ձ -ղ -ճ -մ -յ -ն -շ -ո -չ -պ -ջ -ռ -ս -վ -տ -ր -ց -ւ -փ -ք -և -օ -ֆ -
-Georgian
- --
- - - -- Mxedruli (Mkhedruli) script
- -- a b g d e v z th - i k’ l m n o p’ ž - r s t’ u ph kh ğ q’ š - č c dz c’ č’ x dž h
-- -ა -ბ -გ -დ -ე -ვ -ზ -თ -ი -კ -ლ -მ -ნ -ო -პ -ჟ -რ -ს -ტ -უ -ფ -ქ -ღ -ყ -შ -ჩ -ც -ძ -წ -ჭ -ხ -ჯ -ჰ -
-Hebrew
- --
- - - -- Hebrew alphabet
- -- ’ v g d h w z H T y xx l mm nn s ‘ ff cc q r S ( š ś ) t
-- -א ב ג ד ה ו ז ח ט י כך ל מם נן ס ע פף צץ ק ר ש ( שׁ שׂ ) ת -
- -- Letters with dagesh (mappiq)
- -- ’ b g d h w z T y kk l m n s pp c q r S ( š ś ) t
-- -אּ בּ גּ דּ הּ וּ זּ טּ יּ כּךּ לּ מּ נּ סּ פּףּ צּ קּ רּ שּ ( שּׁ שּׂ ) תּ -
- -- Yiddish digraphs
- -- ww wy yy
-- -װ ױ ײ -
- -- Letters with rafe
- -- v x f
-- -בֿ -כֿ -פֿ
- -- Vowels with points
- -- a å o u i ai
-- -אַ -אָ -וֹ -וּ -יִ -ײַ
-Arabic
- --
- - - -- Arabic alphabet
- -- ’a a b t þ j H x d ð r z s š S D T Z ‘ ğ f v q k l m n h -t w ÿ y -a
-- - ـآ آ - ـا ا - بـبـب ب - تـتـت ت - ثـثـث ث - جـجـج ج - حـحـح ح - خـخـخ خ - ـد د - ـذ ذ - ـر ر - ـز ز - سـسـس س - شـشـش ش - صـصـص ص - ضـضـض ض - طـطـط ط - ظـظـظ ظ - عـعـع ع - غـغـغ غ - فـفـف ف - ڤـڤـڤ ڤ - قـقـق ق - كـكـك ك - لـلـل ل - مـمـم م - نـنـن ن - هـهـه ه - ـة ة - ـو و - يـيـي ي - یـیـی ی - ـى ى -
- -- Letters with hamzah
- -- - ء - ـإ إ - ـأ أ - ـؤ ؤ - ئـئـئ ئ -
- -- Persian alphabet
- -- ’a a b p t s j c H x d z r z ž s š S Z T Z ‘ ğ f q k g l m n v h y
-- - ـآ آ - ـا ا - بـبـب ب - پـپـپ پ - تـتـت ت - ثـثـث ث - جـجـج ج - چـچـچ چ - حـحـح ح - خـخـخ خ - ـد د - ـذ ذ - ـر ر - ـز ز - ـژ ژ - سـسـس س - شـشـش ش - صـصـص ص - ضـضـض ض - طـطـط ط - ظـظـظ ظ - عـعـع ع - غـغـغ غ - فـفـف ف - قـقـق ق - کـکـک ک - گـگـگ گ - لـلـل ل - مـمـم م - نـنـن ن - ـو و - هـهـه ه - یـیـی ی -
- -- Urdu alphabet
- -- ’a a b p t t. s j c H x d d. z r r. z ž s š S Z T Z ‘ ğ f q k g l m n -n v h h y -e
-- - ـآ آ - ـا ا - بـبـب ب - پـپـپ پ - تـتـت ت - ٹـٹـٹ ٹ - ثـثـث ث - جـجـج ج - چـچـچ چ - حـحـح ح - خـخـخ خ - ـد د - ـڈ ڈ - ـذ ذ - ـر ر - ـڑ ڑ - ـز ز - ـژ ژ - سـسـس س - شـشـش ش - صـصـص ص - ضـضـض ض - طـطـط ط - ظـظـظ ظ - عـعـع ع - غـغـغ غ - فـفـف ف - قـقـق ق - کـکـک ک - گـگـگ گ - لـلـل ل - مـمـم م - نـنـن ن - ـں ں - ـو و - ہـہـہ ہ - ھـھـھ ھ - یـیـی ی - ـے ے -
- -- Arabic-Indic digits
- -- -0 1 2 3 4 5 6 7 8 9 10 11 12
-- - 0 1 2 3 4 5 6 7 8 9 10 11 12
-
- ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ١٠ ١١ ١٢
- ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ -Devanagari
- --
- - - -- Sanskrit alphabet
- -- a aa i ii u uu r rr l e ai o au
-- -अ आ इ ई उ ऊ -ऋ ॠ ऌ -ए ऐ ओ औ -
- -- kaa ki kii ku kuu kr krr kl ke kai ko kau
-- -का कि की कु कू -कृ कॄ कॢ -के कै को कौ -
- -- k kh g gh ng -c ch j jh ñ -t. t.h d. d.h n. -t th d dh n -p ph b bh m -y r l. l v -ś s. s h
-- -क ख ग घ ङ -च छ ज झ ञ -ट ठ ड ढ ण -त थ द ध न -प फ ब भ म -य र ळ ल व -श ष स ह -
- -- Hindi/Urdu letters with nuqta
- -- q x ğ z r. r.h f
-- -क़ ख़ ग़ ज़ -ड़ ढ़ फ़ -
- -- Sample conjuncts
- -- ks. jñ tt tr rt
-- -क्ष ज्ञ त्त त्र र्त -
- -- Devanagari digits
- -- -0 1 2 3 4 5 6 7 8 9 10
-- -० १ २ ३ ४ ५ ६ ७ ८ ९ १०
-Gujarati
- --
- - - -- Sanskrit alphabet
- -- a aa i ii u uu r rr e ai o au
-- -અ આ ઇ ઈ ઉ ઊ -ઋ ૠ -એ ઐ ઓ ઔ -
- -- kaa ki kii ku kuu kr krr ke kai ko kau
-- -કા કિ કી કુ કૂ -કૃ કૄ -કે કૈ કો કૌ -
- -- k kh g gh ng -c ch j jh ñ -t. t.h d. d.h n. -t th d dh n -p ph b bh m -y r l. l v -ś s. s h
-- -ક ખ ગ ઘ ઙ -ચ છ જ ઝ ઞ -ટ ઠ ડ ઢ ણ -ત થ દ ધ ન -પ ફ બ ભ મ -ય ર ળ લ વ -શ ષ સ હ -
- -- Sample conjuncts
- -- ks. jñ tt tr rt
-- -ક્ષ જ્ઞ ત્ત ત્ર ર્ત -
- -- Gujarati digits
- -- -0 1 2 3 4 5 6 7 8 9 10
-- -૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯ ૧૦
-Bengali
- --
- - - -- Sanskrit alphabet
- -- a aa i ii u uu r rr l e ai o au
-- -অ আ ই ঈ উ ঊ -ঋ ৠ ঌ -এ ঐ ও ঔ -
- -- kaa ki kii ku kuu kr krr kl ke kai ko kau
-- -কা কি কী কু কূ -কৃ কৄ কৢ -কে কৈ কো কো -
- -- k kh g gh ng -c ch j jh ñ -t. t.h d. d.h n. -t th d dh n -p ph b bh m -y r l v -ś s. s h
-- -ক খ গ ঘ ঙ -চ ছ জ ঝ ঞ -ট ঠ ড ঢ ণ -ত থ দ ধ ন -প ফ ব ভ ম -য র ল ব -শ ষ স হ -
- -- Letters with nukta & Assamese letters
- -- r. r.h y. r v
-- -ড় ঢ় য় -ৰ ৱ -
- -- Sample conjuncts
- -- ks. jñ tt tr rt
-- -ক্ষ জ্ঞ ত্ত ত্র র্ত -
- -- Bengali digits
- -- -0 1 2 3 4 5 6 7 8 9 10
-- -০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ ১০
-Gurmukhi
- --
- - - -- Panjabi alphabet
- -- a aa i ii u uu e ai o au
-- -ਅ ਆ ਇ ਈ ਉ ਊ -ਏ ਐ ਓ ਔ -
- -- kaa ki kii ku kuu ke kai ko kau
-- -ਕਾ ਕਿ ਕੀ ਕੁ ਕੂ -ਕੇ ਕੈ ਕੋ ਕੌ -
- -- k kh g gh ng -c ch j jh ñ -t. t.h d. d.h n. -t th d dh n -p ph b bh m -y r l v r. -s h
-- -ਕ ਖ ਗ ਘ ਙ -ਚ ਛ ਜ ਝ ਞ -ਟ ਠ ਡ ਢ ਣ -ਤ ਥ ਦ ਧ ਨ -ਪ ਫ ਬ ਭ ਮ -ਯ ਰ ਲ ਵ ੜ -ਸ ਹ -
- -- Letters with nukta
- -- x ğ z f l. š
-- -ਖ਼ ਗ਼ ਜ਼ -ਫ਼ ਲ਼ ਸ਼ -
- -- Gurmukhi digits
- -- -0 1 2 3 4 5 6 7 8 9 10
-- -੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੧੦
-Symbols
- --
- - - -- - - • bullet - ¢ cent sign - © copyright sign - ¤ currency sign - † dagger - ° degree sign - ÷ division sign - « double angle quotation mark (guillemet) << - » double angle quotation mark (guillemet) >> - “ double quotation mark 66 - ” double quotation mark 99 - „ double quotation mark low-99 - … ellipsis - — em dash - – en dash - € euro sign - ― horizontal bar (quotation dash) - µ micro sign - · middle dot (centered period) - · middle dot (centered period, Greek ano teleia) - × multiplication sign - ¬ not sign - № numero sign - ‰ per mille (per thousand) sign - ¶ pilcrow (paragraph) sign - ± plus-minus sign - £ pound sterling sign - ® registered sign - § section sign - ₪ sheqel sign - ‹ single angle quotation mark (guillemet) < - › single angle quotation mark (guillemet) > - ‘ single quotation mark 6 - ’ single quotation mark 9 (apostrophe) - ¹ superscript 1 - ² superscript 2 - ³ superscript 3 - ™ trademark sign - ¥ yen sign - ، Arabic comma - ٫ Arabic decimal separator - ٪ Arabic percent sign - ؟ Arabic question mark - ؛ Arabic semicolon - ۔ Arabic-Urdu full stop (Arabic-Urdu period) - ־ Hebrew hyphen (maqaf) - ׳ Hebrew prime (geresh) - ״ Hebrew double prime (gershayim) - ॰ Indic abbreviation sign - । Indic danda - - ॥ Indic double danda - - - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/encoding_utf-8_all.html b/vendor/dompdf/dompdf/www/test/encoding_utf-8_all.html deleted file mode 100644 index 4707eb62a..000000000 --- a/vendor/dompdf/dompdf/www/test/encoding_utf-8_all.html +++ /dev/null @@ -1,2064 +0,0 @@ - - - - - - -
19 February 2010- - - - -
0020 !"#$%&'()*+,-./0123456789:;<=>? -
0040 @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ -
0060 `abcdefghijklmnopqrstuvwxyz{|}~ -
0080 -
00A0 ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ -
00C0 ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß -
00E0 àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ -
0100 ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ -
0120 ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿ -
0140 ŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞş -
0160 ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ -
0180 ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟ -
01A0 ƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ -
01C0 ǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ -
01E0 ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ -
0200 ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ -
0220 ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ -
0240 ɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟ -
0260 ɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿ -
0280 ʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟ -
02A0 ʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯʰʱʲʳʴʵʶʷʸʹʺʻʼʽʾʿ -
02C0 ˀˁ˂˃˄˅ˆˇˈˉˊˋˌˍˎˏːˑ˒˓˔˕˖˗˘˙˚˛˜˝˞˟ -
02E0 ˠˡˢˣˤ˥˦˧˨˩˪˫ˬ˭ˮ˯˰˱˲˳˴˵˶˷˸˹˺˻˼˽˾˿ -
0300 ̛̖̗̘̙̜̝̞̟̀́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̕̚ -
0320 ̴̵̶̷̸̡̢̧̨̠̣̤̥̦̩̪̫̬̭̮̯̰̱̲̳̹̺̻̼̽̾̿ -
0340 ͇͈͉͍͎̀́͂̓̈́͆͊͋͌ͅ͏͓͔͕͖͙͚͐͑͒͗͛͘͜͟͝͞ -
0360 ͣͤͥͦͧͨͩͪͫͬͭͮͯ͢͠͡ͰͱͲͳʹ͵Ͷͷͺͻͼͽ;Ϳ -
0380 ΄΅Ά·ΈΉΊΌΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟ -
03A0 ΠΡΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξο -
03C0 πρςστυφχψωϊϋόύώϏϐϑϒϓϔϕϖϗϘϙϚϛϜϝϞϟ -
03E0 ϠϡϢϣϤϥϦϧϨϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿ -
0400 ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОП -
0420 РСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп -
0440 рстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџ -
0460 ѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿ -
0480 Ҁҁ҂҃҄҅҆҇҈҉ҊҋҌҍҎҏҐґҒғҔҕҖҗҘҙҚқҜҝҞҟ -
04A0 ҠҡҢңҤҥҦҧҨҩҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽҾҿ -
04C0 ӀӁӂӃӄӅӆӇӈӉӊӋӌӍӎӏӐӑӒӓӔӕӖӗӘәӚӛӜӝӞӟ -
04E0 ӠӡӢӣӤӥӦӧӨөӪӫӬӭӮӯӰӱӲӳӴӵӶӷӸӹӺӻӼӽӾӿ -
0500 ԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟ -
0520 ԠԡԢԣԤԥԦԧԨԩԪԫԬԭԮԯԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿ -
0540 ՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖՙ՚՛՜՝՞՟ -
0560 ՠաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտ -
0580 րցւփքօֆևֈ։֊֍֎֏֑֖֛֚֒֓֔֕֗֘֙֜֝֞֟ -
05A0 ְֱֲֳִֵֶַָֹֺֻּֽ֢֣֤֥֦֧֪֭֮֠֡֨֩֫֬֯־ֿ -
05C0 ׀ׁׂ׃ׅׄ׆ׇאבגדהוזחטיךכלםמן -
05E0 נסעףפץצקרשתׯװױײ׳״ -
0600 ؆؇؈؉؊؋،؍؎؏ؘؙؚؐؑؒؓؔؕؖؗ؛؝؞؟ -
0620 ؠءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿ -
0640 ـفقكلمنهوىيًٌٍَُِّْٕٖٜٟٓٔٗ٘ٙٚٛٝٞ -
0660 ٠١٢٣٤٥٦٧٨٩٪٫٬٭ٮٯٰٱٲٳٴٵٶٷٸٹٺٻټٽپٿ -
0680 ڀځڂڃڄڅچڇڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙښڛڜڝڞڟ -
06A0 ڠڡڢڣڤڥڦڧڨکڪګڬڭڮگڰڱڲڳڴڵڶڷڸڹںڻڼڽھڿ -
06C0 ۀہۂۃۄۅۆۇۈۉۊۋیۍێۏېۑےۓ۔ەۖۗۘۙۚۛۜ۞۟ -
06E0 ۣ۠ۡۢۤۥۦۧۨ۩۪ۭ۫۬ۮۯ۰۱۲۳۴۵۶۷۸۹ۺۻۼ۽۾ۿ -
0700 ܀܁܂܃܄܅܆܇܈܉܊܋܌܍ܐܑܒܓܔܕܖܗܘܙܚܛܜܝܞܟ -
0720 ܠܡܢܣܤܥܦܧܨܩܪܫܬܭܮܯܱܴܷܸܹܻܼܾܰܲܳܵܶܺܽܿ -
0740 ݂݄݆݈݀݁݃݅݇݉݊ݍݎݏݐݑݒݓݔݕݖݗݘݙݚݛݜݝݞݟ -
0760 ݠݡݢݣݤݥݦݧݨݩݪݫݬݭݮݯݰݱݲݳݴݵݶݷݸݹݺݻݼݽݾݿ -
0780 ހށނރބޅކއވމފދތލގޏސޑޒޓޔޕޖޗޘޙޚޛޜޝޞޟ -
07A0 ޠޡޢޣޤޥަާިީުޫެޭޮޯްޱ -
07C0 ߀߁߂߃߄߅߆߇߈߉ߊߋߌߍߎߏߐߑߒߓߔߕߖߗߘߙߚߛߜߝߞߟ -
07E0 ߠߡߢߣߤߥߦߧߨߩߪ߲߫߬߭߮߯߰߱߳ߴߵ߶߷߸߹ߺ߽߾߿ -
0800 ࠀࠁࠂࠃࠄࠅࠆࠇࠈࠉࠊࠋࠌࠍࠎࠏࠐࠑࠒࠓࠔࠕࠖࠗ࠘࠙ࠚࠛࠜࠝࠞࠟ -
0820 ࠠࠡࠢࠣࠤࠥࠦࠧࠨࠩࠪࠫࠬ࠭࠰࠱࠲࠳࠴࠵࠶࠷࠸࠹࠺࠻࠼࠽࠾ -
0840 ࡀࡁࡂࡃࡄࡅࡆࡇࡈࡉࡊࡋࡌࡍࡎࡏࡐࡑࡒࡓࡔࡕࡖࡗࡘ࡙࡚࡛࡞ -
0860 ࡠࡡࡢࡣࡤࡥࡦࡧࡨࡩࡪࡰࡱࡲࡳࡴࡵࡶࡷࡸࡹࡺࡻࡼࡽࡾࡿ -
0880 ࢀࢁࢂࢃࢄࢅࢆࢇ࢈ࢉࢊࢋࢌࢍࢎ࢙࢚࢛࢘࢜࢝࢞࢟ -
08A0 ࢠࢡࢢࢣࢤࢥࢦࢧࢨࢩࢪࢫࢬࢭࢮࢯࢰࢱࢲࢳࢴࢵࢶࢷࢸࢹࢺࢻࢼࢽࢾࢿ -
08C0 ࣀࣁࣂࣃࣄࣅࣆࣇࣈࣉ࣏࣐࣑࣒࣓࣊࣋࣌࣍࣎ࣔࣕࣖࣗࣘࣙࣚࣛࣜࣝࣞࣟ -
08E0 ࣰࣱࣲࣣࣦࣩ࣭࣮࣯ࣶࣹࣺ࣠࣡ࣤࣥࣧࣨ࣪࣫࣬ࣳࣴࣵࣷࣸࣻࣼࣽࣾࣿ -
0900 ऀँंःऄअआइईउऊऋऌऍऎएऐऑऒओऔकखगघङचछजझञट -
0920 ठडढणतथदधनऩपफबभमयरऱलळऴवशषसहऺऻ़ऽाि -
0940 ीुूृॄॅॆेैॉॊोौ्ॎॏॐ॒॑॓॔ॕॖॗक़ख़ग़ज़ड़ढ़फ़य़ -
0960 ॠॡॢॣ।॥०१२३४५६७८९॰ॱॲॳॴॵॶॷॸॹॺॻॼॽॾॿ -
0980 ঀঁংঃঅআইঈউঊঋঌএঐওঔকখগঘঙচছজঝঞট -
09A0 ঠডঢণতথদধনপফবভমযরলশষসহ়ঽাি -
09C0 ীুূৃৄেৈোৌ্ৎৗড়ঢ়য় -
09E0 ৠৡৢৣ০১২৩৪৫৬৭৮৯ৰৱ৲৳৴৵৶৷৸৹৺৻ৼ৽৾ -
0A00 ਁਂਃਅਆਇਈਉਊਏਐਓਔਕਖਗਘਙਚਛਜਝਞਟ -
0A20 ਠਡਢਣਤਥਦਧਨਪਫਬਭਮਯਰਲਲ਼ਵਸ਼ਸਹ਼ਾਿ -
0A40 ੀੁੂੇੈੋੌ੍ੑਖ਼ਗ਼ਜ਼ੜਫ਼ -
0A60 ੦੧੨੩੪੫੬੭੮੯ੰੱੲੳੴੵ੶ -
0A80 ઁંઃઅઆઇઈઉઊઋઌઍએઐઑઓઔકખગઘઙચછજઝઞટ -
0AA0 ઠડઢણતથદધનપફબભમયરલળવશષસહ઼ઽાિ -
0AC0 ીુૂૃૄૅેૈૉોૌ્ૐ -
0AE0 ૠૡૢૣ૦૧૨૩૪૫૬૭૮૯૰૱ૹૺૻૼ૽૾૿ -
0B00 ଁଂଃଅଆଇଈଉଊଋଌଏଐଓଔକଖଗଘଙଚଛଜଝଞଟ -
0B20 ଠଡଢଣତଥଦଧନପଫବଭମଯରଲଳଵଶଷସହ଼ଽାି -
0B40 ୀୁୂୃୄେୈୋୌ୍୕ୖୗଡ଼ଢ଼ୟ -
0B60 ୠୡୢୣ୦୧୨୩୪୫୬୭୮୯୰ୱ୲୳୴୵୶୷ -
0B80 ஂஃஅஆஇஈஉஊஎஏஐஒஓஔகஙசஜஞட -
0BA0 ணதநனபமயரறலளழவஶஷஸஹாி -
0BC0 ீுூெேைொோௌ்ௐௗ -
0BE0 ௦௧௨௩௪௫௬௭௮௯௰௱௲௳௴௵௶௷௸௹௺ -
0C00 ఀఁంఃఄఅఆఇఈఉఊఋఌఎఏఐఒఓఔకఖగఘఙచఛజఝఞట -
0C20 ఠడఢణతథదధనపఫబభమయరఱలళఴవశషసహ఼ఽాి -
0C40 ీుూృౄెేైొోౌ్ౕౖౘౙౚౝ -
0C60 ౠౡౢౣ౦౧౨౩౪౫౬౭౮౯౷౸౹౺౻౼౽౾౿ -
0C80 ಀಁಂಃ಄ಅಆಇಈಉಊಋಌಎಏಐಒಓಔಕಖಗಘಙಚಛಜಝಞಟ -
0CA0 ಠಡಢಣತಥದಧನಪಫಬಭಮಯರಱಲಳವಶಷಸಹ಼ಽಾಿ -
0CC0 ೀುೂೃೄೆೇೈೊೋೌ್ೕೖೝೞ -
0CE0 ೠೡೢೣ೦೧೨೩೪೫೬೭೮೯ೱೲೳ -
0D00 ഀഁംഃഄഅആഇഈഉഊഋഌഎഏഐഒഓഔകഖഗഘങചഛജഝഞട -
0D20 ഠഡഢണതഥദധനഩപഫബഭമയരറലളഴവശഷസഹഺ഻഼ഽാി -
0D40 ീുൂൃൄെേൈൊോൌ്ൎ൏ൔൕൖൗ൘൙൚൛൜൝൞ൟ -
0D60 ൠൡൢൣ൦൧൨൩൪൫൬൭൮൯൰൱൲൳൴൵൶൷൸൹ൺൻർൽൾൿ -
0D80 ඁංඃඅආඇඈඉඊඋඌඍඎඏඐඑඒඓඔඕඖකඛගඝඞඟ -
0DA0 චඡජඣඤඥඦටඨඩඪණඬතථදධනඳපඵබභමඹයරල -
0DC0 වශෂසහළෆ්ාැෑිීුූෘෙේෛොෝෞෟ -
0DE0 ෦෧෨෩෪෫෬෭෮෯ෲෳ෴ -
0E00 กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟ -
0E20 ภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿ -
0E40 เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛ -
0E60 -
0E80 ກຂຄຆງຈຉຊຌຍຎຏຐຑຒຓດຕຖທຘນບປຜຝພຟ -
0EA0 ຠມຢຣລວຨຩສຫຬອຮຯະັາຳິີຶື຺ຸູົຼຽ -
0EC0 ເແໂໃໄໆ່້໊໋໌ໍ໎໐໑໒໓໔໕໖໗໘໙ໜໝໞໟ -
0EE0 -
0F00 ༀ༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓༔༕༖༗༘༙༚༛༜༝༞༟ -
0F20 ༠༡༢༣༤༥༦༧༨༩༪༫༬༭༮༯༰༱༲༳༴༵༶༷༸༹༺༻༼༽༾༿ -
0F40 ཀཁགགྷངཅཆཇཉཊཋཌཌྷཎཏཐདདྷནཔཕབབྷམཙཚཛཛྷཝཞཟ -
0F60 འཡརལཤཥསཧཨཀྵཪཫཬཱཱཱིིུུྲྀཷླྀཹེཻོཽཾཿ -
0F80 ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟ -
0FA0 ྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྾྿ -
0FC0 ࿀࿁࿂࿃࿄࿅࿆࿇࿈࿉࿊࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚ -
0FE0 -
1000 ကခဂဃငစဆဇဈဉညဋဌဍဎဏတထဒဓနပဖဗဘမယရလဝသဟ -
1020 ဠအဢဣဤဥဦဧဨဩဪါာိီုူေဲဳဴဵံ့း္်ျြွှဿ -
1040 ၀၁၂၃၄၅၆၇၈၉၊။၌၍၎၏ၐၑၒၓၔၕၖၗၘၙၚၛၜၝၞၟ -
1060 ၠၡၢၣၤၥၦၧၨၩၪၫၬၭၮၯၰၱၲၳၴၵၶၷၸၹၺၻၼၽၾၿ -
1080 ႀႁႂႃႄႅႆႇႈႉႊႋႌႍႎႏ႐႑႒႓႔႕႖႗႘႙ႚႛႜႝ႞႟ -
10A0 ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿ -
10C0 ჀჁჂჃჄჅჇჍაბგდევზთიკლმნოპჟ -
10E0 რსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶჷჸჹჺ჻ჼჽჾჿ -
1100 ᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒᄓᄔᄕᄖᄗᄘᄙᄚᄛᄜᄝᄞᄟ -
1120 ᄠᄡᄢᄣᄤᄥᄦᄧᄨᄩᄪᄫᄬᄭᄮᄯᄰᄱᄲᄳᄴᄵᄶᄷᄸᄹᄺᄻᄼᄽᄾᄿ -
1140 ᅀᅁᅂᅃᅄᅅᅆᅇᅈᅉᅊᅋᅌᅍᅎᅏᅐᅑᅒᅓᅔᅕᅖᅗᅘᅙᅚᅛᅜᅝᅞᅟ -
1160 ᅠᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵᅶᅷᅸᅹᅺᅻᅼᅽᅾᅿ -
1180 ᆀᆁᆂᆃᆄᆅᆆᆇᆈᆉᆊᆋᆌᆍᆎᆏᆐᆑᆒᆓᆔᆕᆖᆗᆘᆙᆚᆛᆜᆝᆞᆟ -
11A0 ᆠᆡᆢᆣᆤᆥᆦᆧᆨᆩᆪᆫᆬᆭᆮᆯᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿ -
11C0 ᇀᇁᇂᇃᇄᇅᇆᇇᇈᇉᇊᇋᇌᇍᇎᇏᇐᇑᇒᇓᇔᇕᇖᇗᇘᇙᇚᇛᇜᇝᇞᇟ -
11E0 ᇠᇡᇢᇣᇤᇥᇦᇧᇨᇩᇪᇫᇬᇭᇮᇯᇰᇱᇲᇳᇴᇵᇶᇷᇸᇹᇺᇻᇼᇽᇾᇿ -
1200 ሀሁሂሃሄህሆሇለሉሊላሌልሎሏሐሑሒሓሔሕሖሗመሙሚማሜምሞሟ -
1220 ሠሡሢሣሤሥሦሧረሩሪራሬርሮሯሰሱሲሳሴስሶሷሸሹሺሻሼሽሾሿ -
1240 ቀቁቂቃቄቅቆቇቈቊቋቌቍቐቑቒቓቔቕቖቘቚቛቜቝ -
1260 በቡቢባቤብቦቧቨቩቪቫቬቭቮቯተቱቲታቴትቶቷቸቹቺቻቼችቾቿ -
1280 ኀኁኂኃኄኅኆኇኈኊኋኌኍነኑኒናኔንኖኗኘኙኚኛኜኝኞኟ -
12A0 አኡኢኣኤእኦኧከኩኪካኬክኮኯኰኲኳኴኵኸኹኺኻኼኽኾ -
12C0 ዀዂዃዄዅወዉዊዋዌውዎዏዐዑዒዓዔዕዖዘዙዚዛዜዝዞዟ -
12E0 ዠዡዢዣዤዥዦዧየዩዪያዬይዮዯደዱዲዳዴድዶዷዸዹዺዻዼዽዾዿ -
1300 ጀጁጂጃጄጅጆጇገጉጊጋጌግጎጏጐጒጓጔጕጘጙጚጛጜጝጞጟ -
1320 ጠጡጢጣጤጥጦጧጨጩጪጫጬጭጮጯጰጱጲጳጴጵጶጷጸጹጺጻጼጽጾጿ -
1340 ፀፁፂፃፄፅፆፇፈፉፊፋፌፍፎፏፐፑፒፓፔፕፖፗፘፙፚ፝፞፟ -
1360 ፠፡።፣፤፥፦፧፨፩፪፫፬፭፮፯፰፱፲፳፴፵፶፷፸፹፺፻፼ -
1380 ᎀᎁᎂᎃᎄᎅᎆᎇᎈᎉᎊᎋᎌᎍᎎᎏ᎐᎑᎒᎓᎔᎕᎖᎗᎘᎙ -
13A0 ᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯᎰᎱᎲᎳᎴᎵᎶᎷᎸᎹᎺᎻᎼᎽᎾᎿ -
13C0 ᏀᏁᏂᏃᏄᏅᏆᏇᏈᏉᏊᏋᏌᏍᏎᏏᏐᏑᏒᏓᏔᏕᏖᏗᏘᏙᏚᏛᏜᏝᏞᏟ -
13E0 ᏠᏡᏢᏣᏤᏥᏦᏧᏨᏩᏪᏫᏬᏭᏮᏯᏰᏱᏲᏳᏴᏵᏸᏹᏺᏻᏼᏽ -
1400 ᐀ᐁᐂᐃᐄᐅᐆᐇᐈᐉᐊᐋᐌᐍᐎᐏᐐᐑᐒᐓᐔᐕᐖᐗᐘᐙᐚᐛᐜᐝᐞᐟ -
1420 ᐠᐡᐢᐣᐤᐥᐦᐧᐨᐩᐪᐫᐬᐭᐮᐯᐰᐱᐲᐳᐴᐵᐶᐷᐸᐹᐺᐻᐼᐽᐾᐿ -
1440 ᑀᑁᑂᑃᑄᑅᑆᑇᑈᑉᑊᑋᑌᑍᑎᑏᑐᑑᑒᑓᑔᑕᑖᑗᑘᑙᑚᑛᑜᑝᑞᑟ -
1460 ᑠᑡᑢᑣᑤᑥᑦᑧᑨᑩᑪᑫᑬᑭᑮᑯᑰᑱᑲᑳᑴᑵᑶᑷᑸᑹᑺᑻᑼᑽᑾᑿ -
1480 ᒀᒁᒂᒃᒄᒅᒆᒇᒈᒉᒊᒋᒌᒍᒎᒏᒐᒑᒒᒓᒔᒕᒖᒗᒘᒙᒚᒛᒜᒝᒞᒟ -
14A0 ᒠᒡᒢᒣᒤᒥᒦᒧᒨᒩᒪᒫᒬᒭᒮᒯᒰᒱᒲᒳᒴᒵᒶᒷᒸᒹᒺᒻᒼᒽᒾᒿ -
14C0 ᓀᓁᓂᓃᓄᓅᓆᓇᓈᓉᓊᓋᓌᓍᓎᓏᓐᓑᓒᓓᓔᓕᓖᓗᓘᓙᓚᓛᓜᓝᓞᓟ -
14E0 ᓠᓡᓢᓣᓤᓥᓦᓧᓨᓩᓪᓫᓬᓭᓮᓯᓰᓱᓲᓳᓴᓵᓶᓷᓸᓹᓺᓻᓼᓽᓾᓿ -
1500 ᔀᔁᔂᔃᔄᔅᔆᔇᔈᔉᔊᔋᔌᔍᔎᔏᔐᔑᔒᔓᔔᔕᔖᔗᔘᔙᔚᔛᔜᔝᔞᔟ -
1520 ᔠᔡᔢᔣᔤᔥᔦᔧᔨᔩᔪᔫᔬᔭᔮᔯᔰᔱᔲᔳᔴᔵᔶᔷᔸᔹᔺᔻᔼᔽᔾᔿ -
1540 ᕀᕁᕂᕃᕄᕅᕆᕇᕈᕉᕊᕋᕌᕍᕎᕏᕐᕑᕒᕓᕔᕕᕖᕗᕘᕙᕚᕛᕜᕝᕞᕟ -
1560 ᕠᕡᕢᕣᕤᕥᕦᕧᕨᕩᕪᕫᕬᕭᕮᕯᕰᕱᕲᕳᕴᕵᕶᕷᕸᕹᕺᕻᕼᕽᕾᕿ -
1580 ᖀᖁᖂᖃᖄᖅᖆᖇᖈᖉᖊᖋᖌᖍᖎᖏᖐᖑᖒᖓᖔᖕᖖᖗᖘᖙᖚᖛᖜᖝᖞᖟ -
15A0 ᖠᖡᖢᖣᖤᖥᖦᖧᖨᖩᖪᖫᖬᖭᖮᖯᖰᖱᖲᖳᖴᖵᖶᖷᖸᖹᖺᖻᖼᖽᖾᖿ -
15C0 ᗀᗁᗂᗃᗄᗅᗆᗇᗈᗉᗊᗋᗌᗍᗎᗏᗐᗑᗒᗓᗔᗕᗖᗗᗘᗙᗚᗛᗜᗝᗞᗟ -
15E0 ᗠᗡᗢᗣᗤᗥᗦᗧᗨᗩᗪᗫᗬᗭᗮᗯᗰᗱᗲᗳᗴᗵᗶᗷᗸᗹᗺᗻᗼᗽᗾᗿ -
1600 ᘀᘁᘂᘃᘄᘅᘆᘇᘈᘉᘊᘋᘌᘍᘎᘏᘐᘑᘒᘓᘔᘕᘖᘗᘘᘙᘚᘛᘜᘝᘞᘟ -
1620 ᘠᘡᘢᘣᘤᘥᘦᘧᘨᘩᘪᘫᘬᘭᘮᘯᘰᘱᘲᘳᘴᘵᘶᘷᘸᘹᘺᘻᘼᘽᘾᘿ -
1640 ᙀᙁᙂᙃᙄᙅᙆᙇᙈᙉᙊᙋᙌᙍᙎᙏᙐᙑᙒᙓᙔᙕᙖᙗᙘᙙᙚᙛᙜᙝᙞᙟ -
1660 ᙠᙡᙢᙣᙤᙥᙦᙧᙨᙩᙪᙫᙬ᙭᙮ᙯᙰᙱᙲᙳᙴᙵᙶᙷᙸᙹᙺᙻᙼᙽᙾᙿ -
1680 ᚁᚂᚃᚄᚅᚆᚇᚈᚉᚊᚋᚌᚍᚎᚏᚐᚑᚒᚓᚔᚕᚖᚗᚘᚙᚚ᚛᚜ -
16A0 ᚠᚡᚢᚣᚤᚥᚦᚧᚨᚩᚪᚫᚬᚭᚮᚯᚰᚱᚲᚳᚴᚵᚶᚷᚸᚹᚺᚻᚼᚽᚾᚿ -
16C0 ᛀᛁᛂᛃᛄᛅᛆᛇᛈᛉᛊᛋᛌᛍᛎᛏᛐᛑᛒᛓᛔᛕᛖᛗᛘᛙᛚᛛᛜᛝᛞᛟ -
16E0 ᛠᛡᛢᛣᛤᛥᛦᛧᛨᛩᛪ᛫᛬᛭ᛮᛯᛰᛱᛲᛳᛴᛵᛶᛷᛸ -
1700 ᜀᜁᜂᜃᜄᜅᜆᜇᜈᜉᜊᜋᜌᜍᜎᜏᜐᜑᜒᜓ᜔᜕ᜟ -
1720 ᜠᜡᜢᜣᜤᜥᜦᜧᜨᜩᜪᜫᜬᜭᜮᜯᜰᜱᜲᜳ᜴᜵᜶ -
1740 ᝀᝁᝂᝃᝄᝅᝆᝇᝈᝉᝊᝋᝌᝍᝎᝏᝐᝑᝒᝓ -
1760 ᝠᝡᝢᝣᝤᝥᝦᝧᝨᝩᝪᝫᝬᝮᝯᝰᝲᝳ -
1780 កខគឃងចឆជឈញដឋឌឍណតថទធនបផពភមយរលវឝឞស -
17A0 ហឡអឣឤឥឦឧឨឩឪឫឬឭឮឯឰឱឲឳ឴឵ាិីឹឺុូួើឿ -
17C0 ៀេែៃោៅំះៈ៉៊់៌៍៎៏័៑្៓។៕៖ៗ៘៙៚៛ៜ៝ -
17E0 ០១២៣៤៥៦៧៨៩៰៱៲៳៴៵៶៷៸៹ -
1800 ᠀᠁᠂᠃᠄᠅᠆᠇᠈᠉᠊᠋᠌᠍᠏᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙ -
1820 ᠠᠡᠢᠣᠤᠥᠦᠧᠨᠩᠪᠫᠬᠭᠮᠯᠰᠱᠲᠳᠴᠵᠶᠷᠸᠹᠺᠻᠼᠽᠾᠿ -
1840 ᡀᡁᡂᡃᡄᡅᡆᡇᡈᡉᡊᡋᡌᡍᡎᡏᡐᡑᡒᡓᡔᡕᡖᡗᡘᡙᡚᡛᡜᡝᡞᡟ -
1860 ᡠᡡᡢᡣᡤᡥᡦᡧᡨᡩᡪᡫᡬᡭᡮᡯᡰᡱᡲᡳᡴᡵᡶᡷᡸ -
1880 ᢀᢁᢂᢃᢄᢅᢆᢇᢈᢉᢊᢋᢌᢍᢎᢏᢐᢑᢒᢓᢔᢕᢖᢗᢘᢙᢚᢛᢜᢝᢞᢟ -
18A0 ᢠᢡᢢᢣᢤᢥᢦᢧᢨᢩᢪᢰᢱᢲᢳᢴᢵᢶᢷᢸᢹᢺᢻᢼᢽᢾᢿ -
18C0 ᣀᣁᣂᣃᣄᣅᣆᣇᣈᣉᣊᣋᣌᣍᣎᣏᣐᣑᣒᣓᣔᣕᣖᣗᣘᣙᣚᣛᣜᣝᣞᣟ -
18E0 ᣠᣡᣢᣣᣤᣥᣦᣧᣨᣩᣪᣫᣬᣭᣮᣯᣰᣱᣲᣳᣴᣵ -
1900 ᤀᤁᤂᤃᤄᤅᤆᤇᤈᤉᤊᤋᤌᤍᤎᤏᤐᤑᤒᤓᤔᤕᤖᤗᤘᤙᤚᤛᤜᤝᤞ -
1920 ᤠᤡᤢᤣᤤᤥᤦᤧᤨᤩᤪᤫᤰᤱᤲᤳᤴᤵᤶᤷᤸ᤻᤹᤺ -
1940 ᥀᥄᥅᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏ᥐᥑᥒᥓᥔᥕᥖᥗᥘᥙᥚᥛᥜᥝᥞᥟ -
1960 ᥠᥡᥢᥣᥤᥥᥦᥧᥨᥩᥪᥫᥬᥭᥰᥱᥲᥳᥴ -
1980 ᦀᦁᦂᦃᦄᦅᦆᦇᦈᦉᦊᦋᦌᦍᦎᦏᦐᦑᦒᦓᦔᦕᦖᦗᦘᦙᦚᦛᦜᦝᦞᦟ -
19A0 ᦠᦡᦢᦣᦤᦥᦦᦧᦨᦩᦪᦫᦰᦱᦲᦳᦴᦵᦶᦷᦸᦹᦺᦻᦼᦽᦾᦿ -
19C0 ᧀᧁᧂᧃᧄᧅᧆᧇᧈᧉ᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᧚᧞᧟ -
19E0 ᧠᧡᧢᧣᧤᧥᧦᧧᧨᧩᧪᧫᧬᧭᧮᧯᧰᧱᧲᧳᧴᧵᧶᧷᧸᧹᧺᧻᧼᧽᧾᧿ -
1A00 ᨀᨁᨂᨃᨄᨅᨆᨇᨈᨉᨊᨋᨌᨍᨎᨏᨐᨑᨒᨓᨔᨕᨖᨘᨗᨙᨚᨛ᨞᨟ -
1A20 ᨠᨡᨢᨣᨤᨥᨦᨧᨨᨩᨪᨫᨬᨭᨮᨯᨰᨱᨲᨳᨴᨵᨶᨷᨸᨹᨺᨻᨼᨽᨾᨿ -
1A40 ᩀᩁᩂᩃᩄᩅᩆᩇᩈᩉᩊᩋᩌᩍᩎᩏᩐᩑᩒᩓᩔᩕᩖᩗᩘᩙᩚᩛᩜᩝᩞ -
1A60 ᩠ᩡᩢᩣᩤᩥᩦᩧᩨᩩᩪᩫᩬᩭᩮᩯᩰᩱᩲᩳᩴ᩿᩵᩶᩷᩸᩹᩺᩻᩼ -
1A80 ᪀᪁᪂᪃᪄᪅᪆᪇᪈᪉᪐᪑᪒᪓᪔᪕᪖᪗᪘᪙ -
1AA0 ᪠᪡᪢᪣᪤᪥᪦ᪧ᪨᪩᪪᪫᪬᪭᪵᪶᪷᪸᪹᪺᪽᪰᪱᪲᪳᪴᪻᪼᪾ᪿ -
1AC0 ᫀ᫃᫄᫊᫁᫂᫅᫆᫇᫈᫉᫋ᫌᫍᫎ -
1AE0 -
1B00 ᬀᬁᬂᬃᬄᬅᬆᬇᬈᬉᬊᬋᬌᬍᬎᬏᬐᬑᬒᬓᬔᬕᬖᬗᬘᬙᬚᬛᬜᬝᬞᬟ -
1B20 ᬠᬡᬢᬣᬤᬥᬦᬧᬨᬩᬪᬫᬬᬭᬮᬯᬰᬱᬲᬳ᬴ᬵᬶᬷᬸᬹᬺᬻᬼᬽᬾᬿ -
1B40 ᭀᭁᭂᭃ᭄ᭅᭆᭇᭈᭉᭊᭋᭌ᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙᭚᭛᭜᭝᭞᭟ -
1B60 ᭠᭡᭢᭣᭤᭥᭦᭧᭨᭩᭪᭬᭫᭭᭮᭯᭰᭱᭲᭳᭴᭵᭶᭷᭸᭹᭺᭻᭼᭽᭾ -
1B80 ᮀᮁᮂᮃᮄᮅᮆᮇᮈᮉᮊᮋᮌᮍᮎᮏᮐᮑᮒᮓᮔᮕᮖᮗᮘᮙᮚᮛᮜᮝᮞᮟ -
1BA0 ᮠᮡᮢᮣᮤᮥᮦᮧᮨᮩ᮪᮫ᮬᮭᮮᮯ᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹ᮺᮻᮼᮽᮾᮿ -
1BC0 ᯀᯁᯂᯃᯄᯅᯆᯇᯈᯉᯊᯋᯌᯍᯎᯏᯐᯑᯒᯓᯔᯕᯖᯗᯘᯙᯚᯛᯜᯝᯞᯟ -
1BE0 ᯠᯡᯢᯣᯤᯥ᯦ᯧᯨᯩᯪᯫᯬᯭᯮᯯᯰᯱ᯲᯳᯼᯽᯾᯿ -
1C00 ᰀᰁᰂᰃᰄᰅᰆᰇᰈᰉᰊᰋᰌᰍᰎᰏᰐᰑᰒᰓᰔᰕᰖᰗᰘᰙᰚᰛᰜᰝᰞᰟ -
1C20 ᰠᰡᰢᰣᰤᰥᰦᰧᰨᰩᰪᰫᰬᰭᰮᰯᰰᰱᰲᰳᰴᰵᰶ᰷᰻᰼᰽᰾᰿ -
1C40 ᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉ᱍᱎᱏ᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙ᱚᱛᱜᱝᱞᱟ -
1C60 ᱠᱡᱢᱣᱤᱥᱦᱧᱨᱩᱪᱫᱬᱭᱮᱯᱰᱱᱲᱳᱴᱵᱶᱷᱸᱹᱺᱻᱼᱽ᱾᱿ -
1C80 ᲀᲁᲂᲃᲄᲅᲆᲇᲈᲐᲑᲒᲓᲔᲕᲖᲗᲘᲙᲚᲛᲜᲝᲞᲟ -
1CA0 ᲠᲡᲢᲣᲤᲥᲦᲧᲨᲩᲪᲫᲬᲭᲮᲯᲰᲱᲲᲳᲴᲵᲶᲷᲸᲹᲺᲽᲾᲿ -
1CC0 ᳀᳁᳂᳃᳄᳅᳆᳇᳐᳑᳒᳓᳔᳕᳖᳗᳘᳙᳜᳝᳞᳟᳚᳛ -
1CE0 ᳠᳡᳢᳣᳤᳥᳦᳧᳨ᳩᳪᳫᳬ᳭ᳮᳯᳰᳱᳲᳳ᳴ᳵᳶ᳷᳸᳹ᳺ -
1D00 ᴀᴁᴂᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌᴍᴎᴏᴐᴑᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜᴝᴞᴟ -
1D20 ᴠᴡᴢᴣᴤᴥᴦᴧᴨᴩᴪᴫᴬᴭᴮᴯᴰᴱᴲᴳᴴᴵᴶᴷᴸᴹᴺᴻᴼᴽᴾᴿ -
1D40 ᵀᵁᵂᵃᵄᵅᵆᵇᵈᵉᵊᵋᵌᵍᵎᵏᵐᵑᵒᵓᵔᵕᵖᵗᵘᵙᵚᵛᵜᵝᵞᵟ -
1D60 ᵠᵡᵢᵣᵤᵥᵦᵧᵨᵩᵪᵫᵬᵭᵮᵯᵰᵱᵲᵳᵴᵵᵶᵷᵸᵹᵺᵻᵼᵽᵾᵿ -
1D80 ᶀᶁᶂᶃᶄᶅᶆᶇᶈᶉᶊᶋᶌᶍᶎᶏᶐᶑᶒᶓᶔᶕᶖᶗᶘᶙᶚᶛᶜᶝᶞᶟ -
1DA0 ᶠᶡᶢᶣᶤᶥᶦᶧᶨᶩᶪᶫᶬᶭᶮᶯᶰᶱᶲᶳᶴᶵᶶᶷᶸᶹᶺᶻᶼᶽᶾᶿ -
1DC0 ᷐᷎᷂᷊᷏᷀᷁᷃᷄᷅᷆᷇᷈᷉᷋᷌᷑᷒ᷓᷔᷕᷖᷗᷘᷙᷚᷛᷜᷝᷞᷟ᷍ -
1DE0 ᷺᷹᷽᷿᷷᷸ᷠᷡᷢᷣᷤᷥᷦᷧᷨᷩᷪᷫᷬᷭᷮᷯᷰᷱᷲᷳᷴ᷵᷻᷾᷶᷼ -
1E00 ḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟ -
1E20 ḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿ -
1E40 ṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟ -
1E60 ṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿ -
1E80 ẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẛẜẝẞẟ -
1EA0 ẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾế -
1EC0 ỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞở -
1EE0 ỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹỺỻỼỽỾỿ -
1F00 ἀἁἂἃἄἅἆἇἈἉἊἋἌἍἎἏἐἑἒἓἔἕἘἙἚἛἜἝ -
1F20 ἠἡἢἣἤἥἦἧἨἩἪἫἬἭἮἯἰἱἲἳἴἵἶἷἸἹἺἻἼἽἾἿ -
1F40 ὀὁὂὃὄὅὈὉὊὋὌὍὐὑὒὓὔὕὖὗὙὛὝὟ -
1F60 ὠὡὢὣὤὥὦὧὨὩὪὫὬὭὮὯὰάὲέὴήὶίὸόὺύὼώ -
1F80 ᾀᾁᾂᾃᾄᾅᾆᾇᾈᾉᾊᾋᾌᾍᾎᾏᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾞᾟ -
1FA0 ᾠᾡᾢᾣᾤᾥᾦᾧᾨᾩᾪᾫᾬᾭᾮᾯᾰᾱᾲᾳᾴᾶᾷᾸᾹᾺΆᾼ᾽ι᾿ -
1FC0 ῀῁ῂῃῄῆῇῈΈῊΉῌ῍῎῏ῐῑῒΐῖῗῘῙῚΊ῝῞῟ -
1FE0 ῠῡῢΰῤῥῦῧῨῩῪΎῬ῭΅`ῲῳῴῶῷῸΌῺΏῼ´῾ -
2000 ‐‑‒–—―‖‗‘’‚‛“”„‟ -
2020 †‡•‣․‥…‧ ‰‱′″‴‵‶‷‸‹›※‼‽‾‿ -
2040 ⁀⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁔⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞ -
2060 ⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ -
2080 ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₒₓₔₕₖₗₘₙₚₛₜ -
20A0 ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲₳₴₵₶₷₸₹₺₻₼₽₾₿ -
20C0 ⃀⃒⃓⃘⃙⃚⃐⃑⃔⃕⃖⃗⃛⃜⃝⃞⃟ -
20E0 ⃠⃡⃢⃣⃤⃥⃦⃪⃫⃨⃬⃭⃮⃯⃧⃩⃰ -
2100 ℀℁ℂ℃℄℅℆ℇ℈℉ℊℋℌℍℎℏℐℑℒℓ℔ℕ№℗℘ℙℚℛℜℝ℞℟ -
2120 ℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯℰℱℲℳℴℵℶℷℸℹ℺℻ℼℽℾℿ -
2140 ⅀⅁⅂⅃⅄ⅅⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟ -
2160 ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿ -
2180 ↀↁↂↃↄↅↆↇↈ↉↊↋←↑→↓↔↕↖↗↘↙↚↛↜↝↞↟ -
21A0 ↠↡↢↣↤↥↦↧↨↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿ -
21C0 ⇀⇁⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟ -
21E0 ⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪⇫⇬⇭⇮⇯⇰⇱⇲⇳⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿ -
2200 ∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟ -
2220 ∠∡∢∣∤∥∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿ -
2240 ≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟ -
2260 ≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿ -
2280 ⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝⊞⊟ -
22A0 ⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿ -
22C0 ⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟ -
22E0 ⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿ -
2300 ⌀⌁⌂⌃⌄⌅⌆⌇⌈⌉⌊⌋⌌⌍⌎⌏⌐⌑⌒⌓⌔⌕⌖⌗⌘⌙⌚⌛⌜⌝⌞⌟ -
2320 ⌠⌡⌢⌣⌤⌥⌦⌧⌨〈〉⌫⌬⌭⌮⌯⌰⌱⌲⌳⌴⌵⌶⌷⌸⌹⌺⌻⌼⌽⌾⌿ -
2340 ⍀⍁⍂⍃⍄⍅⍆⍇⍈⍉⍊⍋⍌⍍⍎⍏⍐⍑⍒⍓⍔⍕⍖⍗⍘⍙⍚⍛⍜⍝⍞⍟ -
2360 ⍠⍡⍢⍣⍤⍥⍦⍧⍨⍩⍪⍫⍬⍭⍮⍯⍰⍱⍲⍳⍴⍵⍶⍷⍸⍹⍺⍻⍼⍽⍾⍿ -
2380 ⎀⎁⎂⎃⎄⎅⎆⎇⎈⎉⎊⎋⎌⎍⎎⎏⎐⎑⎒⎓⎔⎕⎖⎗⎘⎙⎚⎛⎜⎝⎞⎟ -
23A0 ⎠⎡⎢⎣⎤⎥⎦⎧⎨⎩⎪⎫⎬⎭⎮⎯⎰⎱⎲⎳⎴⎵⎶⎷⎸⎹⎺⎻⎼⎽⎾⎿ -
23C0 ⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌⏍⏎⏏⏐⏑⏒⏓⏔⏕⏖⏗⏘⏙⏚⏛⏜⏝⏞⏟ -
23E0 ⏠⏡⏢⏣⏤⏥⏦⏧⏨⏩⏪⏫⏬⏭⏮⏯⏰⏱⏲⏳⏴⏵⏶⏷⏸⏹⏺⏻⏼⏽⏾⏿ -
2400 ␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟ -
2420 ␠␡␢␣␥␦ -
2440 ⑀⑁⑂⑃⑄⑅⑆⑇⑈⑉⑊ -
2460 ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿ -
2480 ⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⒜⒝⒞⒟ -
24A0 ⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿ -
24C0 ⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟ -
24E0 ⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⓪⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾⓿ -
2500 ─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟ -
2520 ┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿ -
2540 ╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟ -
2560 ╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿ -
2580 ▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟ -
25A0 ■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿ -
25C0 ◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟ -
25E0 ◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿ -
2600 ☀☁☂☃☄★☆☇☈☉☊☋☌☍☎☏☐☑☒☓☔☕☖☗☘☙☚☛☜☝☞☟ -
2620 ☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿ -
2640 ♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟ -
2660 ♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿ -
2680 ⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚⚛⚜⚝⚞⚟ -
26A0 ⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯⚰⚱⚲⚳⚴⚵⚶⚷⚸⚹⚺⚻⚼⚽⚾⚿ -
26C0 ⛀⛁⛂⛃⛄⛅⛆⛇⛈⛉⛊⛋⛌⛍⛎⛏⛐⛑⛒⛓⛔⛕⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟ -
26E0 ⛠⛡⛢⛣⛤⛥⛦⛧⛨⛩⛪⛫⛬⛭⛮⛯⛰⛱⛲⛳⛴⛵⛶⛷⛸⛹⛺⛻⛼⛽⛾⛿ -
2700 ✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟ -
2720 ✠✡✢✣✤✥✦✧✨✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿ -
2740 ❀❁❂❃❄❅❆❇❈❉❊❋❌❍❎❏❐❑❒❓❔❕❖❗❘❙❚❛❜❝❞❟ -
2760 ❠❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿ -
2780 ➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➕➖➗➘➙➚➛➜➝➞➟ -
27A0 ➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➰➱➲➳➴➵➶➷➸➹➺➻➼➽➾➿ -
27C0 ⟀⟁⟂⟃⟄⟅⟆⟇⟈⟉⟊⟋⟌⟍⟎⟏⟐⟑⟒⟓⟔⟕⟖⟗⟘⟙⟚⟛⟜⟝⟞⟟ -
27E0 ⟠⟡⟢⟣⟤⟥⟦⟧⟨⟩⟪⟫⟬⟭⟮⟯⟰⟱⟲⟳⟴⟵⟶⟷⟸⟹⟺⟻⟼⟽⟾⟿ -
2800 ⠀⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟ -
2820 ⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿ -
2840 ⡀⡁⡂⡃⡄⡅⡆⡇⡈⡉⡊⡋⡌⡍⡎⡏⡐⡑⡒⡓⡔⡕⡖⡗⡘⡙⡚⡛⡜⡝⡞⡟ -
2860 ⡠⡡⡢⡣⡤⡥⡦⡧⡨⡩⡪⡫⡬⡭⡮⡯⡰⡱⡲⡳⡴⡵⡶⡷⡸⡹⡺⡻⡼⡽⡾⡿ -
2880 ⢀⢁⢂⢃⢄⢅⢆⢇⢈⢉⢊⢋⢌⢍⢎⢏⢐⢑⢒⢓⢔⢕⢖⢗⢘⢙⢚⢛⢜⢝⢞⢟ -
28A0 ⢠⢡⢢⢣⢤⢥⢦⢧⢨⢩⢪⢫⢬⢭⢮⢯⢰⢱⢲⢳⢴⢵⢶⢷⢸⢹⢺⢻⢼⢽⢾⢿ -
28C0 ⣀⣁⣂⣃⣄⣅⣆⣇⣈⣉⣊⣋⣌⣍⣎⣏⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟ -
28E0 ⣠⣡⣢⣣⣤⣥⣦⣧⣨⣩⣪⣫⣬⣭⣮⣯⣰⣱⣲⣳⣴⣵⣶⣷⣸⣹⣺⣻⣼⣽⣾⣿ -
2900 ⤀⤁⤂⤃⤄⤅⤆⤇⤈⤉⤊⤋⤌⤍⤎⤏⤐⤑⤒⤓⤔⤕⤖⤗⤘⤙⤚⤛⤜⤝⤞⤟ -
2920 ⤠⤡⤢⤣⤤⤥⤦⤧⤨⤩⤪⤫⤬⤭⤮⤯⤰⤱⤲⤳⤴⤵⤶⤷⤸⤹⤺⤻⤼⤽⤾⤿ -
2940 ⥀⥁⥂⥃⥄⥅⥆⥇⥈⥉⥊⥋⥌⥍⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟ -
2960 ⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩⥪⥫⥬⥭⥮⥯⥰⥱⥲⥳⥴⥵⥶⥷⥸⥹⥺⥻⥼⥽⥾⥿ -
2980 ⦀⦁⦂⦃⦄⦅⦆⦇⦈⦉⦊⦋⦌⦍⦎⦏⦐⦑⦒⦓⦔⦕⦖⦗⦘⦙⦚⦛⦜⦝⦞⦟ -
29A0 ⦠⦡⦢⦣⦤⦥⦦⦧⦨⦩⦪⦫⦬⦭⦮⦯⦰⦱⦲⦳⦴⦵⦶⦷⦸⦹⦺⦻⦼⦽⦾⦿ -
29C0 ⧀⧁⧂⧃⧄⧅⧆⧇⧈⧉⧊⧋⧌⧍⧎⧏⧐⧑⧒⧓⧔⧕⧖⧗⧘⧙⧚⧛⧜⧝⧞⧟ -
29E0 ⧠⧡⧢⧣⧤⧥⧦⧧⧨⧩⧪⧫⧬⧭⧮⧯⧰⧱⧲⧳⧴⧵⧶⧷⧸⧹⧺⧻⧼⧽⧾⧿ -
2A00 ⨀⨁⨂⨃⨄⨅⨆⨇⨈⨉⨊⨋⨌⨍⨎⨏⨐⨑⨒⨓⨔⨕⨖⨗⨘⨙⨚⨛⨜⨝⨞⨟ -
2A20 ⨠⨡⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨯⨰⨱⨲⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼⨽⨾⨿ -
2A40 ⩀⩁⩂⩃⩄⩅⩆⩇⩈⩉⩊⩋⩌⩍⩎⩏⩐⩑⩒⩓⩔⩕⩖⩗⩘⩙⩚⩛⩜⩝⩞⩟ -
2A60 ⩠⩡⩢⩣⩤⩥⩦⩧⩨⩩⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿ -
2A80 ⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟ -
2AA0 ⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿ -
2AC0 ⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫚⫛⫝̸⫝⫞⫟ -
2AE0 ⫠⫡⫢⫣⫤⫥⫦⫧⫨⫩⫪⫫⫬⫭⫮⫯⫰⫱⫲⫳⫴⫵⫶⫷⫸⫹⫺⫻⫼⫽⫾⫿ -
2B00 ⬀⬁⬂⬃⬄⬅⬆⬇⬈⬉⬊⬋⬌⬍⬎⬏⬐⬑⬒⬓⬔⬕⬖⬗⬘⬙⬚⬛⬜⬝⬞⬟ -
2B20 ⬠⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬⬭⬮⬯⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿ -
2B40 ⭀⭁⭂⭃⭄⭅⭆⭇⭈⭉⭊⭋⭌⭍⭎⭏⭐⭑⭒⭓⭔⭕⭖⭗⭘⭙⭚⭛⭜⭝⭞⭟ -
2B60 ⭠⭡⭢⭣⭤⭥⭦⭧⭨⭩⭪⭫⭬⭭⭮⭯⭰⭱⭲⭳⭶⭷⭸⭹⭺⭻⭼⭽⭾⭿ -
2B80 ⮀⮁⮂⮃⮄⮅⮆⮇⮈⮉⮊⮋⮌⮍⮎⮏⮐⮑⮒⮓⮔⮕⮗⮘⮙⮚⮛⮜⮝⮞⮟ -
2BA0 ⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬⮭⮮⮯⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿ -
2BC0 ⯀⯁⯂⯃⯄⯅⯆⯇⯈⯉⯊⯋⯌⯍⯎⯏⯐⯑⯒⯓⯔⯕⯖⯗⯘⯙⯚⯛⯜⯝⯞⯟ -
2BE0 ⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬⯭⯮⯯⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿ -
2C00 ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟ -
2C20 ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮⰯⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ -
2C40 ⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞⱟ -
2C60 ⱠⱡⱢⱣⱤⱥⱦⱧⱨⱩⱪⱫⱬⱭⱮⱯⱰⱱⱲⱳⱴⱵⱶⱷⱸⱹⱺⱻⱼⱽⱾⱿ -
2C80 ⲀⲁⲂⲃⲄⲅⲆⲇⲈⲉⲊⲋⲌⲍⲎⲏⲐⲑⲒⲓⲔⲕⲖⲗⲘⲙⲚⲛⲜⲝⲞⲟ -
2CA0 ⲠⲡⲢⲣⲤⲥⲦⲧⲨⲩⲪⲫⲬⲭⲮⲯⲰⲱⲲⲳⲴⲵⲶⲷⲸⲹⲺⲻⲼⲽⲾⲿ -
2CC0 ⳀⳁⳂⳃⳄⳅⳆⳇⳈⳉⳊⳋⳌⳍⳎⳏⳐⳑⳒⳓⳔⳕⳖⳗⳘⳙⳚⳛⳜⳝⳞⳟ -
2CE0 ⳠⳡⳢⳣⳤ⳥⳦⳧⳨⳩⳪ⳫⳬⳭⳮ⳯⳰⳱Ⳳⳳ⳹⳺⳻⳼⳽⳾⳿ -
2D00 ⴀⴁⴂⴃⴄⴅⴆⴇⴈⴉⴊⴋⴌⴍⴎⴏⴐⴑⴒⴓⴔⴕⴖⴗⴘⴙⴚⴛⴜⴝⴞⴟ -
2D20 ⴠⴡⴢⴣⴤⴥⴧⴭⴰⴱⴲⴳⴴⴵⴶⴷⴸⴹⴺⴻⴼⴽⴾⴿ -
2D40 ⵀⵁⵂⵃⵄⵅⵆⵇⵈⵉⵊⵋⵌⵍⵎⵏⵐⵑⵒⵓⵔⵕⵖⵗⵘⵙⵚⵛⵜⵝⵞⵟ -
2D60 ⵠⵡⵢⵣⵤⵥⵦⵧⵯ⵰⵿ -
2D80 ⶀⶁⶂⶃⶄⶅⶆⶇⶈⶉⶊⶋⶌⶍⶎⶏⶐⶑⶒⶓⶔⶕⶖ -
2DA0 ⶠⶡⶢⶣⶤⶥⶦⶨⶩⶪⶫⶬⶭⶮⶰⶱⶲⶳⶴⶵⶶⶸⶹⶺⶻⶼⶽⶾ -
2DC0 ⷀⷁⷂⷃⷄⷅⷆⷈⷉⷊⷋⷌⷍⷎⷐⷑⷒⷓⷔⷕⷖⷘⷙⷚⷛⷜⷝⷞ -
2DE0 ⷠⷡⷢⷣⷤⷥⷦⷧⷨⷩⷪⷫⷬⷭⷮⷯⷰⷱⷲⷳⷴⷵⷶⷷⷸⷹⷺⷻⷼⷽⷾⷿ -
2E00 ⸀⸁⸂⸃⸄⸅⸆⸇⸈⸉⸊⸋⸌⸍⸎⸏⸐⸑⸒⸓⸔⸕⸖⸗⸘⸙⸚⸛⸜⸝⸞⸟ -
2E20 ⸠⸡⸢⸣⸤⸥⸦⸧⸨⸩⸪⸫⸬⸭⸮ⸯ⸰⸱⸲⸳⸴⸵⸶⸷⸸⸹⸺⸻⸼⸽⸾⸿ -
2E40 ⹀⹁⹂⹃⹄⹅⹆⹇⹈⹉⹊⹋⹌⹍⹎⹏⹐⹑⹒⹓⹔⹕⹖⹗⹘⹙⹚⹛⹜⹝ -
2E60 -
2E80 ⺀⺁⺂⺃⺄⺅⺆⺇⺈⺉⺊⺋⺌⺍⺎⺏⺐⺑⺒⺓⺔⺕⺖⺗⺘⺙⺛⺜⺝⺞⺟ -
2EA0 ⺠⺡⺢⺣⺤⺥⺦⺧⺨⺩⺪⺫⺬⺭⺮⺯⺰⺱⺲⺳⺴⺵⺶⺷⺸⺹⺺⺻⺼⺽⺾⺿ -
2EC0 ⻀⻁⻂⻃⻄⻅⻆⻇⻈⻉⻊⻋⻌⻍⻎⻏⻐⻑⻒⻓⻔⻕⻖⻗⻘⻙⻚⻛⻜⻝⻞⻟ -
2EE0 ⻠⻡⻢⻣⻤⻥⻦⻧⻨⻩⻪⻫⻬⻭⻮⻯⻰⻱⻲⻳ -
2F00 ⼀⼁⼂⼃⼄⼅⼆⼇⼈⼉⼊⼋⼌⼍⼎⼏⼐⼑⼒⼓⼔⼕⼖⼗⼘⼙⼚⼛⼜⼝⼞⼟ -
2F20 ⼠⼡⼢⼣⼤⼥⼦⼧⼨⼩⼪⼫⼬⼭⼮⼯⼰⼱⼲⼳⼴⼵⼶⼷⼸⼹⼺⼻⼼⼽⼾⼿ -
2F40 ⽀⽁⽂⽃⽄⽅⽆⽇⽈⽉⽊⽋⽌⽍⽎⽏⽐⽑⽒⽓⽔⽕⽖⽗⽘⽙⽚⽛⽜⽝⽞⽟ -
2F60 ⽠⽡⽢⽣⽤⽥⽦⽧⽨⽩⽪⽫⽬⽭⽮⽯⽰⽱⽲⽳⽴⽵⽶⽷⽸⽹⽺⽻⽼⽽⽾⽿ -
2F80 ⾀⾁⾂⾃⾄⾅⾆⾇⾈⾉⾊⾋⾌⾍⾎⾏⾐⾑⾒⾓⾔⾕⾖⾗⾘⾙⾚⾛⾜⾝⾞⾟ -
2FA0 ⾠⾡⾢⾣⾤⾥⾦⾧⾨⾩⾪⾫⾬⾭⾮⾯⾰⾱⾲⾳⾴⾵⾶⾷⾸⾹⾺⾻⾼⾽⾾⾿ -
2FC0 ⿀⿁⿂⿃⿄⿅⿆⿇⿈⿉⿊⿋⿌⿍⿎⿏⿐⿑⿒⿓⿔⿕ -
2FE0 ⿰⿱⿲⿳⿴⿵⿶⿷⿸⿹⿺⿻ -
3000 、。〃〄々〆〇〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟 -
3020 〠〡〢〣〤〥〦〧〨〩〪〭〮〯〫〬〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾〿 -
3040 ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞた -
3060 だちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみ -
3080 むめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖ゙゚゛゜ゝゞゟ -
30A0 ゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタ -
30C0 ダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミ -
30E0 ムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ -
3100 ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟ -
3120 ㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩㄪㄫㄬㄭㄮㄯㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿ -
3140 ㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟ -
3160 ㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿ -
3180 ㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ㆐㆑㆒㆓㆔㆕㆖㆗㆘㆙㆚㆛㆜㆝㆞㆟ -
31A0 ㆠㆡㆢㆣㆤㆥㆦㆧㆨㆩㆪㆫㆬㆭㆮㆯㆰㆱㆲㆳㆴㆵㆶㆷㆸㆹㆺㆻㆼㆽㆾㆿ -
31C0 ㇀㇁㇂㇃㇄㇅㇆㇇㇈㇉㇊㇋㇌㇍㇎㇏㇐㇑㇒㇓㇔㇕㇖㇗㇘㇙㇚㇛㇜㇝㇞㇟ -
31E0 ㇠㇡㇢㇣ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ -
3200 ㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㈝㈞ -
3220 ㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩㈪㈫㈬㈭㈮㈯㈰㈱㈲㈳㈴㈵㈶㈷㈸㈹㈺㈻㈼㈽㈾㈿ -
3240 ㉀㉁㉂㉃㉄㉅㉆㉇㉈㉉㉊㉋㉌㉍㉎㉏㉐㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟ -
3260 ㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉼㉽㉾㉿ -
3280 ㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉㊊㊋㊌㊍㊎㊏㊐㊑㊒㊓㊔㊕㊖㊗㊘㊙㊚㊛㊜㊝㊞㊟ -
32A0 ㊠㊡㊢㊣㊤㊥㊦㊧㊨㊩㊪㊫㊬㊭㊮㊯㊰㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿ -
32C0 ㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉㋊㋋㋌㋍㋎㋏㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟ -
32E0 ㋠㋡㋢㋣㋤㋥㋦㋧㋨㋩㋪㋫㋬㋭㋮㋯㋰㋱㋲㋳㋴㋵㋶㋷㋸㋹㋺㋻㋼㋽㋾㋿ -
3300 ㌀㌁㌂㌃㌄㌅㌆㌇㌈㌉㌊㌋㌌㌍㌎㌏㌐㌑㌒㌓㌔㌕㌖㌗㌘㌙㌚㌛㌜㌝㌞㌟ -
3320 ㌠㌡㌢㌣㌤㌥㌦㌧㌨㌩㌪㌫㌬㌭㌮㌯㌰㌱㌲㌳㌴㌵㌶㌷㌸㌹㌺㌻㌼㌽㌾㌿ -
3340 ㍀㍁㍂㍃㍄㍅㍆㍇㍈㍉㍊㍋㍌㍍㍎㍏㍐㍑㍒㍓㍔㍕㍖㍗㍘㍙㍚㍛㍜㍝㍞㍟ -
3360 ㍠㍡㍢㍣㍤㍥㍦㍧㍨㍩㍪㍫㍬㍭㍮㍯㍰㍱㍲㍳㍴㍵㍶㍷㍸㍹㍺㍻㍼㍽㍾㍿ -
3380 ㎀㎁㎂㎃㎄㎅㎆㎇㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟ -
33A0 ㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿ -
33C0 ㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏋㏌㏍㏎㏏㏐㏑㏒㏓㏔㏕㏖㏗㏘㏙㏚㏛㏜㏝㏞㏟ -
33E0 ㏠㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱㏲㏳㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽㏾㏿ -
3400 㐀㐁㐂㐃㐄㐅㐆㐇㐈㐉㐊㐋㐌㐍㐎㐏㐐㐑㐒㐓㐔㐕㐖㐗㐘㐙㐚㐛㐜㐝㐞㐟 -
3420 㐠㐡㐢㐣㐤㐥㐦㐧㐨㐩㐪㐫㐬㐭㐮㐯㐰㐱㐲㐳㐴㐵㐶㐷㐸㐹㐺㐻㐼㐽㐾㐿 -
3440 㑀㑁㑂㑃㑄㑅㑆㑇㑈㑉㑊㑋㑌㑍㑎㑏㑐㑑㑒㑓㑔㑕㑖㑗㑘㑙㑚㑛㑜㑝㑞㑟 -
3460 㑠㑡㑢㑣㑤㑥㑦㑧㑨㑩㑪㑫㑬㑭㑮㑯㑰㑱㑲㑳㑴㑵㑶㑷㑸㑹㑺㑻㑼㑽㑾㑿 -
3480 㒀㒁㒂㒃㒄㒅㒆㒇㒈㒉㒊㒋㒌㒍㒎㒏㒐㒑㒒㒓㒔㒕㒖㒗㒘㒙㒚㒛㒜㒝㒞㒟 -
34A0 㒠㒡㒢㒣㒤㒥㒦㒧㒨㒩㒪㒫㒬㒭㒮㒯㒰㒱㒲㒳㒴㒵㒶㒷㒸㒹㒺㒻㒼㒽㒾㒿 -
34C0 㓀㓁㓂㓃㓄㓅㓆㓇㓈㓉㓊㓋㓌㓍㓎㓏㓐㓑㓒㓓㓔㓕㓖㓗㓘㓙㓚㓛㓜㓝㓞㓟 -
34E0 㓠㓡㓢㓣㓤㓥㓦㓧㓨㓩㓪㓫㓬㓭㓮㓯㓰㓱㓲㓳㓴㓵㓶㓷㓸㓹㓺㓻㓼㓽㓾㓿 -
3500 㔀㔁㔂㔃㔄㔅㔆㔇㔈㔉㔊㔋㔌㔍㔎㔏㔐㔑㔒㔓㔔㔕㔖㔗㔘㔙㔚㔛㔜㔝㔞㔟 -
3520 㔠㔡㔢㔣㔤㔥㔦㔧㔨㔩㔪㔫㔬㔭㔮㔯㔰㔱㔲㔳㔴㔵㔶㔷㔸㔹㔺㔻㔼㔽㔾㔿 -
3540 㕀㕁㕂㕃㕄㕅㕆㕇㕈㕉㕊㕋㕌㕍㕎㕏㕐㕑㕒㕓㕔㕕㕖㕗㕘㕙㕚㕛㕜㕝㕞㕟 -
3560 㕠㕡㕢㕣㕤㕥㕦㕧㕨㕩㕪㕫㕬㕭㕮㕯㕰㕱㕲㕳㕴㕵㕶㕷㕸㕹㕺㕻㕼㕽㕾㕿 -
3580 㖀㖁㖂㖃㖄㖅㖆㖇㖈㖉㖊㖋㖌㖍㖎㖏㖐㖑㖒㖓㖔㖕㖖㖗㖘㖙㖚㖛㖜㖝㖞㖟 -
35A0 㖠㖡㖢㖣㖤㖥㖦㖧㖨㖩㖪㖫㖬㖭㖮㖯㖰㖱㖲㖳㖴㖵㖶㖷㖸㖹㖺㖻㖼㖽㖾㖿 -
35C0 㗀㗁㗂㗃㗄㗅㗆㗇㗈㗉㗊㗋㗌㗍㗎㗏㗐㗑㗒㗓㗔㗕㗖㗗㗘㗙㗚㗛㗜㗝㗞㗟 -
35E0 㗠㗡㗢㗣㗤㗥㗦㗧㗨㗩㗪㗫㗬㗭㗮㗯㗰㗱㗲㗳㗴㗵㗶㗷㗸㗹㗺㗻㗼㗽㗾㗿 -
3600 㘀㘁㘂㘃㘄㘅㘆㘇㘈㘉㘊㘋㘌㘍㘎㘏㘐㘑㘒㘓㘔㘕㘖㘗㘘㘙㘚㘛㘜㘝㘞㘟 -
3620 㘠㘡㘢㘣㘤㘥㘦㘧㘨㘩㘪㘫㘬㘭㘮㘯㘰㘱㘲㘳㘴㘵㘶㘷㘸㘹㘺㘻㘼㘽㘾㘿 -
3640 㙀㙁㙂㙃㙄㙅㙆㙇㙈㙉㙊㙋㙌㙍㙎㙏㙐㙑㙒㙓㙔㙕㙖㙗㙘㙙㙚㙛㙜㙝㙞㙟 -
3660 㙠㙡㙢㙣㙤㙥㙦㙧㙨㙩㙪㙫㙬㙭㙮㙯㙰㙱㙲㙳㙴㙵㙶㙷㙸㙹㙺㙻㙼㙽㙾㙿 -
3680 㚀㚁㚂㚃㚄㚅㚆㚇㚈㚉㚊㚋㚌㚍㚎㚏㚐㚑㚒㚓㚔㚕㚖㚗㚘㚙㚚㚛㚜㚝㚞㚟 -
36A0 㚠㚡㚢㚣㚤㚥㚦㚧㚨㚩㚪㚫㚬㚭㚮㚯㚰㚱㚲㚳㚴㚵㚶㚷㚸㚹㚺㚻㚼㚽㚾㚿 -
36C0 㛀㛁㛂㛃㛄㛅㛆㛇㛈㛉㛊㛋㛌㛍㛎㛏㛐㛑㛒㛓㛔㛕㛖㛗㛘㛙㛚㛛㛜㛝㛞㛟 -
36E0 㛠㛡㛢㛣㛤㛥㛦㛧㛨㛩㛪㛫㛬㛭㛮㛯㛰㛱㛲㛳㛴㛵㛶㛷㛸㛹㛺㛻㛼㛽㛾㛿 -
3700 㜀㜁㜂㜃㜄㜅㜆㜇㜈㜉㜊㜋㜌㜍㜎㜏㜐㜑㜒㜓㜔㜕㜖㜗㜘㜙㜚㜛㜜㜝㜞㜟 -
3720 㜠㜡㜢㜣㜤㜥㜦㜧㜨㜩㜪㜫㜬㜭㜮㜯㜰㜱㜲㜳㜴㜵㜶㜷㜸㜹㜺㜻㜼㜽㜾㜿 -
3740 㝀㝁㝂㝃㝄㝅㝆㝇㝈㝉㝊㝋㝌㝍㝎㝏㝐㝑㝒㝓㝔㝕㝖㝗㝘㝙㝚㝛㝜㝝㝞㝟 -
3760 㝠㝡㝢㝣㝤㝥㝦㝧㝨㝩㝪㝫㝬㝭㝮㝯㝰㝱㝲㝳㝴㝵㝶㝷㝸㝹㝺㝻㝼㝽㝾㝿 -
3780 㞀㞁㞂㞃㞄㞅㞆㞇㞈㞉㞊㞋㞌㞍㞎㞏㞐㞑㞒㞓㞔㞕㞖㞗㞘㞙㞚㞛㞜㞝㞞㞟 -
37A0 㞠㞡㞢㞣㞤㞥㞦㞧㞨㞩㞪㞫㞬㞭㞮㞯㞰㞱㞲㞳㞴㞵㞶㞷㞸㞹㞺㞻㞼㞽㞾㞿 -
37C0 㟀㟁㟂㟃㟄㟅㟆㟇㟈㟉㟊㟋㟌㟍㟎㟏㟐㟑㟒㟓㟔㟕㟖㟗㟘㟙㟚㟛㟜㟝㟞㟟 -
37E0 㟠㟡㟢㟣㟤㟥㟦㟧㟨㟩㟪㟫㟬㟭㟮㟯㟰㟱㟲㟳㟴㟵㟶㟷㟸㟹㟺㟻㟼㟽㟾㟿 -
3800 㠀㠁㠂㠃㠄㠅㠆㠇㠈㠉㠊㠋㠌㠍㠎㠏㠐㠑㠒㠓㠔㠕㠖㠗㠘㠙㠚㠛㠜㠝㠞㠟 -
3820 㠠㠡㠢㠣㠤㠥㠦㠧㠨㠩㠪㠫㠬㠭㠮㠯㠰㠱㠲㠳㠴㠵㠶㠷㠸㠹㠺㠻㠼㠽㠾㠿 -
3840 㡀㡁㡂㡃㡄㡅㡆㡇㡈㡉㡊㡋㡌㡍㡎㡏㡐㡑㡒㡓㡔㡕㡖㡗㡘㡙㡚㡛㡜㡝㡞㡟 -
3860 㡠㡡㡢㡣㡤㡥㡦㡧㡨㡩㡪㡫㡬㡭㡮㡯㡰㡱㡲㡳㡴㡵㡶㡷㡸㡹㡺㡻㡼㡽㡾㡿 -
3880 㢀㢁㢂㢃㢄㢅㢆㢇㢈㢉㢊㢋㢌㢍㢎㢏㢐㢑㢒㢓㢔㢕㢖㢗㢘㢙㢚㢛㢜㢝㢞㢟 -
38A0 㢠㢡㢢㢣㢤㢥㢦㢧㢨㢩㢪㢫㢬㢭㢮㢯㢰㢱㢲㢳㢴㢵㢶㢷㢸㢹㢺㢻㢼㢽㢾㢿 -
38C0 㣀㣁㣂㣃㣄㣅㣆㣇㣈㣉㣊㣋㣌㣍㣎㣏㣐㣑㣒㣓㣔㣕㣖㣗㣘㣙㣚㣛㣜㣝㣞㣟 -
38E0 㣠㣡㣢㣣㣤㣥㣦㣧㣨㣩㣪㣫㣬㣭㣮㣯㣰㣱㣲㣳㣴㣵㣶㣷㣸㣹㣺㣻㣼㣽㣾㣿 -
3900 㤀㤁㤂㤃㤄㤅㤆㤇㤈㤉㤊㤋㤌㤍㤎㤏㤐㤑㤒㤓㤔㤕㤖㤗㤘㤙㤚㤛㤜㤝㤞㤟 -
3920 㤠㤡㤢㤣㤤㤥㤦㤧㤨㤩㤪㤫㤬㤭㤮㤯㤰㤱㤲㤳㤴㤵㤶㤷㤸㤹㤺㤻㤼㤽㤾㤿 -
3940 㥀㥁㥂㥃㥄㥅㥆㥇㥈㥉㥊㥋㥌㥍㥎㥏㥐㥑㥒㥓㥔㥕㥖㥗㥘㥙㥚㥛㥜㥝㥞㥟 -
3960 㥠㥡㥢㥣㥤㥥㥦㥧㥨㥩㥪㥫㥬㥭㥮㥯㥰㥱㥲㥳㥴㥵㥶㥷㥸㥹㥺㥻㥼㥽㥾㥿 -
3980 㦀㦁㦂㦃㦄㦅㦆㦇㦈㦉㦊㦋㦌㦍㦎㦏㦐㦑㦒㦓㦔㦕㦖㦗㦘㦙㦚㦛㦜㦝㦞㦟 -
39A0 㦠㦡㦢㦣㦤㦥㦦㦧㦨㦩㦪㦫㦬㦭㦮㦯㦰㦱㦲㦳㦴㦵㦶㦷㦸㦹㦺㦻㦼㦽㦾㦿 -
39C0 㧀㧁㧂㧃㧄㧅㧆㧇㧈㧉㧊㧋㧌㧍㧎㧏㧐㧑㧒㧓㧔㧕㧖㧗㧘㧙㧚㧛㧜㧝㧞㧟 -
39E0 㧠㧡㧢㧣㧤㧥㧦㧧㧨㧩㧪㧫㧬㧭㧮㧯㧰㧱㧲㧳㧴㧵㧶㧷㧸㧹㧺㧻㧼㧽㧾㧿 -
3A00 㨀㨁㨂㨃㨄㨅㨆㨇㨈㨉㨊㨋㨌㨍㨎㨏㨐㨑㨒㨓㨔㨕㨖㨗㨘㨙㨚㨛㨜㨝㨞㨟 -
3A20 㨠㨡㨢㨣㨤㨥㨦㨧㨨㨩㨪㨫㨬㨭㨮㨯㨰㨱㨲㨳㨴㨵㨶㨷㨸㨹㨺㨻㨼㨽㨾㨿 -
3A40 㩀㩁㩂㩃㩄㩅㩆㩇㩈㩉㩊㩋㩌㩍㩎㩏㩐㩑㩒㩓㩔㩕㩖㩗㩘㩙㩚㩛㩜㩝㩞㩟 -
3A60 㩠㩡㩢㩣㩤㩥㩦㩧㩨㩩㩪㩫㩬㩭㩮㩯㩰㩱㩲㩳㩴㩵㩶㩷㩸㩹㩺㩻㩼㩽㩾㩿 -
3A80 㪀㪁㪂㪃㪄㪅㪆㪇㪈㪉㪊㪋㪌㪍㪎㪏㪐㪑㪒㪓㪔㪕㪖㪗㪘㪙㪚㪛㪜㪝㪞㪟 -
3AA0 㪠㪡㪢㪣㪤㪥㪦㪧㪨㪩㪪㪫㪬㪭㪮㪯㪰㪱㪲㪳㪴㪵㪶㪷㪸㪹㪺㪻㪼㪽㪾㪿 -
3AC0 㫀㫁㫂㫃㫄㫅㫆㫇㫈㫉㫊㫋㫌㫍㫎㫏㫐㫑㫒㫓㫔㫕㫖㫗㫘㫙㫚㫛㫜㫝㫞㫟 -
3AE0 㫠㫡㫢㫣㫤㫥㫦㫧㫨㫩㫪㫫㫬㫭㫮㫯㫰㫱㫲㫳㫴㫵㫶㫷㫸㫹㫺㫻㫼㫽㫾㫿 -
3B00 㬀㬁㬂㬃㬄㬅㬆㬇㬈㬉㬊㬋㬌㬍㬎㬏㬐㬑㬒㬓㬔㬕㬖㬗㬘㬙㬚㬛㬜㬝㬞㬟 -
3B20 㬠㬡㬢㬣㬤㬥㬦㬧㬨㬩㬪㬫㬬㬭㬮㬯㬰㬱㬲㬳㬴㬵㬶㬷㬸㬹㬺㬻㬼㬽㬾㬿 -
3B40 㭀㭁㭂㭃㭄㭅㭆㭇㭈㭉㭊㭋㭌㭍㭎㭏㭐㭑㭒㭓㭔㭕㭖㭗㭘㭙㭚㭛㭜㭝㭞㭟 -
3B60 㭠㭡㭢㭣㭤㭥㭦㭧㭨㭩㭪㭫㭬㭭㭮㭯㭰㭱㭲㭳㭴㭵㭶㭷㭸㭹㭺㭻㭼㭽㭾㭿 -
3B80 㮀㮁㮂㮃㮄㮅㮆㮇㮈㮉㮊㮋㮌㮍㮎㮏㮐㮑㮒㮓㮔㮕㮖㮗㮘㮙㮚㮛㮜㮝㮞㮟 -
3BA0 㮠㮡㮢㮣㮤㮥㮦㮧㮨㮩㮪㮫㮬㮭㮮㮯㮰㮱㮲㮳㮴㮵㮶㮷㮸㮹㮺㮻㮼㮽㮾㮿 -
3BC0 㯀㯁㯂㯃㯄㯅㯆㯇㯈㯉㯊㯋㯌㯍㯎㯏㯐㯑㯒㯓㯔㯕㯖㯗㯘㯙㯚㯛㯜㯝㯞㯟 -
3BE0 㯠㯡㯢㯣㯤㯥㯦㯧㯨㯩㯪㯫㯬㯭㯮㯯㯰㯱㯲㯳㯴㯵㯶㯷㯸㯹㯺㯻㯼㯽㯾㯿 -
3C00 㰀㰁㰂㰃㰄㰅㰆㰇㰈㰉㰊㰋㰌㰍㰎㰏㰐㰑㰒㰓㰔㰕㰖㰗㰘㰙㰚㰛㰜㰝㰞㰟 -
3C20 㰠㰡㰢㰣㰤㰥㰦㰧㰨㰩㰪㰫㰬㰭㰮㰯㰰㰱㰲㰳㰴㰵㰶㰷㰸㰹㰺㰻㰼㰽㰾㰿 -
3C40 㱀㱁㱂㱃㱄㱅㱆㱇㱈㱉㱊㱋㱌㱍㱎㱏㱐㱑㱒㱓㱔㱕㱖㱗㱘㱙㱚㱛㱜㱝㱞㱟 -
3C60 㱠㱡㱢㱣㱤㱥㱦㱧㱨㱩㱪㱫㱬㱭㱮㱯㱰㱱㱲㱳㱴㱵㱶㱷㱸㱹㱺㱻㱼㱽㱾㱿 -
3C80 㲀㲁㲂㲃㲄㲅㲆㲇㲈㲉㲊㲋㲌㲍㲎㲏㲐㲑㲒㲓㲔㲕㲖㲗㲘㲙㲚㲛㲜㲝㲞㲟 -
3CA0 㲠㲡㲢㲣㲤㲥㲦㲧㲨㲩㲪㲫㲬㲭㲮㲯㲰㲱㲲㲳㲴㲵㲶㲷㲸㲹㲺㲻㲼㲽㲾㲿 -
3CC0 㳀㳁㳂㳃㳄㳅㳆㳇㳈㳉㳊㳋㳌㳍㳎㳏㳐㳑㳒㳓㳔㳕㳖㳗㳘㳙㳚㳛㳜㳝㳞㳟 -
3CE0 㳠㳡㳢㳣㳤㳥㳦㳧㳨㳩㳪㳫㳬㳭㳮㳯㳰㳱㳲㳳㳴㳵㳶㳷㳸㳹㳺㳻㳼㳽㳾㳿 -
3D00 㴀㴁㴂㴃㴄㴅㴆㴇㴈㴉㴊㴋㴌㴍㴎㴏㴐㴑㴒㴓㴔㴕㴖㴗㴘㴙㴚㴛㴜㴝㴞㴟 -
3D20 㴠㴡㴢㴣㴤㴥㴦㴧㴨㴩㴪㴫㴬㴭㴮㴯㴰㴱㴲㴳㴴㴵㴶㴷㴸㴹㴺㴻㴼㴽㴾㴿 -
3D40 㵀㵁㵂㵃㵄㵅㵆㵇㵈㵉㵊㵋㵌㵍㵎㵏㵐㵑㵒㵓㵔㵕㵖㵗㵘㵙㵚㵛㵜㵝㵞㵟 -
3D60 㵠㵡㵢㵣㵤㵥㵦㵧㵨㵩㵪㵫㵬㵭㵮㵯㵰㵱㵲㵳㵴㵵㵶㵷㵸㵹㵺㵻㵼㵽㵾㵿 -
3D80 㶀㶁㶂㶃㶄㶅㶆㶇㶈㶉㶊㶋㶌㶍㶎㶏㶐㶑㶒㶓㶔㶕㶖㶗㶘㶙㶚㶛㶜㶝㶞㶟 -
3DA0 㶠㶡㶢㶣㶤㶥㶦㶧㶨㶩㶪㶫㶬㶭㶮㶯㶰㶱㶲㶳㶴㶵㶶㶷㶸㶹㶺㶻㶼㶽㶾㶿 -
3DC0 㷀㷁㷂㷃㷄㷅㷆㷇㷈㷉㷊㷋㷌㷍㷎㷏㷐㷑㷒㷓㷔㷕㷖㷗㷘㷙㷚㷛㷜㷝㷞㷟 -
3DE0 㷠㷡㷢㷣㷤㷥㷦㷧㷨㷩㷪㷫㷬㷭㷮㷯㷰㷱㷲㷳㷴㷵㷶㷷㷸㷹㷺㷻㷼㷽㷾㷿 -
3E00 㸀㸁㸂㸃㸄㸅㸆㸇㸈㸉㸊㸋㸌㸍㸎㸏㸐㸑㸒㸓㸔㸕㸖㸗㸘㸙㸚㸛㸜㸝㸞㸟 -
3E20 㸠㸡㸢㸣㸤㸥㸦㸧㸨㸩㸪㸫㸬㸭㸮㸯㸰㸱㸲㸳㸴㸵㸶㸷㸸㸹㸺㸻㸼㸽㸾㸿 -
3E40 㹀㹁㹂㹃㹄㹅㹆㹇㹈㹉㹊㹋㹌㹍㹎㹏㹐㹑㹒㹓㹔㹕㹖㹗㹘㹙㹚㹛㹜㹝㹞㹟 -
3E60 㹠㹡㹢㹣㹤㹥㹦㹧㹨㹩㹪㹫㹬㹭㹮㹯㹰㹱㹲㹳㹴㹵㹶㹷㹸㹹㹺㹻㹼㹽㹾㹿 -
3E80 㺀㺁㺂㺃㺄㺅㺆㺇㺈㺉㺊㺋㺌㺍㺎㺏㺐㺑㺒㺓㺔㺕㺖㺗㺘㺙㺚㺛㺜㺝㺞㺟 -
3EA0 㺠㺡㺢㺣㺤㺥㺦㺧㺨㺩㺪㺫㺬㺭㺮㺯㺰㺱㺲㺳㺴㺵㺶㺷㺸㺹㺺㺻㺼㺽㺾㺿 -
3EC0 㻀㻁㻂㻃㻄㻅㻆㻇㻈㻉㻊㻋㻌㻍㻎㻏㻐㻑㻒㻓㻔㻕㻖㻗㻘㻙㻚㻛㻜㻝㻞㻟 -
3EE0 㻠㻡㻢㻣㻤㻥㻦㻧㻨㻩㻪㻫㻬㻭㻮㻯㻰㻱㻲㻳㻴㻵㻶㻷㻸㻹㻺㻻㻼㻽㻾㻿 -
3F00 㼀㼁㼂㼃㼄㼅㼆㼇㼈㼉㼊㼋㼌㼍㼎㼏㼐㼑㼒㼓㼔㼕㼖㼗㼘㼙㼚㼛㼜㼝㼞㼟 -
3F20 㼠㼡㼢㼣㼤㼥㼦㼧㼨㼩㼪㼫㼬㼭㼮㼯㼰㼱㼲㼳㼴㼵㼶㼷㼸㼹㼺㼻㼼㼽㼾㼿 -
3F40 㽀㽁㽂㽃㽄㽅㽆㽇㽈㽉㽊㽋㽌㽍㽎㽏㽐㽑㽒㽓㽔㽕㽖㽗㽘㽙㽚㽛㽜㽝㽞㽟 -
3F60 㽠㽡㽢㽣㽤㽥㽦㽧㽨㽩㽪㽫㽬㽭㽮㽯㽰㽱㽲㽳㽴㽵㽶㽷㽸㽹㽺㽻㽼㽽㽾㽿 -
3F80 㾀㾁㾂㾃㾄㾅㾆㾇㾈㾉㾊㾋㾌㾍㾎㾏㾐㾑㾒㾓㾔㾕㾖㾗㾘㾙㾚㾛㾜㾝㾞㾟 -
3FA0 㾠㾡㾢㾣㾤㾥㾦㾧㾨㾩㾪㾫㾬㾭㾮㾯㾰㾱㾲㾳㾴㾵㾶㾷㾸㾹㾺㾻㾼㾽㾾㾿 -
3FC0 㿀㿁㿂㿃㿄㿅㿆㿇㿈㿉㿊㿋㿌㿍㿎㿏㿐㿑㿒㿓㿔㿕㿖㿗㿘㿙㿚㿛㿜㿝㿞㿟 -
3FE0 㿠㿡㿢㿣㿤㿥㿦㿧㿨㿩㿪㿫㿬㿭㿮㿯㿰㿱㿲㿳㿴㿵㿶㿷㿸㿹㿺㿻㿼㿽㿾㿿 -
4000 䀀䀁䀂䀃䀄䀅䀆䀇䀈䀉䀊䀋䀌䀍䀎䀏䀐䀑䀒䀓䀔䀕䀖䀗䀘䀙䀚䀛䀜䀝䀞䀟 -
4020 䀠䀡䀢䀣䀤䀥䀦䀧䀨䀩䀪䀫䀬䀭䀮䀯䀰䀱䀲䀳䀴䀵䀶䀷䀸䀹䀺䀻䀼䀽䀾䀿 -
4040 䁀䁁䁂䁃䁄䁅䁆䁇䁈䁉䁊䁋䁌䁍䁎䁏䁐䁑䁒䁓䁔䁕䁖䁗䁘䁙䁚䁛䁜䁝䁞䁟 -
4060 䁠䁡䁢䁣䁤䁥䁦䁧䁨䁩䁪䁫䁬䁭䁮䁯䁰䁱䁲䁳䁴䁵䁶䁷䁸䁹䁺䁻䁼䁽䁾䁿 -
4080 䂀䂁䂂䂃䂄䂅䂆䂇䂈䂉䂊䂋䂌䂍䂎䂏䂐䂑䂒䂓䂔䂕䂖䂗䂘䂙䂚䂛䂜䂝䂞䂟 -
40A0 䂠䂡䂢䂣䂤䂥䂦䂧䂨䂩䂪䂫䂬䂭䂮䂯䂰䂱䂲䂳䂴䂵䂶䂷䂸䂹䂺䂻䂼䂽䂾䂿 -
40C0 䃀䃁䃂䃃䃄䃅䃆䃇䃈䃉䃊䃋䃌䃍䃎䃏䃐䃑䃒䃓䃔䃕䃖䃗䃘䃙䃚䃛䃜䃝䃞䃟 -
40E0 䃠䃡䃢䃣䃤䃥䃦䃧䃨䃩䃪䃫䃬䃭䃮䃯䃰䃱䃲䃳䃴䃵䃶䃷䃸䃹䃺䃻䃼䃽䃾䃿 -
4100 䄀䄁䄂䄃䄄䄅䄆䄇䄈䄉䄊䄋䄌䄍䄎䄏䄐䄑䄒䄓䄔䄕䄖䄗䄘䄙䄚䄛䄜䄝䄞䄟 -
4120 䄠䄡䄢䄣䄤䄥䄦䄧䄨䄩䄪䄫䄬䄭䄮䄯䄰䄱䄲䄳䄴䄵䄶䄷䄸䄹䄺䄻䄼䄽䄾䄿 -
4140 䅀䅁䅂䅃䅄䅅䅆䅇䅈䅉䅊䅋䅌䅍䅎䅏䅐䅑䅒䅓䅔䅕䅖䅗䅘䅙䅚䅛䅜䅝䅞䅟 -
4160 䅠䅡䅢䅣䅤䅥䅦䅧䅨䅩䅪䅫䅬䅭䅮䅯䅰䅱䅲䅳䅴䅵䅶䅷䅸䅹䅺䅻䅼䅽䅾䅿 -
4180 䆀䆁䆂䆃䆄䆅䆆䆇䆈䆉䆊䆋䆌䆍䆎䆏䆐䆑䆒䆓䆔䆕䆖䆗䆘䆙䆚䆛䆜䆝䆞䆟 -
41A0 䆠䆡䆢䆣䆤䆥䆦䆧䆨䆩䆪䆫䆬䆭䆮䆯䆰䆱䆲䆳䆴䆵䆶䆷䆸䆹䆺䆻䆼䆽䆾䆿 -
41C0 䇀䇁䇂䇃䇄䇅䇆䇇䇈䇉䇊䇋䇌䇍䇎䇏䇐䇑䇒䇓䇔䇕䇖䇗䇘䇙䇚䇛䇜䇝䇞䇟 -
41E0 䇠䇡䇢䇣䇤䇥䇦䇧䇨䇩䇪䇫䇬䇭䇮䇯䇰䇱䇲䇳䇴䇵䇶䇷䇸䇹䇺䇻䇼䇽䇾䇿 -
4200 䈀䈁䈂䈃䈄䈅䈆䈇䈈䈉䈊䈋䈌䈍䈎䈏䈐䈑䈒䈓䈔䈕䈖䈗䈘䈙䈚䈛䈜䈝䈞䈟 -
4220 䈠䈡䈢䈣䈤䈥䈦䈧䈨䈩䈪䈫䈬䈭䈮䈯䈰䈱䈲䈳䈴䈵䈶䈷䈸䈹䈺䈻䈼䈽䈾䈿 -
4240 䉀䉁䉂䉃䉄䉅䉆䉇䉈䉉䉊䉋䉌䉍䉎䉏䉐䉑䉒䉓䉔䉕䉖䉗䉘䉙䉚䉛䉜䉝䉞䉟 -
4260 䉠䉡䉢䉣䉤䉥䉦䉧䉨䉩䉪䉫䉬䉭䉮䉯䉰䉱䉲䉳䉴䉵䉶䉷䉸䉹䉺䉻䉼䉽䉾䉿 -
4280 䊀䊁䊂䊃䊄䊅䊆䊇䊈䊉䊊䊋䊌䊍䊎䊏䊐䊑䊒䊓䊔䊕䊖䊗䊘䊙䊚䊛䊜䊝䊞䊟 -
42A0 䊠䊡䊢䊣䊤䊥䊦䊧䊨䊩䊪䊫䊬䊭䊮䊯䊰䊱䊲䊳䊴䊵䊶䊷䊸䊹䊺䊻䊼䊽䊾䊿 -
42C0 䋀䋁䋂䋃䋄䋅䋆䋇䋈䋉䋊䋋䋌䋍䋎䋏䋐䋑䋒䋓䋔䋕䋖䋗䋘䋙䋚䋛䋜䋝䋞䋟 -
42E0 䋠䋡䋢䋣䋤䋥䋦䋧䋨䋩䋪䋫䋬䋭䋮䋯䋰䋱䋲䋳䋴䋵䋶䋷䋸䋹䋺䋻䋼䋽䋾䋿 -
4300 䌀䌁䌂䌃䌄䌅䌆䌇䌈䌉䌊䌋䌌䌍䌎䌏䌐䌑䌒䌓䌔䌕䌖䌗䌘䌙䌚䌛䌜䌝䌞䌟 -
4320 䌠䌡䌢䌣䌤䌥䌦䌧䌨䌩䌪䌫䌬䌭䌮䌯䌰䌱䌲䌳䌴䌵䌶䌷䌸䌹䌺䌻䌼䌽䌾䌿 -
4340 䍀䍁䍂䍃䍄䍅䍆䍇䍈䍉䍊䍋䍌䍍䍎䍏䍐䍑䍒䍓䍔䍕䍖䍗䍘䍙䍚䍛䍜䍝䍞䍟 -
4360 䍠䍡䍢䍣䍤䍥䍦䍧䍨䍩䍪䍫䍬䍭䍮䍯䍰䍱䍲䍳䍴䍵䍶䍷䍸䍹䍺䍻䍼䍽䍾䍿 -
4380 䎀䎁䎂䎃䎄䎅䎆䎇䎈䎉䎊䎋䎌䎍䎎䎏䎐䎑䎒䎓䎔䎕䎖䎗䎘䎙䎚䎛䎜䎝䎞䎟 -
43A0 䎠䎡䎢䎣䎤䎥䎦䎧䎨䎩䎪䎫䎬䎭䎮䎯䎰䎱䎲䎳䎴䎵䎶䎷䎸䎹䎺䎻䎼䎽䎾䎿 -
43C0 䏀䏁䏂䏃䏄䏅䏆䏇䏈䏉䏊䏋䏌䏍䏎䏏䏐䏑䏒䏓䏔䏕䏖䏗䏘䏙䏚䏛䏜䏝䏞䏟 -
43E0 䏠䏡䏢䏣䏤䏥䏦䏧䏨䏩䏪䏫䏬䏭䏮䏯䏰䏱䏲䏳䏴䏵䏶䏷䏸䏹䏺䏻䏼䏽䏾䏿 -
4400 䐀䐁䐂䐃䐄䐅䐆䐇䐈䐉䐊䐋䐌䐍䐎䐏䐐䐑䐒䐓䐔䐕䐖䐗䐘䐙䐚䐛䐜䐝䐞䐟 -
4420 䐠䐡䐢䐣䐤䐥䐦䐧䐨䐩䐪䐫䐬䐭䐮䐯䐰䐱䐲䐳䐴䐵䐶䐷䐸䐹䐺䐻䐼䐽䐾䐿 -
4440 䑀䑁䑂䑃䑄䑅䑆䑇䑈䑉䑊䑋䑌䑍䑎䑏䑐䑑䑒䑓䑔䑕䑖䑗䑘䑙䑚䑛䑜䑝䑞䑟 -
4460 䑠䑡䑢䑣䑤䑥䑦䑧䑨䑩䑪䑫䑬䑭䑮䑯䑰䑱䑲䑳䑴䑵䑶䑷䑸䑹䑺䑻䑼䑽䑾䑿 -
4480 䒀䒁䒂䒃䒄䒅䒆䒇䒈䒉䒊䒋䒌䒍䒎䒏䒐䒑䒒䒓䒔䒕䒖䒗䒘䒙䒚䒛䒜䒝䒞䒟 -
44A0 䒠䒡䒢䒣䒤䒥䒦䒧䒨䒩䒪䒫䒬䒭䒮䒯䒰䒱䒲䒳䒴䒵䒶䒷䒸䒹䒺䒻䒼䒽䒾䒿 -
44C0 䓀䓁䓂䓃䓄䓅䓆䓇䓈䓉䓊䓋䓌䓍䓎䓏䓐䓑䓒䓓䓔䓕䓖䓗䓘䓙䓚䓛䓜䓝䓞䓟 -
44E0 䓠䓡䓢䓣䓤䓥䓦䓧䓨䓩䓪䓫䓬䓭䓮䓯䓰䓱䓲䓳䓴䓵䓶䓷䓸䓹䓺䓻䓼䓽䓾䓿 -
4500 䔀䔁䔂䔃䔄䔅䔆䔇䔈䔉䔊䔋䔌䔍䔎䔏䔐䔑䔒䔓䔔䔕䔖䔗䔘䔙䔚䔛䔜䔝䔞䔟 -
4520 䔠䔡䔢䔣䔤䔥䔦䔧䔨䔩䔪䔫䔬䔭䔮䔯䔰䔱䔲䔳䔴䔵䔶䔷䔸䔹䔺䔻䔼䔽䔾䔿 -
4540 䕀䕁䕂䕃䕄䕅䕆䕇䕈䕉䕊䕋䕌䕍䕎䕏䕐䕑䕒䕓䕔䕕䕖䕗䕘䕙䕚䕛䕜䕝䕞䕟 -
4560 䕠䕡䕢䕣䕤䕥䕦䕧䕨䕩䕪䕫䕬䕭䕮䕯䕰䕱䕲䕳䕴䕵䕶䕷䕸䕹䕺䕻䕼䕽䕾䕿 -
4580 䖀䖁䖂䖃䖄䖅䖆䖇䖈䖉䖊䖋䖌䖍䖎䖏䖐䖑䖒䖓䖔䖕䖖䖗䖘䖙䖚䖛䖜䖝䖞䖟 -
45A0 䖠䖡䖢䖣䖤䖥䖦䖧䖨䖩䖪䖫䖬䖭䖮䖯䖰䖱䖲䖳䖴䖵䖶䖷䖸䖹䖺䖻䖼䖽䖾䖿 -
45C0 䗀䗁䗂䗃䗄䗅䗆䗇䗈䗉䗊䗋䗌䗍䗎䗏䗐䗑䗒䗓䗔䗕䗖䗗䗘䗙䗚䗛䗜䗝䗞䗟 -
45E0 䗠䗡䗢䗣䗤䗥䗦䗧䗨䗩䗪䗫䗬䗭䗮䗯䗰䗱䗲䗳䗴䗵䗶䗷䗸䗹䗺䗻䗼䗽䗾䗿 -
4600 䘀䘁䘂䘃䘄䘅䘆䘇䘈䘉䘊䘋䘌䘍䘎䘏䘐䘑䘒䘓䘔䘕䘖䘗䘘䘙䘚䘛䘜䘝䘞䘟 -
4620 䘠䘡䘢䘣䘤䘥䘦䘧䘨䘩䘪䘫䘬䘭䘮䘯䘰䘱䘲䘳䘴䘵䘶䘷䘸䘹䘺䘻䘼䘽䘾䘿 -
4640 䙀䙁䙂䙃䙄䙅䙆䙇䙈䙉䙊䙋䙌䙍䙎䙏䙐䙑䙒䙓䙔䙕䙖䙗䙘䙙䙚䙛䙜䙝䙞䙟 -
4660 䙠䙡䙢䙣䙤䙥䙦䙧䙨䙩䙪䙫䙬䙭䙮䙯䙰䙱䙲䙳䙴䙵䙶䙷䙸䙹䙺䙻䙼䙽䙾䙿 -
4680 䚀䚁䚂䚃䚄䚅䚆䚇䚈䚉䚊䚋䚌䚍䚎䚏䚐䚑䚒䚓䚔䚕䚖䚗䚘䚙䚚䚛䚜䚝䚞䚟 -
46A0 䚠䚡䚢䚣䚤䚥䚦䚧䚨䚩䚪䚫䚬䚭䚮䚯䚰䚱䚲䚳䚴䚵䚶䚷䚸䚹䚺䚻䚼䚽䚾䚿 -
46C0 䛀䛁䛂䛃䛄䛅䛆䛇䛈䛉䛊䛋䛌䛍䛎䛏䛐䛑䛒䛓䛔䛕䛖䛗䛘䛙䛚䛛䛜䛝䛞䛟 -
46E0 䛠䛡䛢䛣䛤䛥䛦䛧䛨䛩䛪䛫䛬䛭䛮䛯䛰䛱䛲䛳䛴䛵䛶䛷䛸䛹䛺䛻䛼䛽䛾䛿 -
4700 䜀䜁䜂䜃䜄䜅䜆䜇䜈䜉䜊䜋䜌䜍䜎䜏䜐䜑䜒䜓䜔䜕䜖䜗䜘䜙䜚䜛䜜䜝䜞䜟 -
4720 䜠䜡䜢䜣䜤䜥䜦䜧䜨䜩䜪䜫䜬䜭䜮䜯䜰䜱䜲䜳䜴䜵䜶䜷䜸䜹䜺䜻䜼䜽䜾䜿 -
4740 䝀䝁䝂䝃䝄䝅䝆䝇䝈䝉䝊䝋䝌䝍䝎䝏䝐䝑䝒䝓䝔䝕䝖䝗䝘䝙䝚䝛䝜䝝䝞䝟 -
4760 䝠䝡䝢䝣䝤䝥䝦䝧䝨䝩䝪䝫䝬䝭䝮䝯䝰䝱䝲䝳䝴䝵䝶䝷䝸䝹䝺䝻䝼䝽䝾䝿 -
4780 䞀䞁䞂䞃䞄䞅䞆䞇䞈䞉䞊䞋䞌䞍䞎䞏䞐䞑䞒䞓䞔䞕䞖䞗䞘䞙䞚䞛䞜䞝䞞䞟 -
47A0 䞠䞡䞢䞣䞤䞥䞦䞧䞨䞩䞪䞫䞬䞭䞮䞯䞰䞱䞲䞳䞴䞵䞶䞷䞸䞹䞺䞻䞼䞽䞾䞿 -
47C0 䟀䟁䟂䟃䟄䟅䟆䟇䟈䟉䟊䟋䟌䟍䟎䟏䟐䟑䟒䟓䟔䟕䟖䟗䟘䟙䟚䟛䟜䟝䟞䟟 -
47E0 䟠䟡䟢䟣䟤䟥䟦䟧䟨䟩䟪䟫䟬䟭䟮䟯䟰䟱䟲䟳䟴䟵䟶䟷䟸䟹䟺䟻䟼䟽䟾䟿 -
4800 䠀䠁䠂䠃䠄䠅䠆䠇䠈䠉䠊䠋䠌䠍䠎䠏䠐䠑䠒䠓䠔䠕䠖䠗䠘䠙䠚䠛䠜䠝䠞䠟 -
4820 䠠䠡䠢䠣䠤䠥䠦䠧䠨䠩䠪䠫䠬䠭䠮䠯䠰䠱䠲䠳䠴䠵䠶䠷䠸䠹䠺䠻䠼䠽䠾䠿 -
4840 䡀䡁䡂䡃䡄䡅䡆䡇䡈䡉䡊䡋䡌䡍䡎䡏䡐䡑䡒䡓䡔䡕䡖䡗䡘䡙䡚䡛䡜䡝䡞䡟 -
4860 䡠䡡䡢䡣䡤䡥䡦䡧䡨䡩䡪䡫䡬䡭䡮䡯䡰䡱䡲䡳䡴䡵䡶䡷䡸䡹䡺䡻䡼䡽䡾䡿 -
4880 䢀䢁䢂䢃䢄䢅䢆䢇䢈䢉䢊䢋䢌䢍䢎䢏䢐䢑䢒䢓䢔䢕䢖䢗䢘䢙䢚䢛䢜䢝䢞䢟 -
48A0 䢠䢡䢢䢣䢤䢥䢦䢧䢨䢩䢪䢫䢬䢭䢮䢯䢰䢱䢲䢳䢴䢵䢶䢷䢸䢹䢺䢻䢼䢽䢾䢿 -
48C0 䣀䣁䣂䣃䣄䣅䣆䣇䣈䣉䣊䣋䣌䣍䣎䣏䣐䣑䣒䣓䣔䣕䣖䣗䣘䣙䣚䣛䣜䣝䣞䣟 -
48E0 䣠䣡䣢䣣䣤䣥䣦䣧䣨䣩䣪䣫䣬䣭䣮䣯䣰䣱䣲䣳䣴䣵䣶䣷䣸䣹䣺䣻䣼䣽䣾䣿 -
4900 䤀䤁䤂䤃䤄䤅䤆䤇䤈䤉䤊䤋䤌䤍䤎䤏䤐䤑䤒䤓䤔䤕䤖䤗䤘䤙䤚䤛䤜䤝䤞䤟 -
4920 䤠䤡䤢䤣䤤䤥䤦䤧䤨䤩䤪䤫䤬䤭䤮䤯䤰䤱䤲䤳䤴䤵䤶䤷䤸䤹䤺䤻䤼䤽䤾䤿 -
4940 䥀䥁䥂䥃䥄䥅䥆䥇䥈䥉䥊䥋䥌䥍䥎䥏䥐䥑䥒䥓䥔䥕䥖䥗䥘䥙䥚䥛䥜䥝䥞䥟 -
4960 䥠䥡䥢䥣䥤䥥䥦䥧䥨䥩䥪䥫䥬䥭䥮䥯䥰䥱䥲䥳䥴䥵䥶䥷䥸䥹䥺䥻䥼䥽䥾䥿 -
4980 䦀䦁䦂䦃䦄䦅䦆䦇䦈䦉䦊䦋䦌䦍䦎䦏䦐䦑䦒䦓䦔䦕䦖䦗䦘䦙䦚䦛䦜䦝䦞䦟 -
49A0 䦠䦡䦢䦣䦤䦥䦦䦧䦨䦩䦪䦫䦬䦭䦮䦯䦰䦱䦲䦳䦴䦵䦶䦷䦸䦹䦺䦻䦼䦽䦾䦿 -
49C0 䧀䧁䧂䧃䧄䧅䧆䧇䧈䧉䧊䧋䧌䧍䧎䧏䧐䧑䧒䧓䧔䧕䧖䧗䧘䧙䧚䧛䧜䧝䧞䧟 -
49E0 䧠䧡䧢䧣䧤䧥䧦䧧䧨䧩䧪䧫䧬䧭䧮䧯䧰䧱䧲䧳䧴䧵䧶䧷䧸䧹䧺䧻䧼䧽䧾䧿 -
4A00 䨀䨁䨂䨃䨄䨅䨆䨇䨈䨉䨊䨋䨌䨍䨎䨏䨐䨑䨒䨓䨔䨕䨖䨗䨘䨙䨚䨛䨜䨝䨞䨟 -
4A20 䨠䨡䨢䨣䨤䨥䨦䨧䨨䨩䨪䨫䨬䨭䨮䨯䨰䨱䨲䨳䨴䨵䨶䨷䨸䨹䨺䨻䨼䨽䨾䨿 -
4A40 䩀䩁䩂䩃䩄䩅䩆䩇䩈䩉䩊䩋䩌䩍䩎䩏䩐䩑䩒䩓䩔䩕䩖䩗䩘䩙䩚䩛䩜䩝䩞䩟 -
4A60 䩠䩡䩢䩣䩤䩥䩦䩧䩨䩩䩪䩫䩬䩭䩮䩯䩰䩱䩲䩳䩴䩵䩶䩷䩸䩹䩺䩻䩼䩽䩾䩿 -
4A80 䪀䪁䪂䪃䪄䪅䪆䪇䪈䪉䪊䪋䪌䪍䪎䪏䪐䪑䪒䪓䪔䪕䪖䪗䪘䪙䪚䪛䪜䪝䪞䪟 -
4AA0 䪠䪡䪢䪣䪤䪥䪦䪧䪨䪩䪪䪫䪬䪭䪮䪯䪰䪱䪲䪳䪴䪵䪶䪷䪸䪹䪺䪻䪼䪽䪾䪿 -
4AC0 䫀䫁䫂䫃䫄䫅䫆䫇䫈䫉䫊䫋䫌䫍䫎䫏䫐䫑䫒䫓䫔䫕䫖䫗䫘䫙䫚䫛䫜䫝䫞䫟 -
4AE0 䫠䫡䫢䫣䫤䫥䫦䫧䫨䫩䫪䫫䫬䫭䫮䫯䫰䫱䫲䫳䫴䫵䫶䫷䫸䫹䫺䫻䫼䫽䫾䫿 -
4B00 䬀䬁䬂䬃䬄䬅䬆䬇䬈䬉䬊䬋䬌䬍䬎䬏䬐䬑䬒䬓䬔䬕䬖䬗䬘䬙䬚䬛䬜䬝䬞䬟 -
4B20 䬠䬡䬢䬣䬤䬥䬦䬧䬨䬩䬪䬫䬬䬭䬮䬯䬰䬱䬲䬳䬴䬵䬶䬷䬸䬹䬺䬻䬼䬽䬾䬿 -
4B40 䭀䭁䭂䭃䭄䭅䭆䭇䭈䭉䭊䭋䭌䭍䭎䭏䭐䭑䭒䭓䭔䭕䭖䭗䭘䭙䭚䭛䭜䭝䭞䭟 -
4B60 䭠䭡䭢䭣䭤䭥䭦䭧䭨䭩䭪䭫䭬䭭䭮䭯䭰䭱䭲䭳䭴䭵䭶䭷䭸䭹䭺䭻䭼䭽䭾䭿 -
4B80 䮀䮁䮂䮃䮄䮅䮆䮇䮈䮉䮊䮋䮌䮍䮎䮏䮐䮑䮒䮓䮔䮕䮖䮗䮘䮙䮚䮛䮜䮝䮞䮟 -
4BA0 䮠䮡䮢䮣䮤䮥䮦䮧䮨䮩䮪䮫䮬䮭䮮䮯䮰䮱䮲䮳䮴䮵䮶䮷䮸䮹䮺䮻䮼䮽䮾䮿 -
4BC0 䯀䯁䯂䯃䯄䯅䯆䯇䯈䯉䯊䯋䯌䯍䯎䯏䯐䯑䯒䯓䯔䯕䯖䯗䯘䯙䯚䯛䯜䯝䯞䯟 -
4BE0 䯠䯡䯢䯣䯤䯥䯦䯧䯨䯩䯪䯫䯬䯭䯮䯯䯰䯱䯲䯳䯴䯵䯶䯷䯸䯹䯺䯻䯼䯽䯾䯿 -
4C00 䰀䰁䰂䰃䰄䰅䰆䰇䰈䰉䰊䰋䰌䰍䰎䰏䰐䰑䰒䰓䰔䰕䰖䰗䰘䰙䰚䰛䰜䰝䰞䰟 -
4C20 䰠䰡䰢䰣䰤䰥䰦䰧䰨䰩䰪䰫䰬䰭䰮䰯䰰䰱䰲䰳䰴䰵䰶䰷䰸䰹䰺䰻䰼䰽䰾䰿 -
4C40 䱀䱁䱂䱃䱄䱅䱆䱇䱈䱉䱊䱋䱌䱍䱎䱏䱐䱑䱒䱓䱔䱕䱖䱗䱘䱙䱚䱛䱜䱝䱞䱟 -
4C60 䱠䱡䱢䱣䱤䱥䱦䱧䱨䱩䱪䱫䱬䱭䱮䱯䱰䱱䱲䱳䱴䱵䱶䱷䱸䱹䱺䱻䱼䱽䱾䱿 -
4C80 䲀䲁䲂䲃䲄䲅䲆䲇䲈䲉䲊䲋䲌䲍䲎䲏䲐䲑䲒䲓䲔䲕䲖䲗䲘䲙䲚䲛䲜䲝䲞䲟 -
4CA0 䲠䲡䲢䲣䲤䲥䲦䲧䲨䲩䲪䲫䲬䲭䲮䲯䲰䲱䲲䲳䲴䲵䲶䲷䲸䲹䲺䲻䲼䲽䲾䲿 -
4CC0 䳀䳁䳂䳃䳄䳅䳆䳇䳈䳉䳊䳋䳌䳍䳎䳏䳐䳑䳒䳓䳔䳕䳖䳗䳘䳙䳚䳛䳜䳝䳞䳟 -
4CE0 䳠䳡䳢䳣䳤䳥䳦䳧䳨䳩䳪䳫䳬䳭䳮䳯䳰䳱䳲䳳䳴䳵䳶䳷䳸䳹䳺䳻䳼䳽䳾䳿 -
4D00 䴀䴁䴂䴃䴄䴅䴆䴇䴈䴉䴊䴋䴌䴍䴎䴏䴐䴑䴒䴓䴔䴕䴖䴗䴘䴙䴚䴛䴜䴝䴞䴟 -
4D20 䴠䴡䴢䴣䴤䴥䴦䴧䴨䴩䴪䴫䴬䴭䴮䴯䴰䴱䴲䴳䴴䴵䴶䴷䴸䴹䴺䴻䴼䴽䴾䴿 -
4D40 䵀䵁䵂䵃䵄䵅䵆䵇䵈䵉䵊䵋䵌䵍䵎䵏䵐䵑䵒䵓䵔䵕䵖䵗䵘䵙䵚䵛䵜䵝䵞䵟 -
4D60 䵠䵡䵢䵣䵤䵥䵦䵧䵨䵩䵪䵫䵬䵭䵮䵯䵰䵱䵲䵳䵴䵵䵶䵷䵸䵹䵺䵻䵼䵽䵾䵿 -
4D80 䶀䶁䶂䶃䶄䶅䶆䶇䶈䶉䶊䶋䶌䶍䶎䶏䶐䶑䶒䶓䶔䶕䶖䶗䶘䶙䶚䶛䶜䶝䶞䶟 -
4DA0 䶠䶡䶢䶣䶤䶥䶦䶧䶨䶩䶪䶫䶬䶭䶮䶯䶰䶱䶲䶳䶴䶵䶶䶷䶸䶹䶺䶻䶼䶽䶾䶿 -
4DC0 ䷀䷁䷂䷃䷄䷅䷆䷇䷈䷉䷊䷋䷌䷍䷎䷏䷐䷑䷒䷓䷔䷕䷖䷗䷘䷙䷚䷛䷜䷝䷞䷟ -
4DE0 ䷠䷡䷢䷣䷤䷥䷦䷧䷨䷩䷪䷫䷬䷭䷮䷯䷰䷱䷲䷳䷴䷵䷶䷷䷸䷹䷺䷻䷼䷽䷾䷿ -
4E00 一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟 -
4E20 丠両丢丣两严並丧丨丩个丫丬中丮丯丰丱串丳临丵丶丷丸丹为主丼丽举丿 -
4E40 乀乁乂乃乄久乆乇么义乊之乌乍乎乏乐乑乒乓乔乕乖乗乘乙乚乛乜九乞也 -
4E60 习乡乢乣乤乥书乧乨乩乪乫乬乭乮乯买乱乲乳乴乵乶乷乸乹乺乻乼乽乾乿 -
4E80 亀亁亂亃亄亅了亇予争亊事二亍于亏亐云互亓五井亖亗亘亙亚些亜亝亞亟 -
4EA0 亠亡亢亣交亥亦产亨亩亪享京亭亮亯亰亱亲亳亴亵亶亷亸亹人亻亼亽亾亿 -
4EC0 什仁仂仃仄仅仆仇仈仉今介仌仍从仏仐仑仒仓仔仕他仗付仙仚仛仜仝仞仟 -
4EE0 仠仡仢代令以仦仧仨仩仪仫们仭仮仯仰仱仲仳仴仵件价仸仹仺任仼份仾仿 -
4F00 伀企伂伃伄伅伆伇伈伉伊伋伌伍伎伏伐休伒伓伔伕伖众优伙会伛伜伝伞伟 -
4F20 传伡伢伣伤伥伦伧伨伩伪伫伬伭伮伯估伱伲伳伴伵伶伷伸伹伺伻似伽伾伿 -
4F40 佀佁佂佃佄佅但佇佈佉佊佋佌位低住佐佑佒体佔何佖佗佘余佚佛作佝佞佟 -
4F60 你佡佢佣佤佥佦佧佨佩佪佫佬佭佮佯佰佱佲佳佴併佶佷佸佹佺佻佼佽佾使 -
4F80 侀侁侂侃侄侅來侇侈侉侊例侌侍侎侏侐侑侒侓侔侕侖侗侘侙侚供侜依侞侟 -
4FA0 侠価侢侣侤侥侦侧侨侩侪侫侬侭侮侯侰侱侲侳侴侵侶侷侸侹侺侻侼侽侾便 -
4FC0 俀俁係促俄俅俆俇俈俉俊俋俌俍俎俏俐俑俒俓俔俕俖俗俘俙俚俛俜保俞俟 -
4FE0 俠信俢俣俤俥俦俧俨俩俪俫俬俭修俯俰俱俲俳俴俵俶俷俸俹俺俻俼俽俾俿 -
5000 倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借 -
5020 倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿 -
5040 偀偁偂偃偄偅偆假偈偉偊偋偌偍偎偏偐偑偒偓偔偕偖偗偘偙做偛停偝偞偟 -
5060 偠偡偢偣偤健偦偧偨偩偪偫偬偭偮偯偰偱偲偳側偵偶偷偸偹偺偻偼偽偾偿 -
5080 傀傁傂傃傄傅傆傇傈傉傊傋傌傍傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟 -
50A0 傠傡傢傣傤傥傦傧储傩傪傫催傭傮傯傰傱傲傳傴債傶傷傸傹傺傻傼傽傾傿 -
50C0 僀僁僂僃僄僅僆僇僈僉僊僋僌働僎像僐僑僒僓僔僕僖僗僘僙僚僛僜僝僞僟 -
50E0 僠僡僢僣僤僥僦僧僨僩僪僫僬僭僮僯僰僱僲僳僴僵僶僷僸價僺僻僼僽僾僿 -
5100 儀儁儂儃億儅儆儇儈儉儊儋儌儍儎儏儐儑儒儓儔儕儖儗儘儙儚儛儜儝儞償 -
5120 儠儡儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾儿 -
5140 兀允兂元兄充兆兇先光兊克兌免兎兏児兑兒兓兔兕兖兗兘兙党兛兜兝兞兟 -
5160 兠兡兢兣兤入兦內全兩兪八公六兮兯兰共兲关兴兵其具典兹兺养兼兽兾兿 -
5180 冀冁冂冃冄内円冇冈冉冊冋册再冎冏冐冑冒冓冔冕冖冗冘写冚军农冝冞冟 -
51A0 冠冡冢冣冤冥冦冧冨冩冪冫冬冭冮冯冰冱冲决冴况冶冷冸冹冺冻冼冽冾冿 -
51C0 净凁凂凃凄凅准凇凈凉凊凋凌凍凎减凐凑凒凓凔凕凖凗凘凙凚凛凜凝凞凟 -
51E0 几凡凢凣凤凥処凧凨凩凪凫凬凭凮凯凰凱凲凳凴凵凶凷凸凹出击凼函凾凿 -
5200 刀刁刂刃刄刅分切刈刉刊刋刌刍刎刏刐刑划刓刔刕刖列刘则刚创刜初刞刟 -
5220 删刡刢刣判別刦刧刨利刪别刬刭刮刯到刱刲刳刴刵制刷券刹刺刻刼刽刾刿 -
5240 剀剁剂剃剄剅剆則剈剉削剋剌前剎剏剐剑剒剓剔剕剖剗剘剙剚剛剜剝剞剟 -
5260 剠剡剢剣剤剥剦剧剨剩剪剫剬剭剮副剰剱割剳剴創剶剷剸剹剺剻剼剽剾剿 -
5280 劀劁劂劃劄劅劆劇劈劉劊劋劌劍劎劏劐劑劒劓劔劕劖劗劘劙劚力劜劝办功 -
52A0 加务劢劣劤劥劦劧动助努劫劬劭劮劯劰励劲劳労劵劶劷劸効劺劻劼劽劾势 -
52C0 勀勁勂勃勄勅勆勇勈勉勊勋勌勍勎勏勐勑勒勓勔動勖勗勘務勚勛勜勝勞募 -
52E0 勠勡勢勣勤勥勦勧勨勩勪勫勬勭勮勯勰勱勲勳勴勵勶勷勸勹勺勻勼勽勾勿 -
5300 匀匁匂匃匄包匆匇匈匉匊匋匌匍匎匏匐匑匒匓匔匕化北匘匙匚匛匜匝匞匟 -
5320 匠匡匢匣匤匥匦匧匨匩匪匫匬匭匮匯匰匱匲匳匴匵匶匷匸匹区医匼匽匾匿 -
5340 區十卂千卄卅卆升午卉半卋卌卍华协卐卑卒卓協单卖南単卙博卛卜卝卞卟 -
5360 占卡卢卣卤卥卦卧卨卩卪卫卬卭卮卯印危卲即却卵卶卷卸卹卺卻卼卽卾卿 -
5380 厀厁厂厃厄厅历厇厈厉厊压厌厍厎厏厐厑厒厓厔厕厖厗厘厙厚厛厜厝厞原 -
53A0 厠厡厢厣厤厥厦厧厨厩厪厫厬厭厮厯厰厱厲厳厴厵厶厷厸厹厺去厼厽厾县 -
53C0 叀叁参參叄叅叆叇又叉及友双反収叏叐发叒叓叔叕取受变叙叚叛叜叝叞叟 -
53E0 叠叡叢口古句另叧叨叩只叫召叭叮可台叱史右叴叵叶号司叹叺叻叼叽叾叿 -
5400 吀吁吂吃各吅吆吇合吉吊吋同名后吏吐向吒吓吔吕吖吗吘吙吚君吜吝吞吟 -
5420 吠吡吢吣吤吥否吧吨吩吪含听吭吮启吰吱吲吳吴吵吶吷吸吹吺吻吼吽吾吿 -
5440 呀呁呂呃呄呅呆呇呈呉告呋呌呍呎呏呐呑呒呓呔呕呖呗员呙呚呛呜呝呞呟 -
5460 呠呡呢呣呤呥呦呧周呩呪呫呬呭呮呯呰呱呲味呴呵呶呷呸呹呺呻呼命呾呿 -
5480 咀咁咂咃咄咅咆咇咈咉咊咋和咍咎咏咐咑咒咓咔咕咖咗咘咙咚咛咜咝咞咟 -
54A0 咠咡咢咣咤咥咦咧咨咩咪咫咬咭咮咯咰咱咲咳咴咵咶咷咸咹咺咻咼咽咾咿 -
54C0 哀品哂哃哄哅哆哇哈哉哊哋哌响哎哏哐哑哒哓哔哕哖哗哘哙哚哛哜哝哞哟 -
54E0 哠員哢哣哤哥哦哧哨哩哪哫哬哭哮哯哰哱哲哳哴哵哶哷哸哹哺哻哼哽哾哿 -
5500 唀唁唂唃唄唅唆唇唈唉唊唋唌唍唎唏唐唑唒唓唔唕唖唗唘唙唚唛唜唝唞唟 -
5520 唠唡唢唣唤唥唦唧唨唩唪唫唬唭售唯唰唱唲唳唴唵唶唷唸唹唺唻唼唽唾唿 -
5540 啀啁啂啃啄啅商啇啈啉啊啋啌啍啎問啐啑啒啓啔啕啖啗啘啙啚啛啜啝啞啟 -
5560 啠啡啢啣啤啥啦啧啨啩啪啫啬啭啮啯啰啱啲啳啴啵啶啷啸啹啺啻啼啽啾啿 -
5580 喀喁喂喃善喅喆喇喈喉喊喋喌喍喎喏喐喑喒喓喔喕喖喗喘喙喚喛喜喝喞喟 -
55A0 喠喡喢喣喤喥喦喧喨喩喪喫喬喭單喯喰喱喲喳喴喵営喷喸喹喺喻喼喽喾喿 -
55C0 嗀嗁嗂嗃嗄嗅嗆嗇嗈嗉嗊嗋嗌嗍嗎嗏嗐嗑嗒嗓嗔嗕嗖嗗嗘嗙嗚嗛嗜嗝嗞嗟 -
55E0 嗠嗡嗢嗣嗤嗥嗦嗧嗨嗩嗪嗫嗬嗭嗮嗯嗰嗱嗲嗳嗴嗵嗶嗷嗸嗹嗺嗻嗼嗽嗾嗿 -
5600 嘀嘁嘂嘃嘄嘅嘆嘇嘈嘉嘊嘋嘌嘍嘎嘏嘐嘑嘒嘓嘔嘕嘖嘗嘘嘙嘚嘛嘜嘝嘞嘟 -
5620 嘠嘡嘢嘣嘤嘥嘦嘧嘨嘩嘪嘫嘬嘭嘮嘯嘰嘱嘲嘳嘴嘵嘶嘷嘸嘹嘺嘻嘼嘽嘾嘿 -
5640 噀噁噂噃噄噅噆噇噈噉噊噋噌噍噎噏噐噑噒噓噔噕噖噗噘噙噚噛噜噝噞噟 -
5660 噠噡噢噣噤噥噦噧器噩噪噫噬噭噮噯噰噱噲噳噴噵噶噷噸噹噺噻噼噽噾噿 -
5680 嚀嚁嚂嚃嚄嚅嚆嚇嚈嚉嚊嚋嚌嚍嚎嚏嚐嚑嚒嚓嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟 -
56A0 嚠嚡嚢嚣嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚯嚰嚱嚲嚳嚴嚵嚶嚷嚸嚹嚺嚻嚼嚽嚾嚿 -
56C0 囀囁囂囃囄囅囆囇囈囉囊囋囌囍囎囏囐囑囒囓囔囕囖囗囘囙囚四囜囝回囟 -
56E0 因囡团団囤囥囦囧囨囩囪囫囬园囮囯困囱囲図围囵囶囷囸囹固囻囼国图囿 -
5700 圀圁圂圃圄圅圆圇圈圉圊國圌圍圎圏圐圑園圓圔圕圖圗團圙圚圛圜圝圞土 -
5720 圠圡圢圣圤圥圦圧在圩圪圫圬圭圮圯地圱圲圳圴圵圶圷圸圹场圻圼圽圾圿 -
5740 址坁坂坃坄坅坆均坈坉坊坋坌坍坎坏坐坑坒坓坔坕坖块坘坙坚坛坜坝坞坟 -
5760 坠坡坢坣坤坥坦坧坨坩坪坫坬坭坮坯坰坱坲坳坴坵坶坷坸坹坺坻坼坽坾坿 -
5780 垀垁垂垃垄垅垆垇垈垉垊型垌垍垎垏垐垑垒垓垔垕垖垗垘垙垚垛垜垝垞垟 -
57A0 垠垡垢垣垤垥垦垧垨垩垪垫垬垭垮垯垰垱垲垳垴垵垶垷垸垹垺垻垼垽垾垿 -
57C0 埀埁埂埃埄埅埆埇埈埉埊埋埌埍城埏埐埑埒埓埔埕埖埗埘埙埚埛埜埝埞域 -
57E0 埠埡埢埣埤埥埦埧埨埩埪埫埬埭埮埯埰埱埲埳埴埵埶執埸培基埻埼埽埾埿 -
5800 堀堁堂堃堄堅堆堇堈堉堊堋堌堍堎堏堐堑堒堓堔堕堖堗堘堙堚堛堜堝堞堟 -
5820 堠堡堢堣堤堥堦堧堨堩堪堫堬堭堮堯堰報堲堳場堵堶堷堸堹堺堻堼堽堾堿 -
5840 塀塁塂塃塄塅塆塇塈塉塊塋塌塍塎塏塐塑塒塓塔塕塖塗塘塙塚塛塜塝塞塟 -
5860 塠塡塢塣塤塥塦塧塨塩塪填塬塭塮塯塰塱塲塳塴塵塶塷塸塹塺塻塼塽塾塿 -
5880 墀墁墂境墄墅墆墇墈墉墊墋墌墍墎墏墐墑墒墓墔墕墖増墘墙墚墛墜墝增墟 -
58A0 墠墡墢墣墤墥墦墧墨墩墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墼墽墾墿 -
58C0 壀壁壂壃壄壅壆壇壈壉壊壋壌壍壎壏壐壑壒壓壔壕壖壗壘壙壚壛壜壝壞壟 -
58E0 壠壡壢壣壤壥壦壧壨壩壪士壬壭壮壯声壱売壳壴壵壶壷壸壹壺壻壼壽壾壿 -
5900 夀夁夂夃处夅夆备夈変夊夋夌复夎夏夐夑夒夓夔夕外夗夘夙多夛夜夝夞够 -
5920 夠夡夢夣夤夥夦大夨天太夫夬夭央夯夰失夲夳头夵夶夷夸夹夺夻夼夽夾夿 -
5940 奀奁奂奃奄奅奆奇奈奉奊奋奌奍奎奏奐契奒奓奔奕奖套奘奙奚奛奜奝奞奟 -
5960 奠奡奢奣奤奥奦奧奨奩奪奫奬奭奮奯奰奱奲女奴奵奶奷奸她奺奻奼好奾奿 -
5980 妀妁如妃妄妅妆妇妈妉妊妋妌妍妎妏妐妑妒妓妔妕妖妗妘妙妚妛妜妝妞妟 -
59A0 妠妡妢妣妤妥妦妧妨妩妪妫妬妭妮妯妰妱妲妳妴妵妶妷妸妹妺妻妼妽妾妿 -
59C0 姀姁姂姃姄姅姆姇姈姉姊始姌姍姎姏姐姑姒姓委姕姖姗姘姙姚姛姜姝姞姟 -
59E0 姠姡姢姣姤姥姦姧姨姩姪姫姬姭姮姯姰姱姲姳姴姵姶姷姸姹姺姻姼姽姾姿 -
5A00 娀威娂娃娄娅娆娇娈娉娊娋娌娍娎娏娐娑娒娓娔娕娖娗娘娙娚娛娜娝娞娟 -
5A20 娠娡娢娣娤娥娦娧娨娩娪娫娬娭娮娯娰娱娲娳娴娵娶娷娸娹娺娻娼娽娾娿 -
5A40 婀婁婂婃婄婅婆婇婈婉婊婋婌婍婎婏婐婑婒婓婔婕婖婗婘婙婚婛婜婝婞婟 -
5A60 婠婡婢婣婤婥婦婧婨婩婪婫婬婭婮婯婰婱婲婳婴婵婶婷婸婹婺婻婼婽婾婿 -
5A80 媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媒媓媔媕媖媗媘媙媚媛媜媝媞媟 -
5AA0 媠媡媢媣媤媥媦媧媨媩媪媫媬媭媮媯媰媱媲媳媴媵媶媷媸媹媺媻媼媽媾媿 -
5AC0 嫀嫁嫂嫃嫄嫅嫆嫇嫈嫉嫊嫋嫌嫍嫎嫏嫐嫑嫒嫓嫔嫕嫖嫗嫘嫙嫚嫛嫜嫝嫞嫟 -
5AE0 嫠嫡嫢嫣嫤嫥嫦嫧嫨嫩嫪嫫嫬嫭嫮嫯嫰嫱嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿 -
5B00 嬀嬁嬂嬃嬄嬅嬆嬇嬈嬉嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬖嬗嬘嬙嬚嬛嬜嬝嬞嬟 -
5B20 嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬲嬳嬴嬵嬶嬷嬸嬹嬺嬻嬼嬽嬾嬿 -
5B40 孀孁孂孃孄孅孆孇孈孉孊孋孌孍孎孏子孑孒孓孔孕孖字存孙孚孛孜孝孞孟 -
5B60 孠孡孢季孤孥学孧孨孩孪孫孬孭孮孯孰孱孲孳孴孵孶孷學孹孺孻孼孽孾孿 -
5B80 宀宁宂它宄宅宆宇守安宊宋完宍宎宏宐宑宒宓宔宕宖宗官宙定宛宜宝实実 -
5BA0 宠审客宣室宥宦宧宨宩宪宫宬宭宮宯宰宱宲害宴宵家宷宸容宺宻宼宽宾宿 -
5BC0 寀寁寂寃寄寅密寇寈寉寊寋富寍寎寏寐寑寒寓寔寕寖寗寘寙寚寛寜寝寞察 -
5BE0 寠寡寢寣寤寥實寧寨審寪寫寬寭寮寯寰寱寲寳寴寵寶寷寸对寺寻导寽対寿 -
5C00 尀封専尃射尅将將專尉尊尋尌對導小尐少尒尓尔尕尖尗尘尙尚尛尜尝尞尟 -
5C20 尠尡尢尣尤尥尦尧尨尩尪尫尬尭尮尯尰就尲尳尴尵尶尷尸尹尺尻尼尽尾尿 -
5C40 局屁层屃屄居屆屇屈屉届屋屌屍屎屏屐屑屒屓屔展屖屗屘屙屚屛屜屝属屟 -
5C60 屠屡屢屣層履屦屧屨屩屪屫屬屭屮屯屰山屲屳屴屵屶屷屸屹屺屻屼屽屾屿 -
5C80 岀岁岂岃岄岅岆岇岈岉岊岋岌岍岎岏岐岑岒岓岔岕岖岗岘岙岚岛岜岝岞岟 -
5CA0 岠岡岢岣岤岥岦岧岨岩岪岫岬岭岮岯岰岱岲岳岴岵岶岷岸岹岺岻岼岽岾岿 -
5CC0 峀峁峂峃峄峅峆峇峈峉峊峋峌峍峎峏峐峑峒峓峔峕峖峗峘峙峚峛峜峝峞峟 -
5CE0 峠峡峢峣峤峥峦峧峨峩峪峫峬峭峮峯峰峱峲峳峴峵島峷峸峹峺峻峼峽峾峿 -
5D00 崀崁崂崃崄崅崆崇崈崉崊崋崌崍崎崏崐崑崒崓崔崕崖崗崘崙崚崛崜崝崞崟 -
5D20 崠崡崢崣崤崥崦崧崨崩崪崫崬崭崮崯崰崱崲崳崴崵崶崷崸崹崺崻崼崽崾崿 -
5D40 嵀嵁嵂嵃嵄嵅嵆嵇嵈嵉嵊嵋嵌嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵘嵙嵚嵛嵜嵝嵞嵟 -
5D60 嵠嵡嵢嵣嵤嵥嵦嵧嵨嵩嵪嵫嵬嵭嵮嵯嵰嵱嵲嵳嵴嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿 -
5D80 嶀嶁嶂嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘嶙嶚嶛嶜嶝嶞嶟 -
5DA0 嶠嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶷嶸嶹嶺嶻嶼嶽嶾嶿 -
5DC0 巀巁巂巃巄巅巆巇巈巉巊巋巌巍巎巏巐巑巒巓巔巕巖巗巘巙巚巛巜川州巟 -
5DE0 巠巡巢巣巤工左巧巨巩巪巫巬巭差巯巰己已巳巴巵巶巷巸巹巺巻巼巽巾巿 -
5E00 帀币市布帄帅帆帇师帉帊帋希帍帎帏帐帑帒帓帔帕帖帗帘帙帚帛帜帝帞帟 -
5E20 帠帡帢帣帤帥带帧帨帩帪師帬席帮帯帰帱帲帳帴帵帶帷常帹帺帻帼帽帾帿 -
5E40 幀幁幂幃幄幅幆幇幈幉幊幋幌幍幎幏幐幑幒幓幔幕幖幗幘幙幚幛幜幝幞幟 -
5E60 幠幡幢幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱干平年幵并幷幸幹幺幻幼幽幾广 -
5E80 庀庁庂広庄庅庆庇庈庉床庋庌庍庎序庐庑庒库应底庖店庘庙庚庛府庝庞废 -
5EA0 庠庡庢庣庤庥度座庨庩庪庫庬庭庮庯庰庱庲庳庴庵庶康庸庹庺庻庼庽庾庿 -
5EC0 廀廁廂廃廄廅廆廇廈廉廊廋廌廍廎廏廐廑廒廓廔廕廖廗廘廙廚廛廜廝廞廟 -
5EE0 廠廡廢廣廤廥廦廧廨廩廪廫廬廭廮廯廰廱廲廳廴廵延廷廸廹建廻廼廽廾廿 -
5F00 开弁异弃弄弅弆弇弈弉弊弋弌弍弎式弐弑弒弓弔引弖弗弘弙弚弛弜弝弞弟 -
5F20 张弡弢弣弤弥弦弧弨弩弪弫弬弭弮弯弰弱弲弳弴張弶強弸弹强弻弼弽弾弿 -
5F40 彀彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彐彑归当彔录彖彗彘彙彚彛彜彝彞彟 -
5F60 彠彡形彣彤彥彦彧彨彩彪彫彬彭彮彯彰影彲彳彴彵彶彷彸役彺彻彼彽彾彿 -
5F80 往征徂徃径待徆徇很徉徊律後徍徎徏徐徑徒従徔徕徖得徘徙徚徛徜徝從徟 -
5FA0 徠御徢徣徤徥徦徧徨復循徫徬徭微徯徰徱徲徳徴徵徶德徸徹徺徻徼徽徾徿 -
5FC0 忀忁忂心忄必忆忇忈忉忊忋忌忍忎忏忐忑忒忓忔忕忖志忘忙忚忛応忝忞忟 -
5FE0 忠忡忢忣忤忥忦忧忨忩忪快忬忭忮忯忰忱忲忳忴念忶忷忸忹忺忻忼忽忾忿 -
6000 怀态怂怃怄怅怆怇怈怉怊怋怌怍怎怏怐怑怒怓怔怕怖怗怘怙怚怛怜思怞怟 -
6020 怠怡怢怣怤急怦性怨怩怪怫怬怭怮怯怰怱怲怳怴怵怶怷怸怹怺总怼怽怾怿 -
6040 恀恁恂恃恄恅恆恇恈恉恊恋恌恍恎恏恐恑恒恓恔恕恖恗恘恙恚恛恜恝恞恟 -
6060 恠恡恢恣恤恥恦恧恨恩恪恫恬恭恮息恰恱恲恳恴恵恶恷恸恹恺恻恼恽恾恿 -
6080 悀悁悂悃悄悅悆悇悈悉悊悋悌悍悎悏悐悑悒悓悔悕悖悗悘悙悚悛悜悝悞悟 -
60A0 悠悡悢患悤悥悦悧您悩悪悫悬悭悮悯悰悱悲悳悴悵悶悷悸悹悺悻悼悽悾悿 -
60C0 惀惁惂惃惄情惆惇惈惉惊惋惌惍惎惏惐惑惒惓惔惕惖惗惘惙惚惛惜惝惞惟 -
60E0 惠惡惢惣惤惥惦惧惨惩惪惫惬惭惮惯惰惱惲想惴惵惶惷惸惹惺惻惼惽惾惿 -
6100 愀愁愂愃愄愅愆愇愈愉愊愋愌愍愎意愐愑愒愓愔愕愖愗愘愙愚愛愜愝愞感 -
6120 愠愡愢愣愤愥愦愧愨愩愪愫愬愭愮愯愰愱愲愳愴愵愶愷愸愹愺愻愼愽愾愿 -
6140 慀慁慂慃慄慅慆慇慈慉慊態慌慍慎慏慐慑慒慓慔慕慖慗慘慙慚慛慜慝慞慟 -
6160 慠慡慢慣慤慥慦慧慨慩慪慫慬慭慮慯慰慱慲慳慴慵慶慷慸慹慺慻慼慽慾慿 -
6180 憀憁憂憃憄憅憆憇憈憉憊憋憌憍憎憏憐憑憒憓憔憕憖憗憘憙憚憛憜憝憞憟 -
61A0 憠憡憢憣憤憥憦憧憨憩憪憫憬憭憮憯憰憱憲憳憴憵憶憷憸憹憺憻憼憽憾憿 -
61C0 懀懁懂懃懄懅懆懇懈應懊懋懌懍懎懏懐懑懒懓懔懕懖懗懘懙懚懛懜懝懞懟 -
61E0 懠懡懢懣懤懥懦懧懨懩懪懫懬懭懮懯懰懱懲懳懴懵懶懷懸懹懺懻懼懽懾懿 -
6200 戀戁戂戃戄戅戆戇戈戉戊戋戌戍戎戏成我戒戓戔戕或戗战戙戚戛戜戝戞戟 -
6220 戠戡戢戣戤戥戦戧戨戩截戫戬戭戮戯戰戱戲戳戴戵戶户戸戹戺戻戼戽戾房 -
6240 所扁扂扃扄扅扆扇扈扉扊手扌才扎扏扐扑扒打扔払扖扗托扙扚扛扜扝扞扟 -
6260 扠扡扢扣扤扥扦执扨扩扪扫扬扭扮扯扰扱扲扳扴扵扶扷扸批扺扻扼扽找承 -
6280 技抁抂抃抄抅抆抇抈抉把抋抌抍抎抏抐抑抒抓抔投抖抗折抙抚抛抜抝択抟 -
62A0 抠抡抢抣护报抦抧抨抩抪披抬抭抮抯抰抱抲抳抴抵抶抷抸抹抺抻押抽抾抿 -
62C0 拀拁拂拃拄担拆拇拈拉拊拋拌拍拎拏拐拑拒拓拔拕拖拗拘拙拚招拜拝拞拟 -
62E0 拠拡拢拣拤拥拦拧拨择拪拫括拭拮拯拰拱拲拳拴拵拶拷拸拹拺拻拼拽拾拿 -
6300 挀持挂挃挄挅挆指挈按挊挋挌挍挎挏挐挑挒挓挔挕挖挗挘挙挚挛挜挝挞挟 -
6320 挠挡挢挣挤挥挦挧挨挩挪挫挬挭挮振挰挱挲挳挴挵挶挷挸挹挺挻挼挽挾挿 -
6340 捀捁捂捃捄捅捆捇捈捉捊捋捌捍捎捏捐捑捒捓捔捕捖捗捘捙捚捛捜捝捞损 -
6360 捠捡换捣捤捥捦捧捨捩捪捫捬捭据捯捰捱捲捳捴捵捶捷捸捹捺捻捼捽捾捿 -
6380 掀掁掂掃掄掅掆掇授掉掊掋掌掍掎掏掐掑排掓掔掕掖掗掘掙掚掛掜掝掞掟 -
63A0 掠採探掣掤接掦控推掩措掫掬掭掮掯掰掱掲掳掴掵掶掷掸掹掺掻掼掽掾掿 -
63C0 揀揁揂揃揄揅揆揇揈揉揊揋揌揍揎描提揑插揓揔揕揖揗揘揙揚換揜揝揞揟 -
63E0 揠握揢揣揤揥揦揧揨揩揪揫揬揭揮揯揰揱揲揳援揵揶揷揸揹揺揻揼揽揾揿 -
6400 搀搁搂搃搄搅搆搇搈搉搊搋搌損搎搏搐搑搒搓搔搕搖搗搘搙搚搛搜搝搞搟 -
6420 搠搡搢搣搤搥搦搧搨搩搪搫搬搭搮搯搰搱搲搳搴搵搶搷搸搹携搻搼搽搾搿 -
6440 摀摁摂摃摄摅摆摇摈摉摊摋摌摍摎摏摐摑摒摓摔摕摖摗摘摙摚摛摜摝摞摟 -
6460 摠摡摢摣摤摥摦摧摨摩摪摫摬摭摮摯摰摱摲摳摴摵摶摷摸摹摺摻摼摽摾摿 -
6480 撀撁撂撃撄撅撆撇撈撉撊撋撌撍撎撏撐撑撒撓撔撕撖撗撘撙撚撛撜撝撞撟 -
64A0 撠撡撢撣撤撥撦撧撨撩撪撫撬播撮撯撰撱撲撳撴撵撶撷撸撹撺撻撼撽撾撿 -
64C0 擀擁擂擃擄擅擆擇擈擉擊擋擌操擎擏擐擑擒擓擔擕擖擗擘擙據擛擜擝擞擟 -
64E0 擠擡擢擣擤擥擦擧擨擩擪擫擬擭擮擯擰擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿 -
6500 攀攁攂攃攄攅攆攇攈攉攊攋攌攍攎攏攐攑攒攓攔攕攖攗攘攙攚攛攜攝攞攟 -
6520 攠攡攢攣攤攥攦攧攨攩攪攫攬攭攮支攰攱攲攳攴攵收攷攸改攺攻攼攽放政 -
6540 敀敁敂敃敄故敆敇效敉敊敋敌敍敎敏敐救敒敓敔敕敖敗敘教敚敛敜敝敞敟 -
6560 敠敡敢散敤敥敦敧敨敩敪敫敬敭敮敯数敱敲敳整敵敶敷數敹敺敻敼敽敾敿 -
6580 斀斁斂斃斄斅斆文斈斉斊斋斌斍斎斏斐斑斒斓斔斕斖斗斘料斚斛斜斝斞斟 -
65A0 斠斡斢斣斤斥斦斧斨斩斪斫斬断斮斯新斱斲斳斴斵斶斷斸方斺斻於施斾斿 -
65C0 旀旁旂旃旄旅旆旇旈旉旊旋旌旍旎族旐旑旒旓旔旕旖旗旘旙旚旛旜旝旞旟 -
65E0 无旡既旣旤日旦旧旨早旪旫旬旭旮旯旰旱旲旳旴旵时旷旸旹旺旻旼旽旾旿 -
6600 昀昁昂昃昄昅昆昇昈昉昊昋昌昍明昏昐昑昒易昔昕昖昗昘昙昚昛昜昝昞星 -
6620 映昡昢昣昤春昦昧昨昩昪昫昬昭昮是昰昱昲昳昴昵昶昷昸昹昺昻昼昽显昿 -
6640 晀晁時晃晄晅晆晇晈晉晊晋晌晍晎晏晐晑晒晓晔晕晖晗晘晙晚晛晜晝晞晟 -
6660 晠晡晢晣晤晥晦晧晨晩晪晫晬晭普景晰晱晲晳晴晵晶晷晸晹智晻晼晽晾晿 -
6680 暀暁暂暃暄暅暆暇暈暉暊暋暌暍暎暏暐暑暒暓暔暕暖暗暘暙暚暛暜暝暞暟 -
66A0 暠暡暢暣暤暥暦暧暨暩暪暫暬暭暮暯暰暱暲暳暴暵暶暷暸暹暺暻暼暽暾暿 -
66C0 曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐曑曒曓曔曕曖曗曘曙曚曛曜曝曞曟 -
66E0 曠曡曢曣曤曥曦曧曨曩曪曫曬曭曮曯曰曱曲曳更曵曶曷書曹曺曻曼曽曾替 -
6700 最朁朂會朄朅朆朇月有朊朋朌服朎朏朐朑朒朓朔朕朖朗朘朙朚望朜朝朞期 -
6720 朠朡朢朣朤朥朦朧木朩未末本札朮术朰朱朲朳朴朵朶朷朸朹机朻朼朽朾朿 -
6740 杀杁杂权杄杅杆杇杈杉杊杋杌杍李杏材村杒杓杔杕杖杗杘杙杚杛杜杝杞束 -
6760 杠条杢杣杤来杦杧杨杩杪杫杬杭杮杯杰東杲杳杴杵杶杷杸杹杺杻杼杽松板 -
6780 枀极枂枃构枅枆枇枈枉枊枋枌枍枎枏析枑枒枓枔枕枖林枘枙枚枛果枝枞枟 -
67A0 枠枡枢枣枤枥枦枧枨枩枪枫枬枭枮枯枰枱枲枳枴枵架枷枸枹枺枻枼枽枾枿 -
67C0 柀柁柂柃柄柅柆柇柈柉柊柋柌柍柎柏某柑柒染柔柕柖柗柘柙柚柛柜柝柞柟 -
67E0 柠柡柢柣柤查柦柧柨柩柪柫柬柭柮柯柰柱柲柳柴柵柶柷柸柹柺査柼柽柾柿 -
6800 栀栁栂栃栄栅栆标栈栉栊栋栌栍栎栏栐树栒栓栔栕栖栗栘栙栚栛栜栝栞栟 -
6820 栠校栢栣栤栥栦栧栨栩株栫栬栭栮栯栰栱栲栳栴栵栶样核根栺栻格栽栾栿 -
6840 桀桁桂桃桄桅框桇案桉桊桋桌桍桎桏桐桑桒桓桔桕桖桗桘桙桚桛桜桝桞桟 -
6860 桠桡桢档桤桥桦桧桨桩桪桫桬桭桮桯桰桱桲桳桴桵桶桷桸桹桺桻桼桽桾桿 -
6880 梀梁梂梃梄梅梆梇梈梉梊梋梌梍梎梏梐梑梒梓梔梕梖梗梘梙梚梛梜條梞梟 -
68A0 梠梡梢梣梤梥梦梧梨梩梪梫梬梭梮梯械梱梲梳梴梵梶梷梸梹梺梻梼梽梾梿 -
68C0 检棁棂棃棄棅棆棇棈棉棊棋棌棍棎棏棐棑棒棓棔棕棖棗棘棙棚棛棜棝棞棟 -
68E0 棠棡棢棣棤棥棦棧棨棩棪棫棬棭森棯棰棱棲棳棴棵棶棷棸棹棺棻棼棽棾棿 -
6900 椀椁椂椃椄椅椆椇椈椉椊椋椌植椎椏椐椑椒椓椔椕椖椗椘椙椚椛検椝椞椟 -
6920 椠椡椢椣椤椥椦椧椨椩椪椫椬椭椮椯椰椱椲椳椴椵椶椷椸椹椺椻椼椽椾椿 -
6940 楀楁楂楃楄楅楆楇楈楉楊楋楌楍楎楏楐楑楒楓楔楕楖楗楘楙楚楛楜楝楞楟 -
6960 楠楡楢楣楤楥楦楧楨楩楪楫楬業楮楯楰楱楲楳楴極楶楷楸楹楺楻楼楽楾楿 -
6980 榀榁概榃榄榅榆榇榈榉榊榋榌榍榎榏榐榑榒榓榔榕榖榗榘榙榚榛榜榝榞榟 -
69A0 榠榡榢榣榤榥榦榧榨榩榪榫榬榭榮榯榰榱榲榳榴榵榶榷榸榹榺榻榼榽榾榿 -
69C0 槀槁槂槃槄槅槆槇槈槉槊構槌槍槎槏槐槑槒槓槔槕槖槗様槙槚槛槜槝槞槟 -
69E0 槠槡槢槣槤槥槦槧槨槩槪槫槬槭槮槯槰槱槲槳槴槵槶槷槸槹槺槻槼槽槾槿 -
6A00 樀樁樂樃樄樅樆樇樈樉樊樋樌樍樎樏樐樑樒樓樔樕樖樗樘標樚樛樜樝樞樟 -
6A20 樠模樢樣樤樥樦樧樨権横樫樬樭樮樯樰樱樲樳樴樵樶樷樸樹樺樻樼樽樾樿 -
6A40 橀橁橂橃橄橅橆橇橈橉橊橋橌橍橎橏橐橑橒橓橔橕橖橗橘橙橚橛橜橝橞機 -
6A60 橠橡橢橣橤橥橦橧橨橩橪橫橬橭橮橯橰橱橲橳橴橵橶橷橸橹橺橻橼橽橾橿 -
6A80 檀檁檂檃檄檅檆檇檈檉檊檋檌檍檎檏檐檑檒檓檔檕檖檗檘檙檚檛檜檝檞檟 -
6AA0 檠檡檢檣檤檥檦檧檨檩檪檫檬檭檮檯檰檱檲檳檴檵檶檷檸檹檺檻檼檽檾檿 -
6AC0 櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟 -
6AE0 櫠櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿 -
6B00 欀欁欂欃欄欅欆欇欈欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟 -
6B20 欠次欢欣欤欥欦欧欨欩欪欫欬欭欮欯欰欱欲欳欴欵欶欷欸欹欺欻欼欽款欿 -
6B40 歀歁歂歃歄歅歆歇歈歉歊歋歌歍歎歏歐歑歒歓歔歕歖歗歘歙歚歛歜歝歞歟 -
6B60 歠歡止正此步武歧歨歩歪歫歬歭歮歯歰歱歲歳歴歵歶歷歸歹歺死歼歽歾歿 -
6B80 殀殁殂殃殄殅殆殇殈殉殊残殌殍殎殏殐殑殒殓殔殕殖殗殘殙殚殛殜殝殞殟 -
6BA0 殠殡殢殣殤殥殦殧殨殩殪殫殬殭殮殯殰殱殲殳殴段殶殷殸殹殺殻殼殽殾殿 -
6BC0 毀毁毂毃毄毅毆毇毈毉毊毋毌母毎每毐毑毒毓比毕毖毗毘毙毚毛毜毝毞毟 -
6BE0 毠毡毢毣毤毥毦毧毨毩毪毫毬毭毮毯毰毱毲毳毴毵毶毷毸毹毺毻毼毽毾毿 -
6C00 氀氁氂氃氄氅氆氇氈氉氊氋氌氍氎氏氐民氒氓气氕氖気氘氙氚氛氜氝氞氟 -
6C20 氠氡氢氣氤氥氦氧氨氩氪氫氬氭氮氯氰氱氲氳水氵氶氷永氹氺氻氼氽氾氿 -
6C40 汀汁求汃汄汅汆汇汈汉汊汋汌汍汎汏汐汑汒汓汔汕汖汗汘汙汚汛汜汝汞江 -
6C60 池污汢汣汤汥汦汧汨汩汪汫汬汭汮汯汰汱汲汳汴汵汶汷汸汹決汻汼汽汾汿 -
6C80 沀沁沂沃沄沅沆沇沈沉沊沋沌沍沎沏沐沑沒沓沔沕沖沗沘沙沚沛沜沝沞沟 -
6CA0 沠没沢沣沤沥沦沧沨沩沪沫沬沭沮沯沰沱沲河沴沵沶沷沸油沺治沼沽沾沿 -
6CC0 泀況泂泃泄泅泆泇泈泉泊泋泌泍泎泏泐泑泒泓泔法泖泗泘泙泚泛泜泝泞泟 -
6CE0 泠泡波泣泤泥泦泧注泩泪泫泬泭泮泯泰泱泲泳泴泵泶泷泸泹泺泻泼泽泾泿 -
6D00 洀洁洂洃洄洅洆洇洈洉洊洋洌洍洎洏洐洑洒洓洔洕洖洗洘洙洚洛洜洝洞洟 -
6D20 洠洡洢洣洤津洦洧洨洩洪洫洬洭洮洯洰洱洲洳洴洵洶洷洸洹洺活洼洽派洿 -
6D40 浀流浂浃浄浅浆浇浈浉浊测浌浍济浏浐浑浒浓浔浕浖浗浘浙浚浛浜浝浞浟 -
6D60 浠浡浢浣浤浥浦浧浨浩浪浫浬浭浮浯浰浱浲浳浴浵浶海浸浹浺浻浼浽浾浿 -
6D80 涀涁涂涃涄涅涆涇消涉涊涋涌涍涎涏涐涑涒涓涔涕涖涗涘涙涚涛涜涝涞涟 -
6DA0 涠涡涢涣涤涥润涧涨涩涪涫涬涭涮涯涰涱液涳涴涵涶涷涸涹涺涻涼涽涾涿 -
6DC0 淀淁淂淃淄淅淆淇淈淉淊淋淌淍淎淏淐淑淒淓淔淕淖淗淘淙淚淛淜淝淞淟 -
6DE0 淠淡淢淣淤淥淦淧淨淩淪淫淬淭淮淯淰深淲淳淴淵淶混淸淹淺添淼淽淾淿 -
6E00 渀渁渂渃渄清渆渇済渉渊渋渌渍渎渏渐渑渒渓渔渕渖渗渘渙渚減渜渝渞渟 -
6E20 渠渡渢渣渤渥渦渧渨温渪渫測渭渮港渰渱渲渳渴渵渶渷游渹渺渻渼渽渾渿 -
6E40 湀湁湂湃湄湅湆湇湈湉湊湋湌湍湎湏湐湑湒湓湔湕湖湗湘湙湚湛湜湝湞湟 -
6E60 湠湡湢湣湤湥湦湧湨湩湪湫湬湭湮湯湰湱湲湳湴湵湶湷湸湹湺湻湼湽湾湿 -
6E80 満溁溂溃溄溅溆溇溈溉溊溋溌溍溎溏源溑溒溓溔溕準溗溘溙溚溛溜溝溞溟 -
6EA0 溠溡溢溣溤溥溦溧溨溩溪溫溬溭溮溯溰溱溲溳溴溵溶溷溸溹溺溻溼溽溾溿 -
6EC0 滀滁滂滃滄滅滆滇滈滉滊滋滌滍滎滏滐滑滒滓滔滕滖滗滘滙滚滛滜滝滞滟 -
6EE0 滠满滢滣滤滥滦滧滨滩滪滫滬滭滮滯滰滱滲滳滴滵滶滷滸滹滺滻滼滽滾滿 -
6F00 漀漁漂漃漄漅漆漇漈漉漊漋漌漍漎漏漐漑漒漓演漕漖漗漘漙漚漛漜漝漞漟 -
6F20 漠漡漢漣漤漥漦漧漨漩漪漫漬漭漮漯漰漱漲漳漴漵漶漷漸漹漺漻漼漽漾漿 -
6F40 潀潁潂潃潄潅潆潇潈潉潊潋潌潍潎潏潐潑潒潓潔潕潖潗潘潙潚潛潜潝潞潟 -
6F60 潠潡潢潣潤潥潦潧潨潩潪潫潬潭潮潯潰潱潲潳潴潵潶潷潸潹潺潻潼潽潾潿 -
6F80 澀澁澂澃澄澅澆澇澈澉澊澋澌澍澎澏澐澑澒澓澔澕澖澗澘澙澚澛澜澝澞澟 -
6FA0 澠澡澢澣澤澥澦澧澨澩澪澫澬澭澮澯澰澱澲澳澴澵澶澷澸澹澺澻澼澽澾澿 -
6FC0 激濁濂濃濄濅濆濇濈濉濊濋濌濍濎濏濐濑濒濓濔濕濖濗濘濙濚濛濜濝濞濟 -
6FE0 濠濡濢濣濤濥濦濧濨濩濪濫濬濭濮濯濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿 -
7000 瀀瀁瀂瀃瀄瀅瀆瀇瀈瀉瀊瀋瀌瀍瀎瀏瀐瀑瀒瀓瀔瀕瀖瀗瀘瀙瀚瀛瀜瀝瀞瀟 -
7020 瀠瀡瀢瀣瀤瀥瀦瀧瀨瀩瀪瀫瀬瀭瀮瀯瀰瀱瀲瀳瀴瀵瀶瀷瀸瀹瀺瀻瀼瀽瀾瀿 -
7040 灀灁灂灃灄灅灆灇灈灉灊灋灌灍灎灏灐灑灒灓灔灕灖灗灘灙灚灛灜灝灞灟 -
7060 灠灡灢灣灤灥灦灧灨灩灪火灬灭灮灯灰灱灲灳灴灵灶灷灸灹灺灻灼災灾灿 -
7080 炀炁炂炃炄炅炆炇炈炉炊炋炌炍炎炏炐炑炒炓炔炕炖炗炘炙炚炛炜炝炞炟 -
70A0 炠炡炢炣炤炥炦炧炨炩炪炫炬炭炮炯炰炱炲炳炴炵炶炷炸点為炻炼炽炾炿 -
70C0 烀烁烂烃烄烅烆烇烈烉烊烋烌烍烎烏烐烑烒烓烔烕烖烗烘烙烚烛烜烝烞烟 -
70E0 烠烡烢烣烤烥烦烧烨烩烪烫烬热烮烯烰烱烲烳烴烵烶烷烸烹烺烻烼烽烾烿 -
7100 焀焁焂焃焄焅焆焇焈焉焊焋焌焍焎焏焐焑焒焓焔焕焖焗焘焙焚焛焜焝焞焟 -
7120 焠無焢焣焤焥焦焧焨焩焪焫焬焭焮焯焰焱焲焳焴焵然焷焸焹焺焻焼焽焾焿 -
7140 煀煁煂煃煄煅煆煇煈煉煊煋煌煍煎煏煐煑煒煓煔煕煖煗煘煙煚煛煜煝煞煟 -
7160 煠煡煢煣煤煥煦照煨煩煪煫煬煭煮煯煰煱煲煳煴煵煶煷煸煹煺煻煼煽煾煿 -
7180 熀熁熂熃熄熅熆熇熈熉熊熋熌熍熎熏熐熑熒熓熔熕熖熗熘熙熚熛熜熝熞熟 -
71A0 熠熡熢熣熤熥熦熧熨熩熪熫熬熭熮熯熰熱熲熳熴熵熶熷熸熹熺熻熼熽熾熿 -
71C0 燀燁燂燃燄燅燆燇燈燉燊燋燌燍燎燏燐燑燒燓燔燕燖燗燘燙燚燛燜燝燞營 -
71E0 燠燡燢燣燤燥燦燧燨燩燪燫燬燭燮燯燰燱燲燳燴燵燶燷燸燹燺燻燼燽燾燿 -
7200 爀爁爂爃爄爅爆爇爈爉爊爋爌爍爎爏爐爑爒爓爔爕爖爗爘爙爚爛爜爝爞爟 -
7220 爠爡爢爣爤爥爦爧爨爩爪爫爬爭爮爯爰爱爲爳爴爵父爷爸爹爺爻爼爽爾爿 -
7240 牀牁牂牃牄牅牆片版牉牊牋牌牍牎牏牐牑牒牓牔牕牖牗牘牙牚牛牜牝牞牟 -
7260 牠牡牢牣牤牥牦牧牨物牪牫牬牭牮牯牰牱牲牳牴牵牶牷牸特牺牻牼牽牾牿 -
7280 犀犁犂犃犄犅犆犇犈犉犊犋犌犍犎犏犐犑犒犓犔犕犖犗犘犙犚犛犜犝犞犟 -
72A0 犠犡犢犣犤犥犦犧犨犩犪犫犬犭犮犯犰犱犲犳犴犵状犷犸犹犺犻犼犽犾犿 -
72C0 狀狁狂狃狄狅狆狇狈狉狊狋狌狍狎狏狐狑狒狓狔狕狖狗狘狙狚狛狜狝狞狟 -
72E0 狠狡狢狣狤狥狦狧狨狩狪狫独狭狮狯狰狱狲狳狴狵狶狷狸狹狺狻狼狽狾狿 -
7300 猀猁猂猃猄猅猆猇猈猉猊猋猌猍猎猏猐猑猒猓猔猕猖猗猘猙猚猛猜猝猞猟 -
7320 猠猡猢猣猤猥猦猧猨猩猪猫猬猭献猯猰猱猲猳猴猵猶猷猸猹猺猻猼猽猾猿 -
7340 獀獁獂獃獄獅獆獇獈獉獊獋獌獍獎獏獐獑獒獓獔獕獖獗獘獙獚獛獜獝獞獟 -
7360 獠獡獢獣獤獥獦獧獨獩獪獫獬獭獮獯獰獱獲獳獴獵獶獷獸獹獺獻獼獽獾獿 -
7380 玀玁玂玃玄玅玆率玈玉玊王玌玍玎玏玐玑玒玓玔玕玖玗玘玙玚玛玜玝玞玟 -
73A0 玠玡玢玣玤玥玦玧玨玩玪玫玬玭玮环现玱玲玳玴玵玶玷玸玹玺玻玼玽玾玿 -
73C0 珀珁珂珃珄珅珆珇珈珉珊珋珌珍珎珏珐珑珒珓珔珕珖珗珘珙珚珛珜珝珞珟 -
73E0 珠珡珢珣珤珥珦珧珨珩珪珫珬班珮珯珰珱珲珳珴珵珶珷珸珹珺珻珼珽現珿 -
7400 琀琁琂球琄琅理琇琈琉琊琋琌琍琎琏琐琑琒琓琔琕琖琗琘琙琚琛琜琝琞琟 -
7420 琠琡琢琣琤琥琦琧琨琩琪琫琬琭琮琯琰琱琲琳琴琵琶琷琸琹琺琻琼琽琾琿 -
7440 瑀瑁瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍瑎瑏瑐瑑瑒瑓瑔瑕瑖瑗瑘瑙瑚瑛瑜瑝瑞瑟 -
7460 瑠瑡瑢瑣瑤瑥瑦瑧瑨瑩瑪瑫瑬瑭瑮瑯瑰瑱瑲瑳瑴瑵瑶瑷瑸瑹瑺瑻瑼瑽瑾瑿 -
7480 璀璁璂璃璄璅璆璇璈璉璊璋璌璍璎璏璐璑璒璓璔璕璖璗璘璙璚璛璜璝璞璟 -
74A0 璠璡璢璣璤璥璦璧璨璩璪璫璬璭璮璯環璱璲璳璴璵璶璷璸璹璺璻璼璽璾璿 -
74C0 瓀瓁瓂瓃瓄瓅瓆瓇瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓒瓓瓔瓕瓖瓗瓘瓙瓚瓛瓜瓝瓞瓟 -
74E0 瓠瓡瓢瓣瓤瓥瓦瓧瓨瓩瓪瓫瓬瓭瓮瓯瓰瓱瓲瓳瓴瓵瓶瓷瓸瓹瓺瓻瓼瓽瓾瓿 -
7500 甀甁甂甃甄甅甆甇甈甉甊甋甌甍甎甏甐甑甒甓甔甕甖甗甘甙甚甛甜甝甞生 -
7520 甠甡產産甤甥甦甧用甩甪甫甬甭甮甯田由甲申甴电甶男甸甹町画甼甽甾甿 -
7540 畀畁畂畃畄畅畆畇畈畉畊畋界畍畎畏畐畑畒畓畔畕畖畗畘留畚畛畜畝畞畟 -
7560 畠畡畢畣畤略畦畧畨畩番畫畬畭畮畯異畱畲畳畴畵當畷畸畹畺畻畼畽畾畿 -
7580 疀疁疂疃疄疅疆疇疈疉疊疋疌疍疎疏疐疑疒疓疔疕疖疗疘疙疚疛疜疝疞疟 -
75A0 疠疡疢疣疤疥疦疧疨疩疪疫疬疭疮疯疰疱疲疳疴疵疶疷疸疹疺疻疼疽疾疿 -
75C0 痀痁痂痃痄病痆症痈痉痊痋痌痍痎痏痐痑痒痓痔痕痖痗痘痙痚痛痜痝痞痟 -
75E0 痠痡痢痣痤痥痦痧痨痩痪痫痬痭痮痯痰痱痲痳痴痵痶痷痸痹痺痻痼痽痾痿 -
7600 瘀瘁瘂瘃瘄瘅瘆瘇瘈瘉瘊瘋瘌瘍瘎瘏瘐瘑瘒瘓瘔瘕瘖瘗瘘瘙瘚瘛瘜瘝瘞瘟 -
7620 瘠瘡瘢瘣瘤瘥瘦瘧瘨瘩瘪瘫瘬瘭瘮瘯瘰瘱瘲瘳瘴瘵瘶瘷瘸瘹瘺瘻瘼瘽瘾瘿 -
7640 癀癁療癃癄癅癆癇癈癉癊癋癌癍癎癏癐癑癒癓癔癕癖癗癘癙癚癛癜癝癞癟 -
7660 癠癡癢癣癤癥癦癧癨癩癪癫癬癭癮癯癰癱癲癳癴癵癶癷癸癹発登發白百癿 -
7680 皀皁皂皃的皅皆皇皈皉皊皋皌皍皎皏皐皑皒皓皔皕皖皗皘皙皚皛皜皝皞皟 -
76A0 皠皡皢皣皤皥皦皧皨皩皪皫皬皭皮皯皰皱皲皳皴皵皶皷皸皹皺皻皼皽皾皿 -
76C0 盀盁盂盃盄盅盆盇盈盉益盋盌盍盎盏盐监盒盓盔盕盖盗盘盙盚盛盜盝盞盟 -
76E0 盠盡盢監盤盥盦盧盨盩盪盫盬盭目盯盰盱盲盳直盵盶盷相盹盺盻盼盽盾盿 -
7700 眀省眂眃眄眅眆眇眈眉眊看県眍眎眏眐眑眒眓眔眕眖眗眘眙眚眛眜眝眞真 -
7720 眠眡眢眣眤眥眦眧眨眩眪眫眬眭眮眯眰眱眲眳眴眵眶眷眸眹眺眻眼眽眾眿 -
7740 着睁睂睃睄睅睆睇睈睉睊睋睌睍睎睏睐睑睒睓睔睕睖睗睘睙睚睛睜睝睞睟 -
7760 睠睡睢督睤睥睦睧睨睩睪睫睬睭睮睯睰睱睲睳睴睵睶睷睸睹睺睻睼睽睾睿 -
7780 瞀瞁瞂瞃瞄瞅瞆瞇瞈瞉瞊瞋瞌瞍瞎瞏瞐瞑瞒瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞟 -
77A0 瞠瞡瞢瞣瞤瞥瞦瞧瞨瞩瞪瞫瞬瞭瞮瞯瞰瞱瞲瞳瞴瞵瞶瞷瞸瞹瞺瞻瞼瞽瞾瞿 -
77C0 矀矁矂矃矄矅矆矇矈矉矊矋矌矍矎矏矐矑矒矓矔矕矖矗矘矙矚矛矜矝矞矟 -
77E0 矠矡矢矣矤知矦矧矨矩矪矫矬短矮矯矰矱矲石矴矵矶矷矸矹矺矻矼矽矾矿 -
7800 砀码砂砃砄砅砆砇砈砉砊砋砌砍砎砏砐砑砒砓研砕砖砗砘砙砚砛砜砝砞砟 -
7820 砠砡砢砣砤砥砦砧砨砩砪砫砬砭砮砯砰砱砲砳破砵砶砷砸砹砺砻砼砽砾砿 -
7840 础硁硂硃硄硅硆硇硈硉硊硋硌硍硎硏硐硑硒硓硔硕硖硗硘硙硚硛硜硝硞硟 -
7860 硠硡硢硣硤硥硦硧硨硩硪硫硬硭确硯硰硱硲硳硴硵硶硷硸硹硺硻硼硽硾硿 -
7880 碀碁碂碃碄碅碆碇碈碉碊碋碌碍碎碏碐碑碒碓碔碕碖碗碘碙碚碛碜碝碞碟 -
78A0 碠碡碢碣碤碥碦碧碨碩碪碫碬碭碮碯碰碱碲碳碴碵碶碷碸碹確碻碼碽碾碿 -
78C0 磀磁磂磃磄磅磆磇磈磉磊磋磌磍磎磏磐磑磒磓磔磕磖磗磘磙磚磛磜磝磞磟 -
78E0 磠磡磢磣磤磥磦磧磨磩磪磫磬磭磮磯磰磱磲磳磴磵磶磷磸磹磺磻磼磽磾磿 -
7900 礀礁礂礃礄礅礆礇礈礉礊礋礌礍礎礏礐礑礒礓礔礕礖礗礘礙礚礛礜礝礞礟 -
7920 礠礡礢礣礤礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礴礵礶礷礸礹示礻礼礽社礿 -
7940 祀祁祂祃祄祅祆祇祈祉祊祋祌祍祎祏祐祑祒祓祔祕祖祗祘祙祚祛祜祝神祟 -
7960 祠祡祢祣祤祥祦祧票祩祪祫祬祭祮祯祰祱祲祳祴祵祶祷祸祹祺祻祼祽祾祿 -
7980 禀禁禂禃禄禅禆禇禈禉禊禋禌禍禎福禐禑禒禓禔禕禖禗禘禙禚禛禜禝禞禟 -
79A0 禠禡禢禣禤禥禦禧禨禩禪禫禬禭禮禯禰禱禲禳禴禵禶禷禸禹禺离禼禽禾禿 -
79C0 秀私秂秃秄秅秆秇秈秉秊秋秌种秎秏秐科秒秓秔秕秖秗秘秙秚秛秜秝秞租 -
79E0 秠秡秢秣秤秥秦秧秨秩秪秫秬秭秮积称秱秲秳秴秵秶秷秸秹秺移秼秽秾秿 -
7A00 稀稁稂稃稄稅稆稇稈稉稊程稌稍税稏稐稑稒稓稔稕稖稗稘稙稚稛稜稝稞稟 -
7A20 稠稡稢稣稤稥稦稧稨稩稪稫稬稭種稯稰稱稲稳稴稵稶稷稸稹稺稻稼稽稾稿 -
7A40 穀穁穂穃穄穅穆穇穈穉穊穋穌積穎穏穐穑穒穓穔穕穖穗穘穙穚穛穜穝穞穟 -
7A60 穠穡穢穣穤穥穦穧穨穩穪穫穬穭穮穯穰穱穲穳穴穵究穷穸穹空穻穼穽穾穿 -
7A80 窀突窂窃窄窅窆窇窈窉窊窋窌窍窎窏窐窑窒窓窔窕窖窗窘窙窚窛窜窝窞窟 -
7AA0 窠窡窢窣窤窥窦窧窨窩窪窫窬窭窮窯窰窱窲窳窴窵窶窷窸窹窺窻窼窽窾窿 -
7AC0 竀竁竂竃竄竅竆竇竈竉竊立竌竍竎竏竐竑竒竓竔竕竖竗竘站竚竛竜竝竞竟 -
7AE0 章竡竢竣竤童竦竧竨竩竪竫竬竭竮端竰竱竲竳竴竵競竷竸竹竺竻竼竽竾竿 -
7B00 笀笁笂笃笄笅笆笇笈笉笊笋笌笍笎笏笐笑笒笓笔笕笖笗笘笙笚笛笜笝笞笟 -
7B20 笠笡笢笣笤笥符笧笨笩笪笫第笭笮笯笰笱笲笳笴笵笶笷笸笹笺笻笼笽笾笿 -
7B40 筀筁筂筃筄筅筆筇筈等筊筋筌筍筎筏筐筑筒筓答筕策筗筘筙筚筛筜筝筞筟 -
7B60 筠筡筢筣筤筥筦筧筨筩筪筫筬筭筮筯筰筱筲筳筴筵筶筷筸筹筺筻筼筽签筿 -
7B80 简箁箂箃箄箅箆箇箈箉箊箋箌箍箎箏箐箑箒箓箔箕箖算箘箙箚箛箜箝箞箟 -
7BA0 箠管箢箣箤箥箦箧箨箩箪箫箬箭箮箯箰箱箲箳箴箵箶箷箸箹箺箻箼箽箾箿 -
7BC0 節篁篂篃範篅篆篇篈築篊篋篌篍篎篏篐篑篒篓篔篕篖篗篘篙篚篛篜篝篞篟 -
7BE0 篠篡篢篣篤篥篦篧篨篩篪篫篬篭篮篯篰篱篲篳篴篵篶篷篸篹篺篻篼篽篾篿 -
7C00 簀簁簂簃簄簅簆簇簈簉簊簋簌簍簎簏簐簑簒簓簔簕簖簗簘簙簚簛簜簝簞簟 -
7C20 簠簡簢簣簤簥簦簧簨簩簪簫簬簭簮簯簰簱簲簳簴簵簶簷簸簹簺簻簼簽簾簿 -
7C40 籀籁籂籃籄籅籆籇籈籉籊籋籌籍籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟 -
7C60 籠籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲米籴籵籶籷籸籹籺类籼籽籾籿 -
7C80 粀粁粂粃粄粅粆粇粈粉粊粋粌粍粎粏粐粑粒粓粔粕粖粗粘粙粚粛粜粝粞粟 -
7CA0 粠粡粢粣粤粥粦粧粨粩粪粫粬粭粮粯粰粱粲粳粴粵粶粷粸粹粺粻粼粽精粿 -
7CC0 糀糁糂糃糄糅糆糇糈糉糊糋糌糍糎糏糐糑糒糓糔糕糖糗糘糙糚糛糜糝糞糟 -
7CE0 糠糡糢糣糤糥糦糧糨糩糪糫糬糭糮糯糰糱糲糳糴糵糶糷糸糹糺系糼糽糾糿 -
7D00 紀紁紂紃約紅紆紇紈紉紊紋紌納紎紏紐紑紒紓純紕紖紗紘紙級紛紜紝紞紟 -
7D20 素紡索紣紤紥紦紧紨紩紪紫紬紭紮累細紱紲紳紴紵紶紷紸紹紺紻紼紽紾紿 -
7D40 絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟 -
7D60 絠絡絢絣絤絥給絧絨絩絪絫絬絭絮絯絰統絲絳絴絵絶絷絸絹絺絻絼絽絾絿 -
7D80 綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘継続綛綜綝綞綟 -
7DA0 綠綡綢綣綤綥綦綧綨綩綪綫綬維綮綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿 -
7DC0 緀緁緂緃緄緅緆緇緈緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙線緛緜緝緞緟 -
7DE0 締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰緱緲緳練緵緶緷緸緹緺緻緼緽緾緿 -
7E00 縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘縙縚縛縜縝縞縟 -
7E20 縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹縺縻縼總績縿 -
7E40 繀繁繂繃繄繅繆繇繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝繞繟 -
7E60 繠繡繢繣繤繥繦繧繨繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿 -
7E80 纀纁纂纃纄纅纆纇纈纉纊纋續纍纎纏纐纑纒纓纔纕纖纗纘纙纚纛纜纝纞纟 -
7EA0 纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线 -
7EC0 绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统 -
7EE0 绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿 -
7F00 缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟 -
7F20 缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵缶缷缸缹缺缻缼缽缾缿 -
7F40 罀罁罂罃罄罅罆罇罈罉罊罋罌罍罎罏罐网罒罓罔罕罖罗罘罙罚罛罜罝罞罟 -
7F60 罠罡罢罣罤罥罦罧罨罩罪罫罬罭置罯罰罱署罳罴罵罶罷罸罹罺罻罼罽罾罿 -
7F80 羀羁羂羃羄羅羆羇羈羉羊羋羌羍美羏羐羑羒羓羔羕羖羗羘羙羚羛羜羝羞羟 -
7FA0 羠羡羢羣群羥羦羧羨義羪羫羬羭羮羯羰羱羲羳羴羵羶羷羸羹羺羻羼羽羾羿 -
7FC0 翀翁翂翃翄翅翆翇翈翉翊翋翌翍翎翏翐翑習翓翔翕翖翗翘翙翚翛翜翝翞翟 -
7FE0 翠翡翢翣翤翥翦翧翨翩翪翫翬翭翮翯翰翱翲翳翴翵翶翷翸翹翺翻翼翽翾翿 -
8000 耀老耂考耄者耆耇耈耉耊耋而耍耎耏耐耑耒耓耔耕耖耗耘耙耚耛耜耝耞耟 -
8020 耠耡耢耣耤耥耦耧耨耩耪耫耬耭耮耯耰耱耲耳耴耵耶耷耸耹耺耻耼耽耾耿 -
8040 聀聁聂聃聄聅聆聇聈聉聊聋职聍聎聏聐聑聒聓联聕聖聗聘聙聚聛聜聝聞聟 -
8060 聠聡聢聣聤聥聦聧聨聩聪聫聬聭聮聯聰聱聲聳聴聵聶職聸聹聺聻聼聽聾聿 -
8080 肀肁肂肃肄肅肆肇肈肉肊肋肌肍肎肏肐肑肒肓肔肕肖肗肘肙肚肛肜肝肞肟 -
80A0 肠股肢肣肤肥肦肧肨肩肪肫肬肭肮肯肰肱育肳肴肵肶肷肸肹肺肻肼肽肾肿 -
80C0 胀胁胂胃胄胅胆胇胈胉胊胋背胍胎胏胐胑胒胓胔胕胖胗胘胙胚胛胜胝胞胟 -
80E0 胠胡胢胣胤胥胦胧胨胩胪胫胬胭胮胯胰胱胲胳胴胵胶胷胸胹胺胻胼能胾胿 -
8100 脀脁脂脃脄脅脆脇脈脉脊脋脌脍脎脏脐脑脒脓脔脕脖脗脘脙脚脛脜脝脞脟 -
8120 脠脡脢脣脤脥脦脧脨脩脪脫脬脭脮脯脰脱脲脳脴脵脶脷脸脹脺脻脼脽脾脿 -
8140 腀腁腂腃腄腅腆腇腈腉腊腋腌腍腎腏腐腑腒腓腔腕腖腗腘腙腚腛腜腝腞腟 -
8160 腠腡腢腣腤腥腦腧腨腩腪腫腬腭腮腯腰腱腲腳腴腵腶腷腸腹腺腻腼腽腾腿 -
8180 膀膁膂膃膄膅膆膇膈膉膊膋膌膍膎膏膐膑膒膓膔膕膖膗膘膙膚膛膜膝膞膟 -
81A0 膠膡膢膣膤膥膦膧膨膩膪膫膬膭膮膯膰膱膲膳膴膵膶膷膸膹膺膻膼膽膾膿 -
81C0 臀臁臂臃臄臅臆臇臈臉臊臋臌臍臎臏臐臑臒臓臔臕臖臗臘臙臚臛臜臝臞臟 -
81E0 臠臡臢臣臤臥臦臧臨臩自臫臬臭臮臯臰臱臲至致臵臶臷臸臹臺臻臼臽臾臿 -
8200 舀舁舂舃舄舅舆與興舉舊舋舌舍舎舏舐舑舒舓舔舕舖舗舘舙舚舛舜舝舞舟 -
8220 舠舡舢舣舤舥舦舧舨舩航舫般舭舮舯舰舱舲舳舴舵舶舷舸船舺舻舼舽舾舿 -
8240 艀艁艂艃艄艅艆艇艈艉艊艋艌艍艎艏艐艑艒艓艔艕艖艗艘艙艚艛艜艝艞艟 -
8260 艠艡艢艣艤艥艦艧艨艩艪艫艬艭艮良艰艱色艳艴艵艶艷艸艹艺艻艼艽艾艿 -
8280 芀芁节芃芄芅芆芇芈芉芊芋芌芍芎芏芐芑芒芓芔芕芖芗芘芙芚芛芜芝芞芟 -
82A0 芠芡芢芣芤芥芦芧芨芩芪芫芬芭芮芯芰花芲芳芴芵芶芷芸芹芺芻芼芽芾芿 -
82C0 苀苁苂苃苄苅苆苇苈苉苊苋苌苍苎苏苐苑苒苓苔苕苖苗苘苙苚苛苜苝苞苟 -
82E0 苠苡苢苣苤若苦苧苨苩苪苫苬苭苮苯苰英苲苳苴苵苶苷苸苹苺苻苼苽苾苿 -
8300 茀茁茂范茄茅茆茇茈茉茊茋茌茍茎茏茐茑茒茓茔茕茖茗茘茙茚茛茜茝茞茟 -
8320 茠茡茢茣茤茥茦茧茨茩茪茫茬茭茮茯茰茱茲茳茴茵茶茷茸茹茺茻茼茽茾茿 -
8340 荀荁荂荃荄荅荆荇荈草荊荋荌荍荎荏荐荑荒荓荔荕荖荗荘荙荚荛荜荝荞荟 -
8360 荠荡荢荣荤荥荦荧荨荩荪荫荬荭荮药荰荱荲荳荴荵荶荷荸荹荺荻荼荽荾荿 -
8380 莀莁莂莃莄莅莆莇莈莉莊莋莌莍莎莏莐莑莒莓莔莕莖莗莘莙莚莛莜莝莞莟 -
83A0 莠莡莢莣莤莥莦莧莨莩莪莫莬莭莮莯莰莱莲莳莴莵莶获莸莹莺莻莼莽莾莿 -
83C0 菀菁菂菃菄菅菆菇菈菉菊菋菌菍菎菏菐菑菒菓菔菕菖菗菘菙菚菛菜菝菞菟 -
83E0 菠菡菢菣菤菥菦菧菨菩菪菫菬菭菮華菰菱菲菳菴菵菶菷菸菹菺菻菼菽菾菿 -
8400 萀萁萂萃萄萅萆萇萈萉萊萋萌萍萎萏萐萑萒萓萔萕萖萗萘萙萚萛萜萝萞萟 -
8420 萠萡萢萣萤营萦萧萨萩萪萫萬萭萮萯萰萱萲萳萴萵萶萷萸萹萺萻萼落萾萿 -
8440 葀葁葂葃葄葅葆葇葈葉葊葋葌葍葎葏葐葑葒葓葔葕葖著葘葙葚葛葜葝葞葟 -
8460 葠葡葢董葤葥葦葧葨葩葪葫葬葭葮葯葰葱葲葳葴葵葶葷葸葹葺葻葼葽葾葿 -
8480 蒀蒁蒂蒃蒄蒅蒆蒇蒈蒉蒊蒋蒌蒍蒎蒏蒐蒑蒒蒓蒔蒕蒖蒗蒘蒙蒚蒛蒜蒝蒞蒟 -
84A0 蒠蒡蒢蒣蒤蒥蒦蒧蒨蒩蒪蒫蒬蒭蒮蒯蒰蒱蒲蒳蒴蒵蒶蒷蒸蒹蒺蒻蒼蒽蒾蒿 -
84C0 蓀蓁蓂蓃蓄蓅蓆蓇蓈蓉蓊蓋蓌蓍蓎蓏蓐蓑蓒蓓蓔蓕蓖蓗蓘蓙蓚蓛蓜蓝蓞蓟 -
84E0 蓠蓡蓢蓣蓤蓥蓦蓧蓨蓩蓪蓫蓬蓭蓮蓯蓰蓱蓲蓳蓴蓵蓶蓷蓸蓹蓺蓻蓼蓽蓾蓿 -
8500 蔀蔁蔂蔃蔄蔅蔆蔇蔈蔉蔊蔋蔌蔍蔎蔏蔐蔑蔒蔓蔔蔕蔖蔗蔘蔙蔚蔛蔜蔝蔞蔟 -
8520 蔠蔡蔢蔣蔤蔥蔦蔧蔨蔩蔪蔫蔬蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔷蔸蔹蔺蔻蔼蔽蔾蔿 -
8540 蕀蕁蕂蕃蕄蕅蕆蕇蕈蕉蕊蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕蕖蕗蕘蕙蕚蕛蕜蕝蕞蕟 -
8560 蕠蕡蕢蕣蕤蕥蕦蕧蕨蕩蕪蕫蕬蕭蕮蕯蕰蕱蕲蕳蕴蕵蕶蕷蕸蕹蕺蕻蕼蕽蕾蕿 -
8580 薀薁薂薃薄薅薆薇薈薉薊薋薌薍薎薏薐薑薒薓薔薕薖薗薘薙薚薛薜薝薞薟 -
85A0 薠薡薢薣薤薥薦薧薨薩薪薫薬薭薮薯薰薱薲薳薴薵薶薷薸薹薺薻薼薽薾薿 -
85C0 藀藁藂藃藄藅藆藇藈藉藊藋藌藍藎藏藐藑藒藓藔藕藖藗藘藙藚藛藜藝藞藟 -
85E0 藠藡藢藣藤藥藦藧藨藩藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸藹藺藻藼藽藾藿 -
8600 蘀蘁蘂蘃蘄蘅蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐蘑蘒蘓蘔蘕蘖蘗蘘蘙蘚蘛蘜蘝蘞蘟 -
8620 蘠蘡蘢蘣蘤蘥蘦蘧蘨蘩蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘸蘹蘺蘻蘼蘽蘾蘿 -
8640 虀虁虂虃虄虅虆虇虈虉虊虋虌虍虎虏虐虑虒虓虔處虖虗虘虙虚虛虜虝虞號 -
8660 虠虡虢虣虤虥虦虧虨虩虪虫虬虭虮虯虰虱虲虳虴虵虶虷虸虹虺虻虼虽虾虿 -
8680 蚀蚁蚂蚃蚄蚅蚆蚇蚈蚉蚊蚋蚌蚍蚎蚏蚐蚑蚒蚓蚔蚕蚖蚗蚘蚙蚚蚛蚜蚝蚞蚟 -
86A0 蚠蚡蚢蚣蚤蚥蚦蚧蚨蚩蚪蚫蚬蚭蚮蚯蚰蚱蚲蚳蚴蚵蚶蚷蚸蚹蚺蚻蚼蚽蚾蚿 -
86C0 蛀蛁蛂蛃蛄蛅蛆蛇蛈蛉蛊蛋蛌蛍蛎蛏蛐蛑蛒蛓蛔蛕蛖蛗蛘蛙蛚蛛蛜蛝蛞蛟 -
86E0 蛠蛡蛢蛣蛤蛥蛦蛧蛨蛩蛪蛫蛬蛭蛮蛯蛰蛱蛲蛳蛴蛵蛶蛷蛸蛹蛺蛻蛼蛽蛾蛿 -
8700 蜀蜁蜂蜃蜄蜅蜆蜇蜈蜉蜊蜋蜌蜍蜎蜏蜐蜑蜒蜓蜔蜕蜖蜗蜘蜙蜚蜛蜜蜝蜞蜟 -
8720 蜠蜡蜢蜣蜤蜥蜦蜧蜨蜩蜪蜫蜬蜭蜮蜯蜰蜱蜲蜳蜴蜵蜶蜷蜸蜹蜺蜻蜼蜽蜾蜿 -
8740 蝀蝁蝂蝃蝄蝅蝆蝇蝈蝉蝊蝋蝌蝍蝎蝏蝐蝑蝒蝓蝔蝕蝖蝗蝘蝙蝚蝛蝜蝝蝞蝟 -
8760 蝠蝡蝢蝣蝤蝥蝦蝧蝨蝩蝪蝫蝬蝭蝮蝯蝰蝱蝲蝳蝴蝵蝶蝷蝸蝹蝺蝻蝼蝽蝾蝿 -
8780 螀螁螂螃螄螅螆螇螈螉螊螋螌融螎螏螐螑螒螓螔螕螖螗螘螙螚螛螜螝螞螟 -
87A0 螠螡螢螣螤螥螦螧螨螩螪螫螬螭螮螯螰螱螲螳螴螵螶螷螸螹螺螻螼螽螾螿 -
87C0 蟀蟁蟂蟃蟄蟅蟆蟇蟈蟉蟊蟋蟌蟍蟎蟏蟐蟑蟒蟓蟔蟕蟖蟗蟘蟙蟚蟛蟜蟝蟞蟟 -
87E0 蟠蟡蟢蟣蟤蟥蟦蟧蟨蟩蟪蟫蟬蟭蟮蟯蟰蟱蟲蟳蟴蟵蟶蟷蟸蟹蟺蟻蟼蟽蟾蟿 -
8800 蠀蠁蠂蠃蠄蠅蠆蠇蠈蠉蠊蠋蠌蠍蠎蠏蠐蠑蠒蠓蠔蠕蠖蠗蠘蠙蠚蠛蠜蠝蠞蠟 -
8820 蠠蠡蠢蠣蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠲蠳蠴蠵蠶蠷蠸蠹蠺蠻蠼蠽蠾蠿 -
8840 血衁衂衃衄衅衆衇衈衉衊衋行衍衎衏衐衑衒術衔衕衖街衘衙衚衛衜衝衞衟 -
8860 衠衡衢衣衤补衦衧表衩衪衫衬衭衮衯衰衱衲衳衴衵衶衷衸衹衺衻衼衽衾衿 -
8880 袀袁袂袃袄袅袆袇袈袉袊袋袌袍袎袏袐袑袒袓袔袕袖袗袘袙袚袛袜袝袞袟 -
88A0 袠袡袢袣袤袥袦袧袨袩袪被袬袭袮袯袰袱袲袳袴袵袶袷袸袹袺袻袼袽袾袿 -
88C0 裀裁裂裃裄装裆裇裈裉裊裋裌裍裎裏裐裑裒裓裔裕裖裗裘裙裚裛補裝裞裟 -
88E0 裠裡裢裣裤裥裦裧裨裩裪裫裬裭裮裯裰裱裲裳裴裵裶裷裸裹裺裻裼製裾裿 -
8900 褀褁褂褃褄褅褆複褈褉褊褋褌褍褎褏褐褑褒褓褔褕褖褗褘褙褚褛褜褝褞褟 -
8920 褠褡褢褣褤褥褦褧褨褩褪褫褬褭褮褯褰褱褲褳褴褵褶褷褸褹褺褻褼褽褾褿 -
8940 襀襁襂襃襄襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘襙襚襛襜襝襞襟 -
8960 襠襡襢襣襤襥襦襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襻襼襽襾西 -
8980 覀要覂覃覄覅覆覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟 -
89A0 覠覡覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿 -
89C0 觀见观觃规觅视觇览觉觊觋觌觍觎觏觐觑角觓觔觕觖觗觘觙觚觛觜觝觞觟 -
89E0 觠觡觢解觤觥触觧觨觩觪觫觬觭觮觯觰觱觲觳觴觵觶觷觸觹觺觻觼觽觾觿 -
8A00 言訁訂訃訄訅訆訇計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝訞訟 -
8A20 訠訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訾訿 -
8A40 詀詁詂詃詄詅詆詇詈詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞詟 -
8A60 詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰話該詳詴詵詶詷詸詹詺詻詼詽詾詿 -
8A80 誀誁誂誃誄誅誆誇誈誉誊誋誌認誎誏誐誑誒誓誔誕誖誗誘誙誚誛誜誝語誟 -
8AA0 誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調 -
8AC0 諀諁諂諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟 -
8AE0 諠諡諢諣諤諥諦諧諨諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿 -
8B00 謀謁謂謃謄謅謆謇謈謉謊謋謌謍謎謏謐謑謒謓謔謕謖謗謘謙謚講謜謝謞謟 -
8B20 謠謡謢謣謤謥謦謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸謹謺謻謼謽謾謿 -
8B40 譀譁譂譃譄譅譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟 -
8B60 譠譡譢譣譤譥警譧譨譩譪譫譬譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿 -
8B80 讀讁讂讃讄讅讆讇讈讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟 -
8BA0 讠计订讣认讥讦讧讨让讪讫讬训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访 -
8BC0 诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟 -
8BE0 诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿 -
8C00 谀谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟 -
8C20 谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷谸谹谺谻谼谽谾谿 -
8C40 豀豁豂豃豄豅豆豇豈豉豊豋豌豍豎豏豐豑豒豓豔豕豖豗豘豙豚豛豜豝豞豟 -
8C60 豠象豢豣豤豥豦豧豨豩豪豫豬豭豮豯豰豱豲豳豴豵豶豷豸豹豺豻豼豽豾豿 -
8C80 貀貁貂貃貄貅貆貇貈貉貊貋貌貍貎貏貐貑貒貓貔貕貖貗貘貙貚貛貜貝貞貟 -
8CA0 負財貢貣貤貥貦貧貨販貪貫責貭貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿 -
8CC0 賀賁賂賃賄賅賆資賈賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟 -
8CE0 賠賡賢賣賤賥賦賧賨賩質賫賬賭賮賯賰賱賲賳賴賵賶賷賸賹賺賻購賽賾賿 -
8D00 贀贁贂贃贄贅贆贇贈贉贊贋贌贍贎贏贐贑贒贓贔贕贖贗贘贙贚贛贜贝贞负 -
8D20 贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿 -
8D40 赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟 -
8D60 赠赡赢赣赤赥赦赧赨赩赪赫赬赭赮赯走赱赲赳赴赵赶起赸赹赺赻赼赽赾赿 -
8D80 趀趁趂趃趄超趆趇趈趉越趋趌趍趎趏趐趑趒趓趔趕趖趗趘趙趚趛趜趝趞趟 -
8DA0 趠趡趢趣趤趥趦趧趨趩趪趫趬趭趮趯趰趱趲足趴趵趶趷趸趹趺趻趼趽趾趿 -
8DC0 跀跁跂跃跄跅跆跇跈跉跊跋跌跍跎跏跐跑跒跓跔跕跖跗跘跙跚跛跜距跞跟 -
8DE0 跠跡跢跣跤跥跦跧跨跩跪跫跬跭跮路跰跱跲跳跴践跶跷跸跹跺跻跼跽跾跿 -
8E00 踀踁踂踃踄踅踆踇踈踉踊踋踌踍踎踏踐踑踒踓踔踕踖踗踘踙踚踛踜踝踞踟 -
8E20 踠踡踢踣踤踥踦踧踨踩踪踫踬踭踮踯踰踱踲踳踴踵踶踷踸踹踺踻踼踽踾踿 -
8E40 蹀蹁蹂蹃蹄蹅蹆蹇蹈蹉蹊蹋蹌蹍蹎蹏蹐蹑蹒蹓蹔蹕蹖蹗蹘蹙蹚蹛蹜蹝蹞蹟 -
8E60 蹠蹡蹢蹣蹤蹥蹦蹧蹨蹩蹪蹫蹬蹭蹮蹯蹰蹱蹲蹳蹴蹵蹶蹷蹸蹹蹺蹻蹼蹽蹾蹿 -
8E80 躀躁躂躃躄躅躆躇躈躉躊躋躌躍躎躏躐躑躒躓躔躕躖躗躘躙躚躛躜躝躞躟 -
8EA0 躠躡躢躣躤躥躦躧躨躩躪身躬躭躮躯躰躱躲躳躴躵躶躷躸躹躺躻躼躽躾躿 -
8EC0 軀軁軂軃軄軅軆軇軈軉車軋軌軍軎軏軐軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟 -
8EE0 軠軡転軣軤軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸軹軺軻軼軽軾軿 -
8F00 輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟 -
8F20 輠輡輢輣輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿 -
8F40 轀轁轂轃轄轅轆轇轈轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟 -
8F60 轠轡轢轣轤轥车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿 -
8F80 辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辛辜辝辞辟 -
8FA0 辠辡辢辣辤辥辦辧辨辩辪辫辬辭辮辯辰辱農辳辴辵辶辷辸边辺辻込辽达辿 -
8FC0 迀迁迂迃迄迅迆过迈迉迊迋迌迍迎迏运近迒迓返迕迖迗还这迚进远违连迟 -
8FE0 迠迡迢迣迤迥迦迧迨迩迪迫迬迭迮迯述迱迲迳迴迵迶迷迸迹迺迻迼追迾迿 -
9000 退送适逃逄逅逆逇逈选逊逋逌逍逎透逐逑递逓途逕逖逗逘這通逛逜逝逞速 -
9020 造逡逢連逤逥逦逧逨逩逪逫逬逭逮逯逰週進逳逴逵逶逷逸逹逺逻逼逽逾逿 -
9040 遀遁遂遃遄遅遆遇遈遉遊運遌遍過遏遐遑遒道達違遖遗遘遙遚遛遜遝遞遟 -
9060 遠遡遢遣遤遥遦遧遨適遪遫遬遭遮遯遰遱遲遳遴遵遶遷選遹遺遻遼遽遾避 -
9080 邀邁邂邃還邅邆邇邈邉邊邋邌邍邎邏邐邑邒邓邔邕邖邗邘邙邚邛邜邝邞邟 -
90A0 邠邡邢那邤邥邦邧邨邩邪邫邬邭邮邯邰邱邲邳邴邵邶邷邸邹邺邻邼邽邾邿 -
90C0 郀郁郂郃郄郅郆郇郈郉郊郋郌郍郎郏郐郑郒郓郔郕郖郗郘郙郚郛郜郝郞郟 -
90E0 郠郡郢郣郤郥郦郧部郩郪郫郬郭郮郯郰郱郲郳郴郵郶郷郸郹郺郻郼都郾郿 -
9100 鄀鄁鄂鄃鄄鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄙鄚鄛鄜鄝鄞鄟 -
9120 鄠鄡鄢鄣鄤鄥鄦鄧鄨鄩鄪鄫鄬鄭鄮鄯鄰鄱鄲鄳鄴鄵鄶鄷鄸鄹鄺鄻鄼鄽鄾鄿 -
9140 酀酁酂酃酄酅酆酇酈酉酊酋酌配酎酏酐酑酒酓酔酕酖酗酘酙酚酛酜酝酞酟 -
9160 酠酡酢酣酤酥酦酧酨酩酪酫酬酭酮酯酰酱酲酳酴酵酶酷酸酹酺酻酼酽酾酿 -
9180 醀醁醂醃醄醅醆醇醈醉醊醋醌醍醎醏醐醑醒醓醔醕醖醗醘醙醚醛醜醝醞醟 -
91A0 醠醡醢醣醤醥醦醧醨醩醪醫醬醭醮醯醰醱醲醳醴醵醶醷醸醹醺醻醼醽醾醿 -
91C0 釀釁釂釃釄釅釆采釈釉释釋里重野量釐金釒釓釔釕釖釗釘釙釚釛釜針釞釟 -
91E0 釠釡釢釣釤釥釦釧釨釩釪釫釬釭釮釯釰釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿 -
9200 鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘鈙鈚鈛鈜鈝鈞鈟 -
9220 鈠鈡鈢鈣鈤鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿 -
9240 鉀鉁鉂鉃鉄鉅鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟 -
9260 鉠鉡鉢鉣鉤鉥鉦鉧鉨鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉴鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿 -
9280 銀銁銂銃銄銅銆銇銈銉銊銋銌銍銎銏銐銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟 -
92A0 銠銡銢銣銤銥銦銧銨銩銪銫銬銭銮銯銰銱銲銳銴銵銶銷銸銹銺銻銼銽銾銿 -
92C0 鋀鋁鋂鋃鋄鋅鋆鋇鋈鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟 -
92E0 鋠鋡鋢鋣鋤鋥鋦鋧鋨鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿 -
9300 錀錁錂錃錄錅錆錇錈錉錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟 -
9320 錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰錱録錳錴錵錶錷錸錹錺錻錼錽錾錿 -
9340 鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘鍙鍚鍛鍜鍝鍞鍟 -
9360 鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍪鍫鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿 -
9380 鎀鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎏鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟 -
93A0 鎠鎡鎢鎣鎤鎥鎦鎧鎨鎩鎪鎫鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿 -
93C0 鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏊鏋鏌鏍鏎鏏鏐鏑鏒鏓鏔鏕鏖鏗鏘鏙鏚鏛鏜鏝鏞鏟 -
93E0 鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸鏹鏺鏻鏼鏽鏾鏿 -
9400 鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟 -
9420 鐠鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐾鐿 -
9440 鑀鑁鑂鑃鑄鑅鑆鑇鑈鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟 -
9460 鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑫鑬鑭鑮鑯鑰鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿 -
9480 钀钁钂钃钄钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钜钝钞钟 -
94A0 钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿 -
94C0 铀铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟 -
94E0 铠铡铢铣铤铥铦铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿 -
9500 销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锜锝锞锟 -
9520 锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿 -
9540 镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟 -
9560 镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶長镸镹镺镻镼镽镾长 -
9580 門閁閂閃閄閅閆閇閈閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟 -
95A0 閠閡関閣閤閥閦閧閨閩閪閫閬閭閮閯閰閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿 -
95C0 闀闁闂闃闄闅闆闇闈闉闊闋闌闍闎闏闐闑闒闓闔闕闖闗闘闙闚闛關闝闞闟 -
95E0 闠闡闢闣闤闥闦闧门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿 -
9600 阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛阜阝阞队 -
9620 阠阡阢阣阤阥阦阧阨阩阪阫阬阭阮阯阰阱防阳阴阵阶阷阸阹阺阻阼阽阾阿 -
9640 陀陁陂陃附际陆陇陈陉陊陋陌降陎陏限陑陒陓陔陕陖陗陘陙陚陛陜陝陞陟 -
9660 陠陡院陣除陥陦陧陨险陪陫陬陭陮陯陰陱陲陳陴陵陶陷陸陹険陻陼陽陾陿 -
9680 隀隁隂隃隄隅隆隇隈隉隊隋隌隍階随隐隑隒隓隔隕隖隗隘隙隚際障隝隞隟 -
96A0 隠隡隢隣隤隥隦隧隨隩險隫隬隭隮隯隰隱隲隳隴隵隶隷隸隹隺隻隼隽难隿 -
96C0 雀雁雂雃雄雅集雇雈雉雊雋雌雍雎雏雐雑雒雓雔雕雖雗雘雙雚雛雜雝雞雟 -
96E0 雠雡離難雤雥雦雧雨雩雪雫雬雭雮雯雰雱雲雳雴雵零雷雸雹雺電雼雽雾雿 -
9700 需霁霂霃霄霅霆震霈霉霊霋霌霍霎霏霐霑霒霓霔霕霖霗霘霙霚霛霜霝霞霟 -
9720 霠霡霢霣霤霥霦霧霨霩霪霫霬霭霮霯霰霱露霳霴霵霶霷霸霹霺霻霼霽霾霿 -
9740 靀靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑青靓靔靕靖靗靘静靚靛靜靝非靟 -
9760 靠靡面靣靤靥靦靧靨革靪靫靬靭靮靯靰靱靲靳靴靵靶靷靸靹靺靻靼靽靾靿 -
9780 鞀鞁鞂鞃鞄鞅鞆鞇鞈鞉鞊鞋鞌鞍鞎鞏鞐鞑鞒鞓鞔鞕鞖鞗鞘鞙鞚鞛鞜鞝鞞鞟 -
97A0 鞠鞡鞢鞣鞤鞥鞦鞧鞨鞩鞪鞫鞬鞭鞮鞯鞰鞱鞲鞳鞴鞵鞶鞷鞸鞹鞺鞻鞼鞽鞾鞿 -
97C0 韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟 -
97E0 韠韡韢韣韤韥韦韧韨韩韪韫韬韭韮韯韰韱韲音韴韵韶韷韸韹韺韻韼韽韾響 -
9800 頀頁頂頃頄項順頇須頉頊頋頌頍頎頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟 -
9820 頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿 -
9840 顀顁顂顃顄顅顆顇顈顉顊顋題額顎顏顐顑顒顓顔顕顖顗願顙顚顛顜顝類顟 -
9860 顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮顯顰顱顲顳顴页顶顷顸项顺须顼顽顾顿 -
9880 颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟 -
98A0 颠颡颢颣颤颥颦颧風颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿 -
98C0 飀飁飂飃飄飅飆飇飈飉飊飋飌飍风飏飐飑飒飓飔飕飖飗飘飙飚飛飜飝飞食 -
98E0 飠飡飢飣飤飥飦飧飨飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸飹飺飻飼飽飾飿 -
9900 餀餁餂餃餄餅餆餇餈餉養餋餌餍餎餏餐餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟 -
9920 餠餡餢餣餤餥餦餧館餩餪餫餬餭餮餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿 -
9940 饀饁饂饃饄饅饆饇饈饉饊饋饌饍饎饏饐饑饒饓饔饕饖饗饘饙饚饛饜饝饞饟 -
9960 饠饡饢饣饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿 -
9980 馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕首馗馘香馚馛馜馝馞馟 -
99A0 馠馡馢馣馤馥馦馧馨馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿 -
99C0 駀駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘駙駚駛駜駝駞駟 -
99E0 駠駡駢駣駤駥駦駧駨駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹駺駻駼駽駾駿 -
9A00 騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐騑騒験騔騕騖騗騘騙騚騛騜騝騞騟 -
9A20 騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸騹騺騻騼騽騾騿 -
9A40 驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙驚驛驜驝驞驟 -
9A60 驠驡驢驣驤驥驦驧驨驩驪驫马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿 -
9A80 骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟 -
9AA0 骠骡骢骣骤骥骦骧骨骩骪骫骬骭骮骯骰骱骲骳骴骵骶骷骸骹骺骻骼骽骾骿 -
9AC0 髀髁髂髃髄髅髆髇髈髉髊髋髌髍髎髏髐髑髒髓體髕髖髗高髙髚髛髜髝髞髟 -
9AE0 髠髡髢髣髤髥髦髧髨髩髪髫髬髭髮髯髰髱髲髳髴髵髶髷髸髹髺髻髼髽髾髿 -
9B00 鬀鬁鬂鬃鬄鬅鬆鬇鬈鬉鬊鬋鬌鬍鬎鬏鬐鬑鬒鬓鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬟 -
9B20 鬠鬡鬢鬣鬤鬥鬦鬧鬨鬩鬪鬫鬬鬭鬮鬯鬰鬱鬲鬳鬴鬵鬶鬷鬸鬹鬺鬻鬼鬽鬾鬿 -
9B40 魀魁魂魃魄魅魆魇魈魉魊魋魌魍魎魏魐魑魒魓魔魕魖魗魘魙魚魛魜魝魞魟 -
9B60 魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻魼魽魾魿 -
9B80 鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟 -
9BA0 鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺鮻鮼鮽鮾鮿 -
9BC0 鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛鯜鯝鯞鯟 -
9BE0 鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿 -
9C00 鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚鰛鰜鰝鰞鰟 -
9C20 鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻鰼鰽鰾鰿 -
9C40 鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟 -
9C60 鱠鱡鱢鱣鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺鱻鱼鱽鱾鱿 -
9C80 鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟 -
9CA0 鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿 -
9CC0 鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳚鳛鳜鳝鳞鳟 -
9CE0 鳠鳡鳢鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿 -
9D00 鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟 -
9D20 鴠鴡鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿 -
9D40 鵀鵁鵂鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟 -
9D60 鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿 -
9D80 鶀鶁鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟 -
9DA0 鶠鶡鶢鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿 -
9DC0 鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟 -
9DE0 鷠鷡鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿 -
9E00 鸀鸁鸂鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸟 -
9E20 鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿 -
9E40 鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟 -
9E60 鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽鹾鹿 -
9E80 麀麁麂麃麄麅麆麇麈麉麊麋麌麍麎麏麐麑麒麓麔麕麖麗麘麙麚麛麜麝麞麟 -
9EA0 麠麡麢麣麤麥麦麧麨麩麪麫麬麭麮麯麰麱麲麳麴麵麶麷麸麹麺麻麼麽麾麿 -
9EC0 黀黁黂黃黄黅黆黇黈黉黊黋黌黍黎黏黐黑黒黓黔黕黖黗默黙黚黛黜黝點黟 -
9EE0 黠黡黢黣黤黥黦黧黨黩黪黫黬黭黮黯黰黱黲黳黴黵黶黷黸黹黺黻黼黽黾黿 -
9F00 鼀鼁鼂鼃鼄鼅鼆鼇鼈鼉鼊鼋鼌鼍鼎鼏鼐鼑鼒鼓鼔鼕鼖鼗鼘鼙鼚鼛鼜鼝鼞鼟 -
9F20 鼠鼡鼢鼣鼤鼥鼦鼧鼨鼩鼪鼫鼬鼭鼮鼯鼰鼱鼲鼳鼴鼵鼶鼷鼸鼹鼺鼻鼼鼽鼾鼿 -
9F40 齀齁齂齃齄齅齆齇齈齉齊齋齌齍齎齏齐齑齒齓齔齕齖齗齘齙齚齛齜齝齞齟 -
9F60 齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸齹齺齻齼齽齾齿 -
9F80 龀龁龂龃龄龅龆龇龈龉龊龋龌龍龎龏龐龑龒龓龔龕龖龗龘龙龚龛龜龝龞龟 -
9FA0 龠龡龢龣龤龥龦龧龨龩龪龫龬龭龮龯龰龱龲龳龴龵龶龷龸龹龺龻龼龽龾龿 -
9FC0 鿀鿁鿂鿃鿄鿅鿆鿇鿈鿉鿊鿋鿌鿍鿎鿏鿐鿑鿒鿓鿔鿕鿖鿗鿘鿙鿚鿛鿜鿝鿞鿟 -
9FE0 鿠鿡鿢鿣鿤鿥鿦鿧鿨鿩鿪鿫鿬鿭鿮鿯鿰鿱鿲鿳鿴鿵鿶鿷鿸鿹鿺鿻鿼鿽鿾鿿 -
A000 ꀀꀁꀂꀃꀄꀅꀆꀇꀈꀉꀊꀋꀌꀍꀎꀏꀐꀑꀒꀓꀔꀕꀖꀗꀘꀙꀚꀛꀜꀝꀞꀟ -
A020 ꀠꀡꀢꀣꀤꀥꀦꀧꀨꀩꀪꀫꀬꀭꀮꀯꀰꀱꀲꀳꀴꀵꀶꀷꀸꀹꀺꀻꀼꀽꀾꀿ -
A040 ꁀꁁꁂꁃꁄꁅꁆꁇꁈꁉꁊꁋꁌꁍꁎꁏꁐꁑꁒꁓꁔꁕꁖꁗꁘꁙꁚꁛꁜꁝꁞꁟ -
A060 ꁠꁡꁢꁣꁤꁥꁦꁧꁨꁩꁪꁫꁬꁭꁮꁯꁰꁱꁲꁳꁴꁵꁶꁷꁸꁹꁺꁻꁼꁽꁾꁿ -
A080 ꂀꂁꂂꂃꂄꂅꂆꂇꂈꂉꂊꂋꂌꂍꂎꂏꂐꂑꂒꂓꂔꂕꂖꂗꂘꂙꂚꂛꂜꂝꂞꂟ -
A0A0 ꂠꂡꂢꂣꂤꂥꂦꂧꂨꂩꂪꂫꂬꂭꂮꂯꂰꂱꂲꂳꂴꂵꂶꂷꂸꂹꂺꂻꂼꂽꂾꂿ -
A0C0 ꃀꃁꃂꃃꃄꃅꃆꃇꃈꃉꃊꃋꃌꃍꃎꃏꃐꃑꃒꃓꃔꃕꃖꃗꃘꃙꃚꃛꃜꃝꃞꃟ -
A0E0 ꃠꃡꃢꃣꃤꃥꃦꃧꃨꃩꃪꃫꃬꃭꃮꃯꃰꃱꃲꃳꃴꃵꃶꃷꃸꃹꃺꃻꃼꃽꃾꃿ -
A100 ꄀꄁꄂꄃꄄꄅꄆꄇꄈꄉꄊꄋꄌꄍꄎꄏꄐꄑꄒꄓꄔꄕꄖꄗꄘꄙꄚꄛꄜꄝꄞꄟ -
A120 ꄠꄡꄢꄣꄤꄥꄦꄧꄨꄩꄪꄫꄬꄭꄮꄯꄰꄱꄲꄳꄴꄵꄶꄷꄸꄹꄺꄻꄼꄽꄾꄿ -
A140 ꅀꅁꅂꅃꅄꅅꅆꅇꅈꅉꅊꅋꅌꅍꅎꅏꅐꅑꅒꅓꅔꅕꅖꅗꅘꅙꅚꅛꅜꅝꅞꅟ -
A160 ꅠꅡꅢꅣꅤꅥꅦꅧꅨꅩꅪꅫꅬꅭꅮꅯꅰꅱꅲꅳꅴꅵꅶꅷꅸꅹꅺꅻꅼꅽꅾꅿ -
A180 ꆀꆁꆂꆃꆄꆅꆆꆇꆈꆉꆊꆋꆌꆍꆎꆏꆐꆑꆒꆓꆔꆕꆖꆗꆘꆙꆚꆛꆜꆝꆞꆟ -
A1A0 ꆠꆡꆢꆣꆤꆥꆦꆧꆨꆩꆪꆫꆬꆭꆮꆯꆰꆱꆲꆳꆴꆵꆶꆷꆸꆹꆺꆻꆼꆽꆾꆿ -
A1C0 ꇀꇁꇂꇃꇄꇅꇆꇇꇈꇉꇊꇋꇌꇍꇎꇏꇐꇑꇒꇓꇔꇕꇖꇗꇘꇙꇚꇛꇜꇝꇞꇟ -
A1E0 ꇠꇡꇢꇣꇤꇥꇦꇧꇨꇩꇪꇫꇬꇭꇮꇯꇰꇱꇲꇳꇴꇵꇶꇷꇸꇹꇺꇻꇼꇽꇾꇿ -
A200 ꈀꈁꈂꈃꈄꈅꈆꈇꈈꈉꈊꈋꈌꈍꈎꈏꈐꈑꈒꈓꈔꈕꈖꈗꈘꈙꈚꈛꈜꈝꈞꈟ -
A220 ꈠꈡꈢꈣꈤꈥꈦꈧꈨꈩꈪꈫꈬꈭꈮꈯꈰꈱꈲꈳꈴꈵꈶꈷꈸꈹꈺꈻꈼꈽꈾꈿ -
A240 ꉀꉁꉂꉃꉄꉅꉆꉇꉈꉉꉊꉋꉌꉍꉎꉏꉐꉑꉒꉓꉔꉕꉖꉗꉘꉙꉚꉛꉜꉝꉞꉟ -
A260 ꉠꉡꉢꉣꉤꉥꉦꉧꉨꉩꉪꉫꉬꉭꉮꉯꉰꉱꉲꉳꉴꉵꉶꉷꉸꉹꉺꉻꉼꉽꉾꉿ -
A280 ꊀꊁꊂꊃꊄꊅꊆꊇꊈꊉꊊꊋꊌꊍꊎꊏꊐꊑꊒꊓꊔꊕꊖꊗꊘꊙꊚꊛꊜꊝꊞꊟ -
A2A0 ꊠꊡꊢꊣꊤꊥꊦꊧꊨꊩꊪꊫꊬꊭꊮꊯꊰꊱꊲꊳꊴꊵꊶꊷꊸꊹꊺꊻꊼꊽꊾꊿ -
A2C0 ꋀꋁꋂꋃꋄꋅꋆꋇꋈꋉꋊꋋꋌꋍꋎꋏꋐꋑꋒꋓꋔꋕꋖꋗꋘꋙꋚꋛꋜꋝꋞꋟ -
A2E0 ꋠꋡꋢꋣꋤꋥꋦꋧꋨꋩꋪꋫꋬꋭꋮꋯꋰꋱꋲꋳꋴꋵꋶꋷꋸꋹꋺꋻꋼꋽꋾꋿ -
A300 ꌀꌁꌂꌃꌄꌅꌆꌇꌈꌉꌊꌋꌌꌍꌎꌏꌐꌑꌒꌓꌔꌕꌖꌗꌘꌙꌚꌛꌜꌝꌞꌟ -
A320 ꌠꌡꌢꌣꌤꌥꌦꌧꌨꌩꌪꌫꌬꌭꌮꌯꌰꌱꌲꌳꌴꌵꌶꌷꌸꌹꌺꌻꌼꌽꌾꌿ -
A340 ꍀꍁꍂꍃꍄꍅꍆꍇꍈꍉꍊꍋꍌꍍꍎꍏꍐꍑꍒꍓꍔꍕꍖꍗꍘꍙꍚꍛꍜꍝꍞꍟ -
A360 ꍠꍡꍢꍣꍤꍥꍦꍧꍨꍩꍪꍫꍬꍭꍮꍯꍰꍱꍲꍳꍴꍵꍶꍷꍸꍹꍺꍻꍼꍽꍾꍿ -
A380 ꎀꎁꎂꎃꎄꎅꎆꎇꎈꎉꎊꎋꎌꎍꎎꎏꎐꎑꎒꎓꎔꎕꎖꎗꎘꎙꎚꎛꎜꎝꎞꎟ -
A3A0 ꎠꎡꎢꎣꎤꎥꎦꎧꎨꎩꎪꎫꎬꎭꎮꎯꎰꎱꎲꎳꎴꎵꎶꎷꎸꎹꎺꎻꎼꎽꎾꎿ -
A3C0 ꏀꏁꏂꏃꏄꏅꏆꏇꏈꏉꏊꏋꏌꏍꏎꏏꏐꏑꏒꏓꏔꏕꏖꏗꏘꏙꏚꏛꏜꏝꏞꏟ -
A3E0 ꏠꏡꏢꏣꏤꏥꏦꏧꏨꏩꏪꏫꏬꏭꏮꏯꏰꏱꏲꏳꏴꏵꏶꏷꏸꏹꏺꏻꏼꏽꏾꏿ -
A400 ꐀꐁꐂꐃꐄꐅꐆꐇꐈꐉꐊꐋꐌꐍꐎꐏꐐꐑꐒꐓꐔꐕꐖꐗꐘꐙꐚꐛꐜꐝꐞꐟ -
A420 ꐠꐡꐢꐣꐤꐥꐦꐧꐨꐩꐪꐫꐬꐭꐮꐯꐰꐱꐲꐳꐴꐵꐶꐷꐸꐹꐺꐻꐼꐽꐾꐿ -
A440 ꑀꑁꑂꑃꑄꑅꑆꑇꑈꑉꑊꑋꑌꑍꑎꑏꑐꑑꑒꑓꑔꑕꑖꑗꑘꑙꑚꑛꑜꑝꑞꑟ -
A460 ꑠꑡꑢꑣꑤꑥꑦꑧꑨꑩꑪꑫꑬꑭꑮꑯꑰꑱꑲꑳꑴꑵꑶꑷꑸꑹꑺꑻꑼꑽꑾꑿ -
A480 ꒀꒁꒂꒃꒄꒅꒆꒇꒈꒉꒊꒋꒌ꒐꒑꒒꒓꒔꒕꒖꒗꒘꒙꒚꒛꒜꒝꒞꒟ -
A4A0 ꒠꒡꒢꒣꒤꒥꒦꒧꒨꒩꒪꒫꒬꒭꒮꒯꒰꒱꒲꒳꒴꒵꒶꒷꒸꒹꒺꒻꒼꒽꒾꒿ -
A4C0 ꓀꓁꓂꓃꓄꓅꓆ꓐꓑꓒꓓꓔꓕꓖꓗꓘꓙꓚꓛꓜꓝꓞꓟ -
A4E0 ꓠꓡꓢꓣꓤꓥꓦꓧꓨꓩꓪꓫꓬꓭꓮꓯꓰꓱꓲꓳꓴꓵꓶꓷꓸꓹꓺꓻꓼꓽ꓾꓿ -
A500 ꔀꔁꔂꔃꔄꔅꔆꔇꔈꔉꔊꔋꔌꔍꔎꔏꔐꔑꔒꔓꔔꔕꔖꔗꔘꔙꔚꔛꔜꔝꔞꔟ -
A520 ꔠꔡꔢꔣꔤꔥꔦꔧꔨꔩꔪꔫꔬꔭꔮꔯꔰꔱꔲꔳꔴꔵꔶꔷꔸꔹꔺꔻꔼꔽꔾꔿ -
A540 ꕀꕁꕂꕃꕄꕅꕆꕇꕈꕉꕊꕋꕌꕍꕎꕏꕐꕑꕒꕓꕔꕕꕖꕗꕘꕙꕚꕛꕜꕝꕞꕟ -
A560 ꕠꕡꕢꕣꕤꕥꕦꕧꕨꕩꕪꕫꕬꕭꕮꕯꕰꕱꕲꕳꕴꕵꕶꕷꕸꕹꕺꕻꕼꕽꕾꕿ -
A580 ꖀꖁꖂꖃꖄꖅꖆꖇꖈꖉꖊꖋꖌꖍꖎꖏꖐꖑꖒꖓꖔꖕꖖꖗꖘꖙꖚꖛꖜꖝꖞꖟ -
A5A0 ꖠꖡꖢꖣꖤꖥꖦꖧꖨꖩꖪꖫꖬꖭꖮꖯꖰꖱꖲꖳꖴꖵꖶꖷꖸꖹꖺꖻꖼꖽꖾꖿ -
A5C0 ꗀꗁꗂꗃꗄꗅꗆꗇꗈꗉꗊꗋꗌꗍꗎꗏꗐꗑꗒꗓꗔꗕꗖꗗꗘꗙꗚꗛꗜꗝꗞꗟ -
A5E0 ꗠꗡꗢꗣꗤꗥꗦꗧꗨꗩꗪꗫꗬꗭꗮꗯꗰꗱꗲꗳꗴꗵꗶꗷꗸꗹꗺꗻꗼꗽꗾꗿ -
A600 ꘀꘁꘂꘃꘄꘅꘆꘇꘈꘉꘊꘋꘌ꘍꘎꘏ꘐꘑꘒꘓꘔꘕꘖꘗꘘꘙꘚꘛꘜꘝꘞꘟ -
A620 ꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩ꘪꘫ -
A640 ꙀꙁꙂꙃꙄꙅꙆꙇꙈꙉꙊꙋꙌꙍꙎꙏꙐꙑꙒꙓꙔꙕꙖꙗꙘꙙꙚꙛꙜꙝꙞꙟ -
A660 ꙠꙡꙢꙣꙤꙥꙦꙧꙨꙩꙪꙫꙬꙭꙮ꙯꙰꙱꙲꙳ꙴꙵꙶꙷꙸꙹꙺꙻ꙼꙽꙾ꙿ -
A680 ꚀꚁꚂꚃꚄꚅꚆꚇꚈꚉꚊꚋꚌꚍꚎꚏꚐꚑꚒꚓꚔꚕꚖꚗꚘꚙꚚꚛꚜꚝꚞꚟ -
A6A0 ꚠꚡꚢꚣꚤꚥꚦꚧꚨꚩꚪꚫꚬꚭꚮꚯꚰꚱꚲꚳꚴꚵꚶꚷꚸꚹꚺꚻꚼꚽꚾꚿ -
A6C0 ꛀꛁꛂꛃꛄꛅꛆꛇꛈꛉꛊꛋꛌꛍꛎꛏꛐꛑꛒꛓꛔꛕꛖꛗꛘꛙꛚꛛꛜꛝꛞꛟ -
A6E0 ꛠꛡꛢꛣꛤꛥꛦꛧꛨꛩꛪꛫꛬꛭꛮꛯ꛰꛱꛲꛳꛴꛵꛶꛷ -
A700 ꜀꜁꜂꜃꜄꜅꜆꜇꜈꜉꜊꜋꜌꜍꜎꜏꜐꜑꜒꜓꜔꜕꜖ꜗꜘꜙꜚꜛꜜꜝꜞꜟ -
A720 ꜠꜡ꜢꜣꜤꜥꜦꜧꜨꜩꜪꜫꜬꜭꜮꜯꜰꜱꜲꜳꜴꜵꜶꜷꜸꜹꜺꜻꜼꜽꜾꜿ -
A740 ꝀꝁꝂꝃꝄꝅꝆꝇꝈꝉꝊꝋꝌꝍꝎꝏꝐꝑꝒꝓꝔꝕꝖꝗꝘꝙꝚꝛꝜꝝꝞꝟ -
A760 ꝠꝡꝢꝣꝤꝥꝦꝧꝨꝩꝪꝫꝬꝭꝮꝯꝰꝱꝲꝳꝴꝵꝶꝷꝸꝹꝺꝻꝼꝽꝾꝿ -
A780 ꞀꞁꞂꞃꞄꞅꞆꞇꞈ꞉꞊ꞋꞌꞍꞎꞏꞐꞑꞒꞓꞔꞕꞖꞗꞘꞙꞚꞛꞜꞝꞞꞟ -
A7A0 ꞠꞡꞢꞣꞤꞥꞦꞧꞨꞩꞪꞫꞬꞭꞮꞯꞰꞱꞲꞳꞴꞵꞶꞷꞸꞹꞺꞻꞼꞽꞾꞿ -
A7C0 ꟀꟁꟂꟃꟄꟅꟆꟇꟈꟉꟊꟐꟑꟓꟕꟖꟗꟘꟙ -
A7E0 ꟲꟳꟴꟵꟶꟷꟸꟹꟺꟻꟼꟽꟾꟿ -
A800 ꠀꠁꠂꠃꠄꠅ꠆ꠇꠈꠉꠊꠋꠌꠍꠎꠏꠐꠑꠒꠓꠔꠕꠖꠗꠘꠙꠚꠛꠜꠝꠞꠟ -
A820 ꠠꠡꠢꠣꠤꠥꠦꠧ꠨꠩꠪꠫꠬꠰꠱꠲꠳꠴꠵꠶꠷꠸꠹ -
A840 ꡀꡁꡂꡃꡄꡅꡆꡇꡈꡉꡊꡋꡌꡍꡎꡏꡐꡑꡒꡓꡔꡕꡖꡗꡘꡙꡚꡛꡜꡝꡞꡟ -
A860 ꡠꡡꡢꡣꡤꡥꡦꡧꡨꡩꡪꡫꡬꡭꡮꡯꡰꡱꡲꡳ꡴꡵꡶꡷ -
A880 ꢀꢁꢂꢃꢄꢅꢆꢇꢈꢉꢊꢋꢌꢍꢎꢏꢐꢑꢒꢓꢔꢕꢖꢗꢘꢙꢚꢛꢜꢝꢞꢟ -
A8A0 ꢠꢡꢢꢣꢤꢥꢦꢧꢨꢩꢪꢫꢬꢭꢮꢯꢰꢱꢲꢳꢴꢵꢶꢷꢸꢹꢺꢻꢼꢽꢾꢿ -
A8C0 ꣀꣁꣂꣃ꣄ꣅ꣎꣏꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙ -
A8E0 ꣠꣡꣢꣣꣤꣥꣦꣧꣨꣩꣪꣫꣬꣭꣮꣯꣰꣱ꣲꣳꣴꣵꣶꣷ꣸꣹꣺ꣻ꣼ꣽꣾꣿ -
A900 ꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉ꤊꤋꤌꤍꤎꤏꤐꤑꤒꤓꤔꤕꤖꤗꤘꤙꤚꤛꤜꤝꤞꤟ -
A920 ꤠꤡꤢꤣꤤꤥꤦꤧꤨꤩꤪ꤫꤬꤭꤮꤯ꤰꤱꤲꤳꤴꤵꤶꤷꤸꤹꤺꤻꤼꤽꤾꤿ -
A940 ꥀꥁꥂꥃꥄꥅꥆꥇꥈꥉꥊꥋꥌꥍꥎꥏꥐꥑꥒ꥓꥟ -
A960 ꥠꥡꥢꥣꥤꥥꥦꥧꥨꥩꥪꥫꥬꥭꥮꥯꥰꥱꥲꥳꥴꥵꥶꥷꥸꥹꥺꥻꥼ -
A980 ꦀꦁꦂꦃꦄꦅꦆꦇꦈꦉꦊꦋꦌꦍꦎꦏꦐꦑꦒꦓꦔꦕꦖꦗꦘꦙꦚꦛꦜꦝꦞꦟ -
A9A0 ꦠꦡꦢꦣꦤꦥꦦꦧꦨꦩꦪꦫꦬꦭꦮꦯꦰꦱꦲ꦳ꦴꦵꦶꦷꦸꦹꦺꦻꦼꦽꦾꦿ -
A9C0 ꧀꧁꧂꧃꧄꧅꧆꧇꧈꧉꧊꧋꧌꧍ꧏ꧐꧑꧒꧓꧔꧕꧖꧗꧘꧙꧞꧟ -
A9E0 ꧠꧡꧢꧣꧤꧥꧦꧧꧨꧩꧪꧫꧬꧭꧮꧯ꧰꧱꧲꧳꧴꧵꧶꧷꧸꧹ꧺꧻꧼꧽꧾ -
AA00 ꨀꨁꨂꨃꨄꨅꨆꨇꨈꨉꨊꨋꨌꨍꨎꨏꨐꨑꨒꨓꨔꨕꨖꨗꨘꨙꨚꨛꨜꨝꨞꨟ -
AA20 ꨠꨡꨢꨣꨤꨥꨦꨧꨨꨩꨪꨫꨬꨭꨮꨯꨰꨱꨲꨳꨴꨵꨶ -
AA40 ꩀꩁꩂꩃꩄꩅꩆꩇꩈꩉꩊꩋꩌꩍ꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙꩜꩝꩞꩟ -
AA60 ꩠꩡꩢꩣꩤꩥꩦꩧꩨꩩꩪꩫꩬꩭꩮꩯꩰꩱꩲꩳꩴꩵꩶ꩷꩸꩹ꩺꩻꩼꩽꩾꩿ -
AA80 ꪀꪁꪂꪃꪄꪅꪆꪇꪈꪉꪊꪋꪌꪍꪎꪏꪐꪑꪒꪓꪔꪕꪖꪗꪘꪙꪚꪛꪜꪝꪞꪟ -
AAA0 ꪠꪡꪢꪣꪤꪥꪦꪧꪨꪩꪪꪫꪬꪭꪮꪯꪰꪱꪴꪲꪳꪵꪶꪷꪸꪹꪺꪻꪼꪽꪾ꪿ -
AAC0 ꫀ꫁ꫂꫛꫜꫝ꫞꫟ -
AAE0 ꫠꫡꫢꫣꫤꫥꫦꫧꫨꫩꫪꫫꫬꫭꫮꫯ꫰꫱ꫲꫳꫴꫵ꫶ -
AB00 ꬁꬂꬃꬄꬅꬆꬉꬊꬋꬌꬍꬎꬑꬒꬓꬔꬕꬖ -
AB20 ꬠꬡꬢꬣꬤꬥꬦꬨꬩꬪꬫꬬꬭꬮꬰꬱꬲꬳꬴꬵꬶꬷꬸꬹꬺꬻꬼꬽꬾꬿ -
AB40 ꭀꭁꭂꭃꭄꭅꭆꭇꭈꭉꭊꭋꭌꭍꭎꭏꭐꭑꭒꭓꭔꭕꭖꭗꭘꭙꭚ꭛ꭜꭝꭞꭟ -
AB60 ꭠꭡꭢꭣꭤꭥꭦꭧꭨꭩ꭪꭫ꭰꭱꭲꭳꭴꭵꭶꭷꭸꭹꭺꭻꭼꭽꭾꭿ -
AB80 ꮀꮁꮂꮃꮄꮅꮆꮇꮈꮉꮊꮋꮌꮍꮎꮏꮐꮑꮒꮓꮔꮕꮖꮗꮘꮙꮚꮛꮜꮝꮞꮟ -
ABA0 ꮠꮡꮢꮣꮤꮥꮦꮧꮨꮩꮪꮫꮬꮭꮮꮯꮰꮱꮲꮳꮴꮵꮶꮷꮸꮹꮺꮻꮼꮽꮾꮿ -
ABC0 ꯀꯁꯂꯃꯄꯅꯆꯇꯈꯉꯊꯋꯌꯍꯎꯏꯐꯑꯒꯓꯔꯕꯖꯗꯘꯙꯚꯛꯜꯝꯞꯟ -
ABE0 ꯠꯡꯢꯣꯤꯥꯦꯧꯨꯩꯪ꯫꯬꯭꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹ -
AC00 가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟 -
AC20 갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷갸갹갺갻갼갽갾갿 -
AC40 걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓걔걕걖걗걘걙걚걛걜걝걞걟 -
AC60 걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯거걱걲걳건걵걶걷걸걹걺걻걼걽걾걿 -
AC80 검겁겂것겄겅겆겇겈겉겊겋게겍겎겏겐겑겒겓겔겕겖겗겘겙겚겛겜겝겞겟 -
ACA0 겠겡겢겣겤겥겦겧겨격겪겫견겭겮겯결겱겲겳겴겵겶겷겸겹겺겻겼경겾겿 -
ACC0 곀곁곂곃계곅곆곇곈곉곊곋곌곍곎곏곐곑곒곓곔곕곖곗곘곙곚곛곜곝곞곟 -
ACE0 고곡곢곣곤곥곦곧골곩곪곫곬곭곮곯곰곱곲곳곴공곶곷곸곹곺곻과곽곾곿 -
AD00 관괁괂괃괄괅괆괇괈괉괊괋괌괍괎괏괐광괒괓괔괕괖괗괘괙괚괛괜괝괞괟 -
AD20 괠괡괢괣괤괥괦괧괨괩괪괫괬괭괮괯괰괱괲괳괴괵괶괷괸괹괺괻괼괽괾괿 -
AD40 굀굁굂굃굄굅굆굇굈굉굊굋굌굍굎굏교굑굒굓굔굕굖굗굘굙굚굛굜굝굞굟 -
AD60 굠굡굢굣굤굥굦굧굨굩굪굫구국굮굯군굱굲굳굴굵굶굷굸굹굺굻굼굽굾굿 -
AD80 궀궁궂궃궄궅궆궇궈궉궊궋권궍궎궏궐궑궒궓궔궕궖궗궘궙궚궛궜궝궞궟 -
ADA0 궠궡궢궣궤궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궷궸궹궺궻궼궽궾궿 -
ADC0 귀귁귂귃귄귅귆귇귈귉귊귋귌귍귎귏귐귑귒귓귔귕귖귗귘귙귚귛규귝귞귟 -
ADE0 균귡귢귣귤귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷그극귺귻근귽귾귿 -
AE00 글긁긂긃긄긅긆긇금급긊긋긌긍긎긏긐긑긒긓긔긕긖긗긘긙긚긛긜긝긞긟 -
AE20 긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯기긱긲긳긴긵긶긷길긹긺긻긼긽긾긿 -
AE40 김깁깂깃깄깅깆깇깈깉깊깋까깍깎깏깐깑깒깓깔깕깖깗깘깙깚깛깜깝깞깟 -
AE60 깠깡깢깣깤깥깦깧깨깩깪깫깬깭깮깯깰깱깲깳깴깵깶깷깸깹깺깻깼깽깾깿 -
AE80 꺀꺁꺂꺃꺄꺅꺆꺇꺈꺉꺊꺋꺌꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟 -
AEA0 꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺼꺽꺾꺿 -
AEC0 껀껁껂껃껄껅껆껇껈껉껊껋껌껍껎껏껐껑껒껓껔껕껖껗께껙껚껛껜껝껞껟 -
AEE0 껠껡껢껣껤껥껦껧껨껩껪껫껬껭껮껯껰껱껲껳껴껵껶껷껸껹껺껻껼껽껾껿 -
AF00 꼀꼁꼂꼃꼄꼅꼆꼇꼈꼉꼊꼋꼌꼍꼎꼏꼐꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟 -
AF20 꼠꼡꼢꼣꼤꼥꼦꼧꼨꼩꼪꼫꼬꼭꼮꼯꼰꼱꼲꼳꼴꼵꼶꼷꼸꼹꼺꼻꼼꼽꼾꼿 -
AF40 꽀꽁꽂꽃꽄꽅꽆꽇꽈꽉꽊꽋꽌꽍꽎꽏꽐꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽜꽝꽞꽟 -
AF60 꽠꽡꽢꽣꽤꽥꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽹꽺꽻꽼꽽꽾꽿 -
AF80 꾀꾁꾂꾃꾄꾅꾆꾇꾈꾉꾊꾋꾌꾍꾎꾏꾐꾑꾒꾓꾔꾕꾖꾗꾘꾙꾚꾛꾜꾝꾞꾟 -
AFA0 꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾸꾹꾺꾻꾼꾽꾾꾿 -
AFC0 꿀꿁꿂꿃꿄꿅꿆꿇꿈꿉꿊꿋꿌꿍꿎꿏꿐꿑꿒꿓꿔꿕꿖꿗꿘꿙꿚꿛꿜꿝꿞꿟 -
AFE0 꿠꿡꿢꿣꿤꿥꿦꿧꿨꿩꿪꿫꿬꿭꿮꿯꿰꿱꿲꿳꿴꿵꿶꿷꿸꿹꿺꿻꿼꿽꿾꿿 -
B000 뀀뀁뀂뀃뀄뀅뀆뀇뀈뀉뀊뀋뀌뀍뀎뀏뀐뀑뀒뀓뀔뀕뀖뀗뀘뀙뀚뀛뀜뀝뀞뀟 -
B020 뀠뀡뀢뀣뀤뀥뀦뀧뀨뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿 -
B040 끀끁끂끃끄끅끆끇끈끉끊끋끌끍끎끏끐끑끒끓끔끕끖끗끘끙끚끛끜끝끞끟 -
B060 끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끼끽끾끿 -
B080 낀낁낂낃낄낅낆낇낈낉낊낋낌낍낎낏낐낑낒낓낔낕낖낗나낙낚낛난낝낞낟 -
B0A0 날낡낢낣낤낥낦낧남납낪낫났낭낮낯낰낱낲낳내낵낶낷낸낹낺낻낼낽낾낿 -
B0C0 냀냁냂냃냄냅냆냇냈냉냊냋냌냍냎냏냐냑냒냓냔냕냖냗냘냙냚냛냜냝냞냟 -
B0E0 냠냡냢냣냤냥냦냧냨냩냪냫냬냭냮냯냰냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿 -
B100 넀넁넂넃넄넅넆넇너넉넊넋넌넍넎넏널넑넒넓넔넕넖넗넘넙넚넛넜넝넞넟 -
B120 넠넡넢넣네넥넦넧넨넩넪넫넬넭넮넯넰넱넲넳넴넵넶넷넸넹넺넻넼넽넾넿 -
B140 녀녁녂녃년녅녆녇녈녉녊녋녌녍녎녏념녑녒녓녔녕녖녗녘녙녚녛녜녝녞녟 -
B160 녠녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷노녹녺녻논녽녾녿 -
B180 놀놁놂놃놄놅놆놇놈놉놊놋놌농놎놏놐놑높놓놔놕놖놗놘놙놚놛놜놝놞놟 -
B1A0 놠놡놢놣놤놥놦놧놨놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸놹놺놻놼놽놾놿 -
B1C0 뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇌뇍뇎뇏뇐뇑뇒뇓뇔뇕뇖뇗뇘뇙뇚뇛뇜뇝뇞뇟 -
B1E0 뇠뇡뇢뇣뇤뇥뇦뇧뇨뇩뇪뇫뇬뇭뇮뇯뇰뇱뇲뇳뇴뇵뇶뇷뇸뇹뇺뇻뇼뇽뇾뇿 -
B200 눀눁눂눃누눅눆눇눈눉눊눋눌눍눎눏눐눑눒눓눔눕눖눗눘눙눚눛눜눝눞눟 -
B220 눠눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눴눵눶눷눸눹눺눻눼눽눾눿 -
B240 뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉘뉙뉚뉛뉜뉝뉞뉟 -
B260 뉠뉡뉢뉣뉤뉥뉦뉧뉨뉩뉪뉫뉬뉭뉮뉯뉰뉱뉲뉳뉴뉵뉶뉷뉸뉹뉺뉻뉼뉽뉾뉿 -
B280 늀늁늂늃늄늅늆늇늈늉늊늋늌늍늎늏느늑늒늓는늕늖늗늘늙늚늛늜늝늞늟 -
B2A0 늠늡늢늣늤능늦늧늨늩늪늫늬늭늮늯늰늱늲늳늴늵늶늷늸늹늺늻늼늽늾늿 -
B2C0 닀닁닂닃닄닅닆닇니닉닊닋닌닍닎닏닐닑닒닓닔닕닖닗님닙닚닛닜닝닞닟 -
B2E0 닠닡닢닣다닥닦닧단닩닪닫달닭닮닯닰닱닲닳담답닶닷닸당닺닻닼닽닾닿 -
B300 대댁댂댃댄댅댆댇댈댉댊댋댌댍댎댏댐댑댒댓댔댕댖댗댘댙댚댛댜댝댞댟 -
B320 댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿 -
B340 덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓더덕덖덗던덙덚덛덜덝덞덟 -
B360 덠덡덢덣덤덥덦덧덨덩덪덫덬덭덮덯데덱덲덳덴덵덶덷델덹덺덻덼덽덾덿 -
B380 뎀뎁뎂뎃뎄뎅뎆뎇뎈뎉뎊뎋뎌뎍뎎뎏뎐뎑뎒뎓뎔뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟 -
B3A0 뎠뎡뎢뎣뎤뎥뎦뎧뎨뎩뎪뎫뎬뎭뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿 -
B3C0 돀돁돂돃도독돆돇돈돉돊돋돌돍돎돏돐돑돒돓돔돕돖돗돘동돚돛돜돝돞돟 -
B3E0 돠돡돢돣돤돥돦돧돨돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돼돽돾돿 -
B400 됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됐됑됒됓됔됕됖됗되됙됚됛된됝됞됟 -
B420 될됡됢됣됤됥됦됧됨됩됪됫됬됭됮됯됰됱됲됳됴됵됶됷됸됹됺됻됼됽됾됿 -
B440 둀둁둂둃둄둅둆둇둈둉둊둋둌둍둎둏두둑둒둓둔둕둖둗둘둙둚둛둜둝둞둟 -
B460 둠둡둢둣둤둥둦둧둨둩둪둫둬둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿 -
B480 뒀뒁뒂뒃뒄뒅뒆뒇뒈뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒝뒞뒟 -
B4A0 뒠뒡뒢뒣뒤뒥뒦뒧뒨뒩뒪뒫뒬뒭뒮뒯뒰뒱뒲뒳뒴뒵뒶뒷뒸뒹뒺뒻뒼뒽뒾뒿 -
B4C0 듀듁듂듃듄듅듆듇듈듉듊듋듌듍듎듏듐듑듒듓듔듕듖듗듘듙듚듛드득듞듟 -
B4E0 든듡듢듣들듥듦듧듨듩듪듫듬듭듮듯듰등듲듳듴듵듶듷듸듹듺듻듼듽듾듿 -
B500 딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓디딕딖딗딘딙딚딛딜딝딞딟 -
B520 딠딡딢딣딤딥딦딧딨딩딪딫딬딭딮딯따딱딲딳딴딵딶딷딸딹딺딻딼딽딾딿 -
B540 땀땁땂땃땄땅땆땇땈땉땊땋때땍땎땏땐땑땒땓땔땕땖땗땘땙땚땛땜땝땞땟 -
B560 땠땡땢땣땤땥땦땧땨땩땪땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿 -
B580 떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟 -
B5A0 떠떡떢떣떤떥떦떧떨떩떪떫떬떭떮떯떰떱떲떳떴떵떶떷떸떹떺떻떼떽떾떿 -
B5C0 뗀뗁뗂뗃뗄뗅뗆뗇뗈뗉뗊뗋뗌뗍뗎뗏뗐뗑뗒뗓뗔뗕뗖뗗뗘뗙뗚뗛뗜뗝뗞뗟 -
B5E0 뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗬뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿 -
B600 똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏또똑똒똓똔똕똖똗똘똙똚똛똜똝똞똟 -
B620 똠똡똢똣똤똥똦똧똨똩똪똫똬똭똮똯똰똱똲똳똴똵똶똷똸똹똺똻똼똽똾똿 -
B640 뙀뙁뙂뙃뙄뙅뙆뙇뙈뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟 -
B660 뙠뙡뙢뙣뙤뙥뙦뙧뙨뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿 -
B680 뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚜뚝뚞뚟 -
B6A0 뚠뚡뚢뚣뚤뚥뚦뚧뚨뚩뚪뚫뚬뚭뚮뚯뚰뚱뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿 -
B6C0 뛀뛁뛂뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛔뛕뛖뛗뛘뛙뛚뛛뛜뛝뛞뛟 -
B6E0 뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛰뛱뛲뛳뛴뛵뛶뛷뛸뛹뛺뛻뛼뛽뛾뛿 -
B700 뜀뜁뜂뜃뜄뜅뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟 -
B720 뜠뜡뜢뜣뜤뜥뜦뜧뜨뜩뜪뜫뜬뜭뜮뜯뜰뜱뜲뜳뜴뜵뜶뜷뜸뜹뜺뜻뜼뜽뜾뜿 -
B740 띀띁띂띃띄띅띆띇띈띉띊띋띌띍띎띏띐띑띒띓띔띕띖띗띘띙띚띛띜띝띞띟 -
B760 띠띡띢띣띤띥띦띧띨띩띪띫띬띭띮띯띰띱띲띳띴띵띶띷띸띹띺띻라락띾띿 -
B780 란랁랂랃랄랅랆랇랈랉랊랋람랍랎랏랐랑랒랓랔랕랖랗래랙랚랛랜랝랞랟 -
B7A0 랠랡랢랣랤랥랦랧램랩랪랫랬랭랮랯랰랱랲랳랴략랶랷랸랹랺랻랼랽랾랿 -
B7C0 럀럁럂럃럄럅럆럇럈량럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝럞럟 -
B7E0 럠럡럢럣럤럥럦럧럨럩럪럫러럭럮럯런럱럲럳럴럵럶럷럸럹럺럻럼럽럾럿 -
B800 렀렁렂렃렄렅렆렇레렉렊렋렌렍렎렏렐렑렒렓렔렕렖렗렘렙렚렛렜렝렞렟 -
B820 렠렡렢렣려력렦렧련렩렪렫렬렭렮렯렰렱렲렳렴렵렶렷렸령렺렻렼렽렾렿 -
B840 례롁롂롃롄롅롆롇롈롉롊롋롌롍롎롏롐롑롒롓롔롕롖롗롘롙롚롛로록롞롟 -
B860 론롡롢롣롤롥롦롧롨롩롪롫롬롭롮롯롰롱롲롳롴롵롶롷롸롹롺롻롼롽롾롿 -
B880 뢀뢁뢂뢃뢄뢅뢆뢇뢈뢉뢊뢋뢌뢍뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟 -
B8A0 뢠뢡뢢뢣뢤뢥뢦뢧뢨뢩뢪뢫뢬뢭뢮뢯뢰뢱뢲뢳뢴뢵뢶뢷뢸뢹뢺뢻뢼뢽뢾뢿 -
B8C0 룀룁룂룃룄룅룆룇룈룉룊룋료룍룎룏룐룑룒룓룔룕룖룗룘룙룚룛룜룝룞룟 -
B8E0 룠룡룢룣룤룥룦룧루룩룪룫룬룭룮룯룰룱룲룳룴룵룶룷룸룹룺룻룼룽룾룿 -
B900 뤀뤁뤂뤃뤄뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤘뤙뤚뤛뤜뤝뤞뤟 -
B920 뤠뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤼뤽뤾뤿 -
B940 륀륁륂륃륄륅륆륇륈륉륊륋륌륍륎륏륐륑륒륓륔륕륖륗류륙륚륛륜륝륞륟 -
B960 률륡륢륣륤륥륦륧륨륩륪륫륬륭륮륯륰륱륲륳르륵륶륷른륹륺륻를륽륾륿 -
B980 릀릁릂릃름릅릆릇릈릉릊릋릌릍릎릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞릟 -
B9A0 릠릡릢릣릤릥릦릧릨릩릪릫리릭릮릯린릱릲릳릴릵릶릷릸릹릺릻림립릾릿 -
B9C0 맀링맂맃맄맅맆맇마막맊맋만맍많맏말맑맒맓맔맕맖맗맘맙맚맛맜망맞맟 -
B9E0 맠맡맢맣매맥맦맧맨맩맪맫맬맭맮맯맰맱맲맳맴맵맶맷맸맹맺맻맼맽맾맿 -
BA00 먀먁먂먃먄먅먆먇먈먉먊먋먌먍먎먏먐먑먒먓먔먕먖먗먘먙먚먛먜먝먞먟 -
BA20 먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷머먹먺먻먼먽먾먿 -
BA40 멀멁멂멃멄멅멆멇멈멉멊멋멌멍멎멏멐멑멒멓메멕멖멗멘멙멚멛멜멝멞멟 -
BA60 멠멡멢멣멤멥멦멧멨멩멪멫멬멭멮멯며멱멲멳면멵멶멷멸멹멺멻멼멽멾멿 -
BA80 몀몁몂몃몄명몆몇몈몉몊몋몌몍몎몏몐몑몒몓몔몕몖몗몘몙몚몛몜몝몞몟 -
BAA0 몠몡몢몣몤몥몦몧모목몪몫몬몭몮몯몰몱몲몳몴몵몶몷몸몹몺못몼몽몾몿 -
BAC0 뫀뫁뫂뫃뫄뫅뫆뫇뫈뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫘뫙뫚뫛뫜뫝뫞뫟 -
BAE0 뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫼뫽뫾뫿 -
BB00 묀묁묂묃묄묅묆묇묈묉묊묋묌묍묎묏묐묑묒묓묔묕묖묗묘묙묚묛묜묝묞묟 -
BB20 묠묡묢묣묤묥묦묧묨묩묪묫묬묭묮묯묰묱묲묳무묵묶묷문묹묺묻물묽묾묿 -
BB40 뭀뭁뭂뭃뭄뭅뭆뭇뭈뭉뭊뭋뭌뭍뭎뭏뭐뭑뭒뭓뭔뭕뭖뭗뭘뭙뭚뭛뭜뭝뭞뭟 -
BB60 뭠뭡뭢뭣뭤뭥뭦뭧뭨뭩뭪뭫뭬뭭뭮뭯뭰뭱뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿 -
BB80 뮀뮁뮂뮃뮄뮅뮆뮇뮈뮉뮊뮋뮌뮍뮎뮏뮐뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟 -
BBA0 뮠뮡뮢뮣뮤뮥뮦뮧뮨뮩뮪뮫뮬뮭뮮뮯뮰뮱뮲뮳뮴뮵뮶뮷뮸뮹뮺뮻뮼뮽뮾뮿 -
BBC0 므믁믂믃믄믅믆믇믈믉믊믋믌믍믎믏믐믑믒믓믔믕믖믗믘믙믚믛믜믝믞믟 -
BBE0 믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷미믹믺믻민믽믾믿 -
BC00 밀밁밂밃밄밅밆밇밈밉밊밋밌밍밎및밐밑밒밓바박밖밗반밙밚받발밝밞밟 -
BC20 밠밡밢밣밤밥밦밧밨방밪밫밬밭밮밯배백밲밳밴밵밶밷밸밹밺밻밼밽밾밿 -
BC40 뱀뱁뱂뱃뱄뱅뱆뱇뱈뱉뱊뱋뱌뱍뱎뱏뱐뱑뱒뱓뱔뱕뱖뱗뱘뱙뱚뱛뱜뱝뱞뱟 -
BC60 뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿 -
BC80 벀벁벂벃버벅벆벇번벉벊벋벌벍벎벏벐벑벒벓범법벖벗벘벙벚벛벜벝벞벟 -
BCA0 베벡벢벣벤벥벦벧벨벩벪벫벬벭벮벯벰벱벲벳벴벵벶벷벸벹벺벻벼벽벾벿 -
BCC0 변볁볂볃별볅볆볇볈볉볊볋볌볍볎볏볐병볒볓볔볕볖볗볘볙볚볛볜볝볞볟 -
BCE0 볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳보복볶볷본볹볺볻볼볽볾볿 -
BD00 봀봁봂봃봄봅봆봇봈봉봊봋봌봍봎봏봐봑봒봓봔봕봖봗봘봙봚봛봜봝봞봟 -
BD20 봠봡봢봣봤봥봦봧봨봩봪봫봬봭봮봯봰봱봲봳봴봵봶봷봸봹봺봻봼봽봾봿 -
BD40 뵀뵁뵂뵃뵄뵅뵆뵇뵈뵉뵊뵋뵌뵍뵎뵏뵐뵑뵒뵓뵔뵕뵖뵗뵘뵙뵚뵛뵜뵝뵞뵟 -
BD60 뵠뵡뵢뵣뵤뵥뵦뵧뵨뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿 -
BD80 부북붂붃분붅붆붇불붉붊붋붌붍붎붏붐붑붒붓붔붕붖붗붘붙붚붛붜붝붞붟 -
BDA0 붠붡붢붣붤붥붦붧붨붩붪붫붬붭붮붯붰붱붲붳붴붵붶붷붸붹붺붻붼붽붾붿 -
BDC0 뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑뷒뷓뷔뷕뷖뷗뷘뷙뷚뷛뷜뷝뷞뷟 -
BDE0 뷠뷡뷢뷣뷤뷥뷦뷧뷨뷩뷪뷫뷬뷭뷮뷯뷰뷱뷲뷳뷴뷵뷶뷷뷸뷹뷺뷻뷼뷽뷾뷿 -
BE00 븀븁븂븃븄븅븆븇븈븉븊븋브븍븎븏븐븑븒븓블븕븖븗븘븙븚븛븜븝븞븟 -
BE20 븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿 -
BE40 빀빁빂빃비빅빆빇빈빉빊빋빌빍빎빏빐빑빒빓빔빕빖빗빘빙빚빛빜빝빞빟 -
BE60 빠빡빢빣빤빥빦빧빨빩빪빫빬빭빮빯빰빱빲빳빴빵빶빷빸빹빺빻빼빽빾빿 -
BE80 뺀뺁뺂뺃뺄뺅뺆뺇뺈뺉뺊뺋뺌뺍뺎뺏뺐뺑뺒뺓뺔뺕뺖뺗뺘뺙뺚뺛뺜뺝뺞뺟 -
BEA0 뺠뺡뺢뺣뺤뺥뺦뺧뺨뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷뺸뺹뺺뺻뺼뺽뺾뺿 -
BEC0 뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻐뻑뻒뻓뻔뻕뻖뻗뻘뻙뻚뻛뻜뻝뻞뻟 -
BEE0 뻠뻡뻢뻣뻤뻥뻦뻧뻨뻩뻪뻫뻬뻭뻮뻯뻰뻱뻲뻳뻴뻵뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿 -
BF00 뼀뼁뼂뼃뼄뼅뼆뼇뼈뼉뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼘뼙뼚뼛뼜뼝뼞뼟 -
BF20 뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿 -
BF40 뽀뽁뽂뽃뽄뽅뽆뽇뽈뽉뽊뽋뽌뽍뽎뽏뽐뽑뽒뽓뽔뽕뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟 -
BF60 뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿 -
BF80 뾀뾁뾂뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾔뾕뾖뾗뾘뾙뾚뾛뾜뾝뾞뾟 -
BFA0 뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾰뾱뾲뾳뾴뾵뾶뾷뾸뾹뾺뾻뾼뾽뾾뾿 -
BFC0 뿀뿁뿂뿃뿄뿅뿆뿇뿈뿉뿊뿋뿌뿍뿎뿏뿐뿑뿒뿓뿔뿕뿖뿗뿘뿙뿚뿛뿜뿝뿞뿟 -
BFE0 뿠뿡뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿 -
C000 쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟 -
C020 쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀼쀽쀾쀿 -
C040 쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁑쁒쁓쁔쁕쁖쁗쁘쁙쁚쁛쁜쁝쁞쁟 -
C060 쁠쁡쁢쁣쁤쁥쁦쁧쁨쁩쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹쁺쁻쁼쁽쁾쁿 -
C080 삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삐삑삒삓삔삕삖삗삘삙삚삛삜삝삞삟 -
C0A0 삠삡삢삣삤삥삦삧삨삩삪삫사삭삮삯산삱삲삳살삵삶삷삸삹삺삻삼삽삾삿 -
C0C0 샀상샂샃샄샅샆샇새색샊샋샌샍샎샏샐샑샒샓샔샕샖샗샘샙샚샛샜생샞샟 -
C0E0 샠샡샢샣샤샥샦샧샨샩샪샫샬샭샮샯샰샱샲샳샴샵샶샷샸샹샺샻샼샽샾샿 -
C100 섀섁섂섃섄섅섆섇섈섉섊섋섌섍섎섏섐섑섒섓섔섕섖섗섘섙섚섛서석섞섟 -
C120 선섡섢섣설섥섦섧섨섩섪섫섬섭섮섯섰성섲섳섴섵섶섷세섹섺섻센섽섾섿 -
C140 셀셁셂셃셄셅셆셇셈셉셊셋셌셍셎셏셐셑셒셓셔셕셖셗션셙셚셛셜셝셞셟 -
C160 셠셡셢셣셤셥셦셧셨셩셪셫셬셭셮셯셰셱셲셳셴셵셶셷셸셹셺셻셼셽셾셿 -
C180 솀솁솂솃솄솅솆솇솈솉솊솋소속솎솏손솑솒솓솔솕솖솗솘솙솚솛솜솝솞솟 -
C1A0 솠송솢솣솤솥솦솧솨솩솪솫솬솭솮솯솰솱솲솳솴솵솶솷솸솹솺솻솼솽솾솿 -
C1C0 쇀쇁쇂쇃쇄쇅쇆쇇쇈쇉쇊쇋쇌쇍쇎쇏쇐쇑쇒쇓쇔쇕쇖쇗쇘쇙쇚쇛쇜쇝쇞쇟 -
C1E0 쇠쇡쇢쇣쇤쇥쇦쇧쇨쇩쇪쇫쇬쇭쇮쇯쇰쇱쇲쇳쇴쇵쇶쇷쇸쇹쇺쇻쇼쇽쇾쇿 -
C200 숀숁숂숃숄숅숆숇숈숉숊숋숌숍숎숏숐숑숒숓숔숕숖숗수숙숚숛순숝숞숟 -
C220 술숡숢숣숤숥숦숧숨숩숪숫숬숭숮숯숰숱숲숳숴숵숶숷숸숹숺숻숼숽숾숿 -
C240 쉀쉁쉂쉃쉄쉅쉆쉇쉈쉉쉊쉋쉌쉍쉎쉏쉐쉑쉒쉓쉔쉕쉖쉗쉘쉙쉚쉛쉜쉝쉞쉟 -
C260 쉠쉡쉢쉣쉤쉥쉦쉧쉨쉩쉪쉫쉬쉭쉮쉯쉰쉱쉲쉳쉴쉵쉶쉷쉸쉹쉺쉻쉼쉽쉾쉿 -
C280 슀슁슂슃슄슅슆슇슈슉슊슋슌슍슎슏슐슑슒슓슔슕슖슗슘슙슚슛슜슝슞슟 -
C2A0 슠슡슢슣스슥슦슧슨슩슪슫슬슭슮슯슰슱슲슳슴습슶슷슸승슺슻슼슽슾슿 -
C2C0 싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛시식싞싟 -
C2E0 신싡싢싣실싥싦싧싨싩싪싫심십싮싯싰싱싲싳싴싵싶싷싸싹싺싻싼싽싾싿 -
C300 쌀쌁쌂쌃쌄쌅쌆쌇쌈쌉쌊쌋쌌쌍쌎쌏쌐쌑쌒쌓쌔쌕쌖쌗쌘쌙쌚쌛쌜쌝쌞쌟 -
C320 쌠쌡쌢쌣쌤쌥쌦쌧쌨쌩쌪쌫쌬쌭쌮쌯쌰쌱쌲쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿 -
C340 썀썁썂썃썄썅썆썇썈썉썊썋썌썍썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟 -
C360 썠썡썢썣썤썥썦썧써썩썪썫썬썭썮썯썰썱썲썳썴썵썶썷썸썹썺썻썼썽썾썿 -
C380 쎀쎁쎂쎃쎄쎅쎆쎇쎈쎉쎊쎋쎌쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟 -
C3A0 쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿 -
C3C0 쏀쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏘쏙쏚쏛쏜쏝쏞쏟 -
C3E0 쏠쏡쏢쏣쏤쏥쏦쏧쏨쏩쏪쏫쏬쏭쏮쏯쏰쏱쏲쏳쏴쏵쏶쏷쏸쏹쏺쏻쏼쏽쏾쏿 -
C400 쐀쐁쐂쐃쐄쐅쐆쐇쐈쐉쐊쐋쐌쐍쐎쐏쐐쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚쐛쐜쐝쐞쐟 -
C420 쐠쐡쐢쐣쐤쐥쐦쐧쐨쐩쐪쐫쐬쐭쐮쐯쐰쐱쐲쐳쐴쐵쐶쐷쐸쐹쐺쐻쐼쐽쐾쐿 -
C440 쑀쑁쑂쑃쑄쑅쑆쑇쑈쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟 -
C460 쑠쑡쑢쑣쑤쑥쑦쑧쑨쑩쑪쑫쑬쑭쑮쑯쑰쑱쑲쑳쑴쑵쑶쑷쑸쑹쑺쑻쑼쑽쑾쑿 -
C480 쒀쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒔쒕쒖쒗쒘쒙쒚쒛쒜쒝쒞쒟 -
C4A0 쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒸쒹쒺쒻쒼쒽쒾쒿 -
C4C0 쓀쓁쓂쓃쓄쓅쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟 -
C4E0 쓠쓡쓢쓣쓤쓥쓦쓧쓨쓩쓪쓫쓬쓭쓮쓯쓰쓱쓲쓳쓴쓵쓶쓷쓸쓹쓺쓻쓼쓽쓾쓿 -
C500 씀씁씂씃씄씅씆씇씈씉씊씋씌씍씎씏씐씑씒씓씔씕씖씗씘씙씚씛씜씝씞씟 -
C520 씠씡씢씣씤씥씦씧씨씩씪씫씬씭씮씯씰씱씲씳씴씵씶씷씸씹씺씻씼씽씾씿 -
C540 앀앁앂앃아악앆앇안앉않앋알앍앎앏앐앑앒앓암압앖앗았앙앚앛앜앝앞앟 -
C560 애액앢앣앤앥앦앧앨앩앪앫앬앭앮앯앰앱앲앳앴앵앶앷앸앹앺앻야약앾앿 -
C580 얀얁얂얃얄얅얆얇얈얉얊얋얌얍얎얏얐양얒얓얔얕얖얗얘얙얚얛얜얝얞얟 -
C5A0 얠얡얢얣얤얥얦얧얨얩얪얫얬얭얮얯얰얱얲얳어억얶얷언얹얺얻얼얽얾얿 -
C5C0 엀엁엂엃엄업없엇었엉엊엋엌엍엎엏에엑엒엓엔엕엖엗엘엙엚엛엜엝엞엟 -
C5E0 엠엡엢엣엤엥엦엧엨엩엪엫여역엮엯연엱엲엳열엵엶엷엸엹엺엻염엽엾엿 -
C600 였영옂옃옄옅옆옇예옉옊옋옌옍옎옏옐옑옒옓옔옕옖옗옘옙옚옛옜옝옞옟 -
C620 옠옡옢옣오옥옦옧온옩옪옫올옭옮옯옰옱옲옳옴옵옶옷옸옹옺옻옼옽옾옿 -
C640 와왁왂왃완왅왆왇왈왉왊왋왌왍왎왏왐왑왒왓왔왕왖왗왘왙왚왛왜왝왞왟 -
C660 왠왡왢왣왤왥왦왧왨왩왪왫왬왭왮왯왰왱왲왳왴왵왶왷외왹왺왻왼왽왾왿 -
C680 욀욁욂욃욄욅욆욇욈욉욊욋욌욍욎욏욐욑욒욓요욕욖욗욘욙욚욛욜욝욞욟 -
C6A0 욠욡욢욣욤욥욦욧욨용욪욫욬욭욮욯우욱욲욳운욵욶욷울욹욺욻욼욽욾욿 -
C6C0 움웁웂웃웄웅웆웇웈웉웊웋워웍웎웏원웑웒웓월웕웖웗웘웙웚웛웜웝웞웟 -
C6E0 웠웡웢웣웤웥웦웧웨웩웪웫웬웭웮웯웰웱웲웳웴웵웶웷웸웹웺웻웼웽웾웿 -
C700 윀윁윂윃위윅윆윇윈윉윊윋윌윍윎윏윐윑윒윓윔윕윖윗윘윙윚윛윜윝윞윟 -
C720 유육윢윣윤윥윦윧율윩윪윫윬윭윮윯윰윱윲윳윴융윶윷윸윹윺윻으윽윾윿 -
C740 은읁읂읃을읅읆읇읈읉읊읋음읍읎읏읐응읒읓읔읕읖읗의읙읚읛읜읝읞읟 -
C760 읠읡읢읣읤읥읦읧읨읩읪읫읬읭읮읯읰읱읲읳이익읶읷인읹읺읻일읽읾읿 -
C780 잀잁잂잃임입잆잇있잉잊잋잌잍잎잏자작잒잓잔잕잖잗잘잙잚잛잜잝잞잟 -
C7A0 잠잡잢잣잤장잦잧잨잩잪잫재잭잮잯잰잱잲잳잴잵잶잷잸잹잺잻잼잽잾잿 -
C7C0 쟀쟁쟂쟃쟄쟅쟆쟇쟈쟉쟊쟋쟌쟍쟎쟏쟐쟑쟒쟓쟔쟕쟖쟗쟘쟙쟚쟛쟜쟝쟞쟟 -
C7E0 쟠쟡쟢쟣쟤쟥쟦쟧쟨쟩쟪쟫쟬쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺쟻쟼쟽쟾쟿 -
C800 저적젂젃전젅젆젇절젉젊젋젌젍젎젏점접젒젓젔정젖젗젘젙젚젛제젝젞젟 -
C820 젠젡젢젣젤젥젦젧젨젩젪젫젬젭젮젯젰젱젲젳젴젵젶젷져젹젺젻젼젽젾젿 -
C840 졀졁졂졃졄졅졆졇졈졉졊졋졌졍졎졏졐졑졒졓졔졕졖졗졘졙졚졛졜졝졞졟 -
C860 졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯조족졲졳존졵졶졷졸졹졺졻졼졽졾졿 -
C880 좀좁좂좃좄종좆좇좈좉좊좋좌좍좎좏좐좑좒좓좔좕좖좗좘좙좚좛좜좝좞좟 -
C8A0 좠좡좢좣좤좥좦좧좨좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좼좽좾좿 -
C8C0 죀죁죂죃죄죅죆죇죈죉죊죋죌죍죎죏죐죑죒죓죔죕죖죗죘죙죚죛죜죝죞죟 -
C8E0 죠죡죢죣죤죥죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죵죶죷죸죹죺죻주죽죾죿 -
C900 준줁줂줃줄줅줆줇줈줉줊줋줌줍줎줏줐중줒줓줔줕줖줗줘줙줚줛줜줝줞줟 -
C920 줠줡줢줣줤줥줦줧줨줩줪줫줬줭줮줯줰줱줲줳줴줵줶줷줸줹줺줻줼줽줾줿 -
C940 쥀쥁쥂쥃쥄쥅쥆쥇쥈쥉쥊쥋쥌쥍쥎쥏쥐쥑쥒쥓쥔쥕쥖쥗쥘쥙쥚쥛쥜쥝쥞쥟 -
C960 쥠쥡쥢쥣쥤쥥쥦쥧쥨쥩쥪쥫쥬쥭쥮쥯쥰쥱쥲쥳쥴쥵쥶쥷쥸쥹쥺쥻쥼쥽쥾쥿 -
C980 즀즁즂즃즄즅즆즇즈즉즊즋즌즍즎즏즐즑즒즓즔즕즖즗즘즙즚즛즜증즞즟 -
C9A0 즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿 -
C9C0 지직짂짃진짅짆짇질짉짊짋짌짍짎짏짐집짒짓짔징짖짗짘짙짚짛짜짝짞짟 -
C9E0 짠짡짢짣짤짥짦짧짨짩짪짫짬짭짮짯짰짱짲짳짴짵짶짷째짹짺짻짼짽짾짿 -
CA00 쨀쨁쨂쨃쨄쨅쨆쨇쨈쨉쨊쨋쨌쨍쨎쨏쨐쨑쨒쨓쨔쨕쨖쨗쨘쨙쨚쨛쨜쨝쨞쨟 -
CA20 쨠쨡쨢쨣쨤쨥쨦쨧쨨쨩쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿 -
CA40 쩀쩁쩂쩃쩄쩅쩆쩇쩈쩉쩊쩋쩌쩍쩎쩏쩐쩑쩒쩓쩔쩕쩖쩗쩘쩙쩚쩛쩜쩝쩞쩟 -
CA60 쩠쩡쩢쩣쩤쩥쩦쩧쩨쩩쩪쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩽쩾쩿 -
CA80 쪀쪁쪂쪃쪄쪅쪆쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪘쪙쪚쪛쪜쪝쪞쪟 -
CAA0 쪠쪡쪢쪣쪤쪥쪦쪧쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪼쪽쪾쪿 -
CAC0 쫀쫁쫂쫃쫄쫅쫆쫇쫈쫉쫊쫋쫌쫍쫎쫏쫐쫑쫒쫓쫔쫕쫖쫗쫘쫙쫚쫛쫜쫝쫞쫟 -
CAE0 쫠쫡쫢쫣쫤쫥쫦쫧쫨쫩쫪쫫쫬쫭쫮쫯쫰쫱쫲쫳쫴쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿 -
CB00 쬀쬁쬂쬃쬄쬅쬆쬇쬈쬉쬊쬋쬌쬍쬎쬏쬐쬑쬒쬓쬔쬕쬖쬗쬘쬙쬚쬛쬜쬝쬞쬟 -
CB20 쬠쬡쬢쬣쬤쬥쬦쬧쬨쬩쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿 -
CB40 쭀쭁쭂쭃쭄쭅쭆쭇쭈쭉쭊쭋쭌쭍쭎쭏쭐쭑쭒쭓쭔쭕쭖쭗쭘쭙쭚쭛쭜쭝쭞쭟 -
CB60 쭠쭡쭢쭣쭤쭥쭦쭧쭨쭩쭪쭫쭬쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭸쭹쭺쭻쭼쭽쭾쭿 -
CB80 쮀쮁쮂쮃쮄쮅쮆쮇쮈쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮜쮝쮞쮟 -
CBA0 쮠쮡쮢쮣쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮸쮹쮺쮻쮼쮽쮾쮿 -
CBC0 쯀쯁쯂쯃쯄쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯔쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟 -
CBE0 쯠쯡쯢쯣쯤쯥쯦쯧쯨쯩쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼쯽쯾쯿 -
CC00 찀찁찂찃찄찅찆찇찈찉찊찋찌찍찎찏찐찑찒찓찔찕찖찗찘찙찚찛찜찝찞찟 -
CC20 찠찡찢찣찤찥찦찧차착찪찫찬찭찮찯찰찱찲찳찴찵찶찷참찹찺찻찼창찾찿 -
CC40 챀챁챂챃채책챆챇챈챉챊챋챌챍챎챏챐챑챒챓챔챕챖챗챘챙챚챛챜챝챞챟 -
CC60 챠챡챢챣챤챥챦챧챨챩챪챫챬챭챮챯챰챱챲챳챴챵챶챷챸챹챺챻챼챽챾챿 -
CC80 첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓첔첕첖첗처척첚첛천첝첞첟 -
CCA0 철첡첢첣첤첥첦첧첨첩첪첫첬청첮첯첰첱첲첳체첵첶첷첸첹첺첻첼첽첾첿 -
CCC0 쳀쳁쳂쳃쳄쳅쳆쳇쳈쳉쳊쳋쳌쳍쳎쳏쳐쳑쳒쳓쳔쳕쳖쳗쳘쳙쳚쳛쳜쳝쳞쳟 -
CCE0 쳠쳡쳢쳣쳤쳥쳦쳧쳨쳩쳪쳫쳬쳭쳮쳯쳰쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽쳾쳿 -
CD00 촀촁촂촃촄촅촆촇초촉촊촋촌촍촎촏촐촑촒촓촔촕촖촗촘촙촚촛촜총촞촟 -
CD20 촠촡촢촣촤촥촦촧촨촩촪촫촬촭촮촯촰촱촲촳촴촵촶촷촸촹촺촻촼촽촾촿 -
CD40 쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛최쵝쵞쵟 -
CD60 쵠쵡쵢쵣쵤쵥쵦쵧쵨쵩쵪쵫쵬쵭쵮쵯쵰쵱쵲쵳쵴쵵쵶쵷쵸쵹쵺쵻쵼쵽쵾쵿 -
CD80 춀춁춂춃춄춅춆춇춈춉춊춋춌춍춎춏춐춑춒춓추축춖춗춘춙춚춛출춝춞춟 -
CDA0 춠춡춢춣춤춥춦춧춨충춪춫춬춭춮춯춰춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿 -
CDC0 췀췁췂췃췄췅췆췇췈췉췊췋췌췍췎췏췐췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟 -
CDE0 췠췡췢췣췤췥췦췧취췩췪췫췬췭췮췯췰췱췲췳췴췵췶췷췸췹췺췻췼췽췾췿 -
CE00 츀츁츂츃츄츅츆츇츈츉츊츋츌츍츎츏츐츑츒츓츔츕츖츗츘츙츚츛츜츝츞츟 -
CE20 츠측츢츣츤츥츦츧츨츩츪츫츬츭츮츯츰츱츲츳츴층츶츷츸츹츺츻츼츽츾츿 -
CE40 칀칁칂칃칄칅칆칇칈칉칊칋칌칍칎칏칐칑칒칓칔칕칖칗치칙칚칛친칝칞칟 -
CE60 칠칡칢칣칤칥칦칧침칩칪칫칬칭칮칯칰칱칲칳카칵칶칷칸칹칺칻칼칽칾칿 -
CE80 캀캁캂캃캄캅캆캇캈캉캊캋캌캍캎캏캐캑캒캓캔캕캖캗캘캙캚캛캜캝캞캟 -
CEA0 캠캡캢캣캤캥캦캧캨캩캪캫캬캭캮캯캰캱캲캳캴캵캶캷캸캹캺캻캼캽캾캿 -
CEC0 컀컁컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕컖컗컘컙컚컛컜컝컞컟 -
CEE0 컠컡컢컣커컥컦컧컨컩컪컫컬컭컮컯컰컱컲컳컴컵컶컷컸컹컺컻컼컽컾컿 -
CF00 케켁켂켃켄켅켆켇켈켉켊켋켌켍켎켏켐켑켒켓켔켕켖켗켘켙켚켛켜켝켞켟 -
CF20 켠켡켢켣켤켥켦켧켨켩켪켫켬켭켮켯켰켱켲켳켴켵켶켷켸켹켺켻켼켽켾켿 -
CF40 콀콁콂콃콄콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓코콕콖콗콘콙콚콛콜콝콞콟 -
CF60 콠콡콢콣콤콥콦콧콨콩콪콫콬콭콮콯콰콱콲콳콴콵콶콷콸콹콺콻콼콽콾콿 -
CF80 쾀쾁쾂쾃쾄쾅쾆쾇쾈쾉쾊쾋쾌쾍쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟 -
CFA0 쾠쾡쾢쾣쾤쾥쾦쾧쾨쾩쾪쾫쾬쾭쾮쾯쾰쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿 -
CFC0 쿀쿁쿂쿃쿄쿅쿆쿇쿈쿉쿊쿋쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟 -
CFE0 쿠쿡쿢쿣쿤쿥쿦쿧쿨쿩쿪쿫쿬쿭쿮쿯쿰쿱쿲쿳쿴쿵쿶쿷쿸쿹쿺쿻쿼쿽쿾쿿 -
D000 퀀퀁퀂퀃퀄퀅퀆퀇퀈퀉퀊퀋퀌퀍퀎퀏퀐퀑퀒퀓퀔퀕퀖퀗퀘퀙퀚퀛퀜퀝퀞퀟 -
D020 퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬퀭퀮퀯퀰퀱퀲퀳퀴퀵퀶퀷퀸퀹퀺퀻퀼퀽퀾퀿 -
D040 큀큁큂큃큄큅큆큇큈큉큊큋큌큍큎큏큐큑큒큓큔큕큖큗큘큙큚큛큜큝큞큟 -
D060 큠큡큢큣큤큥큦큧큨큩큪큫크큭큮큯큰큱큲큳클큵큶큷큸큹큺큻큼큽큾큿 -
D080 킀킁킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔킕킖킗킘킙킚킛킜킝킞킟 -
D0A0 킠킡킢킣키킥킦킧킨킩킪킫킬킭킮킯킰킱킲킳킴킵킶킷킸킹킺킻킼킽킾킿 -
D0C0 타탁탂탃탄탅탆탇탈탉탊탋탌탍탎탏탐탑탒탓탔탕탖탗탘탙탚탛태택탞탟 -
D0E0 탠탡탢탣탤탥탦탧탨탩탪탫탬탭탮탯탰탱탲탳탴탵탶탷탸탹탺탻탼탽탾탿 -
D100 턀턁턂턃턄턅턆턇턈턉턊턋턌턍턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟 -
D120 턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯터턱턲턳턴턵턶턷털턹턺턻턼턽턾턿 -
D140 텀텁텂텃텄텅텆텇텈텉텊텋테텍텎텏텐텑텒텓텔텕텖텗텘텙텚텛템텝텞텟 -
D160 텠텡텢텣텤텥텦텧텨텩텪텫텬텭텮텯텰텱텲텳텴텵텶텷텸텹텺텻텼텽텾텿 -
D180 톀톁톂톃톄톅톆톇톈톉톊톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟 -
D1A0 토톡톢톣톤톥톦톧톨톩톪톫톬톭톮톯톰톱톲톳톴통톶톷톸톹톺톻톼톽톾톿 -
D1C0 퇀퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏퇐퇑퇒퇓퇔퇕퇖퇗퇘퇙퇚퇛퇜퇝퇞퇟 -
D1E0 퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪퇫퇬퇭퇮퇯퇰퇱퇲퇳퇴퇵퇶퇷퇸퇹퇺퇻퇼퇽퇾퇿 -
D200 툀툁툂툃툄툅툆툇툈툉툊툋툌툍툎툏툐툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟 -
D220 툠툡툢툣툤툥툦툧툨툩툪툫투툭툮툯툰툱툲툳툴툵툶툷툸툹툺툻툼툽툾툿 -
D240 퉀퉁퉂퉃퉄퉅퉆퉇퉈퉉퉊퉋퉌퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉜퉝퉞퉟 -
D260 퉠퉡퉢퉣퉤퉥퉦퉧퉨퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿 -
D280 튀튁튂튃튄튅튆튇튈튉튊튋튌튍튎튏튐튑튒튓튔튕튖튗튘튙튚튛튜튝튞튟 -
D2A0 튠튡튢튣튤튥튦튧튨튩튪튫튬튭튮튯튰튱튲튳튴튵튶튷트특튺튻튼튽튾튿 -
D2C0 틀틁틂틃틄틅틆틇틈틉틊틋틌틍틎틏틐틑틒틓틔틕틖틗틘틙틚틛틜틝틞틟 -
D2E0 틠틡틢틣틤틥틦틧틨틩틪틫틬틭틮틯티틱틲틳틴틵틶틷틸틹틺틻틼틽틾틿 -
D300 팀팁팂팃팄팅팆팇팈팉팊팋파팍팎팏판팑팒팓팔팕팖팗팘팙팚팛팜팝팞팟 -
D320 팠팡팢팣팤팥팦팧패팩팪팫팬팭팮팯팰팱팲팳팴팵팶팷팸팹팺팻팼팽팾팿 -
D340 퍀퍁퍂퍃퍄퍅퍆퍇퍈퍉퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟 -
D360 퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍼퍽퍾퍿 -
D380 펀펁펂펃펄펅펆펇펈펉펊펋펌펍펎펏펐펑펒펓펔펕펖펗페펙펚펛펜펝펞펟 -
D3A0 펠펡펢펣펤펥펦펧펨펩펪펫펬펭펮펯펰펱펲펳펴펵펶펷편펹펺펻펼펽펾펿 -
D3C0 폀폁폂폃폄폅폆폇폈평폊폋폌폍폎폏폐폑폒폓폔폕폖폗폘폙폚폛폜폝폞폟 -
D3E0 폠폡폢폣폤폥폦폧폨폩폪폫포폭폮폯폰폱폲폳폴폵폶폷폸폹폺폻폼폽폾폿 -
D400 퐀퐁퐂퐃퐄퐅퐆퐇퐈퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖퐗퐘퐙퐚퐛퐜퐝퐞퐟 -
D420 퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷퐸퐹퐺퐻퐼퐽퐾퐿 -
D440 푀푁푂푃푄푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓푔푕푖푗푘푙푚푛표푝푞푟 -
D460 푠푡푢푣푤푥푦푧푨푩푪푫푬푭푮푯푰푱푲푳푴푵푶푷푸푹푺푻푼푽푾푿 -
D480 풀풁풂풃풄풅풆풇품풉풊풋풌풍풎풏풐풑풒풓풔풕풖풗풘풙풚풛풜풝풞풟 -
D4A0 풠풡풢풣풤풥풦풧풨풩풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸풹풺풻풼풽풾풿 -
D4C0 퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓌퓍퓎퓏퓐퓑퓒퓓퓔퓕퓖퓗퓘퓙퓚퓛퓜퓝퓞퓟 -
D4E0 퓠퓡퓢퓣퓤퓥퓦퓧퓨퓩퓪퓫퓬퓭퓮퓯퓰퓱퓲퓳퓴퓵퓶퓷퓸퓹퓺퓻퓼퓽퓾퓿 -
D500 픀픁픂픃프픅픆픇픈픉픊픋플픍픎픏픐픑픒픓픔픕픖픗픘픙픚픛픜픝픞픟 -
D520 픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷픸픹픺픻피픽픾픿 -
D540 핀핁핂핃필핅핆핇핈핉핊핋핌핍핎핏핐핑핒핓핔핕핖핗하학핚핛한핝핞핟 -
D560 할핡핢핣핤핥핦핧함합핪핫핬항핮핯핰핱핲핳해핵핶핷핸핹핺핻핼핽핾핿 -
D580 햀햁햂햃햄햅햆햇했행햊햋햌햍햎햏햐햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟 -
D5A0 햠햡햢햣햤향햦햧햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿 -
D5C0 헀헁헂헃헄헅헆헇허헉헊헋헌헍헎헏헐헑헒헓헔헕헖헗험헙헚헛헜헝헞헟 -
D5E0 헠헡헢헣헤헥헦헧헨헩헪헫헬헭헮헯헰헱헲헳헴헵헶헷헸헹헺헻헼헽헾헿 -
D600 혀혁혂혃현혅혆혇혈혉혊혋혌혍혎혏혐협혒혓혔형혖혗혘혙혚혛혜혝혞혟 -
D620 혠혡혢혣혤혥혦혧혨혩혪혫혬혭혮혯혰혱혲혳혴혵혶혷호혹혺혻혼혽혾혿 -
D640 홀홁홂홃홄홅홆홇홈홉홊홋홌홍홎홏홐홑홒홓화확홖홗환홙홚홛활홝홞홟 -
D660 홠홡홢홣홤홥홦홧홨황홪홫홬홭홮홯홰홱홲홳홴홵홶홷홸홹홺홻홼홽홾홿 -
D680 횀횁횂횃횄횅횆횇횈횉횊횋회획횎횏횐횑횒횓횔횕횖횗횘횙횚횛횜횝횞횟 -
D6A0 횠횡횢횣횤횥횦횧효횩횪횫횬횭횮횯횰횱횲횳횴횵횶횷횸횹횺횻횼횽횾횿 -
D6C0 훀훁훂훃후훅훆훇훈훉훊훋훌훍훎훏훐훑훒훓훔훕훖훗훘훙훚훛훜훝훞훟 -
D6E0 훠훡훢훣훤훥훦훧훨훩훪훫훬훭훮훯훰훱훲훳훴훵훶훷훸훹훺훻훼훽훾훿 -
D700 휀휁휂휃휄휅휆휇휈휉휊휋휌휍휎휏휐휑휒휓휔휕휖휗휘휙휚휛휜휝휞휟 -
D720 휠휡휢휣휤휥휦휧휨휩휪휫휬휭휮휯휰휱휲휳휴휵휶휷휸휹휺휻휼휽휾휿 -
D740 흀흁흂흃흄흅흆흇흈흉흊흋흌흍흎흏흐흑흒흓흔흕흖흗흘흙흚흛흜흝흞흟 -
D760 흠흡흢흣흤흥흦흧흨흩흪흫희흭흮흯흰흱흲흳흴흵흶흷흸흹흺흻흼흽흾흿 -
D780 힀힁힂힃힄힅힆힇히힉힊힋힌힍힎힏힐힑힒힓힔힕힖힗힘힙힚힛힜힝힞힟 -
D7A0 힠힡힢힣ힰힱힲힳힴힵힶힷힸힹힺힻힼힽힾힿ -
D7C0 ퟀퟁퟂퟃퟄퟅퟆퟋퟌퟍퟎퟏퟐퟑퟒퟓퟔퟕퟖퟗퟘퟙퟚퟛퟜퟝퟞퟟ -
D7E0 ퟠퟡퟢퟣퟤퟥퟦퟧퟨퟩퟪퟫퟬퟭퟮퟯퟰퟱퟲퟳퟴퟵퟶퟷퟸퟹퟺퟻ -
D800 -
D820 -
D840 -
D860 -
D880 -
D8A0 -
D8C0 -
D8E0 -
D900 -
D920 -
D940 -br />D960 -
D980 -
D9A0 -
D9C0 -
D9E0 -
DA00 -
DA20 -
DA40 -
DA60 -
DA80 -
DAA0 -
DAC0 -
DAE0 -
DB00 -
DB20 -
DB40 -
DB60 -
DB80 -
DBA0 -
DBC0 -
DBE0 -
DC00 -
DC20 -
DC40 -
DC60 -
DC80 -
DCA0 -
DCC0 -
DCE0 -
DD00 -
DD20 -
DD40 -
DD60 -
DD80 -
DDA0 -
DDC0 -
DDE0 -
DE00 -
DE20 -
DE40 -
DE60 -
DE80 -
DEA0 -
DEC0 -
DEE0 -
DF00 -
DF20 -
DF40 -
DF60 -
DF80 -
DFA0 -
DFC0 -
DFE0 -
E000 -
E020 -
E040 -
E060 -
E080 -
E0A0 -
E0C0 -
E0E0 -
E100 -
E120 -
E140 -
E160 -
E180 -
E1A0 -
E1C0 -
E1E0 -
E200 -
E220 -
E240 -
E260 -
E280 -
E2A0 -
E2C0 -
E2E0 -
E300 -
E320 -
E340 -
E360 -
E380 -
E3A0 -
E3C0 -
E3E0 -
E400 -
E420 -
E440 -
E460 -
E480 -
E4A0 -
E4C0 -
E4E0 -
E500 -
E520 -
E540 -
E560 -
E580 -
E5A0 -
E5C0 -
E5E0 -
E600 -
E620 -
E640 -
E660 -
E680 -
E6A0 -
E6C0 -
E6E0 -
E700 -
E720 -
E740 -
E760 -
E780 -
E7A0 -
E7C0 -
E7E0 -
E800 -
E820 -
E840 -
E860 -
E880 -
E8A0 -
E8C0 -
E8E0 -
E900 -
E920 -
E940 -
E960 -
E980 -
E9A0 -
E9C0 -
E9E0 -
EA00 -
EA20 -
EA40 -
EA60 -
EA80 -
EAA0 -
EAC0 -
EAE0 -
EB00 -
EB20 -
EB40 -
EB60 -
EB80 -
EBA0 -
EBC0 -
EBE0 -
EC00 -
EC20 -
EC40 -
EC60 -
EC80 -
ECA0 -
ECC0 -
ECE0 -
ED00 -
ED20 -
ED40 -
ED60 -
ED80 -
EDA0 -
EDC0 -
EDE0 -
EE00 -
EE20 -
EE40 -
EE60 -
EE80 -
EEA0 -
EEC0 -
EEE0 -
EF00 -
EF20 -
EF40 -
EF60 -
EF80 -
EFA0 -
EFC0 -
EFE0 -
F000 -
F020 -
F040 -
F060 -
F080 -
F0A0 -
F0C0 -
F0E0 -
F100 -
F120 -
F140 -
F160 -
F180 -
F1A0 -
F1C0 -
F1E0 -
F200 -
F220 -
F240 -
F260 -
F280 -
F2A0 -
F2C0 -
F2E0 -
F300 -
F320 -
F340 -
F360 -
F380 -
F3A0 -
F3C0 -
F3E0 -
F400 -
F420 -
F440 -
F460 -
F480 -
F4A0 -
F4C0 -
F4E0 -
F500 -
F520 -
F540 -
F560 -
F580 -
F5A0 -
F5C0 -
F5E0 -
F600 -
F620 -
F640 -
F660 -
F680 -
F6A0 -
F6C0 -
F6E0 -
F700 -
F720 -
F740 -
F760 -
F780 -
F7A0 -
F7C0 -
F7E0 -
F800 -
F820 -
F840 -
F860 -
F880 -
F8A0 -
F8C0 -
F8E0 -
F900 豈更車賈滑串句龜龜契金喇奈懶癩羅蘿螺裸邏樂洛烙珞落酪駱亂卵欄爛蘭 -
F920 鸞嵐濫藍襤拉臘蠟廊朗浪狼郎來冷勞擄櫓爐盧老蘆虜路露魯鷺碌祿綠菉錄 -
F940 鹿論壟弄籠聾牢磊賂雷壘屢樓淚漏累縷陋勒肋凜凌稜綾菱陵讀拏樂諾丹寧 -
F960 怒率異北磻便復不泌數索參塞省葉說殺辰沈拾若掠略亮兩凉梁糧良諒量勵 -
F980 呂女廬旅濾礪閭驪麗黎力曆歷轢年憐戀撚漣煉璉秊練聯輦蓮連鍊列劣咽烈 -
F9A0 裂說廉念捻殮簾獵令囹寧嶺怜玲瑩羚聆鈴零靈領例禮醴隸惡了僚寮尿料樂 -
F9C0 燎療蓼遼龍暈阮劉杻柳流溜琉留硫紐類六戮陸倫崙淪輪律慄栗率隆利吏履 -
F9E0 易李梨泥理痢罹裏裡里離匿溺吝燐璘藺隣鱗麟林淋臨立笠粒狀炙識什茶刺 -
FA00 切度拓糖宅洞暴輻行降見廓兀嗀﨎﨏塚﨑晴﨓﨔凞猪益礼神祥福靖精羽﨟 -
FA20 蘒﨡諸﨣﨤逸都﨧﨨﨩飯飼館鶴郞隷侮僧免勉勤卑喝嘆器塀墨層屮悔慨憎 -
FA40 懲敏既暑梅海渚漢煮爫琢碑社祉祈祐祖祝禍禎穀突節練縉繁署者臭艹艹著 -
FA60 褐視謁謹賓贈辶逸難響頻恵𤋮舘並况全侀充冀勇勺喝啕喙嗢塚墳奄奔 -
FA80 婢嬨廒廙彩徭惘慎愈憎慠懲戴揄搜摒敖晴朗望杖歹殺流滛滋漢瀞煮瞧爵犯 -
FAA0 猪瑱甆画瘝瘟益盛直睊着磌窱節类絛練缾者荒華蝹襁覆視調諸請謁諾諭謹 -
FAC0 變贈輸遲醙鉶陼難靖韛響頋頻鬒龜𢡊𢡄𣏕㮝䀘䀹𥉉𥳐𧻓齃龎 -
FAE0 -
FB00 fffiflffifflſtstﬓﬔﬕﬖﬗיִﬞײַ -
FB20 ﬠﬡﬢﬣﬤﬥﬦﬧﬨ﬩שׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּ -
FB40 נּסּףּפּצּקּרּשּתּוֹבֿכֿפֿﭏﭐﭑﭒﭓﭔﭕﭖﭗﭘﭙﭚﭛﭜﭝﭞﭟ -
FB60 ﭠﭡﭢﭣﭤﭥﭦﭧﭨﭩﭪﭫﭬﭭﭮﭯﭰﭱﭲﭳﭴﭵﭶﭷﭸﭹﭺﭻﭼﭽﭾﭿ -
FB80 ﮀﮁﮂﮃﮄﮅﮆﮇﮈﮉﮊﮋﮌﮍﮎﮏﮐﮑﮒﮓﮔﮕﮖﮗﮘﮙﮚﮛﮜﮝﮞﮟ -
FBA0 ﮠﮡﮢﮣﮤﮥﮦﮧﮨﮩﮪﮫﮬﮭﮮﮯﮰﮱ﮲﮳﮴﮵﮶﮷﮸﮹﮺﮻﮼﮽﮾﮿ -
FBC0 ﯀﯁﯂ﯓﯔﯕﯖﯗﯘﯙﯚﯛﯜﯝﯞﯟ -
FBE0 ﯠﯡﯢﯣﯤﯥﯦﯧﯨﯩﯪﯫﯬﯭﯮﯯﯰﯱﯲﯳﯴﯵﯶﯷﯸﯹﯺﯻﯼﯽﯾﯿ -
FC00 ﰀﰁﰂﰃﰄﰅﰆﰇﰈﰉﰊﰋﰌﰍﰎﰏﰐﰑﰒﰓﰔﰕﰖﰗﰘﰙﰚﰛﰜﰝﰞﰟ -
FC20 ﰠﰡﰢﰣﰤﰥﰦﰧﰨﰩﰪﰫﰬﰭﰮﰯﰰﰱﰲﰳﰴﰵﰶﰷﰸﰹﰺﰻﰼﰽﰾﰿ -
FC40 ﱀﱁﱂﱃﱄﱅﱆﱇﱈﱉﱊﱋﱌﱍﱎﱏﱐﱑﱒﱓﱔﱕﱖﱗﱘﱙﱚﱛﱜﱝﱞﱟ -
FC60 ﱠﱡﱢﱣﱤﱥﱦﱧﱨﱩﱪﱫﱬﱭﱮﱯﱰﱱﱲﱳﱴﱵﱶﱷﱸﱹﱺﱻﱼﱽﱾﱿ -
FC80 ﲀﲁﲂﲃﲄﲅﲆﲇﲈﲉﲊﲋﲌﲍﲎﲏﲐﲑﲒﲓﲔﲕﲖﲗﲘﲙﲚﲛﲜﲝﲞﲟ -
FCA0 ﲠﲡﲢﲣﲤﲥﲦﲧﲨﲩﲪﲫﲬﲭﲮﲯﲰﲱﲲﲳﲴﲵﲶﲷﲸﲹﲺﲻﲼﲽﲾﲿ -
FCC0 ﳀﳁﳂﳃﳄﳅﳆﳇﳈﳉﳊﳋﳌﳍﳎﳏﳐﳑﳒﳓﳔﳕﳖﳗﳘﳙﳚﳛﳜﳝﳞﳟ -
FCE0 ﳠﳡﳢﳣﳤﳥﳦﳧﳨﳩﳪﳫﳬﳭﳮﳯﳰﳱﳲﳳﳴﳵﳶﳷﳸﳹﳺﳻﳼﳽﳾﳿ -
FD00 ﴀﴁﴂﴃﴄﴅﴆﴇﴈﴉﴊﴋﴌﴍﴎﴏﴐﴑﴒﴓﴔﴕﴖﴗﴘﴙﴚﴛﴜﴝﴞﴟ -
FD20 ﴠﴡﴢﴣﴤﴥﴦﴧﴨﴩﴪﴫﴬﴭﴮﴯﴰﴱﴲﴳﴴﴵﴶﴷﴸﴹﴺﴻﴼﴽ﴾﴿ -
FD40 ﵀﵁﵂﵃﵄﵅﵆﵇﵈﵉﵊﵋﵌﵍﵎﵏ﵐﵑﵒﵓﵔﵕﵖﵗﵘﵙﵚﵛﵜﵝﵞﵟ -
FD60 ﵠﵡﵢﵣﵤﵥﵦﵧﵨﵩﵪﵫﵬﵭﵮﵯﵰﵱﵲﵳﵴﵵﵶﵷﵸﵹﵺﵻﵼﵽﵾﵿ -
FD80 ﶀﶁﶂﶃﶄﶅﶆﶇﶈﶉﶊﶋﶌﶍﶎﶏﶒﶓﶔﶕﶖﶗﶘﶙﶚﶛﶜﶝﶞﶟ -
FDA0 ﶠﶡﶢﶣﶤﶥﶦﶧﶨﶩﶪﶫﶬﶭﶮﶯﶰﶱﶲﶳﶴﶵﶶﶷﶸﶹﶺﶻﶼﶽﶾﶿ -
FDC0 ﷀﷁﷂﷃﷄﷅﷆﷇ﷏ -
FDE0 ﷰﷱﷲﷳﷴﷵﷶﷷﷸﷹﷺﷻ﷼﷽﷾﷿ -
FE00 ︀︁︂︃︄︅︆︇︈︉︊︋︌︍︎️︐︑︒︓︔︕︖︗︘︙ -
FE20 ︧︨︩︪︫︬︭︠︡︢︣︤︥︦︮︯︰︱︲︳︴︵︶︷︸︹︺︻︼︽︾︿ -
FE40 ﹀﹁﹂﹃﹄﹅﹆﹇﹈﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹘﹙﹚﹛﹜﹝﹞﹟ -
FE60 ﹠﹡﹢﹣﹤﹥﹦﹨﹩﹪﹫ﹰﹱﹲﹳﹴﹶﹷﹸﹹﹺﹻﹼﹽﹾﹿ -
FE80 ﺀﺁﺂﺃﺄﺅﺆﺇﺈﺉﺊﺋﺌﺍﺎﺏﺐﺑﺒﺓﺔﺕﺖﺗﺘﺙﺚﺛﺜﺝﺞﺟ -
FEA0 ﺠﺡﺢﺣﺤﺥﺦﺧﺨﺩﺪﺫﺬﺭﺮﺯﺰﺱﺲﺳﺴﺵﺶﺷﺸﺹﺺﺻﺼﺽﺾﺿ -
FEC0 ﻀﻁﻂﻃﻄﻅﻆﻇﻈﻉﻊﻋﻌﻍﻎﻏﻐﻑﻒﻓﻔﻕﻖﻗﻘﻙﻚﻛﻜﻝﻞﻟ -
FEE0 ﻠﻡﻢﻣﻤﻥﻦﻧﻨﻩﻪﻫﻬﻭﻮﻯﻰﻱﻲﻳﻴﻵﻶﻷﻸﻹﻺﻻﻼ -
FF00 !"#$%&'()*+,-./0123456789:;<=>? -
FF20 @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ -
FF40 `abcdefghijklmnopqrstuvwxyz{|}~⦅ -
FF60 ⦆。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソ -
FF80 タチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ -
FFA0 ᅠᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒ -
FFC0 ᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ -
FFE0 ¢£¬ ̄¦¥₩│←↑→↓■○� - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/encoding_utf-8_w3.html b/vendor/dompdf/dompdf/www/test/encoding_utf-8_w3.html deleted file mode 100644 index 568e6bc35..000000000 --- a/vendor/dompdf/dompdf/www/test/encoding_utf-8_w3.html +++ /dev/null @@ -1,220 +0,0 @@ - - - -UTF-8 test file - - - -Original by Markus Kuhn, adapted for HTML by Martin Dürst.
--UTF-8 encoded sample plain-text file -‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ - -Markus Kuhn [ˈmaʳkʊs kuːn] <mkuhn@acm.org> — 1999-08-20 - - -The ASCII compatible UTF-8 encoding of ISO 10646 and Unicode -plain-text files is defined in RFC 2279 and in ISO 10646-1 Annex R. - - -Using Unicode/UTF-8, you can write in emails and source code things such as - -Mathematics and Sciences: - - ∮ E⋅da = Q, n → ∞, ∑ f(i) = ∏ g(i), ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β), - - ℕ ⊆ ℕ₀ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ, ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (A ⇔ B), - - 2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm - -Linguistics and dictionaries: - - ði ıntəˈnæʃənəl fəˈnɛtık əsoʊsiˈeıʃn - Y [ˈʏpsilɔn], Yen [jɛn], Yoga [ˈjoːgɑ] - -APL: - - ((V⍳V)=⍳⍴V)/V←,V ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈ - -Nicer typography in plain text files: - - ╔══════════════════════════════════════════╗ - ║ ║ - ║ • ‘single’ and “double” quotes ║ - ║ ║ - ║ • Curly apostrophes: “We’ve been here” ║ - ║ ║ - ║ • Latin-1 apostrophe and accents: '´` ║ - ║ ║ - ║ • ‚deutsche‘ „Anführungszeichen“ ║ - ║ ║ - ║ • †, ‡, ‰, •, 3–4, —, −5/+5, ™, … ║ - ║ ║ - ║ • ASCII safety test: 1lI|, 0OD, 8B ║ - ║ ╭─────────╮ ║ - ║ • the euro symbol: │ 14.95 € │ ║ - ║ ╰─────────╯ ║ - ╚══════════════════════════════════════════╝ - -Greek (in Polytonic): - - The Greek anthem: - - Σὲ γνωρίζω ἀπὸ τὴν κόψη - τοῦ σπαθιοῦ τὴν τρομερή, - σὲ γνωρίζω ἀπὸ τὴν ὄψη - ποὺ μὲ βία μετράει τὴ γῆ. - - ᾿Απ᾿ τὰ κόκκαλα βγαλμένη - τῶν ῾Ελλήνων τὰ ἱερά - καὶ σὰν πρῶτα ἀνδρειωμένη - χαῖρε, ὦ χαῖρε, ᾿Ελευθεριά! - - From a speech of Demosthenes in the 4th century BC: - - Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι, - ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς - λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ - τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿ - εἰς τοῦτο προήκοντα, ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ - πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν - οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι, - οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν - ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον - τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι - γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν - προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους - σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ - τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ - τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς - τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον. - - Δημοσθένους, Γ´ ᾿Ολυνθιακὸς - -Georgian: - - From a Unicode conference invitation: - - გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო - კონფერენციაზე დასასწრებად, რომელიც გაიმართება 10-12 მარტს, - ქ. მაინცში, გერმანიაში. კონფერენცია შეჰკრებს ერთად მსოფლიოს - ექსპერტებს ისეთ დარგებში როგორიცაა ინტერნეტი და Unicode-ი, - ინტერნაციონალიზაცია და ლოკალიზაცია, Unicode-ის გამოყენება - ოპერაციულ სისტემებსა, და გამოყენებით პროგრამებში, შრიფტებში, - ტექსტების დამუშავებასა და მრავალენოვან კომპიუტერულ სისტემებში. - -Russian: - - From a Unicode conference invitation: - - Зарегистрируйтесь сейчас на Десятую Международную Конференцию по - Unicode, которая состоится 10-12 марта 1997 года в Майнце в Германии. - Конференция соберет широкий круг экспертов по вопросам глобального - Интернета и Unicode, локализации и интернационализации, воплощению и - применению Unicode в различных операционных системах и программных - приложениях, шрифтах, верстке и многоязычных компьютерных системах. - -Thai (UCS Level 2): - - Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese - classic 'San Gua'): - - [----------------------------|------------------------] - ๏ แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช พระปกเกศกองบู๊กู้ขึ้นใหม่ - สิบสองกษัตริย์ก่อนหน้าแลถัดไป สององค์ไซร้โง่เขลาเบาปัญญา - ทรงนับถือขันทีเป็นที่พึ่ง บ้านเมืองจึงวิปริตเป็นนักหนา - โฮจิ๋นเรียกทัพทั่วหัวเมืองมา หมายจะฆ่ามดชั่วตัวสำคัญ - เหมือนขับไสไล่เสือจากเคหา รับหมาป่าเข้ามาเลยอาสัญ - ฝ่ายอ้องอุ้นยุแยกให้แตกกัน ใช้สาวนั้นเป็นชนวนชื่นชวนใจ - พลันลิฉุยกุยกีกลับก่อเหตุ ช่างอาเพศจริงหนาฟ้าร้องไห้ - ต้องรบราฆ่าฟันจนบรรลัย ฤๅหาใครค้ำชูกู้บรรลังก์ ฯ - - (The above is a two-column text. If combining characters are handled - correctly, the lines of the second column should be aligned with the - | character above.) - -Ethiopian: - - Proverbs in the Amharic language: - - ሰማይ አይታረስ ንጉሥ አይከሰስ። - ብላ ካለኝ እንደአባቴ በቆመጠኝ። - ጌጥ ያለቤቱ ቁምጥና ነው። - ደሀ በሕልሙ ቅቤ ባይጠጣ ንጣት በገደለው። - የአፍ ወለምታ በቅቤ አይታሽም። - አይጥ በበላ ዳዋ ተመታ። - ሲተረጉሙ ይደረግሙ። - ቀስ በቀስ፥ ዕንቁላል በእግሩ ይሄዳል። - ድር ቢያብር አንበሳ ያስር። - ሰው እንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርም። - እግዜር የከፈተውን ጉሮሮ ሳይዘጋው አይድርም። - የጎረቤት ሌባ፥ ቢያዩት ይስቅ ባያዩት ያጠልቅ። - ሥራ ከመፍታት ልጄን ላፋታት። - ዓባይ ማደሪያ የለው፥ ግንድ ይዞ ይዞራል። - የእስላም አገሩ መካ የአሞራ አገሩ ዋርካ። - ተንጋሎ ቢተፉ ተመልሶ ባፉ። - ወዳጅህ ማር ቢሆን ጨርስህ አትላሰው። - እግርህን በፍራሽህ ልክ ዘርጋ። - -Runes: - - ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ - - (Old English, which transcribed into Latin reads 'He cwaeth that he - bude thaem lande northweardum with tha Westsae.' and means 'He said - that he lived in the northern land near the Western Sea.') - -Braille: - - ⡌⠁⠧⠑ ⠼⠁⠒ ⡍⠜⠇⠑⠹⠰⠎ ⡣⠕⠌ - - ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠙⠑⠁⠙⠒ ⠞⠕ ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ ⠊⠎ ⠝⠕ ⠙⠳⠃⠞ - ⠱⠁⠞⠑⠧⠻ ⠁⠃⠳⠞ ⠹⠁⠞⠲ ⡹⠑ ⠗⠑⠛⠊⠌⠻ ⠕⠋ ⠙⠊⠎ ⠃⠥⠗⠊⠁⠇ ⠺⠁⠎ - ⠎⠊⠛⠝⠫ ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹⠍⠁⠝⠂ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ ⠥⠝⠙⠻⠞⠁⠅⠻⠂ - ⠁⠝⠙ ⠹⠑ ⠡⠊⠑⠋ ⠍⠳⠗⠝⠻⠲ ⡎⠊⠗⠕⠕⠛⠑ ⠎⠊⠛⠝⠫ ⠊⠞⠲ ⡁⠝⠙ - ⡎⠊⠗⠕⠕⠛⠑⠰⠎ ⠝⠁⠍⠑ ⠺⠁⠎ ⠛⠕⠕⠙ ⠥⠏⠕⠝ ⠰⡡⠁⠝⠛⠑⠂ ⠋⠕⠗ ⠁⠝⠹⠹⠔⠛ ⠙⠑ - ⠡⠕⠎⠑ ⠞⠕ ⠏⠥⠞ ⠙⠊⠎ ⠙⠁⠝⠙ ⠞⠕⠲ - - ⡕⠇⠙ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ - - ⡍⠔⠙⠖ ⡊ ⠙⠕⠝⠰⠞ ⠍⠑⠁⠝ ⠞⠕ ⠎⠁⠹ ⠹⠁⠞ ⡊ ⠅⠝⠪⠂ ⠕⠋ ⠍⠹ - ⠪⠝ ⠅⠝⠪⠇⠫⠛⠑⠂ ⠱⠁⠞ ⠹⠻⠑ ⠊⠎ ⠏⠜⠞⠊⠊⠥⠇⠜⠇⠹ ⠙⠑⠁⠙ ⠁⠃⠳⠞ - ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ ⡊ ⠍⠊⠣⠞ ⠙⠁⠧⠑ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ ⠍⠹⠎⠑⠇⠋⠂ ⠞⠕ - ⠗⠑⠛⠜⠙ ⠁ ⠊⠕⠋⠋⠔⠤⠝⠁⠊⠇ ⠁⠎ ⠹⠑ ⠙⠑⠁⠙⠑⠌ ⠏⠊⠑⠊⠑ ⠕⠋ ⠊⠗⠕⠝⠍⠕⠝⠛⠻⠹ - ⠔ ⠹⠑ ⠞⠗⠁⠙⠑⠲ ⡃⠥⠞ ⠹⠑ ⠺⠊⠎⠙⠕⠍ ⠕⠋ ⠳⠗ ⠁⠝⠊⠑⠌⠕⠗⠎ - ⠊⠎ ⠔ ⠹⠑ ⠎⠊⠍⠊⠇⠑⠆ ⠁⠝⠙ ⠍⠹ ⠥⠝⠙⠁⠇⠇⠪⠫ ⠙⠁⠝⠙⠎ - ⠩⠁⠇⠇ ⠝⠕⠞ ⠙⠊⠌⠥⠗⠃ ⠊⠞⠂ ⠕⠗ ⠹⠑ ⡊⠳⠝⠞⠗⠹⠰⠎ ⠙⠕⠝⠑ ⠋⠕⠗⠲ ⡹⠳ - ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ ⠏⠻⠍⠊⠞ ⠍⠑ ⠞⠕ ⠗⠑⠏⠑⠁⠞⠂ ⠑⠍⠏⠙⠁⠞⠊⠊⠁⠇⠇⠹⠂ ⠹⠁⠞ - ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ - - (The first couple of paragraphs of "A Christmas Carol" by Dickens) - -Compact font selection example text: - - ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789 - abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ - –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд - ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა - -Greetings in various languages: - - Hello world, Καλημέρα κόσμε, コンニチハ - -Box drawing alignment tests: █ - ▉ - ╔══╦══╗ ┌──┬──┐ ╭──┬──╮ ╭──┬──╮ ┏━━┳━━┓ ┎┒┏┑ ╷ ╻ ┏┯┓ ┌┰┐ ▊ ╱╲╱╲╳╳╳ - ║┌─╨─┐║ │╔═╧═╗│ │╒═╪═╕│ │╓─╁─╖│ ┃┌─╂─┐┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ ┝╋┥ ▋ ╲╱╲╱╳╳╳ - ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╿ │┃ ┍╅╆┓ ╵ ╹ ┗┷┛ └┸┘ ▌ ╱╲╱╲╳╳╳ - ╠╡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳ - ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▎ - ║└─╥─┘║ │╚═╤═╝│ │╘═╪═╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▏ - ╚══╩══╝ └──┴──┘ ╰──┴──╯ ╰──┴──╯ ┗━━┻━━┛ └╌╌┘ ╎ ┗╍╍┛ ┋ ▁▂▃▄▅▆▇█ - -- - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/image_background.html b/vendor/dompdf/dompdf/www/test/image_background.html deleted file mode 100644 index a3b2e3fd8..000000000 --- a/vendor/dompdf/dompdf/www/test/image_background.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - Images with background-color, background-image, border, margin and padding --
-
-
- -
Lorem ipsum dolor sit amet
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at -odio vitae libero tempus convallis. Cum sociis natoque penatibus et -magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus -mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel, -adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus -facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis -turpis vel magna. Cras eu est. Integer porttitor ligula a -tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis -leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque.
- -Curabitur ut diam eu dui vestibulum pharetra. Nam pellentesque, justo -non hendrerit venenatis, mi orci pretium mi, et vehicula leo arcu quis -diam. Nullam mattis laoreet quam. Morbi mollis sem ut tellus. Nam mi -massa, lobortis eu, sollicitudin et, iaculis et, massa. Maecenas purus -mauris, luctus sit amet, pharetra in, facilisis sit amet, elit. Nullam -vel erat tempus purus molestie suscipit. Vestibulum odio lorem, -sollicitudin non, volutpat sit amet, tincidunt vel, nunc. Nulla quis -ante vestibulum odio feugiat facilisis. Proin lorem nisl, viverra at, -rhoncus quis, semper nec, mi. Donec euismod enim vitae velit. Nulla -sed lectus. Vivamus placerat, lacus sed vehicula sagittis, arcu massa -adipiscing lorem, bibendum luctus nisl tortor vitae leo.
- -Etiam a mauris. Proin justo elit, accumsan sit amet, tempus et, -blandit id, tellus. Morbi varius, nisi id iaculis aliquam, lacus -ligula facilisis velit, ac pharetra ipsum augue a massa. Etiam rhoncus -commodo orci. Mauris ullamcorper sagittis turpis. Nullam magna libero, -sagittis sed, auctor faucibus, accumsan vitae, urna. Pellentesque -volutpat. Aliquam sapien ipsum, eleifend nec, imperdiet vitae, -consectetuer id, quam. Donec a urna. Suspendisse sit amet -velit. Curabitur quis nisi id dui viverra ornare. Sed condimentum enim -quis tortor. Ut condimentum, magna non tempus tincidunt, leo nibh -molestie tellus, vitae convallis dolor ante sed ante. Nunc et -metus. Phasellus ultricies. Fusce faucibus tortor sit amet mauris.
- -Aliquam enim. Duis et diam. Praesent porta, mauris quis pellentesque -volutpat, erat elit vulputate eros, vitae pulvinar augue velit sit -amet sem. Fusce eu urna eu nisi condimentum posuere. Vivamus sed -felis. Duis eget urna vitae eros interdum dignissim. Proin justo eros, -eleifend in, porttitor in, malesuada non, neque. Etiam sed -augue. Nulla sit amet magna. Lorem ipsum dolor sit amet, consectetuer -adipiscing elit. Mauris facilisis. Curabitur massa magna, pulvinar a, -nonummy eget, egestas vitae, mauris. Quisque vel elit sit amet lorem -malesuada facilisis. Vestibulum porta, metus sit amet egestas -interdum, urna justo euismod erat, id tristique urna leo quis -nibh. Morbi non erat.
- -Cras fringilla, nulla id egestas elementum, augue nunc iaculis nibh, -ac adipiscing nibh justo id tortor. Donec vel orci a nisi ultricies -aliquet. Nunc urna quam, adipiscing molestie, vehicula non, -condimentum non, magna. Integer magna. Donec quam metus, pulvinar id, -suscipit eget, euismod ac, orci. Nulla facilisi. Nullam nec -mauris. Morbi in mi. Etiam urna lectus, pulvinar ac, sollicitudin eu, -euismod ac, lectus. Fusce elit. Sed ultricies odio ac felis.
- - - diff --git a/vendor/dompdf/dompdf/www/test/image_basic.html b/vendor/dompdf/dompdf/www/test/image_basic.html deleted file mode 100644 index 30b071b9c..000000000 --- a/vendor/dompdf/dompdf/www/test/image_basic.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - --- - diff --git a/vendor/dompdf/dompdf/www/test/image_bmp.html b/vendor/dompdf/dompdf/www/test/image_bmp.html deleted file mode 100644 index 349674091..000000000 --- a/vendor/dompdf/dompdf/www/test/image_bmp.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - --
-The PHP 5 HTML to PDF converter -BMP image test suite - - - - - -- This test suite was grabbed from http://wvnvaxa.wvnet.edu/vmswww/bmp.html. -
- --
- -- -- BMP -PNG -- -1 bit (2 color) -- - - -4 bit -- - - -8 bit -- - - -16 bit -- - - -24 bit -- - - -32 bit -- - - - -4 bit compressed -- - - - - -8 bit compressed -- - - -16 bit 555 bitfield -- - - -16 bit 565 bitfield -- - - -32 bit 888 bitfield -- - - -32 bit 888 bitfield version 4 -- - - -32 bit version 5 -- - - -32 bit transparent version 4 -- - -Note that as of December 2005, Mozilla and Internet Explorer -do not support transparent BMP images. -
- --The images (except for the last three and the OS/2 version 2 image) -are from Jason Summer's BMP Suite. -
- - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/image_datauri.html b/vendor/dompdf/dompdf/www/test/image_datauri.html deleted file mode 100644 index 513c4e1db..000000000 --- a/vendor/dompdf/dompdf/www/test/image_datauri.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -- Embedded <img> :
- -
--
- Normal <img> :
- -
--
- Embedded background image -
- -- Normal background image -
- - - - diff --git a/vendor/dompdf/dompdf/www/test/image_dimensions.html b/vendor/dompdf/dompdf/www/test/image_dimensions.html deleted file mode 100644 index 83a9f307f..000000000 --- a/vendor/dompdf/dompdf/www/test/image_dimensions.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - -All these images should be nearly of the same size
- -width=150 -
--
- -width: 40mm -
--
- -width: 4cm -
--
- -width: 21% -
--
- -width: 150px -
--
- -width: 110pt -
--
- - diff --git a/vendor/dompdf/dompdf/www/test/image_gif.html b/vendor/dompdf/dompdf/www/test/image_gif.html deleted file mode 100644 index 52845b7a8..000000000 --- a/vendor/dompdf/dompdf/www/test/image_gif.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - -- diff --git a/vendor/dompdf/dompdf/www/test/image_remote.html b/vendor/dompdf/dompdf/www/test/image_remote.html deleted file mode 100644 index 106d13854..000000000 --- a/vendor/dompdf/dompdf/www/test/image_remote.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - -
-- - diff --git a/vendor/dompdf/dompdf/www/test/image_transparent_gif.html b/vendor/dompdf/dompdf/www/test/image_transparent_gif.html deleted file mode 100644 index 145d687b4..000000000 --- a/vendor/dompdf/dompdf/www/test/image_transparent_gif.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - -Remote CSS & Image Test
-Note: DOMPDF_ENABLE_REMOTE must be enabled for this test to work.
- -CSS: https://github.com/dompdf/dompdf/raw/master/www/style.css
-- Remote image with extension:
-
--
- Remote image without extension:
-
--
- Remote image with unknown extension:
-
--
- Remote image with unknown extension and params:
-
--
- Remote image with unknown extension and advanced params:
-
--
-- --
-- - diff --git a/vendor/dompdf/dompdf/www/test/image_transparent_png.html b/vendor/dompdf/dompdf/www/test/image_transparent_png.html deleted file mode 100644 index 686f5548f..000000000 --- a/vendor/dompdf/dompdf/www/test/image_transparent_png.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - --
PNG transparency test - - - - - -PNG transparency test
- -Examples from http://entropymine.com/jason/testbed/pngtrans/ - --Not all possible results are shown; there are too many combinations -of background colors and shapes of the opaque region. However, I -intend to include every result that actually occurs in a mainstream -browser. If I am missing any, please -let me know. - -
It's come to my attention that my images which show how -alpha transparency should look are not quite perfect -in regard to precisely how transparent they are at various points. -Rather than try to modify this page to test gamma -correction issues as well, I've created a -separate test page for that. - -
-This test page was constructed by -Jason Summers. -Comments may be emailed to jason1@pobox.com.
- -
-There are -other test -pages listed at the PNG web site. - - - - - -Alpha and palette transparency
- -Expected result:
- -
--
(T1) 8-bit palette, includes background color:
- -
--
(T2) 8-bit palette, no background color:
- -
--
(T3) 32-bit RGBA, includes background color:
- -
--
(T4) 32-bit RGBA, no background color:
- -
--
(T5) 64-bit RGBA, includes background color:
- -
--
(T6) 64-bit RGBA, no background color:
- -
--
RGB binary transparency
- -Expected result:
- -
--
(T7) 24-bit RGB, binary transparency, includes background color:
- -
--
(T8) 24-bit RGB, binary transparency, no background color:
- -
--
(T9) 48-bit RGB, binary transparency, includes background color:
- -
--
(T10) 48-bit RGB, binary transparency, no background color:
- - -
--
Grayscale alpha transparency
- -Expected result:
- -
--
(G1) 16 bpp grayscale (8 gray + 8 alpha), includes background color:
- -
--
(G2) 16 bpp grayscale (8 gray + 8 alpha), no background color:
- -
--
(G3) 32 bpp grayscale (16 gray + 16 alpha), includes background color:
- -
--
(G4) 32 bpp grayscale (16 gray + 16 alpha), no background color:
-- - -
Grayscale binary transparency
- -Expected result:
- -
--
(G5) 8 bpp grayscale (8 gray), includes background color:
- -
--
(G6) 8 bpp grayscale (8 gray), no background color:
- -
--
(G7) 16 bpp grayscale (16 gray), includes background color:
- -
--
(G8) 16 bpp grayscale (16 gray), no background color:
-- -
Miscellaneous
- -(M1) 8-bit palette, no transparency, includes background color:
- -
-Expected result:
-
--
(M2) (4-bit) palette, binary transparency only, no background color:
- - \ No newline at end of file diff --git a/vendor/dompdf/dompdf/www/test/image_variants.html b/vendor/dompdf/dompdf/www/test/image_variants.html deleted file mode 100644 index e91d42dc4..000000000 --- a/vendor/dompdf/dompdf/www/test/image_variants.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - -
-Expected result:
-
-
-(This tests a few things that may have slipped through the cracks.) -- -- - diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test1.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test1.bmp deleted file mode 100644 index a72034764..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test1.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test1.png b/vendor/dompdf/dompdf/www/test/images/bmp/test1.png deleted file mode 100644 index 3cdc49815..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test1.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test16.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test16.bmp deleted file mode 100644 index a5a3195cc..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test16.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test16.png b/vendor/dompdf/dompdf/www/test/images/bmp/test16.png deleted file mode 100644 index 32a1cb30e..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test16.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test16bf555.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test16bf555.bmp deleted file mode 100644 index 639a57f87..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test16bf555.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test16bf555.png b/vendor/dompdf/dompdf/www/test/images/bmp/test16bf555.png deleted file mode 100644 index 32a1cb30e..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test16bf555.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test16bf565.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test16bf565.bmp deleted file mode 100644 index cb0ea24f5..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test16bf565.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test16bf565.png b/vendor/dompdf/dompdf/www/test/images/bmp/test16bf565.png deleted file mode 100644 index 622379071..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test16bf565.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test24.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test24.bmp deleted file mode 100644 index d6d9e6afa..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test24.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test24.png b/vendor/dompdf/dompdf/www/test/images/bmp/test24.png deleted file mode 100644 index 46211a8ca..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test24.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test32.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test32.bmp deleted file mode 100644 index 9524f765b..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test32.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test32.png b/vendor/dompdf/dompdf/www/test/images/bmp/test32.png deleted file mode 100644 index 46211a8ca..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test32.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test32bf.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test32bf.bmp deleted file mode 100644 index 0f41534e1..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test32bf.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test32bf.png b/vendor/dompdf/dompdf/www/test/images/bmp/test32bf.png deleted file mode 100644 index 46211a8ca..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test32bf.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test32bfv4.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test32bfv4.bmp deleted file mode 100644 index 37060373e..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test32bfv4.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test32bfv4.png b/vendor/dompdf/dompdf/www/test/images/bmp/test32bfv4.png deleted file mode 100644 index 0525bc743..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test32bfv4.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test32v5.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test32v5.bmp deleted file mode 100644 index 8ad3cfa60..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test32v5.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test32v5.png b/vendor/dompdf/dompdf/www/test/images/bmp/test32v5.png deleted file mode 100644 index 659164e8e..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test32v5.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test4.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test4.bmp deleted file mode 100644 index a064f66a7..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test4.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test4.png b/vendor/dompdf/dompdf/www/test/images/bmp/test4.png deleted file mode 100644 index 29f1c3431..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test4.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test4os2v2.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test4os2v2.bmp deleted file mode 100644 index 874a277fb..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test4os2v2.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test4os2v2.png b/vendor/dompdf/dompdf/www/test/images/bmp/test4os2v2.png deleted file mode 100644 index a939a515a..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test4os2v2.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test8.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test8.bmp deleted file mode 100644 index 3be9a2066..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test8.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test8.png b/vendor/dompdf/dompdf/www/test/images/bmp/test8.png deleted file mode 100644 index 478703138..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test8.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test8os2.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/test8os2.bmp deleted file mode 100644 index f7f9f5795..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test8os2.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/test8os2.png b/vendor/dompdf/dompdf/www/test/images/bmp/test8os2.png deleted file mode 100644 index 478703138..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/test8os2.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/testcompress4.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/testcompress4.bmp deleted file mode 100644 index 7239fa668..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/testcompress4.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/testcompress4.png b/vendor/dompdf/dompdf/www/test/images/bmp/testcompress4.png deleted file mode 100644 index 29f1c3431..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/testcompress4.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/testcompress8.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/testcompress8.bmp deleted file mode 100644 index 082f7f481..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/testcompress8.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/testcompress8.png b/vendor/dompdf/dompdf/www/test/images/bmp/testcompress8.png deleted file mode 100644 index 478703138..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/testcompress8.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/trans.bmp b/vendor/dompdf/dompdf/www/test/images/bmp/trans.bmp deleted file mode 100644 index edd5ed812..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/trans.bmp and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/bmp/trans.png b/vendor/dompdf/dompdf/www/test/images/bmp/trans.png deleted file mode 100644 index 653d44af5..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/bmp/trans.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/cmyk_test2.jpg b/vendor/dompdf/dompdf/www/test/images/cmyk_test2.jpg deleted file mode 100644 index 9b9822951..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/cmyk_test2.jpg and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/dokuwiki-128.png b/vendor/dompdf/dompdf/www/test/images/dokuwiki-128.png deleted file mode 100644 index b2306ac95..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/dokuwiki-128.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/dompdf_simple.png b/vendor/dompdf/dompdf/www/test/images/dompdf_simple.png deleted file mode 100644 index fd3265e54..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/dompdf_simple.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/goldengate.jpg b/vendor/dompdf/dompdf/www/test/images/goldengate.jpg deleted file mode 100644 index 42802744d..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/goldengate.jpg and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/green.gif b/vendor/dompdf/dompdf/www/test/images/green.gif deleted file mode 100644 index 151a83c07..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/green.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/grid-36.gif b/vendor/dompdf/dompdf/www/test/images/grid-36.gif deleted file mode 100644 index 4bf1e2cfd..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/grid-36.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/html.png b/vendor/dompdf/dompdf/www/test/images/html.png deleted file mode 100644 index 672cbce42..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/html.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/no_extension b/vendor/dompdf/dompdf/www/test/images/no_extension deleted file mode 100644 index fd3265e54..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/no_extension and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/pdf.png b/vendor/dompdf/dompdf/www/test/images/pdf.png deleted file mode 100644 index 638066dea..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/pdf.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/php.gif b/vendor/dompdf/dompdf/www/test/images/php.gif deleted file mode 100644 index f352c7308..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/php.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png.png b/vendor/dompdf/dompdf/www/test/images/png.png deleted file mode 100644 index f0b5b00ee..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/gray16a.png b/vendor/dompdf/dompdf/www/test/images/png/gray16a.png deleted file mode 100644 index 946006b12..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/gray16a.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/gray16a_bk.png b/vendor/dompdf/dompdf/www/test/images/png/gray16a_bk.png deleted file mode 100644 index afbb9c86c..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/gray16a_bk.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/gray16b.png b/vendor/dompdf/dompdf/www/test/images/png/gray16b.png deleted file mode 100644 index 46aca9ce8..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/gray16b.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/gray16b_bk.png b/vendor/dompdf/dompdf/www/test/images/png/gray16b_bk.png deleted file mode 100644 index 67977083c..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/gray16b_bk.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/gray8a.png b/vendor/dompdf/dompdf/www/test/images/png/gray8a.png deleted file mode 100644 index df7cefcdd..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/gray8a.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/gray8a_bk.png b/vendor/dompdf/dompdf/www/test/images/png/gray8a_bk.png deleted file mode 100644 index fcb8483a4..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/gray8a_bk.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/gray8b.png b/vendor/dompdf/dompdf/www/test/images/png/gray8b.png deleted file mode 100644 index 9ad1ab257..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/gray8b.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/gray8b_bk.png b/vendor/dompdf/dompdf/www/test/images/png/gray8b_bk.png deleted file mode 100644 index ca246e81d..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/gray8b_bk.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/pal.png b/vendor/dompdf/dompdf/www/test/images/png/pal.png deleted file mode 100644 index 7fec549c9..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/pal.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/pal_bk.png b/vendor/dompdf/dompdf/www/test/images/png/pal_bk.png deleted file mode 100644 index 1923b0381..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/pal_bk.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/pal_bk_notrns.png b/vendor/dompdf/dompdf/www/test/images/png/pal_bk_notrns.png deleted file mode 100644 index b89efae6b..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/pal_bk_notrns.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/palb.png b/vendor/dompdf/dompdf/www/test/images/png/palb.png deleted file mode 100644 index 65a8351c3..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/palb.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_16ns.gif b/vendor/dompdf/dompdf/www/test/images/png/result_16ns.gif deleted file mode 100644 index 55c4a396b..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_16ns.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_1trns.gif b/vendor/dompdf/dompdf/www/test/images/png/result_1trns.gif deleted file mode 100644 index 8a9813092..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_1trns.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_bla.gif b/vendor/dompdf/dompdf/www/test/images/png/result_bla.gif deleted file mode 100644 index c29b13f52..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_bla.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_dith.gif b/vendor/dompdf/dompdf/www/test/images/png/result_dith.gif deleted file mode 100644 index b76f48475..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_dith.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_gra.gif b/vendor/dompdf/dompdf/www/test/images/png/result_gra.gif deleted file mode 100644 index fb348ff9f..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_gra.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_mag.gif b/vendor/dompdf/dompdf/www/test/images/png/result_mag.gif deleted file mode 100644 index fa72b5275..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_mag.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_magthr1.gif b/vendor/dompdf/dompdf/www/test/images/png/result_magthr1.gif deleted file mode 100644 index 478250fd4..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_magthr1.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_no.gif b/vendor/dompdf/dompdf/www/test/images/png/result_no.gif deleted file mode 100644 index e64739a4d..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_no.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_nsbug.gif b/vendor/dompdf/dompdf/www/test/images/png/result_nsbug.gif deleted file mode 100644 index 52a87b3fb..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_nsbug.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_ok.gif b/vendor/dompdf/dompdf/www/test/images/png/result_ok.gif deleted file mode 100644 index f86998839..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_ok.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_oprbug.gif b/vendor/dompdf/dompdf/www/test/images/png/result_oprbug.gif deleted file mode 100644 index 5fac687a4..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_oprbug.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_thr1.gif b/vendor/dompdf/dompdf/www/test/images/png/result_thr1.gif deleted file mode 100644 index 66ee0f62a..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_thr1.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_thr128.gif b/vendor/dompdf/dompdf/www/test/images/png/result_thr128.gif deleted file mode 100644 index 998fb74e2..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_thr128.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_thr255.gif b/vendor/dompdf/dompdf/www/test/images/png/result_thr255.gif deleted file mode 100644 index a7b719ce5..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_thr255.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_whi.gif b/vendor/dompdf/dompdf/www/test/images/png/result_whi.gif deleted file mode 100644 index 74ddabc0c..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_whi.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_yel.gif b/vendor/dompdf/dompdf/www/test/images/png/result_yel.gif deleted file mode 100644 index 681d0883d..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_yel.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/result_yelthr1.gif b/vendor/dompdf/dompdf/www/test/images/png/result_yelthr1.gif deleted file mode 100644 index 6049157b0..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/result_yelthr1.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultb_bla.gif b/vendor/dompdf/dompdf/www/test/images/png/resultb_bla.gif deleted file mode 100644 index bcbd4d96c..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultb_bla.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultb_bug.gif b/vendor/dompdf/dompdf/www/test/images/png/resultb_bug.gif deleted file mode 100644 index 3789f2b02..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultb_bug.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultb_mag.gif b/vendor/dompdf/dompdf/www/test/images/png/resultb_mag.gif deleted file mode 100644 index f051aa46d..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultb_mag.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultb_moz2.gif b/vendor/dompdf/dompdf/www/test/images/png/resultb_moz2.gif deleted file mode 100644 index 312f73457..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultb_moz2.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultb_no.gif b/vendor/dompdf/dompdf/www/test/images/png/resultb_no.gif deleted file mode 100644 index 9cb7801e9..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultb_no.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultb_ok.gif b/vendor/dompdf/dompdf/www/test/images/png/resultb_ok.gif deleted file mode 100644 index 239812559..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultb_ok.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultb_whi.gif b/vendor/dompdf/dompdf/www/test/images/png/resultb_whi.gif deleted file mode 100644 index a21af08bc..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultb_whi.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultb_yel.gif b/vendor/dompdf/dompdf/www/test/images/png/resultb_yel.gif deleted file mode 100644 index 969db3d18..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultb_yel.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultg_bla.gif b/vendor/dompdf/dompdf/www/test/images/png/resultg_bla.gif deleted file mode 100644 index c4ecc4e05..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultg_bla.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultg_dgr.gif b/vendor/dompdf/dompdf/www/test/images/png/resultg_dgr.gif deleted file mode 100644 index 17fbb6c82..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultg_dgr.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultg_lgr.gif b/vendor/dompdf/dompdf/www/test/images/png/resultg_lgr.gif deleted file mode 100644 index 68914a2fb..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultg_lgr.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultg_no.gif b/vendor/dompdf/dompdf/www/test/images/png/resultg_no.gif deleted file mode 100644 index 3e3619a01..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultg_no.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultga.gif b/vendor/dompdf/dompdf/www/test/images/png/resultga.gif deleted file mode 100644 index 33ce2f883..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultga.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultgb.gif b/vendor/dompdf/dompdf/www/test/images/png/resultgb.gif deleted file mode 100644 index 76ecb5458..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultgb.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultgb_dgr.gif b/vendor/dompdf/dompdf/www/test/images/png/resultgb_dgr.gif deleted file mode 100644 index 06413c538..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultgb_dgr.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultgb_no.gif b/vendor/dompdf/dompdf/www/test/images/png/resultgb_no.gif deleted file mode 100644 index a2453e424..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultgb_no.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/resultpb_no.gif b/vendor/dompdf/dompdf/www/test/images/png/resultpb_no.gif deleted file mode 100644 index 72e61f8c6..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/resultpb_no.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/rgb16_t.png b/vendor/dompdf/dompdf/www/test/images/png/rgb16_t.png deleted file mode 100644 index 37682e9b3..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/rgb16_t.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/rgb16_t_bk.png b/vendor/dompdf/dompdf/www/test/images/png/rgb16_t_bk.png deleted file mode 100644 index 0505b2f6f..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/rgb16_t_bk.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/rgb8_t.png b/vendor/dompdf/dompdf/www/test/images/png/rgb8_t.png deleted file mode 100644 index 3fd10c858..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/rgb8_t.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/rgb8_t_bk.png b/vendor/dompdf/dompdf/www/test/images/png/rgb8_t_bk.png deleted file mode 100644 index 89ce912b1..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/rgb8_t_bk.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/rgba16.png b/vendor/dompdf/dompdf/www/test/images/png/rgba16.png deleted file mode 100644 index 8a10587c5..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/rgba16.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/rgba16_bk.png b/vendor/dompdf/dompdf/www/test/images/png/rgba16_bk.png deleted file mode 100644 index 05a6db1e2..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/rgba16_bk.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/rgba8.png b/vendor/dompdf/dompdf/www/test/images/png/rgba8.png deleted file mode 100644 index 495d8c329..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/rgba8.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/rgba8_bk.png b/vendor/dompdf/dompdf/www/test/images/png/rgba8_bk.png deleted file mode 100644 index 10a1ee508..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/rgba8_bk.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/png/stripe.gif b/vendor/dompdf/dompdf/www/test/images/png/stripe.gif deleted file mode 100644 index e3fa3b331..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/png/stripe.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/smiley.png b/vendor/dompdf/dompdf/www/test/images/smiley.png deleted file mode 100644 index f5d3a0a94..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/smiley.png and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/unknown_extension.foo b/vendor/dompdf/dompdf/www/test/images/unknown_extension.foo deleted file mode 100644 index fd3265e54..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/unknown_extension.foo and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/vblank.gif b/vendor/dompdf/dompdf/www/test/images/vblank.gif deleted file mode 100644 index 332034b89..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/vblank.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/images/what_ordered.gif b/vendor/dompdf/dompdf/www/test/images/what_ordered.gif deleted file mode 100644 index 63de445a3..000000000 Binary files a/vendor/dompdf/dompdf/www/test/images/what_ordered.gif and /dev/null differ diff --git a/vendor/dompdf/dompdf/www/test/page_pages.html b/vendor/dompdf/dompdf/www/test/page_pages.html deleted file mode 100644 index a9f2fe028..000000000 --- a/vendor/dompdf/dompdf/www/test/page_pages.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - -40% of box width:
--- --
multiple identical images jpg:
--
-
- -
multiple identical images gif (will be recoded to png by dompdf):
--
-
- -
multiple identical images png:
--
-
- -
local png image with alpha channel:
-- -
Attention!
- -For external images to work, the following configuration is required:
-dompdf_config.inc.php :- -define("DOMPDF_ENABLE_REMOTE", true);- -external png Image with alpha channel:
-- -
external image, dynamically created with id in url parameter at end of parameter(.jpg):
-- -
external image, dynamically created with id in url parameter not at end of parameter (.jpg):
-- -
external Image without file extension (.jpg):
-- -
Background images
----
-- no-repeat position:default
-- no-repeat position:left-center
-- no-repeat position:left-bottom
-- no-repeat position:right-bottom
-- no-repeat position:center-center
-- no-repeat position:50%-50%
-- no-repeat position:4px-8px
-- no-repeat position:-4px--8px
-- no-repeat position:32px-0px
-- no-repeat position:0px-8px
--
-- repeat-y position:default
-- repeat-y position:left-center
-- repeat-y position:left-bottom
-- repeat-y position:right-bottom
-- repeat-y position:center-center
-- repeat-y position:50%-50%
-- repeat-y position:4px-8px
-- repeat-y position:-4px--8px
-- repeat-y position:32px-0px
-- repeat-y position:0px-8px
--
-- repeat-x position:default
-- repeat-x position:left-center
-- repeat-x position:left-bottom
-- repeat-x position:right-bottom
-- repeat-x position:center-center
-- repeat-x position:50%-50%
-- repeat-x position:4px-8px
-- repeat-x position:-4px--8px
-- repeat-x position:32px-0px
-- repeat-x position:0px-8px
--
-- repeat position:default
-- repeat position:left-center
-- repeat position:left-bottom
-- repeat position:right-bottom
-- repeat position:center-center
-- repeat position:50%-50%
-- repeat position:4px-8px
-- repeat position:-4px--8px
-- repeat position:32px-0px
-- repeat position:0px-8px
--
-- no-repeat position:32px-8px
-- no-repeat position:32pt-8pt
-- no-repeat position:32px-32px
-- no-repeat position:-16px--16px
--
-- no-repeat position:default image:url(http://www.dokuwiki.org/lib/images/fileicons/html.png) [image remote]
-- no-repeat position:default image:url(images/png.png) [image in subfolder]
-- no-repeat position:default image:url(html.png) [image in same folder]
- -- no-repeat position:default image:url(html.png) [image in same folder] -Added very long description, to see if non repeating background image is repeated after a line break. -blah, blah, blah, blah, blah, blah, blah, blah, blah, blah, blah, blah, -blah, blah, blah, blah, blah, blah, blah, blah, blah, blah, blah, blah, -... -
- - -Attention!
-For absolute image references to work, the file (dompdf)/www/test/images/smiley.png must be copyied exactly to (virtual web server root)/absimagetest/smiley.png
-- no-repeat position:default image:url(/absimagetest/smiley.png) [abs image ]
-paragraph link no-repeat position:default
-paragraph text no-repeat position:left-top; more text text more text text bla bla sdfjkhs sdfsjksdfks sdfkjsfsf skjfh ksjdfhsd
-paragraph text no-repeat position:left-center; more text text more text text bla bla sdfjkhs sdfsjksdfks sdfkjsfsf skjfh ksjdfhsd
--The PHP 5 HTML to PDF converter -
- -Lorem ipsum dolor sit amet
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at -odio vitae libero tempus convallis. Cum sociis natoque penatibus et -magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus -mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla -massa quis velit. Curabitur metus massa, semper mollis, molestie vel, -adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus -facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis -turpis vel magna. Cras eu est. Integer porttitor ligula a -tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis -leo. Nulla pellentesque molestie ante. Quisque vestibulum est id -justo. Ut pellentesque ante in neque.
- -Curabitur ut diam eu dui vestibulum pharetra. Nam pellentesque, justo -non hendrerit venenatis, mi orci pretium mi, et vehicula leo arcu quis -diam. Nullam mattis laoreet quam. Morbi mollis sem ut tellus. Nam mi -massa, lobortis eu, sollicitudin et, iaculis et, massa. Maecenas purus -mauris, luctus sit amet, pharetra in, facilisis sit amet, elit. Nullam -vel erat tempus purus molestie suscipit. Vestibulum odio lorem, -sollicitudin non, volutpat sit amet, tincidunt vel, nunc. Nulla quis -ante vestibulum odio feugiat facilisis. Proin lorem nisl, viverra at, -rhoncus quis, semper nec, mi. Donec euismod enim vitae velit. Nulla -sed lectus. Vivamus placerat, lacus sed vehicula sagittis, arcu massa -adipiscing lorem, bibendum luctus nisl tortor vitae leo.
- -Etiam a mauris. Proin justo elit, accumsan sit amet, tempus et, -blandit id, tellus. Morbi varius, nisi id iaculis aliquam, lacus -ligula facilisis velit, ac pharetra ipsum augue a massa. Etiam rhoncus -commodo orci. Mauris ullamcorper sagittis turpis. Nullam magna libero, -sagittis sed, auctor faucibus, accumsan vitae, urna. Pellentesque -volutpat. Aliquam sapien ipsum, eleifend nec, imperdiet vitae, -consectetuer id, quam. Donec a urna. Suspendisse sit amet -velit. Curabitur quis nisi id dui viverra ornare. Sed condimentum enim -quis tortor. Ut condimentum, magna non tempus tincidunt, leo nibh -molestie tellus, vitae convallis dolor ante sed ante. Nunc et -metus. Phasellus ultricies. Fusce faucibus tortor sit amet mauris.
- -Aliquam enim. Duis et diam. Praesent porta, mauris quis pellentesque -volutpat, erat elit vulputate eros, vitae pulvinar augue velit sit -amet sem. Fusce eu urna eu nisi condimentum posuere. Vivamus sed -felis. Duis eget urna vitae eros interdum dignissim. Proin justo eros, -eleifend in, porttitor in, malesuada non, neque. Etiam sed -augue. Nulla sit amet magna. Lorem ipsum dolor sit amet, consectetuer -adipiscing elit. Mauris facilisis. Curabitur massa magna, pulvinar a, -nonummy eget, egestas vitae, mauris. Quisque vel elit sit amet lorem -malesuada facilisis. Vestibulum porta, metus sit amet egestas -interdum, urna justo euismod erat, id tristique urna leo quis -nibh. Morbi non erat.
- -Cras fringilla, nulla id egestas elementum, augue nunc iaculis nibh, -ac adipiscing nibh justo id tortor. Donec vel orci a nisi ultricies -aliquet. Nunc urna quam, adipiscing molestie, vehicula non, -condimentum non, magna. Integer magna. Donec quam metus, pulvinar id, -suscipit eget, euismod ac, orci. Nulla facilisi. Nullam nec -mauris. Morbi in mi. Etiam urna lectus, pulvinar ac, sollicitudin eu, -euismod ac, lectus. Fusce elit. Sed ultricies odio ac felis.
- -Cras iaculis. Nulla facilisi.
-Cras iaculis. Nulla facilisi. Fusce vitae arcu. Integer lectus mauris, -ornare vel, accumsan eget, scelerisque vel, nunc. Maecenas justo urna, -volutpat vel, vehicula vel, ullamcorper nec, odio. Suspendisse laoreet -nisi sed erat. Cras convallis sollicitudin sapien. Phasellus ac erat -eu mi rutrum rhoncus. Morbi et velit. Morbi odio nisi, pharetra eget, -sollicitudin sed, aliquam at, nisl. Quisque euismod diam in -sapien. Integer accumsan urna in risus.
- -Proin sit amet nisl. Phasellus dui ipsum, laoreet a, pulvinar id, -fringilla ut, libero. In hac habitasse platea dictumst. Maecenas mi -magna, cursus sed, rutrum eget, molestie nec, dui. Suspendisse -lacus. Vivamus nibh urna, accumsan sit amet, gravida sed, convallis a, -leo. Cras sollicitudin orci sit amet eros. Pellentesque eu odio et -velit tempor dignissim. Morbi vehicula malesuada enim. Pellentesque -tincidunt, tellus ac fringilla tempor, justo libero interdum nunc, eu -sollicitudin tortor augue nec tellus. Nullam eget leo quis tellus -gravida faucibus. Nam gravida. Curabitur rhoncus egestas -nunc. Curabitur mollis, nisi sed suscipit gravida, enim felis interdum -justo, vel accumsan magna nunc ut libero. Ut fermentum. Fusce luctus, -est sit amet feugiat lobortis, nisl eros bibendum libero, ut suscipit -felis ligula in massa. Proin congue elit et nisi. Cras ac nisl. Nunc -ullamcorper neque vel diam.
- -Ut pellentesque arcu ac lectus.
-Sed ac lorem. Ut pellentesque arcu ac lectus. Cum sociis natoque -penatibus et magnis dis parturient montes, nascetur ridiculus -mus. Pellentesque ultrices metus sollicitudin pede. Donec fermentum -est a velit fringilla mollis. Duis ligula. Fusce viverra laoreet -odio. Suspendisse sit amet ligula. Maecenas nunc velit, sagittis eu, -bibendum eu, placerat at, nibh. Praesent ut erat eget nisi gravida -imperdiet. Quisque vitae sapien. Ut eros.
- -Donec eros ligula, dignissim vel, ultricies id, mattis in, massa. Duis -lobortis dui nec orci. Sed ullamcorper metus non massa. Aliquam eget -mauris ac nulla elementum posuere. Sed porta, augue vitae rhoncus -aliquet, felis quam eleifend est, vitae rutrum metus arcu vel -lorem. Proin laoreet, mauris sit amet aliquet eleifend, nisl sem -molestie nisi, eu varius eros ligula non erat. Integer ac -sem. Suspendisse lectus. Aliquam erat volutpat. Fusce sit amet leo -faucibus erat molestie ultrices. Maecenas lacinia lectus eget -dui. Etiam porta porttitor ante. Phasellus sit amet lacus adipiscing -enim mollis iaculis. Fusce congue, nulla a commodo aliquam, erat dui -fermentum dui, pellentesque faucibus orci enim at mauris. Pellentesque -a diam porta magna tempor posuere. Donec lorem.
- -Sed viverra aliquam turpis. Aliquam lacus. Duis id massa. Nullam -ante. Suspendisse condimentum. Donec adipiscing, felis vel semper -sollicitudin, lacus justo pretium est, sed blandit pede risus eu -ante. Praesent ante nulla, fringilla id, ultrices et, feugiat a, -metus. Proin ac velit a metus suscipit fermentum. Integer aliquet. Sed -sapien nulla, placerat at, rutrum at, condimentum quis, libero. In -accumsan, tellus nec tincidunt malesuada, pede arcu commodo ipsum, ac -mattis tortor urna vitae enim. Aenean nonummy, mauris eget commodo -bibendum, augue sem ultrices nunc, eget rhoncus metus erat placerat -lectus. Aliquam mollis lectus in justo. Vivamus iaculis lacus sit amet -ligula. Etiam consectetuer convallis diam. Curabitur sollicitudin, -felis eu vehicula scelerisque, nisl urna aliquam orci, sit amet -laoreet mi turpis id ligula. Donec at enim non nulla adipiscing -dapibus. Aenean nisl.
- -Ut in lacus nec enim volutpat pellentesque. Integer euismod. In odio -eros, malesuada in, mattis vel, tempor nec, sem. In libero tellus, -varius vitae, bibendum in, elementum quis, nisl. Duis tortor. Etiam at -justo. Pellentesque facilisis mauris non nunc. Praesent eros mi, -dapibus eget, placerat ac, lobortis quis, sem. Nulla rhoncus -turpis. Nulla vitae mi. Proin id massa. Nunc eros.
- -Aliquam molestie pulvinar ligula.
-Vestibulum dui risus, varius ut, semper et, consequat ultrices, -felis. Pellentesque iaculis urna in velit. Ut pharetra. Nunc -fringilla, nisi vitae fringilla placerat, enim justo semper erat, -mollis feugiat leo neque eu sem. Vestibulum orci urna, suscipit a, -accumsan nec, fringilla in, risus. Nullam ante. Nullam nec -eros. Nullam varius. Nulla facilisi. In auctor libero in -metus. Aliquam porttitor congue eros. Nulla facilisi. Mauris euismod -turpis ut felis. Ut nunc nisl, cursus quis, eleifend at, viverra -bibendum, lacus. Donec consequat lacus eu sapien. Fusce pulvinar -lectus quis nunc. In hac habitasse platea dictumst.
- -Aliquam molestie pulvinar ligula. Maecenas imperdiet, urna eget -ultrices adipiscing, nibh ante elementum neque, id molestie massa quam -ut nunc. Nullam porta. Phasellus a magna in sem volutpat -viverra. Quisque aliquet nunc ac turpis. Mauris dolor enim, viverra -rutrum, placerat et, laoreet et, justo. In id nulla. Donec -erat. Phasellus nec mi sed velit mollis cursus. Vestibulum -tincidunt. Praesent dui libero, facilisis eu, vulputate eget, aliquet -nec, ipsum. Pellentesque in nisl in mauris pretium euismod.
- - diff --git a/vendor/dompdf/dompdf/www/test/print_header_footer.html b/vendor/dompdf/dompdf/www/test/print_header_footer.html deleted file mode 100644 index e74d4e38c..000000000 --- a/vendor/dompdf/dompdf/www/test/print_header_footer.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - -Header and Footer example - - - - - - --- - - --
-- -Example document -Author -Section 1
- --
- --Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non -risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, -ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula -massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci -nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit -amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat -in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero -pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo -in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue -blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus -et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed -pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales -hendrerit.
- -Section 2
- --
- -- Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut -orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, -ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus -sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer -id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae -elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer -adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et -sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue -eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non -elementum posuere, metus purus iaculis lectus, et tristique ligula -justo vitae magna. Morbi vel erat non mauris convallis vehicula. Nulla et -sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue -eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non -elementum posuere, metus purus iaculis lectus, et tristique ligula -justo vitae magna.
- -Section 3
- - -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- -Aliquam convallis sollicitudin purus. Praesent aliquam, enim at -fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu -lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod -libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean -suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla -tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, -felis magna fermentum augue, et ultricies lacus lorem varius purus. -Curabitur eu amet.
- - diff --git a/vendor/dompdf/dompdf/www/test/quirks_center_table.html b/vendor/dompdf/dompdf/www/test/quirks_center_table.html deleted file mode 100644 index d0a453666..000000000 --- a/vendor/dompdf/dompdf/www/test/quirks_center_table.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - --
- - - diff --git a/vendor/dompdf/dompdf/www/test/quirks_font_tag.html b/vendor/dompdf/dompdf/www/test/quirks_font_tag.html deleted file mode 100644 index 6b0812f77..000000000 --- a/vendor/dompdf/dompdf/www/test/quirks_font_tag.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - -- -a -b -- -c -d -Font tags with absolute size
- -size=1 -size=2 -size=3 -size=4 -size=5 -size=6 -size=7 - -Span tags with absolute CSS size
- -size=1 -size=2 -size=3 -size=4 -size=5 -size=6 -size=7 - -Font tags with relative size
- -size=-4 -size=-3 -size=-2 -size=-1 -size=+1 -size=+2 -size=+3 -size=+4 - -Span tags with relative CSS size
- -size=-4 -size=-3 -size=-2 -size=-1 -size=+1 -size=+2 -size=+3 -size=+4 - -Nested font tags
- -size=2 - size=4 - size=2 - size=4 - size=2 - size=4 - size=2 - size=4 - - - - - - - - - - - diff --git a/vendor/dompdf/dompdf/www/test/quirks_html_attributes.html b/vendor/dompdf/dompdf/www/test/quirks_html_attributes.html deleted file mode 100644 index efb6b2641..000000000 --- a/vendor/dompdf/dompdf/www/test/quirks_html_attributes.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - -- -Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet -doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit -amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt -ut laoreet dolore magna aliquam erat volutpat.-
-Ut wisi enim ad minim veniam, -quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex -ea commodo consequat. - -
- --
- - - diff --git a/vendor/dompdf/dompdf/www/test/script_javascript.html b/vendor/dompdf/dompdf/www/test/script_javascript.html deleted file mode 100644 index 84efb467a..000000000 --- a/vendor/dompdf/dompdf/www/test/script_javascript.html +++ /dev/null @@ -1,24 +0,0 @@ - - - -- -Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper - suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem - vel eum iriure dolor in hendrerit in vulputate velit esse molestie - consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et - accumsan et iusto odio dignissim qui blandit praesent luptatum zzril - delenit augue duis dolore te feugait nulla facilisi. -table test -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, - sed diam nonumy eirmod tempor invidunt ut labore et dolore magna - aliquyam erat, sed diam voluptua. -Duis autem vel eum iriure dolor in hendrerit in - vulputate velit esse molestie consequat, vel illum dolore eu feugiat - nulla facilisis at vero eros et accumsan et iusto odio dignissim qui - blandit praesent luptatum zzril delenit augue duis dolore te feugait - nulla facilisi. -- -table test -Nam liber tempor cum soluta nobis eleifend option congue nihil - imperdiet doming id quod mazim placerat facer possim assum. -
- Lorem ipsum dolor sit amet.table test -table test -- -table test -table test -table test -table test -Javascript test - - - - -This page will be printed automatically - -A title
- - - - - diff --git a/vendor/dompdf/dompdf/www/test/script_php.php b/vendor/dompdf/dompdf/www/test/script_php.php deleted file mode 100644 index ad75b6ed7..000000000 --- a/vendor/dompdf/dompdf/www/test/script_php.php +++ /dev/null @@ -1,28 +0,0 @@ - - - - -- - - - -Here's some dynamically generated text and some random circles..."; -?> - - -Current PHP version: " . phpversion() . ". "; -echo "Today is " . strftime("%A") . " the " . strftime("%e").date("S").strftime(" of %B, %Y %T") . ""; - -?> - diff --git a/vendor/guzzlehttp/uri-template/CHANGELOG.md b/vendor/guzzlehttp/uri-template/CHANGELOG.md new file mode 100644 index 000000000..bf8992426 --- /dev/null +++ b/vendor/guzzlehttp/uri-template/CHANGELOG.md @@ -0,0 +1,37 @@ +# Changelog + +All notable changes to `uri-template` will be documented in this file. + +Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## v1.0.1 - 2021-10-07 + +### Changed +- Officially support PHP 8.1 + +## v1.0.0 - 2021-08-14 + +### Changed +- Dropped support for PHP 7.1 + +## v0.2.0 - 2020-07-21 + +### Added +- Support PHP 7.1 and 8.0 + +### Changed +- Renamed `GuzzleHttp\Utility\` to `GuzzleHttp\UriTemplate\` + +### Fixed +- Delegate RFC 3986 query string encoding to PHP +- Fixed some bugs when parts ofs values are not strings + +## v0.1.1 - 2020-06-30 + +### Fixed +- Fixed an error due to strict_types [d47d1b0a8e78a3fac1cd0f69d675fc9e06771ac8](https://github.com/guzzle/uri-template/commit/d47d1b0a8e78a3fac1cd0f69d675fc9e06771ac8) + +## v0.1.0 - 2020-06-30 + +### Added +- Moved the `UriTemplate` class in this package diff --git a/vendor/guzzlehttp/uri-template/LICENSE b/vendor/guzzlehttp/uri-template/LICENSE new file mode 100644 index 000000000..e70120fcc --- /dev/null +++ b/vendor/guzzlehttp/uri-template/LICENSE @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) 2014 Michael Dowling +Copyright (c) 2020 George Mponos +Copyright (c) 2020 Graham Campbell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/guzzlehttp/uri-template/README.md b/vendor/guzzlehttp/uri-template/README.md new file mode 100644 index 000000000..ae187e92e --- /dev/null +++ b/vendor/guzzlehttp/uri-template/README.md @@ -0,0 +1,33 @@ +# uri-template + +## Install + +Via Composer + +``` bash +$ composer require guzzlehttp/uri-template +``` + +## Change log + +Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently. + +## Testing + +``` bash +$ make test +``` + +## Security + +If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/uri-template/security/policy) for more information. + +## License + +Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information. + +## For Enterprise + +Available as part of the Tidelift Subscription + +The maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-uri-template?utm_source=packagist-guzzlehttp-uri-template7&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/vendor/guzzlehttp/uri-template/composer.json b/vendor/guzzlehttp/uri-template/composer.json new file mode 100644 index 000000000..11ffd33c9 --- /dev/null +++ b/vendor/guzzlehttp/uri-template/composer.json @@ -0,0 +1,71 @@ +{ + "name": "guzzlehttp/uri-template", + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "license": "MIT", + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "repositories": [ + { + "type": "package", + "package": { + "name": "uri-template/tests", + "version": "1.0.0", + "dist": { + "url": "https://github.com/uri-templates/uritemplate-test/archive/520fdd8b0f78779d12178c357a986e0e727f4bd0.zip", + "type": "zip" + } + } + } + ], + "require": { + "php" : "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "phpunit/phpunit" : "^8.5.19 || ^9.5.8", + "uri-template/tests": "1.0.0" + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\Tests\\": "tests" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "config": { + "preferred-install": "dist", + "sort-packages": true + } +} diff --git a/vendor/guzzlehttp/uri-template/src/UriTemplate.php b/vendor/guzzlehttp/uri-template/src/UriTemplate.php new file mode 100644 index 000000000..c69916416 --- /dev/null +++ b/vendor/guzzlehttp/uri-template/src/UriTemplate.php @@ -0,0 +1,297 @@ + Hash for quick operator lookups + */ + private static $operatorHash = [ + '' => ['prefix' => '', 'joiner' => ',', 'query' => false], + '+' => ['prefix' => '', 'joiner' => ',', 'query' => false], + '#' => ['prefix' => '#', 'joiner' => ',', 'query' => false], + '.' => ['prefix' => '.', 'joiner' => '.', 'query' => false], + '/' => ['prefix' => '/', 'joiner' => '/', 'query' => false], + ';' => ['prefix' => ';', 'joiner' => ';', 'query' => true], + '?' => ['prefix' => '?', 'joiner' => '&', 'query' => true], + '&' => ['prefix' => '&', 'joiner' => '&', 'query' => true], + ]; + + /** + * @var string[] Delimiters + */ + private static $delims = [ + ':', + '/', + '?', + '#', + '[', + ']', + '@', + '!', + '$', + '&', + '\'', + '(', + ')', + '*', + '+', + ',', + ';', + '=', + ]; + + /** + * @var string[] Percent encoded delimiters + */ + private static $delimsPct = [ + '%3A', + '%2F', + '%3F', + '%23', + '%5B', + '%5D', + '%40', + '%21', + '%24', + '%26', + '%27', + '%28', + '%29', + '%2A', + '%2B', + '%2C', + '%3B', + '%3D', + ]; + + /** + * @param array $variables Variables to use in the template expansion + * + * @throws \RuntimeException + */ + public static function expand(string $template, array $variables): string + { + if (false === \strpos($template, '{')) { + return $template; + } + + /** @var string|null */ + $result = \preg_replace_callback( + '/\{([^\}]+)\}/', + self::expandMatchCallback($variables), + $template + ); + + if (null === $result) { + throw new \RuntimeException(\sprintf('Unable to process template: %s', \preg_last_error_msg())); + } + + return $result; + } + + /** + * @param array $variables Variables to use in the template expansion + * + * @return callable(string[]): string + */ + private static function expandMatchCallback(array $variables): callable + { + return static function (array $matches) use ($variables): string { + return self::expandMatch($matches, $variables); + }; + } + + /** + * Process an expansion + * + * @param array $variables Variables to use in the template expansion + * @param string[] $matches Matches met in the preg_replace_callback + * + * @return string Returns the replacement string + */ + private static function expandMatch(array $matches, array $variables): string + { + $replacements = []; + $parsed = self::parseExpression($matches[1]); + $prefix = self::$operatorHash[$parsed['operator']]['prefix']; + $joiner = self::$operatorHash[$parsed['operator']]['joiner']; + $useQuery = self::$operatorHash[$parsed['operator']]['query']; + $allUndefined = true; + + foreach ($parsed['values'] as $value) { + if (!isset($variables[$value['value']])) { + continue; + } + + /** @var mixed */ + $variable = $variables[$value['value']]; + $actuallyUseQuery = $useQuery; + $expanded = ''; + + if (\is_array($variable)) { + $isAssoc = self::isAssoc($variable); + $kvp = []; + /** @var mixed $var */ + foreach ($variable as $key => $var) { + if ($isAssoc) { + $key = \rawurlencode((string) $key); + $isNestedArray = \is_array($var); + } else { + $isNestedArray = false; + } + + if (!$isNestedArray) { + $var = \rawurlencode((string) $var); + if ($parsed['operator'] === '+' || $parsed['operator'] === '#') { + $var = self::decodeReserved($var); + } + } + + if ($value['modifier'] === '*') { + if ($isAssoc) { + if ($isNestedArray) { + // Nested arrays must allow for deeply nested structures. + $var = \http_build_query([$key => $var], '', '&', \PHP_QUERY_RFC3986); + } else { + $var = \sprintf('%s=%s', (string) $key, (string) $var); + } + } elseif ($key > 0 && $actuallyUseQuery) { + $var = \sprintf('%s=%s', $value['value'], (string) $var); + } + } + + /** @var string $var */ + + $kvp[$key] = $var; + } + + if (0 === \count($variable)) { + $actuallyUseQuery = false; + } elseif ($value['modifier'] === '*') { + $expanded = \implode($joiner, $kvp); + if ($isAssoc) { + // Don't prepend the value name when using the explode + // modifier with an associative array. + $actuallyUseQuery = false; + } + } else { + if ($isAssoc) { + // When an associative array is encountered and the + // explode modifier is not set, then the result must be + // a comma separated list of keys followed by their + // respective values. + foreach ($kvp as $k => &$v) { + $v = \sprintf('%s,%s', $k, $v); + } + } + $expanded = \implode(',', $kvp); + } + } else { + $allUndefined = false; + if ($value['modifier'] === ':' && isset($value['position'])) { + $variable = \substr((string) $variable, 0, $value['position']); + } + $expanded = \rawurlencode((string) $variable); + if ($parsed['operator'] === '+' || $parsed['operator'] === '#') { + $expanded = self::decodeReserved($expanded); + } + } + + if ($actuallyUseQuery) { + if (!$expanded && $joiner !== '&') { + $expanded = $value['value']; + } else { + $expanded = \sprintf('%s=%s', $value['value'], $expanded); + } + } + + $replacements[] = $expanded; + } + + $ret = \implode($joiner, $replacements); + + if ('' === $ret) { + // Spec section 3.2.4 and 3.2.5 + if (false === $allUndefined && ('#' === $prefix || '.' === $prefix)) { + return $prefix; + } + } else { + if ('' !== $prefix) { + return \sprintf('%s%s', $prefix, $ret); + } + } + + return $ret; + } + + /** + * Parse an expression into parts + * + * @param string $expression Expression to parse + * + * @return array{operator:string, values:array } + */ + private static function parseExpression(string $expression): array + { + $result = []; + + if (isset(self::$operatorHash[$expression[0]])) { + $result['operator'] = $expression[0]; + /** @var string */ + $expression = \substr($expression, 1); + } else { + $result['operator'] = ''; + } + + $result['values'] = []; + foreach (\explode(',', $expression) as $value) { + $value = \trim($value); + $varspec = []; + if ($colonPos = \strpos($value, ':')) { + $varspec['value'] = (string) \substr($value, 0, $colonPos); + $varspec['modifier'] = ':'; + $varspec['position'] = (int) \substr($value, $colonPos + 1); + } elseif (\substr($value, -1) === '*') { + $varspec['modifier'] = '*'; + $varspec['value'] = (string) \substr($value, 0, -1); + } else { + $varspec['value'] = $value; + $varspec['modifier'] = ''; + } + $result['values'][] = $varspec; + } + + return $result; + } + + /** + * Determines if an array is associative. + * + * This makes the assumption that input arrays are sequences or hashes. + * This assumption is a tradeoff for accuracy in favor of speed, but it + * should work in almost every case where input is supplied for a URI + * template. + */ + private static function isAssoc(array $array): bool + { + return $array && \array_keys($array)[0] !== 0; + } + + /** + * Removes percent encoding on reserved characters (used with + and # + * modifiers). + */ + private static function decodeReserved(string $string): string + { + return \str_replace(self::$delimsPct, self::$delims, $string); + } +} diff --git a/vendor/laravel/framework/CHANGELOG.md b/vendor/laravel/framework/CHANGELOG.md index 23bf1bc3d..f9b43fe67 100644 --- a/vendor/laravel/framework/CHANGELOG.md +++ b/vendor/laravel/framework/CHANGELOG.md @@ -1,6 +1,130 @@ # Release Notes for 9.x -## [Unreleased](https://github.com/laravel/framework/compare/v9.47.0...9.x) +## [Unreleased](https://github.com/laravel/framework/compare/v9.51.0...9.x) + + +## [v9.51.0](https://github.com/laravel/framework/compare/v9.50.2...v9.51.0) - 2023-02-07 + +### Added +- Added `Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase::expectsDatabaseQueryCount()` ([#45932](https://github.com/laravel/framework/pull/45932)) +- Added pending has-many-through and has-one-through builder ([#45894](https://github.com/laravel/framework/pull/45894)) +- Added `Illuminate/Http/Client/PendingRequest::withUrlParameters()` ([#45982](https://github.com/laravel/framework/pull/45982)) + +### Fixed +- Fix: prevent duplicated content-type on HTTP client ([#45960](https://github.com/laravel/framework/pull/45960)) +- Add missing php extensions in composer ([#45941](https://github.com/laravel/framework/pull/45941)) + +### Changed +- Command schedule:work minor features: schedule:run output file & environment specific verbosity ([#45949](https://github.com/laravel/framework/pull/45949)) +- Added missing self reserved word to reservedNames array in `Illuminate/Console/GeneratorCommand.php` ([#46001](https://github.com/laravel/framework/pull/46001)) +- pass value along to ttl callback in `Illuminate/Cache/Repository::remember()` ([#46006](https://github.com/laravel/framework/pull/46006)) +- Make sure the lock_connection is used for schedule's withoutOverlapping() ([#45963](https://github.com/laravel/framework/pull/45963)) + + +## [v9.50.2](https://github.com/laravel/framework/compare/v9.50.1...v9.50.2) - 2023-02-02 + +### Fixed +- Fixed missing_with and missing_with_all validation ([#45913](https://github.com/laravel/framework/pull/45913)) +- Fixes blade escaped tags issue ([#45928](https://github.com/laravel/framework/pull/45928)) + +### Changed +- Trims numeric validation values / parameters ([#45912](https://github.com/laravel/framework/pull/45912)) +- Random function doesn't generate evenly distributed random chars ([#45916](https://github.com/laravel/framework/pull/45916)) + + +## [v9.50.1](https://github.com/laravel/framework/compare/v9.50.0...v9.50.1) - 2023-02-01 + +### Reverted +- Reverted ["Optimize destroy method"](https://github.com/laravel/framework/pull/45709) ([#45903](https://github.com/laravel/framework/pull/45903)) + +### Changed +- Allow scheme to be specified in `Illuminate/Mail/MailManager::createSmtpTransport()` ([68a8bfc](https://github.com/laravel/framework/commit/68a8bfc3ab758962c8f050160ec32833dc12e467)) +- Accept optional mode in `Illuminate/Filesystem/Filesystem::replace()` ([2664e7f](https://github.com/laravel/framework/commit/2664e7fcdfe3a290462ae8e326ba79a17c747c1e)) + + +## [v9.50.0](https://github.com/laravel/framework/compare/v9.49.0...v9.50.0) - 2023-02-01 + +### Added +- Added `Illuminate/Translation/Translator::stringable()` ([#45874](https://github.com/laravel/framework/pull/45874)) +- Added `Illuminate/Foundation/Testing/DatabaseTruncation` ([#45726](https://github.com/laravel/framework/pull/45726)) +- Added @style Blade directive ([#45887](https://github.com/laravel/framework/pull/45887)) + +### Reverted +- Reverted: ["Fix Illuminate Filesystem replace() leaves file executable"](https://github.com/laravel/framework/pull/45856) ([5ea388d](https://github.com/laravel/framework/commit/5ea388d7fe6f786b6dbcb34e0b52341c0b38ad7e)) + +### Fixed +- Fixed LazyCollection::makeIterator() to accept non Generator Function ([#45881](https://github.com/laravel/framework/pull/45881)) + +### Changed +- Solve data to be dumped for separate schemes ([#45805](https://github.com/laravel/framework/pull/45805)) + + +## [v9.49.0](https://github.com/laravel/framework/compare/v9.48.0...v9.49.0) - 2023-01-31 + +### Added +- Added `Illuminate/Database/Schema/ForeignKeyDefinition::noActionOnDelete()` ([#45712](https://github.com/laravel/framework/pull/45712)) +- Added new throw helper methods to the HTTP Client ([#45704](https://github.com/laravel/framework/pull/45704)) +- Added configurable timezone support for WorkCommand output timestamps ([#45722](https://github.com/laravel/framework/pull/45722)) +- Added support for casting arrays containing enums ([#45621](https://github.com/laravel/framework/pull/45621)) +- Added "missing" validation rules ([#45717](https://github.com/laravel/framework/pull/45717)) +- Added `/Illuminate/Database/Eloquent/SoftDeletes::forceDeleteQuietly()` ([#45737](https://github.com/laravel/framework/pull/45737)) +- Added `Illuminate/Collections/Arr::sortDesc()` ([#45761](https://github.com/laravel/framework/pull/45761)) +- Added CLI Prompts ([#45629](https://github.com/laravel/framework/pull/45629), [#45864](https://github.com/laravel/framework/pull/45864)) +- Adds assertJsonIsArray and assertJsonIsObject for TestResponse ([#45731](https://github.com/laravel/framework/pull/45731)) +- Added `Illuminate/Database/Eloquent/Relations/HasOneOrMany::createQuietly()` ([#45783](https://github.com/laravel/framework/pull/45783)) +- Add validation rules: ascii_alpha, ascii_alpha_num, ascii_alpha_dash ([#45769](https://github.com/laravel/framework/pull/45769)) +- Extract status methods to traits ([#45789](https://github.com/laravel/framework/pull/45789)) +- Add "addRestoreOrCreate" extension to SoftDeletingScope ([#45754](https://github.com/laravel/framework/pull/45754)) +- Added connection established event ([f850d99](https://github.com/laravel/framework/commit/f850d99c50d173189ece2bb37b6c7ddcb456f1f9)) +- Add forceDeleting event to models ([#45836](https://github.com/laravel/framework/pull/45836)) +- Add title tag in mail template ([#45859](https://github.com/laravel/framework/pull/45859)) +- Added new methods to Collection ([#45839](https://github.com/laravel/framework/pull/45839)) +- Add skip cancelled middleware ([#45869](https://github.com/laravel/framework/pull/45869)) + +### Fixed +- Fix flushdb on cluster for `PredisClusterConnection.php` ([#45544](https://github.com/laravel/framework/pull/45544)) +- Fix blade tag issue with nested calls ([#45764](https://github.com/laravel/framework/pull/45764)) +- Fix infinite loop in blade compiler ([#45780](https://github.com/laravel/framework/pull/45780)) +- Fix ValidationValidator not to accept terminating newline ([#45790](https://github.com/laravel/framework/pull/45790)) +- Fix stubs publish command generating incorrect controller stubs ([#45812](https://github.com/laravel/framework/pull/45812)) +- fix: normalize route pipeline exception ([#45817](https://github.com/laravel/framework/pull/45817)) +- Fix Illuminate Filesystem replace() leaves file executable ([#45856](https://github.com/laravel/framework/pull/45856)) + +### Changed +- Ensures channel name matches from start of string ([#45692](https://github.com/laravel/framework/pull/45692)) +- Replace raw invisible characters in regex expressions with counterpart Unicode regex notations ([#45680](https://github.com/laravel/framework/pull/45680)) +- Optimize destroy method ([#45709](https://github.com/laravel/framework/pull/45709)) +- Unify prohibits behavior around prohibits_if ([#45723](https://github.com/laravel/framework/pull/45723)) +- Removes dependency on bcmath ([#45729](https://github.com/laravel/framework/pull/45729)) +- Allow brick/math 0.11 also ([#45762](https://github.com/laravel/framework/pull/45762)) +- Optimize findMany of BelongsToMany ([#45745](https://github.com/laravel/framework/pull/45745)) +- Ensure decimal rule handles large values ([#45693](https://github.com/laravel/framework/pull/45693)) +- Backed enum support for @js ([#45862](https://github.com/laravel/framework/pull/45862)) +- Restart syscalls for SIGALRM when worker times out a job ([#45871](https://github.com/laravel/framework/pull/45871)) +- Ensure subsiquent calls to Mailable->to() overwrite previous entries ([#45885](https://github.com/laravel/framework/pull/45885)) + + +## [v9.48.0](https://github.com/laravel/framework/compare/v9.47.0...v9.48.0) - 2023-01-17 + +### Added +- Added `Illuminate/Database/Schema/Builder::withoutForeignKeyConstraints()` ([#45601](https://github.com/laravel/framework/pull/45601)) +- Added `fragments()` \ `fragmentIf()` \ `fragmentsIf()` methods to `Illuminate/View/View.php` class ([#45656](https://github.com/laravel/framework/pull/45656), [#45669](https://github.com/laravel/framework/pull/45669)) +- Added `incrementEach()` and `decrementEach()` to `Illuminate/Database/Query/Builder` ([#45577](https://github.com/laravel/framework/pull/45577)) +- Added ability to drop an index when modifying a column ([#45513](https://github.com/laravel/framework/pull/45513)) +- Allow to set HTTP client for mailers ([#45684](https://github.com/laravel/framework/pull/45684)) +- Added 402 exception view ([#45682](https://github.com/laravel/framework/pull/45682)) +- Added `notFound()` helper to Http Client response ([#45681](https://github.com/laravel/framework/pull/45681)) + +### Fixed +- Fixed decimal cast ([#45602](https://github.com/laravel/framework/pull/45602)) + +### Changed +- Ignore whitespaces/newlines when finding relations in model:show command ([#45608](https://github.com/laravel/framework/pull/45608)) +- Fail queued job with a string messag ([#45625](https://github.com/laravel/framework/pull/45625)) +- Allow fake() helper in unit tests ([#45624](https://github.com/laravel/framework/pull/45624)) +- allow egulias/email-validator v4 ([#45649](https://github.com/laravel/framework/pull/45649)) +- Force countBy method in EloquentCollection to return base collection ([#45663](https://github.com/laravel/framework/pull/45663)) +- Allow for the collection of stubs to be published ([#45653](https://github.com/laravel/framework/pull/45653)) ## [v9.47.0](https://github.com/laravel/framework/compare/v9.46.0...v9.47.0) - 2023-01-10 diff --git a/vendor/laravel/framework/composer.json b/vendor/laravel/framework/composer.json index 0a7fd20f5..fb01d5283 100644 --- a/vendor/laravel/framework/composer.json +++ b/vendor/laravel/framework/composer.json @@ -16,13 +16,19 @@ ], "require": { "php": "^8.0.2", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", "ext-mbstring": "*", "ext-openssl": "*", - "brick/math": "^0.10.2", - "doctrine/inflector": "^2.0", + "ext-session": "*", + "ext-tokenizer": "*", + "brick/math": "^0.9.3|^0.10.2|^0.11", + "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.3.2", "egulias/email-validator": "^3.2.1|^4.0", "fruitcake/php-cors": "^1.2", + "guzzlehttp/uri-template": "^1.0", "laravel/serializable-closure": "^1.2.2", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", @@ -83,6 +89,7 @@ "illuminate/view": "self.version" }, "require-dev": { + "ext-gmp": "*", "ably/ably-php": "^1.0", "aws/aws-sdk-php": "^3.235.5", "doctrine/dbal": "^2.13.3|^3.1.4", @@ -140,11 +147,13 @@ } }, "suggest": { - "ext-bcmath": "Required to use the multiple_of validation rule.", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", diff --git a/vendor/laravel/framework/src/Illuminate/Auth/composer.json b/vendor/laravel/framework/src/Illuminate/Auth/composer.json index ae928a33b..1c3c4641f 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Auth/composer.json @@ -15,6 +15,7 @@ ], "require": { "php": "^8.0.2", + "ext-hash": "*", "illuminate/collections": "^9.0", "illuminate/contracts": "^9.0", "illuminate/http": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php index 9ca985a7d..25badb9c4 100644 --- a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php @@ -371,6 +371,6 @@ abstract class Broadcaster implements BroadcasterContract */ protected function channelNameMatchesPattern($channel, $pattern) { - return preg_match('/'.preg_replace('/\{(.*?)\}/', '([^\.]+)', $pattern).'$/', $channel); + return preg_match('/^'.preg_replace('/\{(.*?)\}/', '([^\.]+)', $pattern).'$/', $channel); } } diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/composer.json b/vendor/laravel/framework/src/Illuminate/Broadcasting/composer.json index 1f38b07af..6c65e6b85 100644 --- a/vendor/laravel/framework/src/Illuminate/Broadcasting/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/composer.json @@ -15,7 +15,6 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", "psr/log": "^1.0|^2.0|^3.0", "illuminate/bus": "^9.0", "illuminate/collections": "^9.0", @@ -35,6 +34,7 @@ } }, "suggest": { + "ext-hash": "Required to use the Ably and Pusher broadcast drivers.", "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0)." }, diff --git a/vendor/laravel/framework/src/Illuminate/Cache/FileLock.php b/vendor/laravel/framework/src/Illuminate/Cache/FileLock.php new file mode 100644 index 000000000..a5638b683 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Cache/FileLock.php @@ -0,0 +1,16 @@ +store->add($this->name, $this->owner, $this->seconds); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php b/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php index 42292295f..6a6feb8a5 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php @@ -12,7 +12,7 @@ use Illuminate\Support\InteractsWithTime; class FileStore implements Store, LockProvider { - use InteractsWithTime, HasCacheLock, RetrievesMultipleKeys; + use InteractsWithTime, RetrievesMultipleKeys; /** * The Illuminate Filesystem instance. @@ -200,6 +200,31 @@ class FileStore implements Store, LockProvider return $this->put($key, $value, 0); } + /** + * Get a lock instance. + * + * @param string $name + * @param int $seconds + * @param string|null $owner + * @return \Illuminate\Contracts\Cache\Lock + */ + public function lock($name, $seconds = 0, $owner = null) + { + return new FileLock($this, $name, $seconds, $owner); + } + + /** + * Restore a lock instance using the owner identifier. + * + * @param string $name + * @param string $owner + * @return \Illuminate\Contracts\Cache\Lock + */ + public function restoreLock($name, $owner) + { + return $this->lock($name, 0, $owner); + } + /** * Remove an item from the cache. * diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Repository.php b/vendor/laravel/framework/src/Illuminate/Cache/Repository.php index f6cd1c264..85e7b826d 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/Repository.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/Repository.php @@ -394,7 +394,9 @@ class Repository implements ArrayAccess, CacheContract return $value; } - $this->put($key, $value = $callback(), value($ttl)); + $value = $callback(); + + $this->put($key, $value, value($ttl, $value)); return $value; } diff --git a/vendor/laravel/framework/src/Illuminate/Cache/composer.json b/vendor/laravel/framework/src/Illuminate/Cache/composer.json index 92dd4fb03..8e8aaf7ff 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Cache/composer.json @@ -34,6 +34,8 @@ } }, "suggest": { + "ext-apcu": "Required to use the APC cache driver.", + "ext-filter": "Required to use the DynamoDb cache driver.", "ext-memcached": "Required to use the memcache cache driver.", "illuminate/database": "Required to use the database cache driver (^9.0).", "illuminate/filesystem": "Required to use the file cache driver (^9.0).", diff --git a/vendor/laravel/framework/src/Illuminate/Collections/Arr.php b/vendor/laravel/framework/src/Illuminate/Collections/Arr.php index 7d5902870..69220d510 100644 --- a/vendor/laravel/framework/src/Illuminate/Collections/Arr.php +++ b/vendor/laravel/framework/src/Illuminate/Collections/Arr.php @@ -731,6 +731,18 @@ class Arr return Collection::make($array)->sortBy($callback)->all(); } + /** + * Sort the array in descending order using the given callback or "dot" notation. + * + * @param array $array + * @param callable|array|string|null $callback + * @return array + */ + public static function sortDesc($array, $callback = null) + { + return Collection::make($array)->sortByDesc($callback)->all(); + } + /** * Recursively sort an array by keys and values. * @@ -783,6 +795,29 @@ class Arr return implode(' ', $classes); } + /** + * Conditionally compile styles from an array into a style list. + * + * @param array $array + * @return string + */ + public static function toCssStyles($array) + { + $styleList = static::wrap($array); + + $styles = []; + + foreach ($styleList as $class => $constraint) { + if (is_numeric($class)) { + $styles[] = Str::finish($constraint, ';'); + } elseif ($constraint) { + $styles[] = Str::finish($class, ';'); + } + } + + return implode(' ', $styles); + } + /** * Filter the array using the given callback. * @@ -803,9 +838,7 @@ class Arr */ public static function whereNotNull($array) { - return static::where($array, function ($value) { - return ! is_null($value); - }); + return static::where($array, fn ($value) => ! is_null($value)); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Collections/Collection.php b/vendor/laravel/framework/src/Illuminate/Collections/Collection.php index 7e77aea77..e5e82bf03 100644 --- a/vendor/laravel/framework/src/Illuminate/Collections/Collection.php +++ b/vendor/laravel/framework/src/Illuminate/Collections/Collection.php @@ -84,11 +84,9 @@ class Collection implements ArrayAccess, CanBeEscapedWhenCastToString, Enumerabl { $callback = $this->valueRetriever($callback); - $items = $this->map(function ($value) use ($callback) { - return $callback($value); - })->filter(function ($value) { - return ! is_null($value); - }); + $items = $this + ->map(fn ($value) => $callback($value)) + ->filter(fn ($value) => ! is_null($value)); if ($count = $items->count()) { return $items->sum() / $count; @@ -349,14 +347,10 @@ class Collection implements ArrayAccess, CanBeEscapedWhenCastToString, Enumerabl protected function duplicateComparator($strict) { if ($strict) { - return function ($a, $b) { - return $a === $b; - }; + return fn ($a, $b) => $a === $b; } - return function ($a, $b) { - return $a == $b; - }; + return fn ($a, $b) => $a == $b; } /** @@ -627,6 +621,41 @@ class Collection implements ArrayAccess, CanBeEscapedWhenCastToString, Enumerabl return new static(array_intersect($this->items, $this->getArrayableItems($items))); } + /** + * Intersect the collection with the given items, using the callback. + * + * @param \Illuminate\Contracts\Support\Arrayable |iterable $items + * @param callable(TValue, TValue): int $callback + * @return static + */ + public function intersectUsing($items, callable $callback) + { + return new static(array_uintersect($this->items, $this->getArrayableItems($items), $callback)); + } + + /** + * Intersect the collection with the given items with additional index check. + * + * @param \Illuminate\Contracts\Support\Arrayable |iterable $items + * @return static + */ + public function intersectAssoc($items) + { + return new static(array_intersect_assoc($this->items, $this->getArrayableItems($items))); + } + + /** + * Intersect the collection with the given items with additional index check, using the callback. + * + * @param \Illuminate\Contracts\Support\Arrayable |iterable $items + * @param callable(TValue, TValue): int $callback + * @return static + */ + public function intersectAssocUsing($items, callable $callback) + { + return new static(array_intersect_uassoc($this->items, $this->getArrayableItems($items), $callback)); + } + /** * Intersect the collection with the given items by key. * @@ -872,7 +901,7 @@ class Collection implements ArrayAccess, CanBeEscapedWhenCastToString, Enumerabl /** * Get the items with the specified keys. * - * @param \Illuminate\Support\Enumerable |array |string $keys + * @param \Illuminate\Support\Enumerable |array |string|null $keys * @return static */ public function only($keys) @@ -1598,13 +1627,9 @@ class Collection implements ArrayAccess, CanBeEscapedWhenCastToString, Enumerabl */ public function zip($items) { - $arrayableItems = array_map(function ($items) { - return $this->getArrayableItems($items); - }, func_get_args()); + $arrayableItems = array_map(fn ($items) => $this->getArrayableItems($items), func_get_args()); - $params = array_merge([function () { - return new static(func_get_args()); - }, $this->items], $arrayableItems); + $params = array_merge([fn () => new static(func_get_args()), $this->items], $arrayableItems); return new static(array_map(...$params)); } diff --git a/vendor/laravel/framework/src/Illuminate/Collections/Enumerable.php b/vendor/laravel/framework/src/Illuminate/Collections/Enumerable.php index cbf014139..070b5650c 100644 --- a/vendor/laravel/framework/src/Illuminate/Collections/Enumerable.php +++ b/vendor/laravel/framework/src/Illuminate/Collections/Enumerable.php @@ -51,11 +51,10 @@ interface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, /** * Wrap the given value in a collection if applicable. * - * @template TWrapKey of array-key * @template TWrapValue * - * @param iterable $value - * @return static + * @param iterable |TWrapValue $value + * @return static */ public static function wrap($value); diff --git a/vendor/laravel/framework/src/Illuminate/Collections/LazyCollection.php b/vendor/laravel/framework/src/Illuminate/Collections/LazyCollection.php index 512c2b775..8119b3af2 100644 --- a/vendor/laravel/framework/src/Illuminate/Collections/LazyCollection.php +++ b/vendor/laravel/framework/src/Illuminate/Collections/LazyCollection.php @@ -430,9 +430,7 @@ class LazyCollection implements CanBeEscapedWhenCastToString, Enumerable public function filter(callable $callback = null) { if (is_null($callback)) { - $callback = function ($value) { - return (bool) $value; - }; + $callback = fn ($value) => (bool) $value; } return new static(function () use ($callback) { @@ -632,6 +630,41 @@ class LazyCollection implements CanBeEscapedWhenCastToString, Enumerable return $this->passthru('intersect', func_get_args()); } + /** + * Intersect the collection with the given items, using the callback. + * + * @param \Illuminate\Contracts\Support\Arrayable |iterable $items + * @param callable(TValue, TValue): int $callback + * @return static + */ + public function intersectUsing() + { + return $this->passthru('intersectUsing', func_get_args()); + } + + /** + * Intersect the collection with the given items with additional index check. + * + * @param \Illuminate\Contracts\Support\Arrayable |iterable $items + * @return static + */ + public function intersectAssoc($items) + { + return $this->passthru('intersectAssoc', func_get_args()); + } + + /** + * Intersect the collection with the given items with additional index check, using the callback. + * + * @param \Illuminate\Contracts\Support\Arrayable |iterable $items + * @param callable(TValue, TValue): int $callback + * @return static + */ + public function intersectAssocUsing($items, callable $callback) + { + return $this->passthru('intersectAssocUsing', func_get_args()); + } + /** * Intersect the collection with the given items by key. * @@ -1465,9 +1498,7 @@ class LazyCollection implements CanBeEscapedWhenCastToString, Enumerable /** @var callable(TValue, TKey): bool $callback */ $callback = $this->useAsCallable($value) ? $value : $this->equality($value); - return $this->takeUntil(function ($item, $key) use ($callback) { - return ! $callback($item, $key); - }); + return $this->takeUntil(fn ($item, $key) => ! $callback($item, $key)); } /** @@ -1636,7 +1667,15 @@ class LazyCollection implements CanBeEscapedWhenCastToString, Enumerable return new ArrayIterator($source); } - return $source(); + if (is_callable($source)) { + $maybeTraversable = $source(); + + return $maybeTraversable instanceof Traversable + ? $maybeTraversable + : new ArrayIterator(Arr::wrap($maybeTraversable)); + } + + return new ArrayIterator((array) $source); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php b/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php index c7803bf84..2ffbe8d70 100644 --- a/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php +++ b/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php @@ -114,11 +114,10 @@ trait EnumeratesValues /** * Wrap the given value in a collection if applicable. * - * @template TWrapKey of array-key * @template TWrapValue * - * @param iterable $value - * @return static + * @param iterable |TWrapValue $value + * @return static */ public static function wrap($value) { diff --git a/vendor/laravel/framework/src/Illuminate/Collections/helpers.php b/vendor/laravel/framework/src/Illuminate/Collections/helpers.php index a4b84ddde..9babf4e0f 100644 --- a/vendor/laravel/framework/src/Illuminate/Collections/helpers.php +++ b/vendor/laravel/framework/src/Illuminate/Collections/helpers.php @@ -180,7 +180,7 @@ if (! function_exists('value')) { * Return the default value of the given value. * * @param mixed $value - * @param mixed $args + * @param mixed ...$args * @return mixed */ function value($value, ...$args) diff --git a/vendor/laravel/framework/src/Illuminate/Conditionable/Traits/Conditionable.php b/vendor/laravel/framework/src/Illuminate/Conditionable/Traits/Conditionable.php index dcd25469b..19307437c 100644 --- a/vendor/laravel/framework/src/Illuminate/Conditionable/Traits/Conditionable.php +++ b/vendor/laravel/framework/src/Illuminate/Conditionable/Traits/Conditionable.php @@ -13,7 +13,7 @@ trait Conditionable * @template TWhenParameter * @template TWhenReturnType * - * @param (\Closure($this): TWhenParameter)|TWhenParameter|null $value + * @param (\Closure($this): TWhenParameter)|TWhenParameter|null $value * @param (callable($this, TWhenParameter): TWhenReturnType)|null $callback * @param (callable($this, TWhenParameter): TWhenReturnType)|null $default * @return $this|TWhenReturnType diff --git a/vendor/laravel/framework/src/Illuminate/Console/Command.php b/vendor/laravel/framework/src/Illuminate/Console/Command.php index 8b4001cb8..676847465 100755 --- a/vendor/laravel/framework/src/Illuminate/Console/Command.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Command.php @@ -16,6 +16,7 @@ class Command extends SymfonyCommand Concerns\HasParameters, Concerns\InteractsWithIO, Concerns\InteractsWithSignals, + Concerns\PromptsForMissingInput, Macroable; /** diff --git a/vendor/laravel/framework/src/Illuminate/Console/Concerns/PromptsForMissingInput.php b/vendor/laravel/framework/src/Illuminate/Console/Concerns/PromptsForMissingInput.php new file mode 100644 index 000000000..ef1186eec --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/Concerns/PromptsForMissingInput.php @@ -0,0 +1,108 @@ +promptForMissingArguments($input, $output); + } + } + + /** + * Prompt the user for any missing arguments. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param \Symfony\Component\Console\Output\OutputInterface $output + * @return void + */ + protected function promptForMissingArguments(InputInterface $input, OutputInterface $output) + { + $prompted = collect($this->getDefinition()->getArguments()) + ->filter(fn ($argument) => $argument->isRequired() && is_null($input->getArgument($argument->getName()))) + ->filter(fn ($argument) => $argument->getName() !== 'command') + ->each(fn ($argument) => $input->setArgument( + $argument->getName(), + $this->askPersistently( + $this->promptForMissingArgumentsUsing()[$argument->getName()] ?? + 'What is '.lcfirst($argument->getDescription()).'?' + ) + )) + ->isNotEmpty(); + + if ($prompted) { + $this->afterPromptingForMissingArguments($input, $output); + } + } + + /** + * Prompt for missing input arguments using the returned questions. + * + * @return array + */ + protected function promptForMissingArgumentsUsing() + { + return []; + } + + /** + * Perform actions after the user was prompted for missing arguments. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param \Symfony\Component\Console\Output\OutputInterface $output + * @return void + */ + protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output) + { + // + } + + /** + * Whether the input contains any options that differ from the default values. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @return bool + */ + protected function didReceiveOptions(InputInterface $input) + { + return collect($this->getDefinition()->getOptions()) + ->reject(fn ($option) => $input->getOption($option->getName()) === $option->getDefault()) + ->isNotEmpty(); + } + + /** + * Continue asking a question until an answer is provided. + * + * @param string $question + * @return string + */ + private function askPersistently($question) + { + $answer = null; + + while ($answer === null) { + $answer = $this->components->ask($question); + + if ($answer === null) { + $this->components->error('The answer is required.'); + } + } + + return $answer; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php b/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php index 1beebcbd3..c4b17d9be 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php @@ -3,11 +3,13 @@ namespace Illuminate\Console; use Illuminate\Console\Concerns\CreatesMatchingTest; +use Illuminate\Contracts\Console\PromptsForMissingInput; use Illuminate\Filesystem\Filesystem; use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Finder\Finder; -abstract class GeneratorCommand extends Command +abstract class GeneratorCommand extends Command implements PromptsForMissingInput { /** * The filesystem instance. @@ -90,6 +92,7 @@ abstract class GeneratorCommand extends Command 'require', 'require_once', 'return', + 'self', 'static', 'switch', 'throw', @@ -233,6 +236,40 @@ abstract class GeneratorCommand extends Command : $rootNamespace.$model; } + /** + * Get a list of possible model names. + * + * @return array + */ + protected function possibleModels() + { + $modelPath = is_dir(app_path('Models')) ? app_path('Models') : app_path(); + + return collect((new Finder)->files()->depth(0)->in($modelPath)) + ->map(fn ($file) => $file->getBasename('.php')) + ->values() + ->all(); + } + + /** + * Get a list of possible event names. + * + * @return array + */ + protected function possibleEvents() + { + $eventPath = app_path('Events'); + + if (! is_dir($eventPath)) { + return []; + } + + return collect((new Finder)->files()->depth(0)->in($eventPath)) + ->map(fn ($file) => $file->getBasename('.php')) + ->values() + ->all(); + } + /** * Get the default namespace for the class. * @@ -436,7 +473,19 @@ abstract class GeneratorCommand extends Command protected function getArguments() { return [ - ['name', InputArgument::REQUIRED, 'The name of the class'], + ['name', InputArgument::REQUIRED, 'The name of the '.strtolower($this->type)], + ]; + } + + /** + * Prompt for missing input arguments using the returned questions. + * + * @return array + */ + protected function promptForMissingArgumentsUsing() + { + return [ + 'name' => 'What should the '.strtolower($this->type).' be named?', ]; } } diff --git a/vendor/laravel/framework/src/Illuminate/Console/QuestionHelper.php b/vendor/laravel/framework/src/Illuminate/Console/QuestionHelper.php index 06d90b65f..45a9ffc35 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/QuestionHelper.php +++ b/vendor/laravel/framework/src/Illuminate/Console/QuestionHelper.php @@ -46,6 +46,11 @@ class QuestionHelper extends SymfonyQuestionHelper $choices = $question->getChoices(); $text = sprintf(' %s [%s ]', $text, OutputFormatter::escape($choices[$default] ?? $default)); + break; + + default: + $text = sprintf('%s [%s ]', $text, OutputFormatter::escape($default)); + break; } diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CacheEventMutex.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CacheEventMutex.php index 1f6b15eac..760368353 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CacheEventMutex.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CacheEventMutex.php @@ -3,6 +3,7 @@ namespace Illuminate\Console\Scheduling; use Illuminate\Contracts\Cache\Factory as Cache; +use Illuminate\Contracts\Cache\LockProvider; class CacheEventMutex implements EventMutex, CacheAware { @@ -39,6 +40,12 @@ class CacheEventMutex implements EventMutex, CacheAware */ public function create(Event $event) { + if ($this->cache->store($this->store)->getStore() instanceof LockProvider) { + return $this->cache->store($this->store)->getStore() + ->lock($event->mutexName(), $event->expiresAt * 60) + ->acquire(); + } + return $this->cache->store($this->store)->add( $event->mutexName(), true, $event->expiresAt * 60 ); @@ -52,6 +59,12 @@ class CacheEventMutex implements EventMutex, CacheAware */ public function exists(Event $event) { + if ($this->cache->store($this->store)->getStore() instanceof LockProvider) { + return ! $this->cache->store($this->store)->getStore() + ->lock($event->mutexName(), $event->expiresAt * 60) + ->get(fn () => true); + } + return $this->cache->store($this->store)->has($event->mutexName()); } @@ -63,6 +76,14 @@ class CacheEventMutex implements EventMutex, CacheAware */ public function forget(Event $event) { + if ($this->cache->store($this->store)->getStore() instanceof LockProvider) { + $this->cache->store($this->store)->getStore() + ->lock($event->mutexName(), $event->expiresAt * 60) + ->forceRelease(); + + return; + } + $this->cache->store($this->store)->forget($event->mutexName()); } diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CallbackEvent.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CallbackEvent.php index db5e02970..0ef6fddce 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CallbackEvent.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CallbackEvent.php @@ -129,6 +129,8 @@ class CallbackEvent extends Event /** * Do not allow the event to overlap each other. * + * The expiration time of the underlying cache lock may be specified in minutes. + * * @param int $expiresAt * @return $this * diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Event.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Event.php index 36c180b95..0ff10188b 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Event.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Event.php @@ -80,7 +80,7 @@ class Event public $onOneServer = false; /** - * The amount of time the mutex should be valid. + * The number of minutes the mutex should be valid. * * @var int */ @@ -659,6 +659,8 @@ class Event /** * Do not allow the event to overlap each other. * + * The expiration time of the underlying cache lock may be specified in minutes. + * * @param int $expiresAt * @return $this */ diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleWorkCommand.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleWorkCommand.php index de3ce9449..5ea067aa7 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleWorkCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleWorkCommand.php @@ -4,18 +4,20 @@ namespace Illuminate\Console\Scheduling; use Illuminate\Console\Command; use Illuminate\Support\Carbon; +use Illuminate\Support\ProcessUtils; use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Process\Process; #[AsCommand(name: 'schedule:work')] class ScheduleWorkCommand extends Command { /** - * The console command name. + * The name and signature of the console command. * * @var string */ - protected $name = 'schedule:work'; + protected $signature = 'schedule:work {--run-output-file= : The file to directschedule:run output to}'; /** * The name of the console command. @@ -42,20 +44,29 @@ class ScheduleWorkCommand extends Command */ public function handle() { - $this->components->info('Running schedule tasks every minute.'); + $this->components->info( + 'Running scheduled tasks every minute.', + $this->getLaravel()->isLocal() ? OutputInterface::VERBOSITY_NORMAL : OutputInterface::VERBOSITY_VERBOSE + ); [$lastExecutionStartedAt, $executions] = [null, []]; + $command = implode(' ', array_map(fn ($arg) => ProcessUtils::escapeArgument($arg), [ + PHP_BINARY, + defined('ARTISAN_BINARY') ? ARTISAN_BINARY : 'artisan', + 'schedule:run', + ])); + + if ($this->option('run-output-file')) { + $command .= ' >> '.ProcessUtils::escapeArgument($this->option('run-output-file')).' 2>&1'; + } + while (true) { usleep(100 * 1000); if (Carbon::now()->second === 0 && ! Carbon::now()->startOfMinute()->equalTo($lastExecutionStartedAt)) { - $executions[] = $execution = new Process([ - PHP_BINARY, - defined('ARTISAN_BINARY') ? ARTISAN_BINARY : 'artisan', - 'schedule:run', - ]); + $executions[] = $execution = Process::fromShellCommandline($command); $execution->start(); @@ -64,7 +75,7 @@ class ScheduleWorkCommand extends Command foreach ($executions as $key => $execution) { $output = $execution->getIncrementalOutput(). - $execution->getIncrementalErrorOutput(); + $execution->getIncrementalErrorOutput(); $this->output->write(ltrim($output, "\n")); diff --git a/vendor/laravel/framework/src/Illuminate/Console/View/Components/Ask.php b/vendor/laravel/framework/src/Illuminate/Console/View/Components/Ask.php new file mode 100644 index 000000000..9d359b131 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/View/Components/Ask.php @@ -0,0 +1,18 @@ +usingQuestionHelper(fn () => $this->output->ask($question, $default)); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/View/Components/AskWithCompletion.php b/vendor/laravel/framework/src/Illuminate/Console/View/Components/AskWithCompletion.php new file mode 100644 index 000000000..103d73071 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/View/Components/AskWithCompletion.php @@ -0,0 +1,29 @@ +setAutocompleterCallback($choices) + : $question->setAutocompleterValues($choices); + + return $this->usingQuestionHelper( + fn () => $this->output->askQuestion($question) + ); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/View/Components/Choice.php b/vendor/laravel/framework/src/Illuminate/Console/View/Components/Choice.php index 6a669b946..8ef25be46 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/View/Components/Choice.php +++ b/vendor/laravel/framework/src/Illuminate/Console/View/Components/Choice.php @@ -12,13 +12,17 @@ class Choice extends Component * @param string $question * @param array$choices * @param mixed $default + * @param int $attempts + * @param bool $multiple * @return mixed */ - public function render($question, $choices, $default = null) + public function render($question, $choices, $default = null, $attempts = null, $multiple = false) { return $this->usingQuestionHelper( fn () => $this->output->askQuestion( - new ChoiceQuestion($question, $choices, $default) + (new ChoiceQuestion($question, $choices, $default)) + ->setMaxAttempts($attempts) + ->setMultiselect($multiple) ), ); } diff --git a/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php b/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php index f544ea32f..a14a0b665 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php +++ b/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php @@ -6,8 +6,10 @@ use InvalidArgumentException; /** * @method void alert(string $string, int $verbosity = \Symfony\Component\Console\Output\OutputInterface::VERBOSITY_NORMAL) + * @method mixed ask(string $question, string $default = null) + * @method mixed askWithCompletion(string $question, array|callable $choices, string $default = null) * @method void bulletList(array $elements, int $verbosity = \Symfony\Component\Console\Output\OutputInterface::VERBOSITY_NORMAL) - * @method mixed choice(string $question, array $choices, $default = null) + * @method mixed choice(string $question, array $choices, $default = null, int $attempts = null, bool $multiple = false) * @method bool confirm(string $question, bool $default = false) * @method void error(string $string, int $verbosity = \Symfony\Component\Console\Output\OutputInterface::VERBOSITY_NORMAL) * @method void info(string $string, int $verbosity = \Symfony\Component\Console\Output\OutputInterface::VERBOSITY_NORMAL) diff --git a/vendor/laravel/framework/src/Illuminate/Console/composer.json b/vendor/laravel/framework/src/Illuminate/Console/composer.json index 93b8b57ab..9242412ea 100755 --- a/vendor/laravel/framework/src/Illuminate/Console/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Console/composer.json @@ -15,6 +15,7 @@ ], "require": { "php": "^8.0.2", + "ext-mbstring": "*", "illuminate/collections": "^9.0", "illuminate/contracts": "^9.0", "illuminate/macroable": "^9.0", @@ -35,6 +36,7 @@ } }, "suggest": { + "ext-pcntl": "Required to use signal trapping.", "dragonmantank/cron-expression": "Required to use scheduler (^3.3.2).", "guzzlehttp/guzzle": "Required to use the ping methods on schedules (^7.5).", "illuminate/bus": "Required to use the scheduled job dispatcher (^9.0).", diff --git a/vendor/laravel/framework/src/Illuminate/Container/Container.php b/vendor/laravel/framework/src/Illuminate/Container/Container.php index 280f4d847..519fcdf5a 100755 --- a/vendor/laravel/framework/src/Illuminate/Container/Container.php +++ b/vendor/laravel/framework/src/Illuminate/Container/Container.php @@ -631,9 +631,7 @@ class Container implements ArrayAccess, ContainerContract */ public function wrap(Closure $callback, array $parameters = []) { - return function () use ($callback, $parameters) { - return $this->call($callback, $parameters); - }; + return fn () => $this->call($callback, $parameters); } /** @@ -677,9 +675,7 @@ class Container implements ArrayAccess, ContainerContract */ public function factory($abstract) { - return function () use ($abstract) { - return $this->make($abstract); - }; + return fn () => $this->make($abstract); } /** @@ -1083,9 +1079,7 @@ class Container implements ArrayAccess, ContainerContract return $this->make($className); } - return array_map(function ($abstract) { - return $this->resolve($abstract); - }, $concrete); + return array_map(fn ($abstract) => $this->resolve($abstract), $concrete); } /** @@ -1446,9 +1440,7 @@ class Container implements ArrayAccess, ContainerContract */ public function offsetSet($key, $value): void { - $this->bind($key, $value instanceof Closure ? $value : function () use ($value) { - return $value; - }); + $this->bind($key, $value instanceof Closure ? $value : fn () => $value); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Contracts/Console/PromptsForMissingInput.php b/vendor/laravel/framework/src/Illuminate/Contracts/Console/PromptsForMissingInput.php new file mode 100644 index 000000000..ccac1edac --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Contracts/Console/PromptsForMissingInput.php @@ -0,0 +1,8 @@ +|CastsAttributes|CastsInboundAttributes */ public static function castUsing(array $arguments); } diff --git a/vendor/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsAttributes.php b/vendor/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsAttributes.php index 808d005f5..878169c05 100644 --- a/vendor/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsAttributes.php @@ -2,6 +2,10 @@ namespace Illuminate\Contracts\Database\Eloquent; +/** + * @template TGet + * @template TSet + */ interface CastsAttributes { /** @@ -11,7 +15,7 @@ interface CastsAttributes * @param string $key * @param mixed $value * @param array $attributes - * @return mixed + * @return TGet|null */ public function get($model, string $key, $value, array $attributes); @@ -20,7 +24,7 @@ interface CastsAttributes * * @param \Illuminate\Database\Eloquent\Model $model * @param string $key - * @param mixed $value + * @param TSet|null $value * @param array $attributes * @return mixed */ diff --git a/vendor/laravel/framework/src/Illuminate/Contracts/Foundation/Application.php b/vendor/laravel/framework/src/Illuminate/Contracts/Foundation/Application.php index b46c6de4d..3c4fbadbe 100644 --- a/vendor/laravel/framework/src/Illuminate/Contracts/Foundation/Application.php +++ b/vendor/laravel/framework/src/Illuminate/Contracts/Foundation/Application.php @@ -64,7 +64,7 @@ interface Application extends Container /** * Get or check the current application environment. * - * @param string|array $environments + * @param string|array ...$environments * @return string|bool */ public function environment(...$environments); diff --git a/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php b/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php index 4d6c626eb..d3fc9e97b 100644 --- a/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php +++ b/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php @@ -22,7 +22,7 @@ class EncryptCookies /** * The names of the cookies that should not be encrypted. * - * @var array + * @var array */ protected $except = []; diff --git a/vendor/laravel/framework/src/Illuminate/Cookie/composer.json b/vendor/laravel/framework/src/Illuminate/Cookie/composer.json index a7a444cc3..7a53f9b2e 100755 --- a/vendor/laravel/framework/src/Illuminate/Cookie/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Cookie/composer.json @@ -15,6 +15,7 @@ ], "require": { "php": "^8.0.2", + "ext-hash": "*", "illuminate/collections": "^9.0", "illuminate/contracts": "^9.0", "illuminate/macroable": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php b/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php index 2f316a393..14661cc76 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php @@ -290,7 +290,11 @@ trait ManagesTransactions protected function performRollBack($toLevel) { if ($toLevel == 0) { - $this->getPdo()->rollBack(); + $pdo = $this->getPdo(); + + if ($pdo->inTransaction()) { + $pdo->rollBack(); + } } elseif ($this->queryGrammar->supportsSavepoints()) { $this->getPdo()->exec( $this->queryGrammar->compileSavepointRollBack('trans'.($toLevel + 1)) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/DumpCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/DumpCommand.php index 50a6ad076..3f21aaf7c 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/DumpCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/DumpCommand.php @@ -94,7 +94,7 @@ class DumpCommand extends Command */ protected function path(Connection $connection) { - return tap($this->option('path') ?: database_path('schema/'.$connection->getName().'-schema.dump'), function ($path) { + return tap($this->option('path') ?: database_path('schema/'.$connection->getName().'-schema.sql'), function ($path) { (new Filesystem)->ensureDirectoryExists(dirname($path)); }); } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php index ae4660dda..75c06345b 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php @@ -2,11 +2,12 @@ namespace Illuminate\Database\Console\Migrations; +use Illuminate\Contracts\Console\PromptsForMissingInput; use Illuminate\Database\Migrations\MigrationCreator; use Illuminate\Support\Composer; use Illuminate\Support\Str; -class MigrateMakeCommand extends BaseCommand +class MigrateMakeCommand extends BaseCommand implements PromptsForMissingInput { /** * The console command signature. @@ -128,4 +129,16 @@ class MigrateMakeCommand extends BaseCommand return parent::getMigrationPath(); } + + /** + * Prompt for missing input arguments using the returned questions. + * + * @return array + */ + protected function promptForMissingArgumentsUsing() + { + return [ + 'name' => 'What should the migration be named?', + ]; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/StatusCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/StatusCommand.php index 60ad9dc19..aa01f0782 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/StatusCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/StatusCommand.php @@ -65,9 +65,13 @@ class StatusCommand extends BaseCommand $this->components->twoColumnDetail(' Migration name>', ' Batch / Status>'); - $migrations->each( - fn ($migration) => $this->components->twoColumnDetail($migration[0], $migration[1]) - ); + $migrations + ->when($this->option('pending'), fn ($collection) => $collection->filter(function ($migration) { + return str($migration[1])->contains('Pending'); + })) + ->each( + fn ($migration) => $this->components->twoColumnDetail($migration[0], $migration[1]) + ); $this->newLine(); } else { @@ -120,9 +124,8 @@ class StatusCommand extends BaseCommand { return [ ['database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use'], - + ['pending', null, InputOption::VALUE_NONE, 'Only list pending migrations'], ['path', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'The path(s) to the migrations files to use'], - ['realpath', null, InputOption::VALUE_NONE, 'Indicate any provided migration file paths are pre-resolved absolute paths'], ]; } diff --git a/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php b/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php index 4f9907119..fc8135383 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php +++ b/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php @@ -4,6 +4,7 @@ namespace Illuminate\Database; use Doctrine\DBAL\Types\Type; use Illuminate\Database\Connectors\ConnectionFactory; +use Illuminate\Database\Events\ConnectionEstablished; use Illuminate\Support\Arr; use Illuminate\Support\ConfigurationUrlParser; use Illuminate\Support\Str; @@ -99,6 +100,12 @@ class DatabaseManager implements ConnectionResolverInterface $this->connections[$name] = $this->configure( $this->makeConnection($database), $type ); + + if ($this->app->bound('events')) { + $this->app['events']->dispatch( + new ConnectionEstablished($this->connections[$name]) + ); + } } return $this->connections[$name]; diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php index 90a0d4947..4387bc885 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php @@ -849,7 +849,7 @@ class Builder implements BuilderContract } /** - * Get an array with the values of a given column. + * Get a collection with the values of a given column. * * @param string|\Illuminate\Database\Query\Expression $column * @param string|null $key diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/ArrayObject.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/ArrayObject.php index 2da92c334..896445ee1 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/ArrayObject.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/ArrayObject.php @@ -6,6 +6,11 @@ use ArrayObject as BaseArrayObject; use Illuminate\Contracts\Support\Arrayable; use JsonSerializable; +/** + * @template TKey of array-key + * @template TItem + * @extends \ArrayObject + */ class ArrayObject extends BaseArrayObject implements Arrayable, JsonSerializable { /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsArrayObject.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsArrayObject.php index 34865b15f..23543baf9 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsArrayObject.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsArrayObject.php @@ -11,7 +11,7 @@ class AsArrayObject implements Castable * Get the caster class to use when casting from / to this cast target. * * @param array $arguments - * @return object|string + * @return CastsAttributes , iterable> */ public static function castUsing(array $arguments) { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsCollection.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsCollection.php index 3456767db..1a0dd83e0 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsCollection.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsCollection.php @@ -12,7 +12,7 @@ class AsCollection implements Castable * Get the caster class to use when casting from / to this cast target. * * @param array $arguments - * @return object|string + * @return CastsAttributes<\Illuminate\Support\Collection , iterable> */ public static function castUsing(array $arguments) { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEncryptedArrayObject.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEncryptedArrayObject.php index cd6562465..ce2b6639e 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEncryptedArrayObject.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEncryptedArrayObject.php @@ -12,7 +12,7 @@ class AsEncryptedArrayObject implements Castable * Get the caster class to use when casting from / to this cast target. * * @param array $arguments - * @return object|string + * @return CastsAttributes , iterable> */ public static function castUsing(array $arguments) { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEncryptedCollection.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEncryptedCollection.php index 4d9fee7ec..64cdf003b 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEncryptedCollection.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEncryptedCollection.php @@ -13,7 +13,7 @@ class AsEncryptedCollection implements Castable * Get the caster class to use when casting from / to this cast target. * * @param array $arguments - * @return object|string + * @return CastsAttributes<\Illuminate\Support\Collection , iterable> */ public static function castUsing(array $arguments) { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEnumArrayObject.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEnumArrayObject.php new file mode 100644 index 000000000..5b4778537 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEnumArrayObject.php @@ -0,0 +1,84 @@ +} $arguments + * @return CastsAttributes , iterable > + */ + public static function castUsing(array $arguments) + { + return new class($arguments) implements CastsAttributes + { + protected $arguments; + + public function __construct(array $arguments) + { + $this->arguments = $arguments; + } + + public function get($model, $key, $value, $attributes) + { + if (! isset($attributes[$key]) || is_null($attributes[$key])) { + return; + } + + $data = json_decode($attributes[$key], true); + + if (! is_array($data)) { + return; + } + + $enumClass = $this->arguments[0]; + + return new ArrayObject((new Collection($data))->map(function ($value) use ($enumClass) { + return is_subclass_of($enumClass, BackedEnum::class) + ? $enumClass::from($value) + : constant($enumClass.'::'.$value); + })->toArray()); + } + + public function set($model, $key, $value, $attributes) + { + if ($value === null) { + return [$key => null]; + } + + $storable = []; + + foreach ($value as $enum) { + $storable[] = $this->getStorableEnumValue($enum); + } + + return [$key => json_encode($storable)]; + } + + public function serialize($model, string $key, $value, array $attributes) + { + return (new Collection($value->getArrayCopy()))->map(function ($enum) { + return $this->getStorableEnumValue($enum); + })->toArray(); + } + + protected function getStorableEnumValue($enum) + { + if (is_string($enum) || is_int($enum)) { + return $enum; + } + + return $enum instanceof BackedEnum ? $enum->value : $enum->name; + } + }; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEnumCollection.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEnumCollection.php new file mode 100644 index 000000000..ca1feb5a9 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsEnumCollection.php @@ -0,0 +1,80 @@ +} $arguments + * @return CastsAttributes , iterable > + */ + public static function castUsing(array $arguments) + { + return new class($arguments) implements CastsAttributes + { + protected $arguments; + + public function __construct(array $arguments) + { + $this->arguments = $arguments; + } + + public function get($model, $key, $value, $attributes) + { + if (! isset($attributes[$key]) || is_null($attributes[$key])) { + return; + } + + $data = json_decode($attributes[$key], true); + + if (! is_array($data)) { + return; + } + + $enumClass = $this->arguments[0]; + + return (new Collection($data))->map(function ($value) use ($enumClass) { + return is_subclass_of($enumClass, BackedEnum::class) + ? $enumClass::from($value) + : constant($enumClass.'::'.$value); + }); + } + + public function set($model, $key, $value, $attributes) + { + $value = $value !== null + ? (new Collection($value))->map(function ($enum) { + return $this->getStorableEnumValue($enum); + })->toJson() + : null; + + return [$key => $value]; + } + + public function serialize($model, string $key, $value, array $attributes) + { + return (new Collection($value))->map(function ($enum) { + return $this->getStorableEnumValue($enum); + })->toArray(); + } + + protected function getStorableEnumValue($enum) + { + if (is_string($enum) || is_int($enum)) { + return $enum; + } + + return $enum instanceof BackedEnum ? $enum->value : $enum->name; + } + }; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsStringable.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsStringable.php index 912659f38..c2927d2ec 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsStringable.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Casts/AsStringable.php @@ -12,7 +12,7 @@ class AsStringable implements Castable * Get the caster class to use when casting from / to this cast target. * * @param array $arguments - * @return object|string + * @return CastsAttributes<\Illuminate\Support\Stringable, string|\Stringable> */ public static function castUsing(array $arguments) { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php index c512c8ba0..79785c67d 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php @@ -24,7 +24,7 @@ class Collection extends BaseCollection implements QueueableCollection * * @param mixed $key * @param TFindDefault $default - * @return static |TModel|TFindDefault + * @return static |TModel|TFindDefault */ public function find($key, $default = null) { @@ -44,9 +44,7 @@ class Collection extends BaseCollection implements QueueableCollection return $this->whereIn($this->first()->getKeyName(), $key); } - return Arr::first($this->items, function ($model) use ($key) { - return $model->getKey() == $key; - }, $default); + return Arr::first($this->items, fn ($model) => $model->getKey() == $key, $default); } /** @@ -233,9 +231,7 @@ class Collection extends BaseCollection implements QueueableCollection $relation = reset($relation); } - $models->filter(function ($model) use ($name) { - return ! is_null($model) && ! $model->relationLoaded($name); - })->load($relation); + $models->filter(fn ($model) => ! is_null($model) && ! $model->relationLoaded($name))->load($relation); if (empty($path)) { return; @@ -261,12 +257,8 @@ class Collection extends BaseCollection implements QueueableCollection { $this->pluck($relation) ->filter() - ->groupBy(function ($model) { - return get_class($model); - }) - ->each(function ($models, $className) use ($relations) { - static::make($models)->load($relations[$className] ?? []); - }); + ->groupBy(fn ($model) => get_class($model)) + ->each(fn ($models, $className) => static::make($models)->load($relations[$className] ?? [])); return $this; } @@ -282,12 +274,8 @@ class Collection extends BaseCollection implements QueueableCollection { $this->pluck($relation) ->filter() - ->groupBy(function ($model) { - return get_class($model); - }) - ->each(function ($models, $className) use ($relations) { - static::make($models)->loadCount($relations[$className] ?? []); - }); + ->groupBy(fn ($model) => get_class($model)) + ->each(fn ($models, $className) => static::make($models)->loadCount($relations[$className] ?? [])); return $this; } @@ -307,14 +295,10 @@ class Collection extends BaseCollection implements QueueableCollection } if ($key instanceof Model) { - return parent::contains(function ($model) use ($key) { - return $model->is($key); - }); + return parent::contains(fn ($model) => $model->is($key)); } - return parent::contains(function ($model) use ($key) { - return $model->getKey() == $key; - }); + return parent::contains(fn ($model) => $model->getKey() == $key); } /** @@ -324,9 +308,7 @@ class Collection extends BaseCollection implements QueueableCollection */ public function modelKeys() { - return array_map(function ($model) { - return $model->getKey(); - }, $this->items); + return array_map(fn ($model) => $model->getKey(), $this->items); } /** @@ -358,9 +340,7 @@ class Collection extends BaseCollection implements QueueableCollection { $result = parent::map($callback); - return $result->contains(function ($item) { - return ! $item instanceof Model; - }) ? $result->toBase() : $result; + return $result->contains(fn ($item) => ! $item instanceof Model) ? $result->toBase() : $result; } /** @@ -378,9 +358,7 @@ class Collection extends BaseCollection implements QueueableCollection { $result = parent::mapWithKeys($callback); - return $result->contains(function ($item) { - return ! $item instanceof Model; - }) ? $result->toBase() : $result; + return $result->contains(fn ($item) => ! $item instanceof Model) ? $result->toBase() : $result; } /** @@ -403,12 +381,8 @@ class Collection extends BaseCollection implements QueueableCollection ->get() ->getDictionary(); - return $this->filter(function ($model) use ($freshModels) { - return $model->exists && isset($freshModels[$model->getKey()]); - }) - ->map(function ($model) use ($freshModels) { - return $freshModels[$model->getKey()]; - }); + return $this->filter(fn ($model) => $model->exists && isset($freshModels[$model->getKey()])) + ->map(fn ($model) => $freshModels[$model->getKey()]); } /** @@ -584,7 +558,7 @@ class Collection extends BaseCollection implements QueueableCollection /** * Count the number of items in the collection by a field or using a callback. * - * @param (callable(TValue, TKey): array-key)|string|null $countBy + * @param (callable(TModel, TKey): array-key)|string|null $countBy * @return \Illuminate\Support\Collection */ public function countBy($countBy = null) @@ -676,13 +650,11 @@ class Collection extends BaseCollection implements QueueableCollection * Get the comparison function to detect duplicates. * * @param bool $strict - * @return callable(TValue, TValue): bool + * @return callable(TModel, TModel): bool */ protected function duplicateComparator($strict) { - return function ($a, $b) { - return $a->is($b); - }; + return fn ($a, $b) => $a->is($b); } /** @@ -801,9 +773,7 @@ class Collection extends BaseCollection implements QueueableCollection $class = get_class($model); - if ($this->filter(function ($model) use ($class) { - return ! $model instanceof $class; - })->isNotEmpty()) { + if ($this->filter(fn ($model) => ! $model instanceof $class)->isNotEmpty()) { throw new LogicException('Unable to create query for collection with mixed types.'); } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php index 7d65cdc25..37bc063aa 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php @@ -98,7 +98,7 @@ trait HasEvents [ 'retrieved', 'creating', 'created', 'updating', 'updated', 'saving', 'saved', 'restoring', 'restored', 'replicating', - 'deleting', 'deleted', 'forceDeleted', + 'deleting', 'deleted', 'forceDeleting', 'forceDeleted', ], $this->observables ); diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php index 25b6d1af4..1c71fe15c 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php @@ -7,6 +7,7 @@ use Illuminate\Database\ClassMorphViolationException; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\PendingHasThroughRelationship; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -359,6 +360,21 @@ trait HasRelationships return $caller['function']; } + /** + * Create a pending has-many-through or has-one-through relationship. + * + * @param string|\Illuminate\Database\Eloquent\Relations\HasMany|\Illuminate\Database\Eloquent\Relations\HasOne $relationship + * @return \Illuminate\Database\Eloquent\PendingHasThroughRelationship + */ + public function through($relationship) + { + if (is_string($relationship)) { + $relationship = $this->{$relationship}(); + } + + return new PendingHasThroughRelationship($this, $relationship); + } + /** * Define a one-to-many relationship. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/CrossJoinSequence.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/CrossJoinSequence.php index b0efbd0c8..3270b305c 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/CrossJoinSequence.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/CrossJoinSequence.php @@ -9,7 +9,7 @@ class CrossJoinSequence extends Sequence /** * Create a new cross join sequence instance. * - * @param array $sequences + * @param array ...$sequences * @return void */ public function __construct(...$sequences) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php index 7cec54cab..4a416b86b 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php @@ -525,7 +525,7 @@ abstract class Factory /** * Add a new sequenced state transformation to the model definition. * - * @param array $sequence + * @param mixed ...$sequence * @return static */ public function sequence(...$sequence) @@ -536,7 +536,7 @@ abstract class Factory /** * Add a new sequenced state transformation to the model definition and update the pending creation count to the size of the sequence. * - * @param array $sequence + * @param array ...$sequence * @return static */ public function forEachSequence(...$sequence) @@ -547,7 +547,7 @@ abstract class Factory /** * Add a new cross joined sequenced state transformation to the model definition. * - * @param array $sequence + * @param array ...$sequence * @return static */ public function crossJoinSequence(...$sequence) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Sequence.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Sequence.php index 064cc4a4e..e523fb3ee 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Sequence.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Sequence.php @@ -30,7 +30,7 @@ class Sequence implements Countable /** * Create a new sequence instance. * - * @param array $sequence + * @param mixed ...$sequence * @return void */ public function __construct(...$sequence) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php index 6b1e8b6e2..ae460d371 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php @@ -1083,6 +1083,16 @@ abstract class Model implements Arrayable, ArrayAccess, CanBeEscapedWhenCastToSt return true; } + /** + * Save the model and all of its relationships without raising any events to the parent model. + * + * @return bool + */ + public function pushQuietly() + { + return static::withoutEvents(fn () => $this->push()); + } + /** * Save the model to the database without raising any events. * @@ -2312,6 +2322,11 @@ abstract class Model implements Arrayable, ArrayAccess, CanBeEscapedWhenCastToSt return $resolver($this); } + if (Str::startsWith($method, 'through') && + method_exists($this, $relationMethod = Str::of($method)->after('through')->lcfirst()->toString())) { + return $this->through($relationMethod); + } + return $this->forwardCallTo($this->newQuery(), $method, $parameters); } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/PendingHasThroughRelationship.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/PendingHasThroughRelationship.php new file mode 100644 index 000000000..612c51e38 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/PendingHasThroughRelationship.php @@ -0,0 +1,90 @@ +rootModel = $rootModel; + + $this->localRelationship = $localRelationship; + } + + /** + * Define the distant relationship that this model has. + * + * @param string|(callable(\Illuminate\Database\Eloquent\Model): (\Illuminate\Database\Eloquent\Relations\HasOne|\Illuminate\Database\Eloquent\Relations\HasMany)) $callback + * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough|\Illuminate\Database\Eloquent\Relations\HasOneThrough + */ + public function has($callback) + { + if (is_string($callback)) { + $callback = fn () => $this->localRelationship->getRelated()->{$callback}(); + } + + $distantRelation = $callback($this->localRelationship->getRelated()); + + if ($distantRelation instanceof HasMany) { + return $this->rootModel->hasManyThrough( + $distantRelation->getRelated()::class, + $this->localRelationship->getRelated()::class, + $this->localRelationship->getForeignKeyName(), + $distantRelation->getForeignKeyName(), + $this->localRelationship->getLocalKeyName(), + $distantRelation->getLocalKeyName(), + ); + } + + return $this->rootModel->hasOneThrough( + $distantRelation->getRelated()::class, + $this->localRelationship->getRelated()::class, + $this->localRelationship->getForeignKeyName(), + $distantRelation->getForeignKeyName(), + $this->localRelationship->getLocalKeyName(), + $distantRelation->getLocalKeyName(), + ); + } + + /** + * Handle dynamic method calls into the model. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + if (Str::startsWith($method, 'has')) { + return $this->has(Str::of($method)->after('has')->lcfirst()->toString()); + } + + throw new BadMethodCallException(sprintf( + 'Call to undefined method %s::%s()', static::class, $method + )); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php index 622415787..6a9ec9ee0 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php @@ -688,8 +688,8 @@ class BelongsToMany extends Relation return $this->getRelated()->newCollection(); } - return $this->whereIn( - $this->getRelated()->getQualifiedKeyName(), $this->parseIds($ids) + return $this->whereKey( + $this->parseIds($ids) )->get($columns); } @@ -1153,8 +1153,6 @@ class BelongsToMany extends Relation */ public function touch() { - $key = $this->getRelated()->getKeyName(); - $columns = [ $this->related->getUpdatedAtColumn() => $this->related->freshTimestampString(), ]; @@ -1163,7 +1161,7 @@ class BelongsToMany extends Relation // the related model's timestamps, to make sure these all reflect the changes // to the parent models. This will help us keep any caching synced up here. if (count($ids = $this->allRelatedIds()) > 0) { - $this->getRelated()->newQueryWithoutRelationships()->whereIn($key, $ids)->update($columns); + $this->getRelated()->newQueryWithoutRelationships()->whereKey($ids)->update($columns); } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php index d1a76c182..01f0c1e56 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php @@ -323,6 +323,17 @@ abstract class HasOneOrMany extends Relation }); } + /** + * Create a new instance of the related model without raising any events to the parent model. + * + * @param array $attributes + * @return \Illuminate\Database\Eloquent\Model + */ + public function createQuietly(array $attributes = []) + { + return Model::withoutEvents(fn () => $this->create($attributes)); + } + /** * Create a new instance of the related model. Allow mass-assignment. * @@ -353,6 +364,17 @@ abstract class HasOneOrMany extends Relation return $instances; } + /** + * Create a Collection of new instances of the related model without raising any events to the parent model. + * + * @param iterable $records + * @return \Illuminate\Database\Eloquent\Collection + */ + public function createManyQuietly(iterable $records) + { + return Model::withoutEvents(fn () => $this->createMany($records)); + } + /** * Set the foreign ID for creating a related model. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php index 90025021d..da7a4a371 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php @@ -45,6 +45,10 @@ trait SoftDeletes */ public function forceDelete() { + if ($this->fireModelEvent('forceDeleting') === false) { + return false; + } + $this->forceDeleting = true; return tap($this->delete(), function ($deleted) { @@ -56,6 +60,16 @@ trait SoftDeletes }); } + /** + * Force a hard delete on a soft deleted model without raising any events. + * + * @return bool|null + */ + public function forceDeleteQuietly() + { + return static::withoutEvents(fn () => $this->forceDelete()); + } + /** * Perform the actual delete query on this model instance. * @@ -181,6 +195,17 @@ trait SoftDeletes static::registerModelEvent('restored', $callback); } + /** + * Register a "forceDeleting" model event callback with the dispatcher. + * + * @param \Closure|string $callback + * @return void + */ + public static function forceDeleting($callback) + { + static::registerModelEvent('forceDeleting', $callback); + } + /** * Register a "forceDeleted" model event callback with the dispatcher. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php index 7528964c1..e6d91d917 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php @@ -9,7 +9,7 @@ class SoftDeletingScope implements Scope * * @var string[] */ - protected $extensions = ['Restore', 'WithTrashed', 'WithoutTrashed', 'OnlyTrashed']; + protected $extensions = ['Restore', 'RestoreOrCreate', 'WithTrashed', 'WithoutTrashed', 'OnlyTrashed']; /** * Apply the scope to a given Eloquent query builder. @@ -74,6 +74,23 @@ class SoftDeletingScope implements Scope }); } + /** + * Add the restore-or-create extension to the builder. + * + * @param \Illuminate\Database\Eloquent\Builder $builder + * @return void + */ + protected function addRestoreOrCreate(Builder $builder) + { + $builder->macro('restoreOrCreate', function (Builder $builder, array $attributes = [], array $values = []) { + $builder->withTrashed(); + + return tap($builder->firstOrCreate($attributes, $values), function ($instance) { + $instance->restore(); + }); + }); + } + /** * Add the with-trashed extension to the builder. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Events/ConnectionEstablished.php b/vendor/laravel/framework/src/Illuminate/Database/Events/ConnectionEstablished.php new file mode 100644 index 000000000..22a45b834 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Events/ConnectionEstablished.php @@ -0,0 +1,8 @@ + + */ + protected static $requiredPathCache = []; + /** * The output interface implementation. * @@ -511,9 +518,13 @@ class Migrator return new $class; } - $migration = $this->files->getRequire($path); + $migration = static::$requiredPathCache[$path] ??= $this->files->getRequire($path); - return is_object($migration) ? $migration : new $class; + if (is_object($migration)) { + return clone $migration; + } + + return new $class; } /** @@ -729,7 +740,7 @@ class Migrator * Write to the console's output. * * @param string $component - * @param array |string $arguments + * @param array |string ...$arguments * @return void */ protected function write($component, ...$arguments) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php index bb874bbdc..6f98a8ce2 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php @@ -100,6 +100,13 @@ class Builder implements BuilderContract */ public $from; + /** + * The index hint for the query. + * + * @var \Illuminate\Database\Query\IndexHint + */ + public $indexHint; + /** * The table joins for the query. * @@ -411,6 +418,10 @@ class Builder implements BuilderContract $this->selectSub($column, $as); } else { + if (is_array($this->columns) && in_array($column, $this->columns, true)) { + continue; + } + $this->columns[] = $column; } } @@ -454,6 +465,45 @@ class Builder implements BuilderContract return $this; } + /** + * Add an index hint to suggest a query index. + * + * @param string $index + * @return $this + */ + public function useIndex($index) + { + $this->indexHint = new IndexHint('hint', $index); + + return $this; + } + + /** + * Add an index hint to force a query index. + * + * @param string $index + * @return $this + */ + public function forceIndex($index) + { + $this->indexHint = new IndexHint('force', $index); + + return $this; + } + + /** + * Add an index hint to ignore a query index. + * + * @param string $index + * @return $this + */ + public function ignoreIndex($index) + { + $this->indexHint = new IndexHint('ignore', $index); + + return $this; + } + /** * Add a join clause to the query. * @@ -2498,7 +2548,7 @@ class Builder implements BuilderContract /** * Lock the selected rows in the table for updating. * - * @return \Illuminate\Database\Query\Builder + * @return $this */ public function lockForUpdate() { @@ -2508,7 +2558,7 @@ class Builder implements BuilderContract /** * Share lock the selected rows in the table. * - * @return \Illuminate\Database\Query\Builder + * @return $this */ public function sharedLock() { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php index 5540c8650..e15c55644 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -36,6 +36,7 @@ class Grammar extends BaseGrammar 'aggregate', 'columns', 'from', + 'indexHint', 'joins', 'wheres', 'groups', diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php index f9733492d..131f8afb4 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php @@ -74,6 +74,22 @@ class MySqlGrammar extends Grammar return "match ({$columns}) against (".$value."{$mode}{$expanded})"; } + /** + * Compile the index hints for the query. + * + * @param \Illuminate\Database\Query\Builder $query + * @param \Illuminate\Database\Query\IndexHint $indexHint + * @return string + */ + protected function compileIndexHint(Builder $query, $indexHint) + { + return match ($indexHint->type) { + 'hint' => "use index ({$indexHint->index})", + 'force' => "force index ({$indexHint->index})", + default => "ignore index ({$indexHint->index})", + }; + } + /** * Compile an insert ignore statement into SQL. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php index 81b890b8b..8bf7d39f6 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php @@ -117,6 +117,20 @@ class SQLiteGrammar extends Grammar return "strftime('{$type}', {$this->wrap($where['column'])}) {$where['operator']} cast({$value} as text)"; } + /** + * Compile the index hints for the query. + * + * @param \Illuminate\Database\Query\Builder $query + * @param \Illuminate\Database\Query\IndexHint $indexHint + * @return string + */ + protected function compileIndexHint(Builder $query, $indexHint) + { + return $indexHint->type === 'force' + ? "indexed by {$indexHint->index}" + : ''; + } + /** * Compile a "JSON length" statement into SQL. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php index 222a2f129..baebb93b1 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php @@ -96,6 +96,20 @@ class SqlServerGrammar extends Grammar return $from; } + /** + * Compile the index hints for the query. + * + * @param \Illuminate\Database\Query\Builder $query + * @param \Illuminate\Database\Query\IndexHint $indexHint + * @return string + */ + protected function compileIndexHint(Builder $query, $indexHint) + { + return $indexHint->type === 'force' + ? "with (index({$indexHint->index}))" + : ''; + } + /** * {@inheritdoc} * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/IndexHint.php b/vendor/laravel/framework/src/Illuminate/Database/Query/IndexHint.php new file mode 100755 index 000000000..2a720a2de --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/IndexHint.php @@ -0,0 +1,33 @@ +type = $type; + $this->index = $index; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php index a03fcff77..3bb8b719e 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php @@ -63,4 +63,14 @@ class ForeignKeyDefinition extends Fluent { return $this->onDelete('set null'); } + + /** + * Indicate that deletes should have "no action". + * + * @return $this + */ + public function noActionOnDelete() + { + return $this->onDelete('no action'); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/PostgresSchemaState.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/PostgresSchemaState.php index b6d4273ff..cfb100d0c 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/PostgresSchemaState.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/PostgresSchemaState.php @@ -15,19 +15,16 @@ class PostgresSchemaState extends SchemaState */ public function dump(Connection $connection, $path) { - $excludedTables = collect($connection->getSchemaBuilder()->getAllTables()) - ->map->tablename - ->reject(function ($table) { - return $table === $this->migrationTable; - })->map(function ($table) { - return '--exclude-table-data="*.'.$table.'"'; - })->implode(' '); + $commands = collect([ + $this->baseDumpCommand().' --schema-only > '.$path, + $this->baseDumpCommand().' -t '.$this->migrationTable.' --data-only >> '.$path, + ]); - $this->makeProcess( - $this->baseDumpCommand().' --file="${:LARAVEL_LOAD_PATH}" '.$excludedTables - )->mustRun($this->output, array_merge($this->baseVariables($this->connection->getConfig()), [ - 'LARAVEL_LOAD_PATH' => $path, - ])); + $commands->map(function ($command, $path) { + $this->makeProcess($command)->mustRun($this->output, array_merge($this->baseVariables($this->connection->getConfig()), [ + 'LARAVEL_LOAD_PATH' => $path, + ])); + }); } /** @@ -58,7 +55,7 @@ class PostgresSchemaState extends SchemaState */ protected function baseDumpCommand() { - return 'pg_dump --no-owner --no-acl -Fc --host="${:LARAVEL_LOAD_HOST}" --port="${:LARAVEL_LOAD_PORT}" --username="${:LARAVEL_LOAD_USER}" --dbname="${:LARAVEL_LOAD_DATABASE}"'; + return 'pg_dump --no-owner --no-acl --host="${:LARAVEL_LOAD_HOST}" --port="${:LARAVEL_LOAD_PORT}" --username="${:LARAVEL_LOAD_USER}" --dbname="${:LARAVEL_LOAD_DATABASE}"'; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/SchemaState.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/SchemaState.php index e6f35ab91..58d9c3a43 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/SchemaState.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/SchemaState.php @@ -86,7 +86,7 @@ abstract class SchemaState /** * Create a new process instance. * - * @param array $arguments + * @param mixed ...$arguments * @return \Symfony\Component\Process\Process */ public function makeProcess(...$arguments) diff --git a/vendor/laravel/framework/src/Illuminate/Database/composer.json b/vendor/laravel/framework/src/Illuminate/Database/composer.json index 4a94f707d..ba2dc3040 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Database/composer.json @@ -16,7 +16,8 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", + "ext-pdo": "*", + "brick/math": "^0.9.3|^0.10.2|^0.11", "illuminate/collections": "^9.0", "illuminate/container": "^9.0", "illuminate/contracts": "^9.0", @@ -35,6 +36,7 @@ } }, "suggest": { + "ext-filter": "Required to use the Postgres database driver.", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.21).", "illuminate/console": "Required to use the database commands (^9.0).", diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php b/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php index 9857c9833..5a8d82ec9 100755 --- a/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php +++ b/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php @@ -112,7 +112,7 @@ class Encrypter implements EncrypterContract, StringEncrypter $tag = base64_encode($tag ?? ''); $mac = self::$supportedCiphers[strtolower($this->cipher)]['aead'] - ? '' // For AEAD-algoritms, the tag / MAC is returned by openssl_encrypt... + ? '' // For AEAD-algorithms, the tag / MAC is returned by openssl_encrypt... : $this->hash($iv, $value); $json = json_encode(compact('iv', 'value', 'mac', 'tag'), JSON_UNESCAPED_SLASHES); diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/composer.json b/vendor/laravel/framework/src/Illuminate/Encryption/composer.json index 333e57dfd..d43d876f2 100644 --- a/vendor/laravel/framework/src/Illuminate/Encryption/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Encryption/composer.json @@ -15,7 +15,7 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", + "ext-hash": "*", "ext-mbstring": "*", "ext-openssl": "*", "illuminate/contracts": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/AwsS3V3Adapter.php b/vendor/laravel/framework/src/Illuminate/Filesystem/AwsS3V3Adapter.php index 9c210c8fb..8e908e81a 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/AwsS3V3Adapter.php +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/AwsS3V3Adapter.php @@ -95,6 +95,40 @@ class AwsS3V3Adapter extends FilesystemAdapter return (string) $uri; } + /** + * Get a temporary upload URL for the file at the given path. + * + * @param string $path + * @param \DateTimeInterface $expiration + * @param array $options + * @return array + */ + public function temporaryUploadUrl($path, $expiration, array $options = []) + { + $command = $this->client->getCommand('PutObject', array_merge([ + 'Bucket' => $this->config['bucket'], + 'Key' => $this->prefixer->prefixPath($path), + ], $options)); + + $signedRequest = $this->client->createPresignedRequest( + $command, $expiration, $options + ); + + $uri = $signedRequest->getUri(); + + // If an explicit base URL has been set on the disk configuration then we will use + // it as the base URL instead of the default path. This allows the developer to + // have full control over the base path for this filesystem's generated URLs. + if (isset($this->config['temporary_url'])) { + $uri = $this->replaceBaseUrl($uri, $this->config['temporary_url']); + } + + return [ + 'url' => (string) $uri, + 'headers' => $signedRequest->getHeaders(), + ]; + } + /** * Get the underlying S3 client. * diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php b/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php index 16149cffc..41095fcca 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php @@ -195,9 +195,10 @@ class Filesystem * * @param string $path * @param string $content + * @param int|null $mode * @return void */ - public function replace($path, $content) + public function replace($path, $content, $mode = null) { // If the path already exists and is a symlink, get the real path... clearstatcache(true, $path); @@ -207,7 +208,11 @@ class Filesystem $tempPath = tempnam(dirname($path), basename($path)); // Fix permissions of tempPath because `tempnam()` creates it with permissions set to 0600... - chmod($tempPath, 0777 - umask()); + if (! is_null($mode)) { + chmod($tempPath, $mode); + } else { + chmod($tempPath, 0777 - umask()); + } file_put_contents($tempPath, $content); diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php index 87606c974..55d8be1eb 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php @@ -733,6 +733,25 @@ class FilesystemAdapter implements CloudFilesystemContract throw new RuntimeException('This driver does not support creating temporary URLs.'); } + /** + * Get a temporary upload URL for the file at the given path. + * + * @param string $path + * @param \DateTimeInterface $expiration + * @param array $options + * @return array + * + * @throws \RuntimeException + */ + public function temporaryUploadUrl($path, $expiration, array $options = []) + { + if (method_exists($this->adapter, 'temporaryUploadUrl')) { + return $this->adapter->temporaryUploadUrl($path, $expiration, $options); + } + + throw new RuntimeException('This driver does not support creating temporary upload URLs.'); + } + /** * Concatenate a path to a URL. * diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json b/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json index 13d52d8d4..dc5b92acc 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json @@ -32,7 +32,9 @@ } }, "suggest": { + "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-hash": "Required to use the Filesystem class.", "illuminate/http": "Required for handling uploaded files (^7.0).", "league/flysystem": "Required to use the Flysystem local driver (^3.0.16).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Application.php b/vendor/laravel/framework/src/Illuminate/Foundation/Application.php index 06cf5a034..9ab47c527 100755 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Application.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Application.php @@ -38,7 +38,7 @@ class Application extends Container implements ApplicationContract, CachesConfig * * @var string */ - const VERSION = '9.48.0'; + const VERSION = '9.52.0'; /** * The base path for the Laravel installation. @@ -567,7 +567,7 @@ class Application extends Container implements ApplicationContract, CachesConfig /** * Get or check the current application environment. * - * @param string|array $environments + * @param string|array ...$environments * @return string|bool */ public function environment(...$environments) @@ -656,9 +656,7 @@ class Application extends Container implements ApplicationContract, CachesConfig public function registerConfiguredProviders() { $providers = Collection::make($this->make('config')->get('app.providers')) - ->partition(function ($provider) { - return str_starts_with($provider, 'Illuminate\\'); - }); + ->partition(fn ($provider) => str_starts_with($provider, 'Illuminate\\')); $providers->splice(1, 0, [$this->make(PackageManifest::class)->providers()]); @@ -738,9 +736,7 @@ class Application extends Container implements ApplicationContract, CachesConfig { $name = is_string($provider) ? $provider : get_class($provider); - return Arr::where($this->serviceProviders, function ($value) use ($name) { - return $value instanceof $name; - }); + return Arr::where($this->serviceProviders, fn ($value) => $value instanceof $name); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php b/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php index 295c5fd44..83f19eea5 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php @@ -11,6 +11,7 @@ trait Dispatchable /** * Dispatch the job with the given arguments. * + * @param mixed ...$arguments * @return \Illuminate\Foundation\Bus\PendingDispatch */ public static function dispatch(...$arguments) @@ -67,6 +68,7 @@ trait Dispatchable * * Queueable jobs will be dispatched to the "sync" queue. * + * @param mixed ...$arguments * @return mixed */ public static function dispatchSync(...$arguments) @@ -89,6 +91,7 @@ trait Dispatchable /** * Dispatch a command to its appropriate handler after the current process. * + * @param mixed ...$arguments * @return mixed */ public static function dispatchAfterResponse(...$arguments) diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php index 2bd43f2b1..e9c12616f 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php @@ -185,7 +185,7 @@ class Kernel implements KernelContract } /** - * Register a callback to be invoked when the command lifecyle duration exceeds a given amount of time. + * Register a callback to be invoked when the command lifecycle duration exceeds a given amount of time. * * @param \DateTimeInterface|\Carbon\CarbonInterval|float|int $threshold * @param callable $handler diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ListenerMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ListenerMakeCommand.php index c5c704240..62e82ccd1 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ListenerMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ListenerMakeCommand.php @@ -6,7 +6,9 @@ use Illuminate\Console\Concerns\CreatesMatchingTest; use Illuminate\Console\GeneratorCommand; use Illuminate\Support\Str; use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; #[AsCommand(name: 'make:listener')] class ListenerMakeCommand extends GeneratorCommand @@ -125,4 +127,28 @@ class ListenerMakeCommand extends GeneratorCommand ['queued', null, InputOption::VALUE_NONE, 'Indicates the event listener should be queued'], ]; } + + /** + * Interact further with the user if they were prompted for missing arguments. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param \Symfony\Component\Console\Output\OutputInterface $output + * @return void + */ + protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output) + { + if ($this->isReservedName($this->getNameInput()) || $this->didReceiveOptions($input)) { + return; + } + + $event = $this->components->askWithCompletion( + 'What event should be listened for?', + $this->possibleEvents(), + 'none' + ); + + if ($event && $event !== 'none') { + $input->setOption('event', $event); + } + } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php index fe0982933..e998da518 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php @@ -43,7 +43,7 @@ class MailMakeCommand extends GeneratorCommand * * @var string */ - protected $type = 'Mail'; + protected $type = 'Mailable'; /** * Execute the console command. diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ModelMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ModelMakeCommand.php index c448a061b..dbc32855e 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ModelMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ModelMakeCommand.php @@ -6,7 +6,9 @@ use Illuminate\Console\Concerns\CreatesMatchingTest; use Illuminate\Console\GeneratorCommand; use Illuminate\Support\Str; use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; #[AsCommand(name: 'make:model')] class ModelMakeCommand extends GeneratorCommand @@ -233,4 +235,36 @@ class ModelMakeCommand extends GeneratorCommand ['requests', 'R', InputOption::VALUE_NONE, 'Create new form request classes and use them in the resource controller'], ]; } + + /** + * Interact further with the user if they were prompted for missing arguments. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param \Symfony\Component\Console\Output\OutputInterface $output + * @return void + */ + protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output) + { + if ($this->isReservedName($this->getNameInput()) || $this->didReceiveOptions($input)) { + return; + } + + collect($this->components->choice('Would you like any of the following?', [ + 'none', + 'all', + 'factory', + 'form requests', + 'migration', + 'policy', + 'resource controller', + 'seed', + ], default: 0, multiple: true)) + ->reject('none') + ->map(fn ($option) => match ($option) { + 'resource controller' => 'resource', + 'form requests' => 'requests', + default => $option, + }) + ->each(fn ($option) => $input->setOption($option, true)); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ObserverMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ObserverMakeCommand.php index 1187269da..039cb4e27 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ObserverMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ObserverMakeCommand.php @@ -5,7 +5,9 @@ namespace Illuminate\Foundation\Console; use Illuminate\Console\GeneratorCommand; use InvalidArgumentException; use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; #[AsCommand(name: 'make:observer')] class ObserverMakeCommand extends GeneratorCommand @@ -150,4 +152,28 @@ class ObserverMakeCommand extends GeneratorCommand ['model', 'm', InputOption::VALUE_OPTIONAL, 'The model that the observer applies to'], ]; } + + /** + * Interact further with the user if they were prompted for missing arguments. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param \Symfony\Component\Console\Output\OutputInterface $output + * @return void + */ + protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output) + { + if ($this->isReservedName($this->getNameInput()) || $this->didReceiveOptions($input)) { + return; + } + + $model = $this->components->askWithCompletion( + 'What model should this observer apply to?', + $this->possibleModels(), + 'none' + ); + + if ($model && $model !== 'none') { + $input->setOption('model', $model); + } + } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php index 4c895f633..7bc95b0e3 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php @@ -6,7 +6,9 @@ use Illuminate\Console\GeneratorCommand; use Illuminate\Support\Str; use LogicException; use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; #[AsCommand(name: 'make:policy')] class PolicyMakeCommand extends GeneratorCommand @@ -209,4 +211,28 @@ class PolicyMakeCommand extends GeneratorCommand ['guard', 'g', InputOption::VALUE_OPTIONAL, 'The guard that the policy relies on'], ]; } + + /** + * Interact further with the user if they were prompted for missing arguments. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param \Symfony\Component\Console\Output\OutputInterface $output + * @return void + */ + protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output) + { + if ($this->isReservedName($this->getNameInput()) || $this->didReceiveOptions($input)) { + return; + } + + $model = $this->components->askWithCompletion( + 'What model should this policy apply to?', + $this->possibleModels(), + 'none' + ); + + if ($model && $model !== 'none') { + $input->setOption('model', $model); + } + } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php index a17908282..58bf20405 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php @@ -84,12 +84,12 @@ class StubPublishCommand extends Command realpath(__DIR__.'/../../Routing/Console/stubs/controller.model.api.stub') => 'controller.model.api.stub', realpath(__DIR__.'/../../Routing/Console/stubs/controller.model.stub') => 'controller.model.stub', realpath(__DIR__.'/../../Routing/Console/stubs/controller.nested.api.stub') => 'controller.nested.api.stub', - realpath(__DIR__.'/../../Routing/Console/stubs/controller.nested.singleton.api.stub') => 'controller.stub', - realpath(__DIR__.'/../../Routing/Console/stubs/controller.nested.singleton.stub') => 'controller.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.nested.singleton.api.stub') => 'controller.nested.singleton.api.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.nested.singleton.stub') => 'controller.nested.singleton.stub', realpath(__DIR__.'/../../Routing/Console/stubs/controller.nested.stub') => 'controller.nested.stub', realpath(__DIR__.'/../../Routing/Console/stubs/controller.plain.stub') => 'controller.plain.stub', - realpath(__DIR__.'/../../Routing/Console/stubs/controller.singleton.api.stub') => 'controller.stub', - realpath(__DIR__.'/../../Routing/Console/stubs/controller.singleton.stub') => 'controller.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.singleton.api.stub') => 'controller.singleton.api.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.singleton.stub') => 'controller.singleton.stub', realpath(__DIR__.'/../../Routing/Console/stubs/controller.stub') => 'controller.stub', realpath(__DIR__.'/../../Routing/Console/stubs/middleware.stub') => 'middleware.stub', ]; diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php index ae8bcf2ac..f3dd30a07 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php @@ -5,7 +5,9 @@ namespace Illuminate\Foundation\Console; use Illuminate\Console\GeneratorCommand; use Illuminate\Support\Str; use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; #[AsCommand(name: 'make:test')] class TestMakeCommand extends GeneratorCommand @@ -120,4 +122,32 @@ class TestMakeCommand extends GeneratorCommand ['pest', 'p', InputOption::VALUE_NONE, 'Create a Pest test'], ]; } + + /** + * Interact further with the user if they were prompted for missing arguments. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param \Symfony\Component\Console\Output\OutputInterface $output + * @return void + */ + protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output) + { + if ($this->isReservedName($this->getNameInput()) || $this->didReceiveOptions($input)) { + return; + } + + $type = $this->components->choice('Which type of test would you like', [ + 'feature', + 'unit', + 'pest feature', + 'pest unit', + ], default: 0); + + match ($type) { + 'feature' => null, + 'unit' => $input->setOption('unit', true), + 'pest feature' => $input->setOption('pest', true), + 'pest unit' => tap($input)->setOption('pest', true)->setOption('unit', true), + }; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php index 310838878..5aa7e7563 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php @@ -51,21 +51,21 @@ class Kernel implements KernelContract /** * The application's middleware stack. * - * @var array + * @var array */ protected $middleware = []; /** * The application's route middleware groups. * - * @var array + * @var array > */ protected $middlewareGroups = []; /** * The application's route middleware. * - * @var array + * @var array */ protected $routeMiddleware = []; @@ -245,7 +245,7 @@ class Kernel implements KernelContract } /** - * Register a callback to be invoked when the requests lifecyle duration exceeds a given amount of time. + * Register a callback to be invoked when the requests lifecycle duration exceeds a given amount of time. * * @param \DateTimeInterface|\Carbon\CarbonInterval|float|int $threshold * @param callable $handler diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php index 522fd4488..c9aa6c437 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -19,7 +19,7 @@ class PreventRequestsDuringMaintenance /** * The URIs that should be accessible while maintenance mode is enabled. * - * @var array + * @var array */ protected $except = []; diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php index 15f5620a4..7ffcd5eaa 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php @@ -16,7 +16,7 @@ class TrimStrings extends TransformsRequest /** * The attributes that should not be trimmed. * - * @var array + * @var array */ protected $except = [ // @@ -53,7 +53,7 @@ class TrimStrings extends TransformsRequest return $value; } - return preg_replace('~^[\s]+|[\s]+$~u', '', $value) ?? trim($value); + return preg_replace('~^[\s\x{FEFF}\x{200B}]+|[\s\x{FEFF}\x{200B}]+$~u', '', $value) ?? trim($value); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php index bb9595fcf..811467872 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php @@ -34,7 +34,7 @@ class VerifyCsrfToken /** * The URIs that should be excluded from CSRF verification. * - * @var array + * @var array */ protected $except = []; diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php b/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php index b0044ae50..75d382d83 100755 --- a/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php @@ -122,9 +122,7 @@ class ProviderRepository return; } - $this->app->make('events')->listen($events, function () use ($provider) { - $this->app->register($provider); - }); + $this->app->make('events')->listen($events, fn () => $this->app->register($provider)); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php index adaf02810..4fb968bba 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php @@ -11,7 +11,7 @@ class EventServiceProvider extends ServiceProvider /** * The event handler mappings for the application. * - * @var array + * @var array > */ protected $listen = []; diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php index c45f0f9c6..c0f8dfb3d 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php @@ -168,6 +168,30 @@ trait InteractsWithDatabase ); } + /** + * Specify the number of database queries that should occur throughout the test. + * + * @param int $expected + * @param string|null $connection + * @return $this + */ + public function expectsDatabaseQueryCount($expected, $connection = null) + { + with($this->getConnection($connection), function ($connection) use ($expected) { + $actual = 0; + + $connection->listen(function () use (&$actual) { + $actual++; + }); + + $this->beforeApplicationDestroyed(function () use (&$actual, $expected, $connection) { + $this->assertSame($actual, $expected, "Expected {$expected} database queries on the [{$connection->getName()}] connection. {$actual} occurred."); + }); + }); + + return $this; + } + /** * Determine if the argument is a soft deletable model. * diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseTruncation.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseTruncation.php new file mode 100644 index 000000000..b3f1a14f9 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseTruncation.php @@ -0,0 +1,122 @@ +artisan('migrate:fresh', $this->migrateFreshUsing()); + + $this->app[Kernel::class]->setArtisan(null); + + RefreshDatabaseState::$migrated = true; + + return; + } + + // Always clear any test data on subsequent runs... + $this->truncateTablesForAllConnections(); + + if ($seeder = $this->seeder()) { + // Use a specific seeder class... + $this->artisan('db:seed', ['--class' => $seeder]); + } elseif ($this->shouldSeed()) { + // Use the default seeder class... + $this->artisan('db:seed'); + } + } + + /** + * Truncate the database tables for all configured connections. + * + * @return void + */ + protected function truncateTablesForAllConnections(): void + { + $database = $this->app->make('db'); + + collect($this->connectionsToTruncate()) + ->each(function ($name) use ($database) { + $connection = $database->connection($name); + + $connection->getSchemaBuilder()->withoutForeignKeyConstraints( + fn () => $this->truncateTablesForConnection($connection, $name) + ); + }); + } + + /** + * Truncate the database tables for the given database connection. + * + * @param \Illuminate\Database\ConnectionInterface $connection + * @param string|null $name + * @return void + */ + protected function truncateTablesForConnection(ConnectionInterface $connection, ?string $name): void + { + $dispatcher = $connection->getEventDispatcher(); + + $connection->unsetEventDispatcher(); + + collect(static::$allTables[$name] ??= $connection->getDoctrineSchemaManager()->listTableNames()) + ->when( + property_exists($this, 'tablesToTruncate'), + fn ($tables) => $tables->intersect($this->tablesToTruncate), + fn ($tables) => $tables->diff($this->exceptTables($name)) + ) + ->filter(fn ($table) => $connection->table($table)->exists()) + ->each(fn ($table) => $connection->table($table)->truncate()); + + $connection->setEventDispatcher($dispatcher); + } + + /** + * The database connections that should have their tables truncated. + * + * @return array + */ + protected function connectionsToTruncate(): array + { + return property_exists($this, 'connectionsToTruncate') + ? $this->connectionsToTruncate : [null]; + } + + /** + * Get the tables that should not be truncated. + * + * @param string|null $connectionName + * @return array + */ + protected function exceptTables(?string $connectionName): array + { + if (property_exists($this, 'exceptTables')) { + return array_merge( + $this->exceptTables[$connectionName] ?? [], + [$this->app['config']->get('database.migrations')] + ); + } + + return [$this->app['config']->get('database.migrations')]; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php index a782aeb79..e7968631c 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php @@ -131,6 +131,10 @@ abstract class TestCase extends BaseTestCase $this->runDatabaseMigrations(); } + if (isset($uses[DatabaseTruncation::class])) { + $this->truncateDatabaseTables(); + } + if (isset($uses[DatabaseTransactions::class])) { $this->beginDatabaseTransaction(); } diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/Concerns/DeterminesStatusCode.php b/vendor/laravel/framework/src/Illuminate/Http/Client/Concerns/DeterminesStatusCode.php new file mode 100644 index 000000000..ab9132006 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/Concerns/DeterminesStatusCode.php @@ -0,0 +1,157 @@ +status() === 200; + } + + /** + * Determine if the response code was 201 "Created" response. + * + * @return bool + */ + public function created() + { + return $this->status() === 201; + } + + /** + * Determine if the response code was 202 "Accepted" response. + * + * @return bool + */ + public function accepted() + { + return $this->status() === 202; + } + + /** + * Determine if the response code was the given status code and the body has no content. + * + * @param int $status + * @return bool + */ + public function noContent($status = 204) + { + return $this->status() === $status && $this->body() === ''; + } + + /** + * Determine if the response code was a 301 "Moved Permanently". + * + * @return bool + */ + public function movedPermanently() + { + return $this->status() === 301; + } + + /** + * Determine if the response code was a 302 "Found" response. + * + * @return bool + */ + public function found() + { + return $this->status() === 302; + } + + /** + * Determine if the response was a 400 "Bad Request" response. + * + * @return bool + */ + public function badRequest() + { + return $this->status() === 400; + } + + /** + * Determine if the response was a 401 "Unauthorized" response. + * + * @return bool + */ + public function unauthorized() + { + return $this->status() === 401; + } + + /** + * Determine if the response was a 402 "Payment Required" response. + * + * @return bool + */ + public function paymentRequired() + { + return $this->status() === 402; + } + + /** + * Determine if the response was a 403 "Forbidden" response. + * + * @return bool + */ + public function forbidden() + { + return $this->status() === 403; + } + + /** + * Determine if the response was a 404 "Not Found" response. + * + * @return bool + */ + public function notFound() + { + return $this->status() === 404; + } + + /** + * Determine if the response was a 408 "Request Timeout" response. + * + * @return bool + */ + public function requestTimeout() + { + return $this->status() === 408; + } + + /** + * Determine if the response was a 409 "Conflict" response. + * + * @return bool + */ + public function conflict() + { + return $this->status() === 409; + } + + /** + * Determine if the response was a 422 "Unprocessable Entity" response. + * + * @return bool + */ + public function unprocessableEntity() + { + return $this->status() === 422; + } + + /** + * Determine if the response was a 429 "Too Many Requests" response. + * + * @return bool + */ + public function tooManyRequests() + { + return $this->status() === 429; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php b/vendor/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php index 2d03204b9..d2ccd5717 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php @@ -9,6 +9,7 @@ use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\TransferException; use GuzzleHttp\HandlerStack; +use GuzzleHttp\UriTemplate\UriTemplate; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Http\Client\Events\ConnectionFailed; use Illuminate\Http\Client\Events\RequestSending; @@ -56,6 +57,13 @@ class PendingRequest */ protected $baseUrl = ''; + /** + * The parameters that can be substituted into the URL. + * + * @var array + */ + protected $urlParameters = []; + /** * The request body format. * @@ -343,7 +351,9 @@ class PendingRequest */ public function contentType(string $contentType) { - return $this->withHeaders(['Content-Type' => $contentType]); + $this->options['headers']['Content-Type'] = $contentType; + + return $this; } /** @@ -437,6 +447,19 @@ class PendingRequest }); } + /** + * Specify the URL parameters that can be substituted into the request URL. + * + * @param array $parameters + * @return $this + */ + public function withUrlParameters(array $parameters = []) + { + return tap($this, function () use ($parameters) { + $this->urlParameters = $parameters; + }); + } + /** * Specify the cookies that should be included with the request. * @@ -713,7 +736,7 @@ class PendingRequest * @param array $data * @return \Illuminate\Http\Client\Response */ - public function patch($url, $data = []) + public function patch(string $url, $data = []) { return $this->send('PATCH', $url, [ $this->bodyFormat => $data, @@ -727,7 +750,7 @@ class PendingRequest * @param array $data * @return \Illuminate\Http\Client\Response */ - public function put($url, $data = []) + public function put(string $url, $data = []) { return $this->send('PUT', $url, [ $this->bodyFormat => $data, @@ -741,7 +764,7 @@ class PendingRequest * @param array $data * @return \Illuminate\Http\Client\Response */ - public function delete($url, $data = []) + public function delete(string $url, $data = []) { return $this->send('DELETE', $url, empty($data) ? [] : [ $this->bodyFormat => $data, @@ -783,6 +806,8 @@ class PendingRequest $url = ltrim(rtrim($this->baseUrl, '/').'/'.ltrim($url, '/'), '/'); } + $url = $this->expandUrlParameters($url); + $options = $this->parseHttpOptions($options); [$this->pendingBody, $this->pendingFiles] = [null, []]; @@ -838,6 +863,17 @@ class PendingRequest }); } + /** + * Substitute the URL parameters in the given URL. + * + * @param string $url + * @return string + */ + protected function expandUrlParameters(string $url) + { + return UriTemplate::expand($url, $this->urlParameters); + } + /** * Parse the given HTTP options and set the appropriate additional options. * @@ -1176,7 +1212,7 @@ class PendingRequest /** * Replace the given options with the current request options. * - * @param array $options + * @param array ...$options * @return array */ public function mergeOptions(...$options) diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/Response.php b/vendor/laravel/framework/src/Illuminate/Http/Client/Response.php index 2e6e2d556..65fda6063 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Client/Response.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/Response.php @@ -9,7 +9,7 @@ use LogicException; class Response implements ArrayAccess { - use Macroable { + use Concerns\DeterminesStatusCode, Macroable { __call as macroCall; } @@ -164,16 +164,6 @@ class Response implements ArrayAccess return $this->status() >= 200 && $this->status() < 300; } - /** - * Determine if the response code was "OK". - * - * @return bool - */ - public function ok() - { - return $this->status() === 200; - } - /** * Determine if the response was a redirect. * @@ -184,36 +174,6 @@ class Response implements ArrayAccess return $this->status() >= 300 && $this->status() < 400; } - /** - * Determine if the response was a 401 "Unauthorized" response. - * - * @return bool - */ - public function unauthorized() - { - return $this->status() === 401; - } - - /** - * Determine if the response was a 403 "Forbidden" response. - * - * @return bool - */ - public function forbidden() - { - return $this->status() === 403; - } - - /** - * Determine if the response was a 404 "Not Found" response. - * - * @return bool - */ - public function notFound() - { - return $this->status() === 404; - } - /** * Determine if the response indicates a client or server error occurred. * @@ -350,6 +310,66 @@ class Response implements ArrayAccess return value($condition, $this) ? $this->throw(func_get_args()[1] ?? null) : $this; } + /** + * Throw an exception if the response status code matches the given code. + * + * @param callable|int $statusCode + * @return $this + * + * @throws \Illuminate\Http\Client\RequestException + */ + public function throwIfStatus($statusCode) + { + if (is_callable($statusCode) && + $statusCode($this->status(), $this)) { + return $this->throw(); + } + + return $this->status() === $statusCode ? $this->throw() : $this; + } + + /** + * Throw an exception unless the response status code matches the given code. + * + * @param callable|int $statusCode + * @return $this + * + * @throws \Illuminate\Http\Client\RequestException + */ + public function throwUnlessStatus($statusCode) + { + if (is_callable($statusCode) && + ! $statusCode($this->status(), $this)) { + return $this->throw(); + } + + return $this->status() === $statusCode ? $this : $this->throw(); + } + + /** + * Throw an exception if the response status code is a 4xx level code. + * + * @return $this + * + * @throws \Illuminate\Http\Client\RequestException + */ + public function throwIfClientError() + { + return $this->clientError() ? $this->throw() : $this; + } + + /** + * Throw an exception if the response status code is a 5xx level code. + * + * @return $this + * + * @throws \Illuminate\Http\Client\RequestException + */ + public function throwIfServerError() + { + return $this->serverError() ? $this->throw() : $this; + } + /** * Determine if the given offset exists. * diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php b/vendor/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php index ddcecbd56..5925c03bc 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php @@ -143,11 +143,11 @@ class ResponseSequence */ public function __invoke() { - if ($this->failWhenEmpty && count($this->responses) === 0) { + if ($this->failWhenEmpty && $this->isEmpty()) { throw new OutOfBoundsException('A request was made, but the response sequence is empty.'); } - if (! $this->failWhenEmpty && count($this->responses) === 0) { + if (! $this->failWhenEmpty && $this->isEmpty()) { return value($this->emptyResponse ?? Factory::response()); } diff --git a/vendor/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php b/vendor/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php index 835753113..45d8b6443 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php @@ -246,7 +246,7 @@ trait InteractsWithInput } /** - * Determine if the given input key is an empty string for "has". + * Determine if the given input key is an empty string for "filled". * * @param string $key * @return bool @@ -590,7 +590,7 @@ trait InteractsWithInput * Retrieve a parameter item from a given source. * * @param string $source - * @param string $key + * @param string|null $key * @param string|array|null $default * @return string|array|null */ @@ -610,7 +610,7 @@ trait InteractsWithInput /** * Dump the request items and end the script. * - * @param mixed $keys + * @param mixed ...$keys * @return never */ public function dd(...$keys) diff --git a/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php b/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php index fd2514e14..faf5daf8d 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php @@ -10,7 +10,7 @@ class TrustProxies /** * The trusted proxies for the application. * - * @var array|string|null + * @var array |string|null */ protected $proxies; diff --git a/vendor/laravel/framework/src/Illuminate/Http/composer.json b/vendor/laravel/framework/src/Illuminate/Http/composer.json index 081009b12..f20efc8dc 100755 --- a/vendor/laravel/framework/src/Illuminate/Http/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Http/composer.json @@ -15,8 +15,9 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", + "ext-filter": "*", "fruitcake/php-cors": "^1.2", + "guzzlehttp/uri-template": "^1.0", "illuminate/collections": "^9.0", "illuminate/macroable": "^9.0", "illuminate/session": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Log/LogManager.php b/vendor/laravel/framework/src/Illuminate/Log/LogManager.php index f528bc58e..bf6f1d969 100644 --- a/vendor/laravel/framework/src/Illuminate/Log/LogManager.php +++ b/vendor/laravel/framework/src/Illuminate/Log/LogManager.php @@ -553,7 +553,7 @@ class LogManager implements LoggerInterface * Unset the given channel instance. * * @param string|null $driver - * @return $this + * @return void */ public function forgetChannel($driver = null) { diff --git a/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php b/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php index 7e813462e..daa5a0322 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php @@ -3,12 +3,14 @@ namespace Illuminate\Mail; use Aws\Ses\SesClient; +use Aws\SesV2\SesV2Client; use Closure; use Illuminate\Contracts\Mail\Factory as FactoryContract; use Illuminate\Log\LogManager; use Illuminate\Mail\Transport\ArrayTransport; use Illuminate\Mail\Transport\LogTransport; use Illuminate\Mail\Transport\SesTransport; +use Illuminate\Mail\Transport\SesV2Transport; use Illuminate\Support\Arr; use Illuminate\Support\Str; use InvalidArgumentException; @@ -154,7 +156,8 @@ class MailManager implements FactoryContract return call_user_func($this->customCreators[$transport], $config); } - if (trim($transport ?? '') === '' || ! method_exists($this, $method = 'create'.ucfirst($transport).'Transport')) { + if (trim($transport ?? '') === '' || + ! method_exists($this, $method = 'create'.ucfirst(Str::camel($transport)).'Transport')) { throw new InvalidArgumentException("Unsupported mail transport [{$transport}]."); } @@ -171,8 +174,16 @@ class MailManager implements FactoryContract { $factory = new EsmtpTransportFactory; + $scheme = $config['scheme'] ?? null; + + if (! $scheme) { + $scheme = ! empty($config['encryption']) && $config['encryption'] === 'tls' + ? (($config['port'] == 465) ? 'smtps' : 'smtp') + : ''; + } + $transport = $factory->create(new Dsn( - ! empty($config['encryption']) && $config['encryption'] === 'tls' ? (($config['port'] == 465) ? 'smtps' : 'smtp') : '', + $scheme, $config['host'], $config['username'] ?? null, $config['password'] ?? null, @@ -242,6 +253,28 @@ class MailManager implements FactoryContract ); } + /** + * Create an instance of the Symfony Amazon SES V2 Transport driver. + * + * @param array $config + * @return \Illuminate\Mail\Transport\Se2VwTransport + */ + protected function createSesV2Transport(array $config) + { + $config = array_merge( + $this->app['config']->get('services.ses', []), + ['version' => 'latest'], + $config + ); + + $config = Arr::except($config, ['transport']); + + return new SesV2Transport( + new SesV2Client($this->addSesCredentials($config)), + $config['options'] ?? [] + ); + } + /** * Add the SES credentials to the configuration array. * @@ -271,7 +304,7 @@ class MailManager implements FactoryContract * Create an instance of the Symfony Mailgun Transport driver. * * @param array $config - * @return \Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunApiTransport + * @return \Symfony\Component\Mailer\Transport\TransportInterface */ protected function createMailgunTransport(array $config) { diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php b/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php index c5d3ea561..4c291f64c 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php @@ -695,7 +695,9 @@ class Mailable implements MailableContract, Renderable } $this->{$property} = collect($this->{$property}) + ->reverse() ->unique('address') + ->reverse() ->values() ->all(); @@ -1265,7 +1267,7 @@ class Mailable implements MailableContract, Renderable } /** - * Format the mailable recipeint for display in an assertion message. + * Format the mailable recipient for display in an assertion message. * * @param object|array|string $address * @param string|null $name diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php b/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php index 4a253cf29..bfb188c73 100755 --- a/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php @@ -253,6 +253,8 @@ class Mailer implements MailerContract, MailQueueContract return $this->sendMailable($view); } + $data['mailer'] = $this->name; + // First we need to parse the view, which could either be a string or an array // containing both an HTML and plain text versions of the view which should // be used when sending an e-mail. We will extract both of them out here. diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/SesTransport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/SesTransport.php index d6a64da89..9db7734c6 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Transport/SesTransport.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Transport/SesTransport.php @@ -88,16 +88,6 @@ class SesTransport extends AbstractTransport $message->getOriginalMessage()->getHeaders()->addHeader('X-SES-Message-ID', $messageId); } - /** - * Get the string representation of the transport. - * - * @return string - */ - public function __toString(): string - { - return 'ses'; - } - /** * Get the Amazon SES client for the SesTransport instance. * @@ -128,4 +118,14 @@ class SesTransport extends AbstractTransport { return $this->options = $options; } + + /** + * Get the string representation of the transport. + * + * @return string + */ + public function __toString(): string + { + return 'ses'; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/SesV2Transport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/SesV2Transport.php new file mode 100644 index 000000000..4157570e5 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Mail/Transport/SesV2Transport.php @@ -0,0 +1,135 @@ +ses = $ses; + $this->options = $options; + + parent::__construct(); + } + + /** + * {@inheritDoc} + */ + protected function doSend(SentMessage $message): void + { + $options = $this->options; + + if ($message->getOriginalMessage() instanceof Message) { + foreach ($message->getOriginalMessage()->getHeaders()->all() as $header) { + if ($header instanceof MetadataHeader) { + $options['Tags'][] = ['Name' => $header->getKey(), 'Value' => $header->getValue()]; + } + } + } + + try { + $result = $this->ses->sendEmail( + array_merge( + $options, [ + 'ReplyToAddresses' => [$message->getEnvelope()->getSender()->toString()], + 'Destination' => [ + 'ToAddresses' => collect($message->getEnvelope()->getRecipients()) + ->map + ->toString() + ->values() + ->all(), + ], + 'Content' => [ + 'Raw' => [ + 'Data' => $message->toString(), + ], + ], + ] + ) + ); + } catch (AwsException $e) { + $reason = $e->getAwsErrorMessage() ?? $e->getMessage(); + + throw new Exception( + sprintf('Request to AWS SES V2 API failed. Reason: %s.', $reason), + is_int($e->getCode()) ? $e->getCode() : 0, + $e + ); + } + + $messageId = $result->get('MessageId'); + + $message->getOriginalMessage()->getHeaders()->addHeader('X-Message-ID', $messageId); + $message->getOriginalMessage()->getHeaders()->addHeader('X-SES-Message-ID', $messageId); + } + + /** + * Get the Amazon SES V2 client for the SesV2Transport instance. + * + * @return \Aws\SesV2\SesV2Client + */ + public function ses() + { + return $this->ses; + } + + /** + * Get the transmission options being used by the transport. + * + * @return array + */ + public function getOptions() + { + return $this->options; + } + + /** + * Set the transmission options being used by the transport. + * + * @param array $options + * @return array + */ + public function setOptions(array $options) + { + return $this->options = $options; + } + + /** + * Get the string representation of the transport. + * + * @return string + */ + public function __toString(): string + { + return 'ses-v2'; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Mail/composer.json b/vendor/laravel/framework/src/Illuminate/Mail/composer.json index 20fda047a..6d3d34681 100755 --- a/vendor/laravel/framework/src/Illuminate/Mail/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Mail/composer.json @@ -15,7 +15,6 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", "illuminate/collections": "^9.0", "illuminate/container": "^9.0", "illuminate/contracts": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/layout.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/layout.blade.php index c0301be7e..e55f6a6d9 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/layout.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/layout.blade.php @@ -1,6 +1,7 @@ + {{ config('app.name') }} diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/composer.json b/vendor/laravel/framework/src/Illuminate/Pagination/composer.json index 3edd0d73f..1b054f5b9 100755 --- a/vendor/laravel/framework/src/Illuminate/Pagination/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Pagination/composer.json @@ -15,7 +15,7 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", + "ext-filter": "*", "illuminate/collections": "^9.0", "illuminate/contracts": "^9.0", "illuminate/support": "^9.0" diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php index abf580fd9..77e8221d9 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php @@ -207,7 +207,7 @@ class WorkCommand extends Command { $this->output->write(sprintf( '%s> %s%s', - Carbon::now()->format('Y-m-d H:i:s'), + $this->now()->format('Y-m-d H:i:s'), $job->resolveName(), $this->output->isVerbose() ? sprintf(' %s>', $job->getJobId()) @@ -242,6 +242,23 @@ class WorkCommand extends Command }); } + /** + * Get the current date / time. + * + * @return \Illuminate\Support\Carbon + */ + protected function now() + { + $queueTimezone = $this->laravel['config']->get('queue.output_timezone'); + + if ($queueTimezone && + $queueTimezone !== $this->laravel['config']->get('app.timezone')) { + return Carbon::now()->setTimezone($queueTimezone); + } + + return Carbon::now(); + } + /** * Store a failed job event. * diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Middleware/SkipIfBatchCancelled.php b/vendor/laravel/framework/src/Illuminate/Queue/Middleware/SkipIfBatchCancelled.php new file mode 100644 index 000000000..75a338717 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Queue/Middleware/SkipIfBatchCancelled.php @@ -0,0 +1,22 @@ +batch()?->cancelled()) { + return; + } + + $next($job); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Worker.php b/vendor/laravel/framework/src/Illuminate/Queue/Worker.php index 8be7a10f2..438e3f46b 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Worker.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Worker.php @@ -224,7 +224,7 @@ class Worker } $this->kill(static::EXIT_ERROR, $options); - }); + }, true); pcntl_alarm( max($this->timeoutForJob($job, $options), 0) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/composer.json b/vendor/laravel/framework/src/Illuminate/Queue/composer.json index f96817389..17d535f83 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Queue/composer.json @@ -15,7 +15,6 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", "illuminate/collections": "^9.0", "illuminate/console": "^9.0", "illuminate/container": "^9.0", @@ -39,6 +38,9 @@ } }, "suggest": { + "ext-pdo": "Required to use the database queue worker.", + "ext-filter": "Required to use the SQS queue worker.", + "ext-mbstring": "Required to use the database failed job providers.", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", "aws/aws-sdk-php": "Required to use the SQS queue driver and DynamoDb failed job storage (^3.235.5).", diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php index d4c1f6762..0f39ae931 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php @@ -105,7 +105,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract * Get the value of the given hash fields. * * @param string $key - * @param mixed $dictionary + * @param mixed ...$dictionary * @return array */ public function hmget($key, ...$dictionary) @@ -121,7 +121,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract * Set the given hash fields to their respective values. * * @param string $key - * @param mixed $dictionary + * @param mixed ...$dictionary * @return int */ public function hmset($key, ...$dictionary) @@ -166,7 +166,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract /** * Removes and returns the first element of the list stored at key. * - * @param mixed $arguments + * @param mixed ...$arguments * @return array|null */ public function blpop(...$arguments) @@ -179,7 +179,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract /** * Removes and returns the last element of the list stored at key. * - * @param mixed $arguments + * @param mixed ...$arguments * @return array|null */ public function brpop(...$arguments) @@ -205,7 +205,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract * Add one or more members to a sorted set or update its score if it already exists. * * @param string $key - * @param mixed $dictionary + * @param mixed ...$dictionary * @return int */ public function zadd($key, ...$dictionary) @@ -426,7 +426,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract * * @param string $script * @param int $numkeys - * @param mixed $arguments + * @param mixed ...$arguments * @return mixed */ public function evalsha($script, $numkeys, ...$arguments) @@ -441,7 +441,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract * * @param string $script * @param int $numberOfKeys - * @param dynamic $arguments + * @param dynamic ...$arguments * @return mixed */ public function eval($script, $numberOfKeys, ...$arguments) diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisClusterConnection.php b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisClusterConnection.php index 6d07de161..dbf91dc46 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisClusterConnection.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisClusterConnection.php @@ -2,6 +2,7 @@ namespace Illuminate\Redis\Connections; +use Predis\Command\Redis\FLUSHDB; use Predis\Command\ServerFlushDatabase; class PredisClusterConnection extends PredisConnection @@ -13,8 +14,12 @@ class PredisClusterConnection extends PredisConnection */ public function flushdb() { - $this->client->executeCommandOnNodes( - tap(new ServerFlushDatabase)->setArguments(func_get_args()) - ); + $command = class_exists(ServerFlushDatabase::class) + ? ServerFlushDatabase::class + : FLUSHDB::class; + + foreach ($this->client as $node) { + $node->executeCommand(tap(new $command)->setArguments(func_get_args())); + } } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php index 6ba0a3886..13e6250ed 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php @@ -6,7 +6,9 @@ use Illuminate\Console\Concerns\CreatesMatchingTest; use Illuminate\Console\GeneratorCommand; use InvalidArgumentException; use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; #[AsCommand(name: 'make:controller')] class ControllerMakeCommand extends GeneratorCommand @@ -297,4 +299,42 @@ class ControllerMakeCommand extends GeneratorCommand ['creatable', null, InputOption::VALUE_NONE, 'Indicate that a singleton resource should be creatable'], ]; } + + /** + * Interact further with the user if they were prompted for missing arguments. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @param \Symfony\Component\Console\Output\OutputInterface $output + * @return void + */ + protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output) + { + if ($this->didReceiveOptions($input)) { + return; + } + + $type = $this->components->choice('Which type of controller would you like', [ + 'empty', + 'api', + 'invokable', + 'resource', + 'singleton', + ], default: 0); + + if ($type !== 'empty') { + $input->setOption($type, true); + } + + if (in_array($type, ['api', 'resource', 'singleton'])) { + $model = $this->components->askWithCompletion( + "What model should this $type controller be for?", + $this->possibleModels(), + 'none' + ); + + if ($model && $model !== 'none') { + $input->setOption('model', $model); + } + } + } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php b/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php index e43d59199..8ffa2a8bd 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php @@ -54,6 +54,6 @@ class Pipeline extends BasePipeline $response->withException($e); } - return $response; + return $this->handleCarry($response); } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ViewController.php b/vendor/laravel/framework/src/Illuminate/Routing/ViewController.php index 54a73595f..f5b5525d8 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/ViewController.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/ViewController.php @@ -27,7 +27,7 @@ class ViewController extends Controller /** * Invoke the controller method. * - * @param array $args + * @param mixed ...$args * @return \Illuminate\Http\Response */ public function __invoke(...$args) diff --git a/vendor/laravel/framework/src/Illuminate/Routing/composer.json b/vendor/laravel/framework/src/Illuminate/Routing/composer.json index 2b3aa1a7a..4e5d286b8 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Routing/composer.json @@ -15,7 +15,8 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", + "ext-filter": "*", + "ext-hash": "*", "illuminate/collections": "^9.0", "illuminate/container": "^9.0", "illuminate/contracts": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php index c20e8e88a..7e64f465c 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php @@ -242,7 +242,7 @@ class DatabaseSessionHandler implements ExistenceAwareInterface, SessionHandlerI /** * Get the IP address for the current request. * - * @return string + * @return string|null */ protected function ipAddress() { diff --git a/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php b/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php index a12d6ad02..51e4a1453 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php +++ b/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php @@ -13,7 +13,7 @@ class SessionManager extends Manager * Call a custom driver creator. * * @param string $driver - * @return mixed + * @return \Illuminate\Session\Store */ protected function callCustomCreator($driver) { diff --git a/vendor/laravel/framework/src/Illuminate/Session/composer.json b/vendor/laravel/framework/src/Illuminate/Session/composer.json index f29d59d4d..5b4efeae9 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Session/composer.json @@ -15,7 +15,8 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", + "ext-ctype": "*", + "ext-session": "*", "illuminate/collections": "^9.0", "illuminate/contracts": "^9.0", "illuminate/filesystem": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php index a58b2142a..ff537e4df 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php @@ -13,7 +13,7 @@ namespace Illuminate\Support\Facades; * @method static void extend(callable $compiler) * @method static array getExtensions() * @method static void if(string $name, callable $callback) - * @method static bool check(string $name, array ...$parameters) + * @method static bool check(string $name, mixed ...$parameters) * @method static void component(string $class, string|null $alias = null, string $prefix = '') * @method static void components(array $components, string $prefix = '') * @method static array getClassComponentAliases() diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php index 986784c54..62ac0588b 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php @@ -22,14 +22,14 @@ use Illuminate\Support\Testing\Fakes\BusFake; * @method static \Illuminate\Bus\Dispatcher map(array $map) * @method static void except(array|string $jobsToDispatch) * @method static void assertDispatched(string|\Closure $command, callable|int|null $callback = null) - * @method static void assertDispatchedTimes(string $command, int $times = 1) + * @method static void assertDispatchedTimes(string|\Closure $command, int $times = 1) * @method static void assertNotDispatched(string|\Closure $command, callable|null $callback = null) * @method static void assertNothingDispatched() * @method static void assertDispatchedSync(string|\Closure $command, callable|int|null $callback = null) - * @method static void assertDispatchedSyncTimes(string $command, int $times = 1) + * @method static void assertDispatchedSyncTimes(string|\Closure $command, int $times = 1) * @method static void assertNotDispatchedSync(string|\Closure $command, callable|null $callback = null) * @method static void assertDispatchedAfterResponse(string|\Closure $command, callable|int|null $callback = null) - * @method static void assertDispatchedAfterResponseTimes(string $command, int $times = 1) + * @method static void assertDispatchedAfterResponseTimes(string|\Closure $command, int $times = 1) * @method static void assertNotDispatchedAfterResponse(string|\Closure $command, callable|null $callback = null) * @method static void assertChained(array $expectedChain) * @method static void assertDispatchedWithoutChain(string|\Closure $command, callable|null $callback = null) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php index a5a1a60df..7063fef41 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php @@ -12,7 +12,7 @@ namespace Illuminate\Support\Facades; * @method static \Illuminate\Support\LazyCollection lines(string $path) * @method static string hash(string $path, string $algorithm = 'md5') * @method static int|bool put(string $path, string $contents, bool $lock = false) - * @method static void replace(string $path, string $content) + * @method static void replace(string $path, string $content, int|null $mode = null) * @method static void replaceInFile(array|string $search, array|string $replace, string $path) * @method static int prepend(string $path, string $data) * @method static int append(string $path, string $data) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php index c35fbdbe2..4aab84148 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php @@ -37,6 +37,7 @@ use Illuminate\Http\Client\Factory; * @method static \Illuminate\Http\Client\PendingRequest withDigestAuth(string $username, string $password) * @method static \Illuminate\Http\Client\PendingRequest withToken(string $token, string $type = 'Bearer') * @method static \Illuminate\Http\Client\PendingRequest withUserAgent(string $userAgent) + * @method static \Illuminate\Http\Client\PendingRequest withUrlParameters(array $parameters = []) * @method static \Illuminate\Http\Client\PendingRequest withCookies(array $cookies, string $domain) * @method static \Illuminate\Http\Client\PendingRequest maxRedirects(int $max) * @method static \Illuminate\Http\Client\PendingRequest withoutRedirecting() diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php index a87088a3f..992282cb2 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php @@ -22,6 +22,7 @@ namespace Illuminate\Support\Facades; * @method static string getFallback() * @method static void setFallback(string $fallback) * @method static void setLoaded(array $loaded) + * @method static void stringable(callable|string $class, callable|null $handler = null) * @method static void setParsedKey(string $key, array $parsed) * @method static void flushParsedKeys() * @method static void macro(string $name, object|callable $macro) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php index c00fac374..48cd34086 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php @@ -13,7 +13,7 @@ namespace Illuminate\Support\Facades; * @method static string|null getDefaultDriver() * @method static void setDefaultDriver(string $name) * @method static \Illuminate\Log\LogManager extend(string $driver, \Closure $callback) - * @method static \Illuminate\Log\LogManager forgetChannel(string|null $driver = null) + * @method static void forgetChannel(string|null $driver = null) * @method static array getChannels() * @method static void emergency(string $message, array $context = []) * @method static void alert(string $message, array $context = []) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php index a36f61334..e1ea7534b 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php @@ -47,8 +47,8 @@ namespace Illuminate\Support\Facades; * @method static string getName() * @method static void setName(string $name) * @method static string getId() - * @method static void setId(string $id) - * @method static bool isValidId(string $id) + * @method static void setId(string|null $id) + * @method static bool isValidId(string|null $id) * @method static void setExists(bool $value) * @method static string token() * @method static void regenerateToken() @@ -56,7 +56,7 @@ namespace Illuminate\Support\Facades; * @method static void setPreviousUrl(string $url) * @method static void passwordConfirmed() * @method static \SessionHandlerInterface getHandler() - * @method static void setHandler(\SessionHandlerInterface $handler) + * @method static \SessionHandlerInterface setHandler(\SessionHandlerInterface $handler) * @method static bool handlerNeedsRequest() * @method static void setRequestOnHandler(\Illuminate\Http\Request $request) * @method static void macro(string $name, object|callable $macro) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php index 0d13bb507..f8fcddd21 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php @@ -59,6 +59,7 @@ use Illuminate\Filesystem\Filesystem; * @method static string url(string $path) * @method static bool providesTemporaryUrls() * @method static string temporaryUrl(string $path, \DateTimeInterface $expiration, array $options = []) + * @method static array temporaryUploadUrl(string $path, \DateTimeInterface $expiration, array $options = []) * @method static \League\Flysystem\FilesystemOperator getDriver() * @method static \League\Flysystem\FilesystemAdapter getAdapter() * @method static array getConfig() diff --git a/vendor/laravel/framework/src/Illuminate/Support/Js.php b/vendor/laravel/framework/src/Illuminate/Support/Js.php index 5a1d23ae2..69e9a7626 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Js.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Js.php @@ -2,6 +2,7 @@ namespace Illuminate\Support; +use BackedEnum; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Contracts\Support\Jsonable; @@ -69,6 +70,10 @@ class Js implements Htmlable return $data->toHtml(); } + if ($data instanceof BackedEnum) { + $data = $data->value; + } + $json = $this->jsonEncode($data, $flags, $depth); if (is_string($data)) { diff --git a/vendor/laravel/framework/src/Illuminate/Support/Lottery.php b/vendor/laravel/framework/src/Illuminate/Support/Lottery.php index 2d4ca4c42..9bf3b47d0 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Lottery.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Lottery.php @@ -259,7 +259,7 @@ class Lottery } /** - * Set the factory that should be used to deterine the lottery results. + * Set the factory that should be used to determine the lottery results. * * @param callable $factory * @return void diff --git a/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php b/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php index 9a9228c76..0d909de1e 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php @@ -28,8 +28,6 @@ class Pluralizer * @var string[] */ public static $uncountable = [ - 'cattle', - 'kin', 'recommended', 'related', ]; diff --git a/vendor/laravel/framework/src/Illuminate/Support/Str.php b/vendor/laravel/framework/src/Illuminate/Support/Str.php index 8b23bfad5..2c7912ed9 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Str.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Str.php @@ -735,7 +735,9 @@ class Str while (($len = strlen($string)) < $length) { $size = $length - $len; - $bytes = random_bytes($size); + $bytesSize = (int) ceil(($size) / 3) * 3; + + $bytes = random_bytes($bytesSize); $string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size); } @@ -1073,7 +1075,7 @@ class Str */ public static function squish($value) { - return preg_replace('~(\s|\x{3164})+~u', ' ', preg_replace('~^[\s]+|[\s]+$~u', '', $value)); + return preg_replace('~(\s|\x{3164})+~u', ' ', preg_replace('~^[\s\x{FEFF}]+|[\s\x{FEFF}]+$~u', '', $value)); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Support/Stringable.php b/vendor/laravel/framework/src/Illuminate/Support/Stringable.php index 0fc5db25b..74535706f 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Stringable.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Stringable.php @@ -57,7 +57,7 @@ class Stringable implements JsonSerializable /** * Append the given values to the string. * - * @param array $values + * @param string ...$values * @return static */ public function append(...$values) @@ -545,7 +545,7 @@ class Stringable implements JsonSerializable /** * Prepend the given values to the string. * - * @param array $values + * @param string ...$values * @return static */ public function prepend(...$values) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php index 21bd822dc..9da1fac7c 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php @@ -127,15 +127,21 @@ class BusFake implements QueueingDispatcher /** * Assert if a job was pushed a number of times. * - * @param string $command + * @param string|\Closure $command * @param int $times * @return void */ public function assertDispatchedTimes($command, $times = 1) { - $count = $this->dispatched($command)->count() + - $this->dispatchedAfterResponse($command)->count() + - $this->dispatchedSync($command)->count(); + $callback = null; + + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + + $count = $this->dispatched($command, $callback)->count() + + $this->dispatchedAfterResponse($command, $callback)->count() + + $this->dispatchedSync($command, $callback)->count(); PHPUnit::assertSame( $times, $count, @@ -200,13 +206,19 @@ class BusFake implements QueueingDispatcher /** * Assert if a job was pushed synchronously a number of times. * - * @param string $command + * @param string|\Closure $command * @param int $times * @return void */ public function assertDispatchedSyncTimes($command, $times = 1) { - $count = $this->dispatchedSync($command)->count(); + $callback = null; + + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + + $count = $this->dispatchedSync($command, $callback)->count(); PHPUnit::assertSame( $times, $count, @@ -259,13 +271,19 @@ class BusFake implements QueueingDispatcher /** * Assert if a job was pushed after the response was sent a number of times. * - * @param string $command + * @param string|\Closure $command * @param int $times * @return void */ public function assertDispatchedAfterResponseTimes($command, $times = 1) { - $count = $this->dispatchedAfterResponse($command)->count(); + $callback = null; + + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + + $count = $this->dispatchedAfterResponse($command, $callback)->count(); PHPUnit::assertSame( $times, $count, diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php index 2a102afba..f1e465515 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php @@ -85,21 +85,23 @@ class EventFake implements Dispatcher $actualListener = (new ReflectionFunction($listenerClosure)) ->getStaticVariables()['listener']; + $normalizedListener = $expectedListener; + if (is_string($actualListener) && Str::contains($actualListener, '@')) { $actualListener = Str::parseCallback($actualListener); if (is_string($expectedListener)) { if (Str::contains($expectedListener, '@')) { - $expectedListener = Str::parseCallback($expectedListener); + $normalizedListener = Str::parseCallback($expectedListener); } else { - $expectedListener = [$expectedListener, 'handle']; + $normalizedListener = [$expectedListener, 'handle']; } } } - if ($actualListener === $expectedListener || + if ($actualListener === $normalizedListener || ($actualListener instanceof Closure && - $expectedListener === Closure::class)) { + $normalizedListener === Closure::class)) { PHPUnit::assertTrue(true); return; diff --git a/vendor/laravel/framework/src/Illuminate/Support/composer.json b/vendor/laravel/framework/src/Illuminate/Support/composer.json index cc86a2769..61b01cfe2 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Support/composer.json @@ -15,7 +15,8 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", + "ext-ctype": "*", + "ext-filter": "*", "ext-mbstring": "*", "doctrine/inflector": "^2.0", "illuminate/collections": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Concerns/AssertsStatusCodes.php b/vendor/laravel/framework/src/Illuminate/Testing/Concerns/AssertsStatusCodes.php new file mode 100644 index 000000000..9622620b0 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/Concerns/AssertsStatusCodes.php @@ -0,0 +1,165 @@ +assertStatus(200); + } + + /** + * Assert that the response has a 201 "Created" status code. + * + * @return $this + */ + public function assertCreated() + { + return $this->assertStatus(201); + } + + /** + * Assert that the response has a 202 "Accepted" status code. + * + * @return $this + */ + public function assertAccepted() + { + return $this->assertStatus(202); + } + + /** + * Assert that the response has the given status code and no content. + * + * @param int $status + * @return $this + */ + public function assertNoContent($status = 204) + { + $this->assertStatus($status); + + PHPUnit::assertEmpty($this->getContent(), 'Response content is not empty.'); + + return $this; + } + + /** + * Assert that the response has a 301 "Moved Permanently" status code. + * + * @param int $status + * @return $this + */ + public function assertMovedPermanently() + { + return $this->assertStatus(301); + } + + /** + * Assert that the response has a 302 "Found" status code. + * + * @param int $status + * @return $this + */ + public function assertFound() + { + return $this->assertStatus(302); + } + + /** + * Assert that the response has a 400 "Bad Request" status code. + * + * @return $this + */ + public function assertBadRequest() + { + return $this->assertStatus(400); + } + + /** + * Assert that the response has a 401 "Unauthorized" status code. + * + * @return $this + */ + public function assertUnauthorized() + { + return $this->assertStatus(401); + } + + /** + * Assert that the response has a 402 "Payment Required" status code. + * + * @return $this + */ + public function assertPaymentRequired() + { + return $this->assertStatus(402); + } + + /** + * Assert that the response has a 403 "Forbidden" status code. + * + * @return $this + */ + public function assertForbidden() + { + return $this->assertStatus(403); + } + + /** + * Assert that the response has a 404 "Not Found" status code. + * + * @return $this + */ + public function assertNotFound() + { + return $this->assertStatus(404); + } + + /** + * Assert that the response has a 408 "Request Timeout" status code. + * + * @return $this + */ + public function assertRequestTimeout() + { + return $this->assertStatus(408); + } + + /** + * Assert that the response has a 409 "Conflict" status code. + * + * @return $this + */ + public function assertConflict() + { + return $this->assertStatus(409); + } + + /** + * Assert that the response has a 422 "Unprocessable Entity" status code. + * + * @return $this + */ + public function assertUnprocessable() + { + return $this->assertStatus(422); + } + + /** + * Assert that the response has a 429 "Too Many Requests" status code. + * + * @return $this + */ + public function assertTooManyRequests() + { + return $this->assertStatus(429); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Concerns/TestDatabases.php b/vendor/laravel/framework/src/Illuminate/Testing/Concerns/TestDatabases.php index eff8f276d..f13ed0537 100644 --- a/vendor/laravel/framework/src/Illuminate/Testing/Concerns/TestDatabases.php +++ b/vendor/laravel/framework/src/Illuminate/Testing/Concerns/TestDatabases.php @@ -42,6 +42,7 @@ trait TestDatabases $databaseTraits = [ Testing\DatabaseMigrations::class, Testing\DatabaseTransactions::class, + Testing\DatabaseTruncation::class, Testing\RefreshDatabase::class, ]; diff --git a/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php b/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php index 583318f2c..3fa40418d 100644 --- a/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php +++ b/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php @@ -32,7 +32,7 @@ use Symfony\Component\HttpFoundation\StreamedResponse; */ class TestResponse implements ArrayAccess { - use Tappable, Macroable { + use Concerns\AssertsStatusCodes, Tappable, Macroable { __call as macroCall; } @@ -95,81 +95,6 @@ class TestResponse implements ArrayAccess return $this; } - /** - * Assert that the response has a 200 status code. - * - * @return $this - */ - public function assertOk() - { - return $this->assertStatus(200); - } - - /** - * Assert that the response has a 201 status code. - * - * @return $this - */ - public function assertCreated() - { - return $this->assertStatus(201); - } - - /** - * Assert that the response has the given status code and no content. - * - * @param int $status - * @return $this - */ - public function assertNoContent($status = 204) - { - $this->assertStatus($status); - - PHPUnit::assertEmpty($this->getContent(), 'Response content is not empty.'); - - return $this; - } - - /** - * Assert that the response has a not found status code. - * - * @return $this - */ - public function assertNotFound() - { - return $this->assertStatus(404); - } - - /** - * Assert that the response has a forbidden status code. - * - * @return $this - */ - public function assertForbidden() - { - return $this->assertStatus(403); - } - - /** - * Assert that the response has an unauthorized status code. - * - * @return $this - */ - public function assertUnauthorized() - { - return $this->assertStatus(401); - } - - /** - * Assert that the response has a 422 status code. - * - * @return $this - */ - public function assertUnprocessable() - { - return $this->assertStatus(422); - } - /** * Assert that the response is a server error. * @@ -966,6 +891,48 @@ class TestResponse implements ArrayAccess return $this; } + /** + * Assert that the given key is a JSON array. + * + * @param $key + * @return $this + */ + public function assertJsonIsArray($key = null) + { + $data = $this->json($key); + + $encodedData = json_encode($data); + + PHPUnit::assertTrue( + is_array($data) + && str_starts_with($encodedData, '[') + && str_ends_with($encodedData, ']') + ); + + return $this; + } + + /** + * Assert that the given key is a JSON object. + * + * @param $key + * @return $this + */ + public function assertJsonIsObject($key = null) + { + $data = $this->json($key); + + $encodedData = json_encode($data); + + PHPUnit::assertTrue( + is_array($data) + && str_starts_with($encodedData, '{') + && str_ends_with($encodedData, '}') + ); + + return $this; + } + /** * Validate and return the decoded response JSON. * @@ -1715,7 +1682,7 @@ class TestResponse implements ArrayAccess * Proxy isset() checks to the underlying base response. * * @param string $key - * @return mixed + * @return bool */ public function __isset($key) { diff --git a/vendor/laravel/framework/src/Illuminate/Testing/composer.json b/vendor/laravel/framework/src/Illuminate/Testing/composer.json index 7fae381cd..b77907318 100644 --- a/vendor/laravel/framework/src/Illuminate/Testing/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Testing/composer.json @@ -15,6 +15,7 @@ ], "require": { "php": "^8.0.2", + "ext-mbstring": "*", "illuminate/collections": "^9.0", "illuminate/contracts": "^9.0", "illuminate/macroable": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php b/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php index 37c9b31fc..9f6b74db7 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php @@ -89,9 +89,9 @@ class MessageSelector */ private function stripConditions($segments) { - return collect($segments)->map(function ($part) { - return preg_replace('/^[\{\[]([^\[\]\{\}]*)[\}\]]/', '', $part); - })->all(); + return collect($segments) + ->map(fn ($part) => preg_replace('/^[\{\[]([^\[\]\{\}]*)[\}\]]/', '', $part)) + ->all(); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Translation/Translator.php b/vendor/laravel/framework/src/Illuminate/Translation/Translator.php index 048423f7a..ae0741442 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/Translator.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/Translator.php @@ -2,17 +2,19 @@ namespace Illuminate\Translation; +use Closure; use Illuminate\Contracts\Translation\Loader; use Illuminate\Contracts\Translation\Translator as TranslatorContract; use Illuminate\Support\Arr; use Illuminate\Support\NamespacedItemResolver; use Illuminate\Support\Str; use Illuminate\Support\Traits\Macroable; +use Illuminate\Support\Traits\ReflectsClosures; use InvalidArgumentException; class Translator extends NamespacedItemResolver implements TranslatorContract { - use Macroable; + use Macroable, ReflectsClosures; /** * The loader implementation. @@ -56,6 +58,13 @@ class Translator extends NamespacedItemResolver implements TranslatorContract */ protected $determineLocalesUsing; + /** + * The custom rendering callbacks for stringable objects. + * + * @var array + */ + protected $stringableHandlers = []; + /** * Create a new translator instance. * @@ -224,6 +233,10 @@ class Translator extends NamespacedItemResolver implements TranslatorContract $shouldReplace = []; foreach ($replace as $key => $value) { + if (is_object($value) && isset($this->stringableHandlers[get_class($value)])) { + $value = call_user_func($this->stringableHandlers[get_class($value)], $value); + } + $shouldReplace[':'.Str::ucfirst($key ?? '')] = Str::ucfirst($value ?? ''); $shouldReplace[':'.Str::upper($key ?? '')] = Str::upper($value ?? ''); $shouldReplace[':'.$key] = $value; @@ -451,4 +464,23 @@ class Translator extends NamespacedItemResolver implements TranslatorContract { $this->loaded = $loaded; } + + /** + * Add a handler to be executed in order to format a given class to a string during translation replacements. + * + * @param callable|string $class + * @param callable|null $handler + * @return void + */ + public function stringable($class, $handler = null) + { + if ($class instanceof Closure) { + [$class, $handler] = [ + $this->firstClosureParameterType($class), + $class, + ]; + } + + $this->stringableHandlers[$class] = $handler; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Translation/composer.json b/vendor/laravel/framework/src/Illuminate/Translation/composer.json index fc6bd262d..09a3bb4b5 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Translation/composer.json @@ -15,7 +15,6 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", "illuminate/collections": "^9.0", "illuminate/contracts": "^9.0", "illuminate/macroable": "^9.0", diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php index b585839e2..cb37e4629 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php @@ -188,6 +188,66 @@ trait ReplacesAttributes return str_replace(':max', $parameters[0], $message); } + /** + * Replace all place-holders for the missing_if rule. + * + * @param string $message + * @param string $attribute + * @param string $rule + * @param array $parameters + * @return string + */ + protected function replaceMissingIf($message, $attribute, $rule, $parameters) + { + $parameters[1] = $this->getDisplayableValue($parameters[0], Arr::get($this->data, $parameters[0])); + + $parameters[0] = $this->getDisplayableAttribute($parameters[0]); + + return str_replace([':other', ':value'], $parameters, $message); + } + + /** + * Replace all place-holders for the missing_unless rule. + * + * @param string $message + * @param string $attribute + * @param string $rule + * @param array $parameters + * @return string + */ + protected function replaceMissingUnless($message, $attribute, $rule, $parameters) + { + return $this->replaceMissingIf($message, $attribute, $rule, $parameters); + } + + /** + * Replace all place-holders for the missing_with rule. + * + * @param string $message + * @param string $attribute + * @param string $rule + * @param array $parameters + * @return string + */ + protected function replaceMissingWith($message, $attribute, $rule, $parameters) + { + return str_replace(':values', implode(' / ', $this->getAttributeList($parameters)), $message); + } + + /** + * Replace all place-holders for the missing_with_all rule. + * + * @param string $message + * @param string $attribute + * @param string $rule + * @param array $parameters + * @return string + */ + protected function replaceMissingWithAll($message, $attribute, $rule, $parameters) + { + return $this->replaceMissingWith($message, $attribute, $rule, $parameters); + } + /** * Replace all place-holders for the multiple_of rule. * diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index 03d4d391d..aebd8f119 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -2,6 +2,9 @@ namespace Illuminate\Validation\Concerns; +use Brick\Math\BigDecimal; +use Brick\Math\BigNumber; +use Brick\Math\Exception\MathException as BrickMathException; use DateTime; use DateTimeInterface; use Egulias\EmailValidator\EmailValidator; @@ -13,6 +16,7 @@ use Egulias\EmailValidator\Validation\RFCValidation; use Exception; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Arr; +use Illuminate\Support\Exceptions\MathException; use Illuminate\Support\Facades\Date; use Illuminate\Support\Str; use Illuminate\Validation\Rules\Exists; @@ -335,46 +339,62 @@ trait ValidatesAttributes /** * Validate that an attribute contains only alphabetic characters. + * If the 'ascii' option is passed, validate that an attribute contains only ascii alphabetic characters. * * @param string $attribute * @param mixed $value * @return bool */ - public function validateAlpha($attribute, $value) + public function validateAlpha($attribute, $value, $parameters) { - return is_string($value) && preg_match('/^[\pL\pM]+$/u', $value); + if (isset($parameters[0]) && $parameters[0] === 'ascii') { + return is_string($value) && preg_match('/\A[a-zA-Z]+\z/u', $value); + } + + return is_string($value) && preg_match('/\A[\pL\pM]+\z/u', $value); } /** * Validate that an attribute contains only alpha-numeric characters, dashes, and underscores. + * If the 'ascii' option is passed, validate that an attribute contains only ascii alpha-numeric characters, + * dashes, and underscores. * * @param string $attribute * @param mixed $value * @return bool */ - public function validateAlphaDash($attribute, $value) + public function validateAlphaDash($attribute, $value, $parameters) { if (! is_string($value) && ! is_numeric($value)) { return false; } - return preg_match('/^[\pL\pM\pN_-]+$/u', $value) > 0; + if (isset($parameters[0]) && $parameters[0] === 'ascii') { + return preg_match('/\A[a-zA-Z0-9_-]+\z/u', $value) > 0; + } + + return preg_match('/\A[\pL\pM\pN_-]+\z/u', $value) > 0; } /** * Validate that an attribute contains only alpha-numeric characters. + * If the 'ascii' option is passed, validate that an attribute contains only ascii alpha-numeric characters. * * @param string $attribute * @param mixed $value * @return bool */ - public function validateAlphaNum($attribute, $value) + public function validateAlphaNum($attribute, $value, $parameters) { if (! is_string($value) && ! is_numeric($value)) { return false; } - return preg_match('/^[\pL\pM\pN]+$/u', $value) > 0; + if (isset($parameters[0]) && $parameters[0] === 'ascii') { + return preg_match('/\A[a-zA-Z0-9]+\z/u', $value) > 0; + } + + return preg_match('/\A[\pL\pM\pN]+\z/u', $value) > 0; } /** @@ -433,9 +453,10 @@ trait ValidatesAttributes { $this->requireParameterCount(2, $parameters, 'between'); - $size = $this->getSize($attribute, $value); - - return $size >= $parameters[0] && $size <= $parameters[1]; + return with( + BigNumber::of($this->getSize($attribute, $value)), + fn ($size) => $size->isGreaterThanOrEqualTo($this->trim($parameters[0])) && $size->isLessThanOrEqualTo($this->trim($parameters[1])) + ); } /** @@ -1077,7 +1098,7 @@ trait ValidatesAttributes $this->shouldBeNumeric($attribute, 'Gt'); if (is_null($comparedToValue) && (is_numeric($value) && is_numeric($parameters[0]))) { - return $this->getSize($attribute, $value) > $parameters[0]; + return BigNumber::of($this->getSize($attribute, $value))->isGreaterThan($this->trim($parameters[0])); } if (is_numeric($parameters[0])) { @@ -1085,7 +1106,7 @@ trait ValidatesAttributes } if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { - return $value > $comparedToValue; + return BigNumber::of($this->trim($value))->isGreaterThan($this->trim($comparedToValue)); } if (! $this->isSameType($value, $comparedToValue)) { @@ -1112,7 +1133,7 @@ trait ValidatesAttributes $this->shouldBeNumeric($attribute, 'Lt'); if (is_null($comparedToValue) && (is_numeric($value) && is_numeric($parameters[0]))) { - return $this->getSize($attribute, $value) < $parameters[0]; + return BigNumber::of($this->getSize($attribute, $value))->isLessThan($this->trim($parameters[0])); } if (is_numeric($parameters[0])) { @@ -1120,7 +1141,7 @@ trait ValidatesAttributes } if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { - return $value < $comparedToValue; + return BigNumber::of($this->trim($value))->isLessThan($this->trim($comparedToValue)); } if (! $this->isSameType($value, $comparedToValue)) { @@ -1147,7 +1168,7 @@ trait ValidatesAttributes $this->shouldBeNumeric($attribute, 'Gte'); if (is_null($comparedToValue) && (is_numeric($value) && is_numeric($parameters[0]))) { - return $this->getSize($attribute, $value) >= $parameters[0]; + return BigNumber::of($this->getSize($attribute, $value))->isGreaterThanOrEqualTo($this->trim($parameters[0])); } if (is_numeric($parameters[0])) { @@ -1155,7 +1176,7 @@ trait ValidatesAttributes } if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { - return $value >= $comparedToValue; + return BigNumber::of($this->trim($value))->isGreaterThanOrEqualTo($this->trim($comparedToValue)); } if (! $this->isSameType($value, $comparedToValue)) { @@ -1182,7 +1203,7 @@ trait ValidatesAttributes $this->shouldBeNumeric($attribute, 'Lte'); if (is_null($comparedToValue) && (is_numeric($value) && is_numeric($parameters[0]))) { - return $this->getSize($attribute, $value) <= $parameters[0]; + return BigNumber::of($this->getSize($attribute, $value))->isLessThanOrEqualTo($this->trim($parameters[0])); } if (is_numeric($parameters[0])) { @@ -1190,7 +1211,7 @@ trait ValidatesAttributes } if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { - return $value <= $comparedToValue; + return BigNumber::of($this->trim($value))->isLessThanOrEqualTo($this->trim($comparedToValue)); } if (! $this->isSameType($value, $comparedToValue)) { @@ -1382,7 +1403,7 @@ trait ValidatesAttributes return false; } - return $this->getSize($attribute, $value) <= $parameters[0]; + return BigNumber::of($this->getSize($attribute, $value))->isLessThanOrEqualTo($this->trim($parameters[0])); } /** @@ -1484,7 +1505,7 @@ trait ValidatesAttributes { $this->requireParameterCount(1, $parameters, 'min'); - return $this->getSize($attribute, $value) >= $parameters[0]; + return BigNumber::of($this->getSize($attribute, $value))->isGreaterThanOrEqualTo($this->trim($parameters[0])); } /** @@ -1504,6 +1525,99 @@ trait ValidatesAttributes return ! preg_match('/[^0-9]/', $value) && $length >= $parameters[0]; } + /** + * Validate that an attribute is missing. + * + * @param string $attribute + * @param mixed $value + * @param array $parameters + * @return bool + */ + public function validateMissing($attribute, $value, $parameters) + { + return ! Arr::has($this->data, $attribute); + } + + /** + * Validate that an attribute is missing when another attribute has a given value. + * + * @param string $attribute + * @param mixed $value + * @param array $parameters + * @return bool + */ + public function validateMissingIf($attribute, $value, $parameters) + { + $this->requireParameterCount(2, $parameters, 'missing_if'); + + [$values, $other] = $this->parseDependentRuleParameters($parameters); + + if (in_array($other, $values, is_bool($other) || is_null($other))) { + return $this->validateMissing($attribute, $value, $parameters); + } + + return true; + } + + /** + * Validate that an attribute is missing unless another attribute has a given value. + * + * @param string $attribute + * @param mixed $value + * @param array $parameters + * @return bool + */ + public function validateMissingUnless($attribute, $value, $parameters) + { + $this->requireParameterCount(2, $parameters, 'missing_unless'); + + [$values, $other] = $this->parseDependentRuleParameters($parameters); + + if (! in_array($other, $values, is_bool($other) || is_null($other))) { + return $this->validateMissing($attribute, $value, $parameters); + } + + return true; + } + + /** + * Validate that an attribute is missing when any given attribute is present. + * + * @param string $attribute + * @param mixed $value + * @param array $parameters + * @return bool + */ + public function validateMissingWith($attribute, $value, $parameters) + { + $this->requireParameterCount(1, $parameters, 'missing_with'); + + if (Arr::hasAny($this->data, $parameters)) { + return $this->validateMissing($attribute, $value, $parameters); + } + + return true; + } + + /** + * Validate that an attribute is missing when all given attributes are present. + * + * @param string $attribute + * @param mixed $value + * @param array $parameters + * @return bool + */ + public function validateMissingWithAll($attribute, $value, $parameters) + { + $this->requireParameterCount(1, $parameters, 'missing_with'); + + if (Arr::has($this->data, $parameters)) { + return $this->validateMissing($attribute, $value, $parameters); + } + + return true; + } + /** * Validate the value of an attribute is a multiple of a given value. * @@ -1520,11 +1634,26 @@ trait ValidatesAttributes return false; } - if ((float) $parameters[0] === 0.0) { - return false; - } + try { + $numerator = BigDecimal::of($this->trim($value)); + $denominator = BigDecimal::of($this->trim($parameters[0])); - return bcmod($value, $parameters[0], 16) === '0.0000000000000000'; + if ($numerator->isZero() && $denominator->isZero()) { + return false; + } + + if ($numerator->isZero()) { + return true; + } + + if ($denominator->isZero()) { + return false; + } + + return $numerator->remainder($denominator)->isZero(); + } catch (BrickMathException $e) { + throw new MathException('An error occurred while handling the multiple_of input values.', previous: $e); + } } /** @@ -1689,7 +1818,7 @@ trait ValidatesAttributes */ public function validateProhibited($attribute, $value) { - return false; + return ! $this->validateRequired($attribute, $value); } /** @@ -1744,7 +1873,15 @@ trait ValidatesAttributes */ public function validateProhibits($attribute, $value, $parameters) { - return ! Arr::hasAny($this->data, $parameters); + if ($this->validateRequired($attribute, $value)) { + foreach ($parameters as $parameter) { + if ($this->validateRequired($parameter, Arr::get($this->data, $parameter))) { + return false; + } + } + } + + return true; } /** @@ -2051,7 +2188,7 @@ trait ValidatesAttributes { $this->requireParameterCount(1, $parameters, 'size'); - return $this->getSize($attribute, $value) == $parameters[0]; + return BigNumber::of($this->getSize($attribute, $value))->isEqualTo($this->trim($parameters[0])); } /** @@ -2210,7 +2347,7 @@ trait ValidatesAttributes * * @param string $attribute * @param mixed $value - * @return mixed + * @return int|float|string */ protected function getSize($attribute, $value) { @@ -2221,7 +2358,7 @@ trait ValidatesAttributes // is the size. If it is a file, we take kilobytes, and for a string the // entire length of the string will be considered the attribute size. if (is_numeric($value) && $hasNumeric) { - return $value; + return $this->trim($value); } elseif (is_array($value)) { return count($value); } elseif ($value instanceof File) { @@ -2327,4 +2464,15 @@ trait ValidatesAttributes $this->numericRules[] = $rule; } } + + /** + * Trim the value if it is a string. + * + * @param mixed $value + * @return mixed + */ + protected function trim($value) + { + return is_string($value) ? trim($value) : $value; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Validator.php b/vendor/laravel/framework/src/Illuminate/Validation/Validator.php index 8a552fae6..d0655031d 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/Validator.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Validator.php @@ -207,6 +207,11 @@ class Validator implements ValidatorContract 'Declined', 'DeclinedIf', 'Filled', + 'Missing', + 'MissingIf', + 'MissingUnless', + 'MissingWith', + 'MissingWithAll', 'Present', 'Required', 'RequiredIf', diff --git a/vendor/laravel/framework/src/Illuminate/Validation/composer.json b/vendor/laravel/framework/src/Illuminate/Validation/composer.json index 3d875c072..2f46a31d1 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Validation/composer.json @@ -15,7 +15,9 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", + "ext-filter": "*", + "ext-mbstring": "*", + "brick/math": "^0.9.3|^0.10.2|^0.11", "egulias/email-validator": "^3.2.1|^4.0", "illuminate/collections": "^9.0", "illuminate/container": "^9.0", @@ -37,7 +39,6 @@ } }, "suggest": { - "ext-bcmath": "Required to use the multiple_of validation rule.", "illuminate/database": "Required to use the database presence verifier (^9.0)." }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php index 1435b3567..9edbc5cec 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php @@ -31,6 +31,7 @@ class BladeCompiler extends Compiler implements CompilerInterface Concerns\CompilesLoops, Concerns\CompilesRawPhp, Concerns\CompilesStacks, + Concerns\CompilesStyles, Concerns\CompilesTranslations, ReflectsClosures; @@ -506,6 +507,8 @@ class BladeCompiler extends Compiler implements CompilerInterface { preg_match_all('/\B@(@?\w+(?:::\w+)?)([ \t]*)(\( ( [\S\s]*? ) \))?/x', $template, $matches); + $offset = 0; + for ($i = 0; isset($matches[0][$i]); $i++) { $match = [ $matches[0][$i], @@ -521,19 +524,62 @@ class BladeCompiler extends Compiler implements CompilerInterface while (isset($match[4]) && Str::endsWith($match[0], ')') && ! $this->hasEvenNumberOfParentheses($match[0])) { - $rest = Str::before(Str::after($template, $match[0]), ')'); + if (($after = Str::after($template, $match[0])) === $template) { + break; + } + + $rest = Str::before($after, ')'); + + if (isset($matches[0][$i + 1]) && Str::contains($rest.')', $matches[0][$i + 1])) { + unset($matches[0][$i + 1]); + $i++; + } $match[0] = $match[0].$rest.')'; $match[3] = $match[3].$rest.')'; $match[4] = $match[4].$rest; } - $template = Str::replaceFirst($match[0], $this->compileStatement($match), $template); + [$template, $offset] = $this->replaceFirstStatement( + $match[0], + $this->compileStatement($match), + $template, + $offset + ); } return $template; } + /** + * Replace the first match for a statement compilation operation. + * + * @param string $search + * @param string $replace + * @param string $subject + * @param int $offset + * @return array + */ + protected function replaceFirstStatement($search, $replace, $subject, $offset) + { + $search = (string) $search; + + if ($search === '') { + return $subject; + } + + $position = strpos($subject, $search, $offset); + + if ($position !== false) { + return [ + substr_replace($subject, $replace, $position, strlen($search)), + $position + strlen($replace), + ]; + } + + return [$subject, 0]; + } + /** * Determine if the given expression has the same number of opening and closing parentheses. * @@ -675,7 +721,7 @@ class BladeCompiler extends Compiler implements CompilerInterface * Check the result of a condition. * * @param string $name - * @param array $parameters + * @param mixed ...$parameters * @return bool */ public function check($name, ...$parameters) diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php index 8fee31dd2..cf4238362 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php @@ -115,6 +115,10 @@ class ComponentTagCompiler @(?:class)(\( (?: (?>[^()]+) | (?-1) )* \)) ) | + (?: + @(?:style)(\( (?: (?>[^()]+) | (?-1) )* \)) + ) + | (?: \{\{\s*\\\$attributes(?:[^}]+?)?\s*\}\} ) @@ -176,6 +180,10 @@ class ComponentTagCompiler @(?:class)(\( (?: (?>[^()]+) | (?-1) )* \)) ) | + (?: + @(?:style)(\( (?: (?>[^()]+) | (?-1) )* \)) + ) + | (?: \{\{\s*\\\$attributes(?:[^}]+?)?\s*\}\} ) @@ -506,6 +514,10 @@ class ComponentTagCompiler @(?:class)(\( (?: (?>[^()]+) | (?-1) )* \)) ) | + (?: + @(?:style)(\( (?: (?>[^()]+) | (?-1) )* \)) + ) + | (?: \{\{\s*\\\$attributes(?:[^}]+?)?\s*\}\} ) @@ -563,6 +575,7 @@ class ComponentTagCompiler $attributeString = $this->parseShortAttributeSyntax($attributeString); $attributeString = $this->parseAttributeBag($attributeString); $attributeString = $this->parseComponentTagClassStatements($attributeString); + $attributeString = $this->parseComponentTagStyleStatements($attributeString); $attributeString = $this->parseBindAttributes($attributeString); $pattern = '/ @@ -665,6 +678,27 @@ class ComponentTagCompiler ); } + /** + * Parse @style statements in a given attribute string into their fully-qualified syntax. + * + * @param string $attributeString + * @return string + */ + protected function parseComponentTagStyleStatements(string $attributeString) + { + return preg_replace_callback( + '/@(style)(\( ( (?>[^()]+) | (?2) )* \))/x', function ($match) { + if ($match[1] === 'style') { + $match[2] = str_replace('"', "'", $match[2]); + + return ":style=\"\Illuminate\Support\Arr::toCssStyles{$match[2]}\""; + } + + return $match[0]; + }, $attributeString + ); + } + /** * Parse the "bind" attributes in a given attribute string into their fully-qualified syntax. * diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesStyles.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesStyles.php new file mode 100644 index 000000000..6c715061c --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesStyles.php @@ -0,0 +1,19 @@ +\""; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php b/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php index 0c6c615f3..acf5c3fbe 100644 --- a/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php +++ b/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php @@ -221,6 +221,19 @@ class ComponentAttributeBag implements ArrayAccess, Htmlable, IteratorAggregate return $this->merge(['class' => Arr::toCssClasses($classList)]); } + /** + * Conditionally merge styles into the attribute bag. + * + * @param mixed|array $styleList + * @return static + */ + public function style($styleList) + { + $styleList = Arr::wrap($styleList); + + return $this->merge(['style' => Arr::toCssStyles($styleList)]); + } + /** * Merge additional attributes / values into the attribute bag. * @@ -238,9 +251,10 @@ class ComponentAttributeBag implements ArrayAccess, Htmlable, IteratorAggregate [$appendableAttributes, $nonAppendableAttributes] = collect($this->attributes) ->partition(function ($value, $key) use ($attributeDefaults) { - return $key === 'class' || - (isset($attributeDefaults[$key]) && - $attributeDefaults[$key] instanceof AppendableAttributeValue); + return $key === 'class' || $key === 'style' || ( + isset($attributeDefaults[$key]) && + $attributeDefaults[$key] instanceof AppendableAttributeValue + ); }); $attributes = $appendableAttributes->mapWithKeys(function ($value, $key) use ($attributeDefaults, $escape) { @@ -248,6 +262,10 @@ class ComponentAttributeBag implements ArrayAccess, Htmlable, IteratorAggregate ? $this->resolveAppendableAttributeDefault($attributeDefaults, $key, $escape) : ($attributeDefaults[$key] ?? ''); + if ($key === 'style') { + $value = Str::finish($value, ';'); + } + return [$key => implode(' ', array_unique(array_filter([$defaultsValue, $value])))]; })->merge($nonAppendableAttributes)->all(); diff --git a/vendor/laravel/framework/src/Illuminate/View/composer.json b/vendor/laravel/framework/src/Illuminate/View/composer.json index 7487d55d7..2d82d85c4 100644 --- a/vendor/laravel/framework/src/Illuminate/View/composer.json +++ b/vendor/laravel/framework/src/Illuminate/View/composer.json @@ -15,7 +15,7 @@ ], "require": { "php": "^8.0.2", - "ext-json": "*", + "ext-tokenizer": "*", "illuminate/collections": "^9.0", "illuminate/container": "^9.0", "illuminate/contracts": "^9.0", diff --git a/vendor/laravel/serializable-closure/README.md b/vendor/laravel/serializable-closure/README.md index a9c25135c..b1efef38f 100644 --- a/vendor/laravel/serializable-closure/README.md +++ b/vendor/laravel/serializable-closure/README.md @@ -53,6 +53,7 @@ echo $closure(); // james; 1. Creating **anonymous classes** within closures is not supported. 2. Using attributes within closures is not supported. +3. Serializing closures on REPL environments such as Laravel Tinker is not supported. ## Contributing diff --git a/vendor/laravel/serializable-closure/src/SerializableClosure.php b/vendor/laravel/serializable-closure/src/SerializableClosure.php index e7f9f0cf8..86422f935 100644 --- a/vendor/laravel/serializable-closure/src/SerializableClosure.php +++ b/vendor/laravel/serializable-closure/src/SerializableClosure.php @@ -62,6 +62,17 @@ class SerializableClosure return $this->serializable->getClosure(); } + /** + * Create a new unsigned serializable closure instance. + * + * @param Closure $closure + * @return \Laravel\SerializableClosure\UnsignedSerializableClosure + */ + public static function unsigned(Closure $closure) + { + return new UnsignedSerializableClosure($closure); + } + /** * Sets the serializable closure secret key. * diff --git a/vendor/laravel/serializable-closure/src/Serializers/Native.php b/vendor/laravel/serializable-closure/src/Serializers/Native.php index 0ff8410c0..4a04b981e 100644 --- a/vendor/laravel/serializable-closure/src/Serializers/Native.php +++ b/vendor/laravel/serializable-closure/src/Serializers/Native.php @@ -10,6 +10,7 @@ use Laravel\SerializableClosure\Support\ClosureScope; use Laravel\SerializableClosure\Support\ClosureStream; use Laravel\SerializableClosure\Support\ReflectionClosure; use Laravel\SerializableClosure\Support\SelfReference; +use Laravel\SerializableClosure\UnsignedSerializableClosure; use ReflectionObject; use UnitEnum; @@ -379,7 +380,7 @@ class Native implements Serializable $item = $property->getValue($data); - if ($item instanceof SerializableClosure || ($item instanceof SelfReference && $item->hash === $this->code['self'])) { + if ($item instanceof SerializableClosure || $item instanceof UnsignedSerializableClosure || ($item instanceof SelfReference && $item->hash === $this->code['self'])) { $this->code['objects'][] = [ 'instance' => $data, 'property' => $property, @@ -452,7 +453,7 @@ class Native implements Serializable } unset($value); - } elseif (is_object($data) && ! $data instanceof SerializableClosure) { + } elseif (is_object($data) && ! $data instanceof SerializableClosure && ! $data instanceof UnsignedSerializableClosure) { if (isset($this->scope[$data])) { $data = $this->scope[$data]; diff --git a/vendor/laravel/serializable-closure/src/UnsignedSerializableClosure.php b/vendor/laravel/serializable-closure/src/UnsignedSerializableClosure.php new file mode 100644 index 000000000..1588e7cc0 --- /dev/null +++ b/vendor/laravel/serializable-closure/src/UnsignedSerializableClosure.php @@ -0,0 +1,82 @@ +serializable = new Serializers\Native($closure); + } + + /** + * Resolve the closure with the given arguments. + * + * @return mixed + */ + public function __invoke() + { + if (\PHP_VERSION_ID < 70400) { + throw new PhpVersionNotSupportedException(); + } + + return call_user_func_array($this->serializable, func_get_args()); + } + + /** + * Gets the closure. + * + * @return \Closure + */ + public function getClosure() + { + if (\PHP_VERSION_ID < 70400) { + throw new PhpVersionNotSupportedException(); + } + + return $this->serializable->getClosure(); + } + + /** + * Get the serializable representation of the closure. + * + * @return array + */ + public function __serialize() + { + return [ + 'serializable' => $this->serializable, + ]; + } + + /** + * Restore the closure after serialization. + * + * @param array $data + * @return void + */ + public function __unserialize($data) + { + $this->serializable = $data['serializable']; + } +} diff --git a/vendor/league/commonmark/CHANGELOG.md b/vendor/league/commonmark/CHANGELOG.md index 1a246b01b..cd2d341c3 100644 --- a/vendor/league/commonmark/CHANGELOG.md +++ b/vendor/league/commonmark/CHANGELOG.md @@ -6,6 +6,12 @@ Updates should follow the [Keep a CHANGELOG](https://keepachangelog.com/) princi ## [Unreleased][unreleased] +## [2.3.9] - 2023-02-15 + +### Fixed + +- Fixed autolink extension not detecting some URIs with underscores (#956) + ## [2.3.8] - 2022-12-10 ### Fixed @@ -512,7 +518,8 @@ No changes were introduced since the previous release. - Alternative 1: Use `CommonMarkConverter` or `GithubFlavoredMarkdownConverter` if you don't need to customize the environment - Alternative 2: Instantiate a new `Environment` and add the necessary extensions yourself -[unreleased]: https://github.com/thephpleague/commonmark/compare/2.3.8...main +[unreleased]: https://github.com/thephpleague/commonmark/compare/2.3.9...main +[2.3.9]: https://github.com/thephpleague/commonmark/compare/2.3.8...2.3.9 [2.3.8]: https://github.com/thephpleague/commonmark/compare/2.3.7...2.3.8 [2.3.7]: https://github.com/thephpleague/commonmark/compare/2.3.6...2.3.7 [2.3.6]: https://github.com/thephpleague/commonmark/compare/2.3.5...2.3.6 diff --git a/vendor/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php b/vendor/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php index f2a140a8a..de5c111e1 100644 --- a/vendor/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php +++ b/vendor/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php @@ -72,6 +72,7 @@ final class AttributesHelper continue; } + /** @psalm-suppress PossiblyUndefinedArrayOffset */ [$name, $value] = \explode('=', $attribute, 2); $first = $value[0]; diff --git a/vendor/league/commonmark/src/Extension/Autolink/UrlAutolinkParser.php b/vendor/league/commonmark/src/Extension/Autolink/UrlAutolinkParser.php index 7fad7f554..6b4290a99 100644 --- a/vendor/league/commonmark/src/Extension/Autolink/UrlAutolinkParser.php +++ b/vendor/league/commonmark/src/Extension/Autolink/UrlAutolinkParser.php @@ -22,16 +22,22 @@ final class UrlAutolinkParser implements InlineParserInterface { private const ALLOWED_AFTER = [null, ' ', "\t", "\n", "\x0b", "\x0c", "\x0d", '*', '_', '~', '(']; - // RegEx adapted from https://github.com/symfony/symfony/blob/4.2/src/Symfony/Component/Validator/Constraints/UrlValidator.php + // RegEx adapted from https://github.com/symfony/symfony/blob/6.3/src/Symfony/Component/Validator/Constraints/UrlValidator.php private const REGEX = '~ ( # Must start with a supported scheme + auth, or "www" (?: - (?:%s):// # protocol - (?:([\.\pL\pN-]+:)?([\.\pL\pN-]+)@)? # basic auth + (?:%s):// # protocol + (?:(?:(?:[\_\.\pL\pN-]|%%[0-9A-Fa-f]{2})+:)?((?:[\_\.\pL\pN-]|%%[0-9A-Fa-f]{2})+)@)? # basic auth |www\.) (?: - (?:[\pL\pN\pS\-\.])+(?:\.?(?:[\pL\pN]|xn\-\-[\pL\pN-]+)+\.?) # a domain name + (?: + (?:xn--[a-z0-9-]++\.)*+xn--[a-z0-9-]++ # a domain name using punycode + | + (?:[\pL\pN\pS\pM\-\_]++\.)+[\pL\pN\pM]++ # a multi-level domain name + | + [a-z0-9\-\_]++ # a single-level domain name + )\.? | # or \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # an IP address | # or @@ -40,9 +46,9 @@ final class UrlAutolinkParser implements InlineParserInterface \] # an IPv6 address ) (?::[0-9]+)? # a port (optional) - (?:/ (?:[\pL\pN\-._\~!$&\'()*+,;=:@]|%%[0-9A-Fa-f]{2})* )* # a path - (?:\? (?:[\pL\pN\-._\~!$&\'()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )? # a query (optional) - (?:\# (?:[\pL\pN\-._\~!$&\'()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )? # a fragment (optional) + (?:/ (?:[\pL\pN\-._\~!$&\'()*+,;=:@]|%%[0-9A-Fa-f]{2})* )* # a path + (?:\? (?:[\pL\pN\-._\~!$&\'\[\]()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )? # a query (optional) + (?:\# (?:[\pL\pN\-._\~!$&\'()*+,;=:@/?]|%%[0-9A-Fa-f]{2})* )? # a fragment (optional) )~ixu'; /** diff --git a/vendor/league/commonmark/src/Node/Query/AndExpr.php b/vendor/league/commonmark/src/Node/Query/AndExpr.php index ceb441a4e..d2cd61533 100644 --- a/vendor/league/commonmark/src/Node/Query/AndExpr.php +++ b/vendor/league/commonmark/src/Node/Query/AndExpr.php @@ -31,7 +31,7 @@ final class AndExpr implements ExpressionInterface */ public function __construct(callable ...$expressions) { - $this->conditions = $expressions; + $this->conditions = \array_values($expressions); } /** diff --git a/vendor/league/commonmark/src/Node/Query/OrExpr.php b/vendor/league/commonmark/src/Node/Query/OrExpr.php index df2adef77..b0baad8cc 100644 --- a/vendor/league/commonmark/src/Node/Query/OrExpr.php +++ b/vendor/league/commonmark/src/Node/Query/OrExpr.php @@ -31,7 +31,7 @@ final class OrExpr implements ExpressionInterface */ public function __construct(callable ...$expressions) { - $this->conditions = $expressions; + $this->conditions = \array_values($expressions); } /** diff --git a/vendor/maatwebsite/excel/CHANGELOG.md b/vendor/maatwebsite/excel/CHANGELOG.md index 42fdf615a..7c660fb89 100644 --- a/vendor/maatwebsite/excel/CHANGELOG.md +++ b/vendor/maatwebsite/excel/CHANGELOG.md @@ -4,9 +4,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] -## [3.1.46] - 2023-01-27 - -- Support Laravel 10 +- support Laravel 10 ## [3.1.45] - 2023-01-02 @@ -266,13 +264,7 @@ All notable changes to this project will be documented in this file. - Raw() method now also available on Exportable. - Fix for breaking changes in PhpSpreadsheet with empty enclosures. -[Unreleased]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.46...HEAD -[3.1.46]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.45...3.1.46 -[3.1.45]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.44...3.1.45 -[3.1.44]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.43...3.1.44 -[3.1.43]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.42...3.1.43 -[3.1.42]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.41...3.1.42 -[3.1.41]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.40...3.1.41 +[Unreleased]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.40...HEAD [3.1.40]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.39...3.1.40 [3.1.39]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.38...3.1.39 [3.1.38]: https://github.com/Maatwebsite/Laravel-Excel/compare/3.1.37...3.1.38 diff --git a/vendor/monolog/monolog/CHANGELOG.md b/vendor/monolog/monolog/CHANGELOG.md index 7f9db2b07..8a8c65124 100644 --- a/vendor/monolog/monolog/CHANGELOG.md +++ b/vendor/monolog/monolog/CHANGELOG.md @@ -1,3 +1,18 @@ +### 2.9.1 (2023-02-06) + + * Fixed Logger not being serializable anymore (#1792) + +### 2.9.0 (2023-02-05) + + * Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748) + * Added support for enum context values in PsrLogMessageProcessor (#1773) + * Added graylog2/gelf-php 2.x support (#1747) + * Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739) + * Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791) + * Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758) + * Fixed infinite loop detection within Fibers (#1753) + * Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781) + ### 2.8.0 (2022-07-24) * Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734) diff --git a/vendor/monolog/monolog/composer.json b/vendor/monolog/monolog/composer.json index ab775ad63..b9437d6d5 100644 --- a/vendor/monolog/monolog/composer.json +++ b/vendor/monolog/monolog/composer.json @@ -21,7 +21,7 @@ "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", - "graylog2/gelf-php": "^1.4.2", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", "guzzlehttp/guzzle": "^7.4", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php index 41b56b3c0..867ae586b 100644 --- a/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php +++ b/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php @@ -15,6 +15,7 @@ namespace Monolog\Formatter; * formats the record to be used in the FlowdockHandler * * @author Dominik Liebler + * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4 */ class FlowdockFormatter implements FormatterInterface { diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php index a1a79372d..3b3e1e7f6 100644 --- a/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php +++ b/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php @@ -47,6 +47,11 @@ class GelfMessageFormatter extends NormalizerFormatter */ protected $maxLength; + /** + * @var int + */ + private $gelfVersion = 2; + /** * Translates Monolog log levels to Graylog2 log priorities. * @@ -78,6 +83,10 @@ class GelfMessageFormatter extends NormalizerFormatter $this->extraPrefix = is_null($extraPrefix) ? '' : $extraPrefix; $this->contextPrefix = $contextPrefix; $this->maxLength = is_null($maxLength) ? self::DEFAULT_MAX_LENGTH : $maxLength; + + if (method_exists(Message::class, 'setFacility')) { + $this->gelfVersion = 1; + } } /** @@ -113,16 +122,20 @@ class GelfMessageFormatter extends NormalizerFormatter $message->setShortMessage(Utils::substr($record['message'], 0, $this->maxLength)); } - if (isset($record['channel'])) { - $message->setFacility($record['channel']); - } - if (isset($extra['line'])) { - $message->setLine($extra['line']); - unset($extra['line']); - } - if (isset($extra['file'])) { - $message->setFile($extra['file']); - unset($extra['file']); + if ($this->gelfVersion === 1) { + if (isset($record['channel'])) { + $message->setFacility($record['channel']); + } + if (isset($extra['line'])) { + $message->setLine($extra['line']); + unset($extra['line']); + } + if (isset($extra['file'])) { + $message->setFile($extra['file']); + unset($extra['file']); + } + } else { + $message->setAdditional('facility', $record['channel']); } foreach ($extra as $key => $val) { @@ -147,11 +160,13 @@ class GelfMessageFormatter extends NormalizerFormatter $message->setAdditional($this->contextPrefix . $key, $val); } - /** @phpstan-ignore-next-line */ - if (null === $message->getFile() && isset($context['exception']['file'])) { - if (preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) { - $message->setFile($matches[1]); - $message->setLine($matches[2]); + if ($this->gelfVersion === 1) { + /** @phpstan-ignore-next-line */ + if (null === $message->getFile() && isset($context['exception']['file'])) { + if (preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) { + $message->setFile($matches[1]); + $message->setLine($matches[2]); + } } } diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php index 0cd287f5e..ca52ebf4e 100644 --- a/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php +++ b/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php @@ -17,6 +17,7 @@ use Monolog\LogRecord; /** * Encodes message information into JSON in a format compatible with Cloud logging. * + * @see https://cloud.google.com/logging/docs/structured-logging * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry * * @author Luís Cobucci @@ -28,7 +29,7 @@ final class GoogleCloudLoggingFormatter extends JsonFormatter { // Re-key level for GCP logging $record['severity'] = $record['level_name']; - $record['timestamp'] = $record['datetime']->format(DateTimeInterface::RFC3339_EXTENDED); + $record['time'] = $record['datetime']->format(DateTimeInterface::RFC3339_EXTENDED); // Remove keys that are not used by GCP unset($record['level'], $record['level_name'], $record['datetime']); diff --git a/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php index c4997482e..994872ce8 100644 --- a/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php +++ b/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php @@ -151,13 +151,14 @@ class AmqpHandler extends AbstractProcessingHandler private function createAmqpMessage(string $data): AMQPMessage { - return new AMQPMessage( - $data, - [ - 'delivery_mode' => 2, - 'content_type' => 'application/json', - ] - ); + $attributes = [ + 'delivery_mode' => 2, + 'content_type' => 'application/json', + ]; + if ($this->extraAttributes) { + $attributes = array_merge($attributes, $this->extraAttributes); + } + return new AMQPMessage($data, $attributes); } /** diff --git a/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php index fa383f1c2..95bbfed42 100644 --- a/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php +++ b/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php @@ -14,6 +14,7 @@ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\LineFormatter; use Monolog\Utils; +use Monolog\Logger; use function count; use function headers_list; @@ -177,7 +178,7 @@ class BrowserConsoleHandler extends AbstractProcessingHandler $extra = static::dump('Extra', $record['extra']); if (empty($context) && empty($extra)) { - $script[] = static::call_array('log', static::handleStyles($record['formatted'])); + $script[] = static::call_array(static::getConsoleMethodForLevel($record['level']), static::handleStyles($record['formatted'])); } else { $script = array_merge( $script, @@ -192,6 +193,20 @@ class BrowserConsoleHandler extends AbstractProcessingHandler return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);"; } + private static function getConsoleMethodForLevel(int $level): string + { + return [ + Logger::DEBUG => 'debug', + Logger::INFO => 'info', + Logger::NOTICE => 'info', + Logger::WARNING => 'warn', + Logger::ERROR => 'error', + Logger::CRITICAL => 'error', + Logger::ALERT => 'error', + Logger::EMERGENCY => 'error', + ][$level] ?? 'log'; + } + /** * @return string[] */ diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php index b837bdb66..5715d5800 100644 --- a/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php +++ b/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php @@ -28,6 +28,7 @@ use Monolog\Formatter\FormatterInterface; * @see https://www.flowdock.com/api/push * * @phpstan-import-type FormattedRecord from AbstractProcessingHandler + * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4 */ class FlowdockHandler extends SocketHandler { diff --git a/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php index 2dd136720..b6d3d3b19 100644 --- a/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php +++ b/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php @@ -64,4 +64,18 @@ class WhatFailureGroupHandler extends GroupHandler } } } + + /** + * {@inheritDoc} + */ + public function close(): void + { + foreach ($this->handlers as $handler) { + try { + $handler->close(); + } catch (\Throwable $e) { + // What failure? + } + } + } } diff --git a/vendor/monolog/monolog/src/Monolog/Logger.php b/vendor/monolog/monolog/src/Monolog/Logger.php index 1ab75b9e0..84a2f5510 100644 --- a/vendor/monolog/monolog/src/Monolog/Logger.php +++ b/vendor/monolog/monolog/src/Monolog/Logger.php @@ -168,6 +168,11 @@ class Logger implements LoggerInterface, ResettableInterface */ private $logDepth = 0; + /** + * @var \WeakMap<\Fiber, int>|null Keeps track of depth inside fibers to prevent infinite logging loops + */ + private $fiberLogDepth; + /** * @var bool Whether to detect infinite logging loops * @@ -189,6 +194,13 @@ class Logger implements LoggerInterface, ResettableInterface $this->setHandlers($handlers); $this->processors = $processors; $this->timezone = $timezone ?: new DateTimeZone(date_default_timezone_get() ?: 'UTC'); + + if (\PHP_VERSION_ID >= 80100) { + // Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412 + /** @var \WeakMap<\Fiber, int> $fiberLogDepth */ + $fiberLogDepth = new \WeakMap(); + $this->fiberLogDepth = $fiberLogDepth; + } } public function getName(): string @@ -332,12 +344,20 @@ class Logger implements LoggerInterface, ResettableInterface } if ($this->detectCycles) { - $this->logDepth += 1; + if (\PHP_VERSION_ID >= 80100 && $fiber = \Fiber::getCurrent()) { + $this->fiberLogDepth[$fiber] = $this->fiberLogDepth[$fiber] ?? 0; + $logDepth = ++$this->fiberLogDepth[$fiber]; + } else { + $logDepth = ++$this->logDepth; + } + } else { + $logDepth = 0; } - if ($this->logDepth === 3) { + + if ($logDepth === 3) { $this->warning('A possible infinite logging loop was detected and aborted. It appears some of your handler code is triggering logging, see the previous log record for a hint as to what may be the cause.'); return false; - } elseif ($this->logDepth >= 5) { // log depth 4 is let through so we can log the warning above + } elseif ($logDepth >= 5) { // log depth 4 is let through, so we can log the warning above return false; } @@ -387,7 +407,11 @@ class Logger implements LoggerInterface, ResettableInterface } } finally { if ($this->detectCycles) { - $this->logDepth--; + if (isset($fiber)) { + $this->fiberLogDepth[$fiber]--; + } else { + $this->logDepth--; + } } } @@ -698,4 +722,40 @@ class Logger implements LoggerInterface, ResettableInterface ($this->exceptionHandler)($e, $record); } + + /** + * @return array + */ + public function __serialize(): array + { + return [ + 'name' => $this->name, + 'handlers' => $this->handlers, + 'processors' => $this->processors, + 'microsecondTimestamps' => $this->microsecondTimestamps, + 'timezone' => $this->timezone, + 'exceptionHandler' => $this->exceptionHandler, + 'logDepth' => $this->logDepth, + 'detectCycles' => $this->detectCycles, + ]; + } + + /** + * @param array $data + */ + public function __unserialize(array $data): void + { + foreach (['name', 'handlers', 'processors', 'microsecondTimestamps', 'timezone', 'exceptionHandler', 'logDepth', 'detectCycles'] as $property) { + if (isset($data[$property])) { + $this->$property = $data[$property]; + } + } + + if (\PHP_VERSION_ID >= 80100) { + // Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412 + /** @var \WeakMap<\Fiber, int> $fiberLogDepth */ + $fiberLogDepth = new \WeakMap(); + $this->fiberLogDepth = $fiberLogDepth; + } + } } diff --git a/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php index 2c2a00e75..e7c12176a 100644 --- a/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php +++ b/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php @@ -66,6 +66,8 @@ class PsrLogMessageProcessor implements ProcessorInterface } else { $replacements[$placeholder] = $val->format($this->dateFormat ?: static::SIMPLE_DATE); } + } elseif ($val instanceof \UnitEnum) { + $replacements[$placeholder] = $val instanceof \BackedEnum ? $val->value : $val->name; } elseif (is_object($val)) { $replacements[$placeholder] = '[object '.Utils::getClass($val).']'; } elseif (is_array($val)) { diff --git a/vendor/nette/utils/.phpstorm.meta.php b/vendor/nette/utils/.phpstorm.meta.php index 7810b4cc1..25851af66 100644 --- a/vendor/nette/utils/.phpstorm.meta.php +++ b/vendor/nette/utils/.phpstorm.meta.php @@ -9,11 +9,5 @@ override(\Nette\Utils\Arrays::getRef(0), elementType(0)); override(\Nette\Utils\Arrays::grep(0), type(0)); override(\Nette\Utils\Arrays::toObject(0), type(1)); -expectedArguments(\Nette\Utils\Arrays::grep(), 2, PREG_GREP_INVERT); -expectedArguments(\Nette\Utils\Image::resize(), 2, \Nette\Utils\Image::SHRINK_ONLY, \Nette\Utils\Image::STRETCH, \Nette\Utils\Image::FIT, \Nette\Utils\Image::FILL, \Nette\Utils\Image::EXACT); -expectedArguments(\Nette\Utils\Image::calculateSize(), 4, \Nette\Utils\Image::SHRINK_ONLY, \Nette\Utils\Image::STRETCH, \Nette\Utils\Image::FIT, \Nette\Utils\Image::FILL, \Nette\Utils\Image::EXACT); -expectedArguments(\Nette\Utils\Json::encode(), 1, \Nette\Utils\Json::PRETTY); -expectedArguments(\Nette\Utils\Json::decode(), 1, \Nette\Utils\Json::FORCE_ARRAY); -expectedArguments(\Nette\Utils\Strings::split(), 2, \PREG_SPLIT_NO_EMPTY | \PREG_OFFSET_CAPTURE); -expectedArguments(\Nette\Utils\Strings::match(), 2, \PREG_OFFSET_CAPTURE | \PREG_UNMATCHED_AS_NULL); -expectedArguments(\Nette\Utils\Strings::matchAll(), 2, \PREG_OFFSET_CAPTURE | \PREG_UNMATCHED_AS_NULL | \PREG_PATTERN_ORDER); +expectedArguments(\Nette\Utils\Image::resize(), 2, \Nette\Utils\Image::ShrinkOnly, \Nette\Utils\Image::Stretch, \Nette\Utils\Image::OrSmaller, \Nette\Utils\Image::OrBigger, \Nette\Utils\Image::Cover); +expectedArguments(\Nette\Utils\Image::calculateSize(), 4, \Nette\Utils\Image::ShrinkOnly, \Nette\Utils\Image::Stretch, \Nette\Utils\Image::OrSmaller, \Nette\Utils\Image::OrBigger, \Nette\Utils\Image::Cover); diff --git a/vendor/nette/utils/composer.json b/vendor/nette/utils/composer.json index ec4efb0e4..bbea12316 100644 --- a/vendor/nette/utils/composer.json +++ b/vendor/nette/utils/composer.json @@ -15,16 +15,17 @@ } ], "require": { - "php": ">=7.2 <8.3" + "php": ">=8.0 <8.3" }, "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3", + "nette/tester": "^2.4", + "tracy/tracy": "^2.9", "phpstan/phpstan": "^1.0", "jetbrains/phpstorm-attributes": "dev-master" }, "conflict": { - "nette/di": "<3.0.6" + "nette/finder": "<3", + "nette/schema": "<1.2.2" }, "suggest": { "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", @@ -45,7 +46,7 @@ }, "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "4.0-dev" } } } diff --git a/vendor/nette/utils/readme.md b/vendor/nette/utils/readme.md index 430cc7359..ff2ab46c3 100644 --- a/vendor/nette/utils/readme.md +++ b/vendor/nette/utils/readme.md @@ -17,6 +17,7 @@ In package nette/utils you will find a set of [useful classes](https://doc.nette - [Callback](https://doc.nette.org/utils/callback) - PHP callbacks - [Date and Time](https://doc.nette.org/utils/datetime) - modify times and dates - [Filesystem](https://doc.nette.org/utils/filesystem) - copying, renaming, … +- [Finder](https://doc.nette.org/utils/finder) - finds files and directories - [Helper Functions](https://doc.nette.org/utils/helpers) - [HTML elements](https://doc.nette.org/utils/html-elements) - generate HTML - [Images](https://doc.nette.org/utils/images) - crop, resize, rotate images @@ -39,6 +40,7 @@ The recommended way to install is via Composer: composer require nette/utils ``` +- Nette Utils 4.0 is compatible with PHP 8.0 to 8.2 - Nette Utils 3.2 is compatible with PHP 7.2 to 8.2 - Nette Utils 3.1 is compatible with PHP 7.1 to 8.0 - Nette Utils 3.0 is compatible with PHP 7.1 to 8.0 diff --git a/vendor/nette/utils/src/Iterators/CachingIterator.php b/vendor/nette/utils/src/Iterators/CachingIterator.php index b07bbbfa4..55368d9d7 100644 --- a/vendor/nette/utils/src/Iterators/CachingIterator.php +++ b/vendor/nette/utils/src/Iterators/CachingIterator.php @@ -28,8 +28,7 @@ class CachingIterator extends \CachingIterator implements \Countable { use Nette\SmartObject; - /** @var int */ - private $counter = 0; + private int $counter = 0; public function __construct($iterator) @@ -48,7 +47,7 @@ class CachingIterator extends \CachingIterator implements \Countable } elseif ($iterator instanceof \Traversable) { $iterator = new \IteratorIterator($iterator); } else { - throw new Nette\InvalidArgumentException(sprintf('Invalid argument passed to %s; array or Traversable expected, %s given.', self::class, is_object($iterator) ? get_class($iterator) : gettype($iterator))); + throw new Nette\InvalidArgumentException(sprintf('Invalid argument passed to %s; array or Traversable expected, %s given.', self::class, is_object($iterator) ? $iterator::class : gettype($iterator))); } parent::__construct($iterator, 0); @@ -148,9 +147,8 @@ class CachingIterator extends \CachingIterator implements \Countable /** * Returns the next key. - * @return mixed */ - public function getNextKey() + public function getNextKey(): mixed { return $this->getInnerIterator()->key(); } @@ -158,9 +156,8 @@ class CachingIterator extends \CachingIterator implements \Countable /** * Returns the next element. - * @return mixed */ - public function getNextValue() + public function getNextValue(): mixed { return $this->getInnerIterator()->current(); } diff --git a/vendor/nette/utils/src/Iterators/Mapper.php b/vendor/nette/utils/src/Iterators/Mapper.php index 1a8647c60..87823baf9 100644 --- a/vendor/nette/utils/src/Iterators/Mapper.php +++ b/vendor/nette/utils/src/Iterators/Mapper.php @@ -27,8 +27,7 @@ class Mapper extends \IteratorIterator } - #[\ReturnTypeWillChange] - public function current() + public function current(): mixed { return ($this->callback)(parent::current(), parent::key()); } diff --git a/vendor/nette/utils/src/SmartObject.php b/vendor/nette/utils/src/SmartObject.php index 7d4f30368..dca02d9dd 100644 --- a/vendor/nette/utils/src/SmartObject.php +++ b/vendor/nette/utils/src/SmartObject.php @@ -22,6 +22,7 @@ use Nette\Utils\ObjectHelpers; trait SmartObject { /** + * @return mixed * @throws MemberAccessException */ public function __call(string $name, array $args) @@ -37,9 +38,11 @@ trait SmartObject } elseif ($handlers !== null) { throw new UnexpectedValueException("Property $class::$$name must be iterable or null, " . gettype($handlers) . ' given.'); } - } else { - ObjectHelpers::strictCall($class, $name); + + return null; } + + ObjectHelpers::strictCall($class, $name); } @@ -87,11 +90,9 @@ trait SmartObject /** - * @param mixed $value - * @return void * @throws MemberAccessException if the property is not defined or is read-only */ - public function __set(string $name, $value) + public function __set(string $name, mixed $value): void { $class = static::class; @@ -121,10 +122,9 @@ trait SmartObject /** - * @return void * @throws MemberAccessException */ - public function __unset(string $name) + public function __unset(string $name): void { $class = static::class; if (!ObjectHelpers::hasProperty($class, $name)) { diff --git a/vendor/nette/utils/src/StaticClass.php b/vendor/nette/utils/src/StaticClass.php index 8fed0ef31..c719e3b6f 100644 --- a/vendor/nette/utils/src/StaticClass.php +++ b/vendor/nette/utils/src/StaticClass.php @@ -27,10 +27,9 @@ trait StaticClass /** * Call to undefined static method. - * @return void * @throws MemberAccessException */ - public static function __callStatic(string $name, array $args) + public static function __callStatic(string $name, array $args): mixed { Utils\ObjectHelpers::strictStaticCall(static::class, $name); } diff --git a/vendor/nette/utils/src/Translator.php b/vendor/nette/utils/src/Translator.php index 0f343a274..f973f5f15 100644 --- a/vendor/nette/utils/src/Translator.php +++ b/vendor/nette/utils/src/Translator.php @@ -17,10 +17,8 @@ interface Translator { /** * Translates the given string. - * @param mixed $message - * @param mixed ...$parameters */ - function translate($message, ...$parameters): string; + function translate(string|\Stringable $message, mixed ...$parameters): string|\Stringable; } diff --git a/vendor/nette/utils/src/Utils/ArrayHash.php b/vendor/nette/utils/src/Utils/ArrayHash.php index 46cad2ba0..2e2db4604 100644 --- a/vendor/nette/utils/src/Utils/ArrayHash.php +++ b/vendor/nette/utils/src/Utils/ArrayHash.php @@ -21,9 +21,8 @@ class ArrayHash extends \stdClass implements \ArrayAccess, \Countable, \Iterator /** * Transforms array to ArrayHash. * @param array $array - * @return static */ - public static function from(array $array, bool $recursive = true) + public static function from(array $array, bool $recursive = true): static { $obj = new static; foreach ($array as $key => $value) { @@ -38,11 +37,13 @@ class ArrayHash extends \stdClass implements \ArrayAccess, \Countable, \Iterator /** * Returns an iterator over all items. - * @return \RecursiveArrayIterator + * @return \Iterator */ - public function getIterator(): \RecursiveArrayIterator + public function &getIterator(): \Iterator { - return new \RecursiveArrayIterator((array) $this); + foreach ((array) $this as $key => $foo) { + yield $key => $this->$key; + } } diff --git a/vendor/nette/utils/src/Utils/ArrayList.php b/vendor/nette/utils/src/Utils/ArrayList.php index de9220922..4f32061b4 100644 --- a/vendor/nette/utils/src/Utils/ArrayList.php +++ b/vendor/nette/utils/src/Utils/ArrayList.php @@ -20,16 +20,14 @@ class ArrayList implements \ArrayAccess, \Countable, \IteratorAggregate { use Nette\SmartObject; - /** @var mixed[] */ - private $list = []; + private array $list = []; /** * Transforms array to ArrayList. * @param array $array - * @return static */ - public static function from(array $array) + public static function from(array $array): static { if (!Arrays::isList($array)) { throw new Nette\InvalidArgumentException('Array is not valid list.'); @@ -43,11 +41,13 @@ class ArrayList implements \ArrayAccess, \Countable, \IteratorAggregate /** * Returns an iterator over all items. - * @return \ArrayIterator + * @return \Iterator */ - public function getIterator(): \ArrayIterator + public function &getIterator(): \Iterator { - return new \ArrayIterator($this->list); + foreach ($this->list as &$item) { + yield $item; + } } @@ -86,8 +86,7 @@ class ArrayList implements \ArrayAccess, \Countable, \IteratorAggregate * @return T * @throws Nette\OutOfRangeException */ - #[\ReturnTypeWillChange] - public function offsetGet($index) + public function offsetGet($index): mixed { if (!is_int($index) || $index < 0 || $index >= count($this->list)) { throw new Nette\OutOfRangeException('Offset invalid or out of range'); @@ -126,7 +125,7 @@ class ArrayList implements \ArrayAccess, \Countable, \IteratorAggregate * Prepends a item. * @param T $value */ - public function prepend($value): void + public function prepend(mixed $value): void { $first = array_slice($this->list, 0, 1); $this->offsetSet(0, $value); diff --git a/vendor/nette/utils/src/Utils/Arrays.php b/vendor/nette/utils/src/Utils/Arrays.php index 7546550e2..336b3dfce 100644 --- a/vendor/nette/utils/src/Utils/Arrays.php +++ b/vendor/nette/utils/src/Utils/Arrays.php @@ -30,7 +30,7 @@ class Arrays * @return ?T * @throws Nette\InvalidArgumentException if item does not exist and default value is not provided */ - public static function get(array $array, $key, $default = null) + public static function get(array $array, string|int|array $key, mixed $default = null): mixed { foreach (is_array($key) ? $key : [$key] as $k) { if (is_array($array) && array_key_exists($k, $array)) { @@ -56,7 +56,7 @@ class Arrays * @return ?T * @throws Nette\InvalidArgumentException if traversed item is not an array */ - public static function &getRef(array &$array, $key) + public static function &getRef(array &$array, string|int|array $key): mixed { foreach (is_array($key) ? $key : [$key] as $k) { if (is_array($array) || $array === null) { @@ -95,10 +95,8 @@ class Arrays /** * Returns zero-indexed position of given array key. Returns null if key is not found. - * @param array-key $key - * @return int|null offset if it is found, null otherwise */ - public static function getKeyOffset(array $array, $key): ?int + public static function getKeyOffset(array $array, string|int $key): ?int { return Helpers::falseToNull(array_search(self::toKey($key), array_keys($array), true)); } @@ -115,9 +113,8 @@ class Arrays /** * Tests an array for the presence of value. - * @param mixed $value */ - public static function contains(array $array, $value): bool + public static function contains(array $array, mixed $value): bool { return in_array($value, $array, true); } @@ -129,7 +126,7 @@ class Arrays * @param array $array * @return ?T */ - public static function first(array $array) + public static function first(array $array): mixed { return count($array) ? reset($array) : null; } @@ -141,7 +138,7 @@ class Arrays * @param array $array * @return ?T */ - public static function last(array $array) + public static function last(array $array): mixed { return count($array) ? end($array) : null; } @@ -150,9 +147,8 @@ class Arrays /** * Inserts the contents of the $inserted array into the $array immediately after the $key. * If $key is null (or does not exist), it is inserted at the beginning. - * @param array-key|null $key */ - public static function insertBefore(array &$array, $key, array $inserted): void + public static function insertBefore(array &$array, string|int|null $key, array $inserted): void { $offset = $key === null ? 0 : (int) self::getKeyOffset($array, $key); $array = array_slice($array, 0, $offset, true) @@ -164,9 +160,8 @@ class Arrays /** * Inserts the contents of the $inserted array into the $array before the $key. * If $key is null (or does not exist), it is inserted at the end. - * @param array-key|null $key */ - public static function insertAfter(array &$array, $key, array $inserted): void + public static function insertAfter(array &$array, string|int|null $key, array $inserted): void { if ($key === null || ($offset = self::getKeyOffset($array, $key)) === null) { $offset = count($array) - 1; @@ -180,10 +175,8 @@ class Arrays /** * Renames key in array. - * @param array-key $oldKey - * @param array-key $newKey */ - public static function renameKey(array &$array, $oldKey, $newKey): bool + public static function renameKey(array &$array, string|int $oldKey, string|int $newKey): bool { $offset = self::getKeyOffset($array, $oldKey); if ($offset === null) { @@ -208,9 +201,10 @@ class Arrays array $array, #[Language('RegExp')] string $pattern, - int $flags = 0 + bool|int $invert = false, ): array { + $flags = $invert ? PREG_GREP_INVERT : 0; return Strings::pcre('preg_grep', [$pattern, $array, $flags]); } @@ -231,9 +225,8 @@ class Arrays /** * Checks if the array is indexed in ascending order of numeric keys from zero, a.k.a list. - * @param mixed $value */ - public static function isList($value): bool + public static function isList(mixed $value): bool { return is_array($value) && (PHP_VERSION_ID < 80100 ? !$value || array_keys($value) === range(0, count($value) - 1) @@ -245,9 +238,8 @@ class Arrays /** * Reformats table to associative tree. Path looks like 'field|field[]field->field=field'. * @param string|string[] $path - * @return array|\stdClass */ - public static function associate(array $array, $path) + public static function associate(array $array, $path): array|\stdClass { $parts = is_array($path) ? $path @@ -299,9 +291,8 @@ class Arrays /** * Normalizes array to associative array. Replace numeric keys with their values, the new value will be $filling. - * @param mixed $filling */ - public static function normalize(array $array, $filling = null): array + public static function normalize(array $array, mixed $filling = null): array { $res = []; foreach ($array as $k => $v) { @@ -317,12 +308,11 @@ class Arrays * or returns $default, if provided. * @template T * @param array $array - * @param array-key $key * @param ?T $default * @return ?T * @throws Nette\InvalidArgumentException if item does not exist and default value is not provided */ - public static function pick(array &$array, $key, $default = null) + public static function pick(array &$array, string|int $key, mixed $default = null): mixed { if (array_key_exists($key, $array)) { $value = $array[$key]; @@ -421,7 +411,7 @@ class Arrays * @param T $object * @return T */ - public static function toObject(iterable $array, $object) + public static function toObject(iterable $array, object $object): object { foreach ($array as $k => $v) { $object->$k = $v; @@ -433,10 +423,8 @@ class Arrays /** * Converts value to array key. - * @param mixed $value - * @return array-key */ - public static function toKey($value) + public static function toKey(mixed $value): int|string { return key([$value => null]); } diff --git a/vendor/nette/utils/src/Utils/Callback.php b/vendor/nette/utils/src/Utils/Callback.php index 04e886a6f..496c1e7ab 100644 --- a/vendor/nette/utils/src/Utils/Callback.php +++ b/vendor/nette/utils/src/Utils/Callback.php @@ -20,52 +20,10 @@ final class Callback { use Nette\StaticClass; - /** - * @param string|object|callable $callable class, object, callable - * @deprecated use Closure::fromCallable() - */ - public static function closure($callable, ?string $method = null): \Closure - { - trigger_error(__METHOD__ . '() is deprecated, use Closure::fromCallable().', E_USER_DEPRECATED); - try { - return \Closure::fromCallable($method === null ? $callable : [$callable, $method]); - } catch (\TypeError $e) { - throw new Nette\InvalidArgumentException($e->getMessage()); - } - } - - - /** - * Invokes callback. - * @return mixed - * @deprecated - */ - public static function invoke($callable, ...$args) - { - trigger_error(__METHOD__ . '() is deprecated, use native invoking.', E_USER_DEPRECATED); - self::check($callable); - return $callable(...$args); - } - - - /** - * Invokes callback with an array of parameters. - * @return mixed - * @deprecated - */ - public static function invokeArgs($callable, array $args = []) - { - trigger_error(__METHOD__ . '() is deprecated, use native invoking.', E_USER_DEPRECATED); - self::check($callable); - return $callable(...$args); - } - - /** * Invokes internal PHP function with own error handler. - * @return mixed */ - public static function invokeSafe(string $function, array $args, callable $onError) + public static function invokeSafe(string $function, array $args, callable $onError): mixed { $prev = set_error_handler(function ($severity, $message, $file) use ($onError, &$prev, $function): ?bool { if ($file === __FILE__) { @@ -92,17 +50,16 @@ final class Callback /** * Checks that $callable is valid PHP callback. Otherwise throws exception. If the $syntax is set to true, only verifies * that $callable has a valid structure to be used as a callback, but does not verify if the class or method actually exists. - * @param mixed $callable * @return callable * @throws Nette\InvalidArgumentException */ - public static function check($callable, bool $syntax = false) + public static function check(mixed $callable, bool $syntax = false) { if (!is_callable($callable, $syntax)) { throw new Nette\InvalidArgumentException( $syntax ? 'Given value is not a callable type.' - : sprintf("Callback '%s' is not callable.", self::toString($callable)) + : sprintf("Callback '%s' is not callable.", self::toString($callable)), ); } @@ -112,15 +69,12 @@ final class Callback /** * Converts PHP callback to textual form. Class or method may not exists. - * @param mixed $callable */ - public static function toString($callable): string + public static function toString(mixed $callable): string { if ($callable instanceof \Closure) { $inner = self::unwrap($callable); return '{closure' . ($inner instanceof \Closure ? '}' : ' ' . self::toString($inner) . '}'); - } elseif (is_string($callable) && $callable[0] === "\0") { - return '{lambda}'; } else { is_callable(is_object($callable) ? [$callable, '__invoke'] : $callable, true, $textual); return $textual; @@ -131,16 +85,15 @@ final class Callback /** * Returns reflection for method or function used in PHP callback. * @param callable $callable type check is escalated to ReflectionException - * @return \ReflectionMethod|\ReflectionFunction * @throws \ReflectionException if callback is not valid */ - public static function toReflection($callable): \ReflectionFunctionAbstract + public static function toReflection($callable): \ReflectionMethod|\ReflectionFunction { if ($callable instanceof \Closure) { $callable = self::unwrap($callable); } - if (is_string($callable) && strpos($callable, '::')) { + if (is_string($callable) && str_contains($callable, '::')) { return new \ReflectionMethod($callable); } elseif (is_array($callable)) { return new \ReflectionMethod($callable[0], $callable[1]); @@ -163,12 +116,11 @@ final class Callback /** * Unwraps closure created by Closure::fromCallable(). - * @return callable|array */ - public static function unwrap(\Closure $closure) + public static function unwrap(\Closure $closure): callable|array { $r = new \ReflectionFunction($closure); - if (substr($r->name, -1) === '}') { + if (str_ends_with($r->name, '}')) { return $closure; } elseif ($obj = $r->getClosureThis()) { diff --git a/vendor/nette/utils/src/Utils/DateTime.php b/vendor/nette/utils/src/Utils/DateTime.php index aa61a4b4f..963407c0d 100644 --- a/vendor/nette/utils/src/Utils/DateTime.php +++ b/vendor/nette/utils/src/Utils/DateTime.php @@ -32,19 +32,17 @@ class DateTime extends \DateTime implements \JsonSerializable public const WEEK = 7 * self::DAY; /** average month in seconds */ - public const MONTH = 2629800; + public const MONTH = 2_629_800; /** average year in seconds */ - public const YEAR = 31557600; + public const YEAR = 31_557_600; /** * Creates a DateTime object from a string, UNIX timestamp, or other DateTimeInterface object. - * @param string|int|\DateTimeInterface $time - * @return static * @throws \Exception if the date and time are not valid. */ - public static function from($time) + public static function from(string|int|\DateTimeInterface|null $time): static { if ($time instanceof \DateTimeInterface) { return new static($time->format('Y-m-d H:i:s.u'), $time->getTimezone()); @@ -64,7 +62,6 @@ class DateTime extends \DateTime implements \JsonSerializable /** * Creates DateTime object. - * @return static * @throws Nette\InvalidArgumentException if the date and time are not valid. */ public static function fromParts( @@ -73,8 +70,9 @@ class DateTime extends \DateTime implements \JsonSerializable int $day, int $hour = 0, int $minute = 0, - float $second = 0.0 - ) { + float $second = 0.0, + ): static + { $s = sprintf('%04d-%02d-%02d %02d:%02d:%02.5F', $year, $month, $day, $hour, $minute, $second); if ( !checkdate($month, $day, $year) @@ -94,22 +92,18 @@ class DateTime extends \DateTime implements \JsonSerializable /** * Returns new DateTime object formatted according to the specified format. - * @param string $format The format the $time parameter should be in - * @param string $time - * @param string|\DateTimeZone $timezone (default timezone is used if null is passed) - * @return static|false */ - #[\ReturnTypeWillChange] - public static function createFromFormat($format, $time, $timezone = null) + public static function createFromFormat( + string $format, + string $time, + string|\DateTimeZone|null $timezone = null, + ): static|false { if ($timezone === null) { $timezone = new \DateTimeZone(date_default_timezone_get()); } elseif (is_string($timezone)) { $timezone = new \DateTimeZone($timezone); - - } elseif (!$timezone instanceof \DateTimeZone) { - throw new Nette\InvalidArgumentException('Invalid timezone given'); } $date = parent::createFromFormat($format, $time, $timezone); @@ -137,9 +131,8 @@ class DateTime extends \DateTime implements \JsonSerializable /** * Creates a copy with a modified time. - * @return static */ - public function modifyClone(string $modify = '') + public function modifyClone(string $modify = ''): static { $dolly = clone $this; return $modify ? $dolly->modify($modify) : $dolly; diff --git a/vendor/nette/utils/src/Utils/FileInfo.php b/vendor/nette/utils/src/Utils/FileInfo.php new file mode 100644 index 000000000..fb92d1191 --- /dev/null +++ b/vendor/nette/utils/src/Utils/FileInfo.php @@ -0,0 +1,69 @@ +setInfoClass(static::class); + $this->relativePath = $relativePath; + } + + + /** + * Returns the relative directory path. + */ + public function getRelativePath(): string + { + return $this->relativePath; + } + + + /** + * Returns the relative path including file name. + */ + public function getRelativePathname(): string + { + return ($this->relativePath === '' ? '' : $this->relativePath . DIRECTORY_SEPARATOR) + . $this->getBasename(); + } + + + /** + * Returns the contents of the file. + * @throws Nette\IOException + */ + public function read(): string + { + return FileSystem::read($this->getPathname()); + } + + + /** + * Writes the contents to the file. + * @throws Nette\IOException + */ + public function write(string $content): void + { + FileSystem::write($this->getPathname(), $content); + } +} diff --git a/vendor/nette/utils/src/Utils/FileSystem.php b/vendor/nette/utils/src/Utils/FileSystem.php index c61603380..a51539bec 100644 --- a/vendor/nette/utils/src/Utils/FileSystem.php +++ b/vendor/nette/utils/src/Utils/FileSystem.php @@ -20,7 +20,7 @@ final class FileSystem use Nette\StaticClass; /** - * Creates a directory if it doesn't exist. + * Creates a directory if it does not exist, including parent directories. * @throws Nette\IOException on error occurred */ public static function createDir(string $dir, int $mode = 0777): void @@ -30,14 +30,14 @@ final class FileSystem "Unable to create directory '%s' with mode %s. %s", self::normalizePath($dir), decoct($mode), - Helpers::getLastError() + Helpers::getLastError(), )); } } /** - * Copies a file or a directory. Overwrites existing files and directories by default. + * Copies a file or an entire directory. Overwrites existing files and directories by default. * @throws Nette\IOException on error occurred * @throws Nette\InvalidStateException if $overwrite is set to false and destination already exists */ @@ -64,16 +64,12 @@ final class FileSystem } } else { static::createDir(dirname($target)); - if ( - ($s = @fopen($origin, 'rb')) - && ($d = @fopen($target, 'wb')) - && @stream_copy_to_stream($s, $d) === false - ) { // @ is escalated to exception + if (@stream_copy_to_stream(static::open($origin, 'rb'), static::open($target, 'wb')) === false) { // @ is escalated to exception throw new Nette\IOException(sprintf( "Unable to copy file '%s' to '%s'. %s", self::normalizePath($origin), self::normalizePath($target), - Helpers::getLastError() + Helpers::getLastError(), )); } } @@ -81,7 +77,26 @@ final class FileSystem /** - * Deletes a file or directory if exists. + * Opens file and returns resource. + * @return resource + * @throws Nette\IOException on error occurred + */ + public static function open(string $path, string $mode) + { + $f = @fopen($path, $mode); // @ is escalated to exception + if (!$f) { + throw new Nette\IOException(sprintf( + "Unable to open file '%s'. %s", + self::normalizePath($path), + Helpers::getLastError(), + )); + } + return $f; + } + + + /** + * Deletes a file or an entire directory if exists. If the directory is not empty, it deletes its contents first. * @throws Nette\IOException on error occurred */ public static function delete(string $path): void @@ -92,7 +107,7 @@ final class FileSystem throw new Nette\IOException(sprintf( "Unable to delete '%s'. %s", self::normalizePath($path), - Helpers::getLastError() + Helpers::getLastError(), )); } } elseif (is_dir($path)) { @@ -104,7 +119,7 @@ final class FileSystem throw new Nette\IOException(sprintf( "Unable to delete directory '%s'. %s", self::normalizePath($path), - Helpers::getLastError() + Helpers::getLastError(), )); } } @@ -135,7 +150,7 @@ final class FileSystem "Unable to rename file or directory '%s' to '%s'. %s", self::normalizePath($origin), self::normalizePath($target), - Helpers::getLastError() + Helpers::getLastError(), )); } } @@ -153,7 +168,7 @@ final class FileSystem throw new Nette\IOException(sprintf( "Unable to read file '%s'. %s", self::normalizePath($file), - Helpers::getLastError() + Helpers::getLastError(), )); } @@ -161,6 +176,37 @@ final class FileSystem } + /** + * Reads the file content line by line. Because it reads continuously as we iterate over the lines, + * it is possible to read files larger than the available memory. + * @return \Generator + * @throws Nette\IOException on error occurred + */ + public static function readLines(string $file, bool $stripNewLines = true): \Generator + { + return (function ($f) use ($file, $stripNewLines) { + $counter = 0; + do { + $line = Callback::invokeSafe('fgets', [$f], fn($error) => throw new Nette\IOException(sprintf( + "Unable to read file '%s'. %s", + self::normalizePath($file), + $error, + ))); + if ($line === false) { + fclose($f); + break; + } + if ($stripNewLines) { + $line = rtrim($line, "\r\n"); + } + + yield $counter++ => $line; + + } while (true); + })(static::open($file, 'r')); + } + + /** * Writes the string to a file. * @throws Nette\IOException on error occurred @@ -172,7 +218,7 @@ final class FileSystem throw new Nette\IOException(sprintf( "Unable to write file '%s'. %s", self::normalizePath($file), - Helpers::getLastError() + Helpers::getLastError(), )); } @@ -181,14 +227,15 @@ final class FileSystem "Unable to chmod file '%s' to mode %s. %s", self::normalizePath($file), decoct($mode), - Helpers::getLastError() + Helpers::getLastError(), )); } } /** - * Fixes permissions to a specific file or directory. Directories can be fixed recursively. + * Sets file permissions to `$fileMode` or directory permissions to `$dirMode`. + * Recursively traverses and sets permissions on the entire contents of the directory as well. * @throws Nette\IOException on error occurred */ public static function makeWritable(string $path, int $dirMode = 0777, int $fileMode = 0666): void @@ -199,7 +246,7 @@ final class FileSystem "Unable to chmod file '%s' to mode %s. %s", self::normalizePath($path), decoct($fileMode), - Helpers::getLastError() + Helpers::getLastError(), )); } } elseif (is_dir($path)) { @@ -212,7 +259,7 @@ final class FileSystem "Unable to chmod directory '%s' to mode %s. %s", self::normalizePath($path), decoct($dirMode), - Helpers::getLastError() + Helpers::getLastError(), )); } } else { @@ -258,4 +305,24 @@ final class FileSystem { return self::normalizePath(implode('/', $paths)); } + + + /** + * Converts backslashes to slashes. + */ + public static function unixSlashes(string $path): string + { + return strtr($path, '\\', '/'); + } + + + /** + * Converts slashes to platform-specific directory separators. + */ + public static function platformSlashes(string $path): string + { + return DIRECTORY_SEPARATOR === '/' + ? strtr($path, '\\', '/') + : str_replace(':\\\\', '://', strtr($path, '/', '\\')); // protocol:// + } } diff --git a/vendor/nette/utils/src/Utils/Finder.php b/vendor/nette/utils/src/Utils/Finder.php new file mode 100644 index 000000000..491f6902e --- /dev/null +++ b/vendor/nette/utils/src/Utils/Finder.php @@ -0,0 +1,505 @@ +size('> 10kB') + * ->from('.') + * ->exclude('temp'); + * + * @implements \IteratorAggregate + */ +class Finder implements \IteratorAggregate +{ + use Nette\SmartObject; + + /** @var array */ + private array $find = []; + + /** @var string[] */ + private array $in = []; + + /** @var \Closure[] */ + private array $filters = []; + + /** @var \Closure[] */ + private array $descentFilters = []; + + /** @var array */ + private array $appends = []; + private bool $childFirst = false; + + /** @var ?callable */ + private $sort; + private int $maxDepth = -1; + private bool $ignoreUnreadableDirs = true; + + + /** + * Begins search for files and directories matching mask. + */ + public static function find(string|array $masks): static + { + $masks = is_array($masks) ? $masks : func_get_args(); // compatibility with variadic + return (new static)->addMask($masks, 'dir')->addMask($masks, 'file'); + } + + + /** + * Begins search for files matching mask. + */ + public static function findFiles(string|array $masks): static + { + $masks = is_array($masks) ? $masks : func_get_args(); // compatibility with variadic + return (new static)->addMask($masks, 'file'); + } + + + /** + * Begins search for directories matching mask. + */ + public static function findDirectories(string|array $masks): static + { + $masks = is_array($masks) ? $masks : func_get_args(); // compatibility with variadic + return (new static)->addMask($masks, 'dir'); + } + + + /** + * Finds files matching the specified masks. + */ + public function files(string|array $masks): static + { + return $this->addMask((array) $masks, 'file'); + } + + + /** + * Finds directories matching the specified masks. + */ + public function directories(string|array $masks): static + { + return $this->addMask((array) $masks, 'dir'); + } + + + private function addMask(array $masks, string $mode): static + { + foreach ($masks as $mask) { + $mask = FileSystem::unixSlashes($mask); + if ($mode === 'dir') { + $mask = rtrim($mask, '/'); + } + if ($mask === '' || ($mode === 'file' && str_ends_with($mask, '/'))) { + throw new Nette\InvalidArgumentException("Invalid mask '$mask'"); + } + if (str_starts_with($mask, '**/')) { + $mask = substr($mask, 3); + } + $this->find[] = [$mask, $mode]; + } + return $this; + } + + + /** + * Searches in the given directories. Wildcards are allowed. + */ + public function in(string|array $paths): static + { + $paths = is_array($paths) ? $paths : func_get_args(); // compatibility with variadic + $this->addLocation($paths, ''); + return $this; + } + + + /** + * Searches recursively from the given directories. Wildcards are allowed. + */ + public function from(string|array $paths): static + { + $paths = is_array($paths) ? $paths : func_get_args(); // compatibility with variadic + $this->addLocation($paths, '/**'); + return $this; + } + + + private function addLocation(array $paths, string $ext): void + { + foreach ($paths as $path) { + if ($path === '') { + throw new Nette\InvalidArgumentException("Invalid directory '$path'"); + } + $path = rtrim(FileSystem::unixSlashes($path), '/'); + $this->in[] = $path . $ext; + } + } + + + /** + * Lists directory's contents before the directory itself. By default, this is disabled. + */ + public function childFirst(bool $state = true): static + { + $this->childFirst = $state; + return $this; + } + + + /** + * Ignores unreadable directories. By default, this is enabled. + */ + public function ignoreUnreadableDirs(bool $state = true): static + { + $this->ignoreUnreadableDirs = $state; + return $this; + } + + + /** + * Set a compare function for sorting directory entries. The function will be called to sort entries from the same directory. + * @param callable(FileInfo, FileInfo): int $callback + */ + public function sortBy(callable $callback): static + { + $this->sort = $callback; + return $this; + } + + + /** + * Sorts files in each directory naturally by name. + */ + public function sortByName(): static + { + $this->sort = fn(FileInfo $a, FileInfo $b): int => strnatcmp($a->getBasename(), $b->getBasename()); + return $this; + } + + + /** + * Adds the specified paths or appends a new finder that returns. + */ + public function append(string|array|null $paths = null): static + { + if ($paths === null) { + return $this->appends[] = new static; + } + + $this->appends = array_merge($this->appends, (array) $paths); + return $this; + } + + + /********************* filtering ****************d*g**/ + + + /** + * Skips entries that matches the given masks relative to the ones defined with the in() or from() methods. + */ + public function exclude(string|array $masks): static + { + $masks = is_array($masks) ? $masks : func_get_args(); // compatibility with variadic + foreach ($masks as $mask) { + $mask = FileSystem::unixSlashes($mask); + if (!preg_match('~^/?(\*\*/)?(.+)(/\*\*|/\*|/|)$~D', $mask, $m)) { + throw new Nette\InvalidArgumentException("Invalid mask '$mask'"); + } + $end = $m[3]; + $re = $this->buildPattern($m[2]); + $filter = fn(FileInfo $file): bool => ($end && !$file->isDir()) + || !preg_match($re, FileSystem::unixSlashes($file->getRelativePathname())); + + $this->descentFilter($filter); + if ($end !== '/*') { + $this->filter($filter); + } + } + + return $this; + } + + + /** + * Yields only entries which satisfy the given filter. + * @param callable(FileInfo): bool $callback + */ + public function filter(callable $callback): static + { + $this->filters[] = \Closure::fromCallable($callback); + return $this; + } + + + /** + * It descends only to directories that match the specified filter. + * @param callable(FileInfo): bool $callback + */ + public function descentFilter(callable $callback): static + { + $this->descentFilters[] = \Closure::fromCallable($callback); + return $this; + } + + + /** + * Sets the maximum depth of entries. + */ + public function limitDepth(?int $depth): static + { + $this->maxDepth = $depth ?? -1; + return $this; + } + + + /** + * Restricts the search by size. $operator accepts "[operator] [size] [unit]" example: >=10kB + */ + public function size(string $operator, ?int $size = null): static + { + if (func_num_args() === 1) { // in $operator is predicate + if (!preg_match('#^(?:([=<>!]=?|<>)\s*)?((?:\d*\.)?\d+)\s*(K|M|G|)B?$#Di', $operator, $matches)) { + throw new Nette\InvalidArgumentException('Invalid size predicate format.'); + } + + [, $operator, $size, $unit] = $matches; + $units = ['' => 1, 'k' => 1e3, 'm' => 1e6, 'g' => 1e9]; + $size *= $units[strtolower($unit)]; + $operator = $operator ?: '='; + } + + return $this->filter(fn(FileInfo $file): bool => !$file->isFile() || Helpers::compare($file->getSize(), $operator, $size)); + } + + + /** + * Restricts the search by modified time. $operator accepts "[operator] [date]" example: >1978-01-23 + */ + public function date(string $operator, string|int|\DateTimeInterface|null $date = null): static + { + if (func_num_args() === 1) { // in $operator is predicate + if (!preg_match('#^(?:([=<>!]=?|<>)\s*)?(.+)$#Di', $operator, $matches)) { + throw new Nette\InvalidArgumentException('Invalid date predicate format.'); + } + + [, $operator, $date] = $matches; + $operator = $operator ?: '='; + } + + $date = DateTime::from($date)->format('U'); + return $this->filter(fn(FileInfo $file): bool => !$file->isFile() || Helpers::compare($file->getMTime(), $operator, $date)); + } + + + /********************* iterator generator ****************d*g**/ + + + /** + * Returns an array with all found files and directories. + */ + public function collect(): array + { + return iterator_to_array($this->getIterator()); + } + + + /** @return \Generator */ + public function getIterator(): \Generator + { + $plan = $this->buildPlan(); + foreach ($plan as $dir => $searches) { + yield from $this->traverseDir($dir, $searches); + } + + foreach ($this->appends as $item) { + if ($item instanceof self) { + yield from $item->getIterator(); + } else { + $item = FileSystem::platformSlashes($item); + yield $item => new FileInfo($item); + } + } + } + + + /** + * @param array<\stdClass{pattern: string, mode: string, recursive: bool}> $searches + * @param string[] $subdirs + * @return \Generator + */ + private function traverseDir(string $dir, array $searches, array $subdirs = []): \Generator + { + if ($this->maxDepth >= 0 && count($subdirs) > $this->maxDepth) { + return; + } elseif (!is_dir($dir)) { + throw new Nette\InvalidStateException("Directory '$dir' not found."); + } + + try { + $pathNames = new \FilesystemIterator($dir, \FilesystemIterator::FOLLOW_SYMLINKS | \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::CURRENT_AS_PATHNAME | \FilesystemIterator::UNIX_PATHS); + } catch (\UnexpectedValueException $e) { + if ($this->ignoreUnreadableDirs) { + return; + } else { + throw new Nette\InvalidStateException($e->getMessage()); + } + } + + $files = $this->convertToFiles($pathNames, implode('/', $subdirs), FileSystem::isAbsolute($dir)); + + if ($this->sort) { + $files = iterator_to_array($files); + usort($files, $this->sort); + } + + foreach ($files as $file) { + $pathName = $file->getPathname(); + $cache = $subSearch = []; + + if ($file->isDir()) { + foreach ($searches as $search) { + if ($search->recursive && $this->proveFilters($this->descentFilters, $file, $cache)) { + $subSearch[] = $search; + } + } + } + + if ($this->childFirst && $subSearch) { + yield from $this->traverseDir($pathName, $subSearch, array_merge($subdirs, [$file->getBasename()])); + } + + $relativePathname = FileSystem::unixSlashes($file->getRelativePathname()); + foreach ($searches as $search) { + if ( + $file->getType() === $search->mode + && preg_match($search->pattern, $relativePathname) + && $this->proveFilters($this->filters, $file, $cache) + ) { + yield $pathName => $file; + break; + } + } + + if (!$this->childFirst && $subSearch) { + yield from $this->traverseDir($pathName, $subSearch, array_merge($subdirs, [$file->getBasename()])); + } + } + } + + + private function convertToFiles(iterable $pathNames, string $relativePath, bool $absolute): \Generator + { + foreach ($pathNames as $pathName) { + if (!$absolute) { + $pathName = preg_replace('~\.?/~A', '', $pathName); + } + $pathName = FileSystem::platformSlashes($pathName); + yield new FileInfo($pathName, $relativePath); + } + } + + + private function proveFilters(array $filters, FileInfo $file, array &$cache): bool + { + foreach ($filters as $filter) { + $res = &$cache[spl_object_id($filter)]; + $res ??= $filter($file); + if (!$res) { + return false; + } + } + + return true; + } + + + /** @return array > */ + private function buildPlan(): array + { + $plan = $dirCache = []; + foreach ($this->find as [$mask, $mode]) { + $splits = []; + if (FileSystem::isAbsolute($mask)) { + if ($this->in) { + throw new Nette\InvalidStateException("You cannot combine the absolute path in the mask '$mask' and the directory to search '{$this->in[0]}'."); + } + $splits[] = self::splitRecursivePart($mask); + } else { + foreach ($this->in ?: ['.'] as $in) { + $in = strtr($in, ['[' => '[[]', ']' => '[]]']); // in path, do not treat [ and ] as a pattern by glob() + $splits[] = self::splitRecursivePart($in . '/' . $mask); + } + } + + foreach ($splits as [$base, $rest, $recursive]) { + $base = $base === '' ? '.' : $base; + $dirs = $dirCache[$base] ??= strpbrk($base, '*?[') + ? glob($base, GLOB_NOSORT | GLOB_ONLYDIR | GLOB_NOESCAPE) + : [strtr($base, ['[[]' => '[', '[]]' => ']'])]; // unescape [ and ] + + $search = (object) ['pattern' => $this->buildPattern($rest), 'mode' => $mode, 'recursive' => $recursive]; + foreach ($dirs as $dir) { + $plan[$dir][] = $search; + } + } + } + + return $plan; + } + + + /** + * Since glob() does not know ** wildcard, we divide the path into a part for glob and a part for manual traversal. + */ + private static function splitRecursivePart(string $path): array + { + $a = strrpos($path, '/'); + $parts = preg_split('~(?<=^|/)\*\*($|/)~', substr($path, 0, $a + 1), 2); + return isset($parts[1]) + ? [$parts[0], $parts[1] . substr($path, $a + 1), true] + : [$parts[0], substr($path, $a + 1), false]; + } + + + /** + * Converts wildcards to regular expression. + */ + private function buildPattern(string $mask): string + { + if ($mask === '*') { + return '##'; + } elseif (str_starts_with($mask, './')) { + $anchor = '^'; + $mask = substr($mask, 2); + } else { + $anchor = '(?:^|/)'; + } + + $pattern = strtr( + preg_quote($mask, '#'), + [ + '\*\*/' => '(.+/)?', + '\*' => '[^/]*', + '\?' => '[^/]', + '\[\!' => '[^', + '\[' => '[', + '\]' => ']', + '\-' => '-', + ], + ); + return '#' . $anchor . $pattern . '$#D' . (defined('PHP_WINDOWS_VERSION_BUILD') ? 'i' : ''); + } +} diff --git a/vendor/nette/utils/src/Utils/Helpers.php b/vendor/nette/utils/src/Utils/Helpers.php index 224a1fe5c..b3586c16c 100644 --- a/vendor/nette/utils/src/Utils/Helpers.php +++ b/vendor/nette/utils/src/Utils/Helpers.php @@ -45,10 +45,8 @@ class Helpers /** * Converts false to null, does not change other values. - * @param mixed $value - * @return mixed */ - public static function falseToNull($value) + public static function falseToNull(mixed $value): mixed { return $value === false ? null : $value; } @@ -56,12 +54,8 @@ class Helpers /** * Returns value clamped to the inclusive range of min and max. - * @param int|float $value - * @param int|float $min - * @param int|float $max - * @return int|float */ - public static function clamp($value, $min, $max) + public static function clamp(int|float $value, int|float $min, int|float $max): int|float { if ($min > $max) { throw new Nette\InvalidArgumentException("Minimum ($min) is not less than maximum ($max)."); @@ -88,4 +82,23 @@ class Helpers return $best; } + + + /** + * Compares two values in the same way that PHP does. Recognizes operators: >, >=, <, <=, =, ==, ===, !=, !==, <> + */ + public static function compare(mixed $left, string $operator, mixed $right): bool + { + return match ($operator) { + '>' => $left > $right, + '>=' => $left >= $right, + '<' => $left < $right, + '<=' => $left <= $right, + '=', '==' => $left == $right, + '===' => $left === $right, + '!=', '<>' => $left != $right, + '!==' => $left !== $right, + default => throw new Nette\InvalidArgumentException("Unknown operator '$operator'"), + }; + } } diff --git a/vendor/nette/utils/src/Utils/Html.php b/vendor/nette/utils/src/Utils/Html.php index 0e1f6436e..7e401b8fa 100644 --- a/vendor/nette/utils/src/Utils/Html.php +++ b/vendor/nette/utils/src/Utils/Html.php @@ -238,10 +238,7 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** @var array element's attributes */ public $attrs = []; - /** @var bool use XHTML syntax? */ - public static $xhtml = false; - - /** @var array void elements */ + /** void elements */ public static $emptyElements = [ 'img' => 1, 'hr' => 1, 'br' => 1, 'input' => 1, 'meta' => 1, 'area' => 1, 'embed' => 1, 'keygen' => 1, 'source' => 1, 'base' => 1, 'col' => 1, 'link' => 1, 'param' => 1, 'basefont' => 1, 'frame' => 1, @@ -251,19 +248,17 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** @var array nodes */ protected $children = []; - /** @var string element's name */ - private $name; + /** element's name */ + private string $name = ''; - /** @var bool is element empty? */ - private $isEmpty; + private bool $isEmpty = false; /** * Constructs new HTML element. * @param array|string $attrs element's attributes or plain text content - * @return static */ - public static function el(?string $name = null, $attrs = null) + public static function el(?string $name = null, array|string|null $attrs = null): static { $el = new static; $parts = explode(' ', (string) $name, 2); @@ -289,7 +284,7 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Returns an object representing HTML text. */ - public static function fromHtml(string $html): self + public static function fromHtml(string $html): static { return (new static)->setHtml($html); } @@ -298,7 +293,7 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Returns an object representing plain text. */ - public static function fromText(string $text): self + public static function fromText(string $text): static { return (new static)->setText($text); } @@ -333,9 +328,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Changes element's name. - * @return static */ - final public function setName(string $name, ?bool $isEmpty = null) + final public function setName(string $name, ?bool $isEmpty = null): static { $this->name = $name; $this->isEmpty = $isEmpty ?? isset(static::$emptyElements[$name]); @@ -363,9 +357,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Sets multiple attributes. - * @return static */ - public function addAttributes(array $attrs) + public function addAttributes(array $attrs): static { $this->attrs = array_merge($this->attrs, $attrs); return $this; @@ -374,11 +367,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Appends value to element's attribute. - * @param mixed $value - * @param mixed $option - * @return static */ - public function appendAttribute(string $name, $value, $option = true) + public function appendAttribute(string $name, mixed $value, mixed $option = true): static { if (is_array($value)) { $prev = isset($this->attrs[$name]) ? (array) $this->attrs[$name] : []; @@ -400,10 +390,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Sets element's attribute. - * @param mixed $value - * @return static */ - public function setAttribute(string $name, $value) + public function setAttribute(string $name, mixed $value): static { $this->attrs[$name] = $value; return $this; @@ -412,9 +400,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Returns element's attribute. - * @return mixed */ - public function getAttribute(string $name) + public function getAttribute(string $name): mixed { return $this->attrs[$name] ?? null; } @@ -422,9 +409,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Unsets element's attribute. - * @return static */ - public function removeAttribute(string $name) + public function removeAttribute(string $name): static { unset($this->attrs[$name]); return $this; @@ -433,9 +419,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Unsets element's attributes. - * @return static */ - public function removeAttributes(array $attributes) + public function removeAttributes(array $attributes): static { foreach ($attributes as $name) { unset($this->attrs[$name]); @@ -447,9 +432,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Overloaded setter for element's attribute. - * @param mixed $value */ - final public function __set(string $name, $value): void + final public function __set(string $name, mixed $value): void { $this->attrs[$name] = $value; } @@ -457,9 +441,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Overloaded getter for element's attribute. - * @return mixed */ - final public function &__get(string $name) + final public function &__get(string $name): mixed { return $this->attrs[$name]; } @@ -485,9 +468,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Overloaded setter for element's attribute. - * @return mixed */ - final public function __call(string $m, array $args) + final public function __call(string $m, array $args): mixed { $p = substr($m, 0, 3); if ($p === 'get' || $p === 'set' || $p === 'add') { @@ -516,9 +498,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Special setter for element's attribute. - * @return static */ - final public function href(string $path, ?array $query = null) + final public function href(string $path, array $query = []): static { if ($query) { $query = http_build_query($query, '', '&'); @@ -534,10 +515,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Setter for data-* attributes. Booleans are converted to 'true' resp. 'false'. - * @param mixed $value - * @return static */ - public function data(string $name, $value = null) + public function data(string $name, mixed $value = null): static { if (func_num_args() === 1) { $this->attrs['data'] = $name; @@ -553,10 +532,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Sets element's HTML content. - * @param HtmlStringable|string $html - * @return static */ - final public function setHtml($html) + final public function setHtml(mixed $html): static { $this->children = [(string) $html]; return $this; @@ -574,10 +551,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Sets element's textual content. - * @param HtmlStringable|string|int|float $text - * @return static */ - final public function setText($text) + final public function setText(mixed $text): static { if (!$text instanceof HtmlStringable) { $text = htmlspecialchars((string) $text, ENT_NOQUOTES, 'UTF-8'); @@ -599,10 +574,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Adds new element's child. - * @param HtmlStringable|string $child Html node or raw HTML string - * @return static */ - final public function addHtml($child) + final public function addHtml(mixed $child): static { return $this->insert(null, $child); } @@ -610,10 +583,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Appends plain-text string to element content. - * @param HtmlStringable|string|int|float $text - * @return static */ - public function addText($text) + public function addText(mixed $text): static { if (!$text instanceof HtmlStringable) { $text = htmlspecialchars((string) $text, ENT_NOQUOTES, 'UTF-8'); @@ -625,10 +596,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Creates and adds a new Html child. - * @param array|string $attrs element's attributes or raw HTML string - * @return static created element */ - final public function create(string $name, $attrs = null) + final public function create(string $name, array|string|null $attrs = null): static { $this->insert(null, $child = static::el($name, $attrs)); return $child; @@ -637,10 +606,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Inserts child node. - * @param HtmlStringable|string $child Html node or raw HTML string - * @return static */ - public function insert(?int $index, $child, bool $replace = false) + public function insert(?int $index, HtmlStringable|string $child, bool $replace = false): static { $child = $child instanceof self ? $child : (string) $child; if ($index === null) { // append @@ -668,10 +635,8 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab /** * Returns child node (\ArrayAccess implementation). * @param int $index - * @return HtmlStringable|string */ - #[\ReturnTypeWillChange] - final public function offsetGet($index) + final public function offsetGet($index): HtmlStringable|string { return $this->children[$index]; } @@ -771,16 +736,7 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab final public function __toString(): string { - try { - return $this->render(); - } catch (\Throwable $e) { - if (PHP_VERSION_ID >= 70400) { - throw $e; - } - - trigger_error('Exception in ' . __METHOD__ . "(): {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", E_USER_ERROR); - return ''; - } + return $this->render(); } @@ -790,7 +746,7 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab final public function startTag(): string { return $this->name - ? '<' . $this->name . $this->attributes() . (static::$xhtml && $this->isEmpty ? ' />' : '>') + ? '<' . $this->name . $this->attributes() . '>' : ''; } @@ -821,11 +777,7 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab continue; } elseif ($value === true) { - if (static::$xhtml) { - $s .= ' ' . $key . '="' . $key . '"'; - } else { - $s .= ' ' . $key; - } + $s .= ' ' . $key; continue; @@ -857,14 +809,14 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab $value = (string) $value; } - $q = strpos($value, '"') === false ? '"' : "'"; + $q = str_contains($value, '"') ? "'" : '"'; $s .= ' ' . $key . '=' . $q . str_replace( ['&', $q, '<'], - ['&', $q === '"' ? '"' : ''', self::$xhtml ? '<' : '<'], - $value + ['&', $q === '"' ? '"' : ''', '<'], + $value, ) - . (strpos($value, '`') !== false && strpbrk($value, ' <>"\'') === false ? ' ' : '') + . (str_contains($value, '`') && strpbrk($value, ' <>"\'') === false ? ' ' : '') . $q; } diff --git a/vendor/nette/utils/src/Utils/Image.php b/vendor/nette/utils/src/Utils/Image.php index 858629883..a24fd1834 100644 --- a/vendor/nette/utils/src/Utils/Image.php +++ b/vendor/nette/utils/src/Utils/Image.php @@ -92,26 +92,44 @@ use Nette; * @method array ttfText($size, $angle, $x, $y, $color, string $fontfile, string $text) * @property-read int $width * @property-read int $height - * @property-read resource|\GdImage $imageResource + * @property-read \GdImage $imageResource */ class Image { use Nette\SmartObject; - /** {@link resize()} only shrinks images */ - public const SHRINK_ONLY = 0b0001; + /** Prevent from getting resized to a bigger size than the original */ + public const ShrinkOnly = 0b0001; - /** {@link resize()} will ignore aspect ratio */ - public const STRETCH = 0b0010; + /** Resizes to a specified width and height without keeping aspect ratio */ + public const Stretch = 0b0010; - /** {@link resize()} fits in given area so its dimensions are less than or equal to the required dimensions */ - public const FIT = 0b0000; + /** Resizes to fit into a specified width and height and preserves aspect ratio */ + public const OrSmaller = 0b0000; - /** {@link resize()} fills given area so its dimensions are greater than or equal to the required dimensions */ - public const FILL = 0b0100; + /** Resizes while bounding the smaller dimension to the specified width or height and preserves aspect ratio */ + public const OrBigger = 0b0100; - /** {@link resize()} fills given area exactly */ - public const EXACT = 0b1000; + /** Resizes to the smallest possible size to completely cover specified width and height and reserves aspect ratio */ + public const Cover = 0b1000; + + /** @deprecated use Image::ShrinkOnly */ + public const SHRINK_ONLY = self::ShrinkOnly; + + /** @deprecated use Image::Stretch */ + public const STRETCH = self::Stretch; + + /** @deprecated use Image::OrSmaller */ + public const FIT = self::OrSmaller; + + /** @deprecated use Image::OrBigger */ + public const FILL = self::OrBigger; + + /** @deprecated use Image::Cover */ + public const EXACT = self::Cover; + + /** @deprecated use Image::EmptyGIF */ + public const EMPTY_GIF = self::EmptyGIF; /** image types */ public const @@ -122,12 +140,11 @@ class Image AVIF = 19, // IMAGETYPE_AVIF, BMP = IMAGETYPE_BMP; - public const EMPTY_GIF = "GIF89a\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00!\xf9\x04\x01\x00\x00\x00\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;"; + public const EmptyGIF = "GIF89a\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00!\xf9\x04\x01\x00\x00\x00\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;"; private const Formats = [self::JPEG => 'jpeg', self::PNG => 'png', self::GIF => 'gif', self::WEBP => 'webp', self::AVIF => 'avif', self::BMP => 'bmp']; - /** @var resource|\GdImage */ - private $image; + private \GdImage $image; /** @@ -148,9 +165,8 @@ class Image * Reads an image from a file and returns its type in $type. * @throws Nette\NotSupportedException if gd extension is not loaded * @throws UnknownImageFileException if file not found or file type is not known - * @return static */ - public static function fromFile(string $file, ?int &$type = null) + public static function fromFile(string $file, ?int &$type = null): static { if (!extension_loaded('gd')) { throw new Nette\NotSupportedException('PHP extension GD is not loaded.'); @@ -167,11 +183,10 @@ class Image /** * Reads an image from a string and returns its type in $type. - * @return static * @throws Nette\NotSupportedException if gd extension is not loaded * @throws ImageException */ - public static function fromString(string $s, ?int &$type = null) + public static function fromString(string $s, ?int &$type = null): static { if (!extension_loaded('gd')) { throw new Nette\NotSupportedException('PHP extension GD is not loaded.'); @@ -186,7 +201,7 @@ class Image } - private static function invokeSafe(string $func, string $arg, string $message, string $callee): self + private static function invokeSafe(string $func, string $arg, string $message, string $callee): static { $errors = []; $res = Callback::invokeSafe($func, [$arg], function (string $message) use (&$errors): void { @@ -205,10 +220,9 @@ class Image /** * Creates a new true color image of the given dimensions. The default color is black. - * @return static * @throws Nette\NotSupportedException if gd extension is not loaded */ - public static function fromBlank(int $width, int $height, ?array $color = null) + public static function fromBlank(int $width, int $height, ?array $color = null): static { if (!extension_loaded('gd')) { throw new Nette\NotSupportedException('PHP extension GD is not loaded.'); @@ -290,9 +304,8 @@ class Image /** * Wraps GD image. - * @param resource|\GdImage $image */ - public function __construct($image) + public function __construct(\GdImage $image) { $this->setImageResource($image); imagesavealpha($image, true); @@ -319,15 +332,9 @@ class Image /** * Sets image resource. - * @param resource|\GdImage $image - * @return static */ - protected function setImageResource($image) + protected function setImageResource(\GdImage $image): static { - if (!$image instanceof \GdImage && !(is_resource($image) && get_resource_type($image) === 'gd')) { - throw new Nette\InvalidArgumentException('Image is not valid.'); - } - $this->image = $image; return $this; } @@ -335,27 +342,24 @@ class Image /** * Returns image GD resource. - * @return resource|\GdImage */ - public function getImageResource() + public function getImageResource(): \GdImage { return $this->image; } /** - * Scales an image. - * @param int|string|null $width in pixels or percent - * @param int|string|null $height in pixels or percent - * @return static + * Scales an image. Width and height accept pixels or percent. + * @param self::OrSmaller|self::OrBigger|self::Stretch|self::Cover|self::ShrinkOnly $mode */ - public function resize($width, $height, int $flags = self::FIT) + public function resize(int|string|null $width, int|string|null $height, int $mode = self::OrSmaller): static { - if ($flags & self::EXACT) { - return $this->resize($width, $height, self::FILL)->crop('50%', '50%', $width, $height); + if ($mode & self::Cover) { + return $this->resize($width, $height, self::OrBigger)->crop('50%', '50%', $width, $height); } - [$newWidth, $newHeight] = static::calculateSize($this->getWidth(), $this->getHeight(), $width, $height, $flags); + [$newWidth, $newHeight] = static::calculateSize($this->getWidth(), $this->getHeight(), $width, $height, $mode); if ($newWidth !== $this->getWidth() || $newHeight !== $this->getHeight()) { // resize $newImage = static::fromBlank($newWidth, $newHeight, self::rgb(0, 0, 0, 127))->getImageResource(); @@ -369,7 +373,7 @@ class Image $newWidth, $newHeight, $this->getWidth(), - $this->getHeight() + $this->getHeight(), ); $this->image = $newImage; } @@ -383,16 +387,15 @@ class Image /** - * Calculates dimensions of resized image. - * @param int|string|null $newWidth in pixels or percent - * @param int|string|null $newHeight in pixels or percent + * Calculates dimensions of resized image. Width and height accept pixels or percent. + * @param self::OrSmaller|self::OrBigger|self::Stretch|self::Cover|self::ShrinkOnly $mode */ public static function calculateSize( int $srcWidth, int $srcHeight, $newWidth, $newHeight, - int $flags = self::FIT + int $mode = self::OrSmaller, ): array { if ($newWidth === null) { @@ -406,19 +409,19 @@ class Image if ($newHeight === null) { } elseif (self::isPercent($newHeight)) { $newHeight = (int) round($srcHeight / 100 * abs($newHeight)); - $flags |= empty($percents) ? 0 : self::STRETCH; + $mode |= empty($percents) ? 0 : self::Stretch; } else { $newHeight = abs($newHeight); } - if ($flags & self::STRETCH) { // non-proportional + if ($mode & self::Stretch) { // non-proportional if (!$newWidth || !$newHeight) { throw new Nette\InvalidArgumentException('For stretching must be both width and height specified.'); } - if ($flags & self::SHRINK_ONLY) { - $newWidth = (int) round($srcWidth * min(1, $newWidth / $srcWidth)); - $newHeight = (int) round($srcHeight * min(1, $newHeight / $srcHeight)); + if ($mode & self::ShrinkOnly) { + $newWidth = min($srcWidth, $newWidth); + $newHeight = min($srcHeight, $newHeight); } } else { // proportional if (!$newWidth && !$newHeight) { @@ -434,11 +437,11 @@ class Image $scale[] = $newHeight / $srcHeight; } - if ($flags & self::FILL) { + if ($mode & self::OrBigger) { $scale = [max($scale)]; } - if ($flags & self::SHRINK_ONLY) { + if ($mode & self::ShrinkOnly) { $scale[] = 1; } @@ -452,14 +455,9 @@ class Image /** - * Crops image. - * @param int|string $left in pixels or percent - * @param int|string $top in pixels or percent - * @param int|string $width in pixels or percent - * @param int|string $height in pixels or percent - * @return static + * Crops image. Arguments accepts pixels or percent. */ - public function crop($left, $top, $width, $height) + public function crop(int|string $left, int|string $top, int|string $width, int|string $height): static { [$r['x'], $r['y'], $r['width'], $r['height']] = static::calculateCutout($this->getWidth(), $this->getHeight(), $left, $top, $width, $height); @@ -477,13 +475,16 @@ class Image /** - * Calculates dimensions of cutout in image. - * @param int|string $left in pixels or percent - * @param int|string $top in pixels or percent - * @param int|string $newWidth in pixels or percent - * @param int|string $newHeight in pixels or percent + * Calculates dimensions of cutout in image. Arguments accepts pixels or percent. */ - public static function calculateCutout(int $srcWidth, int $srcHeight, $left, $top, $newWidth, $newHeight): array + public static function calculateCutout( + int $srcWidth, + int $srcHeight, + int|string $left, + int|string $top, + int|string $newWidth, + int|string $newHeight, + ): array { if (self::isPercent($newWidth)) { $newWidth = (int) round($srcWidth / 100 * $newWidth); @@ -519,9 +520,8 @@ class Image /** * Sharpens image a little bit. - * @return static */ - public function sharpen() + public function sharpen(): static { imageconvolution($this->image, [ // my magic numbers ;) [-1, -1, -1], @@ -533,13 +533,10 @@ class Image /** - * Puts another image into this image. - * @param int|string $left in pixels or percent - * @param int|string $top in pixels or percent + * Puts another image into this image. Left and top accepts pixels or percent. * @param int $opacity 0..100 - * @return static */ - public function place(self $image, $left = 0, $top = 0, int $opacity = 100) + public function place(self $image, int|string $left = 0, int|string $top = 0, int $opacity = 100): static { $opacity = max(0, min(100, $opacity)); if ($opacity === 0) { @@ -591,7 +588,7 @@ class Image 0, 0, $width, - $height + $height, ); return $this; } @@ -603,7 +600,7 @@ class Image */ public function save(string $file, ?int $quality = null, ?int $type = null): void { - $type = $type ?? self::extensionToType(pathinfo($file, PATHINFO_EXTENSION)); + $type ??= self::extensionToType(pathinfo($file, PATHINFO_EXTENSION)); $this->output($type, $quality, $file); } @@ -613,7 +610,7 @@ class Image */ public function toString(int $type = self::JPEG, ?int $quality = null): string { - return Helpers::capture(function () use ($type, $quality) { + return Helpers::capture(function () use ($type, $quality): void { $this->output($type, $quality); }); } @@ -624,16 +621,7 @@ class Image */ public function __toString(): string { - try { - return $this->toString(); - } catch (\Throwable $e) { - if (func_num_args() || PHP_VERSION_ID >= 70400) { - throw $e; - } - - trigger_error('Exception in ' . __METHOD__ . "(): {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", E_USER_ERROR); - return ''; - } + return $this->toString(); } @@ -695,10 +683,9 @@ class Image /** * Call to undefined method. - * @return mixed * @throws Nette\MemberAccessException */ - public function __call(string $name, array $args) + public function __call(string $name, array $args): mixed { $function = 'image' . $name; if (!function_exists($function)) { @@ -715,19 +702,19 @@ class Image $value['red'], $value['green'], $value['blue'], - $value['alpha'] + $value['alpha'], ) ?: imagecolorresolvealpha( $this->image, $value['red'], $value['green'], $value['blue'], - $value['alpha'] + $value['alpha'], ); } } $res = $function($this->image, ...$args); - return $res instanceof \GdImage || (is_resource($res) && get_resource_type($res) === 'gd') + return $res instanceof \GdImage ? $this->setImageResource($res) : $res; } @@ -741,12 +728,9 @@ class Image } - /** - * @param int|string $num in pixels or percent - */ - private static function isPercent(&$num): bool + private static function isPercent(int|string &$num): bool { - if (is_string($num) && substr($num, -1) === '%') { + if (is_string($num) && str_ends_with($num, '%')) { $num = (float) substr($num, 0, -1); return true; } elseif (is_int($num) || $num === (string) (int) $num) { diff --git a/vendor/nette/utils/src/Utils/Json.php b/vendor/nette/utils/src/Utils/Json.php index 91b8f56d3..b87917b2a 100644 --- a/vendor/nette/utils/src/Utils/Json.php +++ b/vendor/nette/utils/src/Utils/Json.php @@ -19,22 +19,39 @@ final class Json { use Nette\StaticClass; + /** @deprecated use Json::decode(..., forceArrays: true) */ public const FORCE_ARRAY = JSON_OBJECT_AS_ARRAY; + + /** @deprecated use Json::encode(..., pretty: true) */ public const PRETTY = JSON_PRETTY_PRINT; + + /** @deprecated use Json::encode(..., asciiSafe: true) */ public const ESCAPE_UNICODE = 1 << 19; /** - * Converts value to JSON format. The flag can be Json::PRETTY, which formats JSON for easier reading and clarity, - * and Json::ESCAPE_UNICODE for ASCII output. - * @param mixed $value + * Converts value to JSON format. Use $pretty for easier reading and clarity, $asciiSafe for ASCII output + * and $htmlSafe for HTML escaping, $forceObjects enforces the encoding of non-associateve arrays as objects. * @throws JsonException */ - public static function encode($value, int $flags = 0): string + public static function encode( + mixed $value, + bool|int $pretty = false, + bool $asciiSafe = false, + bool $htmlSafe = false, + bool $forceObjects = false, + ): string { - $flags = ($flags & self::ESCAPE_UNICODE ? 0 : JSON_UNESCAPED_UNICODE) - | JSON_UNESCAPED_SLASHES - | ($flags & ~self::ESCAPE_UNICODE) + if (is_int($pretty)) { // back compatibility + $flags = ($pretty & self::ESCAPE_UNICODE ? 0 : JSON_UNESCAPED_UNICODE) | ($pretty & ~self::ESCAPE_UNICODE); + } else { + $flags = ($asciiSafe ? 0 : JSON_UNESCAPED_UNICODE) + | ($pretty ? JSON_PRETTY_PRINT : 0) + | ($forceObjects ? JSON_FORCE_OBJECT : 0) + | ($htmlSafe ? JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_TAG : 0); + } + + $flags |= JSON_UNESCAPED_SLASHES | (defined('JSON_PRESERVE_ZERO_FRACTION') ? JSON_PRESERVE_ZERO_FRACTION : 0); // since PHP 5.6.6 & PECL JSON-C 1.3.7 $json = json_encode($value, $flags); @@ -47,13 +64,17 @@ final class Json /** - * Parses JSON to PHP value. The flag can be Json::FORCE_ARRAY, which forces an array instead of an object as the return value. - * @return mixed + * Parses JSON to PHP value. The $forceArrays enforces the decoding of objects as arrays. * @throws JsonException */ - public static function decode(string $json, int $flags = 0) + public static function decode(string $json, bool|int $forceArrays = false): mixed { - $value = json_decode($json, null, 512, $flags | JSON_BIGINT_AS_STRING); + $flags = is_int($forceArrays) // back compatibility + ? $forceArrays + : ($forceArrays ? JSON_OBJECT_AS_ARRAY : 0); + $flags |= JSON_BIGINT_AS_STRING; + + $value = json_decode($json, flags: $flags); if ($error = json_last_error()) { throw new JsonException(json_last_error_msg(), $error); } diff --git a/vendor/nette/utils/src/Utils/ObjectHelpers.php b/vendor/nette/utils/src/Utils/ObjectHelpers.php index 6cdfc5850..f4bd55f2b 100644 --- a/vendor/nette/utils/src/Utils/ObjectHelpers.php +++ b/vendor/nette/utils/src/Utils/ObjectHelpers.php @@ -15,6 +15,7 @@ use Nette\MemberAccessException; /** * Nette\SmartObject helpers. + * @internal */ final class ObjectHelpers { @@ -28,8 +29,8 @@ final class ObjectHelpers { $rc = new \ReflectionClass($class); $hint = self::getSuggestion(array_merge( - array_filter($rc->getProperties(\ReflectionProperty::IS_PUBLIC), function ($p) { return !$p->isStatic(); }), - self::parseFullDoc($rc, '~^[ \t*]*@property(?:-read)?[ \t]+(?:\S+[ \t]+)??\$(\w+)~m') + array_filter($rc->getProperties(\ReflectionProperty::IS_PUBLIC), fn($p) => !$p->isStatic()), + self::parseFullDoc($rc, '~^[ \t*]*@property(?:-read)?[ \t]+(?:\S+[ \t]+)??\$(\w+)~m'), ), $name); throw new MemberAccessException("Cannot read an undeclared property $class::\$$name" . ($hint ? ", did you mean \$$hint?" : '.')); } @@ -43,8 +44,8 @@ final class ObjectHelpers { $rc = new \ReflectionClass($class); $hint = self::getSuggestion(array_merge( - array_filter($rc->getProperties(\ReflectionProperty::IS_PUBLIC), function ($p) { return !$p->isStatic(); }), - self::parseFullDoc($rc, '~^[ \t*]*@property(?:-write)?[ \t]+(?:\S+[ \t]+)??\$(\w+)~m') + array_filter($rc->getProperties(\ReflectionProperty::IS_PUBLIC), fn($p) => !$p->isStatic()), + self::parseFullDoc($rc, '~^[ \t*]*@property(?:-write)?[ \t]+(?:\S+[ \t]+)??\$(\w+)~m'), ), $name); throw new MemberAccessException("Cannot write to an undeclared property $class::\$$name" . ($hint ? ", did you mean \$$hint?" : '.')); } @@ -76,7 +77,7 @@ final class ObjectHelpers $hint = self::getSuggestion(array_merge( get_class_methods($class), self::parseFullDoc(new \ReflectionClass($class), '~^[ \t*]*@method[ \t]+(?:static[ \t]+)?(?:\S+[ \t]+)??(\w+)\(~m'), - $additionalMethods + $additionalMethods, ), $method); throw new MemberAccessException("Call to undefined method $class::$method()" . ($hint ? ", did you mean $hint()?" : '.')); } @@ -107,8 +108,8 @@ final class ObjectHelpers } else { $hint = self::getSuggestion( - array_filter((new \ReflectionClass($class))->getMethods(\ReflectionMethod::IS_PUBLIC), function ($m) { return $m->isStatic(); }), - $method + array_filter((new \ReflectionClass($class))->getMethods(\ReflectionMethod::IS_PUBLIC), fn($m) => $m->isStatic()), + $method, ); throw new MemberAccessException("Call to undefined static method $class::$method()" . ($hint ? ", did you mean $hint()?" : '.')); } @@ -133,7 +134,7 @@ final class ObjectHelpers '~^ [ \t*]* @property(|-read|-write|-deprecated) [ \t]+ [^\s$]+ [ \t]+ \$ (\w+) ()~mx', (string) $rc->getDocComment(), $matches, - PREG_SET_ORDER + PREG_SET_ORDER, ); $props = []; @@ -199,16 +200,16 @@ final class ObjectHelpers } } while ($rc = $rc->getParentClass()); - return preg_match_all($pattern, implode($doc), $m) ? $m[1] : []; + return preg_match_all($pattern, implode('', $doc), $m) ? $m[1] : []; } /** * Checks if the public non-static property exists. - * @return bool|string returns 'event' if the property exists and has event like name + * Returns 'event' if the property exists and has event like name * @internal */ - public static function hasProperty(string $class, string $name) + public static function hasProperty(string $class, string $name): bool|string { static $cache; $prop = &$cache[$class][$name]; diff --git a/vendor/nette/utils/src/Utils/ObjectMixin.php b/vendor/nette/utils/src/Utils/ObjectMixin.php deleted file mode 100644 index 33249509b..000000000 --- a/vendor/nette/utils/src/Utils/ObjectMixin.php +++ /dev/null @@ -1,41 +0,0 @@ -page = $page; return $this; @@ -109,9 +101,8 @@ class Paginator /** * Sets first page (base) number. - * @return static */ - public function setBase(int $base) + public function setBase(int $base): static { $this->base = $base; return $this; @@ -172,9 +163,8 @@ class Paginator /** * Sets the number of items to display on a single page. - * @return static */ - public function setItemsPerPage(int $itemsPerPage) + public function setItemsPerPage(int $itemsPerPage): static { $this->itemsPerPage = max(1, $itemsPerPage); return $this; @@ -192,9 +182,8 @@ class Paginator /** * Sets the total number of items. - * @return static */ - public function setItemCount(?int $itemCount = null) + public function setItemCount(?int $itemCount = null): static { $this->itemCount = $itemCount === null ? null : max(0, $itemCount); return $this; diff --git a/vendor/nette/utils/src/Utils/Random.php b/vendor/nette/utils/src/Utils/Random.php index f900628a8..d8ebcdc7c 100644 --- a/vendor/nette/utils/src/Utils/Random.php +++ b/vendor/nette/utils/src/Utils/Random.php @@ -25,9 +25,12 @@ final class Random */ public static function generate(int $length = 10, string $charlist = '0-9a-z'): string { - $charlist = count_chars(preg_replace_callback('#.-.#', function (array $m): string { - return implode('', range($m[0][0], $m[0][2])); - }, $charlist), 3); + $charlist = preg_replace_callback( + '#.-.#', + fn(array $m): string => implode('', range($m[0][0], $m[0][2])), + $charlist, + ); + $charlist = count_chars($charlist, mode: 3); $chLen = strlen($charlist); if ($length < 1) { diff --git a/vendor/nette/utils/src/Utils/Reflection.php b/vendor/nette/utils/src/Utils/Reflection.php index f99c8bf55..f5a36a256 100644 --- a/vendor/nette/utils/src/Utils/Reflection.php +++ b/vendor/nette/utils/src/Utils/Reflection.php @@ -19,114 +19,22 @@ final class Reflection { use Nette\StaticClass; - /** - * Determines if type is PHP built-in type. Otherwise, it is the class name. - */ + /** @deprecated use Nette\Utils\Validator::isBuiltinType() */ public static function isBuiltinType(string $type): bool { return Validators::isBuiltinType($type); } - /** - * Determines if type is special class name self/parent/static. - */ + /** @deprecated use Nette\Utils\Validator::isClassKeyword() */ public static function isClassKeyword(string $name): bool { return Validators::isClassKeyword($name); } - /** - * Returns the type of return value of given function or method and normalizes `self`, `static`, and `parent` to actual class names. - * If the function does not have a return type, it returns null. - * If the function has union or intersection type, it throws Nette\InvalidStateException. - */ - public static function getReturnType(\ReflectionFunctionAbstract $func): ?string - { - $type = $func->getReturnType() ?? (PHP_VERSION_ID >= 80100 && $func instanceof \ReflectionMethod ? $func->getTentativeReturnType() : null); - return self::getType($func, $type); - } - - - /** - * @deprecated - */ - public static function getReturnTypes(\ReflectionFunctionAbstract $func): array - { - $type = Type::fromReflection($func); - return $type ? $type->getNames() : []; - } - - - /** - * Returns the type of given parameter and normalizes `self` and `parent` to the actual class names. - * If the parameter does not have a type, it returns null. - * If the parameter has union or intersection type, it throws Nette\InvalidStateException. - */ - public static function getParameterType(\ReflectionParameter $param): ?string - { - return self::getType($param, $param->getType()); - } - - - /** - * @deprecated - */ - public static function getParameterTypes(\ReflectionParameter $param): array - { - $type = Type::fromReflection($param); - return $type ? $type->getNames() : []; - } - - - /** - * Returns the type of given property and normalizes `self` and `parent` to the actual class names. - * If the property does not have a type, it returns null. - * If the property has union or intersection type, it throws Nette\InvalidStateException. - */ - public static function getPropertyType(\ReflectionProperty $prop): ?string - { - return self::getType($prop, PHP_VERSION_ID >= 70400 ? $prop->getType() : null); - } - - - /** - * @deprecated - */ - public static function getPropertyTypes(\ReflectionProperty $prop): array - { - $type = Type::fromReflection($prop); - return $type ? $type->getNames() : []; - } - - - /** - * @param \ReflectionFunction|\ReflectionMethod|\ReflectionParameter|\ReflectionProperty $reflection - */ - private static function getType($reflection, ?\ReflectionType $type): ?string - { - if ($type === null) { - return null; - - } elseif ($type instanceof \ReflectionNamedType) { - return Type::resolve($type->getName(), $reflection); - - } elseif ($type instanceof \ReflectionUnionType || $type instanceof \ReflectionIntersectionType) { - throw new Nette\InvalidStateException('The ' . self::toString($reflection) . ' is not expected to have a union or intersection type.'); - - } else { - throw new Nette\InvalidStateException('Unexpected type of ' . self::toString($reflection)); - } - } - - - /** - * Returns the default value of parameter. If it is a constant, it returns its value. - * @return mixed - * @throws \ReflectionException If the parameter does not have a default value or the constant cannot be resolved - */ - public static function getParameterDefaultValue(\ReflectionParameter $param) + /** @deprecated use native ReflectionParameter::getDefaultValue() */ + public static function getParameterDefaultValue(\ReflectionParameter $param): mixed { if ($param->isDefaultValueConstant()) { $const = $orig = $param->getDefaultValueConstantName(); @@ -307,7 +215,7 @@ final class Reflection private static function parseUseStatements(string $code, ?string $forClass = null): array { try { - $tokens = token_get_all($code, TOKEN_PARSE); + $tokens = \PhpToken::tokenize($code, TOKEN_PARSE); } catch (\ParseError $e) { trigger_error($e->getMessage(), E_USER_NOTICE); $tokens = []; @@ -316,13 +224,11 @@ final class Reflection $namespace = $class = $classLevel = $level = null; $res = $uses = []; - $nameTokens = PHP_VERSION_ID < 80000 - ? [T_STRING, T_NS_SEPARATOR] - : [T_STRING, T_NS_SEPARATOR, T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED]; + $nameTokens = [T_STRING, T_NS_SEPARATOR, T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED]; while ($token = current($tokens)) { next($tokens); - switch (is_array($token) ? $token[0] : $token) { + switch ($token->id) { case T_NAMESPACE: $namespace = ltrim(self::fetch($tokens, $nameTokens) . '\\', '\\'); $uses = []; @@ -378,11 +284,11 @@ final class Reflection case T_CURLY_OPEN: case T_DOLLAR_OPEN_CURLY_BRACES: - case '{': + case ord('{'): $level++; break; - case '}': + case ord('}'): if ($level === $classLevel) { $class = $classLevel = null; } @@ -395,14 +301,13 @@ final class Reflection } - private static function fetch(array &$tokens, $take): ?string + private static function fetch(array &$tokens, string|int|array $take): ?string { $res = null; while ($token = current($tokens)) { - [$token, $s] = is_array($token) ? $token : [$token, $token]; - if (in_array($token, (array) $take, true)) { - $res .= $s; - } elseif (!in_array($token, [T_DOC_COMMENT, T_WHITESPACE, T_COMMENT], true)) { + if ($token->is($take)) { + $res .= $token->text; + } elseif (!$token->is([T_DOC_COMMENT, T_WHITESPACE, T_COMMENT])) { break; } diff --git a/vendor/nette/utils/src/Utils/Strings.php b/vendor/nette/utils/src/Utils/Strings.php index 15c7a147f..32732c102 100644 --- a/vendor/nette/utils/src/Utils/Strings.php +++ b/vendor/nette/utils/src/Utils/Strings.php @@ -21,11 +21,14 @@ class Strings { use Nette\StaticClass; - public const TRIM_CHARACTERS = " \t\n\r\0\x0B\u{A0}"; + public const TrimCharacters = " \t\n\r\0\x0B\u{A0}"; + + /** @deprecated use Strings::TrimCharacters */ + public const TRIM_CHARACTERS = self::TrimCharacters; /** - * Checks if the string is valid in UTF-8 encoding. + * @deprecated use Nette\Utils\Validator::isUnicode() */ public static function checkEncoding(string $s): bool { @@ -60,29 +63,47 @@ class Strings /** - * Starts the $haystack string with the prefix $needle? + * Returns a code point of specific character in UTF-8 (number in range 0x0000..D7FF or 0xE000..10FFFF). + */ + public static function ord(string $c): int + { + if (!extension_loaded('iconv')) { + throw new Nette\NotSupportedException(__METHOD__ . '() requires ICONV extension that is not loaded.'); + } + + $tmp = iconv('UTF-8', 'UTF-32BE//IGNORE', $c); + if (!$tmp) { + throw new Nette\InvalidArgumentException('Invalid UTF-8 character "' . ($c === '' ? '' : '\x' . strtoupper(bin2hex($c))) . '".'); + } + + return unpack('N', $tmp)[1]; + } + + + /** + * @deprecated use str_starts_with() */ public static function startsWith(string $haystack, string $needle): bool { - return strncmp($haystack, $needle, strlen($needle)) === 0; + return str_starts_with($haystack, $needle); } /** - * Ends the $haystack string with the suffix $needle? + * @deprecated use str_ends_with() */ public static function endsWith(string $haystack, string $needle): bool { - return $needle === '' || substr($haystack, -strlen($needle)) === $needle; + return str_ends_with($haystack, $needle); } /** - * Does $haystack contain $needle? + * @deprecated use str_contains() */ public static function contains(string $haystack, string $needle): bool { - return strpos($haystack, $needle) !== false; + return str_contains($haystack, $needle); } @@ -117,7 +138,7 @@ class Strings $s = $n; } - $s = self::normalizeNewLines($s); + $s = self::unixNewLines($s); // remove control characters; leave \t + \n $s = self::pcre('preg_replace', ['#[\x00-\x08\x0B-\x1F\x7F-\x9F]+#u', '', $s]); @@ -132,12 +153,30 @@ class Strings } - /** - * Standardize line endings to unix-like. - */ + /** @deprecated use Strings::unixNewLines() */ public static function normalizeNewLines(string $s): string { - return str_replace(["\r\n", "\r"], "\n", $s); + return self::unixNewLines($s); + } + + + /** + * Converts line endings to \n used on Unix-like systems. + * Line endings are: \n, \r, \r\n, U+2028 line separator, U+2029 paragraph separator. + */ + public static function unixNewLines(string $s): string + { + return preg_replace("~\r\n?|\u{2028}|\u{2029}~", "\n", $s); + } + + + /** + * Converts line endings to platform-specific, i.e. \r\n on Windows and \n elsewhere. + * Line endings are: \n, \r, \r\n, U+2028 line separator, U+2029 paragraph separator. + */ + public static function platformNewLines(string $s): string + { + return preg_replace("~\r\n?|\n|\u{2028}|\u{2029}~", PHP_EOL, $s); } @@ -187,7 +226,7 @@ class Strings $s = strtr( $s, "\xa5\xa3\xbc\x8c\xa7\x8a\xaa\x8d\x8f\x8e\xaf\xb9\xb3\xbe\x9c\x9a\xba\x9d\x9f\x9e\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x96\xa0\x8b\x97\x9b\xa6\xad\xb7", - 'ALLSSSSTZZZallssstzzzRAAAALCCCEEEEIIDDNNOOOOxRUUUUYTsraaaalccceeeeiiddnnooooruuuuyt- <->|-.' + 'ALLSSSSTZZZallssstzzzRAAAALCCCEEEEIIDDNNOOOOxRUUUUYTsraaaalccceeeeiiddnnooooruuuuyt- <->|-.', ); $s = self::pcre('preg_replace', ['#[^\x00-\x7F]++#', '', $s]); } else { @@ -367,7 +406,7 @@ class Strings /** * Removes all left and right side spaces (or the characters passed as second argument) from a UTF-8 encoded string. */ - public static function trim(string $s, string $charlist = self::TRIM_CHARACTERS): string + public static function trim(string $s, string $charlist = self::TrimCharacters): string { $charlist = preg_quote($charlist, '#'); return self::replace($s, '#^[' . $charlist . ']+|[' . $charlist . ']+$#Du', ''); @@ -483,54 +522,90 @@ class Strings /** - * Splits a string into array by the regular expression. Parenthesized expression in the delimiter are captured. - * Parameter $flags can be any combination of PREG_SPLIT_NO_EMPTY and PREG_OFFSET_CAPTURE flags. + * Divides the string into arrays according to the regular expression. Expressions in parentheses will be captured and returned as well. */ public static function split( string $subject, #[Language('RegExp')] string $pattern, - int $flags = 0 + bool|int $captureOffset = false, + bool $skipEmpty = false, + int $limit = -1, + bool $utf8 = false, ): array { - return self::pcre('preg_split', [$pattern, $subject, -1, $flags | PREG_SPLIT_DELIM_CAPTURE]); + $flags = is_int($captureOffset) // back compatibility + ? $captureOffset + : ($captureOffset ? PREG_SPLIT_OFFSET_CAPTURE : 0) | ($skipEmpty ? PREG_SPLIT_NO_EMPTY : 0); + + $pattern .= $utf8 ? 'u' : ''; + $m = self::pcre('preg_split', [$pattern, $subject, $limit, $flags | PREG_SPLIT_DELIM_CAPTURE]); + return $utf8 && $captureOffset + ? self::bytesToChars($subject, [$m])[0] + : $m; + } /** - * Checks if given string matches a regular expression pattern and returns an array with first found match and each subpattern. - * Parameter $flags can be any combination of PREG_OFFSET_CAPTURE and PREG_UNMATCHED_AS_NULL flags. + * Searches the string for the part matching the regular expression and returns + * an array with the found expression and individual subexpressions, or `null`. */ public static function match( string $subject, #[Language('RegExp')] string $pattern, - int $flags = 0, - int $offset = 0 + bool|int $captureOffset = false, + int $offset = 0, + bool $unmatchedAsNull = false, + bool $utf8 = false, ): ?array { - if ($offset > strlen($subject)) { - return null; + $flags = is_int($captureOffset) // back compatibility + ? $captureOffset + : ($captureOffset ? PREG_OFFSET_CAPTURE : 0) | ($unmatchedAsNull ? PREG_UNMATCHED_AS_NULL : 0); + + if ($utf8) { + $offset = strlen(self::substring($subject, 0, $offset)); + $pattern .= 'u'; } - return self::pcre('preg_match', [$pattern, $subject, &$m, $flags, $offset]) - ? $m - : null; + if ($offset > strlen($subject)) { + return null; + } elseif (!self::pcre('preg_match', [$pattern, $subject, &$m, $flags, $offset])) { + return null; + } elseif ($utf8 && $captureOffset) { + return self::bytesToChars($subject, [$m])[0]; + } else { + return $m; + } } /** - * Finds all occurrences matching regular expression pattern and returns a two-dimensional array. Result is array of matches (ie uses by default PREG_SET_ORDER). - * Parameter $flags can be any combination of PREG_OFFSET_CAPTURE, PREG_UNMATCHED_AS_NULL and PREG_PATTERN_ORDER flags. + * Searches the string for all occurrences matching the regular expression and + * returns an array of arrays containing the found expression and each subexpression. */ public static function matchAll( string $subject, #[Language('RegExp')] string $pattern, - int $flags = 0, - int $offset = 0 + bool|int $captureOffset = false, + int $offset = 0, + bool $unmatchedAsNull = false, + bool $patternOrder = false, + bool $utf8 = false, ): array { + $flags = is_int($captureOffset) // back compatibility + ? $captureOffset + : ($captureOffset ? PREG_OFFSET_CAPTURE : 0) | ($unmatchedAsNull ? PREG_UNMATCHED_AS_NULL : 0) | ($patternOrder ? PREG_PATTERN_ORDER : 0); + + if ($utf8) { + $offset = strlen(self::substring($subject, 0, $offset)); + $pattern .= 'u'; + } + if ($offset > strlen($subject)) { return []; } @@ -540,21 +615,25 @@ class Strings ($flags & PREG_PATTERN_ORDER) ? $flags : ($flags | PREG_SET_ORDER), $offset, ]); - return $m; + return $utf8 && $captureOffset + ? self::bytesToChars($subject, $m) + : $m; + } /** * Replaces all occurrences matching regular expression $pattern which can be string or array in the form `pattern => replacement`. - * @param string|array $pattern - * @param string|callable $replacement */ public static function replace( string $subject, #[Language('RegExp')] - $pattern, - $replacement = '', - int $limit = -1 + string|array $pattern, + string|callable $replacement = '', + int $limit = -1, + bool $captureOffset = false, + bool $unmatchedAsNull = false, + bool $utf8 = false, ): string { if (is_object($replacement) || is_array($replacement)) { @@ -562,17 +641,49 @@ class Strings throw new Nette\InvalidStateException("Callback '$textual' is not callable."); } - return self::pcre('preg_replace_callback', [$pattern, $replacement, $subject, $limit]); + $flags = ($captureOffset ? PREG_OFFSET_CAPTURE : 0) | ($unmatchedAsNull ? PREG_UNMATCHED_AS_NULL : 0); + if ($utf8) { + $pattern .= 'u'; + if ($captureOffset) { + $replacement = fn($m) => $replacement(self::bytesToChars($subject, [$m])[0]); + } + } + + return self::pcre('preg_replace_callback', [$pattern, $replacement, $subject, $limit, 0, $flags]); } elseif (is_array($pattern) && is_string(key($pattern))) { $replacement = array_values($pattern); $pattern = array_keys($pattern); } + if ($utf8) { + $pattern = array_map(fn($item) => $item . 'u', (array) $pattern); + } + return self::pcre('preg_replace', [$pattern, $replacement, $subject, $limit]); } + private static function bytesToChars(string $s, array $groups): array + { + $lastBytes = $lastChars = 0; + foreach ($groups as &$matches) { + foreach ($matches as &$match) { + if ($match[1] > $lastBytes) { + $lastChars += self::length(substr($s, $lastBytes, $match[1] - $lastBytes)); + } elseif ($match[1] < $lastBytes) { + $lastChars -= self::length(substr($s, $match[1], $lastBytes - $match[1])); + } + + $lastBytes = $match[1]; + $match[1] = $lastChars; + } + } + + return $groups; + } + + /** @internal */ public static function pcre(string $func, array $args) { @@ -584,7 +695,7 @@ class Strings if (($code = preg_last_error()) // run-time error, but preg_last_error & return code are liars && ($res === null || !in_array($func, ['preg_filter', 'preg_replace_callback', 'preg_replace'], true)) ) { - throw new RegexpException((RegexpException::MESSAGES[$code] ?? 'Unknown error') + throw new RegexpException(preg_last_error_msg() . ' (pattern: ' . implode(' or ', (array) $args[0]) . ')', $code); } diff --git a/vendor/nette/utils/src/Utils/Type.php b/vendor/nette/utils/src/Utils/Type.php index a4495c2cf..965977bc4 100644 --- a/vendor/nette/utils/src/Utils/Type.php +++ b/vendor/nette/utils/src/Utils/Type.php @@ -18,37 +18,28 @@ use Nette; final class Type { /** @var array */ - private $types; - - /** @var bool */ - private $simple; - - /** @var string |, & */ - private $kind; + private array $types; + private bool $simple; + private string $kind; // | & /** * Creates a Type object based on reflection. Resolves self, static and parent to the actual class name. * If the subject has no type, it returns null. - * @param \ReflectionFunctionAbstract|\ReflectionParameter|\ReflectionProperty $reflection */ - public static function fromReflection($reflection): ?self + public static function fromReflection( + \ReflectionFunctionAbstract|\ReflectionParameter|\ReflectionProperty $reflection, + ): ?self { - if ($reflection instanceof \ReflectionProperty && PHP_VERSION_ID < 70400) { - return null; - } elseif ($reflection instanceof \ReflectionMethod) { - $type = $reflection->getReturnType() ?? (PHP_VERSION_ID >= 80100 ? $reflection->getTentativeReturnType() : null); - } else { - $type = $reflection instanceof \ReflectionFunctionAbstract - ? $reflection->getReturnType() - : $reflection->getType(); - } + $type = $reflection instanceof \ReflectionFunctionAbstract + ? $reflection->getReturnType() ?? (PHP_VERSION_ID >= 80100 && $reflection instanceof \ReflectionMethod ? $reflection->getTentativeReturnType() : null) + : $reflection->getType(); return $type ? self::fromReflectionType($type, $reflection, true) : null; } - private static function fromReflectionType(\ReflectionType $type, $of, bool $asObject) + private static function fromReflectionType(\ReflectionType $type, $of, bool $asObject): self|string { if ($type instanceof \ReflectionNamedType) { $name = self::resolve($type->getName(), $of); @@ -58,11 +49,8 @@ final class Type } elseif ($type instanceof \ReflectionUnionType || $type instanceof \ReflectionIntersectionType) { return new self( - array_map( - function ($t) use ($of) { return self::fromReflectionType($t, $of, false); }, - $type->getTypes() - ), - $type instanceof \ReflectionUnionType ? '|' : '&' + array_map(fn($t) => self::fromReflectionType($t, $of, false), $type->getTypes()), + $type instanceof \ReflectionUnionType ? '|' : '&', ); } else { @@ -98,9 +86,11 @@ final class Type /** * Resolves 'self', 'static' and 'parent' to the actual class name. - * @param \ReflectionFunctionAbstract|\ReflectionParameter|\ReflectionProperty $of */ - public static function resolve(string $type, $of): string + public static function resolve( + string $type, + \ReflectionFunctionAbstract|\ReflectionParameter|\ReflectionProperty $of, + ): string { $lower = strtolower($type); if ($of instanceof \ReflectionFunction) { @@ -150,9 +140,7 @@ final class Type */ public function getNames(): array { - return array_map(function ($t) { - return $t instanceof self ? $t->getNames() : $t; - }, $this->types); + return array_map(fn($t) => $t instanceof self ? $t->getNames() : $t, $this->types); } @@ -162,9 +150,7 @@ final class Type */ public function getTypes(): array { - return array_map(function ($t) { - return $t instanceof self ? $t : new self([$t]); - }, $this->types); + return array_map(fn($t) => $t instanceof self ? $t : new self([$t]), $this->types); } @@ -251,9 +237,7 @@ final class Type $subtype = self::fromString($subtype); return $subtype->isUnion() - ? Arrays::every($subtype->types, function ($t) { - return $this->allows2($t instanceof self ? $t->types : [$t]); - }) + ? Arrays::every($subtype->types, fn($t) => $this->allows2($t instanceof self ? $t->types : [$t])) : $this->allows2($subtype->types); } @@ -261,22 +245,21 @@ final class Type private function allows2(array $subtypes): bool { return $this->isUnion() - ? Arrays::some($this->types, function ($t) use ($subtypes) { - return $this->allows3($t instanceof self ? $t->types : [$t], $subtypes); - }) + ? Arrays::some($this->types, fn($t) => $this->allows3($t instanceof self ? $t->types : [$t], $subtypes)) : $this->allows3($this->types, $subtypes); } private function allows3(array $types, array $subtypes): bool { - return Arrays::every($types, function ($type) use ($subtypes) { - $builtin = Validators::isBuiltinType($type); - return Arrays::some($subtypes, function ($subtype) use ($type, $builtin) { - return $builtin + return Arrays::every( + $types, + fn($type) => Arrays::some( + $subtypes, + fn($subtype) => Validators::isBuiltinType($type) ? strcasecmp($type, $subtype) === 0 - : is_a($subtype, $type, true); - }); - }); + : is_a($subtype, $type, true) + ) + ); } } diff --git a/vendor/nette/utils/src/Utils/Validators.php b/vendor/nette/utils/src/Utils/Validators.php index c71bedc80..8e34fb034 100644 --- a/vendor/nette/utils/src/Utils/Validators.php +++ b/vendor/nette/utils/src/Utils/Validators.php @@ -93,10 +93,9 @@ class Validators /** * Verifies that the value is of expected types separated by pipe. - * @param mixed $value * @throws AssertionException */ - public static function assert($value, string $expected, string $label = 'variable'): void + public static function assert(mixed $value, string $expected, string $label = 'variable'): void { if (!static::is($value, $expected)) { $expected = str_replace(['|', ':'], [' or ', ' in range '], $expected); @@ -105,7 +104,7 @@ class Validators if (is_int($value) || is_float($value) || (is_string($value) && strlen($value) < 40)) { $type .= ' ' . var_export($value, true); } elseif (is_object($value)) { - $type .= ' ' . get_class($value); + $type .= ' ' . $value::class; } throw new AssertionException("The $label expects to be $expected, $type given."); @@ -116,14 +115,13 @@ class Validators /** * Verifies that element $key in array is of expected types separated by pipe. * @param mixed[] $array - * @param int|string $key * @throws AssertionException */ public static function assertField( array $array, $key, ?string $expected = null, - string $label = "item '%' in array" + string $label = "item '%' in array", ): void { if (!array_key_exists($key, $array)) { @@ -137,18 +135,17 @@ class Validators /** * Verifies that the value is of expected types separated by pipe. - * @param mixed $value */ - public static function is($value, string $expected): bool + public static function is(mixed $value, string $expected): bool { foreach (explode('|', $expected) as $item) { - if (substr($item, -2) === '[]') { + if (str_ends_with($item, '[]')) { if (is_iterable($value) && self::everyIs($value, substr($item, 0, -2))) { return true; } continue; - } elseif (substr($item, 0, 1) === '?') { + } elseif (str_starts_with($item, '?')) { $item = substr($item, 1); if ($value === null) { return true; @@ -215,9 +212,8 @@ class Validators /** * Checks if the value is an integer or a float. - * @param mixed $value */ - public static function isNumber($value): bool + public static function isNumber(mixed $value): bool { return is_int($value) || is_float($value); } @@ -225,9 +221,8 @@ class Validators /** * Checks if the value is an integer or a integer written in a string. - * @param mixed $value */ - public static function isNumericInt($value): bool + public static function isNumericInt(mixed $value): bool { return is_int($value) || (is_string($value) && preg_match('#^[+-]?[0-9]+$#D', $value)); } @@ -235,9 +230,8 @@ class Validators /** * Checks if the value is a number or a number written in a string. - * @param mixed $value */ - public static function isNumeric($value): bool + public static function isNumeric(mixed $value): bool { return is_float($value) || is_int($value) || (is_string($value) && preg_match('#^[+-]?([0-9]++\.?[0-9]*|\.[0-9]+)$#D', $value)); } @@ -245,9 +239,8 @@ class Validators /** * Checks if the value is a syntactically correct callback. - * @param mixed $value */ - public static function isCallable($value): bool + public static function isCallable(mixed $value): bool { return $value && is_callable($value, true); } @@ -255,9 +248,8 @@ class Validators /** * Checks if the value is a valid UTF-8 string. - * @param mixed $value */ - public static function isUnicode($value): bool + public static function isUnicode(mixed $value): bool { return is_string($value) && preg_match('##u', $value); } @@ -265,9 +257,8 @@ class Validators /** * Checks if the value is 0, '', false or null. - * @param mixed $value */ - public static function isNone($value): bool + public static function isNone(mixed $value): bool { return $value == null; // intentionally == } @@ -282,10 +273,9 @@ class Validators /** * Checks if a variable is a zero-based integer indexed array. - * @param mixed $value * @deprecated use Nette\Utils\Arrays::isList */ - public static function isList($value): bool + public static function isList(mixed $value): bool { return Arrays::isList($value); } @@ -294,9 +284,8 @@ class Validators /** * Checks if the value is in the given range [min, max], where the upper or lower limit can be omitted (null). * Numbers, strings and DateTime objects can be compared. - * @param mixed $value */ - public static function isInRange($value, array $range): bool + public static function isInRange(mixed $value, array $range): bool { if ($value === null || !(isset($range[0]) || isset($range[1]))) { return false; @@ -327,14 +316,13 @@ class Validators $atom = "[-a-z0-9!#$%&'*+/=?^_`{|}~]"; // RFC 5322 unquoted characters in local-part $alpha = "a-z\x80-\xFF"; // superset of IDN return (bool) preg_match(<< \\? (? [a-zA-Z_\x7f-\xff][\w\x7f-\xff]*) (\\ (?&name))* ) | - (? (?&type) (& (?&type))+ ) | - (? (?&type) | \( (?&intersection) \) ) (\| (?&upart))+ - )$~xAD -XX - , $type); + ~((?n) + \?? (? \\? (? [a-zA-Z_\x7f-\xff][\w\x7f-\xff]*) (\\ (?&name))* ) | + (? (?&type) (& (?&type))+ ) | + (? (?&type) | \( (?&intersection) \) ) (\| (?&upart))+ + )$~xAD + XX, $type); } } diff --git a/vendor/nette/utils/src/Utils/exceptions.php b/vendor/nette/utils/src/Utils/exceptions.php index c45e54306..af949ce47 100644 --- a/vendor/nette/utils/src/Utils/exceptions.php +++ b/vendor/nette/utils/src/Utils/exceptions.php @@ -29,7 +29,7 @@ class UnknownImageFileException extends ImageException /** * The exception that indicates error of JSON encoding/decoding. */ -class JsonException extends \Exception +class JsonException extends \JsonException { } @@ -39,14 +39,6 @@ class JsonException extends \Exception */ class RegexpException extends \Exception { - public const MESSAGES = [ - PREG_INTERNAL_ERROR => 'Internal error', - PREG_BACKTRACK_LIMIT_ERROR => 'Backtrack limit was exhausted', - PREG_RECURSION_LIMIT_ERROR => 'Recursion limit was exhausted', - PREG_BAD_UTF8_ERROR => 'Malformed UTF-8 data', - PREG_BAD_UTF8_OFFSET_ERROR => 'Offset didn\'t correspond to the begin of a valid UTF-8 code point', - 6 => 'Failed due to limited JIT stack space', // PREG_JIT_STACKLIMIT_ERROR - ]; } diff --git a/vendor/nunomaduro/termwind/Makefile b/vendor/nunomaduro/termwind/Makefile new file mode 100644 index 000000000..a71576bf6 --- /dev/null +++ b/vendor/nunomaduro/termwind/Makefile @@ -0,0 +1,33 @@ +# Well documented Makefiles +DEFAULT_GOAL := help +help: + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m \033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-40s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + +##@ [Docker] +start: ## Spin up the container + docker-compose up -d + +stop: ## Shut down the containers + docker-compose down + +build: ## Build all docker images + docker-compose build + +##@ [Application] +composer: ## Run composer commands. Specify the command e.g. via "make composer ARGS="install|update|require " + docker-compose run --rm app composer $(ARGS) + +lint: ## Run the Linter + docker-compose run --rm app ./vendor/bin/pint -v + +test-lint: ## Run the Linter Test + docker-compose run --rm app ./vendor/bin/pint --test -v + +test-types: ## Run the PHPStan analysis + docker-compose run --rm app ./vendor/bin/phpstan analyse --ansi + +test-unit: ## Run the Pest Test Suite + docker-compose run --rm app ./vendor/bin/pest --colors=always + +test: ## Run the tests. Apply arguments via make test ARGS="--init" + make test-lint && make test-types && make test-unit diff --git a/vendor/nunomaduro/termwind/docker-compose.yml b/vendor/nunomaduro/termwind/docker-compose.yml new file mode 100644 index 000000000..693b0081b --- /dev/null +++ b/vendor/nunomaduro/termwind/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3' + +services: + app: + image: termwind-docker + container_name: termwind-docker + stdin_open: true + tty: true + build: + context: . + dockerfile: docker/Dockerfile + volumes: + - .:/usr/src/app diff --git a/vendor/nunomaduro/termwind/docker/Dockerfile b/vendor/nunomaduro/termwind/docker/Dockerfile new file mode 100644 index 000000000..53732e733 --- /dev/null +++ b/vendor/nunomaduro/termwind/docker/Dockerfile @@ -0,0 +1,11 @@ +FROM php:8.2-cli-alpine + +# INSTALL AND UPDATE COMPOSER +COPY --from=composer /usr/bin/composer /usr/bin/composer +RUN composer self-update + +WORKDIR /usr/src/app +COPY . . + +# INSTALL YOUR DEPENDENCIES +RUN composer install --prefer-dist diff --git a/vendor/nunomaduro/termwind/src/Html/InheritStyles.php b/vendor/nunomaduro/termwind/src/Html/InheritStyles.php index fc84221ef..953177edb 100644 --- a/vendor/nunomaduro/termwind/src/Html/InheritStyles.php +++ b/vendor/nunomaduro/termwind/src/Html/InheritStyles.php @@ -89,6 +89,10 @@ final class InheritStyles */ private function applyJustifyBetween(array $elements): array { + if (count($elements) <= 1) { + return $elements; + } + [$totalWidth, $parentWidth] = $this->getWidthFromElements($elements); $space = ($parentWidth - $totalWidth) / (count($elements) - 1); @@ -146,6 +150,10 @@ final class InheritStyles */ private function applyJustifyAround(array $elements): array { + if (count($elements) === 0) { + return $elements; + } + [$totalWidth, $parentWidth] = $this->getWidthFromElements($elements); $space = ($parentWidth - $totalWidth) / count($elements); diff --git a/vendor/phenx/php-font-lib/.gitattributes b/vendor/phenx/php-font-lib/.gitattributes deleted file mode 100644 index 623abe88f..000000000 --- a/vendor/phenx/php-font-lib/.gitattributes +++ /dev/null @@ -1,12 +0,0 @@ -*.json text -*.xml text -*.php text -*.LGPL text -*.md text -*.skel text -*.css text -*.inc text -*.js text -*.html text -*.txt text -*.svg text diff --git a/vendor/phenx/php-font-lib/.github/workflows/phpunit.yml b/vendor/phenx/php-font-lib/.github/workflows/phpunit.yml new file mode 100644 index 000000000..82eeb8529 --- /dev/null +++ b/vendor/phenx/php-font-lib/.github/workflows/phpunit.yml @@ -0,0 +1,44 @@ +name: PHPUnit tests + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + php-version: + + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + php-version: + - "5.4" + - "5.5" + - "5.6" + - "7.0" + - "7.1" + - "7.2" + - "7.3" + - "7.4" + - "8.0" + - "8.1" + + steps: + + - uses: actions/checkout@v2 + + - name: Install PHP + uses: "shivammathur/setup-php@v2" + with: + php-version: "${{ matrix.php-version }}" + coverage: "none" + ini-values: "zend.assertions=1" + + - name: Install Composer dependencies + run: composer install --no-progress --ansi + + - name: Run tests ${{ matrix.php-version }} + run: SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1 bin/simple-phpunit --color=always diff --git a/vendor/phenx/php-font-lib/.gitignore b/vendor/phenx/php-font-lib/.gitignore deleted file mode 100644 index d2b601ebc..000000000 --- a/vendor/phenx/php-font-lib/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.DS_Store -composer.lock -vendor -.idea -.project diff --git a/vendor/phenx/php-font-lib/README.md b/vendor/phenx/php-font-lib/README.md index 649db191c..0fa24ee6b 100644 --- a/vendor/phenx/php-font-lib/README.md +++ b/vendor/phenx/php-font-lib/README.md @@ -1,3 +1,7 @@ +[](https://github.com/dompdf/php-font-lib/actions/workflows/phpunit.yml) + +# PHP Font Lib + This library can be used to: * Read TrueType, OpenType (with TrueType glyphs), WOFF font files * Extract basic info (name, style, etc) @@ -7,3 +11,18 @@ This library can be used to: You can find a demo GUI [here](http://pxd.me/php-font-lib/www/font_explorer.html). This project was initiated by the need to read font files in the [DOMPDF project](https://github.com/dompdf/dompdf). + +Usage Example +------------- + +``` +$font = \FontLib\Font::load('../../fontfile.ttf'); +$font->parse(); // for getFontWeight() to work this call must be done first! +echo $font->getFontName() .'
'; +echo $font->getFontSubfamily() .'
'; +echo $font->getFontSubfamilyID() .'
'; +echo $font->getFontFullName() .'
'; +echo $font->getFontVersion() .'
'; +echo $font->getFontWeight() .'
'; +echo $font->getFontPostscriptName() .'
'; +``` diff --git a/vendor/phenx/php-font-lib/bower.json b/vendor/phenx/php-font-lib/bower.json new file mode 100644 index 000000000..0a4a45b2e --- /dev/null +++ b/vendor/phenx/php-font-lib/bower.json @@ -0,0 +1,23 @@ +{ + "name": "php-font-lib", + "version": "0.3.1", + "license": "LGPL-3.0", + "keywords": [ + "font", + "parse", + "export", + "truetype", + "opentype", + "woff" + ], + "homepage": "https://github.com/PhenX/php-font-lib", + "_release": "0.3.1", + "_resolution": { + "type": "version", + "tag": "v0.3.1", + "commit": "d13682b7e27d14a6323c441426f3dde1cd86c751" + }, + "_source": "https://github.com/PhenX/php-font-lib.git", + "_target": "*", + "_originalSource": "https://github.com/PhenX/php-font-lib.git" +} \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_cmap.php b/vendor/phenx/php-font-lib/classes/Font_Table_cmap.php deleted file mode 100644 index e5c0d7a58..000000000 --- a/vendor/phenx/php-font-lib/classes/Font_Table_cmap.php +++ /dev/null @@ -1,252 +0,0 @@ - - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - */ - -/** - * `cmap` font table. - * - * @package php-font-lib - */ -class Font_Table_cmap extends Font_Table { - private static $header_format = array( - "version" => self::uint16, - "numberSubtables" => self::uint16, - ); - - private static $subtable_header_format = array( - "platformID" => self::uint16, - "platformSpecificID" => self::uint16, - "offset" => self::uint32, - ); - - private static $subtable_v4_format = array( - "length" => self::uint16, - "language" => self::uint16, - "segCountX2" => self::uint16, - "searchRange" => self::uint16, - "entrySelector" => self::uint16, - "rangeShift" => self::uint16, - ); - - protected function _parse(){ - $font = $this->getFont(); - - $cmap_offset = $font->pos(); - - $data = $font->unpack(self::$header_format); - - $subtables = array(); - for($i = 0; $i < $data["numberSubtables"]; $i++){ - $subtables[] = $font->unpack(self::$subtable_header_format); - } - $data["subtables"] = $subtables; - - foreach($data["subtables"] as $i => &$subtable) { - $font->seek($cmap_offset + $subtable["offset"]); - - $subtable["format"] = $font->readUInt16(); - - // @todo Only CMAP version 4 - if($subtable["format"] != 4) { - unset($data["subtables"][$i]); - $data["numberSubtables"]--; - continue; - } - - $subtable += $font->unpack(self::$subtable_v4_format); - $segCount = $subtable["segCountX2"] / 2; - $subtable["segCount"] = $segCount; - - $endCode = $font->r(array(self::uint16, $segCount)); - - $font->readUInt16(); // reservedPad - - $startCode = $font->r(array(self::uint16, $segCount)); - $idDelta = $font->r(array(self::int16, $segCount)); - - $ro_start = $font->pos(); - $idRangeOffset = $font->r(array(self::uint16, $segCount)); - - $glyphIndexArray = array(); - for($i = 0; $i < $segCount; $i++) { - $c1 = $startCode[$i]; - $c2 = $endCode[$i]; - $d = $idDelta[$i]; - $ro = $idRangeOffset[$i]; - - if($ro > 0) - $font->seek($subtable["offset"] + 2 * $i + $ro); - - for($c = $c1; $c <= $c2; $c++) { - if ($ro == 0) - $gid = ($c + $d) & 0xFFFF; - else { - $offset = ($c - $c1) * 2 + $ro; - $offset = $ro_start + 2 * $i + $offset; - - $font->seek($offset); - $gid = $font->readUInt16(); - - if ($gid != 0) - $gid = ($gid + $d) & 0xFFFF; - } - - if($gid > 0) { - $glyphIndexArray[$c] = $gid; - } - } - } - - $subtable += array( - "endCode" => $endCode, - "startCode" => $startCode, - "idDelta" => $idDelta, - "idRangeOffset" => $idRangeOffset, - "glyphIndexArray" => $glyphIndexArray, - ); - } - - $this->data = $data; - } - - function _encode(){ - $font = $this->getFont(); - - $subset = $font->getSubset(); - $glyphIndexArray = $font->getUnicodeCharMap(); - - $newGlyphIndexArray = array(); - foreach ($glyphIndexArray as $code => $gid) { - $new_gid = array_search($gid, $subset); - if ($new_gid !== false) { - $newGlyphIndexArray[$code] = $new_gid; - } - } - - ksort($newGlyphIndexArray); // Sort by char code - - $segments = array(); - - $i = -1; - $prevCode = 0xFFFF; - $prevGid = 0xFFFF; - - foreach($newGlyphIndexArray as $code => $gid) { - if ( - $prevCode + 1 != $code || - $prevGid + 1 != $gid - ) { - $i++; - $segments[$i] = array(); - } - - $segments[$i][] = array($code, $gid); - - $prevCode = $code; - $prevGid = $gid; - } - - $segments[][] = array(0xFFFF, 0xFFFF); - - $startCode = array(); - $endCode = array(); - $idDelta = array(); - - foreach($segments as $codes){ - $start = reset($codes); - $end = end($codes); - - $startCode[] = $start[0]; - $endCode[] = $end[0]; - $idDelta[] = $start[1] - $start[0]; - } - - $segCount = count($startCode); - $idRangeOffset = array_fill(0, $segCount, 0); - - $searchRange = 1; - $entrySelector = 0; - while ($searchRange * 2 <= $segCount) { - $searchRange *= 2; - $entrySelector++; - } - $searchRange *= 2; - $rangeShift = $segCount * 2 - $searchRange; - - $subtables = array( - array( - // header - "platformID" => 3, // Unicode - "platformSpecificID" => 1, - "offset" => null, - - // subtable - "format" => 4, - "length" => null, - "language" => 0, - "segCount" => $segCount, - "segCountX2" => $segCount * 2, - "searchRange" => $searchRange, - "entrySelector" => $entrySelector, - "rangeShift" => $rangeShift, - "startCode" => $startCode, - "endCode" => $endCode, - "idDelta" => $idDelta, - "idRangeOffset" => $idRangeOffset, - "glyphIndexArray" => $newGlyphIndexArray, - ) - ); - - $data = array( - "version" => 0, - "numberSubtables" => count($subtables), - "subtables" => $subtables, - ); - - $length = $font->pack(self::$header_format, $data); - - $subtable_headers_size = $data["numberSubtables"] * 8; // size of self::$subtable_header_format - $subtable_headers_offset = $font->pos(); - - $length += $font->write(str_repeat("\0", $subtable_headers_size), $subtable_headers_size); - - // write subtables data - foreach($data["subtables"] as $i => $subtable) { - $length_before = $length; - $data["subtables"][$i]["offset"] = $length; - - $length += $font->writeUInt16($subtable["format"]); - - $before_subheader = $font->pos(); - $length += $font->pack(self::$subtable_v4_format, $subtable); - - $segCount = $subtable["segCount"]; - $length += $font->w(array(self::uint16, $segCount), $subtable["endCode"]); - $length += $font->writeUInt16(0); // reservedPad - $length += $font->w(array(self::uint16, $segCount), $subtable["startCode"]); - $length += $font->w(array(self::int16, $segCount), $subtable["idDelta"]); - $length += $font->w(array(self::uint16, $segCount), $subtable["idRangeOffset"]); - $length += $font->w(array(self::uint16, $segCount), array_values($subtable["glyphIndexArray"])); - - $after_subtable = $font->pos(); - - $subtable["length"] = $length - $length_before; - $font->seek($before_subheader); - $length += $font->pack(self::$subtable_v4_format, $subtable); - - $font->seek($after_subtable); - } - - // write subtables headers - $font->seek($subtable_headers_offset); - foreach($data["subtables"] as $subtable) { - $font->pack(self::$subtable_header_format, $subtable); - } - - return $length; - } -} diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_hmtx.php b/vendor/phenx/php-font-lib/classes/Font_Table_hmtx.php deleted file mode 100644 index 06df1c198..000000000 --- a/vendor/phenx/php-font-lib/classes/Font_Table_hmtx.php +++ /dev/null @@ -1,53 +0,0 @@ - - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - */ - -/** - * `hmtx` font table. - * - * @package php-font-lib - */ -class Font_Table_hmtx extends Font_Table { - protected function _parse(){ - $font = $this->getFont(); - $offset = $font->pos(); - - $numOfLongHorMetrics = $font->getData("hhea", "numOfLongHorMetrics"); - $numGlyphs = $font->getData("maxp", "numGlyphs"); - - $font->seek($offset); - - $data = array(); - for($gid = 0; $gid < $numOfLongHorMetrics; $gid++) { - $advanceWidth = $font->readUInt16(); - $leftSideBearing = $font->readUInt16(); - $data[$gid] = array($advanceWidth, $leftSideBearing); - } - - if($numOfLongHorMetrics < $numGlyphs){ - $lastWidth = end($data); - $data = array_pad($data, $numGlyphs, $lastWidth); - } - - $this->data = $data; - } - - protected function _encode() { - $font = $this->getFont(); - $subset = $font->getSubset(); - $data = $this->data; - - $length = 0; - - foreach($subset as $gid) { - $length += $font->writeUInt16($data[$gid][0]); - $length += $font->writeUInt16($data[$gid][1]); - } - - return $length; - } -} \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_kern.php b/vendor/phenx/php-font-lib/classes/Font_Table_kern.php deleted file mode 100644 index 434467832..000000000 --- a/vendor/phenx/php-font-lib/classes/Font_Table_kern.php +++ /dev/null @@ -1,72 +0,0 @@ - - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - */ - -/** - * `kern` font table. - * - * @package php-font-lib - */ -class Font_Table_kern extends Font_Table { - protected function _parse(){ - $font = $this->getFont(); - - $data = $font->unpack(array( - "version" => self::uint16, - "nTables" => self::uint16, - - // only the first subtable will be parsed - "subtableVersion" => self::uint16, - "length" => self::uint16, - "coverage" => self::uint16, - )); - - $data["format"] = ($data["coverage"] >> 8); - - $subtable = array(); - - switch($data["format"]) { - case 0: - $subtable = $font->unpack(array( - "nPairs" => self::uint16, - "searchRange" => self::uint16, - "entrySelector" => self::uint16, - "rangeShift" => self::uint16, - )); - - $pairs = array(); - $tree = array(); - - for ($i = 0; $i < $subtable["nPairs"]; $i++) { - $left = $font->readUInt16(); - $right = $font->readUInt16(); - $value = $font->readInt16(); - - $pairs[] = array( - "left" => $left, - "right" => $right, - "value" => $value, - ); - - $tree[$left][$right] = $value; - } - - //$subtable["pairs"] = $pairs; - $subtable["tree"] = $tree; - break; - - case 1: - case 2: - case 3: - break; - } - - $data["subtable"] = $subtable; - - $this->data = $data; - } -} \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/font.cls.php b/vendor/phenx/php-font-lib/classes/font.cls.php deleted file mode 100644 index c0e3b44e7..000000000 --- a/vendor/phenx/php-font-lib/classes/font.cls.php +++ /dev/null @@ -1,4 +0,0 @@ -font = $font; } - - function write($file, $encoding = null){ + + function write($file, $encoding = null) { $map_data = array(); if ($encoding) { $encoding = preg_replace("/[^a-z0-9-_]/", "", $encoding); - $map_file = dirname(__FILE__)."/../maps/$encoding.map"; + $map_file = dirname(__FILE__) . "/../maps/$encoding.map"; if (!file_exists($map_file)) { - throw new Exception("Unkown encoding ($encoding)"); + throw new \Exception("Unknown encoding ($encoding)"); } - - $map = new Encoding_Map($map_file); + + $map = new EncodingMap($map_file); $map_data = $map->parse(); } - + $this->f = fopen($file, "w+"); - + $font = $this->font; - + $this->startSection("FontMetrics", 4.1); $this->addPair("Notice", "Converted by PHP-font-lib"); $this->addPair("Comment", "https://github.com/PhenX/php-font-lib"); - + $encoding_scheme = ($encoding ? $encoding : "FontSpecific"); $this->addPair("EncodingScheme", $encoding_scheme); - + $records = $font->getData("name", "records"); - foreach($records as $id => $record) { - if (!isset(Font_Table_name::$nameIdCodes[$id]) || preg_match("/[\r\n]/", $record->string)) { + foreach ($records as $id => $record) { + if (!isset(name::$nameIdCodes[$id]) || preg_match("/[\r\n]/", $record->string)) { continue; } - - $this->addPair(Font_Table_name::$nameIdCodes[$id], $record->string); + + $this->addPair(name::$nameIdCodes[$id], $record->string); } - + $os2 = $font->getData("OS/2"); $this->addPair("Weight", ($os2["usWeightClass"] > 400 ? "Bold" : "Medium")); - + $post = $font->getData("post"); - $this->addPair("ItalicAngle", $post["italicAngle"]); - $this->addPair("IsFixedPitch", ($post["isFixedPitch"] ? "true" : "false")); + $this->addPair("ItalicAngle", $post["italicAngle"]); + $this->addPair("IsFixedPitch", ($post["isFixedPitch"] ? "true" : "false")); $this->addPair("UnderlineThickness", $font->normalizeFUnit($post["underlineThickness"])); - $this->addPair("UnderlinePosition", $font->normalizeFUnit($post["underlinePosition"])); - + $this->addPair("UnderlinePosition", $font->normalizeFUnit($post["underlinePosition"])); + $hhea = $font->getData("hhea"); - + if (isset($hhea["ascent"])) { - $this->addPair("FontHeightOffset", $font->normalizeFUnit($hhea["lineGap"])); - $this->addPair("Ascender", $font->normalizeFUnit($hhea["ascent"])); + $this->addPair("FontHeightOffset", $font->normalizeFUnit($hhea["lineGap"])); + $this->addPair("Ascender", $font->normalizeFUnit($hhea["ascent"])); $this->addPair("Descender", $font->normalizeFUnit($hhea["descent"])); } else { - $this->addPair("FontHeightOffset", $font->normalizeFUnit($os2["typoLineGap"])); - $this->addPair("Ascender", $font->normalizeFUnit($os2["typoAscender"])); + $this->addPair("FontHeightOffset", $font->normalizeFUnit($os2["typoLineGap"])); + $this->addPair("Ascender", $font->normalizeFUnit($os2["typoAscender"])); $this->addPair("Descender", -abs($font->normalizeFUnit($os2["typoDescender"]))); } - + $head = $font->getData("head"); $this->addArray("FontBBox", array( $font->normalizeFUnit($head["xMin"]), @@ -88,27 +91,29 @@ class Adobe_Font_Metrics { $font->normalizeFUnit($head["xMax"]), $font->normalizeFUnit($head["yMax"]), )); - + $glyphIndexArray = $font->getUnicodeCharMap(); - + if ($glyphIndexArray) { - $hmtx = $font->getData("hmtx"); + $hmtx = $font->getData("hmtx"); $names = $font->getData("post", "names"); - + $this->startSection("CharMetrics", count($hmtx)); - - if ($encoding) { - foreach($map_data as $code => $value) { + + if ($encoding) { + foreach ($map_data as $code => $value) { list($c, $name) = $value; - - if (!isset($glyphIndexArray[$c])) continue; - + + if (!isset($glyphIndexArray[$c])) { + continue; + } + $g = $glyphIndexArray[$c]; - + if (!isset($hmtx[$g])) { $hmtx[$g] = $hmtx[0]; } - + $this->addMetric(array( "C" => ($code > 255 ? -1 : $code), "WX" => $font->normalizeFUnit($hmtx[$g][0]), @@ -117,76 +122,86 @@ class Adobe_Font_Metrics { } } else { - foreach($glyphIndexArray as $c => $g) { + foreach ($glyphIndexArray as $c => $g) { if (!isset($hmtx[$g])) { $hmtx[$g] = $hmtx[0]; } - + $this->addMetric(array( - "U" => $c, + "U" => $c, "WX" => $font->normalizeFUnit($hmtx[$g][0]), - "N" => (isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $c)), - "G" => $g, + "N" => (isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $c)), + "G" => $g, )); } } - + $this->endSection("CharMetrics"); - + $kern = $font->getData("kern", "subtable"); - $tree = $kern["tree"]; - + $tree = is_array($kern) ? $kern["tree"] : null; + if (!$encoding && is_array($tree)) { $this->startSection("KernData"); - $this->startSection("KernPairs", count($tree, COUNT_RECURSIVE) - count($tree)); - - foreach($tree as $left => $values) { - if (!is_array($values)) continue; - if (!isset($glyphIndexArray[$left])) continue; - - $left_gid = $glyphIndexArray[$left]; - - if (!isset($names[$left_gid])) continue; - - $left_name = $names[$left_gid]; - - $this->addLine(""); - - foreach($values as $right => $value) { - if (!isset($glyphIndexArray[$right])) continue; - - $right_gid = $glyphIndexArray[$right]; - - if (!isset($names[$right_gid])) continue; - - $right_name = $names[$right_gid]; - $this->addPair("KPX", "$left_name $right_name $value"); - } + $this->startSection("KernPairs", count($tree, COUNT_RECURSIVE) - count($tree)); + + foreach ($tree as $left => $values) { + if (!is_array($values)) { + continue; } - - $this->endSection("KernPairs"); + if (!isset($glyphIndexArray[$left])) { + continue; + } + + $left_gid = $glyphIndexArray[$left]; + + if (!isset($names[$left_gid])) { + continue; + } + + $left_name = $names[$left_gid]; + + $this->addLine(""); + + foreach ($values as $right => $value) { + if (!isset($glyphIndexArray[$right])) { + continue; + } + + $right_gid = $glyphIndexArray[$right]; + + if (!isset($names[$right_gid])) { + continue; + } + + $right_name = $names[$right_gid]; + $this->addPair("KPX", "$left_name $right_name $value"); + } + } + + $this->endSection("KernPairs"); $this->endSection("KernData"); } } - + $this->endSection("FontMetrics"); } - + function addLine($line) { fwrite($this->f, "$line\n"); } - + function addPair($key, $value) { $this->addLine("$key $value"); } - + function addArray($key, $array) { - $this->addLine("$key ".implode(" ", $array)); + $this->addLine("$key " . implode(" ", $array)); } - + function addMetric($data) { $array = array(); - foreach($data as $key => $value) { + foreach ($data as $key => $value) { $array[] = "$key $value"; } $this->addLine(implode(" ; ", $array)); @@ -195,7 +210,7 @@ class Adobe_Font_Metrics { function startSection($name, $value = "") { $this->addLine("Start$name $value"); } - + function endSection($name) { $this->addLine("End$name"); } diff --git a/vendor/phenx/php-font-lib/src/FontLib/Autoloader.php b/vendor/phenx/php-font-lib/src/FontLib/Autoloader.php new file mode 100644 index 000000000..cd305453e --- /dev/null +++ b/vendor/phenx/php-font-lib/src/FontLib/Autoloader.php @@ -0,0 +1,43 @@ + + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + */ + +namespace FontLib; + +/** + * Autoloads FontLib classes + * + * @package php-font-lib + */ +class Autoloader { + const PREFIX = 'FontLib'; + + /** + * Register the autoloader + */ + public static function register() { + spl_autoload_register(array(new self, 'autoload')); + } + + /** + * Autoloader + * + * @param string + */ + public static function autoload($class) { + $prefixLength = strlen(self::PREFIX); + if (0 === strncmp(self::PREFIX, $class, $prefixLength)) { + $file = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, $prefixLength)); + $file = realpath(__DIR__ . (empty($file) ? '' : DIRECTORY_SEPARATOR) . $file . '.php'); + if (file_exists($file)) { + require_once $file; + } + } + } +} + +Autoloader::register(); \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_Binary_Stream.php b/vendor/phenx/php-font-lib/src/FontLib/BinaryStream.php similarity index 54% rename from vendor/phenx/php-font-lib/classes/Font_Binary_Stream.php rename to vendor/phenx/php-font-lib/src/FontLib/BinaryStream.php index 65b1cea48..c7eb52f84 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Binary_Stream.php +++ b/vendor/phenx/php-font-lib/src/FontLib/BinaryStream.php @@ -6,42 +6,44 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib; + /** * Generic font file binary stream. - * + * * @package php-font-lib */ -class Font_Binary_Stream { +class BinaryStream { /** * @var resource The file pointer */ protected $f; - - const uint8 = 1; - const int8 = 2; - const uint16 = 3; - const int16 = 4; - const uint32 = 5; - const int32 = 6; - const shortFrac = 7; - const Fixed = 8; - const FWord = 9; - const uFWord = 10; - const F2Dot14 = 11; + + const uint8 = 1; + const int8 = 2; + const uint16 = 3; + const int16 = 4; + const uint32 = 5; + const int32 = 6; + const shortFrac = 7; + const Fixed = 8; + const FWord = 9; + const uFWord = 10; + const F2Dot14 = 11; const longDateTime = 12; - const char = 13; - + const char = 13; + const modeRead = "rb"; const modeWrite = "wb"; const modeReadWrite = "rb+"; - - static function backtrace(){ + + static function backtrace() { var_dump(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)); } /** * Open a font file in read mode - * + * * @param string $filename The file name of the font to open * * @return bool @@ -56,18 +58,19 @@ class Font_Binary_Stream { * @param string $filename The file name of the font to open * @param string $mode The opening mode * - * @throws Exception + * @throws \Exception * @return bool */ public function open($filename, $mode = self::modeRead) { if (!in_array($mode, array(self::modeRead, self::modeWrite, self::modeReadWrite))) { - throw new Exception("Unkown file open mode"); + throw new \Exception("Unknown file open mode"); } - + $this->f = fopen($filename, $mode); + return $this->f != false; } - + /** * Close the internal file pointer */ @@ -80,13 +83,13 @@ class Font_Binary_Stream { * * @param resource $fp * - * @throws Exception + * @throws \Exception */ public function setFile($fp) { if (!is_resource($fp)) { - throw new Exception('$fp is not a valid resource'); + throw new \Exception('$fp is not a valid resource'); } - + $this->f = $fp; } @@ -99,22 +102,20 @@ class Font_Binary_Stream { */ public static function getTempFile($allow_memory = true) { $f = null; - + if ($allow_memory) { - // PHP 5.1+ - @fopen("php://temp", "rb+"); + $f = fopen("php://temp", "rb+"); } - - if (!$f) { + else { $f = fopen(tempnam(sys_get_temp_dir(), "fnt"), "rb+"); } - + return $f; } - + /** * Move the internal file pinter to $offset bytes - * + * * @param int $offset * * @return bool True if the $offset position exists in the file @@ -122,33 +123,38 @@ class Font_Binary_Stream { public function seek($offset) { return fseek($this->f, $offset, SEEK_SET) == 0; } - + /** * Gives the current position in the file - * + * * @return int The current position */ public function pos() { return ftell($this->f); } - + public function skip($n) { fseek($this->f, $n, SEEK_CUR); } - + + /** + * @param int $n The number of bytes to read + * + * @return string + */ public function read($n) { if ($n < 1) { return ""; } - return fread($this->f, $n); + return (string) fread($this->f, $n); } public function write($data, $length = null) { - if ($data === null || $data === "") { + if ($data === null || $data === "" || $data === false) { return 0; } - + return fwrite($this->f, $data, $length); } @@ -156,56 +162,81 @@ class Font_Binary_Stream { return ord($this->read(1)); } + public function readUInt8Many($count) { + return array_values(unpack("C*", $this->read($count))); + } + public function writeUInt8($data) { return $this->write(chr($data), 1); } public function readInt8() { $v = $this->readUInt8(); - + if ($v >= 0x80) { $v -= 0x100; } - + return $v; } + public function readInt8Many($count) { + return array_values(unpack("c*", $this->read($count))); + } + public function writeInt8($data) { if ($data < 0) { $data += 0x100; } - + return $this->writeUInt8($data); } public function readUInt16() { $a = unpack("nn", $this->read(2)); + return $a["n"]; } - - public function readUFWord(){ + + public function readUInt16Many($count) { + return array_values(unpack("n*", $this->read($count * 2))); + } + + public function readUFWord() { return $this->readUInt16(); } public function writeUInt16($data) { return $this->write(pack("n", $data), 2); } - - public function writeUFWord($data){ + + public function writeUFWord($data) { return $this->writeUInt16($data); } public function readInt16() { - $v = $this->readUInt16(); - + $a = unpack("nn", $this->read(2)); + $v = $a["n"]; + if ($v >= 0x8000) { $v -= 0x10000; } - + return $v; } - - public function readFWord(){ + + public function readInt16Many($count) { + $vals = array_values(unpack("n*", $this->read($count * 2))); + foreach ($vals as &$v) { + if ($v >= 0x8000) { + $v -= 0x10000; + } + } + + return $vals; + } + + public function readFWord() { return $this->readInt16(); } @@ -213,16 +244,17 @@ class Font_Binary_Stream { if ($data < 0) { $data += 0x10000; } - + return $this->writeUInt16($data); } - - public function writeFWord($data){ + + public function writeFWord($data) { return $this->writeInt16($data); } public function readUInt32() { $a = unpack("NN", $this->read(4)); + return $a["N"]; } @@ -231,134 +263,187 @@ class Font_Binary_Stream { } public function readFixed() { - $d = $this->readInt16(); + $d = $this->readInt16(); $d2 = $this->readUInt16(); + return round($d + $d2 / 0x10000, 4); } public function writeFixed($data) { - $left = floor($data); + $left = floor($data); $right = ($data - $left) * 0x10000; + return $this->writeInt16($left) + $this->writeUInt16($right); } - + public function readLongDateTime() { - $this->readUInt32(); // ignored + $this->readUInt32(); // ignored $date = $this->readUInt32() - 2082844800; - return strftime("%Y-%m-%d %H:%M:%S", $date); + # PHP_INT_MIN isn't defined in PHP < 7.0 + $php_int_min = defined("PHP_INT_MIN") ? PHP_INT_MIN : ~PHP_INT_MAX; + + if (is_string($date) || $date > PHP_INT_MAX || $date < $php_int_min) { + $date = 0; + } + + return date("Y-m-d H:i:s", $date); } - + public function writeLongDateTime($data) { $date = strtotime($data); $date += 2082844800; - + return $this->writeUInt32(0) + $this->writeUInt32($date); } - + public function unpack($def) { $d = array(); - foreach($def as $name => $type) { + foreach ($def as $name => $type) { $d[$name] = $this->r($type); } + return $d; } - + public function pack($def, $data) { $bytes = 0; - foreach($def as $name => $type) { + foreach ($def as $name => $type) { $bytes += $this->w($type, $data[$name]); } + return $bytes; } - + /** * Read a data of type $type in the file from the current position - * + * * @param mixed $type The data type to read * * @return mixed The data that was read */ public function r($type) { - switch($type) { - case self::uint8: return $this->readUInt8(); - case self::int8: return $this->readInt8(); - case self::uint16: return $this->readUInt16(); - case self::int16: return $this->readInt16(); - case self::uint32: return $this->readUInt32(); - case self::int32: return $this->readUInt32(); - case self::shortFrac: return $this->readFixed(); - case self::Fixed: return $this->readFixed(); - case self::FWord: return $this->readInt16(); - case self::uFWord: return $this->readUInt16(); - case self::F2Dot14: return $this->readInt16(); - case self::longDateTime: return $this->readLongDateTime(); - case self::char: return $this->read(1); - default: - if ( is_array($type) ) { + switch ($type) { + case self::uint8: + return $this->readUInt8(); + case self::int8: + return $this->readInt8(); + case self::uint16: + return $this->readUInt16(); + case self::int16: + return $this->readInt16(); + case self::uint32: + return $this->readUInt32(); + case self::int32: + return $this->readUInt32(); + case self::shortFrac: + return $this->readFixed(); + case self::Fixed: + return $this->readFixed(); + case self::FWord: + return $this->readInt16(); + case self::uFWord: + return $this->readUInt16(); + case self::F2Dot14: + return $this->readInt16(); + case self::longDateTime: + return $this->readLongDateTime(); + case self::char: + return $this->read(1); + default: + if (is_array($type)) { if ($type[0] == self::char) { return $this->read($type[1]); } - + if ($type[0] == self::uint16) { + return $this->readUInt16Many($type[1]); + } + if ($type[0] == self::int16) { + return $this->readInt16Many($type[1]); + } + if ($type[0] == self::uint8) { + return $this->readUInt8Many($type[1]); + } + if ($type[0] == self::int8) { + return $this->readInt8Many($type[1]); + } + $ret = array(); - for($i = 0; $i < $type[1]; $i++) { + for ($i = 0; $i < $type[1]; $i++) { $ret[] = $this->r($type[0]); } + return $ret; } return null; } } - + /** * Write $data of type $type in the file from the current position - * + * * @param mixed $type The data type to write * @param mixed $data The data to write * * @return int The number of bytes read */ public function w($type, $data) { - switch($type) { - case self::uint8: return $this->writeUInt8($data); - case self::int8: return $this->writeInt8($data); - case self::uint16: return $this->writeUInt16($data); - case self::int16: return $this->writeInt16($data); - case self::uint32: return $this->writeUInt32($data); - case self::int32: return $this->writeUInt32($data); - case self::shortFrac: return $this->writeFixed($data); - case self::Fixed: return $this->writeFixed($data); - case self::FWord: return $this->writeInt16($data); - case self::uFWord: return $this->writeUInt16($data); - case self::F2Dot14: return $this->writeInt16($data); - case self::longDateTime: return $this->writeLongDateTime($data); - case self::char: return $this->write($data, 1); - default: - if ( is_array($type) ) { + switch ($type) { + case self::uint8: + return $this->writeUInt8($data); + case self::int8: + return $this->writeInt8($data); + case self::uint16: + return $this->writeUInt16($data); + case self::int16: + return $this->writeInt16($data); + case self::uint32: + return $this->writeUInt32($data); + case self::int32: + return $this->writeUInt32($data); + case self::shortFrac: + return $this->writeFixed($data); + case self::Fixed: + return $this->writeFixed($data); + case self::FWord: + return $this->writeInt16($data); + case self::uFWord: + return $this->writeUInt16($data); + case self::F2Dot14: + return $this->writeInt16($data); + case self::longDateTime: + return $this->writeLongDateTime($data); + case self::char: + return $this->write($data, 1); + default: + if (is_array($type)) { if ($type[0] == self::char) { return $this->write($data, $type[1]); } - + $ret = 0; - for($i = 0; $i < $type[1]; $i++) { - $ret += $this->w($type[0], $data[$i]); + for ($i = 0; $i < $type[1]; $i++) { + if (isset($data[$i])) { + $ret += $this->w($type[0], $data[$i]); + } } + return $ret; } return null; } } - + /** * Converts a Uint32 value to string - * + * * @param int $uint32 * * @return string The string */ public function convertUInt32ToStr($uint32) { - return chr(($uint32 >> 24) & 0xFF).chr(($uint32 >> 16) & 0xFF).chr(($uint32 >> 8) & 0xFF).chr($uint32 & 0xFF); + return chr(($uint32 >> 24) & 0xFF) . chr(($uint32 >> 16) & 0xFF) . chr(($uint32 >> 8) & 0xFF) . chr($uint32 & 0xFF); } } diff --git a/vendor/phenx/php-font-lib/classes/Font_EOT.php b/vendor/phenx/php-font-lib/src/FontLib/EOT/File.php similarity index 78% rename from vendor/phenx/php-font-lib/classes/Font_EOT.php rename to vendor/phenx/php-font-lib/src/FontLib/EOT/File.php index 698199557..f51d876c5 100644 --- a/vendor/phenx/php-font-lib/classes/Font_EOT.php +++ b/vendor/phenx/php-font-lib/src/FontLib/EOT/File.php @@ -6,37 +6,36 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_TrueType.php"; -require_once dirname(__FILE__) . "/Font_EOT_Header.php"; +namespace FontLib\EOT; /** * EOT font file. - * + * * @package php-font-lib */ -class Font_EOT extends Font_TrueType { +class File extends \FontLib\TrueType\File { const TTEMBED_SUBSET = 0x00000001; const TTEMBED_TTCOMPRESSED = 0x00000004; const TTEMBED_FAILIFVARIATIONSIMULATED = 0x00000010; const TTMBED_EMBEDEUDC = 0x00000020; const TTEMBED_VALIDATIONTESTS = 0x00000040; // Deprecated - const TTEMBED_WEBOBJECT = 0x00000080; - const TTEMBED_XORENCRYPTDATA = 0x10000000; + const TTEMBED_WEBOBJECT = 0x00000080; + const TTEMBED_XORENCRYPTDATA = 0x10000000; /** - * @var Font_EOT_Header + * @var Header */ public $header; - function parseHeader(){ + function parseHeader() { if (!empty($this->header)) { return; } - $this->header = new Font_EOT_Header($this); + $this->header = new Header($this); $this->header->parse(); } - + function parse() { $this->parseHeader(); @@ -47,7 +46,6 @@ class Font_EOT extends Font_TrueType { $mtx_copy_limit = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8(); $mtx_offset_1 = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8(); $mtx_offset_2 = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8(); - /* var_dump("$mtx_version $mtx_copy_limit $mtx_offset_1 $mtx_offset_2"); @@ -60,27 +58,30 @@ class Font_EOT extends Font_TrueType { if ($flags & self::TTEMBED_XORENCRYPTDATA) { // Process XOR } - // TODO Read font data ... } /** * Little endian version of the read method + * + * @param int $n The number of bytes to read + * + * @return string */ public function read($n) { if ($n < 1) { return ""; } - $string = fread($this->f, $n); - $chunks = str_split($string, 2); + $string = (string) fread($this->f, $n); + $chunks = mb_str_split($string, 2, '8bit'); $chunks = array_map("strrev", $chunks); - return implode("", $chunks); } - public function readUInt32(){ + public function readUInt32() { $uint32 = parent::readUInt32(); + return $uint32 >> 16 & 0x0000FFFF | $uint32 << 16 & 0xFFFF0000; } @@ -89,7 +90,7 @@ class Font_EOT extends Font_TrueType { * * @return string|null */ - function getFontCopyright(){ + function getFontCopyright() { return null; } @@ -98,7 +99,7 @@ class Font_EOT extends Font_TrueType { * * @return string|null */ - function getFontName(){ + function getFontName() { return $this->header->data["FamilyName"]; } @@ -107,7 +108,7 @@ class Font_EOT extends Font_TrueType { * * @return string|null */ - function getFontSubfamily(){ + function getFontSubfamily() { return $this->header->data["StyleName"]; } @@ -116,7 +117,7 @@ class Font_EOT extends Font_TrueType { * * @return string|null */ - function getFontSubfamilyID(){ + function getFontSubfamilyID() { return $this->header->data["StyleName"]; } @@ -125,7 +126,7 @@ class Font_EOT extends Font_TrueType { * * @return string|null */ - function getFontFullName(){ + function getFontFullName() { return $this->header->data["FullName"]; } @@ -134,7 +135,7 @@ class Font_EOT extends Font_TrueType { * * @return string|null */ - function getFontVersion(){ + function getFontVersion() { return $this->header->data["VersionName"]; } @@ -143,7 +144,7 @@ class Font_EOT extends Font_TrueType { * * @return string|null */ - function getFontWeight(){ + function getFontWeight() { return $this->header->data["Weight"]; } @@ -152,7 +153,7 @@ class Font_EOT extends Font_TrueType { * * @return string|null */ - function getFontPostscriptName(){ + function getFontPostscriptName() { return null; } } diff --git a/vendor/phenx/php-font-lib/classes/Font_EOT_Header.php b/vendor/phenx/php-font-lib/src/FontLib/EOT/Header.php similarity index 59% rename from vendor/phenx/php-font-lib/classes/Font_EOT_Header.php rename to vendor/phenx/php-font-lib/src/FontLib/EOT/Header.php index a3900a036..960e36ad9 100644 --- a/vendor/phenx/php-font-lib/classes/Font_EOT_Header.php +++ b/vendor/phenx/php-font-lib/src/FontLib/EOT/Header.php @@ -6,16 +6,19 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_Header.php"; +namespace FontLib\EOT; + +use Exception; +use FontLib\Font; /** * TrueType font file header. - * + * * @package php-font-lib * - * @property Font_EOT $font + * @property File $font */ -class Font_EOT_Header extends Font_Header { +class Header extends \FontLib\Header { protected $def = array( "format" => self::uint32, "numTables" => self::uint16, @@ -24,31 +27,31 @@ class Font_EOT_Header extends Font_Header { "rangeShift" => self::uint16, ); - public function parse(){ + public function parse() { $font = $this->font; $this->data = $font->unpack(array( - "EOTSize" => self::uint32, - "FontDataSize" => self::uint32, - "Version" => self::uint32, - "Flags" => self::uint32, - "FontPANOSE" => array(self::uint8, 10), - "Charset" => self::uint8, - "Italic" => self::uint8, - "Weight" => self::uint32, - "fsType" => self::uint16, - "MagicNumber" => self::uint16, - "UnicodeRange1" => self::uint32, - "UnicodeRange2" => self::uint32, - "UnicodeRange3" => self::uint32, - "UnicodeRange4" => self::uint32, - "CodePageRange1" => self::uint32, - "CodePageRange2" => self::uint32, + "EOTSize" => self::uint32, + "FontDataSize" => self::uint32, + "Version" => self::uint32, + "Flags" => self::uint32, + "FontPANOSE" => array(self::uint8, 10), + "Charset" => self::uint8, + "Italic" => self::uint8, + "Weight" => self::uint32, + "fsType" => self::uint16, + "MagicNumber" => self::uint16, + "UnicodeRange1" => self::uint32, + "UnicodeRange2" => self::uint32, + "UnicodeRange3" => self::uint32, + "UnicodeRange4" => self::uint32, + "CodePageRange1" => self::uint32, + "CodePageRange2" => self::uint32, "CheckSumAdjustment" => self::uint32, - "Reserved1" => self::uint32, - "Reserved2" => self::uint32, - "Reserved3" => self::uint32, - "Reserved4" => self::uint32, + "Reserved1" => self::uint32, + "Reserved2" => self::uint32, + "Reserved3" => self::uint32, + "Reserved4" => self::uint32, )); $this->data["Padding1"] = $font->readUInt16(); @@ -65,7 +68,7 @@ class Font_EOT_Header extends Font_Header { switch ($this->data["Version"]) { default: - throw new Exception("Unknown EOT version ".$this->data["Version"]); + throw new Exception("Unknown EOT version " . $this->data["Version"]); case 0x00010000: // Nothing to do more @@ -81,12 +84,12 @@ class Font_EOT_Header extends Font_Header { $this->readString("RootString"); $this->data["RootStringCheckSum"] = $font->readUInt32(); - $this->data["EUDCCodePage"] = $font->readUInt32(); + $this->data["EUDCCodePage"] = $font->readUInt32(); $this->data["Padding6"] = $font->readUInt16(); $this->readString("Signature"); - $this->data["EUDCFlags"] = $font->readUInt32(); + $this->data["EUDCFlags"] = $font->readUInt32(); $this->data["EUDCFontSize"] = $font->readUInt32(); break; } @@ -101,10 +104,10 @@ class Font_EOT_Header extends Font_Header { $size = $font->readUInt16(); $this->data["{$name}Size"] = $size; - $this->data[$name] = Font::UTF16ToUTF8($font->read($size)); + $this->data[$name] = Font::UTF16ToUTF8($font->read($size)); } - public function encode(){ + public function encode() { //return $this->font->pack($this->def, $this->data); } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Encoding_Map.php b/vendor/phenx/php-font-lib/src/FontLib/EncodingMap.php similarity index 73% rename from vendor/phenx/php-font-lib/classes/Encoding_Map.php rename to vendor/phenx/php-font-lib/src/FontLib/EncodingMap.php index 523de4777..2acdebc50 100644 --- a/vendor/phenx/php-font-lib/classes/Encoding_Map.php +++ b/vendor/phenx/php-font-lib/src/FontLib/EncodingMap.php @@ -6,30 +6,32 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib; + /** * Encoding map used to map a code point to a Unicode char. - * + * * @package php-font-lib */ -class Encoding_Map { +class EncodingMap { private $f; - + function __construct($file) { $this->f = fopen($file, "r"); } - - function parse(){ + + function parse() { $map = array(); - - while($line = fgets($this->f)) { - if (preg_match("/^[\!\=]([0-9A-F]{2,})\s+U\+([0-9A-F]{2})([0-9A-F]{2})\s+([^\s]+)/", $line, $matches)) { + + while ($line = fgets($this->f)) { + if (preg_match('/^[\!\=]([0-9A-F]{2,})\s+U\+([0-9A-F]{2})([0-9A-F]{2})\s+([^\s]+)/', $line, $matches)) { $unicode = (hexdec($matches[2]) << 8) + hexdec($matches[3]); $map[hexdec($matches[1])] = array($unicode, $matches[4]); } } - + ksort($map); - + return $map; } } diff --git a/vendor/phenx/php-font-lib/src/FontLib/Exception/FontNotFoundException.php b/vendor/phenx/php-font-lib/src/FontLib/Exception/FontNotFoundException.php new file mode 100644 index 000000000..d97f25236 --- /dev/null +++ b/vendor/phenx/php-font-lib/src/FontLib/Exception/FontNotFoundException.php @@ -0,0 +1,11 @@ +message = 'Font not found in: ' . $fontPath; + } +} \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font.php b/vendor/phenx/php-font-lib/src/FontLib/Font.php similarity index 56% rename from vendor/phenx/php-font-lib/classes/Font.php rename to vendor/phenx/php-font-lib/src/FontLib/Font.php index f1896d7c6..e13a65332 100644 --- a/vendor/phenx/php-font-lib/classes/Font.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Font.php @@ -6,69 +6,83 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib; + +use FontLib\Exception\FontNotFoundException; + /** * Generic font file. - * + * * @package php-font-lib */ class Font { static $debug = false; - + /** * @param string $file The font file - * @return Font_TrueType|null $file + * + * @return TrueType\File|null $file */ public static function load($file) { - $header = file_get_contents($file, false, null, null, 4); - $class = null; - - switch($header) { - case "\x00\x01\x00\x00": - case "true": - case "typ1": - $class = "Font_TrueType"; break; - + if(!file_exists($file)){ + throw new FontNotFoundException($file); + } + + $header = file_get_contents($file, false, null, 0, 4); + $class = null; + + switch ($header) { + case "\x00\x01\x00\x00": + case "true": + case "typ1": + $class = "TrueType\\File"; + break; + case "OTTO": - $class = "Font_OpenType"; break; - + $class = "OpenType\\File"; + break; + case "wOFF": - $class = "Font_WOFF"; break; - + $class = "WOFF\\File"; + break; + case "ttcf": - $class = "Font_TrueType_Collection"; break; - + $class = "TrueType\\Collection"; + break; + // Unknown type or EOT - default: + default: $magicNumber = file_get_contents($file, false, null, 34, 2); - + if ($magicNumber === "LP") { - $class = "Font_EOT"; + $class = "EOT\\File"; } } - - if ($class) { - /** @noinspection PhpIncludeInspection */ - require_once dirname(__FILE__)."/$class.php"; - /** @var Font_TrueType $obj */ + if ($class) { + $class = "FontLib\\$class"; + + /** @var TrueType\File $obj */ $obj = new $class; $obj->load($file); - + return $obj; } return null; } - + static function d($str) { - if (!self::$debug) return; + if (!self::$debug) { + return; + } echo "$str\n"; } - + static function UTF16ToUTF8($str) { return mb_convert_encoding($str, "utf-8", "utf-16"); } - + static function UTF8ToUTF16($str) { return mb_convert_encoding($str, "utf-16", "utf-8"); } diff --git a/vendor/phenx/php-font-lib/classes/Font_Glyph_Outline.php b/vendor/phenx/php-font-lib/src/FontLib/Glyph/Outline.php similarity index 50% rename from vendor/phenx/php-font-lib/classes/Font_Glyph_Outline.php rename to vendor/phenx/php-font-lib/src/FontLib/Glyph/Outline.php index 7b83154ce..639ff60aa 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Glyph_Outline.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Glyph/Outline.php @@ -6,15 +6,20 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License * @version $Id: Font_Table_glyf.php 46 2012-04-02 20:22:38Z fabien.menager $ */ +namespace FontLib\Glyph; + +use FontLib\Table\Type\glyf; +use FontLib\TrueType\File; +use FontLib\BinaryStream; /** * `glyf` font table. * * @package php-font-lib */ -class Font_Glyph_Outline extends Font_Binary_Stream { +class Outline extends BinaryStream { /** - * @var Font_Table_glyf + * @var \FontLib\Table\Type\glyf */ protected $table; @@ -28,80 +33,77 @@ class Font_Glyph_Outline extends Font_Binary_Stream { public $xMax; public $yMax; + /** + * @var string|null + */ public $raw; /** - * @param Font_Table_glyf $table + * @param glyf $table * @param $offset * @param $size * - * @return Font_Glyph_Outline + * @return Outline */ - static function init(Font_Table_glyf $table, $offset, $size) { - $font = $table->getFont(); + static function init(glyf $table, $offset, $size, BinaryStream $font) { $font->seek($offset); if ($font->readInt16() > -1) { - /** @var Font_Glyph_Outline_Simple $glyph */ - $glyph = new Font_Glyph_Outline_Simple($table, $offset, $size); + /** @var OutlineSimple $glyph */ + $glyph = new OutlineSimple($table, $offset, $size); } else { - /** @var Font_Glyph_Outline_Composite $glyph */ - $glyph = new Font_Glyph_Outline_Composite($table, $offset, $size); + /** @var OutlineComposite $glyph */ + $glyph = new OutlineComposite($table, $offset, $size); } - $glyph->parse(); + $glyph->parse($font); + return $glyph; } /** - * @return Font_TrueType + * @return File */ function getFont() { return $this->table->getFont(); } - function __construct(Font_Table_glyf $table, $offset = null, $size = null) { + function __construct(glyf $table, $offset = null, $size = null) { $this->table = $table; $this->offset = $offset; $this->size = $size; } - function parse() { - $font = $this->getFont(); + function parse(BinaryStream $font) { $font->seek($this->offset); - if (!$this->size) { - return; - } - - $this->raw = $font->read($this->size); + $this->raw = $font->read($this->size); } - function parseData(){ + function parseData() { $font = $this->getFont(); $font->seek($this->offset); $this->numberOfContours = $font->readInt16(); - $this->xMin = $font->readFWord(); - $this->yMin = $font->readFWord(); - $this->xMax = $font->readFWord(); - $this->yMax = $font->readFWord(); + $this->xMin = $font->readFWord(); + $this->yMin = $font->readFWord(); + $this->xMax = $font->readFWord(); + $this->yMax = $font->readFWord(); } - function encode(){ + function encode() { $font = $this->getFont(); - return $font->write($this->raw, strlen($this->raw)); + + return $font->write($this->raw, mb_strlen((string) $this->raw, '8bit')); } function getSVGContours() { // Inherit } - function getGlyphIDs(){ + function getGlyphIDs() { return array(); } } -require_once dirname(__FILE__) . "/Font_Glyph_Outline_Simple.php"; -require_once dirname(__FILE__) . "/Font_Glyph_Outline_Composite.php"; diff --git a/vendor/phenx/php-font-lib/classes/Font_Glyph_Outline_Component.php b/vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineComponent.php similarity index 88% rename from vendor/phenx/php-font-lib/classes/Font_Glyph_Outline_Component.php rename to vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineComponent.php index 6f89e69e5..9cafaf4d1 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Glyph_Outline_Component.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineComponent.php @@ -7,12 +7,13 @@ * @version $Id: Font_Table_glyf.php 46 2012-04-02 20:22:38Z fabien.menager $ */ +namespace FontLib\Glyph; /** * Glyph outline component - * + * * @package php-font-lib */ -class Font_Glyph_Outline_Component { +class OutlineComponent { public $flags; public $glyphIndex; public $a, $b, $c, $d, $e, $f; @@ -20,7 +21,7 @@ class Font_Glyph_Outline_Component { public $point_component; public $instructions; - function getMatrix(){ + function getMatrix() { return array( $this->a, $this->b, $this->c, $this->d, diff --git a/vendor/phenx/php-font-lib/classes/Font_Glyph_Outline_Composite.php b/vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineComposite.php similarity index 79% rename from vendor/phenx/php-font-lib/classes/Font_Glyph_Outline_Composite.php rename to vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineComposite.php index bde1202e8..8ab0d2c66 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Glyph_Outline_Composite.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineComposite.php @@ -7,14 +7,14 @@ * @version $Id: Font_Table_glyf.php 46 2012-04-02 20:22:38Z fabien.menager $ */ -require_once dirname(__FILE__) . "/Font_Glyph_Outline_Component.php"; +namespace FontLib\Glyph; /** * Composite glyph outline * * @package php-font-lib */ -class Font_Glyph_Outline_Composite extends Font_Glyph_Outline { +class OutlineComposite extends Outline { const ARG_1_AND_2_ARE_WORDS = 0x0001; const ARGS_ARE_XY_VALUES = 0x0002; const ROUND_XY_TO_GRID = 0x0004; @@ -27,11 +27,11 @@ class Font_Glyph_Outline_Composite extends Font_Glyph_Outline { const OVERLAP_COMPOUND = 0x0400; /** - * @var Font_Glyph_Outline_Component[] + * @var OutlineComponent[] */ public $components = array(); - function getGlyphIDs(){ + function getGlyphIDs() { if (empty($this->components)) { $this->parseData(); } @@ -40,8 +40,11 @@ class Font_Glyph_Outline_Composite extends Font_Glyph_Outline { foreach ($this->components as $_component) { $glyphIDs[] = $_component->glyphIndex; - $_glyph = $this->table->data[$_component->glyphIndex]; - $glyphIDs = array_merge($glyphIDs, $_glyph->getGlyphIDs()); + $_glyph = $this->table->data[$_component->glyphIndex]; + + if ($_glyph !== $this) { + $glyphIDs = array_merge($glyphIDs, $_glyph->getGlyphIDs()); + } } return $glyphIDs; @@ -51,7 +54,7 @@ class Font_Glyph_Outline_Composite extends Font_Glyph_Outline { //$this->parseData(); }*/ - function parseData(){ + function parseData() { parent::parseData(); $font = $this->getFont(); @@ -60,9 +63,12 @@ class Font_Glyph_Outline_Composite extends Font_Glyph_Outline { $flags = $font->readUInt16(); $glyphIndex = $font->readUInt16(); - $a = 1.0; $b = 0.0; - $c = 0.0; $d = 1.0; - $e = 0.0; $f = 0.0; + $a = 1.0; + $b = 0.0; + $c = 0.0; + $d = 1.0; + $e = 0.0; + $f = 0.0; $point_compound = null; $point_component = null; @@ -108,30 +114,29 @@ class Font_Glyph_Outline_Composite extends Font_Glyph_Outline { // //} - $component = new Font_Glyph_Outline_Component(); - $component->flags = $flags; - $component->glyphIndex = $glyphIndex; - $component->a = $a; - $component->b = $b; - $component->c = $c; - $component->d = $d; - $component->e = $e; - $component->f = $f; - $component->point_compound = $point_compound; + $component = new OutlineComponent(); + $component->flags = $flags; + $component->glyphIndex = $glyphIndex; + $component->a = $a; + $component->b = $b; + $component->c = $c; + $component->d = $d; + $component->e = $e; + $component->f = $f; + $component->point_compound = $point_compound; $component->point_component = $point_component; - $component->instructions = $instructions; + $component->instructions = $instructions; $this->components[] = $component; - } while ($flags & self::MORE_COMPONENTS); } - function encode(){ + function encode() { $font = $this->getFont(); $gids = $font->getSubset(); - $size = $font->writeInt16(-1); + $size = $font->writeInt16(-1); $size += $font->writeFWord($this->xMin); $size += $font->writeFWord($this->yMin); $size += $font->writeFWord($this->xMax); @@ -164,7 +169,7 @@ class Font_Glyph_Outline_Composite extends Font_Glyph_Outline { $flags |= self::WE_HAVE_A_TWO_BY_TWO; } - if ($_i < count($this->components)-1) { + if ($_i < count($this->components) - 1) { $flags |= self::MORE_COMPONENTS; } @@ -212,20 +217,24 @@ class Font_Glyph_Outline_Composite extends Font_Glyph_Outline { return $size; } - public function getSVGContours(){ + public function getSVGContours() { $contours = array(); - /** @var Font_Table_glyf $glyph_data */ + /** @var \FontLib\Table\Type\glyf $glyph_data */ $glyph_data = $this->getFont()->getTableObject("glyf"); - /** @var Font_Glyph_Outline[] $glyphs */ + /** @var Outline[] $glyphs */ $glyphs = $glyph_data->data; foreach ($this->components as $component) { - $contours[] = array( - "contours" => $glyphs[$component->glyphIndex]->getSVGContours(), - "transform" => $component->getMatrix(), - ); + $_glyph = $glyphs[$component->glyphIndex]; + + if ($_glyph !== $this) { + $contours[] = array( + "contours" => $_glyph->getSVGContours(), + "transform" => $component->getMatrix(), + ); + } } return $contours; diff --git a/vendor/phenx/php-font-lib/classes/Font_Glyph_Outline_Simple.php b/vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineSimple.php similarity index 68% rename from vendor/phenx/php-font-lib/classes/Font_Glyph_Outline_Simple.php rename to vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineSimple.php index 45d066440..56b2fb496 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Glyph_Outline_Simple.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineSimple.php @@ -7,71 +7,73 @@ * @version $Id: Font_Table_glyf.php 46 2012-04-02 20:22:38Z fabien.menager $ */ +namespace FontLib\Glyph; + /** * `glyf` font table. - * + * * @package php-font-lib */ -class Font_Glyph_Outline_Simple extends Font_Glyph_Outline { +class OutlineSimple extends Outline { const ON_CURVE = 0x01; const X_SHORT_VECTOR = 0x02; const Y_SHORT_VECTOR = 0x04; const REPEAT = 0x08; const THIS_X_IS_SAME = 0x10; const THIS_Y_IS_SAME = 0x20; - + public $instructions; public $points; - - function parseData(){ + + function parseData() { parent::parseData(); - + if (!$this->size) { return; } - + $font = $this->getFont(); - + $noc = $this->numberOfContours; - + if ($noc == 0) { return; } - + $endPtsOfContours = $font->r(array(self::uint16, $noc)); - - $instructionLength = $font->readUInt16(); + + $instructionLength = $font->readUInt16(); $this->instructions = $font->r(array(self::uint8, $instructionLength)); - - $count = $endPtsOfContours[$noc-1] + 1; - + + $count = $endPtsOfContours[$noc - 1] + 1; + // Flags $flags = array(); for ($index = 0; $index < $count; $index++) { $flags[$index] = $font->readUInt8(); - + if ($flags[$index] & self::REPEAT) { $repeats = $font->readUInt8(); - + for ($i = 1; $i <= $repeats; $i++) { - $flags[$index+$i] = $flags[$index]; + $flags[$index + $i] = $flags[$index]; } - + $index += $repeats; } } - + $points = array(); foreach ($flags as $i => $flag) { - $points[$i]["onCurve"] = $flag & self::ON_CURVE; + $points[$i]["onCurve"] = $flag & self::ON_CURVE; $points[$i]["endOfContour"] = in_array($i, $endPtsOfContours); } - + // X Coords $x = 0; - for($i = 0; $i < $count; $i++) { + for ($i = 0; $i < $count; $i++) { $flag = $flags[$i]; - + if ($flag & self::THIS_X_IS_SAME) { if ($flag & self::X_SHORT_VECTOR) { $x += $font->readUInt8(); @@ -85,15 +87,15 @@ class Font_Glyph_Outline_Simple extends Font_Glyph_Outline { $x += $font->readInt16(); } } - + $points[$i]["x"] = $x; } - + // Y Coords $y = 0; - for($i = 0; $i < $count; $i++) { + for ($i = 0; $i < $count; $i++) { $flag = $flags[$i]; - + if ($flag & self::THIS_Y_IS_SAME) { if ($flag & self::Y_SHORT_VECTOR) { $y += $font->readUInt8(); @@ -107,141 +109,142 @@ class Font_Glyph_Outline_Simple extends Font_Glyph_Outline { $y += $font->readInt16(); } } - + $points[$i]["y"] = $y; } - + $this->points = $points; } - + public function splitSVGPath($path) { preg_match_all('/([a-z])|(-?\d+(?:\.\d+)?)/i', $path, $matches, PREG_PATTERN_ORDER); + return $matches[0]; } - + public function makePoints($path) { $path = $this->splitSVGPath($path); - $l = count($path); - $i = 0; - + $l = count($path); + $i = 0; + $points = array(); - - while($i < $l) { - switch($path[$i]) { + + while ($i < $l) { + switch ($path[$i]) { // moveTo case "M": $points[] = array( - "onCurve" => true, - "x" => $path[++$i], - "y" => $path[++$i], + "onCurve" => true, + "x" => $path[++$i], + "y" => $path[++$i], "endOfContour" => false, ); break; - + // lineTo case "L": $points[] = array( - "onCurve" => true, - "x" => $path[++$i], - "y" => $path[++$i], + "onCurve" => true, + "x" => $path[++$i], + "y" => $path[++$i], "endOfContour" => false, ); break; - + // quadraticCurveTo case "Q": $points[] = array( - "onCurve" => false, - "x" => $path[++$i], - "y" => $path[++$i], + "onCurve" => false, + "x" => $path[++$i], + "y" => $path[++$i], "endOfContour" => false, ); $points[] = array( - "onCurve" => true, - "x" => $path[++$i], - "y" => $path[++$i], + "onCurve" => true, + "x" => $path[++$i], + "y" => $path[++$i], "endOfContour" => false, ); break; - + // closePath /** @noinspection PhpMissingBreakStatementInspection */ case "z": - $points[count($points)-1]["endOfContour"] = true; - + $points[count($points) - 1]["endOfContour"] = true; + default: $i++; break; } } - + return $points; } - function encode(){ + function encode() { if (empty($this->points)) { return parent::encode(); } - + return $this->size = $this->encodePoints($this->points); } public function encodePoints($points) { $endPtsOfContours = array(); - $flags = array(); - $coords_x = array(); - $coords_y = array(); - + $flags = array(); + $coords_x = array(); + $coords_y = array(); + $last_x = 0; $last_y = 0; - $xMin = $yMin = 0xFFFF; - $xMax = $yMax = -0xFFFF; - foreach($points as $i => $point) { + $xMin = $yMin = 0xFFFF; + $xMax = $yMax = -0xFFFF; + foreach ($points as $i => $point) { $flag = 0; if ($point["onCurve"]) { $flag |= self::ON_CURVE; } - + if ($point["endOfContour"]) { $endPtsOfContours[] = $i; } - + // Simplified, we could do some optimizations if ($point["x"] == $last_x) { $flag |= self::THIS_X_IS_SAME; } else { - $x = intval($point["x"]); - $xMin = min($x, $xMin); - $xMax = max($x, $xMax); - $coords_x[] = $x-$last_x; // int16 + $x = intval($point["x"]); + $xMin = min($x, $xMin); + $xMax = max($x, $xMax); + $coords_x[] = $x - $last_x; // int16 } - + // Simplified, we could do some optimizations if ($point["y"] == $last_y) { $flag |= self::THIS_Y_IS_SAME; } else { - $y = intval($point["y"]); - $yMin = min($y, $yMin); - $yMax = max($y, $yMax); - $coords_y[] = $y-$last_y; // int16 + $y = intval($point["y"]); + $yMin = min($y, $yMin); + $yMax = max($y, $yMax); + $coords_y[] = $y - $last_y; // int16 } - + $flags[] = $flag; - $last_x = $point["x"]; - $last_y = $point["y"]; + $last_x = $point["x"]; + $last_y = $point["y"]; } - + $font = $this->getFont(); - + $l = 0; $l += $font->writeInt16(count($endPtsOfContours)); // endPtsOfContours $l += $font->writeFWord(isset($this->xMin) ? $this->xMin : $xMin); // xMin $l += $font->writeFWord(isset($this->yMin) ? $this->yMin : $yMin); // yMin $l += $font->writeFWord(isset($this->xMax) ? $this->xMax : $xMax); // xMax $l += $font->writeFWord(isset($this->yMax) ? $this->yMax : $yMax); // yMax - + // Simple glyf $l += $font->w(array(self::uint16, count($endPtsOfContours)), $endPtsOfContours); // endPtsOfContours $l += $font->writeUInt16(0); // instructionLength @@ -249,11 +252,11 @@ class Font_Glyph_Outline_Simple extends Font_Glyph_Outline { $l += $font->w(array(self::int16, count($coords_x)), $coords_x); // xCoordinates $l += $font->w(array(self::int16, count($coords_y)), $coords_y); // yCoordinates return $l; - } + } - public function getSVGContours($points = null){ + public function getSVGContours($points = null) { $path = ""; - + if (!$points) { if (empty($this->points)) { $this->parseData(); @@ -261,51 +264,51 @@ class Font_Glyph_Outline_Simple extends Font_Glyph_Outline { $points = $this->points; } - - $length = count($points); + + $length = (empty($points) ? 0 : count($points)); $firstIndex = 0; - $count = 0; - - for($i = 0; $i < $length; $i++) { + $count = 0; + + for ($i = 0; $i < $length; $i++) { $count++; - + if ($points[$i]["endOfContour"]) { $path .= $this->getSVGPath($points, $firstIndex, $count); $firstIndex = $i + 1; - $count = 0; + $count = 0; } } - + return $path; } - + protected function getSVGPath($points, $startIndex, $count) { $offset = 0; - $path = ""; - - while($offset < $count) { - $point = $points[ $startIndex + $offset %$count ]; - $point_p1 = $points[ $startIndex + ($offset+1)%$count ]; - - if($offset == 0) { + $path = ""; + + while ($offset < $count) { + $point = $points[$startIndex + $offset % $count]; + $point_p1 = $points[$startIndex + ($offset + 1) % $count]; + + if ($offset == 0) { $path .= "M{$point['x']},{$point['y']} "; } - + if ($point["onCurve"]) { if ($point_p1["onCurve"]) { $path .= "L{$point_p1['x']},{$point_p1['y']} "; $offset++; } else { - $point_p2 = $points[ $startIndex + ($offset+2)%$count ]; - - if ($point_p2["onCurve"]){ + $point_p2 = $points[$startIndex + ($offset + 2) % $count]; + + if ($point_p2["onCurve"]) { $path .= "Q{$point_p1['x']},{$point_p1['y']},{$point_p2['x']},{$point_p2['y']} "; - } + } else { - $path .= "Q{$point_p1['x']},{$point_p1['y']},".$this->midValue($point_p1['x'], $point_p2['x']).",".$this->midValue($point_p1['y'], $point_p2['y'])." "; - } - + $path .= "Q{$point_p1['x']},{$point_p1['y']}," . $this->midValue($point_p1['x'], $point_p2['x']) . "," . $this->midValue($point_p1['y'], $point_p2['y']) . " "; + } + $offset += 2; } } @@ -314,19 +317,19 @@ class Font_Glyph_Outline_Simple extends Font_Glyph_Outline { $path .= "Q{$point['x']},{$point['y']},{$point_p1['x']},{$point_p1['y']} "; } else { - $path .= "Q{$point['x']},{$point['y']},".$this->midValue($point['x'], $point_p1['x']).",".$this->midValue($point['y'], $point_p1['y'])." "; + $path .= "Q{$point['x']},{$point['y']}," . $this->midValue($point['x'], $point_p1['x']) . "," . $this->midValue($point['y'], $point_p1['y']) . " "; } - + $offset++; } } - + $path .= "z "; - + return $path; } - - function midValue($a, $b){ - return $a + ($b - $a)/2; + + function midValue($a, $b) { + return $a + ($b - $a) / 2; } -} \ No newline at end of file +} diff --git a/vendor/phenx/php-font-lib/classes/Font_Header.php b/vendor/phenx/php-font-lib/src/FontLib/Header.php similarity index 70% rename from vendor/phenx/php-font-lib/classes/Font_Header.php rename to vendor/phenx/php-font-lib/src/FontLib/Header.php index c200f2deb..cbf137ed3 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Header.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Header.php @@ -5,30 +5,33 @@ * @author Fabien Ménager* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib; + +use FontLib\TrueType\File; /** * Font header container. - * + * * @package php-font-lib */ -abstract class Font_Header extends Font_Binary_Stream { +abstract class Header extends BinaryStream { /** - * @var Font_TrueType + * @var File */ protected $font; protected $def = array(); - + public $data; - - public function __construct(Font_TrueType $font) { + + public function __construct(File $font) { $this->font = $font; } - - public function encode(){ + + public function encode() { return $this->font->pack($this->def, $this->data); } - - public function parse(){ + + public function parse() { $this->data = $this->font->unpack($this->def); } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_OpenType.php b/vendor/phenx/php-font-lib/src/FontLib/OpenType/File.php similarity index 62% rename from vendor/phenx/php-font-lib/classes/Font_OpenType.php rename to vendor/phenx/php-font-lib/src/FontLib/OpenType/File.php index 3f8261c7a..9c6df96fc 100644 --- a/vendor/phenx/php-font-lib/classes/Font_OpenType.php +++ b/vendor/phenx/php-font-lib/src/FontLib/OpenType/File.php @@ -6,14 +6,13 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_TrueType.php"; -require_once dirname(__FILE__) . "/Font_OpenType_Table_Directory_Entry.php"; +namespace FontLib\OpenType; /** * Open Type font, the same as a TrueType one. - * + * * @package php-font-lib */ -class Font_OpenType extends Font_TrueType { - // +class File extends \FontLib\TrueType\File { + // } diff --git a/vendor/phenx/php-font-lib/classes/Font_OpenType_Table_Directory_Entry.php b/vendor/phenx/php-font-lib/src/FontLib/OpenType/TableDirectoryEntry.php similarity index 65% rename from vendor/phenx/php-font-lib/classes/Font_OpenType_Table_Directory_Entry.php rename to vendor/phenx/php-font-lib/src/FontLib/OpenType/TableDirectoryEntry.php index d620f2cb4..dd75a3e16 100644 --- a/vendor/phenx/php-font-lib/classes/Font_OpenType_Table_Directory_Entry.php +++ b/vendor/phenx/php-font-lib/src/FontLib/OpenType/TableDirectoryEntry.php @@ -6,13 +6,13 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_TrueType_Table_Directory_Entry.php"; +namespace FontLib\OpenType; /** * Open Type Table directory entry, the same as a TrueType one. - * + * * @package php-font-lib */ -class Font_OpenType_Table_Directory_Entry extends Font_TrueType_Table_Directory_Entry { - +class TableDirectoryEntry extends \FontLib\TrueType\TableDirectoryEntry { + } diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_Directory_Entry.php b/vendor/phenx/php-font-lib/src/FontLib/Table/DirectoryEntry.php similarity index 73% rename from vendor/phenx/php-font-lib/classes/Font_Table_Directory_Entry.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/DirectoryEntry.php index 6df235f62..54a67af30 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_Directory_Entry.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/DirectoryEntry.php @@ -5,118 +5,128 @@ * @author Fabien Ménager * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib\Table; + +use FontLib\TrueType\File; +use FontLib\Font; +use FontLib\BinaryStream; /** * Generic Font table directory entry. - * + * * @package php-font-lib */ -class Font_Table_Directory_Entry extends Font_Binary_Stream { +class DirectoryEntry extends BinaryStream { /** - * @var Font_TrueType + * @var File */ protected $font; - + /** - * @var Font_Table + * @var Table */ protected $font_table; - + public $entryLength = 4; - + public $tag; public $checksum; public $offset; public $length; - + protected $origF; - - static function computeChecksum($data){ - $len = strlen($data); + + /** + * @param string $data + * + * @return int + */ + static function computeChecksum($data) { + $len = mb_strlen($data, '8bit'); $mod = $len % 4; - - if ($mod) { + + if ($mod) { $data = str_pad($data, $len + (4 - $mod), "\0"); } - - $len = strlen($data); - + + $len = mb_strlen($data, '8bit'); + $hi = 0x0000; $lo = 0x0000; - + for ($i = 0; $i < $len; $i += 4) { - $hi += (ord($data[$i] ) << 8) + ord($data[$i+1]); - $lo += (ord($data[$i+2]) << 8) + ord($data[$i+3]); + $hi += (ord($data[$i]) << 8) + ord($data[$i + 1]); + $lo += (ord($data[$i + 2]) << 8) + ord($data[$i + 3]); $hi += $lo >> 16; $lo = $lo & 0xFFFF; $hi = $hi & 0xFFFF; } - + return ($hi << 8) + $lo; } - - function __construct(Font_TrueType $font) { + + function __construct(File $font) { $this->font = $font; - $this->f = $font->f; + $this->f = $font->f; } - + function parse() { $this->tag = $this->font->read(4); } - + function open($filename, $mode = self::modeRead) { // void } - - function setTable(Font_Table $font_table) { + + function setTable(Table $font_table) { $this->font_table = $font_table; } - - function encode($entry_offset){ + + function encode($entry_offset) { Font::d("\n==== $this->tag ===="); //Font::d("Entry offset = $entry_offset"); - + $data = $this->font_table; $font = $this->font; - + $table_offset = $font->pos(); $this->offset = $table_offset; $table_length = $data->encode(); - + $font->seek($table_offset); $table_data = $font->read($table_length); - + $font->seek($entry_offset); - + $font->write($this->tag, 4); $font->writeUInt32(self::computeChecksum($table_data)); $font->writeUInt32($table_offset); $font->writeUInt32($table_length); - + Font::d("Bytes written = $table_length"); - + $font->seek($table_offset + $table_length); } - + /** - * @return Font_TrueType + * @return File */ function getFont() { return $this->font; } - + function startRead() { $this->font->seek($this->offset); } - + function endRead() { // } - + function startWrite() { $this->font->seek($this->offset); } - + function endWrite() { // } diff --git a/vendor/phenx/php-font-lib/classes/Font_Table.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Table.php similarity index 67% rename from vendor/phenx/php-font-lib/classes/Font_Table.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Table.php index c2c62b238..b12711230 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Table.php @@ -5,83 +5,89 @@ * @author Fabien Ménager * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib\Table; + +use FontLib\TrueType\File; +use FontLib\Font; +use FontLib\BinaryStream; /** * Generic font table. - * + * * @package php-font-lib */ -class Font_Table extends Font_Binary_Stream { +class Table extends BinaryStream { /** - * @var Font_Table_Directory_Entry + * @var DirectoryEntry */ protected $entry; protected $def = array(); - + public $data; - - final public function __construct(Font_Table_Directory_Entry $entry) { + + final public function __construct(DirectoryEntry $entry) { $this->entry = $entry; $entry->setTable($this); } - + /** - * @return Font_TrueType + * @return File */ - public function getFont(){ + public function getFont() { return $this->entry->getFont(); } - - protected function _encode(){ + + protected function _encode() { if (empty($this->data)) { Font::d(" >> Table is empty"); + return 0; } - + return $this->getFont()->pack($this->def, $this->data); } - - protected function _parse(){ + + protected function _parse() { $this->data = $this->getFont()->unpack($this->def); } - - protected function _parseRaw(){ + + protected function _parseRaw() { $this->data = $this->getFont()->read($this->entry->length); } - - protected function _encodeRaw(){ + + protected function _encodeRaw() { return $this->getFont()->write($this->data, $this->entry->length); } - - public function toHTML(){ - return " ".var_export($this->data, true).""; + + public function toHTML() { + return "" . var_export($this->data, true) . ""; } - - final public function encode(){ + + final public function encode() { $this->entry->startWrite(); - + if (false && empty($this->def)) { $length = $this->_encodeRaw(); } else { $length = $this->_encode(); } - + $this->entry->endWrite(); - + return $length; } - - final public function parse(){ + + final public function parse() { $this->entry->startRead(); - + if (false && empty($this->def)) { $this->_parseRaw(); } else { $this->_parse(); } - + $this->entry->endRead(); } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/src/FontLib/Table/Type/cmap.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/cmap.php new file mode 100644 index 000000000..7db77e1ae --- /dev/null +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/cmap.php @@ -0,0 +1,298 @@ + + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + */ + +namespace FontLib\Table\Type; +use FontLib\Table\Table; + +/** + * `cmap` font table. + * + * @package php-font-lib + */ +class cmap extends Table { + private static $header_format = array( + "version" => self::uint16, + "numberSubtables" => self::uint16, + ); + + private static $subtable_header_format = array( + "platformID" => self::uint16, + "platformSpecificID" => self::uint16, + "offset" => self::uint32, + ); + + private static $subtable_v4_format = array( + "length" => self::uint16, + "language" => self::uint16, + "segCountX2" => self::uint16, + "searchRange" => self::uint16, + "entrySelector" => self::uint16, + "rangeShift" => self::uint16, + ); + + private static $subtable_v12_format = array( + "length" => self::uint32, + "language" => self::uint32, + "ngroups" => self::uint32 + ); + + protected function _parse() { + $font = $this->getFont(); + + $cmap_offset = $font->pos(); + + $data = $font->unpack(self::$header_format); + + $subtables = array(); + for ($i = 0; $i < $data["numberSubtables"]; $i++) { + $subtables[] = $font->unpack(self::$subtable_header_format); + } + + $data["subtables"] = $subtables; + + foreach ($data["subtables"] as $i => &$subtable) { + $font->seek($cmap_offset + $subtable["offset"]); + + $subtable["format"] = $font->readUInt16(); + + // @todo Only CMAP version 4 and 12 + if (($subtable["format"] != 4) && ($subtable["format"] != 12)) { + unset($data["subtables"][$i]); + $data["numberSubtables"]--; + continue; + } + + if ($subtable["format"] == 12) { + + $font->readUInt16(); + + $subtable += $font->unpack(self::$subtable_v12_format); + + $glyphIndexArray = array(); + $endCodes = array(); + $startCodes = array(); + + for ($p = 0; $p < $subtable['ngroups']; $p++) { + + $startCode = $startCodes[] = $font->readUInt32(); + $endCode = $endCodes[] = $font->readUInt32(); + $startGlyphCode = $font->readUInt32(); + + for ($c = $startCode; $c <= $endCode; $c++) { + $glyphIndexArray[$c] = $startGlyphCode; + $startGlyphCode++; + } + } + + $subtable += array( + "startCode" => $startCodes, + "endCode" => $endCodes, + "glyphIndexArray" => $glyphIndexArray, + ); + + } + else if ($subtable["format"] == 4) { + + $subtable += $font->unpack(self::$subtable_v4_format); + + $segCount = $subtable["segCountX2"] / 2; + $subtable["segCount"] = $segCount; + + $endCode = $font->readUInt16Many($segCount); + + $font->readUInt16(); // reservedPad + + $startCode = $font->readUInt16Many($segCount); + $idDelta = $font->readInt16Many($segCount); + + $ro_start = $font->pos(); + $idRangeOffset = $font->readUInt16Many($segCount); + + $glyphIndexArray = array(); + for ($i = 0; $i < $segCount; $i++) { + $c1 = $startCode[$i]; + $c2 = $endCode[$i]; + $d = $idDelta[$i]; + $ro = $idRangeOffset[$i]; + + if ($ro > 0) { + $font->seek($subtable["offset"] + 2 * $i + $ro); + } + + for ($c = $c1; $c <= $c2; $c++) { + if ($ro == 0) { + $gid = ($c + $d) & 0xFFFF; + } + else { + $offset = ($c - $c1) * 2 + $ro; + $offset = $ro_start + 2 * $i + $offset; + + $font->seek($offset); + $gid = $font->readUInt16(); + + if ($gid != 0) { + $gid = ($gid + $d) & 0xFFFF; + } + } + + if ($gid > 0) { + $glyphIndexArray[$c] = $gid; + } + } + } + + $subtable += array( + "endCode" => $endCode, + "startCode" => $startCode, + "idDelta" => $idDelta, + "idRangeOffset" => $idRangeOffset, + "glyphIndexArray" => $glyphIndexArray, + ); + } + } + + $this->data = $data; + } + + function _encode() { + $font = $this->getFont(); + + $subset = $font->getSubset(); + $glyphIndexArray = $font->getUnicodeCharMap(); + + $newGlyphIndexArray = array(); + foreach ($glyphIndexArray as $code => $gid) { + $new_gid = array_search($gid, $subset); + if ($new_gid !== false) { + $newGlyphIndexArray[$code] = $new_gid; + } + } + + ksort($newGlyphIndexArray); // Sort by char code + + $segments = array(); + + $i = -1; + $prevCode = 0xFFFF; + $prevGid = 0xFFFF; + + foreach ($newGlyphIndexArray as $code => $gid) { + if ( + $prevCode + 1 != $code || + $prevGid + 1 != $gid + ) { + $i++; + $segments[$i] = array(); + } + + $segments[$i][] = array($code, $gid); + + $prevCode = $code; + $prevGid = $gid; + } + + $segments[][] = array(0xFFFF, 0xFFFF); + + $startCode = array(); + $endCode = array(); + $idDelta = array(); + + foreach ($segments as $codes) { + $start = reset($codes); + $end = end($codes); + + $startCode[] = $start[0]; + $endCode[] = $end[0]; + $idDelta[] = $start[1] - $start[0]; + } + + $segCount = count($startCode); + $idRangeOffset = array_fill(0, $segCount, 0); + + $searchRange = 1; + $entrySelector = 0; + while ($searchRange * 2 <= $segCount) { + $searchRange *= 2; + $entrySelector++; + } + $searchRange *= 2; + $rangeShift = $segCount * 2 - $searchRange; + + $subtables = array( + array( + // header + "platformID" => 3, // Unicode + "platformSpecificID" => 1, + "offset" => null, + + // subtable + "format" => 4, + "length" => null, + "language" => 0, + "segCount" => $segCount, + "segCountX2" => $segCount * 2, + "searchRange" => $searchRange, + "entrySelector" => $entrySelector, + "rangeShift" => $rangeShift, + "startCode" => $startCode, + "endCode" => $endCode, + "idDelta" => $idDelta, + "idRangeOffset" => $idRangeOffset, + "glyphIndexArray" => $newGlyphIndexArray, + ) + ); + + $data = array( + "version" => 0, + "numberSubtables" => count($subtables), + "subtables" => $subtables, + ); + + $length = $font->pack(self::$header_format, $data); + + $subtable_headers_size = $data["numberSubtables"] * 8; // size of self::$subtable_header_format + $subtable_headers_offset = $font->pos(); + + $length += $font->write(str_repeat("\0", $subtable_headers_size), $subtable_headers_size); + + // write subtables data + foreach ($data["subtables"] as $i => $subtable) { + $length_before = $length; + $data["subtables"][$i]["offset"] = $length; + + $length += $font->writeUInt16($subtable["format"]); + + $before_subheader = $font->pos(); + $length += $font->pack(self::$subtable_v4_format, $subtable); + + $segCount = $subtable["segCount"]; + $length += $font->w(array(self::uint16, $segCount), $subtable["endCode"]); + $length += $font->writeUInt16(0); // reservedPad + $length += $font->w(array(self::uint16, $segCount), $subtable["startCode"]); + $length += $font->w(array(self::int16, $segCount), $subtable["idDelta"]); + $length += $font->w(array(self::uint16, $segCount), $subtable["idRangeOffset"]); + $length += $font->w(array(self::uint16, $segCount), array_values($subtable["glyphIndexArray"])); + + $after_subtable = $font->pos(); + + $subtable["length"] = $length - $length_before; + $font->seek($before_subheader); + $length += $font->pack(self::$subtable_v4_format, $subtable); + + $font->seek($after_subtable); + } + + // write subtables headers + $font->seek($subtable_headers_offset); + foreach ($data["subtables"] as $subtable) { + $font->pack(self::$subtable_header_format, $subtable); + } + + return $length; + } +} diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_glyf.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/glyf.php similarity index 62% rename from vendor/phenx/php-font-lib/classes/Font_Table_glyf.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Type/glyf.php index bc2a3bdd1..1fbec3fd5 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_glyf.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/glyf.php @@ -6,58 +6,62 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_Glyph_Outline.php"; +namespace FontLib\Table\Type; + +use FontLib\Table\Table; +use FontLib\Glyph\Outline; +use FontLib\Glyph\OutlineSimple; /** * `glyf` font table. * * @package php-font-lib - * @property Font_Glyph_Outline[] $data + * @property Outline[] $data */ -class Font_Table_glyf extends Font_Table { - protected function _parse(){ - $font = $this->getFont(); +class glyf extends Table { + protected function _parse() { + $font = $this->getFont(); $offset = $font->pos(); - $loca = $font->getData("loca"); + $loca = $font->getData("loca"); $real_loca = array_slice($loca, 0, -1); // Not the last dummy loca entry $data = array(); - foreach($real_loca as $gid => $location) { - $_offset = $offset + $loca[$gid]; - $_size = $loca[$gid+1] - $loca[$gid]; - $data[$gid] = Font_Glyph_Outline::init($this, $_offset, $_size); + foreach ($real_loca as $gid => $location) { + $_offset = $offset + $loca[$gid]; + $_size = $loca[$gid + 1] - $loca[$gid]; + $data[$gid] = Outline::init($this, $_offset, $_size, $font); } $this->data = $data; } - public function getGlyphIDs($gids = array()){ + public function getGlyphIDs($gids = array()) { $glyphIDs = array(); foreach ($gids as $_gid) { - $_glyph = $this->data[$_gid]; + $_glyph = $this->data[$_gid]; $glyphIDs = array_merge($glyphIDs, $_glyph->getGlyphIDs()); } return array_unique(array_merge($gids, $glyphIDs)); } - public function toHTML(){ - $max = 160; + public function toHTML() { + $max = 160; $font = $this->getFont(); - $head = $font->getData("head"); + $head = $font->getData("head"); $head_json = json_encode($head); - $os2 = $font->getData("OS/2"); - $os2_json = json_encode($os2); + $os2 = $font->getData("OS/2"); + $os2_json = json_encode($os2); - $hmtx = $font->getData("hmtx"); + $hmtx = $font->getData("hmtx"); $hmtx_json = json_encode($hmtx); - $names = $font->getData("post", "names"); + $names = $font->getData("post", "names"); $glyphIndexArray = array_flip($font->getUnicodeCharMap()); $width = (abs($head["xMin"]) + $head["xMax"]); @@ -65,14 +69,14 @@ class Font_Table_glyf extends Font_Table { $ratio = 1; if ($width > $max || $height > $max) { - $ratio = max($width, $height) / $max; - $width = round($width/$ratio); - $height = round($height/$ratio); + $ratio = max($width, $height) / $max; + $width = round($width / $ratio); + $height = round($height / $ratio); } $n = 500; - $s = ""."Only the first $n simple glyphs are shown (".count($this->data)." total) + $s = "
" . "Only the first $n simple glyphs are shown (" . count($this->data) . " total)
Simple glyphComposite glyphZoom: @@ -86,29 +90,29 @@ class Font_Table_glyf extends Font_Table { Glyph.height = $height; "; - foreach($this->data as $g => $glyph) { + foreach ($this->data as $g => $glyph) { if ($n-- <= 0) { break; } $glyph->parseData(); - $shape = array( + $shape = array( "SVGContours" => $glyph->getSVGContours(), - "xMin" => $glyph->xMin, - "yMin" => $glyph->yMin, - "xMax" => $glyph->xMax, - "yMax" => $glyph->yMax, + "xMin" => $glyph->xMin, + "yMin" => $glyph->yMin, + "xMax" => $glyph->xMax, + "yMax" => $glyph->yMax, ); $shape_json = json_encode($shape); - $type = ($glyph instanceof Font_Glyph_Outline_Simple ? "simple" : "composite"); + $type = ($glyph instanceof OutlineSimple ? "simple" : "composite"); $char = isset($glyphIndexArray[$g]) ? $glyphIndexArray[$g] : 0; $name = isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $char); $char = $char ? "{$glyphIndexArray[$g]};" : ""; $s .= "- $g + $g $char $name "; @@ -130,19 +134,19 @@ class Font_Table_glyf extends Font_Table { protected function _encode() { - $font = $this->getFont(); + $font = $this->getFont(); $subset = $font->getSubset(); - $data = $this->data; + $data = $this->data; $loca = array(); $length = 0; - foreach($subset as $gid) { + foreach ($subset as $gid) { $loca[] = $length; $length += $data[$gid]->encode(); } - $loca[] = $length; // dummy loca + $loca[] = $length; // dummy loca $font->getTableObject("loca")->data = $loca; return $length; diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_head.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/head.php similarity index 78% rename from vendor/phenx/php-font-lib/classes/Font_Table_head.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Type/head.php index 4542e3174..6349f1458 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_head.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/head.php @@ -6,12 +6,16 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib\Table\Type; +use FontLib\Table\Table; +use Exception; + /** * `head` font table. - * + * * @package php-font-lib */ -class Font_Table_head extends Font_Table { +class head extends Table { protected $def = array( "tableVersion" => self::Fixed, "fontRevision" => self::Fixed, @@ -31,12 +35,12 @@ class Font_Table_head extends Font_Table { "indexToLocFormat" => self::int16, "glyphDataFormat" => self::int16, ); - - protected function _parse(){ + + protected function _parse() { parent::_parse(); - - if($this->data["magicNumber"] != 0x5F0F3CF5) { - throw new Exception("Incorrect magic number (".dechex($this->data["magicNumber"]).")"); + + if ($this->data["magicNumber"] != 0x5F0F3CF5) { + throw new Exception("Incorrect magic number (" . dechex($this->data["magicNumber"]) . ")"); } } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_hhea.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/hhea.php similarity index 77% rename from vendor/phenx/php-font-lib/classes/Font_Table_hhea.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Type/hhea.php index 41b8e46b5..dc60a14b6 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_hhea.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/hhea.php @@ -6,12 +6,15 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib\Table\Type; +use FontLib\Table\Table; + /** * `hhea` font table. - * + * * @package php-font-lib */ -class Font_Table_hhea extends Font_Table { +class hhea extends Table { protected $def = array( "version" => self::Fixed, "ascent" => self::FWord, @@ -24,18 +27,18 @@ class Font_Table_hhea extends Font_Table { "caretSlopeRise" => self::int16, "caretSlopeRun" => self::int16, "caretOffset" => self::FWord, - self::int16, - self::int16, - self::int16, - self::int16, + self::int16, + self::int16, + self::int16, + self::int16, "metricDataFormat" => self::int16, "numOfLongHorMetrics" => self::uint16, ); - - function _encode(){ - $font = $this->getFont(); + + function _encode() { + $font = $this->getFont(); $this->data["numOfLongHorMetrics"] = count($font->getSubset()); - + return parent::_encode(); } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/src/FontLib/Table/Type/hmtx.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/hmtx.php new file mode 100644 index 000000000..76e3307e8 --- /dev/null +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/hmtx.php @@ -0,0 +1,59 @@ + + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + */ + +namespace FontLib\Table\Type; +use FontLib\Table\Table; + +/** + * `hmtx` font table. + * + * @package php-font-lib + */ +class hmtx extends Table { + protected function _parse() { + $font = $this->getFont(); + $offset = $font->pos(); + + $numOfLongHorMetrics = $font->getData("hhea", "numOfLongHorMetrics"); + $numGlyphs = $font->getData("maxp", "numGlyphs"); + + $font->seek($offset); + + $data = array(); + $metrics = $font->readUInt16Many($numOfLongHorMetrics * 2); + for ($gid = 0, $mid = 0; $gid < $numOfLongHorMetrics; $gid++) { + $advanceWidth = isset($metrics[$mid]) ? $metrics[$mid] : 0; + $mid += 1; + $leftSideBearing = isset($metrics[$mid]) ? $metrics[$mid] : 0; + $mid += 1; + $data[$gid] = array($advanceWidth, $leftSideBearing); + } + + if ($numOfLongHorMetrics < $numGlyphs) { + $lastWidth = end($data); + $data = array_pad($data, $numGlyphs, $lastWidth); + } + + $this->data = $data; + } + + protected function _encode() { + $font = $this->getFont(); + $subset = $font->getSubset(); + $data = $this->data; + + $length = 0; + + foreach ($subset as $gid) { + $length += $font->writeUInt16($data[$gid][0]); + $length += $font->writeUInt16($data[$gid][1]); + } + + return $length; + } +} \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/src/FontLib/Table/Type/kern.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/kern.php new file mode 100644 index 000000000..987594647 --- /dev/null +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/kern.php @@ -0,0 +1,80 @@ + + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + */ + +namespace FontLib\Table\Type; +use FontLib\Table\Table; + +/** + * `kern` font table. + * + * @package php-font-lib + */ +class kern extends Table { + protected function _parse() { + $font = $this->getFont(); + + $data = $font->unpack(array( + "version" => self::uint16, + "nTables" => self::uint16, + + // only the first subtable will be parsed + "subtableVersion" => self::uint16, + "length" => self::uint16, + "coverage" => self::uint16, + )); + + $data["format"] = ($data["coverage"] >> 8); + + $subtable = array(); + + switch ($data["format"]) { + case 0: + $subtable = $font->unpack(array( + "nPairs" => self::uint16, + "searchRange" => self::uint16, + "entrySelector" => self::uint16, + "rangeShift" => self::uint16, + )); + + $pairs = array(); + $tree = array(); + + $values = $font->readUInt16Many($subtable["nPairs"] * 3); + for ($i = 0, $idx = 0; $i < $subtable["nPairs"]; $i++) { + $left = $values[$idx++]; + $right = $values[$idx++]; + $value = $values[$idx++]; + + if ($value >= 0x8000) { + $value -= 0x10000; + } + + $pairs[] = array( + "left" => $left, + "right" => $right, + "value" => $value, + ); + + $tree[$left][$right] = $value; + } + + //$subtable["pairs"] = $pairs; + $subtable["tree"] = $tree; + break; + + case 1: + case 2: + case 3: + break; + } + + $data["subtable"] = $subtable; + + $this->data = $data; + } +} \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_loca.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/loca.php similarity index 53% rename from vendor/phenx/php-font-lib/classes/Font_Table_loca.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Type/loca.php index 7246ad607..cbc2a2004 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_loca.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/loca.php @@ -6,68 +6,75 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib\Table\Type; +use FontLib\Table\Table; + /** * `loca` font table. - * + * * @package php-font-lib */ -class Font_Table_loca extends Font_Table { - protected function _parse(){ - $font = $this->getFont(); +class loca extends Table { + protected function _parse() { + $font = $this->getFont(); $offset = $font->pos(); - + $indexToLocFormat = $font->getData("head", "indexToLocFormat"); - $numGlyphs = $font->getData("maxp", "numGlyphs"); - + $numGlyphs = $font->getData("maxp", "numGlyphs"); + $font->seek($offset); - + $data = array(); - + // 2 bytes if ($indexToLocFormat == 0) { - $d = $font->read(($numGlyphs + 1) * 2); + $d = $font->read(($numGlyphs + 1) * 2); $loc = unpack("n*", $d); - + for ($i = 0; $i <= $numGlyphs; $i++) { - $data[] = $loc[$i+1] * 2; + $data[] = isset($loc[$i + 1]) ? $loc[$i + 1] * 2 : 0; } } - + // 4 bytes - else if ($indexToLocFormat == 1) { - $d = $font->read(($numGlyphs + 1) * 4); - $loc = unpack("N*", $d); - - for ($i = 0; $i <= $numGlyphs; $i++) { - $data[] = $loc[$i+1]; + else { + if ($indexToLocFormat == 1) { + $d = $font->read(($numGlyphs + 1) * 4); + $loc = unpack("N*", $d); + + for ($i = 0; $i <= $numGlyphs; $i++) { + $data[] = isset($loc[$i + 1]) ? $loc[$i + 1] : 0; + } } } - + $this->data = $data; } - - function _encode(){ + + function _encode() { $font = $this->getFont(); $data = $this->data; - + $indexToLocFormat = $font->getData("head", "indexToLocFormat"); - $numGlyphs = $font->getData("maxp", "numGlyphs"); - $length = 0; - + $numGlyphs = $font->getData("maxp", "numGlyphs"); + $length = 0; + // 2 bytes if ($indexToLocFormat == 0) { for ($i = 0; $i <= $numGlyphs; $i++) { $length += $font->writeUInt16($data[$i] / 2); } } - + // 4 bytes - else if ($indexToLocFormat == 1) { - for ($i = 0; $i <= $numGlyphs; $i++) { - $length += $font->writeUInt32($data[$i]); + else { + if ($indexToLocFormat == 1) { + for ($i = 0; $i <= $numGlyphs; $i++) { + $length += $font->writeUInt32($data[$i]); + } } } - + return $length; } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_maxp.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/maxp.php similarity index 87% rename from vendor/phenx/php-font-lib/classes/Font_Table_maxp.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Type/maxp.php index 4122c11e1..b4ebae032 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_maxp.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/maxp.php @@ -6,12 +6,15 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib\Table\Type; +use FontLib\Table\Table; + /** * `maxp` font table. - * + * * @package php-font-lib */ -class Font_Table_maxp extends Font_Table { +class maxp extends Table { protected $def = array( "version" => self::Fixed, "numGlyphs" => self::uint16, @@ -29,11 +32,11 @@ class Font_Table_maxp extends Font_Table { "maxComponentElements" => self::uint16, "maxComponentDepth" => self::uint16, ); - - function _encode(){ - $font = $this->getFont(); + + function _encode() { + $font = $this->getFont(); $this->data["numGlyphs"] = count($font->getSubset()); - + return parent::_encode(); } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_name.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/name.php similarity index 74% rename from vendor/phenx/php-font-lib/classes/Font_Table_name.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Type/name.php index 8f7e926a0..794824d3a 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_name.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/name.php @@ -6,14 +6,17 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_Table_name_Record.php"; +namespace FontLib\Table\Type; + +use FontLib\Table\Table; +use FontLib\Font; /** * `name` font table. - * + * * @package php-font-lib */ -class Font_Table_name extends Font_Table { +class name extends Table { private static $header_format = array( "format" => self::uint16, "count" => self::uint16, @@ -70,7 +73,7 @@ class Font_Table_name extends Font_Table { 3 => "Microsoft", ); - static $plaformSpecific = array( + static $platformSpecific = array( // Unicode 0 => array( 0 => "Default semantics", @@ -81,16 +84,16 @@ class Font_Table_name extends Font_Table { // Macintosh 1 => array( - 0 => "Roman", - 1 => "Japanese", - 2 => "Traditional Chinese", - 3 => "Korean", - 4 => "Arabic", - 5 => "Hebrew", - 6 => "Greek", - 7 => "Russian", - 8 => "RSymbol", - 9 => "Devanagari", + 0 => "Roman", + 1 => "Japanese", + 2 => "Traditional Chinese", + 3 => "Korean", + 4 => "Arabic", + 5 => "Hebrew", + 6 => "Greek", + 7 => "Russian", + 8 => "RSymbol", + 9 => "Devanagari", 10 => "Gurmukhi", 11 => "Gujarati", 12 => "Oriya", @@ -117,74 +120,74 @@ class Font_Table_name extends Font_Table { // Microsoft 3 => array( - 0 => "Symbol", - 1 => "Unicode BMP (UCS-2)", - 2 => "ShiftJIS", - 3 => "PRC", - 4 => "Big5", - 5 => "Wansung", - 6 => "Johab", + 0 => "Symbol", + 1 => "Unicode BMP (UCS-2)", + 2 => "ShiftJIS", + 3 => "PRC", + 4 => "Big5", + 5 => "Wansung", + 6 => "Johab", // 7 => Reserved // 8 => Reserved // 9 => Reserved 10 => "Unicode UCS-4", ), ); - - protected function _parse(){ - $font = $this->getFont(); - - $tableOffset = $font->pos(); - - $data = $font->unpack(self::$header_format); - - $records = array(); - for($i = 0; $i < $data["count"]; $i++) { - $record = new Font_Table_name_Record(); - $record_data = $font->unpack(Font_Table_name_Record::$format); - $record->map($record_data); - - $records[] = $record; - } - - $names = array(); - foreach($records as $record) { - $font->seek($tableOffset + $data["stringOffset"] + $record->offset); - $s = $font->read($record->length); - $record->string = Font::UTF16ToUTF8($s); - $names[$record->nameID] = $record; - } - - $data["records"] = $names; - - $this->data = $data; - } - - protected function _encode(){ + + protected function _parse() { $font = $this->getFont(); - /** @var Font_Table_name_Record[] $records */ - $records = $this->data["records"]; + $tableOffset = $font->pos(); + + $data = $font->unpack(self::$header_format); + + $records = array(); + for ($i = 0; $i < $data["count"]; $i++) { + $record = new nameRecord(); + $record_data = $font->unpack(nameRecord::$format); + $record->map($record_data); + + $records[] = $record; + } + + $names = array(); + foreach ($records as $record) { + $font->seek($tableOffset + $data["stringOffset"] + $record->offset); + $s = $font->read($record->length); + $record->string = Font::UTF16ToUTF8($s); + $names[$record->nameID] = $record; + } + + $data["records"] = $names; + + $this->data = $data; + } + + protected function _encode() { + $font = $this->getFont(); + + /** @var nameRecord[] $records */ + $records = $this->data["records"]; $count_records = count($records); - - $this->data["count"] = $count_records; + + $this->data["count"] = $count_records; $this->data["stringOffset"] = 6 + $count_records * 12; // 6 => uint16 * 3, 12 => sizeof self::$record_format - + $length = $font->pack(self::$header_format, $this->data); - + $offset = 0; - foreach($records as $record) { + foreach ($records as $record) { $record->length = mb_strlen($record->getUTF16(), "8bit"); $record->offset = $offset; $offset += $record->length; - $length += $font->pack(Font_Table_name_Record::$format, (array)$record); + $length += $font->pack(nameRecord::$format, (array)$record); } - - foreach($records as $record) { + + foreach ($records as $record) { $str = $record->getUTF16(); $length += $font->write($str, mb_strlen($str, "8bit")); } - + return $length; } -} \ No newline at end of file +} diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_name_Record.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/nameRecord.php similarity index 65% rename from vendor/phenx/php-font-lib/classes/Font_Table_name_Record.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Type/nameRecord.php index 6ad6ebdf4..2073c20da 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_name_Record.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/nameRecord.php @@ -5,13 +5,17 @@ * @author Fabien Ménager* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib\Table\Type; + +use FontLib\Font; +use FontLib\BinaryStream; /** * Font table name record. - * + * * @package php-font-lib */ -class Font_Table_name_Record extends Font_Binary_Stream { +class nameRecord extends BinaryStream { public $platformID; public $platformSpecificID; public $languageID; @@ -19,31 +23,31 @@ class Font_Table_name_Record extends Font_Binary_Stream { public $length; public $offset; public $string; - + public static $format = array( - "platformID" => self::uint16, + "platformID" => self::uint16, "platformSpecificID" => self::uint16, - "languageID" => self::uint16, - "nameID" => self::uint16, - "length" => self::uint16, - "offset" => self::uint16, + "languageID" => self::uint16, + "nameID" => self::uint16, + "length" => self::uint16, + "offset" => self::uint16, ); - + public function map($data) { - foreach($data as $key => $value) { + foreach ($data as $key => $value) { $this->$key = $value; } } - + public function getUTF8() { return $this->string; } - + public function getUTF16() { return Font::UTF8ToUTF16($this->string); } - - function __toString(){ + + function __toString() { return $this->string; } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_os2.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/os2.php similarity index 91% rename from vendor/phenx/php-font-lib/classes/Font_Table_os2.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Type/os2.php index 8d8de7da0..19a3e21f3 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_os2.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/os2.php @@ -6,12 +6,15 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib\Table\Type; +use FontLib\Table\Table; + /** * `OS/2` font table. - * + * * @package php-font-lib */ -class Font_Table_os2 extends Font_Table { +class os2 extends Table { protected $def = array( "version" => self::uint16, "xAvgCharWidth" => self::int16, @@ -31,7 +34,7 @@ class Font_Table_os2 extends Font_Table { "sFamilyClass" => self::int16, "panose" => array(self::uint8, 10), "ulCharRange" => array(self::uint32, 4), - "achVendID" => array(self::char, 4), + "achVendID" => array(self::char, 4), "fsSelection" => self::uint16, "fsFirstCharIndex" => self::uint16, "fsLastCharIndex" => self::uint16, diff --git a/vendor/phenx/php-font-lib/classes/Font_Table_post.php b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/post.php similarity index 71% rename from vendor/phenx/php-font-lib/classes/Font_Table_post.php rename to vendor/phenx/php-font-lib/src/FontLib/Table/Type/post.php index 534d3e704..030a942e6 100644 --- a/vendor/phenx/php-font-lib/classes/Font_Table_post.php +++ b/vendor/phenx/php-font-lib/src/FontLib/Table/Type/post.php @@ -6,12 +6,16 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ +namespace FontLib\Table\Type; +use FontLib\Table\Table; +use FontLib\TrueType\File; + /** * `post` font table. - * + * * @package php-font-lib */ -class Font_Table_post extends Font_Table { +class post extends Table { protected $def = array( "format" => self::Fixed, "italicAngle" => self::Fixed, @@ -23,119 +27,117 @@ class Font_Table_post extends Font_Table { "minMemType1" => self::uint32, "maxMemType1" => self::uint32, ); - - protected function _parse(){ + + protected function _parse() { $font = $this->getFont(); $data = $font->unpack($this->def); - + $names = array(); - - switch($data["format"]) { + + switch ($data["format"]) { case 1: - $names = Font_TrueType::$macCharNames; - break; - + $names = File::$macCharNames; + break; + case 2: $data["numberOfGlyphs"] = $font->readUInt16(); - - $glyphNameIndex = array(); - for($i = 0; $i < $data["numberOfGlyphs"]; $i++) { - $glyphNameIndex[] = $font->readUInt16(); - } - + + $glyphNameIndex = $font->readUInt16Many($data["numberOfGlyphs"]); + $data["glyphNameIndex"] = $glyphNameIndex; - + $namesPascal = array(); - for($i = 0; $i < $data["numberOfGlyphs"]; $i++) { - $len = $font->readUInt8(); + for ($i = 0; $i < $data["numberOfGlyphs"]; $i++) { + $len = $font->readUInt8(); $namesPascal[] = $font->read($len); } - - foreach($glyphNameIndex as $g => $index) { + + foreach ($glyphNameIndex as $g => $index) { if ($index < 258) { - $names[$g] = Font_TrueType::$macCharNames[$index]; + $names[$g] = File::$macCharNames[$index]; } else { - $names[$g] = $namesPascal[$index - 258]; + if (array_key_exists($index - 258, $namesPascal)) { + $names[$g] = $namesPascal[$index - 258]; + } } } - - break; - + + break; + case 2.5: // TODO - break; - + break; + case 3: // nothing - break; - + break; + case 4: // TODO - break; + break; } - + $data["names"] = $names; - + $this->data = $data; } - - function _encode(){ - $font = $this->getFont(); - $data = $this->data; - $data["format"] = 3; - - $length = $font->pack($this->def, $data); - - return $length; + function _encode() { + $font = $this->getFont(); + $data = $this->data; + $data["format"] = 3; + + $length = $font->pack($this->def, $data); + + return $length; /* $subset = $font->getSubset(); - + switch($data["format"]) { case 1: // nothing to do break; - + case 2: $old_names = $data["names"]; - + $glyphNameIndex = range(0, count($subset)); - + $names = array(); foreach($subset as $gid) { $names[] = $data["names"][$data["glyphNameIndex"][$gid]]; } - + $numberOfGlyphs = count($names); $length += $font->writeUInt16($numberOfGlyphs); - + foreach($glyphNameIndex as $gni) { $length += $font->writeUInt16($gni); } - + //$names = array_slice($names, 257); foreach($names as $name) { $len = strlen($name); $length += $font->writeUInt8($len); $length += $font->write($name, $len); } - + break; - + case 2.5: // TODO break; - + case 3: // nothing break; - + case 4: // TODO break; } - + return $length;*/ } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_TrueType_Collection.php b/vendor/phenx/php-font-lib/src/FontLib/TrueType/Collection.php similarity index 80% rename from vendor/phenx/php-font-lib/classes/Font_TrueType_Collection.php rename to vendor/phenx/php-font-lib/src/FontLib/TrueType/Collection.php index decbe7c8c..460ef4dae 100644 --- a/vendor/phenx/php-font-lib/classes/Font_TrueType_Collection.php +++ b/vendor/phenx/php-font-lib/src/FontLib/TrueType/Collection.php @@ -6,37 +6,41 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_Binary_Stream.php"; -require_once dirname(__FILE__) . "/Font_TrueType.php"; +namespace FontLib\TrueType; + +use Countable; +use FontLib\BinaryStream; +use Iterator; +use OutOfBoundsException; /** * TrueType collection font file. - * + * * @package php-font-lib */ -class Font_TrueType_Collection extends Font_Binary_Stream implements Iterator, Countable { +class Collection extends BinaryStream implements Iterator, Countable { /** * Current iterator position. - * + * * @var integer */ private $position = 0; - + protected $collectionOffsets = array(); protected $collection = array(); protected $version; protected $numFonts; - - function parse(){ + + function parse() { if (isset($this->numFonts)) { return; } - + $this->read(4); // tag name - - $this->version = $this->readFixed(); + + $this->version = $this->readFixed(); $this->numFonts = $this->readUInt32(); - + for ($i = 0; $i < $this->numFonts; $i++) { $this->collectionOffsets[] = $this->readUInt32(); } @@ -46,49 +50,51 @@ class Font_TrueType_Collection extends Font_Binary_Stream implements Iterator, C * @param int $fontId * * @throws OutOfBoundsException - * @return Font_TrueType + * @return File */ function getFont($fontId) { $this->parse(); - + if (!isset($this->collectionOffsets[$fontId])) { throw new OutOfBoundsException(); } - + if (isset($this->collection[$fontId])) { return $this->collection[$fontId]; } - - $font = new Font_TrueType(); + + $font = new File(); $font->f = $this->f; $font->setTableOffset($this->collectionOffsets[$fontId]); - + return $this->collection[$fontId] = $font; } - + function current() { return $this->getFont($this->position); } - + function key() { return $this->position; } - + function next() { return ++$this->position; } - + function rewind() { $this->position = 0; } - + function valid() { $this->parse(); + return isset($this->collectionOffsets[$this->position]); } - + function count() { $this->parse(); + return $this->numFonts; } } diff --git a/vendor/phenx/php-font-lib/classes/Font_TrueType.php b/vendor/phenx/php-font-lib/src/FontLib/TrueType/File.php similarity index 72% rename from vendor/phenx/php-font-lib/classes/Font_TrueType.php rename to vendor/phenx/php-font-lib/src/FontLib/TrueType/File.php index 234b3b2af..3594479aa 100644 --- a/vendor/phenx/php-font-lib/classes/Font_TrueType.php +++ b/vendor/phenx/php-font-lib/src/FontLib/TrueType/File.php @@ -6,22 +6,25 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -$dir = dirname(__FILE__); -require_once "$dir/Font_Binary_Stream.php"; -require_once "$dir/Font_TrueType_Table_Directory_Entry.php"; -require_once "$dir/Font_TrueType_Header.php"; -require_once "$dir/Font_Table.php"; -require_once "$dir/Font_Table_name.php"; -require_once "$dir/Adobe_Font_Metrics.php"; +namespace FontLib\TrueType; + +use FontLib\AdobeFontMetrics; +use FontLib\Font; +use FontLib\BinaryStream; +use FontLib\Table\Table; +use FontLib\Table\DirectoryEntry; +use FontLib\Table\Type\glyf; +use FontLib\Table\Type\name; +use FontLib\Table\Type\nameRecord; /** * TrueType font file. * * @package php-font-lib */ -class Font_TrueType extends Font_Binary_Stream { +class File extends BinaryStream { /** - * @var Font_TrueType_Header + * @var Header */ public $header = array(); @@ -98,8 +101,9 @@ class Font_TrueType extends Font_Binary_Stream { "Ccaron", "ccaron", "dmacron" ); - function getTable(){ + function getTable() { $this->parseTableEntries(); + return $this->directory; } @@ -112,7 +116,7 @@ class Font_TrueType extends Font_Binary_Stream { $this->data = array(); - foreach($this->directory as $tag => $table) { + foreach ($this->directory as $tag => $table) { if (empty($this->data[$tag])) { $this->readTable($tag); } @@ -120,23 +124,26 @@ class Font_TrueType extends Font_Binary_Stream { } function utf8toUnicode($str) { - $len = strlen($str); + $len = mb_strlen($str, '8bit'); $out = array(); for ($i = 0; $i < $len; $i++) { $uni = -1; - $h = ord($str[$i]); + $h = ord($str[$i]); - if ( $h <= 0x7F ) { + if ($h <= 0x7F) { $uni = $h; } - elseif ( $h >= 0xC2 ) { - if ( ($h <= 0xDF) && ($i < $len -1) ) + elseif ($h >= 0xC2) { + if (($h <= 0xDF) && ($i < $len - 1)) { $uni = ($h & 0x1F) << 6 | (ord($str[++$i]) & 0x3F); - elseif ( ($h <= 0xEF) && ($i < $len -2) ) + } + elseif (($h <= 0xEF) && ($i < $len - 2)) { $uni = ($h & 0x0F) << 12 | (ord($str[++$i]) & 0x3F) << 6 | (ord($str[++$i]) & 0x3F); - elseif ( ($h <= 0xF4) && ($i < $len -3) ) + } + elseif (($h <= 0xF4) && ($i < $len - 3)) { $uni = ($h & 0x0F) << 18 | (ord($str[++$i]) & 0x3F) << 12 | (ord($str[++$i]) & 0x3F) << 6 | (ord($str[++$i]) & 0x3F); + } } if ($uni >= 0) { @@ -149,7 +156,7 @@ class Font_TrueType extends Font_Binary_Stream { function getUnicodeCharMap() { $subtable = null; - foreach($this->getData("cmap", "subtables") as $_subtable) { + foreach ($this->getData("cmap", "subtables") as $_subtable) { if ($_subtable["platformID"] == 0 || $_subtable["platformID"] == 3 && $_subtable["platformSpecificID"] == 1) { $subtable = $_subtable; break; @@ -164,7 +171,7 @@ class Font_TrueType extends Font_Binary_Stream { } function setSubset($subset) { - if ( !is_array($subset) ) { + if (!is_array($subset)) { $subset = $this->utf8toUnicode($subset); } @@ -181,23 +188,23 @@ class Font_TrueType extends Font_Binary_Stream { 1, // .null ); - foreach($subset as $code) { + foreach ($subset as $code) { if (!isset($glyphIndexArray[$code])) { continue; } - $gid = $glyphIndexArray[$code]; + $gid = $glyphIndexArray[$code]; $gids[$gid] = $gid; } - /** @var Font_Table_glyf $glyf */ + /** @var glyf $glyf */ $glyf = $this->getTableObject("glyf"); $gids = $glyf->getGlyphIDs($gids); sort($gids); $this->glyph_subset = $gids; - $this->glyph_all = array_values($glyphIndexArray); // FIXME + $this->glyph_all = array_values($glyphIndexArray); // FIXME } function getSubset() { @@ -208,7 +215,7 @@ class Font_TrueType extends Font_Binary_Stream { return $this->glyph_subset; } - function encode($tags = array()){ + function encode($tags = array()) { if (!self::$raw) { $tags = array_merge(array("head", "hhea", "cmap", "hmtx", "maxp", "glyf", "loca", "name", "post"), $tags); } @@ -217,13 +224,13 @@ class Font_TrueType extends Font_Binary_Stream { } $num_tables = count($tags); - $n = 16;// @todo + $n = 16; // @todo - Font::d("Tables : ".implode(", ", $tags)); + Font::d("Tables : " . implode(", ", $tags)); - /** @var Font_Table_Directory_Entry[] $entries */ + /** @var DirectoryEntry[] $entries */ $entries = array(); - foreach($tags as $tag) { + foreach ($tags as $tag) { if (!isset($this->directory[$tag])) { Font::d(" >> '$tag' table doesn't exist"); continue; @@ -236,28 +243,33 @@ class Font_TrueType extends Font_Binary_Stream { $this->header->encode(); $directory_offset = $this->pos(); - $offset = $directory_offset + $num_tables * $n; + $offset = $directory_offset + $num_tables * $n; $this->seek($offset); $i = 0; - foreach($entries as $entry) { + foreach ($entries as $entry) { $entry->encode($directory_offset + $i * $n); $i++; } } - function parseHeader(){ + function parseHeader() { if (!empty($this->header)) { return; } $this->seek($this->tableOffset); - $this->header = new Font_TrueType_Header($this); + $this->header = new Header($this); $this->header->parse(); } - function parseTableEntries(){ + function getFontType(){ + $class_parts = explode("\\", get_class($this)); + return $class_parts[1]; + } + + function parseTableEntries() { $this->parseHeader(); if (!empty($this->directory)) { @@ -268,10 +280,12 @@ class Font_TrueType extends Font_Binary_Stream { return; } - $class = get_class($this)."_Table_Directory_Entry"; - for($i = 0; $i < $this->header->data["numTables"]; $i++) { - /** @var Font_Table_Directory_Entry $entry */ + $type = $this->getFontType(); + $class = "FontLib\\$type\\TableDirectoryEntry"; + + for ($i = 0; $i < $this->header->data["numTables"]; $i++) { + /** @var TableDirectoryEntry $entry */ $entry = new $class($this); $entry->parse(); @@ -279,7 +293,7 @@ class Font_TrueType extends Font_Binary_Stream { } } - function normalizeFUnit($value, $base = 1000){ + function normalizeFUnit($value, $base = 1000) { return round($value * ($base / $this->getData("head", "unitsPerEm"))); } @@ -288,21 +302,18 @@ class Font_TrueType extends Font_Binary_Stream { if (!self::$raw) { $name_canon = preg_replace("/[^a-z0-9]/", "", strtolower($tag)); - $class_file = dirname(__FILE__)."/Font_Table_$name_canon.php"; - if (!isset($this->directory[$tag]) || !file_exists($class_file)) { + $class = "FontLib\\Table\\Type\\$name_canon"; + + if (!isset($this->directory[$tag]) || !@class_exists($class)) { return; } - - /** @noinspection PhpIncludeInspection */ - require_once $class_file; - $class = "Font_Table_$name_canon"; } else { - $class = "Font_Table"; + $class = "FontLib\\Table\\Table"; } - /** @var Font_Table $table */ + /** @var Table $table */ $table = new $class($this->directory[$tag]); $table->parse(); @@ -312,13 +323,13 @@ class Font_TrueType extends Font_Binary_Stream { /** * @param $name * - * @return Font_Table + * @return Table */ public function getTableObject($name) { return $this->data[$name]; } - public function setTableObject($name, Font_Table $data) { + public function setTableObject($name, Table $data) { $this->data[$name] = $data; } @@ -341,12 +352,12 @@ class Font_TrueType extends Font_Binary_Stream { } } - function addDirectoryEntry(Font_Table_Directory_Entry $entry) { + function addDirectoryEntry(DirectoryEntry $entry) { $this->directory[$entry->tag] = $entry; } function saveAdobeFontMetrics($file, $encoding = null) { - $afm = new Adobe_Font_Metrics($this); + $afm = new AdobeFontMetrics($this); $afm->write($file, $encoding); } @@ -358,7 +369,7 @@ class Font_TrueType extends Font_Binary_Stream { * @return string|null */ function getNameTableString($nameID) { - /** @var Font_Table_name_Record[] $records */ + /** @var nameRecord[] $records */ $records = $this->getData("name", "records"); if (!isset($records[$nameID])) { @@ -373,8 +384,8 @@ class Font_TrueType extends Font_Binary_Stream { * * @return string|null */ - function getFontCopyright(){ - return $this->getNameTableString(Font_Table_name::NAME_COPYRIGHT); + function getFontCopyright() { + return $this->getNameTableString(name::NAME_COPYRIGHT); } /** @@ -382,8 +393,8 @@ class Font_TrueType extends Font_Binary_Stream { * * @return string|null */ - function getFontName(){ - return $this->getNameTableString(Font_Table_name::NAME_NAME); + function getFontName() { + return $this->getNameTableString(name::NAME_NAME); } /** @@ -391,8 +402,8 @@ class Font_TrueType extends Font_Binary_Stream { * * @return string|null */ - function getFontSubfamily(){ - return $this->getNameTableString(Font_Table_name::NAME_SUBFAMILY); + function getFontSubfamily() { + return $this->getNameTableString(name::NAME_SUBFAMILY); } /** @@ -400,8 +411,8 @@ class Font_TrueType extends Font_Binary_Stream { * * @return string|null */ - function getFontSubfamilyID(){ - return $this->getNameTableString(Font_Table_name::NAME_SUBFAMILY_ID); + function getFontSubfamilyID() { + return $this->getNameTableString(name::NAME_SUBFAMILY_ID); } /** @@ -409,8 +420,8 @@ class Font_TrueType extends Font_Binary_Stream { * * @return string|null */ - function getFontFullName(){ - return $this->getNameTableString(Font_Table_name::NAME_FULL_NAME); + function getFontFullName() { + return $this->getNameTableString(name::NAME_FULL_NAME); } /** @@ -418,8 +429,8 @@ class Font_TrueType extends Font_Binary_Stream { * * @return string|null */ - function getFontVersion(){ - return $this->getNameTableString(Font_Table_name::NAME_VERSION); + function getFontVersion() { + return $this->getNameTableString(name::NAME_VERSION); } /** @@ -427,7 +438,7 @@ class Font_TrueType extends Font_Binary_Stream { * * @return string|null */ - function getFontWeight(){ + function getFontWeight() { return $this->getTableObject("OS/2")->data["usWeightClass"]; } @@ -436,22 +447,22 @@ class Font_TrueType extends Font_Binary_Stream { * * @return string|null */ - function getFontPostscriptName(){ - return $this->getNameTableString(Font_Table_name::NAME_POSTSCRIPT_NAME); + function getFontPostscriptName() { + return $this->getNameTableString(name::NAME_POSTSCRIPT_NAME); } - function reduce(){ + function reduce() { $names_to_keep = array( - Font_Table_name::NAME_COPYRIGHT, - Font_Table_name::NAME_NAME, - Font_Table_name::NAME_SUBFAMILY, - Font_Table_name::NAME_SUBFAMILY_ID, - Font_Table_name::NAME_FULL_NAME, - Font_Table_name::NAME_VERSION, - Font_Table_name::NAME_POSTSCRIPT_NAME, + name::NAME_COPYRIGHT, + name::NAME_NAME, + name::NAME_SUBFAMILY, + name::NAME_SUBFAMILY_ID, + name::NAME_FULL_NAME, + name::NAME_VERSION, + name::NAME_POSTSCRIPT_NAME, ); - foreach($this->data["name"]->data["records"] as $id => $rec) { + foreach ($this->data["name"]->data["records"] as $id => $rec) { if (!in_array($id, $names_to_keep)) { unset($this->data["name"]->data["records"][$id]); } diff --git a/vendor/phenx/php-font-lib/classes/Font_TrueType_Header.php b/vendor/phenx/php-font-lib/src/FontLib/TrueType/Header.php similarity index 77% rename from vendor/phenx/php-font-lib/classes/Font_TrueType_Header.php rename to vendor/phenx/php-font-lib/src/FontLib/TrueType/Header.php index dec2d0f7a..7ff79cce8 100644 --- a/vendor/phenx/php-font-lib/classes/Font_TrueType_Header.php +++ b/vendor/phenx/php-font-lib/src/FontLib/TrueType/Header.php @@ -6,14 +6,14 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_Header.php"; +namespace FontLib\TrueType; /** * TrueType font file header. - * + * * @package php-font-lib */ -class Font_TrueType_Header extends Font_Header { +class Header extends \FontLib\Header { protected $def = array( "format" => self::uint32, "numTables" => self::uint16, @@ -21,11 +21,11 @@ class Font_TrueType_Header extends Font_Header { "entrySelector" => self::uint16, "rangeShift" => self::uint16, ); - - public function parse(){ + + public function parse() { parent::parse(); - - $format = $this->data["format"]; + + $format = $this->data["format"]; $this->data["formatText"] = $this->convertUInt32ToStr($format); } } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/classes/Font_TrueType_Table_Directory_Entry.php b/vendor/phenx/php-font-lib/src/FontLib/TrueType/TableDirectoryEntry.php similarity index 67% rename from vendor/phenx/php-font-lib/classes/Font_TrueType_Table_Directory_Entry.php rename to vendor/phenx/php-font-lib/src/FontLib/TrueType/TableDirectoryEntry.php index 6fa0c31ce..fc4fe5559 100644 --- a/vendor/phenx/php-font-lib/classes/Font_TrueType_Table_Directory_Entry.php +++ b/vendor/phenx/php-font-lib/src/FontLib/TrueType/TableDirectoryEntry.php @@ -6,22 +6,24 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_Table_Directory_Entry.php"; +namespace FontLib\TrueType; + +use FontLib\Table\DirectoryEntry; /** * TrueType table directory entry. - * + * * @package php-font-lib */ -class Font_TrueType_Table_Directory_Entry extends Font_Table_Directory_Entry { - function __construct(Font_TrueType $font) { +class TableDirectoryEntry extends DirectoryEntry { + function __construct(File $font) { parent::__construct($font); } - - function parse(){ + + function parse() { parent::parse(); - - $font = $this->font; + + $font = $this->font; $this->checksum = $font->readUInt32(); $this->offset = $font->readUInt32(); $this->length = $font->readUInt32(); diff --git a/vendor/phenx/php-font-lib/classes/Font_WOFF.php b/vendor/phenx/php-font-lib/src/FontLib/WOFF/File.php similarity index 58% rename from vendor/phenx/php-font-lib/classes/Font_WOFF.php rename to vendor/phenx/php-font-lib/src/FontLib/WOFF/File.php index 93e07b07d..4668c2391 100644 --- a/vendor/phenx/php-font-lib/classes/Font_WOFF.php +++ b/vendor/phenx/php-font-lib/src/FontLib/WOFF/File.php @@ -6,75 +6,75 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_TrueType.php"; -require_once dirname(__FILE__) . "/Font_WOFF_Table_Directory_Entry.php"; -require_once dirname(__FILE__) . "/Font_WOFF_Header.php"; +namespace FontLib\WOFF; + +use FontLib\Table\DirectoryEntry; /** * WOFF font file. - * + * * @package php-font-lib * - * @property Font_WOFF_Table_Directory_Entry[] $directory + * @property TableDirectoryEntry[] $directory */ -class Font_WOFF extends Font_TrueType { - function parseHeader(){ +class File extends \FontLib\TrueType\File { + function parseHeader() { if (!empty($this->header)) { return; } - - $this->header = new Font_WOFF_Header($this); + + $this->header = new Header($this); $this->header->parse(); } - + public function load($file) { parent::load($file); - + $this->parseTableEntries(); $dataOffset = $this->pos() + count($this->directory) * 20; - + $fw = $this->getTempFile(false); $fr = $this->f; - + $this->f = $fw; - $offset = $this->header->encode(); - - foreach($this->directory as $entry) { + $offset = $this->header->encode(); + + foreach ($this->directory as $entry) { // Read ... $this->f = $fr; $this->seek($entry->offset); $data = $this->read($entry->length); if ($entry->length < $entry->origLength) { - $data = gzuncompress($data); + $data = (string) gzuncompress($data); } - + // Prepare data ... - $length = strlen($data); + $length = mb_strlen($data, '8bit'); $entry->length = $entry->origLength = $length; $entry->offset = $dataOffset; // Write ... $this->f = $fw; - - // Woff Entry + + // Woff Entry $this->seek($offset); - $offset += $this->write($entry->tag, 4); // tag + $offset += $this->write($entry->tag, 4); // tag $offset += $this->writeUInt32($dataOffset); // offset - $offset += $this->writeUInt32($length); // length - $offset += $this->writeUInt32($length); // origLength - $offset += $this->writeUInt32(Font_Table_Directory_Entry::computeChecksum($data)); // checksum - + $offset += $this->writeUInt32($length); // length + $offset += $this->writeUInt32($length); // origLength + $offset += $this->writeUInt32(DirectoryEntry::computeChecksum($data)); // checksum + // Data $this->seek($dataOffset); $dataOffset += $this->write($data, $length); } - + $this->f = $fw; $this->seek(0); - + // Need to re-parse this, don't know why - $this->header = null; + $this->header = null; $this->directory = array(); $this->parseTableEntries(); } diff --git a/vendor/phenx/php-font-lib/classes/Font_WOFF_Header.php b/vendor/phenx/php-font-lib/src/FontLib/WOFF/Header.php similarity index 83% rename from vendor/phenx/php-font-lib/classes/Font_WOFF_Header.php rename to vendor/phenx/php-font-lib/src/FontLib/WOFF/Header.php index ea6a9e666..65a6f1477 100644 --- a/vendor/phenx/php-font-lib/classes/Font_WOFF_Header.php +++ b/vendor/phenx/php-font-lib/src/FontLib/WOFF/Header.php @@ -6,20 +6,20 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_TrueType_Header.php"; +namespace FontLib\WOFF; /** * WOFF font file header. - * + * * @package php-font-lib */ -class Font_WOFF_Header extends Font_TrueType_Header { +class Header extends \FontLib\TrueType\Header { protected $def = array( "format" => self::uint32, "flavor" => self::uint32, "length" => self::uint32, "numTables" => self::uint16, - self::uint16, + self::uint16, "totalSfntSize" => self::uint32, "majorVersion" => self::uint16, "minorVersion" => self::uint16, diff --git a/vendor/phenx/php-font-lib/classes/Font_WOFF_Table_Directory_Entry.php b/vendor/phenx/php-font-lib/src/FontLib/WOFF/TableDirectoryEntry.php similarity index 70% rename from vendor/phenx/php-font-lib/classes/Font_WOFF_Table_Directory_Entry.php rename to vendor/phenx/php-font-lib/src/FontLib/WOFF/TableDirectoryEntry.php index 1f9afbcbb..eb67c9c4a 100644 --- a/vendor/phenx/php-font-lib/classes/Font_WOFF_Table_Directory_Entry.php +++ b/vendor/phenx/php-font-lib/src/FontLib/WOFF/TableDirectoryEntry.php @@ -6,24 +6,26 @@ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ -require_once dirname(__FILE__) . "/Font_Table_Directory_Entry.php"; +namespace FontLib\WOFF; + +use FontLib\Table\DirectoryEntry; /** * WOFF font file table directory entry. - * + * * @package php-font-lib */ -class Font_WOFF_Table_Directory_Entry extends Font_Table_Directory_Entry { +class TableDirectoryEntry extends DirectoryEntry { public $origLength; - function __construct(Font_WOFF $font) { + function __construct(File $font) { parent::__construct($font); } - - function parse(){ + + function parse() { parent::parse(); - - $font = $this->font; + + $font = $this->font; $this->offset = $font->readUInt32(); $this->length = $font->readUInt32(); $this->origLength = $font->readUInt32(); diff --git a/vendor/phenx/php-font-lib/www/.htaccess b/vendor/phenx/php-font-lib/www/.htaccess deleted file mode 100644 index 72d0a6ef3..000000000 --- a/vendor/phenx/php-font-lib/www/.htaccess +++ /dev/null @@ -1 +0,0 @@ -allow from all \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png deleted file mode 100644 index 13a229fbd..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_dots-small_65_a6a6a6_2x2.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_dots-small_65_a6a6a6_2x2.png deleted file mode 100644 index b2d1a1ef3..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_dots-small_65_a6a6a6_2x2.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_flat_0_333333_40x100.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_flat_0_333333_40x100.png deleted file mode 100644 index 2f2c7a45b..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_flat_0_333333_40x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_flat_65_ffffff_40x100.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_flat_65_ffffff_40x100.png deleted file mode 100644 index ac8b229af..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_flat_65_ffffff_40x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_flat_75_ffffff_40x100.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_flat_75_ffffff_40x100.png deleted file mode 100644 index ac8b229af..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_flat_75_ffffff_40x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.png deleted file mode 100644 index fb056ebe8..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.png deleted file mode 100644 index 7c77ea7ed..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png deleted file mode 100644 index 2656c0821..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.png deleted file mode 100644 index 834797a8b..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-icons_004276_256x240.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-icons_004276_256x240.png deleted file mode 100644 index 05753819d..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-icons_004276_256x240.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-icons_cc0000_256x240.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-icons_cc0000_256x240.png deleted file mode 100644 index 03a953b0d..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-icons_cc0000_256x240.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-icons_ffffff_256x240.png b/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-icons_ffffff_256x240.png deleted file mode 100644 index 42f8f992c..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/blitzer/images/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/blitzer/jquery-ui-1.8.14.custom.css b/vendor/phenx/php-font-lib/www/css/blitzer/jquery-ui-1.8.14.custom.css deleted file mode 100644 index ee7b4acd3..000000000 --- a/vendor/phenx/php-font-lib/www/css/blitzer/jquery-ui-1.8.14.custom.css +++ /dev/null @@ -1,568 +0,0 @@ -/* - * jQuery UI CSS Framework 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial,sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=cc0000&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=15&borderColorHeader=e3a1a1&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=eeeeee&fcContent=333333&iconColorContent=cc0000&bgColorDefault=eeeeee&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=100&borderColorDefault=d8dcdf&fcDefault=004276&iconColorDefault=cc0000&bgColorHover=f6f6f6&bgTextureHover=04_highlight_hard.png&bgImgOpacityHover=100&borderColorHover=cdd5da&fcHover=111111&iconColorHover=cc0000&bgColorActive=ffffff&bgTextureActive=01_flat.png&bgImgOpacityActive=65&borderColorActive=eeeeee&fcActive=cc0000&iconColorActive=cc0000&bgColorHighlight=fbf8ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcd3a1&fcHighlight=444444&iconColorHighlight=004276&bgColorError=f3d8d8&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=75&borderColorError=cc0000&fcError=2e2e2e&iconColorError=cc0000&bgColorOverlay=a6a6a6&bgTextureOverlay=09_dots_small.png&bgImgOpacityOverlay=65&opacityOverlay=40&bgColorShadow=333333&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=10&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Arial,sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #eeeeee; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #333333; } -.ui-widget-content a { color: #333333; } -.ui-widget-header { border: 1px solid #e3a1a1; background: #cc0000 url(images/ui-bg_highlight-soft_15_cc0000_1x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } -.ui-widget-header a { color: #ffffff; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d8dcdf; background: #eeeeee url(images/ui-bg_highlight-hard_100_eeeeee_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #004276; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #004276; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #cdd5da; background: #f6f6f6 url(images/ui-bg_highlight-hard_100_f6f6f6_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #111111; } -.ui-state-hover a, .ui-state-hover a:hover { color: #111111; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #eeeeee; background: #ffffff url(images/ui-bg_flat_65_ffffff_40x100.png) 50% 50% repeat-x; font-weight: bold; color: #cc0000; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #cc0000; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcd3a1; background: #fbf8ee url(images/ui-bg_glass_55_fbf8ee_1x400.png) 50% 50% repeat-x; color: #444444; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #444444; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cc0000; background: #f3d8d8 url(images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png) 50% 50% repeat; color: #2e2e2e; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #2e2e2e; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #2e2e2e; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_cc0000_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_cc0000_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_cc0000_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_cc0000_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_cc0000_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_004276_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cc0000_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; } -.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } - -/* Overlays */ -.ui-widget-overlay { background: #a6a6a6 url(images/ui-bg_dots-small_65_a6a6a6_2x2.png) 50% 50% repeat; opacity: .40;filter:Alpha(Opacity=40); } -.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #333333 url(images/ui-bg_flat_0_333333_40x100.png) 50% 50% repeat-x; opacity: .10;filter:Alpha(Opacity=10); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* - * jQuery UI Resizable 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Resizable#theming - */ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* - * jQuery UI Selectable 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectable#theming - */ -.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } -/* - * jQuery UI Accordion 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Accordion#theming - */ -/* IE/Win - Fix animation bug - #4615 */ -.ui-accordion { width: 100%; } -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } -.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } -.ui-accordion .ui-accordion-content-active { display: block; } -/* - * jQuery UI Autocomplete 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete#theming - */ -.ui-autocomplete { position: absolute; cursor: default; } - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ - -/* - * jQuery UI Menu 1.8.14 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Menu#theming - */ -.ui-menu { - list-style:none; - padding: 2px; - margin: 0; - display:block; - float: left; -} -.ui-menu .ui-menu { - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin:0; - padding: 0; - zoom: 1; - float: left; - clear: left; - width: 100%; -} -.ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} -/* - * jQuery UI Button 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Button#theming - */ -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3.4em; } -button.ui-button-icons-only { width: 3.7em; } - -/*button text element */ -.ui-button .ui-button-text { display: block; line-height: 1.4; } -.ui-button-text-only .ui-button-text { padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } -.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } -.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { padding: .4em 1em; } - -/*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } -.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } -.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } - -/*button sets*/ -.ui-buttonset { margin-right: 7px; } -.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } - -/* workarounds */ -button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ -/* - * jQuery UI Dialog 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog#theming - */ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } -.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* - * jQuery UI Slider 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Slider#theming - */ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* - * jQuery UI Tabs 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Tabs#theming - */ -.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } -/* - * jQuery UI Datepicker 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Datepicker#theming - */ -.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* - * jQuery UI Progressbar 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar#theming - */ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/www/css/style.css b/vendor/phenx/php-font-lib/www/css/style.css deleted file mode 100644 index ec714d894..000000000 --- a/vendor/phenx/php-font-lib/www/css/style.css +++ /dev/null @@ -1,121 +0,0 @@ -body { - font-size: 12px; - font-family: tahoma, verdana, arial, sans-serif; - margin: 0.5em; -} - -ul { - list-style-position: inside; - padding-left: 0.4em; -} - -pre { - font-size: 11px; -} - -h2 { - border-bottom: 1px solid #ccc; -} - -hr { - clear: both; -} - -.unicode-map { - line-height: 0px; - font-size: 3px; - width: 768px; - border: 1px solid #333; - font-family: unicode-map; -} - -.unicode-map i, .unicode-map b { - display: inline-block; - width: 3px; - height: 3px; - position: relative; -} - -.unicode-map i .info { - font-family: tahoma, verdana, arial, sans-serif; - font-size: 12px; - line-height: 14px; -} - -.unicode-map i s, .unicode-map b s { - text-decoration: none; - font-style: normal; - text-align: center; - display: none; - position: absolute; - border: 1px solid #999; - font-size: 32px; - background: #fff; - padding: 3px; - line-height: 1.2; - z-index: 5000; - bottom: 5px; - left: -12px; -} - -.unicode-map i:hover s, .unicode-map b:hover s { - display: inline-block; -} - -.unicode-map i { - background: #0f0; -} - -.unicode-map b { - background: #999; -} - -.glyph-view { - display: inline-block; - background: #ddd; - padding: 3px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - text-align: center; -} - -.glyph-view.composite { - background: #bbe; -} - -.glyph-view span { - display: inline-block; - padding: 1px; - min-width: 1em; - margin-bottom: 2px; - white-space: pre; -} - -.glyph-view .char { - background: #bbb; - float: left; -} - -.glyph-view .glyph-id { - float: right; -} - -.glyph-view .char:empty { - display: none; -} - -.glyph-view canvas { - background: #fff; -} - -.glyph-view:target { - outline: 2px dotted red; -} -.glyph-view:target canvas { - background: #ddffdd; -} - -.glyph-view a.glyph-component-id { - font-size: 0.8em; -} diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png deleted file mode 100644 index 954e22dbd..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png deleted file mode 100644 index 64ece5707..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png deleted file mode 100644 index abdc01082..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png deleted file mode 100644 index 9b383f4d2..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png deleted file mode 100644 index a23baad25..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100644 index 42ccba269..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png deleted file mode 100644 index 39d5824d6..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png deleted file mode 100644 index f1273672d..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png deleted file mode 100644 index 359397acf..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_222222_256x240.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_222222_256x240.png deleted file mode 100644 index b273ff111..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_222222_256x240.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_228ef1_256x240.png deleted file mode 100644 index a641a371a..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_228ef1_256x240.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_ef8c08_256x240.png deleted file mode 100644 index 85e63e9f6..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_ef8c08_256x240.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_ffd27a_256x240.png deleted file mode 100644 index e117effa3..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_ffd27a_256x240.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_ffffff_256x240.png deleted file mode 100644 index 42f8f992c..000000000 Binary files a/vendor/phenx/php-font-lib/www/css/ui-lightness/images/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/vendor/phenx/php-font-lib/www/css/ui-lightness/jquery-ui-1.8.14.custom.css b/vendor/phenx/php-font-lib/www/css/ui-lightness/jquery-ui-1.8.14.custom.css deleted file mode 100644 index fe3107057..000000000 --- a/vendor/phenx/php-font-lib/www/css/ui-lightness/jquery-ui-1.8.14.custom.css +++ /dev/null @@ -1,568 +0,0 @@ -/* - * jQuery UI CSS Framework 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } -.ui-widget-content a { color: #333333; } -.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } -.ui-widget-header a { color: #ffffff; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } -.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } -.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } -.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } -.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* - * jQuery UI Resizable 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Resizable#theming - */ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* - * jQuery UI Selectable 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectable#theming - */ -.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } -/* - * jQuery UI Accordion 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Accordion#theming - */ -/* IE/Win - Fix animation bug - #4615 */ -.ui-accordion { width: 100%; } -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } -.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } -.ui-accordion .ui-accordion-content-active { display: block; } -/* - * jQuery UI Autocomplete 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete#theming - */ -.ui-autocomplete { position: absolute; cursor: default; } - -/* workarounds */ -* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ - -/* - * jQuery UI Menu 1.8.14 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Menu#theming - */ -.ui-menu { - list-style:none; - padding: 2px; - margin: 0; - display:block; - float: left; -} -.ui-menu .ui-menu { - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin:0; - padding: 0; - zoom: 1; - float: left; - clear: left; - width: 100%; -} -.ui-menu .ui-menu-item a { - text-decoration:none; - display:block; - padding:.2em .4em; - line-height:1.5; - zoom:1; -} -.ui-menu .ui-menu-item a.ui-state-hover, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} -/* - * jQuery UI Button 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Button#theming - */ -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ -.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ -button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3.4em; } -button.ui-button-icons-only { width: 3.7em; } - -/*button text element */ -.ui-button .ui-button-text { display: block; line-height: 1.4; } -.ui-button-text-only .ui-button-text { padding: .4em 1em; } -.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } -.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } -.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } -/* no icon support for input elements, provide padding by default */ -input.ui-button { padding: .4em 1em; } - -/*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } -.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } -.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } -.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } - -/*button sets*/ -.ui-buttonset { margin-right: 7px; } -.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } - -/* workarounds */ -button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ -/* - * jQuery UI Dialog 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog#theming - */ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } -.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* - * jQuery UI Slider 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Slider#theming - */ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* - * jQuery UI Tabs 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Tabs#theming - */ -.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } -/* - * jQuery UI Datepicker 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Datepicker#theming - */ -.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* - * jQuery UI Progressbar 1.8.14 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar#theming - */ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/www/font_explorer.html b/vendor/phenx/php-font-lib/www/font_explorer.html deleted file mode 100644 index 0d12b4a76..000000000 --- a/vendor/phenx/php-font-lib/www/font_explorer.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - PHP font lib - Font explorer - - - \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/www/font_info.php b/vendor/phenx/php-font-lib/www/font_info.php deleted file mode 100644 index abbc4a805..000000000 --- a/vendor/phenx/php-font-lib/www/font_info.php +++ /dev/null @@ -1,157 +0,0 @@ - - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - */ -?> - - - -Font information - - - - - - - - -getFont(0); -} - -if ($unicodemap) { - ?> - -- getData("cmap", "subtables") as $_subtable) { - if ($_subtable["platformID"] == 3 && $_subtable["platformSpecificID"] == 1) { - $subtable = $_subtable; - break; - } - } - - $empty = 0; - $names = $font->getData("post", "names"); - - for($c = 0; $c <= 0xFFFF; $c++) { - if (($c % 256 == 0 || $c == 0xFFFF) && $empty > 0) { - echo ""; - $empty = 0; - } - - if (isset($subtable["glyphIndexArray"][$c])) { - $g = $subtable["glyphIndexArray"][$c]; - - if ($empty > 0) { - echo ""; - $empty = 0; - } - echo "- -parse(); - - //$font->saveAdobeFontMetrics("$fontfile.ufm"); - ?> - - File size: KB — - Memory: KB — - Time: s -$c;"; - } - else { - $empty++; - } - } ?> -$c
".(isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $c))."
- Make a subset of this font - - -getFontFullName(); ?>
-getFontVersion(); ?>
-
- --- - - - \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/www/font_list.php b/vendor/phenx/php-font-lib/www/font_list.php deleted file mode 100644 index beae35152..000000000 --- a/vendor/phenx/php-font-lib/www/font_list.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - */ -?> - - - - - - -"; -foreach($fonts as $font) { - echo "-
- -- Header
- - getTable() as $entry) { - $tag = $entry->tag; - $data = $font->getData($tag); - - ?> -- - style="color: #ccc;" href="#tabs-"> -
- -- Unicode map
-- - getTable() as $table) { - $tag = $table->tag; - $data = $font->getData($tag); - - ?> -header->data, true); ?>"> - getTableObject($tag)->toHTML(); - } - else { - echo "Not yet implemented"; - } - - ?> -- - - -".basename($font)." "; -} -echo ""; - -?> - - \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/www/header.html b/vendor/phenx/php-font-lib/www/header.html deleted file mode 100644 index 6ad09bb6a..000000000 --- a/vendor/phenx/php-font-lib/www/header.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - Project page - - Issues - - \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/www/index.php b/vendor/phenx/php-font-lib/www/index.php deleted file mode 100644 index 212c604cd..000000000 --- a/vendor/phenx/php-font-lib/www/index.php +++ /dev/null @@ -1,9 +0,0 @@ - - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - */ - -header("Location: font_explorer.html"); \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/www/js/glyph.js b/vendor/phenx/php-font-lib/www/js/glyph.js deleted file mode 100644 index 3e7bb03c0..000000000 --- a/vendor/phenx/php-font-lib/www/js/glyph.js +++ /dev/null @@ -1,175 +0,0 @@ -var Glyph = { - glyphs: [], - ratio: null, - head: null, - os2: null, - hmtx: null, - width: null, - height: null, - scale: 1.0, - - splitPath: function(path) { - return path.match(/([a-z])|(-?\d+(?:\.\d+)?)/ig); - }, - - drawPath: function(ctx, path) { - var p = Glyph.splitPath(path); - - if (!p) { - return; - } - - var l = p.length; - var i = 0; - - ctx.beginPath(); - - while(i < l) { - var v = p[i]; - - switch(v) { - case "M": - ctx.moveTo(p[++i], p[++i]); - break; - - case "L": - ctx.lineTo(p[++i], p[++i]); - break; - - case "Q": - ctx.quadraticCurveTo(p[++i], p[++i], p[++i], p[++i]); - break; - - case "z": - i++; - break; - - default: - i++; - } - } - - ctx.fill(); - ctx.closePath(); - }, - - drawSVGContours: function(ctx, contours) { - // Is the path - if (!$.isArray(contours)) { - Glyph.drawPath(ctx, contours); - return; - } - - var contour, path, transform; - - for (var ci = 0, cl = contours.length; ci < cl; ci++) { - contour = contours[ci]; - path = contour.contours; - transform = contour.transform; - - ctx.save(); - ctx.transform(transform[0], transform[1], transform[2], transform[3], transform[4], transform[5]); - Glyph.drawSVGContours(ctx, path); - ctx.restore(); - } - }, - - drawHorizLine: function(ctx, y, color) { - ctx.beginPath(); - ctx.strokeStyle = color; - ctx.moveTo(0, y); - ctx.lineTo(Glyph.width * Glyph.ratio, y); - ctx.closePath(); - ctx.stroke(); - }, - - draw: function (canvas, shape, gid) { - var element = canvas[0]; - var ctx = element.getContext("2d"); - var ratio = Glyph.ratio; - var width = Glyph.width * Glyph.scale; - var height = Glyph.height * Glyph.scale; - ctx.clearRect(0, 0, width, height); - - ctx.lineWidth = ratio / Glyph.scale; - - // Invert axis - ctx.translate(0, height); - ctx.scale(1/ratio, -(1/ratio)); - ctx.scale(Glyph.scale, Glyph.scale); - - ctx.translate(0, -Glyph.head.yMin); - - // baseline - Glyph.drawHorizLine(ctx, 0, "rgba(0,255,0,0.2)"); - - // ascender - Glyph.drawHorizLine(ctx, Glyph.os2.typoAscender, "rgba(255,0,0,0.2)"); - - // descender - Glyph.drawHorizLine(ctx, -Math.abs(Glyph.os2.typoDescender), "rgba(255,0,0,0.2)"); - - ctx.translate(-Glyph.head.xMin, 0); - - ctx.save(); - var s = ratio*3; - - ctx.strokeStyle = "rgba(0,0,0,0.5)"; - ctx.lineWidth = (ratio * 1.5) / Glyph.scale; - - // origin - ctx.beginPath(); - ctx.moveTo(-s, -s); - ctx.lineTo(+s, +s); - ctx.moveTo(+s, -s); - ctx.lineTo(-s, +s); - ctx.closePath(); - ctx.stroke(); - - // horizontal advance - var advance = Glyph.hmtx[gid][0]; - ctx.beginPath(); - ctx.moveTo(-s+advance, -s); - ctx.lineTo(+s+advance, +s); - ctx.moveTo(+s+advance, -s); - ctx.lineTo(-s+advance, +s); - ctx.closePath(); - ctx.stroke(); - ctx.restore(); - - if (!shape) { - return; - } - - // glyph bounding box - ctx.beginPath(); - ctx.strokeStyle = "rgba(0,0,0,0.3)"; - ctx.rect(0, 0, shape.xMin + shape.xMax, shape.yMin + shape.yMax); - ctx.closePath(); - ctx.stroke(); - - ctx.strokeStyle = "black"; - //ctx.globalCompositeOperation = "xor"; - - Glyph.drawSVGContours(ctx, shape.SVGContours); - }, - drawAll: function(){ - $.each(Glyph.glyphs, function(i, g){ - Glyph.draw($('#glyph-canvas-'+g[0]), g[1], g[0]); - }); - }, - resize: function(value){ - Glyph.scale = value / 100; - - $.each(document.getElementsByTagName('canvas'), function(i, canvas){ - canvas.height = Glyph.height * Glyph.scale; - canvas.width = Glyph.width * Glyph.scale; - }); - - Glyph.drawAll(); - } -}; - -$(function(){ - Glyph.drawAll(); -}); \ No newline at end of file diff --git a/vendor/phenx/php-font-lib/www/js/jquery-1.5.1.min.js b/vendor/phenx/php-font-lib/www/js/jquery-1.5.1.min.js deleted file mode 100644 index 6437874c6..000000000 --- a/vendor/phenx/php-font-lib/www/js/jquery-1.5.1.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/*! - * jQuery JavaScript Library v1.5.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Wed Feb 23 13:55:29 2011 -0500 - */ -(function(a,b){function cg(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cd(a){if(!bZ[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bZ[a]=c}return bZ[a]}function cc(a,b){var c={};d.each(cb.concat.apply([],cb.slice(0,b)),function(){c[this]=a});return c}function bY(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bX(){try{return new a.XMLHttpRequest}catch(b){}}function bW(){d(a).unload(function(){for(var a in bU)bU[a](0,1)})}function bQ(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function N(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function F(a,b){return(a&&a!=="*"?a+".":"")+b.replace(r,"`").replace(s,"&")}function E(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,q=[],r=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function C(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function w(){return!0}function v(){return!1}function g(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function f(a,c,f){if(f===b&&a.nodeType===1){f=a.getAttribute("data-"+c);if(typeof f==="string"){try{f=f==="true"?!0:f==="false"?!1:f==="null"?null:d.isNaN(f)?e.test(f)?d.parseJSON(f):f:parseFloat(f)}catch(g){}d.data(a,c,f)}else f=b}return f}var c=a.document,d=function(){function I(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x=!1,y,z="then done fail isResolved isRejected promise".split(" "),A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?D.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j 0)return;y.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=!0;if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",A,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",A),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&I()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g 1){var f=E.call(arguments,0),g=b,h=function(a){return function(b){f[a]=arguments.length>1?E.call(arguments,0):b,--g||c.resolveWith(e,f)}};while(b--)a=f[b],a&&d.isFunction(a.promise)?a.promise().then(h(b),c.reject):--g;g||c.resolveWith(e,f)}else c!==a&&c.resolve(a);return e},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),y=d._Deferred(),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),G&&(d.inArray=function(a,b){return G.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?A=function(){c.removeEventListener("DOMContentLoaded",A,!1),d.ready()}:c.attachEvent&&(A=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",A),d.ready())});return d}();(function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML=" a";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i
t -1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k =0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j =0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l -1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i 0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g 0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g +~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b 0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e ":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e =0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c ",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g 0)for(var g=c;g 0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e -1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e -1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/",""],legend:[1,""],thead:[1," ","
"],tr:[2,"","
"],td:[3,""],col:[2,"
"," "],area:[1,""],_default:[0,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div
"," ",""]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1>$2>");try{for(var c=0,e=this.length;c1&&l 0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1>$2>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===" "&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/