rough-emoji-draw 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +8 -3
- package/README.md +8 -3
- package/dist/constant.d.ts +1 -12
- package/dist/flag-drawers.d.ts +9 -0
- package/dist/index.cjs +306 -364
- package/dist/index.d.ts +0 -1
- package/dist/index.js +303 -359
- package/dist/rough-emoji.js +1 -1
- package/package.json +1 -1
- package/dist/rough-emoji-app.d.ts +0 -12
package/dist/index.cjs
CHANGED
|
@@ -40,21 +40,12 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
40
40
|
// EXPORTS
|
|
41
41
|
__webpack_require__.d(__webpack_exports__, {
|
|
42
42
|
RoughEmoji: () => (/* reexport */ RoughEmoji),
|
|
43
|
-
RoughEmojiApp: () => (/* reexport */ RoughEmojiApp),
|
|
44
43
|
isFlagEmoji: () => (/* reexport */ isFlagEmoji),
|
|
45
44
|
resolveFlag: () => (/* reexport */ resolveFlag)
|
|
46
45
|
});
|
|
47
46
|
|
|
48
47
|
;// CONCATENATED MODULE: ./src/constant.ts
|
|
49
|
-
/**
|
|
50
|
-
canvas: "#rough-canvas",
|
|
51
|
-
form: "#emoji-form",
|
|
52
|
-
input: "#emoji-input",
|
|
53
|
-
downloadButton: "#download-button"
|
|
54
|
-
};
|
|
55
|
-
/** 默认绘制国旗,供首次打开页面、prompt 默认值和非法输入回退共用。 */ const DEFAULT_FLAG = "🇨🇳";
|
|
56
|
-
/** 下载文件名前缀,最终文件名会追加当前绘制的国旗 emoji。 */ const DOWNLOAD_FILE_PREFIX = "rough-flag";
|
|
57
|
-
/** 首次进入单页演示时提示用户输入国旗的文案。 */ const FLAG_PROMPT_MESSAGE = "请输入要绘制的国旗";
|
|
48
|
+
/** 默认绘制国旗,供非法输入回退共用。 */ const DEFAULT_FLAG = "🇨🇳";
|
|
58
49
|
/** 已有专门手写模板的国旗 emoji,避免绘制分支散落字面量。 */ const TEMPLATE_FLAGS = {
|
|
59
50
|
ad: "🇦🇩",
|
|
60
51
|
ae: "🇦🇪",
|
|
@@ -317,19 +308,6 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
317
308
|
shadow: "rgba(36, 49, 44, 0.08)"
|
|
318
309
|
};
|
|
319
310
|
|
|
320
|
-
;// CONCATENATED MODULE: ./src/flag-utils.ts
|
|
321
|
-
|
|
322
|
-
/** 把任意输入规范化为可绘制的国旗 emoji;非法输入回退到中国国旗。 */ function resolveFlag(value) {
|
|
323
|
-
const input = String(value || "").trim();
|
|
324
|
-
return isFlagEmoji(input) ? input : DEFAULT_FLAG;
|
|
325
|
-
}
|
|
326
|
-
/** 判断字符串是否由两个区域指示符组成,这是 Unicode 国旗 emoji 的编码形式。 */ function isFlagEmoji(value) {
|
|
327
|
-
const codePoints = [
|
|
328
|
-
...value
|
|
329
|
-
].map((char)=>char.codePointAt(0));
|
|
330
|
-
return codePoints.length === 2 && codePoints.every((codePoint)=>codePoint !== undefined && codePoint >= (/* inlined export .REGION_INDICATOR_MIN_CODE_POINT */127462) && codePoint <= (/* inlined export .REGION_INDICATOR_MAX_CODE_POINT */127487));
|
|
331
|
-
}
|
|
332
|
-
|
|
333
311
|
;// CONCATENATED MODULE: ./node_modules/.pnpm/roughjs@4.6.6/node_modules/roughjs/bundled/rough.esm.js
|
|
334
312
|
function rough_esm_t(t,e,s){if(t&&t.length){const[n,o]=e,a=Math.PI/180*s,h=Math.cos(a),r=Math.sin(a);for(const e of t){const[t,s]=e;e[0]=(t-n)*h-(s-o)*r+n,e[1]=(t-n)*r+(s-o)*h+o}}}function rough_esm_e(t,e){return t[0]===e[0]&&t[1]===e[1]}function rough_esm_s(s,n,o,a=1){const h=o,r=Math.max(n,.1),i=s[0]&&s[0][0]&&"number"==typeof s[0][0]?[s]:s,c=[0,0];if(h)for(const e of i)rough_esm_t(e,c,h);const l=function(t,s,n){const o=[];for(const s of t){const t=[...s];rough_esm_e(t[0],t[t.length-1])||t.push([t[0][0],t[0][1]]),t.length>2&&o.push(t)}const a=[];s=Math.max(s,.1);const h=[];for(const t of o)for(let e=0;e<t.length-1;e++){const s=t[e],n=t[e+1];if(s[1]!==n[1]){const t=Math.min(s[1],n[1]);h.push({ymin:t,ymax:Math.max(s[1],n[1]),x:t===s[1]?s[0]:n[0],islope:(n[0]-s[0])/(n[1]-s[1])})}}if(h.sort(((t,e)=>t.ymin<e.ymin?-1:t.ymin>e.ymin?1:t.x<e.x?-1:t.x>e.x?1:t.ymax===e.ymax?0:(t.ymax-e.ymax)/Math.abs(t.ymax-e.ymax))),!h.length)return a;let r=[],i=h[0].ymin,c=0;for(;r.length||h.length;){if(h.length){let t=-1;for(let e=0;e<h.length&&!(h[e].ymin>i);e++)t=e;h.splice(0,t+1).forEach((t=>{r.push({s:i,edge:t})}))}if(r=r.filter((t=>!(t.edge.ymax<=i))),r.sort(((t,e)=>t.edge.x===e.edge.x?0:(t.edge.x-e.edge.x)/Math.abs(t.edge.x-e.edge.x))),(1!==n||c%s==0)&&r.length>1)for(let t=0;t<r.length;t+=2){const e=t+1;if(e>=r.length)break;const s=r[t].edge,n=r[e].edge;a.push([[Math.round(s.x),i],[Math.round(n.x),i]])}i+=n,r.forEach((t=>{t.edge.x=t.edge.x+n*t.edge.islope})),c++}return a}(i,r,a);if(h){for(const e of i)rough_esm_t(e,c,-h);!function(e,s,n){const o=[];e.forEach((t=>o.push(...t))),rough_esm_t(o,s,n)}(l,c,-h)}return l}function rough_esm_n(t,e){var n;const o=e.hachureAngle+90;let a=e.hachureGap;a<0&&(a=4*e.strokeWidth),a=Math.round(Math.max(a,.1));let h=1;return e.roughness>=1&&((null===(n=e.randomizer)||void 0===n?void 0:n.next())||Math.random())>.7&&(h=a),rough_esm_s(t,a,o,h||1)}class rough_esm_o{constructor(t){this.helper=t}fillPolygons(t,e){return this._fillPolygons(t,e)}_fillPolygons(t,e){const s=rough_esm_n(t,e);return{type:"fillSketch",ops:this.renderLines(s,e)}}renderLines(t,e){const s=[];for(const n of t)s.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],e));return s}}function rough_esm_a(t){const e=t[0],s=t[1];return Math.sqrt(Math.pow(e[0]-s[0],2)+Math.pow(e[1]-s[1],2))}class rough_esm_h extends rough_esm_o{fillPolygons(t,e){let s=e.hachureGap;s<0&&(s=4*e.strokeWidth),s=Math.max(s,.1);const o=rough_esm_n(t,Object.assign({},e,{hachureGap:s})),h=Math.PI/180*e.hachureAngle,r=[],i=.5*s*Math.cos(h),c=.5*s*Math.sin(h);for(const[t,e]of o)rough_esm_a([t,e])&&r.push([[t[0]-i,t[1]+c],[...e]],[[t[0]+i,t[1]-c],[...e]]);return{type:"fillSketch",ops:this.renderLines(r,e)}}}class rough_esm_r extends rough_esm_o{fillPolygons(t,e){const s=this._fillPolygons(t,e),n=Object.assign({},e,{hachureAngle:e.hachureAngle+90}),o=this._fillPolygons(t,n);return s.ops=s.ops.concat(o.ops),s}}class rough_esm_i{constructor(t){this.helper=t}fillPolygons(t,e){const s=rough_esm_n(t,e=Object.assign({},e,{hachureAngle:0}));return this.dotsOnLines(s,e)}dotsOnLines(t,e){const s=[];let n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.max(n,.1);let o=e.fillWeight;o<0&&(o=e.strokeWidth/2);const h=n/4;for(const r of t){const t=rough_esm_a(r),i=t/n,c=Math.ceil(i)-1,l=t-c*n,u=(r[0][0]+r[1][0])/2-n/4,p=Math.min(r[0][1],r[1][1]);for(let t=0;t<c;t++){const a=p+l+t*n,r=u-h+2*Math.random()*h,i=a-h+2*Math.random()*h,c=this.helper.ellipse(r,i,o,o,e);s.push(...c.ops)}}return{type:"fillSketch",ops:s}}}class rough_esm_c{constructor(t){this.helper=t}fillPolygons(t,e){const s=rough_esm_n(t,e);return{type:"fillSketch",ops:this.dashedLine(s,e)}}dashedLine(t,e){const s=e.dashOffset<0?e.hachureGap<0?4*e.strokeWidth:e.hachureGap:e.dashOffset,n=e.dashGap<0?e.hachureGap<0?4*e.strokeWidth:e.hachureGap:e.dashGap,o=[];return t.forEach((t=>{const h=rough_esm_a(t),r=Math.floor(h/(s+n)),i=(h+n-r*(s+n))/2;let c=t[0],l=t[1];c[0]>l[0]&&(c=t[1],l=t[0]);const u=Math.atan((l[1]-c[1])/(l[0]-c[0]));for(let t=0;t<r;t++){const a=t*(s+n),h=a+s,r=[c[0]+a*Math.cos(u)+i*Math.cos(u),c[1]+a*Math.sin(u)+i*Math.sin(u)],l=[c[0]+h*Math.cos(u)+i*Math.cos(u),c[1]+h*Math.sin(u)+i*Math.sin(u)];o.push(...this.helper.doubleLineOps(r[0],r[1],l[0],l[1],e))}})),o}}class rough_esm_l{constructor(t){this.helper=t}fillPolygons(t,e){const s=e.hachureGap<0?4*e.strokeWidth:e.hachureGap,o=e.zigzagOffset<0?s:e.zigzagOffset,a=rough_esm_n(t,e=Object.assign({},e,{hachureGap:s+o}));return{type:"fillSketch",ops:this.zigzagLines(a,o,e)}}zigzagLines(t,e,s){const n=[];return t.forEach((t=>{const o=rough_esm_a(t),h=Math.round(o/(2*e));let r=t[0],i=t[1];r[0]>i[0]&&(r=t[1],i=t[0]);const c=Math.atan((i[1]-r[1])/(i[0]-r[0]));for(let t=0;t<h;t++){const o=2*t*e,a=2*(t+1)*e,h=Math.sqrt(2*Math.pow(e,2)),i=[r[0]+o*Math.cos(c),r[1]+o*Math.sin(c)],l=[r[0]+a*Math.cos(c),r[1]+a*Math.sin(c)],u=[i[0]+h*Math.cos(c+Math.PI/4),i[1]+h*Math.sin(c+Math.PI/4)];n.push(...this.helper.doubleLineOps(i[0],i[1],u[0],u[1],s),...this.helper.doubleLineOps(u[0],u[1],l[0],l[1],s))}})),n}}const rough_esm_u={};class rough_esm_p{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}}const rough_esm_f=0,rough_esm_d=1,rough_esm_g=2,rough_esm_M={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};function rough_esm_k(t,e){return t.type===e}function rough_esm_b(t){const e=[],s=function(t){const e=new Array;for(;""!==t;)if(t.match(/^([ \t\r\n,]+)/))t=t.substr(RegExp.$1.length);else if(t.match(/^([aAcChHlLmMqQsStTvVzZ])/))e[e.length]={type:rough_esm_f,text:RegExp.$1},t=t.substr(RegExp.$1.length);else{if(!t.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];e[e.length]={type:rough_esm_d,text:`${parseFloat(RegExp.$1)}`},t=t.substr(RegExp.$1.length)}return e[e.length]={type:rough_esm_g,text:""},e}(t);let n="BOD",o=0,a=s[o];for(;!rough_esm_k(a,rough_esm_g);){let h=0;const r=[];if("BOD"===n){if("M"!==a.text&&"m"!==a.text)return rough_esm_b("M0,0"+t);o++,h=rough_esm_M[a.text],n=a.text}else rough_esm_k(a,rough_esm_d)?h=rough_esm_M[n]:(o++,h=rough_esm_M[a.text],n=a.text);if(!(o+h<s.length))throw new Error("Path data ended short");for(let t=o;t<o+h;t++){const e=s[t];if(!rough_esm_k(e,rough_esm_d))throw new Error("Param not a number: "+n+","+e.text);r[r.length]=+e.text}if("number"!=typeof rough_esm_M[n])throw new Error("Bad segment: "+n);{const t={key:n,data:r};e.push(t),o+=h,a=s[o],"M"===n&&(n="L"),"m"===n&&(n="l")}}return e}function rough_esm_y(t){let e=0,s=0,n=0,o=0;const a=[];for(const{key:h,data:r}of t)switch(h){case"M":a.push({key:"M",data:[...r]}),[e,s]=r,[n,o]=r;break;case"m":e+=r[0],s+=r[1],a.push({key:"M",data:[e,s]}),n=e,o=s;break;case"L":a.push({key:"L",data:[...r]}),[e,s]=r;break;case"l":e+=r[0],s+=r[1],a.push({key:"L",data:[e,s]});break;case"C":a.push({key:"C",data:[...r]}),e=r[4],s=r[5];break;case"c":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:"C",data:t}),e=t[4],s=t[5];break}case"Q":a.push({key:"Q",data:[...r]}),e=r[2],s=r[3];break;case"q":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:"Q",data:t}),e=t[2],s=t[3];break}case"A":a.push({key:"A",data:[...r]}),e=r[5],s=r[6];break;case"a":e+=r[5],s+=r[6],a.push({key:"A",data:[r[0],r[1],r[2],r[3],r[4],e,s]});break;case"H":a.push({key:"H",data:[...r]}),e=r[0];break;case"h":e+=r[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...r]}),s=r[0];break;case"v":s+=r[0],a.push({key:"V",data:[s]});break;case"S":a.push({key:"S",data:[...r]}),e=r[2],s=r[3];break;case"s":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:"S",data:t}),e=t[2],s=t[3];break}case"T":a.push({key:"T",data:[...r]}),e=r[0],s=r[1];break;case"t":e+=r[0],s+=r[1],a.push({key:"T",data:[e,s]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,s=o}return a}function rough_esm_m(t){const e=[];let s="",n=0,o=0,a=0,h=0,r=0,i=0;for(const{key:c,data:l}of t){switch(c){case"M":e.push({key:"M",data:[...l]}),[n,o]=l,[a,h]=l;break;case"C":e.push({key:"C",data:[...l]}),n=l[4],o=l[5],r=l[2],i=l[3];break;case"L":e.push({key:"L",data:[...l]}),[n,o]=l;break;case"H":n=l[0],e.push({key:"L",data:[n,o]});break;case"V":o=l[0],e.push({key:"L",data:[n,o]});break;case"S":{let t=0,a=0;"C"===s||"S"===s?(t=n+(n-r),a=o+(o-i)):(t=n,a=o),e.push({key:"C",data:[t,a,...l]}),r=l[0],i=l[1],n=l[2],o=l[3];break}case"T":{const[t,a]=l;let h=0,c=0;"Q"===s||"T"===s?(h=n+(n-r),c=o+(o-i)):(h=n,c=o);const u=n+2*(h-n)/3,p=o+2*(c-o)/3,f=t+2*(h-t)/3,d=a+2*(c-a)/3;e.push({key:"C",data:[u,p,f,d,t,a]}),r=h,i=c,n=t,o=a;break}case"Q":{const[t,s,a,h]=l,c=n+2*(t-n)/3,u=o+2*(s-o)/3,p=a+2*(t-a)/3,f=h+2*(s-h)/3;e.push({key:"C",data:[c,u,p,f,a,h]}),r=t,i=s,n=a,o=h;break}case"A":{const t=Math.abs(l[0]),s=Math.abs(l[1]),a=l[2],h=l[3],r=l[4],i=l[5],c=l[6];if(0===t||0===s)e.push({key:"C",data:[n,o,i,c,i,c]}),n=i,o=c;else if(n!==i||o!==c){rough_esm_x(n,o,i,c,t,s,a,h,r).forEach((function(t){e.push({key:"C",data:t})})),n=i,o=c}break}case"Z":e.push({key:"Z",data:[]}),n=a,o=h}s=c}return e}function w(t,e,s){return[t*Math.cos(s)-e*Math.sin(s),t*Math.sin(s)+e*Math.cos(s)]}function rough_esm_x(t,e,s,n,o,a,h,r,i,c){const l=(u=h,Math.PI*u/180);var u;let p=[],f=0,d=0,g=0,M=0;if(c)[f,d,g,M]=c;else{[t,e]=w(t,e,-l),[s,n]=w(s,n,-l);const h=(t-s)/2,c=(e-n)/2;let u=h*h/(o*o)+c*c/(a*a);u>1&&(u=Math.sqrt(u),o*=u,a*=u);const p=o*o,k=a*a,b=p*k-p*c*c-k*h*h,y=p*c*c+k*h*h,m=(r===i?-1:1)*Math.sqrt(Math.abs(b/y));g=m*o*c/a+(t+s)/2,M=m*-a*h/o+(e+n)/2,f=Math.asin(parseFloat(((e-M)/a).toFixed(9))),d=Math.asin(parseFloat(((n-M)/a).toFixed(9))),t<g&&(f=Math.PI-f),s<g&&(d=Math.PI-d),f<0&&(f=2*Math.PI+f),d<0&&(d=2*Math.PI+d),i&&f>d&&(f-=2*Math.PI),!i&&d>f&&(d-=2*Math.PI)}let k=d-f;if(Math.abs(k)>120*Math.PI/180){const t=d,e=s,r=n;d=i&&d>f?f+120*Math.PI/180*1:f+120*Math.PI/180*-1,p=rough_esm_x(s=g+o*Math.cos(d),n=M+a*Math.sin(d),e,r,o,a,h,0,i,[d,t,g,M])}k=d-f;const b=Math.cos(f),y=Math.sin(f),m=Math.cos(d),P=Math.sin(d),v=Math.tan(k/4),S=4/3*o*v,O=4/3*a*v,L=[t,e],T=[t+S*y,e-O*b],D=[s+S*P,n-O*m],A=[s,n];if(T[0]=2*L[0]-T[0],T[1]=2*L[1]-T[1],c)return[T,D,A].concat(p);{p=[T,D,A].concat(p);const t=[];for(let e=0;e<p.length;e+=3){const s=w(p[e][0],p[e][1],l),n=w(p[e+1][0],p[e+1][1],l),o=w(p[e+2][0],p[e+2][1],l);t.push([s[0],s[1],n[0],n[1],o[0],o[1]])}return t}}const rough_esm_P={randOffset:function(t,e){return G(t,e)},randOffsetWithRange:function(t,e,s){return E(t,e,s)},ellipse:function(t,e,s,n,o){const a=rough_esm_T(s,n,o);return rough_esm_D(t,e,o,a).opset},doubleLineOps:function(t,e,s,n,o){return $(t,e,s,n,o,!0)}};function rough_esm_v(t,e,s,n,o){return{type:"path",ops:$(t,e,s,n,o)}}function rough_esm_S(t,e,s){const n=(t||[]).length;if(n>2){const o=[];for(let e=0;e<n-1;e++)o.push(...$(t[e][0],t[e][1],t[e+1][0],t[e+1][1],s));return e&&o.push(...$(t[n-1][0],t[n-1][1],t[0][0],t[0][1],s)),{type:"path",ops:o}}return 2===n?rough_esm_v(t[0][0],t[0][1],t[1][0],t[1][1],s):{type:"path",ops:[]}}function rough_esm_O(t,e,s,n,o){return function(t,e){return rough_esm_S(t,!0,e)}([[t,e],[t+s,e],[t+s,e+n],[t,e+n]],o)}function rough_esm_L(t,e){if(t.length){const s="number"==typeof t[0][0]?[t]:t,n=j(s[0],1*(1+.2*e.roughness),e),o=e.disableMultiStroke?[]:j(s[0],1.5*(1+.22*e.roughness),z(e));for(let t=1;t<s.length;t++){const a=s[t];if(a.length){const t=j(a,1*(1+.2*e.roughness),e),s=e.disableMultiStroke?[]:j(a,1.5*(1+.22*e.roughness),z(e));for(const e of t)"move"!==e.op&&n.push(e);for(const t of s)"move"!==t.op&&o.push(t)}}return{type:"path",ops:n.concat(o)}}return{type:"path",ops:[]}}function rough_esm_T(t,e,s){const n=Math.sqrt(2*Math.PI*Math.sqrt((Math.pow(t/2,2)+Math.pow(e/2,2))/2)),o=Math.ceil(Math.max(s.curveStepCount,s.curveStepCount/Math.sqrt(200)*n)),a=2*Math.PI/o;let h=Math.abs(t/2),r=Math.abs(e/2);const i=1-s.curveFitting;return h+=G(h*i,s),r+=G(r*i,s),{increment:a,rx:h,ry:r}}function rough_esm_D(t,e,s,n){const[o,a]=F(n.increment,t,e,n.rx,n.ry,1,n.increment*E(.1,E(.4,1,s),s),s);let h=q(o,null,s);if(!s.disableMultiStroke&&0!==s.roughness){const[o]=F(n.increment,t,e,n.rx,n.ry,1.5,0,s),a=q(o,null,s);h=h.concat(a)}return{estimatedPoints:a,opset:{type:"path",ops:h}}}function rough_esm_A(t,e,s,n,o,a,h,r,i){const c=t,l=e;let u=Math.abs(s/2),p=Math.abs(n/2);u+=G(.01*u,i),p+=G(.01*p,i);let f=o,d=a;for(;f<0;)f+=2*Math.PI,d+=2*Math.PI;d-f>2*Math.PI&&(f=0,d=2*Math.PI);const g=2*Math.PI/i.curveStepCount,M=Math.min(g/2,(d-f)/2),k=V(M,c,l,u,p,f,d,1,i);if(!i.disableMultiStroke){const t=V(M,c,l,u,p,f,d,1.5,i);k.push(...t)}return h&&(r?k.push(...$(c,l,c+u*Math.cos(f),l+p*Math.sin(f),i),...$(c,l,c+u*Math.cos(d),l+p*Math.sin(d),i)):k.push({op:"lineTo",data:[c,l]},{op:"lineTo",data:[c+u*Math.cos(f),l+p*Math.sin(f)]})),{type:"path",ops:k}}function _(t,e){const s=rough_esm_m(rough_esm_y(rough_esm_b(t))),n=[];let o=[0,0],a=[0,0];for(const{key:t,data:h}of s)switch(t){case"M":a=[h[0],h[1]],o=[h[0],h[1]];break;case"L":n.push(...$(a[0],a[1],h[0],h[1],e)),a=[h[0],h[1]];break;case"C":{const[t,s,o,r,i,c]=h;n.push(...Z(t,s,o,r,i,c,a,e)),a=[i,c];break}case"Z":n.push(...$(a[0],a[1],o[0],o[1],e)),a=[o[0],o[1]]}return{type:"path",ops:n}}function I(t,e){const s=[];for(const n of t)if(n.length){const t=e.maxRandomnessOffset||0,o=n.length;if(o>2){s.push({op:"move",data:[n[0][0]+G(t,e),n[0][1]+G(t,e)]});for(let a=1;a<o;a++)s.push({op:"lineTo",data:[n[a][0]+G(t,e),n[a][1]+G(t,e)]})}}return{type:"fillPath",ops:s}}function C(t,e){return function(t,e){let s=t.fillStyle||"hachure";if(!rough_esm_u[s])switch(s){case"zigzag":rough_esm_u[s]||(rough_esm_u[s]=new rough_esm_h(e));break;case"cross-hatch":rough_esm_u[s]||(rough_esm_u[s]=new rough_esm_r(e));break;case"dots":rough_esm_u[s]||(rough_esm_u[s]=new rough_esm_i(e));break;case"dashed":rough_esm_u[s]||(rough_esm_u[s]=new rough_esm_c(e));break;case"zigzag-line":rough_esm_u[s]||(rough_esm_u[s]=new rough_esm_l(e));break;default:s="hachure",rough_esm_u[s]||(rough_esm_u[s]=new rough_esm_o(e))}return rough_esm_u[s]}(e,rough_esm_P).fillPolygons(t,e)}function z(t){const e=Object.assign({},t);return e.randomizer=void 0,t.seed&&(e.seed=t.seed+1),e}function W(t){return t.randomizer||(t.randomizer=new rough_esm_p(t.seed||0)),t.randomizer.next()}function E(t,e,s,n=1){return s.roughness*n*(W(s)*(e-t)+t)}function G(t,e,s=1){return E(-t,t,e,s)}function $(t,e,s,n,o,a=!1){const h=a?o.disableMultiStrokeFill:o.disableMultiStroke,r=R(t,e,s,n,o,!0,!1);if(h)return r;const i=R(t,e,s,n,o,!0,!0);return r.concat(i)}function R(t,e,s,n,o,a,h){const r=Math.pow(t-s,2)+Math.pow(e-n,2),i=Math.sqrt(r);let c=1;c=i<200?1:i>500?.4:-.0016668*i+1.233334;let l=o.maxRandomnessOffset||0;l*l*100>r&&(l=i/10);const u=l/2,p=.2+.2*W(o);let f=o.bowing*o.maxRandomnessOffset*(n-e)/200,d=o.bowing*o.maxRandomnessOffset*(t-s)/200;f=G(f,o,c),d=G(d,o,c);const g=[],M=()=>G(u,o,c),k=()=>G(l,o,c),b=o.preserveVertices;return a&&(h?g.push({op:"move",data:[t+(b?0:M()),e+(b?0:M())]}):g.push({op:"move",data:[t+(b?0:G(l,o,c)),e+(b?0:G(l,o,c))]})),h?g.push({op:"bcurveTo",data:[f+t+(s-t)*p+M(),d+e+(n-e)*p+M(),f+t+2*(s-t)*p+M(),d+e+2*(n-e)*p+M(),s+(b?0:M()),n+(b?0:M())]}):g.push({op:"bcurveTo",data:[f+t+(s-t)*p+k(),d+e+(n-e)*p+k(),f+t+2*(s-t)*p+k(),d+e+2*(n-e)*p+k(),s+(b?0:k()),n+(b?0:k())]}),g}function j(t,e,s){if(!t.length)return[];const n=[];n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]),n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]);for(let o=1;o<t.length;o++)n.push([t[o][0]+G(e,s),t[o][1]+G(e,s)]),o===t.length-1&&n.push([t[o][0]+G(e,s),t[o][1]+G(e,s)]);return q(n,null,s)}function q(t,e,s){const n=t.length,o=[];if(n>3){const a=[],h=1-s.curveTightness;o.push({op:"move",data:[t[1][0],t[1][1]]});for(let e=1;e+2<n;e++){const s=t[e];a[0]=[s[0],s[1]],a[1]=[s[0]+(h*t[e+1][0]-h*t[e-1][0])/6,s[1]+(h*t[e+1][1]-h*t[e-1][1])/6],a[2]=[t[e+1][0]+(h*t[e][0]-h*t[e+2][0])/6,t[e+1][1]+(h*t[e][1]-h*t[e+2][1])/6],a[3]=[t[e+1][0],t[e+1][1]],o.push({op:"bcurveTo",data:[a[1][0],a[1][1],a[2][0],a[2][1],a[3][0],a[3][1]]})}if(e&&2===e.length){const t=s.maxRandomnessOffset;o.push({op:"lineTo",data:[e[0]+G(t,s),e[1]+G(t,s)]})}}else 3===n?(o.push({op:"move",data:[t[1][0],t[1][1]]}),o.push({op:"bcurveTo",data:[t[1][0],t[1][1],t[2][0],t[2][1],t[2][0],t[2][1]]})):2===n&&o.push(...R(t[0][0],t[0][1],t[1][0],t[1][1],s,!0,!0));return o}function F(t,e,s,n,o,a,h,r){const i=[],c=[];if(0===r.roughness){t/=4,c.push([e+n*Math.cos(-t),s+o*Math.sin(-t)]);for(let a=0;a<=2*Math.PI;a+=t){const t=[e+n*Math.cos(a),s+o*Math.sin(a)];i.push(t),c.push(t)}c.push([e+n*Math.cos(0),s+o*Math.sin(0)]),c.push([e+n*Math.cos(t),s+o*Math.sin(t)])}else{const l=G(.5,r)-Math.PI/2;c.push([G(a,r)+e+.9*n*Math.cos(l-t),G(a,r)+s+.9*o*Math.sin(l-t)]);const u=2*Math.PI+l-.01;for(let h=l;h<u;h+=t){const t=[G(a,r)+e+n*Math.cos(h),G(a,r)+s+o*Math.sin(h)];i.push(t),c.push(t)}c.push([G(a,r)+e+n*Math.cos(l+2*Math.PI+.5*h),G(a,r)+s+o*Math.sin(l+2*Math.PI+.5*h)]),c.push([G(a,r)+e+.98*n*Math.cos(l+h),G(a,r)+s+.98*o*Math.sin(l+h)]),c.push([G(a,r)+e+.9*n*Math.cos(l+.5*h),G(a,r)+s+.9*o*Math.sin(l+.5*h)])}return[c,i]}function V(t,e,s,n,o,a,h,r,i){const c=a+G(.1,i),l=[];l.push([G(r,i)+e+.9*n*Math.cos(c-t),G(r,i)+s+.9*o*Math.sin(c-t)]);for(let a=c;a<=h;a+=t)l.push([G(r,i)+e+n*Math.cos(a),G(r,i)+s+o*Math.sin(a)]);return l.push([e+n*Math.cos(h),s+o*Math.sin(h)]),l.push([e+n*Math.cos(h),s+o*Math.sin(h)]),q(l,null,i)}function Z(t,e,s,n,o,a,h,r){const i=[],c=[r.maxRandomnessOffset||1,(r.maxRandomnessOffset||1)+.3];let l=[0,0];const u=r.disableMultiStroke?1:2,p=r.preserveVertices;for(let f=0;f<u;f++)0===f?i.push({op:"move",data:[h[0],h[1]]}):i.push({op:"move",data:[h[0]+(p?0:G(c[0],r)),h[1]+(p?0:G(c[0],r))]}),l=p?[o,a]:[o+G(c[f],r),a+G(c[f],r)],i.push({op:"bcurveTo",data:[t+G(c[f],r),e+G(c[f],r),s+G(c[f],r),n+G(c[f],r),l[0],l[1]]});return i}function Q(t){return[...t]}function H(t,e=0){const s=t.length;if(s<3)throw new Error("A curve must have at least three points.");const n=[];if(3===s)n.push(Q(t[0]),Q(t[1]),Q(t[2]),Q(t[2]));else{const s=[];s.push(t[0],t[0]);for(let e=1;e<t.length;e++)s.push(t[e]),e===t.length-1&&s.push(t[e]);const o=[],a=1-e;n.push(Q(s[0]));for(let t=1;t+2<s.length;t++){const e=s[t];o[0]=[e[0],e[1]],o[1]=[e[0]+(a*s[t+1][0]-a*s[t-1][0])/6,e[1]+(a*s[t+1][1]-a*s[t-1][1])/6],o[2]=[s[t+1][0]+(a*s[t][0]-a*s[t+2][0])/6,s[t+1][1]+(a*s[t][1]-a*s[t+2][1])/6],o[3]=[s[t+1][0],s[t+1][1]],n.push(o[1],o[2],o[3])}}return n}function N(t,e){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function B(t,e,s){const n=N(e,s);if(0===n)return N(t,e);let o=((t[0]-e[0])*(s[0]-e[0])+(t[1]-e[1])*(s[1]-e[1]))/n;return o=Math.max(0,Math.min(1,o)),N(t,J(e,s,o))}function J(t,e,s){return[t[0]+(e[0]-t[0])*s,t[1]+(e[1]-t[1])*s]}function K(t,e,s,n){const o=n||[];if(function(t,e){const s=t[e+0],n=t[e+1],o=t[e+2],a=t[e+3];let h=3*n[0]-2*s[0]-a[0];h*=h;let r=3*n[1]-2*s[1]-a[1];r*=r;let i=3*o[0]-2*a[0]-s[0];i*=i;let c=3*o[1]-2*a[1]-s[1];return c*=c,h<i&&(h=i),r<c&&(r=c),h+r}(t,e)<s){const s=t[e+0];if(o.length){(a=o[o.length-1],h=s,Math.sqrt(N(a,h)))>1&&o.push(s)}else o.push(s);o.push(t[e+3])}else{const n=.5,a=t[e+0],h=t[e+1],r=t[e+2],i=t[e+3],c=J(a,h,n),l=J(h,r,n),u=J(r,i,n),p=J(c,l,n),f=J(l,u,n),d=J(p,f,n);K([a,c,p,d],0,s,o),K([d,f,u,i],0,s,o)}var a,h;return o}function U(t,e){return X(t,0,t.length,e)}function X(t,e,s,n,o){const a=o||[],h=t[e],r=t[s-1];let i=0,c=1;for(let n=e+1;n<s-1;++n){const e=B(t[n],h,r);e>i&&(i=e,c=n)}return Math.sqrt(i)>n?(X(t,e,c+1,n,a),X(t,c,s,n,a)):(a.length||a.push(h),a.push(r)),a}function Y(t,e=.15,s){const n=[],o=(t.length-1)/3;for(let s=0;s<o;s++){K(t,3*s,e,n)}return s&&s>0?X(n,0,n.length,s):n}const tt="none";class et{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,e,s){return{shape:t,sets:e||[],options:s||this.defaultOptions}}line(t,e,s,n,o){const a=this._o(o);return this._d("line",[rough_esm_v(t,e,s,n,a)],a)}rectangle(t,e,s,n,o){const a=this._o(o),h=[],r=rough_esm_O(t,e,s,n,a);if(a.fill){const o=[[t,e],[t+s,e],[t+s,e+n],[t,e+n]];"solid"===a.fillStyle?h.push(I([o],a)):h.push(C([o],a))}return a.stroke!==tt&&h.push(r),this._d("rectangle",h,a)}ellipse(t,e,s,n,o){const a=this._o(o),h=[],r=rough_esm_T(s,n,a),i=rough_esm_D(t,e,a,r);if(a.fill)if("solid"===a.fillStyle){const s=rough_esm_D(t,e,a,r).opset;s.type="fillPath",h.push(s)}else h.push(C([i.estimatedPoints],a));return a.stroke!==tt&&h.push(i.opset),this._d("ellipse",h,a)}circle(t,e,s,n){const o=this.ellipse(t,e,s,s,n);return o.shape="circle",o}linearPath(t,e){const s=this._o(e);return this._d("linearPath",[rough_esm_S(t,!1,s)],s)}arc(t,e,s,n,o,a,h=!1,r){const i=this._o(r),c=[],l=rough_esm_A(t,e,s,n,o,a,h,!0,i);if(h&&i.fill)if("solid"===i.fillStyle){const h=Object.assign({},i);h.disableMultiStroke=!0;const r=rough_esm_A(t,e,s,n,o,a,!0,!1,h);r.type="fillPath",c.push(r)}else c.push(function(t,e,s,n,o,a,h){const r=t,i=e;let c=Math.abs(s/2),l=Math.abs(n/2);c+=G(.01*c,h),l+=G(.01*l,h);let u=o,p=a;for(;u<0;)u+=2*Math.PI,p+=2*Math.PI;p-u>2*Math.PI&&(u=0,p=2*Math.PI);const f=(p-u)/h.curveStepCount,d=[];for(let t=u;t<=p;t+=f)d.push([r+c*Math.cos(t),i+l*Math.sin(t)]);return d.push([r+c*Math.cos(p),i+l*Math.sin(p)]),d.push([r,i]),C([d],h)}(t,e,s,n,o,a,i));return i.stroke!==tt&&c.push(l),this._d("arc",c,i)}curve(t,e){const s=this._o(e),n=[],o=rough_esm_L(t,s);if(s.fill&&s.fill!==tt)if("solid"===s.fillStyle){const e=rough_esm_L(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(e.ops)})}else{const e=[],o=t;if(o.length){const t="number"==typeof o[0][0]?[o]:o;for(const n of t)n.length<3?e.push(...n):3===n.length?e.push(...Y(H([n[0],n[0],n[1],n[2]]),10,(1+s.roughness)/2)):e.push(...Y(H(n),10,(1+s.roughness)/2))}e.length&&n.push(C([e],s))}return s.stroke!==tt&&n.push(o),this._d("curve",n,s)}polygon(t,e){const s=this._o(e),n=[],o=rough_esm_S(t,!0,s);return s.fill&&("solid"===s.fillStyle?n.push(I([t],s)):n.push(C([t],s))),s.stroke!==tt&&n.push(o),this._d("polygon",n,s)}path(t,e){const s=this._o(e),n=[];if(!t)return this._d("path",n,s);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");const o=s.fill&&"transparent"!==s.fill&&s.fill!==tt,a=s.stroke!==tt,h=!!(s.simplification&&s.simplification<1),r=function(t,e,s){const n=rough_esm_m(rough_esm_y(rough_esm_b(t))),o=[];let a=[],h=[0,0],r=[];const i=()=>{r.length>=4&&a.push(...Y(r,e)),r=[]},c=()=>{i(),a.length&&(o.push(a),a=[])};for(const{key:t,data:e}of n)switch(t){case"M":c(),h=[e[0],e[1]],a.push(h);break;case"L":i(),a.push([e[0],e[1]]);break;case"C":if(!r.length){const t=a.length?a[a.length-1]:h;r.push([t[0],t[1]])}r.push([e[0],e[1]]),r.push([e[2],e[3]]),r.push([e[4],e[5]]);break;case"Z":i(),a.push([h[0],h[1]])}if(c(),!s)return o;const l=[];for(const t of o){const e=U(t,s);e.length&&l.push(e)}return l}(t,1,h?4-4*(s.simplification||1):(1+s.roughness)/2),i=_(t,s);if(o)if("solid"===s.fillStyle)if(1===r.length){const e=_(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(e.ops)})}else n.push(I(r,s));else n.push(C(r,s));return a&&(h?r.forEach((t=>{n.push(rough_esm_S(t,!1,s))})):n.push(i)),this._d("path",n,s)}opsToPath(t,e){let s="";for(const n of t.ops){const t="number"==typeof e&&e>=0?n.data.map((t=>+t.toFixed(e))):n.data;switch(n.op){case"move":s+=`M${t[0]} ${t[1]} `;break;case"bcurveTo":s+=`C${t[0]} ${t[1]}, ${t[2]} ${t[3]}, ${t[4]} ${t[5]} `;break;case"lineTo":s+=`L${t[0]} ${t[1]} `}}return s.trim()}toPaths(t){const e=t.sets||[],s=t.options||this.defaultOptions,n=[];for(const t of e){let e=null;switch(t.type){case"path":e={d:this.opsToPath(t),stroke:s.stroke,strokeWidth:s.strokeWidth,fill:tt};break;case"fillPath":e={d:this.opsToPath(t),stroke:tt,strokeWidth:0,fill:s.fill||tt};break;case"fillSketch":e=this.fillSketch(t,s)}e&&n.push(e)}return n}fillSketch(t,e){let s=e.fillWeight;return s<0&&(s=e.strokeWidth/2),{d:this.opsToPath(t),stroke:e.fill||tt,strokeWidth:s,fill:tt}}_mergedShape(t){return t.filter(((t,e)=>0===e||"move"!==t.op))}}class st{constructor(t,e){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.ctx,o=t.options.fixedDecimalPlaceDigits;for(const a of e)switch(a.type){case"path":n.save(),n.strokeStyle="none"===s.stroke?"transparent":s.stroke,n.lineWidth=s.strokeWidth,s.strokeLineDash&&n.setLineDash(s.strokeLineDash),s.strokeLineDashOffset&&(n.lineDashOffset=s.strokeLineDashOffset),this._drawToContext(n,a,o),n.restore();break;case"fillPath":{n.save(),n.fillStyle=s.fill||"";const e="curve"===t.shape||"polygon"===t.shape||"path"===t.shape?"evenodd":"nonzero";this._drawToContext(n,a,o,e),n.restore();break}case"fillSketch":this.fillSketch(n,a,s)}}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2),t.save(),s.fillLineDash&&t.setLineDash(s.fillLineDash),s.fillLineDashOffset&&(t.lineDashOffset=s.fillLineDashOffset),t.strokeStyle=s.fill||"",t.lineWidth=n,this._drawToContext(t,e,s.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,e,s,n="nonzero"){t.beginPath();for(const n of e.ops){const e="number"==typeof s&&s>=0?n.data.map((t=>+t.toFixed(s))):n.data;switch(n.op){case"move":t.moveTo(e[0],e[1]);break;case"bcurveTo":t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]);break;case"lineTo":t.lineTo(e[0],e[1])}}"fillPath"===e.type?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a),a}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a),a}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a),a}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o),o}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s),s}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s),s}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i),i}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s),s}path(t,e){const s=this.gen.path(t,e);return this.draw(s),s}}const nt="http://www.w3.org/2000/svg";class ot{constructor(t,e){this.svg=t,this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,o=n.createElementNS(nt,"g"),a=t.options.fixedDecimalPlaceDigits;for(const h of e){let e=null;switch(h.type){case"path":e=n.createElementNS(nt,"path"),e.setAttribute("d",this.opsToPath(h,a)),e.setAttribute("stroke",s.stroke),e.setAttribute("stroke-width",s.strokeWidth+""),e.setAttribute("fill","none"),s.strokeLineDash&&e.setAttribute("stroke-dasharray",s.strokeLineDash.join(" ").trim()),s.strokeLineDashOffset&&e.setAttribute("stroke-dashoffset",`${s.strokeLineDashOffset}`);break;case"fillPath":e=n.createElementNS(nt,"path"),e.setAttribute("d",this.opsToPath(h,a)),e.setAttribute("stroke","none"),e.setAttribute("stroke-width","0"),e.setAttribute("fill",s.fill||""),"curve"!==t.shape&&"polygon"!==t.shape||e.setAttribute("fill-rule","evenodd");break;case"fillSketch":e=this.fillSketch(n,h,s)}e&&o.appendChild(e)}return o}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2);const o=t.createElementNS(nt,"path");return o.setAttribute("d",this.opsToPath(e,s.fixedDecimalPlaceDigits)),o.setAttribute("stroke",s.fill||""),o.setAttribute("stroke-width",n+""),o.setAttribute("fill","none"),s.fillLineDash&&o.setAttribute("stroke-dasharray",s.fillLineDash.join(" ").trim()),s.fillLineDashOffset&&o.setAttribute("stroke-dashoffset",`${s.fillLineDashOffset}`),o}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,e){return this.gen.opsToPath(t,e)}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a)}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a)}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a)}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o)}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s)}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s)}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i)}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s)}path(t,e){const s=this.gen.path(t,e);return this.draw(s)}}var at={canvas:(t,e)=>new st(t,e),svg:(t,e)=>new ot(t,e),generator:t=>new et(t),newSeed:()=>et.newSeed()};
|
|
335
313
|
|
|
@@ -362,303 +340,9 @@ function rough_esm_t(t,e,s){if(t&&t.length){const[n,o]=e,a=Math.PI/180*s,h=Math.
|
|
|
362
340
|
}
|
|
363
341
|
}
|
|
364
342
|
|
|
365
|
-
;// CONCATENATED MODULE: ./src/
|
|
366
|
-
|
|
343
|
+
;// CONCATENATED MODULE: ./src/flag-drawers.ts
|
|
367
344
|
|
|
368
345
|
|
|
369
|
-
/** 绘制流程封装实例,外部入口只需要把已解析的国旗交给它。 */ let renderer;
|
|
370
|
-
/** 页面和 QA 工具共享的绘制门面:输入 emoji,输出到指定 canvas。 */ const RoughEmoji = {
|
|
371
|
-
draw (canvasElement, value) {
|
|
372
|
-
withCanvas(canvasElement, ()=>renderer.draw(resolveFlag(value)));
|
|
373
|
-
},
|
|
374
|
-
isFlagEmoji: isFlagEmoji,
|
|
375
|
-
resolveFlag: resolveFlag
|
|
376
|
-
};
|
|
377
|
-
/** 国旗绘制器:负责清理画布、绘制纸张背景、模板分发和 fallback。 */ class RoughEmojiRenderer {
|
|
378
|
-
/** 专门模板分发表:每个标准国旗都有独立绘制入口,避免大量 if 分支。 */ templateDrawers = {
|
|
379
|
-
// 独占
|
|
380
|
-
[TEMPLATE_FLAGS.australia]: drawAustraliaFlag,
|
|
381
|
-
[TEMPLATE_FLAGS.china]: drawChinaFlag,
|
|
382
|
-
[TEMPLATE_FLAGS.spain]: drawSpainFlag,
|
|
383
|
-
[TEMPLATE_FLAGS.france]: drawFranceFlag,
|
|
384
|
-
[TEMPLATE_FLAGS.italy]: drawItalyFlag,
|
|
385
|
-
[TEMPLATE_FLAGS.japan]: drawJapanFlag,
|
|
386
|
-
[TEMPLATE_FLAGS.thailand]: drawThailandFlag,
|
|
387
|
-
[TEMPLATE_FLAGS.unitedStates]: drawUnitedStatesFlag,
|
|
388
|
-
[TEMPLATE_FLAGS.vatican]: drawVaticanFlag,
|
|
389
|
-
// 待处理
|
|
390
|
-
[TEMPLATE_FLAGS.ad]: drawAdFlag,
|
|
391
|
-
[TEMPLATE_FLAGS.ae]: drawAeFlag,
|
|
392
|
-
[TEMPLATE_FLAGS.af]: drawAfFlag,
|
|
393
|
-
[TEMPLATE_FLAGS.ag]: drawAgFlag,
|
|
394
|
-
[TEMPLATE_FLAGS.ai]: drawAiFlag,
|
|
395
|
-
[TEMPLATE_FLAGS.al]: drawAlFlag,
|
|
396
|
-
[TEMPLATE_FLAGS.am]: drawAmFlag,
|
|
397
|
-
[TEMPLATE_FLAGS.ao]: drawAoFlag,
|
|
398
|
-
[TEMPLATE_FLAGS.aq]: drawAqFlag,
|
|
399
|
-
[TEMPLATE_FLAGS.ar]: drawArFlag,
|
|
400
|
-
[TEMPLATE_FLAGS.as]: drawAsFlag,
|
|
401
|
-
[TEMPLATE_FLAGS.at]: drawAtFlag,
|
|
402
|
-
[TEMPLATE_FLAGS.aw]: drawAwFlag,
|
|
403
|
-
[TEMPLATE_FLAGS.ax]: drawAxFlag,
|
|
404
|
-
[TEMPLATE_FLAGS.az]: drawAzFlag,
|
|
405
|
-
[TEMPLATE_FLAGS.ba]: drawBaFlag,
|
|
406
|
-
[TEMPLATE_FLAGS.bb]: drawBbFlag,
|
|
407
|
-
[TEMPLATE_FLAGS.bd]: drawBdFlag,
|
|
408
|
-
[TEMPLATE_FLAGS.be]: drawBeFlag,
|
|
409
|
-
[TEMPLATE_FLAGS.bf]: drawBfFlag,
|
|
410
|
-
[TEMPLATE_FLAGS.bg]: drawBgFlag,
|
|
411
|
-
[TEMPLATE_FLAGS.bh]: drawBhFlag,
|
|
412
|
-
[TEMPLATE_FLAGS.bi]: drawBiFlag,
|
|
413
|
-
[TEMPLATE_FLAGS.bj]: drawBjFlag,
|
|
414
|
-
[TEMPLATE_FLAGS.bl]: drawBlFlag,
|
|
415
|
-
[TEMPLATE_FLAGS.bm]: drawBmFlag,
|
|
416
|
-
[TEMPLATE_FLAGS.bn]: drawBnFlag,
|
|
417
|
-
[TEMPLATE_FLAGS.bo]: drawBoFlag,
|
|
418
|
-
[TEMPLATE_FLAGS.bq]: drawBqFlag,
|
|
419
|
-
[TEMPLATE_FLAGS.br]: drawBrFlag,
|
|
420
|
-
[TEMPLATE_FLAGS.bs]: drawBsFlag,
|
|
421
|
-
[TEMPLATE_FLAGS.bt]: drawBtFlag,
|
|
422
|
-
[TEMPLATE_FLAGS.bv]: drawBvFlag,
|
|
423
|
-
[TEMPLATE_FLAGS.bw]: drawBwFlag,
|
|
424
|
-
[TEMPLATE_FLAGS.by]: drawByFlag,
|
|
425
|
-
[TEMPLATE_FLAGS.bz]: drawBzFlag,
|
|
426
|
-
[TEMPLATE_FLAGS.ca]: drawCaFlag,
|
|
427
|
-
[TEMPLATE_FLAGS.cc]: drawCcFlag,
|
|
428
|
-
[TEMPLATE_FLAGS.cd]: drawCdFlag,
|
|
429
|
-
[TEMPLATE_FLAGS.cf]: drawCfFlag,
|
|
430
|
-
[TEMPLATE_FLAGS.cg]: drawCgFlag,
|
|
431
|
-
[TEMPLATE_FLAGS.ch]: drawChFlag,
|
|
432
|
-
[TEMPLATE_FLAGS.ci]: drawCiFlag,
|
|
433
|
-
[TEMPLATE_FLAGS.ck]: drawCkFlag,
|
|
434
|
-
[TEMPLATE_FLAGS.cl]: drawClFlag,
|
|
435
|
-
[TEMPLATE_FLAGS.cm]: drawCmFlag,
|
|
436
|
-
[TEMPLATE_FLAGS.co]: drawCoFlag,
|
|
437
|
-
[TEMPLATE_FLAGS.cr]: drawCrFlag,
|
|
438
|
-
[TEMPLATE_FLAGS.cu]: drawCuFlag,
|
|
439
|
-
[TEMPLATE_FLAGS.cv]: drawCvFlag,
|
|
440
|
-
[TEMPLATE_FLAGS.cw]: drawCwFlag,
|
|
441
|
-
[TEMPLATE_FLAGS.cx]: drawCxFlag,
|
|
442
|
-
[TEMPLATE_FLAGS.cy]: drawCyFlag,
|
|
443
|
-
[TEMPLATE_FLAGS.cz]: drawCzFlag,
|
|
444
|
-
[TEMPLATE_FLAGS.de]: drawDeFlag,
|
|
445
|
-
[TEMPLATE_FLAGS.dj]: drawDjFlag,
|
|
446
|
-
[TEMPLATE_FLAGS.dk]: drawDkFlag,
|
|
447
|
-
[TEMPLATE_FLAGS.dm]: drawDmFlag,
|
|
448
|
-
[TEMPLATE_FLAGS["do"]]: drawDoFlag,
|
|
449
|
-
[TEMPLATE_FLAGS.dz]: drawDzFlag,
|
|
450
|
-
[TEMPLATE_FLAGS.ec]: drawEcFlag,
|
|
451
|
-
[TEMPLATE_FLAGS.ee]: drawEeFlag,
|
|
452
|
-
[TEMPLATE_FLAGS.eg]: drawEgFlag,
|
|
453
|
-
[TEMPLATE_FLAGS.eh]: drawEhFlag,
|
|
454
|
-
[TEMPLATE_FLAGS.er]: drawErFlag,
|
|
455
|
-
[TEMPLATE_FLAGS.et]: drawEtFlag,
|
|
456
|
-
[TEMPLATE_FLAGS.fi]: drawFiFlag,
|
|
457
|
-
[TEMPLATE_FLAGS.fj]: drawFjFlag,
|
|
458
|
-
[TEMPLATE_FLAGS.fk]: drawFkFlag,
|
|
459
|
-
[TEMPLATE_FLAGS.fm]: drawFmFlag,
|
|
460
|
-
[TEMPLATE_FLAGS.fo]: drawFoFlag,
|
|
461
|
-
[TEMPLATE_FLAGS.ga]: drawGaFlag,
|
|
462
|
-
[TEMPLATE_FLAGS.gb]: drawGbFlag,
|
|
463
|
-
[TEMPLATE_FLAGS.gd]: drawGdFlag,
|
|
464
|
-
[TEMPLATE_FLAGS.ge]: drawGeFlag,
|
|
465
|
-
[TEMPLATE_FLAGS.gf]: drawGfFlag,
|
|
466
|
-
[TEMPLATE_FLAGS.gg]: drawGgFlag,
|
|
467
|
-
[TEMPLATE_FLAGS.gh]: drawGhFlag,
|
|
468
|
-
[TEMPLATE_FLAGS.gi]: drawGiFlag,
|
|
469
|
-
[TEMPLATE_FLAGS.gl]: drawGlFlag,
|
|
470
|
-
[TEMPLATE_FLAGS.gm]: drawGmFlag,
|
|
471
|
-
[TEMPLATE_FLAGS.gn]: drawGnFlag,
|
|
472
|
-
[TEMPLATE_FLAGS.gp]: drawGpFlag,
|
|
473
|
-
[TEMPLATE_FLAGS.gq]: drawGqFlag,
|
|
474
|
-
[TEMPLATE_FLAGS.gr]: drawGrFlag,
|
|
475
|
-
[TEMPLATE_FLAGS.gs]: drawGsFlag,
|
|
476
|
-
[TEMPLATE_FLAGS.gt]: drawGtFlag,
|
|
477
|
-
[TEMPLATE_FLAGS.gu]: drawGuFlag,
|
|
478
|
-
[TEMPLATE_FLAGS.gw]: drawGwFlag,
|
|
479
|
-
[TEMPLATE_FLAGS.gy]: drawGyFlag,
|
|
480
|
-
[TEMPLATE_FLAGS.hk]: drawHkFlag,
|
|
481
|
-
[TEMPLATE_FLAGS.hm]: drawHmFlag,
|
|
482
|
-
[TEMPLATE_FLAGS.hn]: drawHnFlag,
|
|
483
|
-
[TEMPLATE_FLAGS.hr]: drawHrFlag,
|
|
484
|
-
[TEMPLATE_FLAGS.ht]: drawHtFlag,
|
|
485
|
-
[TEMPLATE_FLAGS.hu]: drawHuFlag,
|
|
486
|
-
[TEMPLATE_FLAGS.id]: drawIdFlag,
|
|
487
|
-
[TEMPLATE_FLAGS.ie]: drawIeFlag,
|
|
488
|
-
[TEMPLATE_FLAGS.il]: drawIlFlag,
|
|
489
|
-
[TEMPLATE_FLAGS.im]: drawImFlag,
|
|
490
|
-
[TEMPLATE_FLAGS["in"]]: drawInFlag,
|
|
491
|
-
[TEMPLATE_FLAGS.io]: drawIoFlag,
|
|
492
|
-
[TEMPLATE_FLAGS.iq]: drawIqFlag,
|
|
493
|
-
[TEMPLATE_FLAGS.ir]: drawIrFlag,
|
|
494
|
-
[TEMPLATE_FLAGS.is]: drawIsFlag,
|
|
495
|
-
[TEMPLATE_FLAGS.je]: drawJeFlag,
|
|
496
|
-
[TEMPLATE_FLAGS.jm]: drawJmFlag,
|
|
497
|
-
[TEMPLATE_FLAGS.jo]: drawJoFlag,
|
|
498
|
-
[TEMPLATE_FLAGS.ke]: drawKeFlag,
|
|
499
|
-
[TEMPLATE_FLAGS.kg]: drawKgFlag,
|
|
500
|
-
[TEMPLATE_FLAGS.kh]: drawKhFlag,
|
|
501
|
-
[TEMPLATE_FLAGS.ki]: drawKiFlag,
|
|
502
|
-
[TEMPLATE_FLAGS.km]: drawKmFlag,
|
|
503
|
-
[TEMPLATE_FLAGS.kn]: drawKnFlag,
|
|
504
|
-
[TEMPLATE_FLAGS.kp]: drawKpFlag,
|
|
505
|
-
[TEMPLATE_FLAGS.kr]: drawKrFlag,
|
|
506
|
-
[TEMPLATE_FLAGS.kw]: drawKwFlag,
|
|
507
|
-
[TEMPLATE_FLAGS.ky]: drawKyFlag,
|
|
508
|
-
[TEMPLATE_FLAGS.kz]: drawKzFlag,
|
|
509
|
-
[TEMPLATE_FLAGS.la]: drawLaFlag,
|
|
510
|
-
[TEMPLATE_FLAGS.lb]: drawLbFlag,
|
|
511
|
-
[TEMPLATE_FLAGS.lc]: drawLcFlag,
|
|
512
|
-
[TEMPLATE_FLAGS.li]: drawLiFlag,
|
|
513
|
-
[TEMPLATE_FLAGS.lk]: drawLkFlag,
|
|
514
|
-
[TEMPLATE_FLAGS.lr]: drawLrFlag,
|
|
515
|
-
[TEMPLATE_FLAGS.ls]: drawLsFlag,
|
|
516
|
-
[TEMPLATE_FLAGS.lt]: drawLtFlag,
|
|
517
|
-
[TEMPLATE_FLAGS.lu]: drawLuFlag,
|
|
518
|
-
[TEMPLATE_FLAGS.lv]: drawLvFlag,
|
|
519
|
-
[TEMPLATE_FLAGS.ly]: drawLyFlag,
|
|
520
|
-
[TEMPLATE_FLAGS.ma]: drawMaFlag,
|
|
521
|
-
[TEMPLATE_FLAGS.mc]: drawMcFlag,
|
|
522
|
-
[TEMPLATE_FLAGS.md]: drawMdFlag,
|
|
523
|
-
[TEMPLATE_FLAGS.me]: drawMeFlag,
|
|
524
|
-
[TEMPLATE_FLAGS.mf]: drawMfFlag,
|
|
525
|
-
[TEMPLATE_FLAGS.mg]: drawMgFlag,
|
|
526
|
-
[TEMPLATE_FLAGS.mh]: drawMhFlag,
|
|
527
|
-
[TEMPLATE_FLAGS.mk]: drawMkFlag,
|
|
528
|
-
[TEMPLATE_FLAGS.ml]: drawMlFlag,
|
|
529
|
-
[TEMPLATE_FLAGS.mm]: drawMmFlag,
|
|
530
|
-
[TEMPLATE_FLAGS.mn]: drawMnFlag,
|
|
531
|
-
[TEMPLATE_FLAGS.mo]: drawMoFlag,
|
|
532
|
-
[TEMPLATE_FLAGS.mp]: drawMpFlag,
|
|
533
|
-
[TEMPLATE_FLAGS.mq]: drawMqFlag,
|
|
534
|
-
[TEMPLATE_FLAGS.mr]: drawMrFlag,
|
|
535
|
-
[TEMPLATE_FLAGS.ms]: drawMsFlag,
|
|
536
|
-
[TEMPLATE_FLAGS.mt]: drawMtFlag,
|
|
537
|
-
[TEMPLATE_FLAGS.mu]: drawMuFlag,
|
|
538
|
-
[TEMPLATE_FLAGS.mv]: drawMvFlag,
|
|
539
|
-
[TEMPLATE_FLAGS.mw]: drawMwFlag,
|
|
540
|
-
[TEMPLATE_FLAGS.mx]: drawMxFlag,
|
|
541
|
-
[TEMPLATE_FLAGS.my]: drawMyFlag,
|
|
542
|
-
[TEMPLATE_FLAGS.mz]: drawMzFlag,
|
|
543
|
-
[TEMPLATE_FLAGS.na]: drawNaFlag,
|
|
544
|
-
[TEMPLATE_FLAGS.nc]: drawNcFlag,
|
|
545
|
-
[TEMPLATE_FLAGS.ne]: drawNeFlag,
|
|
546
|
-
[TEMPLATE_FLAGS.nf]: drawNfFlag,
|
|
547
|
-
[TEMPLATE_FLAGS.ng]: drawNgFlag,
|
|
548
|
-
[TEMPLATE_FLAGS.ni]: drawNiFlag,
|
|
549
|
-
[TEMPLATE_FLAGS.nl]: drawNlFlag,
|
|
550
|
-
[TEMPLATE_FLAGS.no]: drawNoFlag,
|
|
551
|
-
[TEMPLATE_FLAGS.np]: drawNpFlag,
|
|
552
|
-
[TEMPLATE_FLAGS.nr]: drawNrFlag,
|
|
553
|
-
[TEMPLATE_FLAGS.nu]: drawNuFlag,
|
|
554
|
-
[TEMPLATE_FLAGS.nz]: drawNzFlag,
|
|
555
|
-
[TEMPLATE_FLAGS.om]: drawOmFlag,
|
|
556
|
-
[TEMPLATE_FLAGS.pa]: drawPaFlag,
|
|
557
|
-
[TEMPLATE_FLAGS.pe]: drawPeFlag,
|
|
558
|
-
[TEMPLATE_FLAGS.pf]: drawPfFlag,
|
|
559
|
-
[TEMPLATE_FLAGS.pg]: drawPgFlag,
|
|
560
|
-
[TEMPLATE_FLAGS.ph]: drawPhFlag,
|
|
561
|
-
[TEMPLATE_FLAGS.pk]: drawPkFlag,
|
|
562
|
-
[TEMPLATE_FLAGS.pl]: drawPlFlag,
|
|
563
|
-
[TEMPLATE_FLAGS.pm]: drawPmFlag,
|
|
564
|
-
[TEMPLATE_FLAGS.pn]: drawPnFlag,
|
|
565
|
-
[TEMPLATE_FLAGS.pr]: drawPrFlag,
|
|
566
|
-
[TEMPLATE_FLAGS.ps]: drawPsFlag,
|
|
567
|
-
[TEMPLATE_FLAGS.pt]: drawPtFlag,
|
|
568
|
-
[TEMPLATE_FLAGS.pw]: drawPwFlag,
|
|
569
|
-
[TEMPLATE_FLAGS.py]: drawPyFlag,
|
|
570
|
-
[TEMPLATE_FLAGS.qa]: drawQaFlag,
|
|
571
|
-
[TEMPLATE_FLAGS.re]: drawReFlag,
|
|
572
|
-
[TEMPLATE_FLAGS.ro]: drawRoFlag,
|
|
573
|
-
[TEMPLATE_FLAGS.rs]: drawRsFlag,
|
|
574
|
-
[TEMPLATE_FLAGS.ru]: drawRuFlag,
|
|
575
|
-
[TEMPLATE_FLAGS.rw]: drawRwFlag,
|
|
576
|
-
[TEMPLATE_FLAGS.sa]: drawSaFlag,
|
|
577
|
-
[TEMPLATE_FLAGS.sb]: drawSbFlag,
|
|
578
|
-
[TEMPLATE_FLAGS.sc]: drawScFlag,
|
|
579
|
-
[TEMPLATE_FLAGS.sd]: drawSdFlag,
|
|
580
|
-
[TEMPLATE_FLAGS.se]: drawSeFlag,
|
|
581
|
-
[TEMPLATE_FLAGS.sg]: drawSgFlag,
|
|
582
|
-
[TEMPLATE_FLAGS.sh]: drawShFlag,
|
|
583
|
-
[TEMPLATE_FLAGS.si]: drawSiFlag,
|
|
584
|
-
[TEMPLATE_FLAGS.sj]: drawSjFlag,
|
|
585
|
-
[TEMPLATE_FLAGS.sk]: drawSkFlag,
|
|
586
|
-
[TEMPLATE_FLAGS.sl]: drawSlFlag,
|
|
587
|
-
[TEMPLATE_FLAGS.sm]: drawSmFlag,
|
|
588
|
-
[TEMPLATE_FLAGS.sn]: drawSnFlag,
|
|
589
|
-
[TEMPLATE_FLAGS.so]: drawSoFlag,
|
|
590
|
-
[TEMPLATE_FLAGS.sr]: drawSrFlag,
|
|
591
|
-
[TEMPLATE_FLAGS.ss]: drawSsFlag,
|
|
592
|
-
[TEMPLATE_FLAGS.st]: drawStFlag,
|
|
593
|
-
[TEMPLATE_FLAGS.sv]: drawSvFlag,
|
|
594
|
-
[TEMPLATE_FLAGS.sx]: drawSxFlag,
|
|
595
|
-
[TEMPLATE_FLAGS.sy]: drawSyFlag,
|
|
596
|
-
[TEMPLATE_FLAGS.sz]: drawSzFlag,
|
|
597
|
-
[TEMPLATE_FLAGS.tc]: drawTcFlag,
|
|
598
|
-
[TEMPLATE_FLAGS.td]: drawTdFlag,
|
|
599
|
-
[TEMPLATE_FLAGS.tf]: drawTfFlag,
|
|
600
|
-
[TEMPLATE_FLAGS.tg]: drawTgFlag,
|
|
601
|
-
[TEMPLATE_FLAGS.tj]: drawTjFlag,
|
|
602
|
-
[TEMPLATE_FLAGS.tk]: drawTkFlag,
|
|
603
|
-
[TEMPLATE_FLAGS.tl]: drawTlFlag,
|
|
604
|
-
[TEMPLATE_FLAGS.tm]: drawTmFlag,
|
|
605
|
-
[TEMPLATE_FLAGS.tn]: drawTnFlag,
|
|
606
|
-
[TEMPLATE_FLAGS.to]: drawToFlag,
|
|
607
|
-
[TEMPLATE_FLAGS.tr]: drawTrFlag,
|
|
608
|
-
[TEMPLATE_FLAGS.tt]: drawTtFlag,
|
|
609
|
-
[TEMPLATE_FLAGS.tv]: drawTvFlag,
|
|
610
|
-
[TEMPLATE_FLAGS.tw]: drawChinaFlag,
|
|
611
|
-
[TEMPLATE_FLAGS.tz]: drawTzFlag,
|
|
612
|
-
[TEMPLATE_FLAGS.ua]: drawUaFlag,
|
|
613
|
-
[TEMPLATE_FLAGS.ug]: drawUgFlag,
|
|
614
|
-
[TEMPLATE_FLAGS.um]: drawUmFlag,
|
|
615
|
-
[TEMPLATE_FLAGS.un]: drawUnFlag,
|
|
616
|
-
[TEMPLATE_FLAGS.uy]: drawUyFlag,
|
|
617
|
-
[TEMPLATE_FLAGS.uz]: drawUzFlag,
|
|
618
|
-
[TEMPLATE_FLAGS.vc]: drawVcFlag,
|
|
619
|
-
[TEMPLATE_FLAGS.ve]: drawVeFlag,
|
|
620
|
-
[TEMPLATE_FLAGS.vg]: drawVgFlag,
|
|
621
|
-
[TEMPLATE_FLAGS.vi]: drawViFlag,
|
|
622
|
-
[TEMPLATE_FLAGS.vn]: drawVnFlag,
|
|
623
|
-
[TEMPLATE_FLAGS.vu]: drawVuFlag,
|
|
624
|
-
[TEMPLATE_FLAGS.wf]: drawWfFlag,
|
|
625
|
-
[TEMPLATE_FLAGS.ws]: drawWsFlag,
|
|
626
|
-
[TEMPLATE_FLAGS.xk]: drawXkFlag,
|
|
627
|
-
[TEMPLATE_FLAGS.ye]: drawYeFlag,
|
|
628
|
-
[TEMPLATE_FLAGS.yt]: drawYtFlag,
|
|
629
|
-
[TEMPLATE_FLAGS.za]: drawZaFlag,
|
|
630
|
-
[TEMPLATE_FLAGS.zm]: drawZmFlag,
|
|
631
|
-
[TEMPLATE_FLAGS.zw]: drawZwFlag
|
|
632
|
-
};
|
|
633
|
-
/** 绘制总入口:先铺纸张背景,再按已知旗帜走专门模板,未知旗帜走像素采样流程。 */ draw(flag) {
|
|
634
|
-
this.clearCanvas();
|
|
635
|
-
this.drawPaper();
|
|
636
|
-
const templateDrawer = this.templateDrawers[flag];
|
|
637
|
-
if (templateDrawer) {
|
|
638
|
-
templateDrawer();
|
|
639
|
-
return;
|
|
640
|
-
}
|
|
641
|
-
drawGenericFlag(flag);
|
|
642
|
-
}
|
|
643
|
-
/** 清空当前画布,为下一次完整重绘做准备。 */ clearCanvas() {
|
|
644
|
-
ctx.clearRect(0, 0, size, size);
|
|
645
|
-
}
|
|
646
|
-
/** 绘制统一纸张底色和粗糙边框,给所有旗帜提供一致的手绘载体。 */ drawPaper() {
|
|
647
|
-
ctx.fillStyle = PALETTE.paper;
|
|
648
|
-
ctx.fillRect(0, 0, size, size);
|
|
649
|
-
render_context_roughCanvas.rectangle(46, 46, size - 92, size - 92, {
|
|
650
|
-
roughness: 1.4,
|
|
651
|
-
bowing: 0.8,
|
|
652
|
-
stroke: PALETTE.frame,
|
|
653
|
-
strokeWidth: 1.2,
|
|
654
|
-
fill: PALETTE.paper,
|
|
655
|
-
fillStyle: "hachure",
|
|
656
|
-
hachureGap: 24,
|
|
657
|
-
fillWeight: 0.28
|
|
658
|
-
});
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
renderer = new RoughEmojiRenderer();
|
|
662
346
|
/** 中国国旗模板:红色旗面、布纹、五颗手绘五角星和最终边框。 */ function drawChinaFlag() {
|
|
663
347
|
const flag = makeSketchRect(118, 174, 486, 342);
|
|
664
348
|
render_context_roughCanvas.polygon(flag, {
|
|
@@ -7489,68 +7173,326 @@ renderer = new RoughEmojiRenderer();
|
|
|
7489
7173
|
/** 生成正负范围内的随机偏移,让边缘、点位和线条产生手绘不稳定感。 */ function jitter(amount) {
|
|
7490
7174
|
return randomBetween(-amount, amount);
|
|
7491
7175
|
}
|
|
7176
|
+
/** 专门模板分发表:每个标准国旗都有独立绘制入口,避免大量 if 分支。 */ const templateDrawers = {
|
|
7177
|
+
[TEMPLATE_FLAGS.australia]: drawAustraliaFlag,
|
|
7178
|
+
[TEMPLATE_FLAGS.china]: drawChinaFlag,
|
|
7179
|
+
[TEMPLATE_FLAGS.spain]: drawSpainFlag,
|
|
7180
|
+
[TEMPLATE_FLAGS.france]: drawFranceFlag,
|
|
7181
|
+
[TEMPLATE_FLAGS.italy]: drawItalyFlag,
|
|
7182
|
+
[TEMPLATE_FLAGS.japan]: drawJapanFlag,
|
|
7183
|
+
[TEMPLATE_FLAGS.thailand]: drawThailandFlag,
|
|
7184
|
+
[TEMPLATE_FLAGS.unitedStates]: drawUnitedStatesFlag,
|
|
7185
|
+
[TEMPLATE_FLAGS.vatican]: drawVaticanFlag,
|
|
7186
|
+
[TEMPLATE_FLAGS.ad]: drawAdFlag,
|
|
7187
|
+
[TEMPLATE_FLAGS.ae]: drawAeFlag,
|
|
7188
|
+
[TEMPLATE_FLAGS.af]: drawAfFlag,
|
|
7189
|
+
[TEMPLATE_FLAGS.ag]: drawAgFlag,
|
|
7190
|
+
[TEMPLATE_FLAGS.ai]: drawAiFlag,
|
|
7191
|
+
[TEMPLATE_FLAGS.al]: drawAlFlag,
|
|
7192
|
+
[TEMPLATE_FLAGS.am]: drawAmFlag,
|
|
7193
|
+
[TEMPLATE_FLAGS.ao]: drawAoFlag,
|
|
7194
|
+
[TEMPLATE_FLAGS.aq]: drawAqFlag,
|
|
7195
|
+
[TEMPLATE_FLAGS.ar]: drawArFlag,
|
|
7196
|
+
[TEMPLATE_FLAGS.as]: drawAsFlag,
|
|
7197
|
+
[TEMPLATE_FLAGS.at]: drawAtFlag,
|
|
7198
|
+
[TEMPLATE_FLAGS.aw]: drawAwFlag,
|
|
7199
|
+
[TEMPLATE_FLAGS.ax]: drawAxFlag,
|
|
7200
|
+
[TEMPLATE_FLAGS.az]: drawAzFlag,
|
|
7201
|
+
[TEMPLATE_FLAGS.ba]: drawBaFlag,
|
|
7202
|
+
[TEMPLATE_FLAGS.bb]: drawBbFlag,
|
|
7203
|
+
[TEMPLATE_FLAGS.bd]: drawBdFlag,
|
|
7204
|
+
[TEMPLATE_FLAGS.be]: drawBeFlag,
|
|
7205
|
+
[TEMPLATE_FLAGS.bf]: drawBfFlag,
|
|
7206
|
+
[TEMPLATE_FLAGS.bg]: drawBgFlag,
|
|
7207
|
+
[TEMPLATE_FLAGS.bh]: drawBhFlag,
|
|
7208
|
+
[TEMPLATE_FLAGS.bi]: drawBiFlag,
|
|
7209
|
+
[TEMPLATE_FLAGS.bj]: drawBjFlag,
|
|
7210
|
+
[TEMPLATE_FLAGS.bl]: drawBlFlag,
|
|
7211
|
+
[TEMPLATE_FLAGS.bm]: drawBmFlag,
|
|
7212
|
+
[TEMPLATE_FLAGS.bn]: drawBnFlag,
|
|
7213
|
+
[TEMPLATE_FLAGS.bo]: drawBoFlag,
|
|
7214
|
+
[TEMPLATE_FLAGS.bq]: drawBqFlag,
|
|
7215
|
+
[TEMPLATE_FLAGS.br]: drawBrFlag,
|
|
7216
|
+
[TEMPLATE_FLAGS.bs]: drawBsFlag,
|
|
7217
|
+
[TEMPLATE_FLAGS.bt]: drawBtFlag,
|
|
7218
|
+
[TEMPLATE_FLAGS.bv]: drawBvFlag,
|
|
7219
|
+
[TEMPLATE_FLAGS.bw]: drawBwFlag,
|
|
7220
|
+
[TEMPLATE_FLAGS.by]: drawByFlag,
|
|
7221
|
+
[TEMPLATE_FLAGS.bz]: drawBzFlag,
|
|
7222
|
+
[TEMPLATE_FLAGS.ca]: drawCaFlag,
|
|
7223
|
+
[TEMPLATE_FLAGS.cc]: drawCcFlag,
|
|
7224
|
+
[TEMPLATE_FLAGS.cd]: drawCdFlag,
|
|
7225
|
+
[TEMPLATE_FLAGS.cf]: drawCfFlag,
|
|
7226
|
+
[TEMPLATE_FLAGS.cg]: drawCgFlag,
|
|
7227
|
+
[TEMPLATE_FLAGS.ch]: drawChFlag,
|
|
7228
|
+
[TEMPLATE_FLAGS.ci]: drawCiFlag,
|
|
7229
|
+
[TEMPLATE_FLAGS.ck]: drawCkFlag,
|
|
7230
|
+
[TEMPLATE_FLAGS.cl]: drawClFlag,
|
|
7231
|
+
[TEMPLATE_FLAGS.cm]: drawCmFlag,
|
|
7232
|
+
[TEMPLATE_FLAGS.co]: drawCoFlag,
|
|
7233
|
+
[TEMPLATE_FLAGS.cr]: drawCrFlag,
|
|
7234
|
+
[TEMPLATE_FLAGS.cu]: drawCuFlag,
|
|
7235
|
+
[TEMPLATE_FLAGS.cv]: drawCvFlag,
|
|
7236
|
+
[TEMPLATE_FLAGS.cw]: drawCwFlag,
|
|
7237
|
+
[TEMPLATE_FLAGS.cx]: drawCxFlag,
|
|
7238
|
+
[TEMPLATE_FLAGS.cy]: drawCyFlag,
|
|
7239
|
+
[TEMPLATE_FLAGS.cz]: drawCzFlag,
|
|
7240
|
+
[TEMPLATE_FLAGS.de]: drawDeFlag,
|
|
7241
|
+
[TEMPLATE_FLAGS.dj]: drawDjFlag,
|
|
7242
|
+
[TEMPLATE_FLAGS.dk]: drawDkFlag,
|
|
7243
|
+
[TEMPLATE_FLAGS.dm]: drawDmFlag,
|
|
7244
|
+
[TEMPLATE_FLAGS["do"]]: drawDoFlag,
|
|
7245
|
+
[TEMPLATE_FLAGS.dz]: drawDzFlag,
|
|
7246
|
+
[TEMPLATE_FLAGS.ec]: drawEcFlag,
|
|
7247
|
+
[TEMPLATE_FLAGS.ee]: drawEeFlag,
|
|
7248
|
+
[TEMPLATE_FLAGS.eg]: drawEgFlag,
|
|
7249
|
+
[TEMPLATE_FLAGS.eh]: drawEhFlag,
|
|
7250
|
+
[TEMPLATE_FLAGS.er]: drawErFlag,
|
|
7251
|
+
[TEMPLATE_FLAGS.et]: drawEtFlag,
|
|
7252
|
+
[TEMPLATE_FLAGS.fi]: drawFiFlag,
|
|
7253
|
+
[TEMPLATE_FLAGS.fj]: drawFjFlag,
|
|
7254
|
+
[TEMPLATE_FLAGS.fk]: drawFkFlag,
|
|
7255
|
+
[TEMPLATE_FLAGS.fm]: drawFmFlag,
|
|
7256
|
+
[TEMPLATE_FLAGS.fo]: drawFoFlag,
|
|
7257
|
+
[TEMPLATE_FLAGS.ga]: drawGaFlag,
|
|
7258
|
+
[TEMPLATE_FLAGS.gb]: drawGbFlag,
|
|
7259
|
+
[TEMPLATE_FLAGS.gd]: drawGdFlag,
|
|
7260
|
+
[TEMPLATE_FLAGS.ge]: drawGeFlag,
|
|
7261
|
+
[TEMPLATE_FLAGS.gf]: drawGfFlag,
|
|
7262
|
+
[TEMPLATE_FLAGS.gg]: drawGgFlag,
|
|
7263
|
+
[TEMPLATE_FLAGS.gh]: drawGhFlag,
|
|
7264
|
+
[TEMPLATE_FLAGS.gi]: drawGiFlag,
|
|
7265
|
+
[TEMPLATE_FLAGS.gl]: drawGlFlag,
|
|
7266
|
+
[TEMPLATE_FLAGS.gm]: drawGmFlag,
|
|
7267
|
+
[TEMPLATE_FLAGS.gn]: drawGnFlag,
|
|
7268
|
+
[TEMPLATE_FLAGS.gp]: drawGpFlag,
|
|
7269
|
+
[TEMPLATE_FLAGS.gq]: drawGqFlag,
|
|
7270
|
+
[TEMPLATE_FLAGS.gr]: drawGrFlag,
|
|
7271
|
+
[TEMPLATE_FLAGS.gs]: drawGsFlag,
|
|
7272
|
+
[TEMPLATE_FLAGS.gt]: drawGtFlag,
|
|
7273
|
+
[TEMPLATE_FLAGS.gu]: drawGuFlag,
|
|
7274
|
+
[TEMPLATE_FLAGS.gw]: drawGwFlag,
|
|
7275
|
+
[TEMPLATE_FLAGS.gy]: drawGyFlag,
|
|
7276
|
+
[TEMPLATE_FLAGS.hk]: drawHkFlag,
|
|
7277
|
+
[TEMPLATE_FLAGS.hm]: drawHmFlag,
|
|
7278
|
+
[TEMPLATE_FLAGS.hn]: drawHnFlag,
|
|
7279
|
+
[TEMPLATE_FLAGS.hr]: drawHrFlag,
|
|
7280
|
+
[TEMPLATE_FLAGS.ht]: drawHtFlag,
|
|
7281
|
+
[TEMPLATE_FLAGS.hu]: drawHuFlag,
|
|
7282
|
+
[TEMPLATE_FLAGS.id]: drawIdFlag,
|
|
7283
|
+
[TEMPLATE_FLAGS.ie]: drawIeFlag,
|
|
7284
|
+
[TEMPLATE_FLAGS.il]: drawIlFlag,
|
|
7285
|
+
[TEMPLATE_FLAGS.im]: drawImFlag,
|
|
7286
|
+
[TEMPLATE_FLAGS["in"]]: drawInFlag,
|
|
7287
|
+
[TEMPLATE_FLAGS.io]: drawIoFlag,
|
|
7288
|
+
[TEMPLATE_FLAGS.iq]: drawIqFlag,
|
|
7289
|
+
[TEMPLATE_FLAGS.ir]: drawIrFlag,
|
|
7290
|
+
[TEMPLATE_FLAGS.is]: drawIsFlag,
|
|
7291
|
+
[TEMPLATE_FLAGS.je]: drawJeFlag,
|
|
7292
|
+
[TEMPLATE_FLAGS.jm]: drawJmFlag,
|
|
7293
|
+
[TEMPLATE_FLAGS.jo]: drawJoFlag,
|
|
7294
|
+
[TEMPLATE_FLAGS.ke]: drawKeFlag,
|
|
7295
|
+
[TEMPLATE_FLAGS.kg]: drawKgFlag,
|
|
7296
|
+
[TEMPLATE_FLAGS.kh]: drawKhFlag,
|
|
7297
|
+
[TEMPLATE_FLAGS.ki]: drawKiFlag,
|
|
7298
|
+
[TEMPLATE_FLAGS.km]: drawKmFlag,
|
|
7299
|
+
[TEMPLATE_FLAGS.kn]: drawKnFlag,
|
|
7300
|
+
[TEMPLATE_FLAGS.kp]: drawKpFlag,
|
|
7301
|
+
[TEMPLATE_FLAGS.kr]: drawKrFlag,
|
|
7302
|
+
[TEMPLATE_FLAGS.kw]: drawKwFlag,
|
|
7303
|
+
[TEMPLATE_FLAGS.ky]: drawKyFlag,
|
|
7304
|
+
[TEMPLATE_FLAGS.kz]: drawKzFlag,
|
|
7305
|
+
[TEMPLATE_FLAGS.la]: drawLaFlag,
|
|
7306
|
+
[TEMPLATE_FLAGS.lb]: drawLbFlag,
|
|
7307
|
+
[TEMPLATE_FLAGS.lc]: drawLcFlag,
|
|
7308
|
+
[TEMPLATE_FLAGS.li]: drawLiFlag,
|
|
7309
|
+
[TEMPLATE_FLAGS.lk]: drawLkFlag,
|
|
7310
|
+
[TEMPLATE_FLAGS.lr]: drawLrFlag,
|
|
7311
|
+
[TEMPLATE_FLAGS.ls]: drawLsFlag,
|
|
7312
|
+
[TEMPLATE_FLAGS.lt]: drawLtFlag,
|
|
7313
|
+
[TEMPLATE_FLAGS.lu]: drawLuFlag,
|
|
7314
|
+
[TEMPLATE_FLAGS.lv]: drawLvFlag,
|
|
7315
|
+
[TEMPLATE_FLAGS.ly]: drawLyFlag,
|
|
7316
|
+
[TEMPLATE_FLAGS.ma]: drawMaFlag,
|
|
7317
|
+
[TEMPLATE_FLAGS.mc]: drawMcFlag,
|
|
7318
|
+
[TEMPLATE_FLAGS.md]: drawMdFlag,
|
|
7319
|
+
[TEMPLATE_FLAGS.me]: drawMeFlag,
|
|
7320
|
+
[TEMPLATE_FLAGS.mf]: drawMfFlag,
|
|
7321
|
+
[TEMPLATE_FLAGS.mg]: drawMgFlag,
|
|
7322
|
+
[TEMPLATE_FLAGS.mh]: drawMhFlag,
|
|
7323
|
+
[TEMPLATE_FLAGS.mk]: drawMkFlag,
|
|
7324
|
+
[TEMPLATE_FLAGS.ml]: drawMlFlag,
|
|
7325
|
+
[TEMPLATE_FLAGS.mm]: drawMmFlag,
|
|
7326
|
+
[TEMPLATE_FLAGS.mn]: drawMnFlag,
|
|
7327
|
+
[TEMPLATE_FLAGS.mo]: drawMoFlag,
|
|
7328
|
+
[TEMPLATE_FLAGS.mp]: drawMpFlag,
|
|
7329
|
+
[TEMPLATE_FLAGS.mq]: drawMqFlag,
|
|
7330
|
+
[TEMPLATE_FLAGS.mr]: drawMrFlag,
|
|
7331
|
+
[TEMPLATE_FLAGS.ms]: drawMsFlag,
|
|
7332
|
+
[TEMPLATE_FLAGS.mt]: drawMtFlag,
|
|
7333
|
+
[TEMPLATE_FLAGS.mu]: drawMuFlag,
|
|
7334
|
+
[TEMPLATE_FLAGS.mv]: drawMvFlag,
|
|
7335
|
+
[TEMPLATE_FLAGS.mw]: drawMwFlag,
|
|
7336
|
+
[TEMPLATE_FLAGS.mx]: drawMxFlag,
|
|
7337
|
+
[TEMPLATE_FLAGS.my]: drawMyFlag,
|
|
7338
|
+
[TEMPLATE_FLAGS.mz]: drawMzFlag,
|
|
7339
|
+
[TEMPLATE_FLAGS.na]: drawNaFlag,
|
|
7340
|
+
[TEMPLATE_FLAGS.nc]: drawNcFlag,
|
|
7341
|
+
[TEMPLATE_FLAGS.ne]: drawNeFlag,
|
|
7342
|
+
[TEMPLATE_FLAGS.nf]: drawNfFlag,
|
|
7343
|
+
[TEMPLATE_FLAGS.ng]: drawNgFlag,
|
|
7344
|
+
[TEMPLATE_FLAGS.ni]: drawNiFlag,
|
|
7345
|
+
[TEMPLATE_FLAGS.nl]: drawNlFlag,
|
|
7346
|
+
[TEMPLATE_FLAGS.no]: drawNoFlag,
|
|
7347
|
+
[TEMPLATE_FLAGS.np]: drawNpFlag,
|
|
7348
|
+
[TEMPLATE_FLAGS.nr]: drawNrFlag,
|
|
7349
|
+
[TEMPLATE_FLAGS.nu]: drawNuFlag,
|
|
7350
|
+
[TEMPLATE_FLAGS.nz]: drawNzFlag,
|
|
7351
|
+
[TEMPLATE_FLAGS.om]: drawOmFlag,
|
|
7352
|
+
[TEMPLATE_FLAGS.pa]: drawPaFlag,
|
|
7353
|
+
[TEMPLATE_FLAGS.pe]: drawPeFlag,
|
|
7354
|
+
[TEMPLATE_FLAGS.pf]: drawPfFlag,
|
|
7355
|
+
[TEMPLATE_FLAGS.pg]: drawPgFlag,
|
|
7356
|
+
[TEMPLATE_FLAGS.ph]: drawPhFlag,
|
|
7357
|
+
[TEMPLATE_FLAGS.pk]: drawPkFlag,
|
|
7358
|
+
[TEMPLATE_FLAGS.pl]: drawPlFlag,
|
|
7359
|
+
[TEMPLATE_FLAGS.pm]: drawPmFlag,
|
|
7360
|
+
[TEMPLATE_FLAGS.pn]: drawPnFlag,
|
|
7361
|
+
[TEMPLATE_FLAGS.pr]: drawPrFlag,
|
|
7362
|
+
[TEMPLATE_FLAGS.ps]: drawPsFlag,
|
|
7363
|
+
[TEMPLATE_FLAGS.pt]: drawPtFlag,
|
|
7364
|
+
[TEMPLATE_FLAGS.pw]: drawPwFlag,
|
|
7365
|
+
[TEMPLATE_FLAGS.py]: drawPyFlag,
|
|
7366
|
+
[TEMPLATE_FLAGS.qa]: drawQaFlag,
|
|
7367
|
+
[TEMPLATE_FLAGS.re]: drawReFlag,
|
|
7368
|
+
[TEMPLATE_FLAGS.ro]: drawRoFlag,
|
|
7369
|
+
[TEMPLATE_FLAGS.rs]: drawRsFlag,
|
|
7370
|
+
[TEMPLATE_FLAGS.ru]: drawRuFlag,
|
|
7371
|
+
[TEMPLATE_FLAGS.rw]: drawRwFlag,
|
|
7372
|
+
[TEMPLATE_FLAGS.sa]: drawSaFlag,
|
|
7373
|
+
[TEMPLATE_FLAGS.sb]: drawSbFlag,
|
|
7374
|
+
[TEMPLATE_FLAGS.sc]: drawScFlag,
|
|
7375
|
+
[TEMPLATE_FLAGS.sd]: drawSdFlag,
|
|
7376
|
+
[TEMPLATE_FLAGS.se]: drawSeFlag,
|
|
7377
|
+
[TEMPLATE_FLAGS.sg]: drawSgFlag,
|
|
7378
|
+
[TEMPLATE_FLAGS.sh]: drawShFlag,
|
|
7379
|
+
[TEMPLATE_FLAGS.si]: drawSiFlag,
|
|
7380
|
+
[TEMPLATE_FLAGS.sj]: drawSjFlag,
|
|
7381
|
+
[TEMPLATE_FLAGS.sk]: drawSkFlag,
|
|
7382
|
+
[TEMPLATE_FLAGS.sl]: drawSlFlag,
|
|
7383
|
+
[TEMPLATE_FLAGS.sm]: drawSmFlag,
|
|
7384
|
+
[TEMPLATE_FLAGS.sn]: drawSnFlag,
|
|
7385
|
+
[TEMPLATE_FLAGS.so]: drawSoFlag,
|
|
7386
|
+
[TEMPLATE_FLAGS.sr]: drawSrFlag,
|
|
7387
|
+
[TEMPLATE_FLAGS.ss]: drawSsFlag,
|
|
7388
|
+
[TEMPLATE_FLAGS.st]: drawStFlag,
|
|
7389
|
+
[TEMPLATE_FLAGS.sv]: drawSvFlag,
|
|
7390
|
+
[TEMPLATE_FLAGS.sx]: drawSxFlag,
|
|
7391
|
+
[TEMPLATE_FLAGS.sy]: drawSyFlag,
|
|
7392
|
+
[TEMPLATE_FLAGS.sz]: drawSzFlag,
|
|
7393
|
+
[TEMPLATE_FLAGS.tc]: drawTcFlag,
|
|
7394
|
+
[TEMPLATE_FLAGS.td]: drawTdFlag,
|
|
7395
|
+
[TEMPLATE_FLAGS.tf]: drawTfFlag,
|
|
7396
|
+
[TEMPLATE_FLAGS.tg]: drawTgFlag,
|
|
7397
|
+
[TEMPLATE_FLAGS.tj]: drawTjFlag,
|
|
7398
|
+
[TEMPLATE_FLAGS.tk]: drawTkFlag,
|
|
7399
|
+
[TEMPLATE_FLAGS.tl]: drawTlFlag,
|
|
7400
|
+
[TEMPLATE_FLAGS.tm]: drawTmFlag,
|
|
7401
|
+
[TEMPLATE_FLAGS.tn]: drawTnFlag,
|
|
7402
|
+
[TEMPLATE_FLAGS.to]: drawToFlag,
|
|
7403
|
+
[TEMPLATE_FLAGS.tr]: drawTrFlag,
|
|
7404
|
+
[TEMPLATE_FLAGS.tt]: drawTtFlag,
|
|
7405
|
+
[TEMPLATE_FLAGS.tv]: drawTvFlag,
|
|
7406
|
+
[TEMPLATE_FLAGS.tw]: drawChinaFlag,
|
|
7407
|
+
[TEMPLATE_FLAGS.tz]: drawTzFlag,
|
|
7408
|
+
[TEMPLATE_FLAGS.ua]: drawUaFlag,
|
|
7409
|
+
[TEMPLATE_FLAGS.ug]: drawUgFlag,
|
|
7410
|
+
[TEMPLATE_FLAGS.um]: drawUmFlag,
|
|
7411
|
+
[TEMPLATE_FLAGS.un]: drawUnFlag,
|
|
7412
|
+
[TEMPLATE_FLAGS.uy]: drawUyFlag,
|
|
7413
|
+
[TEMPLATE_FLAGS.uz]: drawUzFlag,
|
|
7414
|
+
[TEMPLATE_FLAGS.vc]: drawVcFlag,
|
|
7415
|
+
[TEMPLATE_FLAGS.ve]: drawVeFlag,
|
|
7416
|
+
[TEMPLATE_FLAGS.vg]: drawVgFlag,
|
|
7417
|
+
[TEMPLATE_FLAGS.vi]: drawViFlag,
|
|
7418
|
+
[TEMPLATE_FLAGS.vn]: drawVnFlag,
|
|
7419
|
+
[TEMPLATE_FLAGS.vu]: drawVuFlag,
|
|
7420
|
+
[TEMPLATE_FLAGS.wf]: drawWfFlag,
|
|
7421
|
+
[TEMPLATE_FLAGS.ws]: drawWsFlag,
|
|
7422
|
+
[TEMPLATE_FLAGS.xk]: drawXkFlag,
|
|
7423
|
+
[TEMPLATE_FLAGS.ye]: drawYeFlag,
|
|
7424
|
+
[TEMPLATE_FLAGS.yt]: drawYtFlag,
|
|
7425
|
+
[TEMPLATE_FLAGS.za]: drawZaFlag,
|
|
7426
|
+
[TEMPLATE_FLAGS.zm]: drawZmFlag,
|
|
7427
|
+
[TEMPLATE_FLAGS.zw]: drawZwFlag
|
|
7428
|
+
};
|
|
7492
7429
|
|
|
7493
|
-
;// CONCATENATED MODULE: ./src/
|
|
7430
|
+
;// CONCATENATED MODULE: ./src/flag-utils.ts
|
|
7494
7431
|
|
|
7495
|
-
/**
|
|
7496
|
-
|
|
7497
|
-
|
|
7498
|
-
|
|
7499
|
-
|
|
7500
|
-
|
|
7501
|
-
|
|
7502
|
-
|
|
7503
|
-
|
|
7504
|
-
|
|
7505
|
-
|
|
7506
|
-
|
|
7432
|
+
/** 把任意输入规范化为可绘制的国旗 emoji;非法输入回退到中国国旗。 */ function resolveFlag(value) {
|
|
7433
|
+
const input = String(value || "").trim();
|
|
7434
|
+
return isFlagEmoji(input) ? input : DEFAULT_FLAG;
|
|
7435
|
+
}
|
|
7436
|
+
/** 判断字符串是否由两个区域指示符组成,这是 Unicode 国旗 emoji 的编码形式。 */ function isFlagEmoji(value) {
|
|
7437
|
+
const codePoints = [
|
|
7438
|
+
...value
|
|
7439
|
+
].map((char)=>char.codePointAt(0));
|
|
7440
|
+
return codePoints.length === 2 && codePoints.every((codePoint)=>codePoint !== undefined && codePoint >= (/* inlined export .REGION_INDICATOR_MIN_CODE_POINT */127462) && codePoint <= (/* inlined export .REGION_INDICATOR_MAX_CODE_POINT */127487));
|
|
7441
|
+
}
|
|
7442
|
+
|
|
7443
|
+
;// CONCATENATED MODULE: ./src/rough-emoji.ts
|
|
7444
|
+
|
|
7445
|
+
|
|
7446
|
+
|
|
7447
|
+
|
|
7448
|
+
/** 绘制流程封装实例,外部入口只需要把已解析的国旗交给它。 */ let renderer;
|
|
7449
|
+
/** 页面和 QA 工具共享的绘制门面:输入 emoji,输出到指定 canvas。 */ const RoughEmoji = {
|
|
7450
|
+
draw (canvasElement, value) {
|
|
7451
|
+
withCanvas(canvasElement, ()=>renderer.draw(resolveFlag(value)));
|
|
7452
|
+
},
|
|
7453
|
+
isFlagEmoji: isFlagEmoji,
|
|
7454
|
+
resolveFlag: resolveFlag
|
|
7455
|
+
};
|
|
7456
|
+
/** 国旗绘制器:负责清理画布、绘制纸张背景、模板分发和 fallback。 */ class RoughEmojiRenderer {
|
|
7457
|
+
/** 绘制总入口:先铺纸张背景,再按已知旗帜走专门模板,未知旗帜走像素采样流程。 */ draw(flag) {
|
|
7458
|
+
this.clearCanvas();
|
|
7459
|
+
this.drawPaper();
|
|
7460
|
+
const templateDrawer = templateDrawers[flag];
|
|
7461
|
+
if (templateDrawer) {
|
|
7462
|
+
templateDrawer();
|
|
7507
7463
|
return;
|
|
7508
7464
|
}
|
|
7509
|
-
|
|
7510
|
-
const params = new URLSearchParams(this.win.location.search);
|
|
7511
|
-
const initialFlag = params.get("flag") || this.win.prompt(FLAG_PROMPT_MESSAGE, DEFAULT_FLAG) || DEFAULT_FLAG;
|
|
7512
|
-
input.value = initialFlag;
|
|
7513
|
-
this.api.draw(canvas, initialFlag);
|
|
7514
|
-
form.addEventListener("submit", (event)=>{
|
|
7515
|
-
event.preventDefault();
|
|
7516
|
-
this.api.draw(canvas, input.value);
|
|
7517
|
-
});
|
|
7518
|
-
downloadButton.addEventListener("click", ()=>{
|
|
7519
|
-
const link = this.doc.createElement("a");
|
|
7520
|
-
const resolvedFlag = this.api.resolveFlag(input.value);
|
|
7521
|
-
link.download = `${DOWNLOAD_FILE_PREFIX}-${resolvedFlag}.png`;
|
|
7522
|
-
link.href = canvas.toDataURL("image/png");
|
|
7523
|
-
link.click();
|
|
7524
|
-
});
|
|
7465
|
+
drawGenericFlag(flag);
|
|
7525
7466
|
}
|
|
7526
|
-
/**
|
|
7527
|
-
|
|
7528
|
-
|
|
7529
|
-
|
|
7530
|
-
|
|
7531
|
-
|
|
7532
|
-
|
|
7533
|
-
|
|
7534
|
-
|
|
7535
|
-
|
|
7536
|
-
|
|
7537
|
-
|
|
7538
|
-
|
|
7539
|
-
|
|
7467
|
+
/** 清空当前画布,为下一次完整重绘做准备。 */ clearCanvas() {
|
|
7468
|
+
ctx.clearRect(0, 0, size, size);
|
|
7469
|
+
}
|
|
7470
|
+
/** 绘制统一纸张底色和粗糙边框,给所有旗帜提供一致的手写载体。 */ drawPaper() {
|
|
7471
|
+
ctx.fillStyle = PALETTE.paper;
|
|
7472
|
+
ctx.fillRect(0, 0, size, size);
|
|
7473
|
+
render_context_roughCanvas.rectangle(46, 46, size - 92, size - 92, {
|
|
7474
|
+
roughness: 1.4,
|
|
7475
|
+
bowing: 0.8,
|
|
7476
|
+
stroke: PALETTE.frame,
|
|
7477
|
+
strokeWidth: 1.2,
|
|
7478
|
+
fill: PALETTE.paper,
|
|
7479
|
+
fillStyle: "hachure",
|
|
7480
|
+
hachureGap: 24,
|
|
7481
|
+
fillWeight: 0.28
|
|
7482
|
+
});
|
|
7540
7483
|
}
|
|
7541
7484
|
}
|
|
7485
|
+
renderer = new RoughEmojiRenderer();
|
|
7542
7486
|
|
|
7543
7487
|
;// CONCATENATED MODULE: ./src/index.ts
|
|
7544
7488
|
|
|
7545
7489
|
|
|
7546
7490
|
|
|
7547
|
-
|
|
7548
7491
|
exports.RoughEmoji = __webpack_exports__.RoughEmoji;
|
|
7549
|
-
exports.RoughEmojiApp = __webpack_exports__.RoughEmojiApp;
|
|
7550
7492
|
exports.isFlagEmoji = __webpack_exports__.isFlagEmoji;
|
|
7551
7493
|
exports.resolveFlag = __webpack_exports__.resolveFlag;
|
|
7552
7494
|
for(var __rspack_i in __webpack_exports__) {
|
|
7553
|
-
if(["RoughEmoji","
|
|
7495
|
+
if(["RoughEmoji","isFlagEmoji","resolveFlag"].indexOf(__rspack_i) === -1) {
|
|
7554
7496
|
exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
7555
7497
|
}
|
|
7556
7498
|
}
|