@gkd-kit/docs 0.0.1718802689476 → 0.0.1719073114309
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/.vitepress/dist/404.html +4 -4
- package/.vitepress/dist/api/index.html +7 -7
- package/.vitepress/dist/api/interfaces/RawApp.html +7 -7
- package/.vitepress/dist/api/interfaces/RawAppGroup.html +7 -7
- package/.vitepress/dist/api/interfaces/RawAppRule.html +7 -7
- package/.vitepress/dist/api/interfaces/RawAppRuleProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawCategory.html +7 -7
- package/.vitepress/dist/api/interfaces/RawCommonProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGlobalApp.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGlobalGroup.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGlobalRule.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGlobalRuleProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawGroupProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawRuleProps.html +7 -7
- package/.vitepress/dist/api/interfaces/RawSubscription.html +7 -7
- package/.vitepress/dist/api/type-aliases/IArray.html +7 -7
- package/.vitepress/dist/api/type-aliases/Integer.html +7 -7
- package/.vitepress/dist/api/type-aliases/Position.html +7 -7
- package/.vitepress/dist/assets/{api_index.md.xmBPPn_9.js → api_index.md.4ccPi_ZZ.js} +1 -1
- package/.vitepress/dist/assets/{api_index.md.xmBPPn_9.lean.js → api_index.md.4ccPi_ZZ.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawApp.md.BS-42acW.js → api_interfaces_RawApp.md.JuMOId3h.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawApp.md.BS-42acW.lean.js → api_interfaces_RawApp.md.JuMOId3h.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppGroup.md.CU7RZpUr.js → api_interfaces_RawAppGroup.md.C33JkI_D.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppGroup.md.CU7RZpUr.lean.js → api_interfaces_RawAppGroup.md.C33JkI_D.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppRule.md.RzymoFCW.js → api_interfaces_RawAppRule.md.BtiA0bcN.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppRule.md.RzymoFCW.lean.js → api_interfaces_RawAppRule.md.BtiA0bcN.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppRuleProps.md.vKW1HJZB.js → api_interfaces_RawAppRuleProps.md.C_Lr7qrT.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawAppRuleProps.md.vKW1HJZB.lean.js → api_interfaces_RawAppRuleProps.md.C_Lr7qrT.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawCategory.md.-24ujH_N.js → api_interfaces_RawCategory.md.BqxO20ig.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawCategory.md.-24ujH_N.lean.js → api_interfaces_RawCategory.md.BqxO20ig.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawCommonProps.md.DluxkaLP.js → api_interfaces_RawCommonProps.md.CWJwfhiQ.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawCommonProps.md.DluxkaLP.lean.js → api_interfaces_RawCommonProps.md.CWJwfhiQ.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalApp.md.DmwD0t08.js → api_interfaces_RawGlobalApp.md.CCc1R6pz.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalApp.md.DmwD0t08.lean.js → api_interfaces_RawGlobalApp.md.CCc1R6pz.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalGroup.md.BWqg-Td_.js → api_interfaces_RawGlobalGroup.md.BmaW8-Ss.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalGroup.md.BWqg-Td_.lean.js → api_interfaces_RawGlobalGroup.md.BmaW8-Ss.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalRule.md.Be8Jszty.js → api_interfaces_RawGlobalRule.md.BCMr3k_N.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalRule.md.Be8Jszty.lean.js → api_interfaces_RawGlobalRule.md.BCMr3k_N.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalRuleProps.md.Bbr-03uh.js → api_interfaces_RawGlobalRuleProps.md.D-CtCTHV.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGlobalRuleProps.md.Bbr-03uh.lean.js → api_interfaces_RawGlobalRuleProps.md.D-CtCTHV.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGroupProps.md.B8bb4whj.js → api_interfaces_RawGroupProps.md.DG4T80Dd.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawGroupProps.md.B8bb4whj.lean.js → api_interfaces_RawGroupProps.md.DG4T80Dd.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawRuleProps.md.C7EGOpS2.js → api_interfaces_RawRuleProps.md.CRh5KyPR.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawRuleProps.md.C7EGOpS2.lean.js → api_interfaces_RawRuleProps.md.CRh5KyPR.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawSubscription.md.D6xqrM2P.js → api_interfaces_RawSubscription.md.Cz9K1wkj.js} +1 -1
- package/.vitepress/dist/assets/{api_interfaces_RawSubscription.md.D6xqrM2P.lean.js → api_interfaces_RawSubscription.md.Cz9K1wkj.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_IArray.md.ByLuQjvL.js → api_type-aliases_IArray.md.CP0181Bu.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_IArray.md.ByLuQjvL.lean.js → api_type-aliases_IArray.md.CP0181Bu.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_Integer.md.BH-eBHWu.js → api_type-aliases_Integer.md.scVDRZuk.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_Integer.md.BH-eBHWu.lean.js → api_type-aliases_Integer.md.scVDRZuk.lean.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_Position.md.DMYceQkB.js → api_type-aliases_Position.md.qJyyaDP6.js} +1 -1
- package/.vitepress/dist/assets/{api_type-aliases_Position.md.DMYceQkB.lean.js → api_type-aliases_Position.md.qJyyaDP6.lean.js} +1 -1
- package/.vitepress/dist/assets/{app.L_zmajI0.js → app.C64QcTSx.js} +1 -1
- package/.vitepress/dist/assets/chunks/@localSearchIndexroot.0XsIOVMB.js +1 -0
- package/.vitepress/dist/assets/chunks/{VPLocalSearchBox.KXiskYsa.js → VPLocalSearchBox.T3UPu6x9.js} +2 -2
- package/.vitepress/dist/assets/chunks/{framework.DLsK1f-q.js → framework.clGm--7Y.js} +1 -1
- package/.vitepress/dist/assets/chunks/{theme.CClrrP42.js → theme.Nc1B0uCn.js} +2 -2
- package/.vitepress/dist/assets/{faq_index.md.i590QMI2.js → faq_index.md.HeStiVle.js} +1 -1
- package/.vitepress/dist/assets/{faq_index.md.i590QMI2.lean.js → faq_index.md.HeStiVle.lean.js} +1 -1
- package/.vitepress/dist/assets/guide_index.md.CcbWhPKU.js +1 -0
- package/.vitepress/dist/assets/guide_index.md.CcbWhPKU.lean.js +1 -0
- package/.vitepress/dist/assets/{index.md.D_HQ3N17.js → index.md.CLu74n4G.js} +1 -1
- package/.vitepress/dist/assets/{index.md.D_HQ3N17.lean.js → index.md.CLu74n4G.lean.js} +1 -1
- package/.vitepress/dist/assets/selector_index.md.D9wTpOfa.js +1 -0
- package/.vitepress/dist/assets/{selector_index.md.Ds06LIQ1.lean.js → selector_index.md.D9wTpOfa.lean.js} +1 -1
- package/.vitepress/dist/assets/{style.DSK-4y-v.css → style.BM63d2lR.css} +1 -1
- package/.vitepress/dist/assets/{subscription_index.md.CLJpTlet.js → subscription_index.md.R2xBKUO-.js} +1 -1
- package/.vitepress/dist/assets/subscription_index.md.R2xBKUO-.lean.js +1 -0
- package/.vitepress/dist/faq/index.html +8 -8
- package/.vitepress/dist/guide/index.html +8 -8
- package/.vitepress/dist/hashmap.json +1 -1
- package/.vitepress/dist/index.html +7 -7
- package/.vitepress/dist/selector/index.html +9 -9
- package/.vitepress/dist/subscription/index.html +8 -8
- package/package.json +1 -1
- package/.vitepress/dist/assets/chunks/@localSearchIndexroot.DtIxhb-Z.js +0 -1
- package/.vitepress/dist/assets/guide_index.md.CXzBFX7o.js +0 -8
- package/.vitepress/dist/assets/guide_index.md.CXzBFX7o.lean.js +0 -8
- package/.vitepress/dist/assets/selector_index.md.Ds06LIQ1.js +0 -1
- package/.vitepress/dist/assets/subscription_index.md.CLJpTlet.lean.js +0 -1
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{G as Et,h as vt,y as zt,c as Vt,I as mt,w as wt,l as D,a as $,a4 as Kt,D as Ht,o as Jt,t as Ot,m as x}from"./chunks/framework.DLsK1f-q.js";var H={},Yt=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then},Bt={},I={};let ct;const $t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];I.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return t*4+17};I.getSymbolTotalCodewords=function(t){return $t[t]};I.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t};I.setToSJISFunction=function(t){if(typeof t!="function")throw new Error('"toSJISFunc" is not a valid function.');ct=t};I.isKanjiModeEnabled=function(){return typeof ct<"u"};I.toSJIS=function(t){return ct(t)};var q={};(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(i){if(typeof i!="string")throw new Error("Param is not a string");switch(i.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+i)}}e.isValid=function(o){return o&&typeof o.bit<"u"&&o.bit>=0&&o.bit<4},e.from=function(o,r){if(e.isValid(o))return o;try{return t(o)}catch{return r}}})(q);function At(){this.buffer=[],this.length=0}At.prototype={get:function(e){const t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)===1},put:function(e,t){for(let i=0;i<t;i++)this.putBit((e>>>t-i-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(e){const t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}};var jt=At;function J(e){if(!e||e<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}J.prototype.set=function(e,t,i,o){const r=e*this.size+t;this.data[r]=i,o&&(this.reservedBit[r]=!0)};J.prototype.get=function(e,t){return this.data[e*this.size+t]};J.prototype.xor=function(e,t,i){this.data[e*this.size+t]^=i};J.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]};var Gt=J,Tt={};(function(e){const t=I.getSymbolSize;e.getRowColCoords=function(o){if(o===1)return[];const r=Math.floor(o/7)+2,n=t(o),s=n===145?26:Math.ceil((n-13)/(2*r-2))*2,u=[n-7];for(let a=1;a<r-1;a++)u[a]=u[a-1]-s;return u.push(6),u.reverse()},e.getPositions=function(o){const r=[],n=e.getRowColCoords(o),s=n.length;for(let u=0;u<s;u++)for(let a=0;a<s;a++)u===0&&a===0||u===0&&a===s-1||u===s-1&&a===0||r.push([n[u],n[a]]);return r}})(Tt);var It={};const qt=I.getSymbolSize,pt=7;It.getPositions=function(t){const i=qt(t);return[[0,0],[i-pt,0],[0,i-pt]]};var Nt={};(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(r){return r!=null&&r!==""&&!isNaN(r)&&r>=0&&r<=7},e.from=function(r){return e.isValid(r)?parseInt(r,10):void 0},e.getPenaltyN1=function(r){const n=r.size;let s=0,u=0,a=0,l=null,c=null;for(let E=0;E<n;E++){u=a=0,l=c=null;for(let m=0;m<n;m++){let f=r.get(E,m);f===l?u++:(u>=5&&(s+=t.N1+(u-5)),l=f,u=1),f=r.get(m,E),f===c?a++:(a>=5&&(s+=t.N1+(a-5)),c=f,a=1)}u>=5&&(s+=t.N1+(u-5)),a>=5&&(s+=t.N1+(a-5))}return s},e.getPenaltyN2=function(r){const n=r.size;let s=0;for(let u=0;u<n-1;u++)for(let a=0;a<n-1;a++){const l=r.get(u,a)+r.get(u,a+1)+r.get(u+1,a)+r.get(u+1,a+1);(l===4||l===0)&&s++}return s*t.N2},e.getPenaltyN3=function(r){const n=r.size;let s=0,u=0,a=0;for(let l=0;l<n;l++){u=a=0;for(let c=0;c<n;c++)u=u<<1&2047|r.get(l,c),c>=10&&(u===1488||u===93)&&s++,a=a<<1&2047|r.get(c,l),c>=10&&(a===1488||a===93)&&s++}return s*t.N3},e.getPenaltyN4=function(r){let n=0;const s=r.data.length;for(let a=0;a<s;a++)n+=r.data[a];return Math.abs(Math.ceil(n*100/s/5)-10)*t.N4};function i(o,r,n){switch(o){case e.Patterns.PATTERN000:return(r+n)%2===0;case e.Patterns.PATTERN001:return r%2===0;case e.Patterns.PATTERN010:return n%3===0;case e.Patterns.PATTERN011:return(r+n)%3===0;case e.Patterns.PATTERN100:return(Math.floor(r/2)+Math.floor(n/3))%2===0;case e.Patterns.PATTERN101:return r*n%2+r*n%3===0;case e.Patterns.PATTERN110:return(r*n%2+r*n%3)%2===0;case e.Patterns.PATTERN111:return(r*n%3+(r+n)%2)%2===0;default:throw new Error("bad maskPattern:"+o)}}e.applyMask=function(r,n){const s=n.size;for(let u=0;u<s;u++)for(let a=0;a<s;a++)n.isReserved(a,u)||n.xor(a,u,i(r,a,u))},e.getBestMask=function(r,n){const s=Object.keys(e.Patterns).length;let u=0,a=1/0;for(let l=0;l<s;l++){n(l),e.applyMask(l,r);const c=e.getPenaltyN1(r)+e.getPenaltyN2(r)+e.getPenaltyN3(r)+e.getPenaltyN4(r);e.applyMask(l,r),c<a&&(a=c,u=l)}return u}})(Nt);var Q={};const M=q,O=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],Y=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];Q.getBlocksCount=function(t,i){switch(i){case M.L:return O[(t-1)*4+0];case M.M:return O[(t-1)*4+1];case M.Q:return O[(t-1)*4+2];case M.H:return O[(t-1)*4+3];default:return}};Q.getTotalCodewordsCount=function(t,i){switch(i){case M.L:return Y[(t-1)*4+0];case M.M:return Y[(t-1)*4+1];case M.Q:return Y[(t-1)*4+2];case M.H:return Y[(t-1)*4+3];default:return}};var bt={},W={};const V=new Uint8Array(512),j=new Uint8Array(256);(function(){let t=1;for(let i=0;i<255;i++)V[i]=t,j[t]=i,t<<=1,t&256&&(t^=285);for(let i=255;i<512;i++)V[i]=V[i-255]})();W.log=function(t){if(t<1)throw new Error("log("+t+")");return j[t]};W.exp=function(t){return V[t]};W.mul=function(t,i){return t===0||i===0?0:V[j[t]+j[i]]};(function(e){const t=W;e.mul=function(o,r){const n=new Uint8Array(o.length+r.length-1);for(let s=0;s<o.length;s++)for(let u=0;u<r.length;u++)n[s+u]^=t.mul(o[s],r[u]);return n},e.mod=function(o,r){let n=new Uint8Array(o);for(;n.length-r.length>=0;){const s=n[0];for(let a=0;a<r.length;a++)n[a]^=t.mul(r[a],s);let u=0;for(;u<n.length&&n[u]===0;)u++;n=n.slice(u)}return n},e.generateECPolynomial=function(o){let r=new Uint8Array([1]);for(let n=0;n<o;n++)r=e.mul(r,new Uint8Array([1,t.exp(n)]));return r}})(bt);const St=bt;function ft(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}ft.prototype.initialize=function(t){this.degree=t,this.genPoly=St.generateECPolynomial(this.degree)};ft.prototype.encode=function(t){if(!this.genPoly)throw new Error("Encoder not initialized");const i=new Uint8Array(t.length+this.degree);i.set(t);const o=St.mod(i,this.genPoly),r=this.degree-o.length;if(r>0){const n=new Uint8Array(this.degree);return n.set(o,r),n}return o};var Qt=ft,Pt={},R={},dt={};dt.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40};var S={};const _t="[0-9]+",Wt="[A-Z $%*+\\-./:]+";let K="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";K=K.replace(/u/g,"\\u");const Xt="(?:(?![A-Z0-9 $%*+\\-./:]|"+K+`)(?:.|[\r
|
|
2
|
-
]))+`;S.KANJI=new RegExp(K,"g");S.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");S.BYTE=new RegExp(Xt,"g");S.NUMERIC=new RegExp(_t,"g");S.ALPHANUMERIC=new RegExp(Wt,"g");const Zt=new RegExp("^"+K+"$"),xt=new RegExp("^"+_t+"$"),te=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");S.testKanji=function(t){return Zt.test(t)};S.testNumeric=function(t){return xt.test(t)};S.testAlphanumeric=function(t){return te.test(t)};(function(e){const t=dt,i=S;e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(n,s){if(!n.ccBits)throw new Error("Invalid mode: "+n);if(!t.isValid(s))throw new Error("Invalid version: "+s);return s>=1&&s<10?n.ccBits[0]:s<27?n.ccBits[1]:n.ccBits[2]},e.getBestModeForData=function(n){return i.testNumeric(n)?e.NUMERIC:i.testAlphanumeric(n)?e.ALPHANUMERIC:i.testKanji(n)?e.KANJI:e.BYTE},e.toString=function(n){if(n&&n.id)return n.id;throw new Error("Invalid mode")},e.isValid=function(n){return n&&n.bit&&n.ccBits};function o(r){if(typeof r!="string")throw new Error("Param is not a string");switch(r.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+r)}}e.from=function(n,s){if(e.isValid(n))return n;try{return o(n)}catch{return s}}})(R);(function(e){const t=I,i=Q,o=q,r=R,n=dt,s=7973,u=t.getBCHDigit(s);function a(m,f,w){for(let p=1;p<=40;p++)if(f<=e.getCapacity(p,w,m))return p}function l(m,f){return r.getCharCountIndicator(m,f)+4}function c(m,f){let w=0;return m.forEach(function(p){const T=l(p.mode,f);w+=T+p.getBitsLength()}),w}function E(m,f){for(let w=1;w<=40;w++)if(c(m,w)<=e.getCapacity(w,f,r.MIXED))return w}e.from=function(f,w){return n.isValid(f)?parseInt(f,10):w},e.getCapacity=function(f,w,p){if(!n.isValid(f))throw new Error("Invalid QR Code version");typeof p>"u"&&(p=r.BYTE);const T=t.getSymbolTotalCodewords(f),h=i.getTotalCodewordsCount(f,w),y=(T-h)*8;if(p===r.MIXED)return y;const g=y-l(p,f);switch(p){case r.NUMERIC:return Math.floor(g/10*3);case r.ALPHANUMERIC:return Math.floor(g/11*2);case r.KANJI:return Math.floor(g/13);case r.BYTE:default:return Math.floor(g/8)}},e.getBestVersionForData=function(f,w){let p;const T=o.from(w,o.M);if(Array.isArray(f)){if(f.length>1)return E(f,T);if(f.length===0)return 1;p=f[0]}else p=f;return a(p.mode,p.getLength(),T)},e.getEncodedBits=function(f){if(!n.isValid(f)||f<7)throw new Error("Invalid QR Code version");let w=f<<12;for(;t.getBCHDigit(w)-u>=0;)w^=s<<t.getBCHDigit(w)-u;return f<<12|w}})(Pt);var Mt={};const it=I,Rt=1335,ee=21522,yt=it.getBCHDigit(Rt);Mt.getEncodedBits=function(t,i){const o=t.bit<<3|i;let r=o<<10;for(;it.getBCHDigit(r)-yt>=0;)r^=Rt<<it.getBCHDigit(r)-yt;return(o<<10|r)^ee};var Lt={};const ne=R;function U(e){this.mode=ne.NUMERIC,this.data=e.toString()}U.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)};U.prototype.getLength=function(){return this.data.length};U.prototype.getBitsLength=function(){return U.getBitsLength(this.data.length)};U.prototype.write=function(t){let i,o,r;for(i=0;i+3<=this.data.length;i+=3)o=this.data.substr(i,3),r=parseInt(o,10),t.put(r,10);const n=this.data.length-i;n>0&&(o=this.data.substr(i),r=parseInt(o,10),t.put(r,n*3+1))};var re=U;const oe=R,tt=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function k(e){this.mode=oe.ALPHANUMERIC,this.data=e}k.getBitsLength=function(t){return 11*Math.floor(t/2)+6*(t%2)};k.prototype.getLength=function(){return this.data.length};k.prototype.getBitsLength=function(){return k.getBitsLength(this.data.length)};k.prototype.write=function(t){let i;for(i=0;i+2<=this.data.length;i+=2){let o=tt.indexOf(this.data[i])*45;o+=tt.indexOf(this.data[i+1]),t.put(o,11)}this.data.length%2&&t.put(tt.indexOf(this.data[i]),6)};var ie=k,se=function(t){for(var i=[],o=t.length,r=0;r<o;r++){var n=t.charCodeAt(r);if(n>=55296&&n<=56319&&o>r+1){var s=t.charCodeAt(r+1);s>=56320&&s<=57343&&(n=(n-55296)*1024+s-56320+65536,r+=1)}if(n<128){i.push(n);continue}if(n<2048){i.push(n>>6|192),i.push(n&63|128);continue}if(n<55296||n>=57344&&n<65536){i.push(n>>12|224),i.push(n>>6&63|128),i.push(n&63|128);continue}if(n>=65536&&n<=1114111){i.push(n>>18|240),i.push(n>>12&63|128),i.push(n>>6&63|128),i.push(n&63|128);continue}i.push(239,191,189)}return new Uint8Array(i).buffer};const ae=se,ue=R;function F(e){this.mode=ue.BYTE,typeof e=="string"&&(e=ae(e)),this.data=new Uint8Array(e)}F.getBitsLength=function(t){return t*8};F.prototype.getLength=function(){return this.data.length};F.prototype.getBitsLength=function(){return F.getBitsLength(this.data.length)};F.prototype.write=function(e){for(let t=0,i=this.data.length;t<i;t++)e.put(this.data[t],8)};var le=F;const ce=R,fe=I;function v(e){this.mode=ce.KANJI,this.data=e}v.getBitsLength=function(t){return t*13};v.prototype.getLength=function(){return this.data.length};v.prototype.getBitsLength=function(){return v.getBitsLength(this.data.length)};v.prototype.write=function(e){let t;for(t=0;t<this.data.length;t++){let i=fe.toSJIS(this.data[t]);if(i>=33088&&i<=40956)i-=33088;else if(i>=57408&&i<=60351)i-=49472;else throw new Error("Invalid SJIS character: "+this.data[t]+`
|
|
3
|
-
Make sure your charset is UTF-8`);i=(i>>>8&255)*192+(i&255),e.put(i,13)}};var de=v,Dt={exports:{}};(function(e){var t={single_source_shortest_paths:function(i,o,r){var n={},s={};s[o]=0;var u=t.PriorityQueue.make();u.push(o,0);for(var a,l,c,E,m,f,w,p,T;!u.empty();){a=u.pop(),l=a.value,E=a.cost,m=i[l]||{};for(c in m)m.hasOwnProperty(c)&&(f=m[c],w=E+f,p=s[c],T=typeof s[c]>"u",(T||p>w)&&(s[c]=w,u.push(c,w),n[c]=l))}if(typeof r<"u"&&typeof s[r]>"u"){var h=["Could not find a path from ",o," to ",r,"."].join("");throw new Error(h)}return n},extract_shortest_path_from_predecessor_list:function(i,o){for(var r=[],n=o;n;)r.push(n),i[n],n=i[n];return r.reverse(),r},find_path:function(i,o,r){var n=t.single_source_shortest_paths(i,o,r);return t.extract_shortest_path_from_predecessor_list(n,r)},PriorityQueue:{make:function(i){var o=t.PriorityQueue,r={},n;i=i||{};for(n in o)o.hasOwnProperty(n)&&(r[n]=o[n]);return r.queue=[],r.sorter=i.sorter||o.default_sorter,r},default_sorter:function(i,o){return i.cost-o.cost},push:function(i,o){var r={value:i,cost:o};this.queue.push(r),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};e.exports=t})(Dt);var ge=Dt.exports;(function(e){const t=R,i=re,o=ie,r=le,n=de,s=S,u=I,a=ge;function l(h){return unescape(encodeURIComponent(h)).length}function c(h,y,g){const d=[];let C;for(;(C=h.exec(g))!==null;)d.push({data:C[0],index:C.index,mode:y,length:C[0].length});return d}function E(h){const y=c(s.NUMERIC,t.NUMERIC,h),g=c(s.ALPHANUMERIC,t.ALPHANUMERIC,h);let d,C;return u.isKanjiModeEnabled()?(d=c(s.BYTE,t.BYTE,h),C=c(s.KANJI,t.KANJI,h)):(d=c(s.BYTE_KANJI,t.BYTE,h),C=[]),y.concat(g,d,C).sort(function(A,N){return A.index-N.index}).map(function(A){return{data:A.data,mode:A.mode,length:A.length}})}function m(h,y){switch(y){case t.NUMERIC:return i.getBitsLength(h);case t.ALPHANUMERIC:return o.getBitsLength(h);case t.KANJI:return n.getBitsLength(h);case t.BYTE:return r.getBitsLength(h)}}function f(h){return h.reduce(function(y,g){const d=y.length-1>=0?y[y.length-1]:null;return d&&d.mode===g.mode?(y[y.length-1].data+=g.data,y):(y.push(g),y)},[])}function w(h){const y=[];for(let g=0;g<h.length;g++){const d=h[g];switch(d.mode){case t.NUMERIC:y.push([d,{data:d.data,mode:t.ALPHANUMERIC,length:d.length},{data:d.data,mode:t.BYTE,length:d.length}]);break;case t.ALPHANUMERIC:y.push([d,{data:d.data,mode:t.BYTE,length:d.length}]);break;case t.KANJI:y.push([d,{data:d.data,mode:t.BYTE,length:l(d.data)}]);break;case t.BYTE:y.push([{data:d.data,mode:t.BYTE,length:l(d.data)}])}}return y}function p(h,y){const g={},d={start:{}};let C=["start"];for(let B=0;B<h.length;B++){const A=h[B],N=[];for(let _=0;_<A.length;_++){const b=A[_],z=""+B+_;N.push(z),g[z]={node:b,lastCount:0},d[z]={};for(let Z=0;Z<C.length;Z++){const P=C[Z];g[P]&&g[P].node.mode===b.mode?(d[P][z]=m(g[P].lastCount+b.length,b.mode)-m(g[P].lastCount,b.mode),g[P].lastCount+=b.length):(g[P]&&(g[P].lastCount=b.length),d[P][z]=m(b.length,b.mode)+4+t.getCharCountIndicator(b.mode,y))}}C=N}for(let B=0;B<C.length;B++)d[C[B]].end=0;return{map:d,table:g}}function T(h,y){let g;const d=t.getBestModeForData(h);if(g=t.from(y,d),g!==t.BYTE&&g.bit<d.bit)throw new Error('"'+h+'" cannot be encoded with mode '+t.toString(g)+`.
|
|
4
|
-
Suggested mode is: `+t.toString(d));switch(g===t.KANJI&&!u.isKanjiModeEnabled()&&(g=t.BYTE),g){case t.NUMERIC:return new i(h);case t.ALPHANUMERIC:return new o(h);case t.KANJI:return new n(h);case t.BYTE:return new r(h)}}e.fromArray=function(y){return y.reduce(function(g,d){return typeof d=="string"?g.push(T(d,null)):d.data&&g.push(T(d.data,d.mode)),g},[])},e.fromString=function(y,g){const d=E(y,u.isKanjiModeEnabled()),C=w(d),B=p(C,g),A=a.find_path(B.map,"start","end"),N=[];for(let _=1;_<A.length-1;_++)N.push(B.table[A[_]].node);return e.fromArray(f(N))},e.rawSplit=function(y){return e.fromArray(E(y,u.isKanjiModeEnabled()))}})(Lt);const X=I,et=q,he=jt,me=Gt,we=Tt,pe=It,st=Nt,at=Q,ye=Qt,G=Pt,Ce=Mt,Ee=R,nt=Lt;function Be(e,t){const i=e.size,o=pe.getPositions(t);for(let r=0;r<o.length;r++){const n=o[r][0],s=o[r][1];for(let u=-1;u<=7;u++)if(!(n+u<=-1||i<=n+u))for(let a=-1;a<=7;a++)s+a<=-1||i<=s+a||(u>=0&&u<=6&&(a===0||a===6)||a>=0&&a<=6&&(u===0||u===6)||u>=2&&u<=4&&a>=2&&a<=4?e.set(n+u,s+a,!0,!0):e.set(n+u,s+a,!1,!0))}}function Ae(e){const t=e.size;for(let i=8;i<t-8;i++){const o=i%2===0;e.set(i,6,o,!0),e.set(6,i,o,!0)}}function Te(e,t){const i=we.getPositions(t);for(let o=0;o<i.length;o++){const r=i[o][0],n=i[o][1];for(let s=-2;s<=2;s++)for(let u=-2;u<=2;u++)s===-2||s===2||u===-2||u===2||s===0&&u===0?e.set(r+s,n+u,!0,!0):e.set(r+s,n+u,!1,!0)}}function Ie(e,t){const i=e.size,o=G.getEncodedBits(t);let r,n,s;for(let u=0;u<18;u++)r=Math.floor(u/3),n=u%3+i-8-3,s=(o>>u&1)===1,e.set(r,n,s,!0),e.set(n,r,s,!0)}function rt(e,t,i){const o=e.size,r=Ce.getEncodedBits(t,i);let n,s;for(n=0;n<15;n++)s=(r>>n&1)===1,n<6?e.set(n,8,s,!0):n<8?e.set(n+1,8,s,!0):e.set(o-15+n,8,s,!0),n<8?e.set(8,o-n-1,s,!0):n<9?e.set(8,15-n-1+1,s,!0):e.set(8,15-n-1,s,!0);e.set(o-8,8,1,!0)}function Ne(e,t){const i=e.size;let o=-1,r=i-1,n=7,s=0;for(let u=i-1;u>0;u-=2)for(u===6&&u--;;){for(let a=0;a<2;a++)if(!e.isReserved(r,u-a)){let l=!1;s<t.length&&(l=(t[s]>>>n&1)===1),e.set(r,u-a,l),n--,n===-1&&(s++,n=7)}if(r+=o,r<0||i<=r){r-=o,o=-o;break}}}function be(e,t,i){const o=new he;i.forEach(function(a){o.put(a.mode.bit,4),o.put(a.getLength(),Ee.getCharCountIndicator(a.mode,e)),a.write(o)});const r=X.getSymbolTotalCodewords(e),n=at.getTotalCodewordsCount(e,t),s=(r-n)*8;for(o.getLengthInBits()+4<=s&&o.put(0,4);o.getLengthInBits()%8!==0;)o.putBit(0);const u=(s-o.getLengthInBits())/8;for(let a=0;a<u;a++)o.put(a%2?17:236,8);return Se(o,e,t)}function Se(e,t,i){const o=X.getSymbolTotalCodewords(t),r=at.getTotalCodewordsCount(t,i),n=o-r,s=at.getBlocksCount(t,i),u=o%s,a=s-u,l=Math.floor(o/s),c=Math.floor(n/s),E=c+1,m=l-c,f=new ye(m);let w=0;const p=new Array(s),T=new Array(s);let h=0;const y=new Uint8Array(e.buffer);for(let A=0;A<s;A++){const N=A<a?c:E;p[A]=y.slice(w,w+N),T[A]=f.encode(p[A]),w+=N,h=Math.max(h,N)}const g=new Uint8Array(o);let d=0,C,B;for(C=0;C<h;C++)for(B=0;B<s;B++)C<p[B].length&&(g[d++]=p[B][C]);for(C=0;C<m;C++)for(B=0;B<s;B++)g[d++]=T[B][C];return g}function Pe(e,t,i,o){let r;if(Array.isArray(e))r=nt.fromArray(e);else if(typeof e=="string"){let l=t;if(!l){const c=nt.rawSplit(e);l=G.getBestVersionForData(c,i)}r=nt.fromString(e,l||40)}else throw new Error("Invalid data");const n=G.getBestVersionForData(r,i);if(!n)throw new Error("The amount of data is too big to be stored in a QR Code");if(!t)t=n;else if(t<n)throw new Error(`
|
|
5
|
-
The chosen QR Code version cannot contain this amount of data.
|
|
6
|
-
Minimum version required to store current data is: `+n+`.
|
|
7
|
-
`);const s=be(t,i,r),u=X.getSymbolSize(t),a=new me(u);return Be(a,t),Ae(a),Te(a,t),rt(a,i,0),t>=7&&Ie(a,t),Ne(a,s),isNaN(o)&&(o=st.getBestMask(a,rt.bind(null,a,i))),st.applyMask(o,a),rt(a,i,o),{modules:a,version:t,errorCorrectionLevel:i,maskPattern:o,segments:r}}Bt.create=function(t,i){if(typeof t>"u"||t==="")throw new Error("No input text");let o=et.M,r,n;return typeof i<"u"&&(o=et.from(i.errorCorrectionLevel,et.M),r=G.from(i.version),n=st.from(i.maskPattern),i.toSJISFunc&&X.setToSJISFunction(i.toSJISFunc)),Pe(t,r,o,n)};var Ut={},gt={};(function(e){function t(i){if(typeof i=="number"&&(i=i.toString()),typeof i!="string")throw new Error("Color should be defined as hex string");let o=i.slice().replace("#","").split("");if(o.length<3||o.length===5||o.length>8)throw new Error("Invalid hex color: "+i);(o.length===3||o.length===4)&&(o=Array.prototype.concat.apply([],o.map(function(n){return[n,n]}))),o.length===6&&o.push("F","F");const r=parseInt(o.join(""),16);return{r:r>>24&255,g:r>>16&255,b:r>>8&255,a:r&255,hex:"#"+o.slice(0,6).join("")}}e.getOptions=function(o){o||(o={}),o.color||(o.color={});const r=typeof o.margin>"u"||o.margin===null||o.margin<0?4:o.margin,n=o.width&&o.width>=21?o.width:void 0,s=o.scale||4;return{width:n,scale:n?4:s,margin:r,color:{dark:t(o.color.dark||"#000000ff"),light:t(o.color.light||"#ffffffff")},type:o.type,rendererOpts:o.rendererOpts||{}}},e.getScale=function(o,r){return r.width&&r.width>=o+r.margin*2?r.width/(o+r.margin*2):r.scale},e.getImageWidth=function(o,r){const n=e.getScale(o,r);return Math.floor((o+r.margin*2)*n)},e.qrToImageData=function(o,r,n){const s=r.modules.size,u=r.modules.data,a=e.getScale(s,n),l=Math.floor((s+n.margin*2)*a),c=n.margin*a,E=[n.color.light,n.color.dark];for(let m=0;m<l;m++)for(let f=0;f<l;f++){let w=(m*l+f)*4,p=n.color.light;if(m>=c&&f>=c&&m<l-c&&f<l-c){const T=Math.floor((m-c)/a),h=Math.floor((f-c)/a);p=E[u[T*s+h]?1:0]}o[w++]=p.r,o[w++]=p.g,o[w++]=p.b,o[w]=p.a}}})(gt);(function(e){const t=gt;function i(r,n,s){r.clearRect(0,0,n.width,n.height),n.style||(n.style={}),n.height=s,n.width=s,n.style.height=s+"px",n.style.width=s+"px"}function o(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}e.render=function(n,s,u){let a=u,l=s;typeof a>"u"&&(!s||!s.getContext)&&(a=s,s=void 0),s||(l=o()),a=t.getOptions(a);const c=t.getImageWidth(n.modules.size,a),E=l.getContext("2d"),m=E.createImageData(c,c);return t.qrToImageData(m.data,n,a),i(E,l,c),E.putImageData(m,0,0),l},e.renderToDataURL=function(n,s,u){let a=u;typeof a>"u"&&(!s||!s.getContext)&&(a=s,s=void 0),a||(a={});const l=e.render(n,s,a),c=a.type||"image/png",E=a.rendererOpts||{};return l.toDataURL(c,E.quality)}})(Ut);var kt={};const _e=gt;function Ct(e,t){const i=e.a/255,o=t+'="'+e.hex+'"';return i<1?o+" "+t+'-opacity="'+i.toFixed(2).slice(1)+'"':o}function ot(e,t,i){let o=e+t;return typeof i<"u"&&(o+=" "+i),o}function Me(e,t,i){let o="",r=0,n=!1,s=0;for(let u=0;u<e.length;u++){const a=Math.floor(u%t),l=Math.floor(u/t);!a&&!n&&(n=!0),e[u]?(s++,u>0&&a>0&&e[u-1]||(o+=n?ot("M",a+i,.5+l+i):ot("m",r,0),r=0,n=!1),a+1<t&&e[u+1]||(o+=ot("h",s),s=0)):r++}return o}kt.render=function(t,i,o){const r=_e.getOptions(i),n=t.modules.size,s=t.modules.data,u=n+r.margin*2,a=r.color.light.a?"<path "+Ct(r.color.light,"fill")+' d="M0 0h'+u+"v"+u+'H0z"/>':"",l="<path "+Ct(r.color.dark,"stroke")+' d="'+Me(s,n,r.margin)+'"/>',c='viewBox="0 0 '+u+" "+u+'"',m='<svg xmlns="http://www.w3.org/2000/svg" '+(r.width?'width="'+r.width+'" height="'+r.width+'" ':"")+c+' shape-rendering="crispEdges">'+a+l+`</svg>
|
|
8
|
-
`;return typeof o=="function"&&o(null,m),m};const Re=Yt,ut=Bt,Ft=Ut,Le=kt;function ht(e,t,i,o,r){const n=[].slice.call(arguments,1),s=n.length,u=typeof n[s-1]=="function";if(!u&&!Re())throw new Error("Callback required as last argument");if(u){if(s<2)throw new Error("Too few arguments provided");s===2?(r=i,i=t,t=o=void 0):s===3&&(t.getContext&&typeof r>"u"?(r=o,o=void 0):(r=o,o=i,i=t,t=void 0))}else{if(s<1)throw new Error("Too few arguments provided");return s===1?(i=t,t=o=void 0):s===2&&!t.getContext&&(o=i,i=t,t=void 0),new Promise(function(a,l){try{const c=ut.create(i,o);a(e(c,t,o))}catch(c){l(c)}})}try{const a=ut.create(i,o);r(null,e(a,t,o))}catch(a){r(a)}}H.create=ut.create;H.toCanvas=ht.bind(null,Ft.render);H.toDataURL=ht.bind(null,Ft.renderToDataURL);H.toString=ht.bind(null,function(e,t,i){return Le.render(e,i)});const L=Et(""),De=vt(()=>L.value.split("/").at(-1)||""),lt=Et("");zt(async()=>{if(!L.value){lt.value="";return}lt.value=await H.toDataURL(L.value,{width:256,margin:2})});L.value=localStorage.getItem("apkUrl")||"",fetch("https://registry.npmmirror.com/@gkd-kit/app/latest/files").then(async t=>{L.value=new URL((await t.json()).downloadUrl,t.url).href,localStorage.setItem("apkUrl",L.value)});const Ue=D("h1",{id:"title",tabindex:"-1"},[$("开始使用 "),D("a",{class:"header-anchor",href:"#title","aria-label":'Permalink to "开始使用 {#title}"'},"")],-1),ke=D("h2",{id:"install",tabindex:"-1"},[$("下载安装 "),D("a",{class:"header-anchor",href:"#install","aria-label":'Permalink to "下载安装 {#install}"'},"")],-1),Fe=["href"],ve=D("p",null,"或者扫描下方二维码即可下载最新版本",-1),ze=["src"],Ve=Kt('<p>请注意上面的链接/二维码为动态生成, 如需分享请复制地址栏链接</p><p>海外用户可前往源仓库 <a href="https://github.com/gkd-kit/gkd/releases/latest" target="_blank" rel="noreferrer">github-releases</a> 下载</p><p>下载完毕后, 在您的 Android 手机上安装并打开</p><h2 id="usage" tabindex="-1">授权使用 <a class="header-anchor" href="#usage" aria-label="Permalink to "授权使用 {#usage}""></a></h2><p>打开后进入 GKD 的首页, 要想 GKD 正常工作需要授权无障碍权限</p><p>点击无障碍权限右侧的 <code>授权</code> 按钮即可前往设置的无障碍界面授权</p><p>以 Xiaomi HyperOS 为例, 下面为完整的授权流程截图</p><table><thead><tr><th></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0001.png" alt="image"></td><td><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0002.png" alt="image"></td><td><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0003.png" alt="image"></td><td><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0004.png" alt="image"></td></tr><tr><td><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0005.png" alt="image"></td><td><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0006.png" alt="image"></td><td><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0007.png" alt="image"></td><td><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0008.png" alt="image"></td></tr></tbody></table><p>如果您的手机的无障碍列表界面无法授权 GKD 或者显示 <code>受限制的设置(出于安全考虑,此设置目前不可用)</code></p><p>这是 Android13 的限制, 对于不在应用商店等可信任来源安装的应用不能直接开启无障碍权限</p><p>您需要解除这个限制, 解除限制的方法在 <a href="/faq/">疑难解答</a></p><p>限制解除后, 重新按照上面的授权流程即可开启无障碍权限</p>',12),Je=JSON.parse('{"title":"开始使用","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1718802650000}'),Ke={name:"guide/index.md"},Oe=Object.assign(Ke,{setup(e){return(t,i)=>{const o=Ht("ClientOnly");return Jt(),Vt("div",null,[Ue,ke,mt(o,null,{default:wt(()=>[$(" 大陆用户可点击 "),D("a",{rel:"noopener noreferrer",href:x(L)},Ot(x(De)),9,Fe),$(" 下载 ")]),_:1}),ve,mt(o,null,{default:wt(()=>[D("img",{src:x(lt),"data-zoomable":"",alt:""},null,8,ze)]),_:1}),Ve])}}});export{Je as __pageData,Oe as default};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{G as Et,h as vt,y as zt,c as Vt,I as mt,w as wt,l as D,a as $,a4 as Kt,D as Ht,o as Jt,t as Ot,m as x}from"./chunks/framework.DLsK1f-q.js";var H={},Yt=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then},Bt={},I={};let ct;const $t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];I.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return t*4+17};I.getSymbolTotalCodewords=function(t){return $t[t]};I.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t};I.setToSJISFunction=function(t){if(typeof t!="function")throw new Error('"toSJISFunc" is not a valid function.');ct=t};I.isKanjiModeEnabled=function(){return typeof ct<"u"};I.toSJIS=function(t){return ct(t)};var q={};(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(i){if(typeof i!="string")throw new Error("Param is not a string");switch(i.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+i)}}e.isValid=function(o){return o&&typeof o.bit<"u"&&o.bit>=0&&o.bit<4},e.from=function(o,r){if(e.isValid(o))return o;try{return t(o)}catch{return r}}})(q);function At(){this.buffer=[],this.length=0}At.prototype={get:function(e){const t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)===1},put:function(e,t){for(let i=0;i<t;i++)this.putBit((e>>>t-i-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(e){const t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}};var jt=At;function J(e){if(!e||e<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}J.prototype.set=function(e,t,i,o){const r=e*this.size+t;this.data[r]=i,o&&(this.reservedBit[r]=!0)};J.prototype.get=function(e,t){return this.data[e*this.size+t]};J.prototype.xor=function(e,t,i){this.data[e*this.size+t]^=i};J.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]};var Gt=J,Tt={};(function(e){const t=I.getSymbolSize;e.getRowColCoords=function(o){if(o===1)return[];const r=Math.floor(o/7)+2,n=t(o),s=n===145?26:Math.ceil((n-13)/(2*r-2))*2,u=[n-7];for(let a=1;a<r-1;a++)u[a]=u[a-1]-s;return u.push(6),u.reverse()},e.getPositions=function(o){const r=[],n=e.getRowColCoords(o),s=n.length;for(let u=0;u<s;u++)for(let a=0;a<s;a++)u===0&&a===0||u===0&&a===s-1||u===s-1&&a===0||r.push([n[u],n[a]]);return r}})(Tt);var It={};const qt=I.getSymbolSize,pt=7;It.getPositions=function(t){const i=qt(t);return[[0,0],[i-pt,0],[0,i-pt]]};var Nt={};(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(r){return r!=null&&r!==""&&!isNaN(r)&&r>=0&&r<=7},e.from=function(r){return e.isValid(r)?parseInt(r,10):void 0},e.getPenaltyN1=function(r){const n=r.size;let s=0,u=0,a=0,l=null,c=null;for(let E=0;E<n;E++){u=a=0,l=c=null;for(let m=0;m<n;m++){let f=r.get(E,m);f===l?u++:(u>=5&&(s+=t.N1+(u-5)),l=f,u=1),f=r.get(m,E),f===c?a++:(a>=5&&(s+=t.N1+(a-5)),c=f,a=1)}u>=5&&(s+=t.N1+(u-5)),a>=5&&(s+=t.N1+(a-5))}return s},e.getPenaltyN2=function(r){const n=r.size;let s=0;for(let u=0;u<n-1;u++)for(let a=0;a<n-1;a++){const l=r.get(u,a)+r.get(u,a+1)+r.get(u+1,a)+r.get(u+1,a+1);(l===4||l===0)&&s++}return s*t.N2},e.getPenaltyN3=function(r){const n=r.size;let s=0,u=0,a=0;for(let l=0;l<n;l++){u=a=0;for(let c=0;c<n;c++)u=u<<1&2047|r.get(l,c),c>=10&&(u===1488||u===93)&&s++,a=a<<1&2047|r.get(c,l),c>=10&&(a===1488||a===93)&&s++}return s*t.N3},e.getPenaltyN4=function(r){let n=0;const s=r.data.length;for(let a=0;a<s;a++)n+=r.data[a];return Math.abs(Math.ceil(n*100/s/5)-10)*t.N4};function i(o,r,n){switch(o){case e.Patterns.PATTERN000:return(r+n)%2===0;case e.Patterns.PATTERN001:return r%2===0;case e.Patterns.PATTERN010:return n%3===0;case e.Patterns.PATTERN011:return(r+n)%3===0;case e.Patterns.PATTERN100:return(Math.floor(r/2)+Math.floor(n/3))%2===0;case e.Patterns.PATTERN101:return r*n%2+r*n%3===0;case e.Patterns.PATTERN110:return(r*n%2+r*n%3)%2===0;case e.Patterns.PATTERN111:return(r*n%3+(r+n)%2)%2===0;default:throw new Error("bad maskPattern:"+o)}}e.applyMask=function(r,n){const s=n.size;for(let u=0;u<s;u++)for(let a=0;a<s;a++)n.isReserved(a,u)||n.xor(a,u,i(r,a,u))},e.getBestMask=function(r,n){const s=Object.keys(e.Patterns).length;let u=0,a=1/0;for(let l=0;l<s;l++){n(l),e.applyMask(l,r);const c=e.getPenaltyN1(r)+e.getPenaltyN2(r)+e.getPenaltyN3(r)+e.getPenaltyN4(r);e.applyMask(l,r),c<a&&(a=c,u=l)}return u}})(Nt);var Q={};const M=q,O=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],Y=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];Q.getBlocksCount=function(t,i){switch(i){case M.L:return O[(t-1)*4+0];case M.M:return O[(t-1)*4+1];case M.Q:return O[(t-1)*4+2];case M.H:return O[(t-1)*4+3];default:return}};Q.getTotalCodewordsCount=function(t,i){switch(i){case M.L:return Y[(t-1)*4+0];case M.M:return Y[(t-1)*4+1];case M.Q:return Y[(t-1)*4+2];case M.H:return Y[(t-1)*4+3];default:return}};var bt={},W={};const V=new Uint8Array(512),j=new Uint8Array(256);(function(){let t=1;for(let i=0;i<255;i++)V[i]=t,j[t]=i,t<<=1,t&256&&(t^=285);for(let i=255;i<512;i++)V[i]=V[i-255]})();W.log=function(t){if(t<1)throw new Error("log("+t+")");return j[t]};W.exp=function(t){return V[t]};W.mul=function(t,i){return t===0||i===0?0:V[j[t]+j[i]]};(function(e){const t=W;e.mul=function(o,r){const n=new Uint8Array(o.length+r.length-1);for(let s=0;s<o.length;s++)for(let u=0;u<r.length;u++)n[s+u]^=t.mul(o[s],r[u]);return n},e.mod=function(o,r){let n=new Uint8Array(o);for(;n.length-r.length>=0;){const s=n[0];for(let a=0;a<r.length;a++)n[a]^=t.mul(r[a],s);let u=0;for(;u<n.length&&n[u]===0;)u++;n=n.slice(u)}return n},e.generateECPolynomial=function(o){let r=new Uint8Array([1]);for(let n=0;n<o;n++)r=e.mul(r,new Uint8Array([1,t.exp(n)]));return r}})(bt);const St=bt;function ft(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}ft.prototype.initialize=function(t){this.degree=t,this.genPoly=St.generateECPolynomial(this.degree)};ft.prototype.encode=function(t){if(!this.genPoly)throw new Error("Encoder not initialized");const i=new Uint8Array(t.length+this.degree);i.set(t);const o=St.mod(i,this.genPoly),r=this.degree-o.length;if(r>0){const n=new Uint8Array(this.degree);return n.set(o,r),n}return o};var Qt=ft,Pt={},R={},dt={};dt.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40};var S={};const _t="[0-9]+",Wt="[A-Z $%*+\\-./:]+";let K="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";K=K.replace(/u/g,"\\u");const Xt="(?:(?![A-Z0-9 $%*+\\-./:]|"+K+`)(?:.|[\r
|
|
2
|
-
]))+`;S.KANJI=new RegExp(K,"g");S.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");S.BYTE=new RegExp(Xt,"g");S.NUMERIC=new RegExp(_t,"g");S.ALPHANUMERIC=new RegExp(Wt,"g");const Zt=new RegExp("^"+K+"$"),xt=new RegExp("^"+_t+"$"),te=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");S.testKanji=function(t){return Zt.test(t)};S.testNumeric=function(t){return xt.test(t)};S.testAlphanumeric=function(t){return te.test(t)};(function(e){const t=dt,i=S;e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(n,s){if(!n.ccBits)throw new Error("Invalid mode: "+n);if(!t.isValid(s))throw new Error("Invalid version: "+s);return s>=1&&s<10?n.ccBits[0]:s<27?n.ccBits[1]:n.ccBits[2]},e.getBestModeForData=function(n){return i.testNumeric(n)?e.NUMERIC:i.testAlphanumeric(n)?e.ALPHANUMERIC:i.testKanji(n)?e.KANJI:e.BYTE},e.toString=function(n){if(n&&n.id)return n.id;throw new Error("Invalid mode")},e.isValid=function(n){return n&&n.bit&&n.ccBits};function o(r){if(typeof r!="string")throw new Error("Param is not a string");switch(r.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+r)}}e.from=function(n,s){if(e.isValid(n))return n;try{return o(n)}catch{return s}}})(R);(function(e){const t=I,i=Q,o=q,r=R,n=dt,s=7973,u=t.getBCHDigit(s);function a(m,f,w){for(let p=1;p<=40;p++)if(f<=e.getCapacity(p,w,m))return p}function l(m,f){return r.getCharCountIndicator(m,f)+4}function c(m,f){let w=0;return m.forEach(function(p){const T=l(p.mode,f);w+=T+p.getBitsLength()}),w}function E(m,f){for(let w=1;w<=40;w++)if(c(m,w)<=e.getCapacity(w,f,r.MIXED))return w}e.from=function(f,w){return n.isValid(f)?parseInt(f,10):w},e.getCapacity=function(f,w,p){if(!n.isValid(f))throw new Error("Invalid QR Code version");typeof p>"u"&&(p=r.BYTE);const T=t.getSymbolTotalCodewords(f),h=i.getTotalCodewordsCount(f,w),y=(T-h)*8;if(p===r.MIXED)return y;const g=y-l(p,f);switch(p){case r.NUMERIC:return Math.floor(g/10*3);case r.ALPHANUMERIC:return Math.floor(g/11*2);case r.KANJI:return Math.floor(g/13);case r.BYTE:default:return Math.floor(g/8)}},e.getBestVersionForData=function(f,w){let p;const T=o.from(w,o.M);if(Array.isArray(f)){if(f.length>1)return E(f,T);if(f.length===0)return 1;p=f[0]}else p=f;return a(p.mode,p.getLength(),T)},e.getEncodedBits=function(f){if(!n.isValid(f)||f<7)throw new Error("Invalid QR Code version");let w=f<<12;for(;t.getBCHDigit(w)-u>=0;)w^=s<<t.getBCHDigit(w)-u;return f<<12|w}})(Pt);var Mt={};const it=I,Rt=1335,ee=21522,yt=it.getBCHDigit(Rt);Mt.getEncodedBits=function(t,i){const o=t.bit<<3|i;let r=o<<10;for(;it.getBCHDigit(r)-yt>=0;)r^=Rt<<it.getBCHDigit(r)-yt;return(o<<10|r)^ee};var Lt={};const ne=R;function U(e){this.mode=ne.NUMERIC,this.data=e.toString()}U.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)};U.prototype.getLength=function(){return this.data.length};U.prototype.getBitsLength=function(){return U.getBitsLength(this.data.length)};U.prototype.write=function(t){let i,o,r;for(i=0;i+3<=this.data.length;i+=3)o=this.data.substr(i,3),r=parseInt(o,10),t.put(r,10);const n=this.data.length-i;n>0&&(o=this.data.substr(i),r=parseInt(o,10),t.put(r,n*3+1))};var re=U;const oe=R,tt=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function k(e){this.mode=oe.ALPHANUMERIC,this.data=e}k.getBitsLength=function(t){return 11*Math.floor(t/2)+6*(t%2)};k.prototype.getLength=function(){return this.data.length};k.prototype.getBitsLength=function(){return k.getBitsLength(this.data.length)};k.prototype.write=function(t){let i;for(i=0;i+2<=this.data.length;i+=2){let o=tt.indexOf(this.data[i])*45;o+=tt.indexOf(this.data[i+1]),t.put(o,11)}this.data.length%2&&t.put(tt.indexOf(this.data[i]),6)};var ie=k,se=function(t){for(var i=[],o=t.length,r=0;r<o;r++){var n=t.charCodeAt(r);if(n>=55296&&n<=56319&&o>r+1){var s=t.charCodeAt(r+1);s>=56320&&s<=57343&&(n=(n-55296)*1024+s-56320+65536,r+=1)}if(n<128){i.push(n);continue}if(n<2048){i.push(n>>6|192),i.push(n&63|128);continue}if(n<55296||n>=57344&&n<65536){i.push(n>>12|224),i.push(n>>6&63|128),i.push(n&63|128);continue}if(n>=65536&&n<=1114111){i.push(n>>18|240),i.push(n>>12&63|128),i.push(n>>6&63|128),i.push(n&63|128);continue}i.push(239,191,189)}return new Uint8Array(i).buffer};const ae=se,ue=R;function F(e){this.mode=ue.BYTE,typeof e=="string"&&(e=ae(e)),this.data=new Uint8Array(e)}F.getBitsLength=function(t){return t*8};F.prototype.getLength=function(){return this.data.length};F.prototype.getBitsLength=function(){return F.getBitsLength(this.data.length)};F.prototype.write=function(e){for(let t=0,i=this.data.length;t<i;t++)e.put(this.data[t],8)};var le=F;const ce=R,fe=I;function v(e){this.mode=ce.KANJI,this.data=e}v.getBitsLength=function(t){return t*13};v.prototype.getLength=function(){return this.data.length};v.prototype.getBitsLength=function(){return v.getBitsLength(this.data.length)};v.prototype.write=function(e){let t;for(t=0;t<this.data.length;t++){let i=fe.toSJIS(this.data[t]);if(i>=33088&&i<=40956)i-=33088;else if(i>=57408&&i<=60351)i-=49472;else throw new Error("Invalid SJIS character: "+this.data[t]+`
|
|
3
|
-
Make sure your charset is UTF-8`);i=(i>>>8&255)*192+(i&255),e.put(i,13)}};var de=v,Dt={exports:{}};(function(e){var t={single_source_shortest_paths:function(i,o,r){var n={},s={};s[o]=0;var u=t.PriorityQueue.make();u.push(o,0);for(var a,l,c,E,m,f,w,p,T;!u.empty();){a=u.pop(),l=a.value,E=a.cost,m=i[l]||{};for(c in m)m.hasOwnProperty(c)&&(f=m[c],w=E+f,p=s[c],T=typeof s[c]>"u",(T||p>w)&&(s[c]=w,u.push(c,w),n[c]=l))}if(typeof r<"u"&&typeof s[r]>"u"){var h=["Could not find a path from ",o," to ",r,"."].join("");throw new Error(h)}return n},extract_shortest_path_from_predecessor_list:function(i,o){for(var r=[],n=o;n;)r.push(n),i[n],n=i[n];return r.reverse(),r},find_path:function(i,o,r){var n=t.single_source_shortest_paths(i,o,r);return t.extract_shortest_path_from_predecessor_list(n,r)},PriorityQueue:{make:function(i){var o=t.PriorityQueue,r={},n;i=i||{};for(n in o)o.hasOwnProperty(n)&&(r[n]=o[n]);return r.queue=[],r.sorter=i.sorter||o.default_sorter,r},default_sorter:function(i,o){return i.cost-o.cost},push:function(i,o){var r={value:i,cost:o};this.queue.push(r),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};e.exports=t})(Dt);var ge=Dt.exports;(function(e){const t=R,i=re,o=ie,r=le,n=de,s=S,u=I,a=ge;function l(h){return unescape(encodeURIComponent(h)).length}function c(h,y,g){const d=[];let C;for(;(C=h.exec(g))!==null;)d.push({data:C[0],index:C.index,mode:y,length:C[0].length});return d}function E(h){const y=c(s.NUMERIC,t.NUMERIC,h),g=c(s.ALPHANUMERIC,t.ALPHANUMERIC,h);let d,C;return u.isKanjiModeEnabled()?(d=c(s.BYTE,t.BYTE,h),C=c(s.KANJI,t.KANJI,h)):(d=c(s.BYTE_KANJI,t.BYTE,h),C=[]),y.concat(g,d,C).sort(function(A,N){return A.index-N.index}).map(function(A){return{data:A.data,mode:A.mode,length:A.length}})}function m(h,y){switch(y){case t.NUMERIC:return i.getBitsLength(h);case t.ALPHANUMERIC:return o.getBitsLength(h);case t.KANJI:return n.getBitsLength(h);case t.BYTE:return r.getBitsLength(h)}}function f(h){return h.reduce(function(y,g){const d=y.length-1>=0?y[y.length-1]:null;return d&&d.mode===g.mode?(y[y.length-1].data+=g.data,y):(y.push(g),y)},[])}function w(h){const y=[];for(let g=0;g<h.length;g++){const d=h[g];switch(d.mode){case t.NUMERIC:y.push([d,{data:d.data,mode:t.ALPHANUMERIC,length:d.length},{data:d.data,mode:t.BYTE,length:d.length}]);break;case t.ALPHANUMERIC:y.push([d,{data:d.data,mode:t.BYTE,length:d.length}]);break;case t.KANJI:y.push([d,{data:d.data,mode:t.BYTE,length:l(d.data)}]);break;case t.BYTE:y.push([{data:d.data,mode:t.BYTE,length:l(d.data)}])}}return y}function p(h,y){const g={},d={start:{}};let C=["start"];for(let B=0;B<h.length;B++){const A=h[B],N=[];for(let _=0;_<A.length;_++){const b=A[_],z=""+B+_;N.push(z),g[z]={node:b,lastCount:0},d[z]={};for(let Z=0;Z<C.length;Z++){const P=C[Z];g[P]&&g[P].node.mode===b.mode?(d[P][z]=m(g[P].lastCount+b.length,b.mode)-m(g[P].lastCount,b.mode),g[P].lastCount+=b.length):(g[P]&&(g[P].lastCount=b.length),d[P][z]=m(b.length,b.mode)+4+t.getCharCountIndicator(b.mode,y))}}C=N}for(let B=0;B<C.length;B++)d[C[B]].end=0;return{map:d,table:g}}function T(h,y){let g;const d=t.getBestModeForData(h);if(g=t.from(y,d),g!==t.BYTE&&g.bit<d.bit)throw new Error('"'+h+'" cannot be encoded with mode '+t.toString(g)+`.
|
|
4
|
-
Suggested mode is: `+t.toString(d));switch(g===t.KANJI&&!u.isKanjiModeEnabled()&&(g=t.BYTE),g){case t.NUMERIC:return new i(h);case t.ALPHANUMERIC:return new o(h);case t.KANJI:return new n(h);case t.BYTE:return new r(h)}}e.fromArray=function(y){return y.reduce(function(g,d){return typeof d=="string"?g.push(T(d,null)):d.data&&g.push(T(d.data,d.mode)),g},[])},e.fromString=function(y,g){const d=E(y,u.isKanjiModeEnabled()),C=w(d),B=p(C,g),A=a.find_path(B.map,"start","end"),N=[];for(let _=1;_<A.length-1;_++)N.push(B.table[A[_]].node);return e.fromArray(f(N))},e.rawSplit=function(y){return e.fromArray(E(y,u.isKanjiModeEnabled()))}})(Lt);const X=I,et=q,he=jt,me=Gt,we=Tt,pe=It,st=Nt,at=Q,ye=Qt,G=Pt,Ce=Mt,Ee=R,nt=Lt;function Be(e,t){const i=e.size,o=pe.getPositions(t);for(let r=0;r<o.length;r++){const n=o[r][0],s=o[r][1];for(let u=-1;u<=7;u++)if(!(n+u<=-1||i<=n+u))for(let a=-1;a<=7;a++)s+a<=-1||i<=s+a||(u>=0&&u<=6&&(a===0||a===6)||a>=0&&a<=6&&(u===0||u===6)||u>=2&&u<=4&&a>=2&&a<=4?e.set(n+u,s+a,!0,!0):e.set(n+u,s+a,!1,!0))}}function Ae(e){const t=e.size;for(let i=8;i<t-8;i++){const o=i%2===0;e.set(i,6,o,!0),e.set(6,i,o,!0)}}function Te(e,t){const i=we.getPositions(t);for(let o=0;o<i.length;o++){const r=i[o][0],n=i[o][1];for(let s=-2;s<=2;s++)for(let u=-2;u<=2;u++)s===-2||s===2||u===-2||u===2||s===0&&u===0?e.set(r+s,n+u,!0,!0):e.set(r+s,n+u,!1,!0)}}function Ie(e,t){const i=e.size,o=G.getEncodedBits(t);let r,n,s;for(let u=0;u<18;u++)r=Math.floor(u/3),n=u%3+i-8-3,s=(o>>u&1)===1,e.set(r,n,s,!0),e.set(n,r,s,!0)}function rt(e,t,i){const o=e.size,r=Ce.getEncodedBits(t,i);let n,s;for(n=0;n<15;n++)s=(r>>n&1)===1,n<6?e.set(n,8,s,!0):n<8?e.set(n+1,8,s,!0):e.set(o-15+n,8,s,!0),n<8?e.set(8,o-n-1,s,!0):n<9?e.set(8,15-n-1+1,s,!0):e.set(8,15-n-1,s,!0);e.set(o-8,8,1,!0)}function Ne(e,t){const i=e.size;let o=-1,r=i-1,n=7,s=0;for(let u=i-1;u>0;u-=2)for(u===6&&u--;;){for(let a=0;a<2;a++)if(!e.isReserved(r,u-a)){let l=!1;s<t.length&&(l=(t[s]>>>n&1)===1),e.set(r,u-a,l),n--,n===-1&&(s++,n=7)}if(r+=o,r<0||i<=r){r-=o,o=-o;break}}}function be(e,t,i){const o=new he;i.forEach(function(a){o.put(a.mode.bit,4),o.put(a.getLength(),Ee.getCharCountIndicator(a.mode,e)),a.write(o)});const r=X.getSymbolTotalCodewords(e),n=at.getTotalCodewordsCount(e,t),s=(r-n)*8;for(o.getLengthInBits()+4<=s&&o.put(0,4);o.getLengthInBits()%8!==0;)o.putBit(0);const u=(s-o.getLengthInBits())/8;for(let a=0;a<u;a++)o.put(a%2?17:236,8);return Se(o,e,t)}function Se(e,t,i){const o=X.getSymbolTotalCodewords(t),r=at.getTotalCodewordsCount(t,i),n=o-r,s=at.getBlocksCount(t,i),u=o%s,a=s-u,l=Math.floor(o/s),c=Math.floor(n/s),E=c+1,m=l-c,f=new ye(m);let w=0;const p=new Array(s),T=new Array(s);let h=0;const y=new Uint8Array(e.buffer);for(let A=0;A<s;A++){const N=A<a?c:E;p[A]=y.slice(w,w+N),T[A]=f.encode(p[A]),w+=N,h=Math.max(h,N)}const g=new Uint8Array(o);let d=0,C,B;for(C=0;C<h;C++)for(B=0;B<s;B++)C<p[B].length&&(g[d++]=p[B][C]);for(C=0;C<m;C++)for(B=0;B<s;B++)g[d++]=T[B][C];return g}function Pe(e,t,i,o){let r;if(Array.isArray(e))r=nt.fromArray(e);else if(typeof e=="string"){let l=t;if(!l){const c=nt.rawSplit(e);l=G.getBestVersionForData(c,i)}r=nt.fromString(e,l||40)}else throw new Error("Invalid data");const n=G.getBestVersionForData(r,i);if(!n)throw new Error("The amount of data is too big to be stored in a QR Code");if(!t)t=n;else if(t<n)throw new Error(`
|
|
5
|
-
The chosen QR Code version cannot contain this amount of data.
|
|
6
|
-
Minimum version required to store current data is: `+n+`.
|
|
7
|
-
`);const s=be(t,i,r),u=X.getSymbolSize(t),a=new me(u);return Be(a,t),Ae(a),Te(a,t),rt(a,i,0),t>=7&&Ie(a,t),Ne(a,s),isNaN(o)&&(o=st.getBestMask(a,rt.bind(null,a,i))),st.applyMask(o,a),rt(a,i,o),{modules:a,version:t,errorCorrectionLevel:i,maskPattern:o,segments:r}}Bt.create=function(t,i){if(typeof t>"u"||t==="")throw new Error("No input text");let o=et.M,r,n;return typeof i<"u"&&(o=et.from(i.errorCorrectionLevel,et.M),r=G.from(i.version),n=st.from(i.maskPattern),i.toSJISFunc&&X.setToSJISFunction(i.toSJISFunc)),Pe(t,r,o,n)};var Ut={},gt={};(function(e){function t(i){if(typeof i=="number"&&(i=i.toString()),typeof i!="string")throw new Error("Color should be defined as hex string");let o=i.slice().replace("#","").split("");if(o.length<3||o.length===5||o.length>8)throw new Error("Invalid hex color: "+i);(o.length===3||o.length===4)&&(o=Array.prototype.concat.apply([],o.map(function(n){return[n,n]}))),o.length===6&&o.push("F","F");const r=parseInt(o.join(""),16);return{r:r>>24&255,g:r>>16&255,b:r>>8&255,a:r&255,hex:"#"+o.slice(0,6).join("")}}e.getOptions=function(o){o||(o={}),o.color||(o.color={});const r=typeof o.margin>"u"||o.margin===null||o.margin<0?4:o.margin,n=o.width&&o.width>=21?o.width:void 0,s=o.scale||4;return{width:n,scale:n?4:s,margin:r,color:{dark:t(o.color.dark||"#000000ff"),light:t(o.color.light||"#ffffffff")},type:o.type,rendererOpts:o.rendererOpts||{}}},e.getScale=function(o,r){return r.width&&r.width>=o+r.margin*2?r.width/(o+r.margin*2):r.scale},e.getImageWidth=function(o,r){const n=e.getScale(o,r);return Math.floor((o+r.margin*2)*n)},e.qrToImageData=function(o,r,n){const s=r.modules.size,u=r.modules.data,a=e.getScale(s,n),l=Math.floor((s+n.margin*2)*a),c=n.margin*a,E=[n.color.light,n.color.dark];for(let m=0;m<l;m++)for(let f=0;f<l;f++){let w=(m*l+f)*4,p=n.color.light;if(m>=c&&f>=c&&m<l-c&&f<l-c){const T=Math.floor((m-c)/a),h=Math.floor((f-c)/a);p=E[u[T*s+h]?1:0]}o[w++]=p.r,o[w++]=p.g,o[w++]=p.b,o[w]=p.a}}})(gt);(function(e){const t=gt;function i(r,n,s){r.clearRect(0,0,n.width,n.height),n.style||(n.style={}),n.height=s,n.width=s,n.style.height=s+"px",n.style.width=s+"px"}function o(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}e.render=function(n,s,u){let a=u,l=s;typeof a>"u"&&(!s||!s.getContext)&&(a=s,s=void 0),s||(l=o()),a=t.getOptions(a);const c=t.getImageWidth(n.modules.size,a),E=l.getContext("2d"),m=E.createImageData(c,c);return t.qrToImageData(m.data,n,a),i(E,l,c),E.putImageData(m,0,0),l},e.renderToDataURL=function(n,s,u){let a=u;typeof a>"u"&&(!s||!s.getContext)&&(a=s,s=void 0),a||(a={});const l=e.render(n,s,a),c=a.type||"image/png",E=a.rendererOpts||{};return l.toDataURL(c,E.quality)}})(Ut);var kt={};const _e=gt;function Ct(e,t){const i=e.a/255,o=t+'="'+e.hex+'"';return i<1?o+" "+t+'-opacity="'+i.toFixed(2).slice(1)+'"':o}function ot(e,t,i){let o=e+t;return typeof i<"u"&&(o+=" "+i),o}function Me(e,t,i){let o="",r=0,n=!1,s=0;for(let u=0;u<e.length;u++){const a=Math.floor(u%t),l=Math.floor(u/t);!a&&!n&&(n=!0),e[u]?(s++,u>0&&a>0&&e[u-1]||(o+=n?ot("M",a+i,.5+l+i):ot("m",r,0),r=0,n=!1),a+1<t&&e[u+1]||(o+=ot("h",s),s=0)):r++}return o}kt.render=function(t,i,o){const r=_e.getOptions(i),n=t.modules.size,s=t.modules.data,u=n+r.margin*2,a=r.color.light.a?"<path "+Ct(r.color.light,"fill")+' d="M0 0h'+u+"v"+u+'H0z"/>':"",l="<path "+Ct(r.color.dark,"stroke")+' d="'+Me(s,n,r.margin)+'"/>',c='viewBox="0 0 '+u+" "+u+'"',m='<svg xmlns="http://www.w3.org/2000/svg" '+(r.width?'width="'+r.width+'" height="'+r.width+'" ':"")+c+' shape-rendering="crispEdges">'+a+l+`</svg>
|
|
8
|
-
`;return typeof o=="function"&&o(null,m),m};const Re=Yt,ut=Bt,Ft=Ut,Le=kt;function ht(e,t,i,o,r){const n=[].slice.call(arguments,1),s=n.length,u=typeof n[s-1]=="function";if(!u&&!Re())throw new Error("Callback required as last argument");if(u){if(s<2)throw new Error("Too few arguments provided");s===2?(r=i,i=t,t=o=void 0):s===3&&(t.getContext&&typeof r>"u"?(r=o,o=void 0):(r=o,o=i,i=t,t=void 0))}else{if(s<1)throw new Error("Too few arguments provided");return s===1?(i=t,t=o=void 0):s===2&&!t.getContext&&(o=i,i=t,t=void 0),new Promise(function(a,l){try{const c=ut.create(i,o);a(e(c,t,o))}catch(c){l(c)}})}try{const a=ut.create(i,o);r(null,e(a,t,o))}catch(a){r(a)}}H.create=ut.create;H.toCanvas=ht.bind(null,Ft.render);H.toDataURL=ht.bind(null,Ft.renderToDataURL);H.toString=ht.bind(null,function(e,t,i){return Le.render(e,i)});const L=Et(""),De=vt(()=>L.value.split("/").at(-1)||""),lt=Et("");zt(async()=>{if(!L.value){lt.value="";return}lt.value=await H.toDataURL(L.value,{width:256,margin:2})});L.value=localStorage.getItem("apkUrl")||"",fetch("https://registry.npmmirror.com/@gkd-kit/app/latest/files").then(async t=>{L.value=new URL((await t.json()).downloadUrl,t.url).href,localStorage.setItem("apkUrl",L.value)});const Ue=D("h1",{id:"title",tabindex:"-1"},[$("开始使用 "),D("a",{class:"header-anchor",href:"#title","aria-label":'Permalink to "开始使用 {#title}"'},"")],-1),ke=D("h2",{id:"install",tabindex:"-1"},[$("下载安装 "),D("a",{class:"header-anchor",href:"#install","aria-label":'Permalink to "下载安装 {#install}"'},"")],-1),Fe=["href"],ve=D("p",null,"或者扫描下方二维码即可下载最新版本",-1),ze=["src"],Ve=Kt("",12),Je=JSON.parse('{"title":"开始使用","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1718802650000}'),Ke={name:"guide/index.md"},Oe=Object.assign(Ke,{setup(e){return(t,i)=>{const o=Ht("ClientOnly");return Jt(),Vt("div",null,[Ue,ke,mt(o,null,{default:wt(()=>[$(" 大陆用户可点击 "),D("a",{rel:"noopener noreferrer",href:x(L)},Ot(x(De)),9,Fe),$(" 下载 ")]),_:1}),ve,mt(o,null,{default:wt(()=>[D("img",{src:x(lt),"data-zoomable":"",alt:""},null,8,ze)]),_:1}),Ve])}}});export{Je as __pageData,Oe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as p,G as g,a5 as h,h as x,o as s,c as n,a6 as y,a7 as k,l as e,t as u,n as b,m,I as v,a4 as c}from"./chunks/framework.DLsK1f-q.js";const E=p({__name:"ValueField",setup(o){const t=g(""),a=/^[_a-zA-Z][a-zA-Z0-9_]*(\.[_a-zA-Z][a-zA-Z0-9_]*)*$/,i=h(t,300),d=x(()=>a.test(i.value));return(F,l)=>(s(),n("div",null,[y(e("input",{placeholder:"请输入属性名测试是否合法",type:"text","onUpdate:modelValue":l[0]||(l[0]=r=>t.value=r),class:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50"},null,512),[[k,t.value]]),e("div",{"mt-4px":"",class:b({"color-red":!d.value,"opacity-0":!m(i)||!t.value})},u(d.value?"合法属性名✅":"非法属性名❌"),3)]))}}),_=c('<h1 id="title" tabindex="-1">高级选择器 <a class="header-anchor" href="#title" aria-label="Permalink to "高级选择器 {#title}""></a></h1><p>一个类似 CSS 选择器的高级选择器, 能联系节点上下文信息, 更容易也更精确找到目标节点</p><h2 id="why" tabindex="-1">为什么需要选择器 <a class="header-anchor" href="#why" aria-label="Permalink to "为什么需要选择器 {#why}""></a></h2><p>我们的目的是查询获取屏幕上的某个节点, 最简单的情况下, 目标节点已经有唯一的 id/text 标识</p><p>这时只需要配置 id/text 就能简单执行点击, 但实际情况很多节点都缺失了这些信息, 无法简单查询获取</p><p>节点还存在很多额外信息没有被利用到, 节点所有属性可以在 <a href="https://i.gkd.li/i/14045424" target="_blank" rel="noreferrer">快照-14045424</a> 的属性面板看到</p><p>另一种常见的情况是节点没有有效属性, 这时我们需要根据周围的节点去定位</p><p>选择器就是为了解决这些问题而开发的, 下面是对选择器的详细介绍</p><h2 id="syntax" tabindex="-1">语法 <a class="header-anchor" href="#syntax" aria-label="Permalink to "语法 {#syntax}""></a></h2><p>与 CSS 类似, 一个选择器由 属性选择器 和 关系选择器 交叉组成, 并且开头末尾必须是 属性选择器</p><p>示例 <code>div > img</code> 的结构是 <code>属性选择器 关系选择器 属性选择器</code>, 它表示选择父节点是 <code>div</code> 的 <code>img</code> 节点, 这与 <a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Child_combinator" target="_blank" rel="noreferrer">相同 CSS 语法</a> 语义一致</p><p>另外 属性选择器 和 关系选择器 之间必须<strong>强制</strong>用 空白字符(空格/换行/回车/制表) 隔开</p><p>即 <code>div>img</code> 非法, 必须写成 <code>div > img</code></p><p>下面分别介绍 <a href="#attr">属性选择器</a> 和 <a href="#connect">关系选择器</a></p><h2 id="attr" tabindex="-1">属性选择器 <a class="header-anchor" href="#attr" aria-label="Permalink to "属性选择器 {#attr}""></a></h2><p>它和 CSS 语法的 属性选择器很相似, 但更强大, 如下是一个示例</p><p><code>@TextView[a=1][b^='2'][c*='a'||d.length>7&&e=false]</code></p><p><code>@</code> 表示选择此节点, 一条规则最后属性选择器 <code>@</code> 生效, 如果没有 <code>@</code>, 取最后一个属性选择器</p><p><code>TextView</code> 代表节点的 name 属性, 而且与 CSS 相似, <code>*</code> 表示匹配任意属性</p><p>由于该选择器主要用于 Android 平台, 节点的 name 都是 java 类如 android.text.TextView 这种形式</p><p>为了方便书写规则, 上述 <code>TextView</code> 等价 <code>[name='TextView'||name$='.TextView']</code></p><p><code>[]</code> 内部是一个 逻辑表达式/布尔表达式</p><ul><li>逻辑表达式 -> <code>name='TextView'||name$='.TextView'</code></li><li>布尔表达式 -> <code>name='TextView'</code></li></ul><p>逻辑表达式 有两个操作符 <code>||</code> 和 <code>&&</code>. <code>&&</code> 优先级更高, 即 <code>[a>1||b>1&&c>1||d>1]</code> 等价于 <code>[a>1||(b>1&&c>1)||d>1]</code></p><p>并列的 <code>[]</code> 视为使用 <code>&&</code> 的逻辑表达式, 即 <code>[a=1][b=1]</code> 等价于 <code>[a=1&&b=1]</code></p><p>布尔表达式 由 <a href="#attr-name">属性名</a> <a href="#attr-operator">操作符</a> <a href="#attr-value">值</a> 顺序构成</p><h3 id="attr-name" tabindex="-1">属性名 <a class="header-anchor" href="#attr-name" aria-label="Permalink to "属性名 {#attr-name}""></a></h3><p>正则匹配 <code>^[_a-zA-Z][a-zA-Z0-9_]*(\\.[_a-zA-Z][a-zA-Z0-9_]*)*$</code> 的字符串</p><p>类似合法变量名 <code>a</code>/<code>a.length</code>, 下面可输入属性名测试否是合法</p>',29),f={class:"vp-raw"},C=c('<h3 id="attr-operator" tabindex="-1">操作符 <a class="header-anchor" href="#attr-operator" aria-label="Permalink to "操作符 {#attr-operator}""></a></h3><table><thead><tr><th style="text-align:center;">操作符</th><th style="text-align:center;">名称</th><th style="text-align:center;">说明</th></tr></thead><tbody><tr><td style="text-align:center;">=</td><td style="text-align:center;">equal</td><td style="text-align:center;"></td></tr><tr><td style="text-align:center;">!=</td><td style="text-align:center;">notEqual</td><td style="text-align:center;"></td></tr><tr><td style="text-align:center;">></td><td style="text-align:center;">more</td><td style="text-align:center;"></td></tr><tr><td style="text-align:center;">>=</td><td style="text-align:center;">moreEqual</td><td style="text-align:center;"></td></tr><tr><td style="text-align:center;"><</td><td style="text-align:center;">less</td><td style="text-align:center;"></td></tr><tr><td style="text-align:center;"><=</td><td style="text-align:center;">lessEqual</td><td style="text-align:center;"></td></tr><tr><td style="text-align:center;">^=</td><td style="text-align:center;">startsWith</td><td style="text-align:center;">以...开头</td></tr><tr><td style="text-align:center;">!^=</td><td style="text-align:center;">notStartsWith</td><td style="text-align:center;">不以...开头</td></tr><tr><td style="text-align:center;">*=</td><td style="text-align:center;">contains</td><td style="text-align:center;">包含...</td></tr><tr><td style="text-align:center;">!^=</td><td style="text-align:center;">notContains</td><td style="text-align:center;">不包含...</td></tr><tr><td style="text-align:center;">$=</td><td style="text-align:center;">endsWith</td><td style="text-align:center;">以...结尾</td></tr><tr><td style="text-align:center;">!$=</td><td style="text-align:center;">notEndsWith</td><td style="text-align:center;">不以...结尾</td></tr><tr><td style="text-align:center;">~=</td><td style="text-align:center;">matches</td><td style="text-align:center;">正则匹配...</td></tr><tr><td style="text-align:center;">!~=</td><td style="text-align:center;">notMatches</td><td style="text-align:center;">正则不匹配...</td></tr></tbody></table><p>附加说明: <code>matches</code>/<code>notMatches</code> 要求 值 必须是合法的 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html" target="_blank" rel="noreferrer">Java/Kotlin 正则表达式</a>, 否则提示语法错误</p><h3 id="attr-value" tabindex="-1">值 <a class="header-anchor" href="#attr-value" aria-label="Permalink to "值 {#attr-value}""></a></h3><p>值: 4 种类型, <code>null</code>, <code>boolean</code>, <code>string</code>, <code>int</code></p><ul><li>null</li><li>boolean 使用 <code>true</code>/<code>false</code></li><li>int 匹配 <code>^-?[0-9]$</code>, 即10进制自然数, 示例 <code>-1</code>,<code>0</code>,<code>1</code></li><li>string 使用 ' ` " 之一成对包裹, 内部字符转义使用 <code>\\</code><br> 所有的转义字符示例 <code>\\\\</code>, <code>\\'</code>, <code>\\"</code>, <code>\\`</code>, <code>\\n</code>, <code>\\r</code>, <code>\\t</code>, <code>\\b</code>, <code>\\xfF</code>, <code>\\uffFF</code><br> 不支持多行字符, 处于 <code>[0, 0x1F]</code> 的控制字符必须使用转义字符表示</li></ul><p>此外使用 string 类型需要了解 <a href="#nest-escape">嵌套转义字符</a> 以避免出现错误</p><p>操作符只能使用在对应的类型的值, 比如 <code>a>''</code> 类型不匹配, 将提示 <code>非法类型</code>/<code>非法选择器</code></p><p>下面表格中 <code>-</code> 表示类型不匹配</p><table><thead><tr><th style="text-align:center;"></th><th style="text-align:center;">null</th><th style="text-align:center;">boolean</th><th style="text-align:center;">int</th><th style="text-align:center;">string</th></tr></thead><tbody><tr><td style="text-align:center;">=</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!=</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">></td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;">>=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;"><</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;"><=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;">^=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!^=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">*=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!*=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">$=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!$=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">~=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!~=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr></tbody></table><p>除 <code>=</code>/<code>!=</code> 以外的操作符, 当节点属性是 <code>null</code> 如 a>0 当 a 是 <code>null</code> 时返回 <code>false</code></p><h2 id="connect" tabindex="-1">关系选择器 <a class="header-anchor" href="#connect" aria-label="Permalink to "关系选择器 {#connect}""></a></h2><p>关系选择器 由 关系操作符 和 关系表达式 构成, 用于连接两个属性选择器</p><p>简单示例: <code>div > a</code>, 它 表示/约束 两个节点之间的关系, 下面介绍 <a href="#connect-operator">关系操作符</a> 和 <a href="#connect-exp">关系表达式</a></p><h3 id="connect-exp" tabindex="-1">关系表达式 <a class="header-anchor" href="#connect-exp" aria-label="Permalink to "关系表达式 {#connect-exp}""></a></h3><p>关系表达式 表示查找节点的范围, 有两种</p><ul><li>元组表达式 <code>(a1,a2,a3,a_n)</code>, 其中 a1, a2, a3, a_n 是常量有序递增正整数, 示例 <code>(1)</code>, <code>(2,3,5)</code></li><li>多项式表达式 <code>(an+b)</code>, 其中 a 和 b 是常量整数, 它是元组表达式的另一种表示, 这个元组的数字满足集合 <code>{an+b|an+b>=1,n>=1}</code> 如果集合为空集则表达式非法<br> 当 a<=0 时, 它具有等价的元组表达式<br> 示例 <code>(-n+4)</code> 等价于 <code>(1,2,3)</code><br> 示例 <code>(-3n+10)</code> 等价于 <code>(1,4,7)</code><br> 当 a>0 时, 它表示无限的元组表达式<br> 示例 <code>(n)</code>, 它表示 <code>(1,2,3,...)</code> 一个无限的元组<br> 示例 <code>(2n-1)</code>, 它表示 <code>(1,3,5,...)</code> 一个无限的元组</li></ul><h3 id="connect-operator" tabindex="-1">关系操作符 <a class="header-anchor" href="#connect-operator" aria-label="Permalink to "关系操作符 {#connect-operator}""></a></h3><p>关系操作符 表示查找节点的方向, 有 5 种关系操作符, <code>+</code>, <code>-</code>, <code>></code>, <code><</code>, <code><<</code></p><table><thead><tr><th style="text-align:center;">操作符</th><th style="text-align:center;">名称</th><th style="text-align:center;">图例</th><th style="text-align:center;">选择器</th></tr></thead><tbody><tr><td style="text-align:center;">+</td><td style="text-align:center;">前置兄弟节点</td><td style="text-align:center;"><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0020.png" alt="image" width="250"></td><td style="text-align:center;"><a href="https://i.gkd.li/i/14045424?gkd=KiArIFtfaWQ9MzNd" target="_blank" rel="noreferrer">* + [_id=33]</a></td></tr><tr><td style="text-align:center;">-</td><td style="text-align:center;">后置兄弟节点</td><td style="text-align:center;"><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0021.png" alt="image" width="250"></td><td style="text-align:center;"><a href="https://i.gkd.li/i/14045424?gkd=KiAtIFtfaWQ9MzJd" target="_blank" rel="noreferrer">* - [_id=32]</a></td></tr><tr><td style="text-align:center;">></td><td style="text-align:center;">祖先节点</td><td style="text-align:center;"><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0022.png" alt="image" width="250"></td><td style="text-align:center;"><a href="https://i.gkd.li/i/14045424?gkd=KiA-IFtfaWQ9OTBd" target="_blank" rel="noreferrer">* > [_id=90]</a></td></tr><tr><td style="text-align:center;"><</td><td style="text-align:center;">直接子节点</td><td style="text-align:center;"><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0023.png" alt="image" width="250"></td><td style="text-align:center;"><a href="https://i.gkd.li/i/14045424?gkd=KiA8IFtfaWQ9ODld" target="_blank" rel="noreferrer">* < [_id=89]</a></td></tr><tr><td style="text-align:center;"><<</td><td style="text-align:center;">子孙节点(深度先序)</td><td style="text-align:center;"><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0024.png" alt="image" width="250"></td><td style="text-align:center;"><a href="https://i.gkd.li/i/14045424?gkd=KiA8PDIgW19pZD0yOV0" target="_blank" rel="noreferrer">* <<2 [_id=29]</a></td></tr></tbody></table><p>将 关系操作符 和 关系表达式 连接起来就得到了 关系选择器</p><p><code>A +(a1,a2,a3,a_n) B</code> : A 是 B 的前置兄弟节点, 并且 A.index 满足 B.index-(a_m), 其中 a_m 是元组的任意一个数字</p><p><code>A -(a1,a2,a3,a_n) B</code> : A 是 B 的后置兄弟节点, 并且 A.index 满足 B.index+(a_m)</p><p><code>A >(a1,a2,a3,a_n) B</code> : A 是 B 的祖先节点, 并且 A.depth 满足 B.depth-(a_m), 根节点的 depth=0</p><p><code>A <(a1,a2,a3,a_n) B</code> : A 是 B 的直接子节点, 并且 A.index 满足 a_m-1</p><p><code>A <<(a1,a2,a3,a_n) B</code> : A 是 B 的子孙节点, 并且 A.order 满足 a_m-1, A.order 是深度优先先序遍历的索引</p><h3 id="connect-shortcut" tabindex="-1">表达式简写 <a class="header-anchor" href="#connect-shortcut" aria-label="Permalink to "表达式简写 {#connect-shortcut}""></a></h3><p>一般情况下, 并不需要写严格完整的表达式, 使用简化写法更方便快捷</p><p>下面是一些特殊情况下的简写表示</p><p>当 a=0 或 b=0 时, 括号可以省略, 以 <code>+</code> 为例</p><ul><li><code>A +(3n+0) B</code> -> <code>A +(3n) B</code> -> <code>A +3n B</code></li><li><code>A +(0n+3) B</code> -> <code>A +(+3) B</code> -> <code>A +3 B</code></li></ul><p>当 a=0 且 b=1 时, an+b 可以省略, 以 <code>+</code> 为例</p><ul><li><code>A +(0n+1) B</code> -> <code>A + B</code></li></ul><p>此外 <code>A + B</code>,<code>A > B</code> 都与等价的 CSS 语法语义相同</p><p>当 a=1 且 b=0 且操作符是 <code>></code>, 可以进一步简写, 比如</p><ul><li><code>A >(1n+0) B</code> -> <code>A >n B</code> -> <code>A B</code></li></ul><p>这与等价的 CSS 语法语义相同</p><h2 id="example" tabindex="-1">示例 <a class="header-anchor" href="#example" aria-label="Permalink to "示例 {#example}""></a></h2><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>@LinearLayout > TextView[id=`com.byted.pangle:id/tt_item_tv`][text=`不感兴趣`]</span></span></code></pre></div><p>选择器从末尾开始查找, 首先找到 id=`com.byted.pangle:id/tt_item_tv` 和 text=`不感兴趣` 的 TextView, 并且父节点是 LinearLayout 的节点</p><p>此时我们得到两个节点 [LinearLayout, TextView] 根据 <code>@</code> 知道目标节点是 LinearLayout</p><p>实际上它与</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>TextView[id=`com.byted.pangle:id/tt_item_tv`][text=`不感兴趣`] <n LinearLayout</span></span></code></pre></div><p>的目标匹配节点是等价的, 但是在查询算法时间复杂度上, 后者更慢</p><p>如下是网页无障碍快照审查工具, 使用它的搜索框的选择器查询可以实时测试编写的选择器</p><ul><li><a href="https://i.gkd.li/i/14045424" target="_blank" rel="noreferrer">https://i.gkd.li/i/14045424</a></li><li><a href="https://i.gkd.li/i/14034770" target="_blank" rel="noreferrer">https://i.gkd.li/i/14034770</a></li><li><a href="https://i.gkd.li/i/14031920" target="_blank" rel="noreferrer">https://i.gkd.li/i/14031920</a></li><li><a href="https://i.gkd.li/i/14018243" target="_blank" rel="noreferrer">https://i.gkd.li/i/14018243</a></li><li><a href="https://i.gkd.li/i/14011298" target="_blank" rel="noreferrer">https://i.gkd.li/i/14011298</a></li><li><a href="https://i.gkd.li/i/13999908" target="_blank" rel="noreferrer">https://i.gkd.li/i/13999908</a></li></ul><h2 id="note" tabindex="-1">一些注意 <a class="header-anchor" href="#note" aria-label="Permalink to "一些注意 {#note}""></a></h2><h3 id="regex-optimization" tabindex="-1">正则表达式优化 <a class="header-anchor" href="#regex-optimization" aria-label="Permalink to "正则表达式优化 {#regex-optimization}""></a></h3><p>对 <code>matches</code>/<code>notMatches</code> 的优化: 如果正则表达式满足下面的条件, 选择器将使用内置的简单的函数匹配, 而不是真正地去运行一个正则表达式</p><ul><li><code>[text~="(?is)abc.*"]</code> -> <code>startsWith('abc', ignoreCase = true)</code></li><li><code>[text~="(?is).*abc.*"]</code> -> <code>contains('abc', ignoreCase = true)</code></li><li><code>[text~="(?is).*abc"]</code> -> <code>endsWith('abc', ignoreCase = true)</code></li><li><code>[text!~="(?is)abc.*"]</code> -> <code>notStartsWith('abc', ignoreCase = true)</code></li><li><code>[text!~="(?is).*abc.*"]</code> -> <code>notContains('abc', ignoreCase = true)</code></li><li><code>[text!~="(?is).*abc"]</code> -> <code>notEndsWith('abc', ignoreCase = true)</code></li></ul><p>上面的 <code>abc</code> 指代不包含 <code>\\^$.?*|+()[]{}</code> 这类特殊正则字符的任意字符串, 如 <code>ikun</code> 符合, <code>ikun?</code> 不符合</p><p>简单来说就是如果你只想忽略大小写去简单匹配或不匹配一些字符, 那么直接使用上面的格式</p><h3 id="regex-multiplatform" tabindex="-1">正则表达式一致性 <a class="header-anchor" href="#regex-multiplatform" aria-label="Permalink to "正则表达式一致性 {#regex-multiplatform}""></a></h3><p>由于 选择器 需要同时满足 浏览器/Js(审查工具), Android/Java(GKD) 运行, 而这两个平台的正则表达式的底层实现和语法表示略有不同</p><p>因此为了在 Js 端实现和 Java 一致的正则表达式规范, 网页审查工具借助 <a href="https://kotlinlang.org/docs/wasm-overview.html" target="_blank" rel="noreferrer">Kotlin Wasm</a> 将正则表达式的 matches 函数接口编译为 wasm 提供给 Js 调用</p><p>Kotlin Wasm 需要你的浏览器支持 <a href="https://developer.chrome.com/blog/wasmgc?hl=zh-cn" target="_blank" rel="noreferrer">WasmGC</a>, 也就是版本需要满足下列条件</p><p><img src="https://registry.npmmirror.com/@gkd-kit/assets/0.0.6/files/assets/0025.png" alt="image"></p><p>如果你的浏览器版本不满足, 正则表达式将自动回退到 Js 端实现, 以下是在 Js 端使用正则表达式需要注意的地方</p><p>比如上面的正则表达式优化例子中开头的 <code>(?is)</code> 是 Java 正则表达式的 inline flags 语法, 但实际上 Js 并不支持这样写, 只是选择器内部做了一些兼容让它支持</p><p>并且选择器的 Js 端只兼容在开头的 flags, 在内部的 flags 不支持, 此外 Java 和 Js 支持的 flags 也有不同, 某些特殊的表达式也表现也不一致</p><p>总之不要使用太过复杂(多复杂我也不知道)的正则表达式, 某些正则表达式有可能在审查工具上匹配, 但是在 GKD 上不匹配</p><p>如果你能确保正则表达式在 Js 和 Java/Kotlin 的匹配行为一致, 那就没问题</p><p>总之两种情况</p><ul><li>高版本浏览器可以使用 <strong>完整一致</strong> 的正则表达式</li><li>低版本浏览器使用 <strong>小范围不完整不一致</strong> 的正则表达式</li></ul><p>如果你的选择器没有使用正则表达式则不用关心此问题</p><h3 id="nest-escape" tabindex="-1">嵌套转义字符 <a class="header-anchor" href="#nest-escape" aria-label="Permalink to "嵌套转义字符 {#nest-escape}""></a></h3><p>转义字符一般用于表示不能直接显示具体特殊意义的字符</p><p>对于 GKD 的选择器而言, 转义字符使用示例如下</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>TextView[text="\\\\\\n"]</span></span></code></pre></div><p>这表达选择一个 TextView 它的 text 长度为 2, 开头是 <code>\\</code> 末尾是换行</p><p>这和平常写的代码里面的 string 声明用法一模一样</p><p>但是选择器最终放在规则的字段里面, 也就是这个选择器字符串处于 JSON 的 string 内</p><p>如果你想当然地直接手动复制插入到编辑器里出现下面这种规则</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>由于 JSON 也有自己的转义, 规则与 GKD 的转义基本一致, 因此你的实际选择器实际变成了</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>TextView[text="\\</span></span>\n<span class="line"><span>"]</span></span></code></pre></div><p>这明显是一个非法的选择器</p><p>解决方式也很简单, 手动插入的时候将你的 <code>\\</code> 变成 <code>\\\\</code>, 正确的规则如下</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">n"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>这是普通字符串的情况, 如果你使用 <code>~=</code>/<code>!~=</code>, 则还需要多转义一次, 因为正则表达式也有自己的转义字符</p><p>比如我们想匹配一个 TextView 并且 text 是任意一个数字, 我们想当然地用 <code>\\d</code>, 所以你可能会写</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>TextView[text~="\\d"]</span></span></code></pre></div><p>但是你在网页审查工具输入并回车搜索会提示 非法选择器, 这是因为 <code>\\d</code> 处于 GKD 的 string 内, 会被转义一次, 正确的用法是写 <code>\\\\d</code></p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>TextView[text~="\\\\d"]</span></span></code></pre></div><p>实际上这部分等价的 Kotlin/Java 代码可以简单是</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>Regex("\\\\d").matches(text)</span></span></code></pre></div><p>接下来把选择器放到规则里面, 根据上面的描述, 规则应该是</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text~="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">d"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>如果想用正则匹配一个 <code>\\</code> 字符, 最终规则应该写成</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text~="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>实现和上面相同的结果, 即用 <code>=</code> 匹配一个 <code>\\</code> 字符, 最终规则应该写成</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>\n<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'TextView[text="</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"]'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>\n<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>类似的问题 <a href="https://github.com/gkd-kit/gkd/issues/603" target="_blank" rel="noreferrer">gkd-kit/gkd#603</a></p>',93),B=JSON.parse('{"title":"高级选择器","description":"","frontmatter":{},"headers":[],"relativePath":"selector/index.md","filePath":"selector/index.md","lastUpdated":1718802650000}'),q={name:"selector/index.md"},w=Object.assign(q,{setup(o){return(t,a)=>(s(),n("div",null,[_,e("div",f,[v(E)]),C]))}});export{B as __pageData,w as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.DLsK1f-q.js";const o=JSON.parse('{"title":"订阅规则","description":"","frontmatter":{},"headers":[],"relativePath":"subscription/index.md","filePath":"subscription/index.md","lastUpdated":1718802650000}'),p={name:"subscription/index.md"},t=n("",16),h=[t];function l(e,k,E,r,d,g){return a(),i("div",null,h)}const F=s(p,[["render",l]]);export{o as __pageData,F as default};
|