@@ -71,14 +71,18 @@ protected function collectModules():array{
7171 return $ paths ;
7272 }
7373
74- protected function moduleTransform (int $ x , int $ y , int $ M_TYPE , int $ M_TYPE_LAYER ):string {
74+ protected function moduleTransform (int $ x , int $ y , int $ M_TYPE , int $ M_TYPE_LAYER ):string | null {
7575 $ bits = $ this ->matrix ->checkNeighbours ($ x , $ y , null );
7676 $ check = fn (int $ all , int $ any = 0 ):bool => ($ bits & ($ all | (~$ any & 0xff ))) === $ all ;
7777
7878 $ template = ($ M_TYPE & QRMatrix::IS_DARK ) === QRMatrix::IS_DARK
7979 ? $ this ->darkModule ($ check , $ this ->options ->inverseMelt )
8080 : $ this ->lightModule ($ check , $ this ->options ->inverseMelt );
8181
82+ if ($ template === '' ){
83+ return null ;
84+ }
85+
8286 $ r = $ this ->options ->meltRadius ;
8387
8488 return sprintf ($ template , $ x , $ y , $ r , (1 - $ r ), (1 - 2 * $ r ));
@@ -89,58 +93,58 @@ protected function moduleTransform(int $x, int $y, int $M_TYPE, int $M_TYPE_LAYE
8993 */
9094 protected function darkModule (Closure $ check , bool $ invert ):string {
9195
92- switch (true ){
96+ return match (true ){
9397 // 4 rounded
94- case !$ invert && $ check (0b00000000 , 0b01010101 ):
95- case $ invert && $ check (0b00000000 , 0b00000000 ):
96- return 'M%1$s,%2$s m0,%3$s v%5$s q0,%3$s %3$s,%3$s h%5$s q%3$s,0 %3$s,-%3$s v-%5$s q0,-%3$s -%3$s,-%3$s h-%5$s q-%3$s,0 -%3$s,%3$sZ ' ;
98+ !$ invert && $ check (0b00000000 , 0b01010101 ),
99+ $ invert && $ check (0b00000000 , 0b00000000 )
100+ => 'M%1$s,%2$s m0,%3$s v%5$s q0,%3$s %3$s,%3$s h%5$s q%3$s,0 %3$s,-%3$s v-%5$s q0,-%3$s -%3$s,-%3$s h-%5$s q-%3$s,0 -%3$s,%3$sZ ' ,
97101
98102 // 3 rounded
99- case $ invert && $ check (0b01000000 , 0b00000000 ): // 135
100- return 'M%1$s,%2$s m0,1 h%4$s q%3$s,0 %3$s,-%3$s v-%5$s q0,-%3$s -%3$s,-%3$s h-%5$s q-%3$s,0 -%3$s,%3$sZ ' ;
101- case $ invert && $ check (0b00000001 , 0b00000000 ): // 357
102- return 'M%1$s,%2$s v%4$s q0,%3$s %3$s,%3$s h%5$s q%3$s,0 %3$s,-%3$s v-%5$s q0,-%3$s -%3$s,-%3$sZ ' ;
103- case $ invert && $ check (0b00000100 , 0b00000000 ): // 571
104- return 'M%1$s,%2$s m1,0 v%4$s q0,%3$s -%3$s,%3$s h-%5$s q-%3$s,0 -%3$s,-%3$s v-%5$s q0,-%3$s %3$s,-%3$sZ ' ;
105- case $ invert && $ check (0b00010000 , 0b00000000 ): // 713
106- return 'M%1$s,%2$s m1,1 h-%4$s q-%3$s,0 -%3$s,-%3$s v-%5$s q0,-%3$s %3$s,-%3$s h%5$s q%3$s,0 %3$s,%3$sZ ' ;
103+ $ invert && $ check (0b01000000 , 0b00000000 ) // 135
104+ => 'M%1$s,%2$s m0,1 h%4$s q%3$s,0 %3$s,-%3$s v-%5$s q0,-%3$s -%3$s,-%3$s h-%5$s q-%3$s,0 -%3$s,%3$sZ ' ,
105+ $ invert && $ check (0b00000001 , 0b00000000 ) // 357
106+ => 'M%1$s,%2$s v%4$s q0,%3$s %3$s,%3$s h%5$s q%3$s,0 %3$s,-%3$s v-%5$s q0,-%3$s -%3$s,-%3$sZ ' ,
107+ $ invert && $ check (0b00000100 , 0b00000000 ) // 571
108+ => 'M%1$s,%2$s m1,0 v%4$s q0,%3$s -%3$s,%3$s h-%5$s q-%3$s,0 -%3$s,-%3$s v-%5$s q0,-%3$s %3$s,-%3$sZ ' ,
109+ $ invert && $ check (0b00010000 , 0b00000000 ) // 713
110+ => 'M%1$s,%2$s m1,1 h-%4$s q-%3$s,0 -%3$s,-%3$s v-%5$s q0,-%3$s %3$s,-%3$s h%5$s q%3$s,0 %3$s,%3$sZ ' ,
107111
108112 // 2 rounded
109- case !$ invert && $ check (0b00100000 , 0b01010101 ): // 13
110- case $ invert && $ check (0b00000000 , 0b01110000 ):
111- return 'M%1$s,%2$s m0,1 h1 v-%4$s q0,-%3$s -%3$s,-%3$s h-%5$s q-%3$s,0 -%3$s,%3$sZ ' ;
112- case !$ invert && $ check (0b10000000 , 0b01010101 ): // 35
113- case $ invert && $ check (0b00000000 , 0b11000001 ):
114- return 'M%1$s,%2$s v1 h%4$s q%3$s,0 %3$s,-%3$s v-%5$s q0,-%3$s -%3$s,-%3$sZ ' ;
115- case !$ invert && $ check (0b00000010 , 0b01010101 ): // 57
116- case $ invert && $ check (0b00000000 , 0b00000111 ):
117- return 'M%1$s,%2$s v%4$s q0,%3$s %3$s,%3$s h%5$s q%3$s,0 %3$s,-%3$s v-%4$sZ ' ;
118- case !$ invert && $ check (0b00001000 , 0b01010101 ): // 71
119- case $ invert && $ check (0b00000000 , 0b00011100 ):
120- return 'M%1$s,%2$s m1,1 v-1 h-%4$s q-%3$s,0 -%3$s,%3$s v%5$s q0,%3$s %3$s,%3$sZ ' ;
113+ !$ invert && $ check (0b00100000 , 0b01010101 ), // 13
114+ $ invert && $ check (0b00000000 , 0b01110000 )
115+ => 'M%1$s,%2$s m0,1 h1 v-%4$s q0,-%3$s -%3$s,-%3$s h-%5$s q-%3$s,0 -%3$s,%3$sZ ' ,
116+ !$ invert && $ check (0b10000000 , 0b01010101 ), // 35
117+ $ invert && $ check (0b00000000 , 0b11000001 )
118+ => 'M%1$s,%2$s v1 h%4$s q%3$s,0 %3$s,-%3$s v-%5$s q0,-%3$s -%3$s,-%3$sZ ' ,
119+ !$ invert && $ check (0b00000010 , 0b01010101 ), // 57
120+ $ invert && $ check (0b00000000 , 0b00000111 )
121+ => 'M%1$s,%2$s v%4$s q0,%3$s %3$s,%3$s h%5$s q%3$s,0 %3$s,-%3$s v-%4$sZ ' ,
122+ !$ invert && $ check (0b00001000 , 0b01010101 ), // 71
123+ $ invert && $ check (0b00000000 , 0b00011100 )
124+ => 'M%1$s,%2$s m1,1 v-1 h-%4$s q-%3$s,0 -%3$s,%3$s v%5$s q0,%3$s %3$s,%3$sZ ' ,
121125 // diagonal
122- case $ invert && $ check (0b01000100 , 0b00000000 ): // 15
123- return 'M%1$s,%2$s m0,1 h%4$s q%3$s,0 %3$s,-%3$s v-%4$s h-%4$s q-%3$s,0 -%3$s,%3$sZ ' ;
124- case $ invert && $ check (0b00010001 , 0b00000000 ): // 37
125- return 'M%1$s,%2$s h%4$s q%3$s,0 %3$s,%3$s v%4$s h-%4$s q-%3$s,0 -%3$s,-%3$sZ ' ;
126+ $ invert && $ check (0b01000100 , 0b00000000 ) // 15
127+ => 'M%1$s,%2$s m0,1 h%4$s q%3$s,0 %3$s,-%3$s v-%4$s h-%4$s q-%3$s,0 -%3$s,%3$sZ ' ,
128+ $ invert && $ check (0b00010001 , 0b00000000 ) // 37
129+ => 'M%1$s,%2$s h%4$s q%3$s,0 %3$s,%3$s v%4$s h-%4$s q-%3$s,0 -%3$s,-%3$sZ ' ,
126130
127131 // 1 rounded
128- case !$ invert && $ check (0b00101000 , 0b01010101 ): // 1
129- case $ invert && $ check (0b00000000 , 0b01111100 ):
130- return 'M%1$s,%2$s m0,1 h1 v-1 h-%4$s q-%3$s,0 -%3$s,%3$sZ ' ;
131- case !$ invert && $ check (0b10100000 , 0b01010101 ): // 3
132- case $ invert && $ check (0b00000000 , 0b11110001 ):
133- return 'M%1$s,%2$s h%4$s q%3$s,0 %3$s,%3$s v%4$s h-1Z ' ;
134- case !$ invert && $ check (0b10000010 , 0b01010101 ): // 5
135- case $ invert && $ check (0b00000000 , 0b11000111 ):
136- return 'M%1$s,%2$s h1 v%4$s q0,%3$s -%3$s,%3$s h-%4$sZ ' ;
137- case !$ invert && $ check (0b00001010 , 0b01010101 ): // 7
138- case $ invert && $ check (0b00000000 , 0b00011111 ):
139- return 'M%1$s,%2$s v%4$s q0,%3$s %3$s,%3$s h%4$s v-1Z ' ;
140- default :
141- // full square
142- return 'M%1$s,%2$s h1 v1 h-1Z ' ;
143- }
132+ !$ invert && $ check (0b00101000 , 0b01010101 ), // 1
133+ $ invert && $ check (0b00000000 , 0b01111100 )
134+ => 'M%1$s,%2$s m0,1 h1 v-1 h-%4$s q-%3$s,0 -%3$s,%3$sZ ' ,
135+ !$ invert && $ check (0b10100000 , 0b01010101 ), // 3
136+ $ invert && $ check (0b00000000 , 0b11110001 )
137+ => 'M%1$s,%2$s h%4$s q%3$s,0 %3$s,%3$s v%4$s h-1Z ' ,
138+ !$ invert && $ check (0b10000010 , 0b01010101 ), // 5
139+ $ invert && $ check (0b00000000 , 0b11000111 )
140+ => 'M%1$s,%2$s h1 v%4$s q0,%3$s -%3$s,%3$s h-%4$sZ ' ,
141+ !$ invert && $ check (0b00001010 , 0b01010101 ), // 7
142+ $ invert && $ check (0b00000000 , 0b00011111 )
143+ => 'M%1$s,%2$s v%4$s q0,%3$s %3$s,%3$s h%4$s v-1Z ' ,
144+ // full square
145+ default
146+ => 'M%1$s,%2$s h1 v1 h-1Z ' ,
147+ };
144148
145149 }
146150
@@ -149,58 +153,58 @@ protected function darkModule(Closure $check, bool $invert):string{
149153 */
150154 protected function lightModule (Closure $ check , bool $ invert ):string {
151155
152- switch (true ){
156+ return match (true ){
153157 // 4 rounded
154- case !$ invert && $ check (0b11111111 , 0b01010101 ):
155- case $ invert && $ check (0b10101010 , 0b01010101 ):
156- return 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m0,1 h-%3$s q%3$s,0 %3$s,-%3$sz m-1,0 v-%3$s q0,%3$s %3$s,%3$sZ ' ;
158+ !$ invert && $ check (0b11111111 , 0b01010101 ),
159+ $ invert && $ check (0b10101010 , 0b01010101 )
160+ => 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m0,1 h-%3$s q%3$s,0 %3$s,-%3$sz m-1,0 v-%3$s q0,%3$s %3$s,%3$sZ ' ,
157161
158162 // 3 rounded
159- case !$ invert && $ check (0b10111111 , 0b00000000 ): // 135
160- return 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m0,1 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ;
161- case !$ invert && $ check (0b11111110 , 0b00000000 ): // 357
162- return 'M%1$s,%2$s m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m0,1 h-%3$s q%3$s,0 %3$s,-%3$sz m-1,0 v-%3$s q0,%3$s %3$s,%3$sZ ' ;
163- case !$ invert && $ check (0b11111011 , 0b00000000 ): // 571
164- return 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m0,1 v-%3$s q0,%3$s %3$s,%3$sz m1,0 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ;
165- case !$ invert && $ check (0b11101111 , 0b00000000 ): // 713
166- return 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m0,1 v-%3$s q0,%3$s %3$s,%3$sz m1,-1 v%3$s q0,-%3$s -%3$s,-%3$sZ ' ;
163+ !$ invert && $ check (0b10111111 , 0b00000000 ) // 135
164+ => 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m0,1 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ,
165+ !$ invert && $ check (0b11111110 , 0b00000000 ) // 357
166+ => 'M%1$s,%2$s m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m0,1 h-%3$s q%3$s,0 %3$s,-%3$sz m-1,0 v-%3$s q0,%3$s %3$s,%3$sZ ' ,
167+ !$ invert && $ check (0b11111011 , 0b00000000 ) // 571
168+ => 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m0,1 v-%3$s q0,%3$s %3$s,%3$sz m1,0 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ,
169+ !$ invert && $ check (0b11101111 , 0b00000000 ) // 713
170+ => 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m0,1 v-%3$s q0,%3$s %3$s,%3$sz m1,-1 v%3$s q0,-%3$s -%3$s,-%3$sZ ' ,
167171
168172 // 2 rounded
169- case !$ invert && $ check (0b10001111 , 0b01110000 ): // 13
170- case $ invert && $ check (0b10001010 , 0b01010101 ):
171- return 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m1,0 v%3$s q0,-%3$s -%3$s,-%3$sZ ' ;
172- case !$ invert && $ check (0b00111110 , 0b11000001 ): // 35
173- case $ invert && $ check (0b00101010 , 0b01010101 ):
174- return 'M%1$s,%2$s m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m0,1 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ;
175- case !$ invert && $ check (0b11111000 , 0b00000111 ): // 57
176- case $ invert && $ check (0b10101000 , 0b01010101 ):
177- return 'M%1$s,%2$s m1,1 h-%3$s q%3$s,0 %3$s,-%3$sz m-1,0 v-%3$s q0,%3$s %3$s,%3$sZ ' ;
178- case !$ invert && $ check (0b11100011 , 0b00011100 ): // 71
179- case $ invert && $ check (0b10100010 , 0b01010101 ):
180- return 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m0,1 v-%3$s q0,%3$s %3$s,%3$sZ ' ;
173+ !$ invert && $ check (0b10001111 , 0b01110000 ), // 13
174+ $ invert && $ check (0b10001010 , 0b01010101 )
175+ => 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m1,0 v%3$s q0,-%3$s -%3$s,-%3$sZ ' ,
176+ !$ invert && $ check (0b00111110 , 0b11000001 ), // 35
177+ $ invert && $ check (0b00101010 , 0b01010101 )
178+ => 'M%1$s,%2$s m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m0,1 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ,
179+ !$ invert && $ check (0b11111000 , 0b00000111 ), // 57
180+ $ invert && $ check (0b10101000 , 0b01010101 )
181+ => 'M%1$s,%2$s m1,1 h-%3$s q%3$s,0 %3$s,-%3$sz m-1,0 v-%3$s q0,%3$s %3$s,%3$sZ ' ,
182+ !$ invert && $ check (0b11100011 , 0b00011100 ), // 71
183+ $ invert && $ check (0b10100010 , 0b01010101 )
184+ => 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m0,1 v-%3$s q0,%3$s %3$s,%3$sZ ' ,
181185 // diagonal
182- case !$ invert && $ check (0b10111011 , 0b00000000 ): // 15
183- return 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m1,1 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ;
184- case !$ invert && $ check (0b11101110 , 0b00000000 ): // 37
185- return 'M%1$s,%2$s m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m-1,1 v-%3$s q0,%3$s %3$s,%3$sZ ' ;
186+ !$ invert && $ check (0b10111011 , 0b00000000 ) // 15
187+ => 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sz m1,1 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ,
188+ !$ invert && $ check (0b11101110 , 0b00000000 ) // 37
189+ => 'M%1$s,%2$s m1,0 v%3$s q0,-%3$s -%3$s,-%3$sz m-1,1 v-%3$s q0,%3$s %3$s,%3$sZ ' ,
186190
187191 // 1 rounded
188- case !$ invert && $ check (0b10000011 , 0b01111100 ): // 1
189- case $ invert && $ check (0b10000010 , 0b01010101 ):
190- return 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sZ ' ;
191- case !$ invert && $ check (0b00001110 , 0b11110001 ): // 3
192- case $ invert && $ check (0b00001010 , 0b01010101 ):
193- return 'M%1$s,%2$s m1,0 v%3$s q0,-%3$s -%3$s,-%3$sZ ' ;
194- case !$ invert && $ check (0b00111000 , 0b11000111 ): // 5
195- case $ invert && $ check (0b00101000 , 0b01010101 ):
196- return 'M%1$s,%2$s m1,1 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ;
197- case !$ invert && $ check (0b11100000 , 0b00011111 ): // 7
198- case $ invert && $ check (0b10100000 , 0b01010101 ):
199- return 'M%1$s,%2$s m0,1 v-%3$s q0,%3$s %3$s,%3$sZ ' ;
200- default :
201- // empty block
202- return '' ;
203- }
192+ !$ invert && $ check (0b10000011 , 0b01111100 ), // 1
193+ $ invert && $ check (0b10000010 , 0b01010101 )
194+ => 'M%1$s,%2$s h%3$s q-%3$s,0 -%3$s,%3$sZ ' ,
195+ !$ invert && $ check (0b00001110 , 0b11110001 ), // 3
196+ $ invert && $ check (0b00001010 , 0b01010101 )
197+ => 'M%1$s,%2$s m1,0 v%3$s q0,-%3$s -%3$s,-%3$sZ ' ,
198+ !$ invert && $ check (0b00111000 , 0b11000111 ), // 5
199+ $ invert && $ check (0b00101000 , 0b01010101 )
200+ => 'M%1$s,%2$s m1,1 h-%3$s q%3$s,0 %3$s,-%3$sZ ' ,
201+ !$ invert && $ check (0b11100000 , 0b00011111 ), // 7
202+ $ invert && $ check (0b10100000 , 0b01010101 )
203+ => 'M%1$s,%2$s m0,1 v-%3$s q0,%3$s %3$s,%3$sZ ' ,
204+ // empty block
205+ default
206+ => '' ,
207+ };
204208
205209 }
206210
0 commit comments