@@ -167,8 +167,8 @@ public IEnumerable<CompletionResult> CompleteArgument(
167
167
string matchString = wordToComplete . TrimStart ( '"' ) . TrimEnd ( '"' ) ;
168
168
foreach ( string font in WCUtils . FontList )
169
169
{
170
- if ( string . IsNullOrEmpty ( wordToComplete ) ||
171
- font . StartsWith ( matchString , StringComparison . OrdinalIgnoreCase ) )
170
+ if ( string . IsNullOrEmpty ( wordToComplete )
171
+ || font . StartsWith ( matchString , StringComparison . OrdinalIgnoreCase ) )
172
172
{
173
173
if ( font . Contains ( ' ' ) || font . Contains ( '#' ) || wordToComplete . StartsWith ( "\" " ) )
174
174
{
@@ -188,50 +188,56 @@ public class TransformToSKTypefaceAttribute : ArgumentTransformationAttribute
188
188
{
189
189
public override object Transform ( EngineIntrinsics engineIntrinsics , object inputData )
190
190
{
191
- switch ( inputData )
191
+ return inputData switch
192
192
{
193
- case SKTypeface t :
194
- return t ;
195
- case string s :
196
- return WCUtils . FontManager . MatchFamily ( s , SKFontStyle . Normal ) ;
197
- default :
198
- IEnumerable properties ;
199
- if ( inputData is Hashtable ht )
200
- {
201
- properties = ht ;
202
- }
203
- else
204
- {
205
- properties = PSObject . AsPSObject ( inputData ) . Properties ;
206
- }
193
+ SKTypeface t => t ,
194
+ string s => WCUtils . FontManager . MatchFamily ( s , SKFontStyle . Normal ) ,
195
+ _ => CreateTypefaceFromObject ( inputData ) ,
196
+ } ;
197
+ }
207
198
208
- SKFontStyle style ;
209
- if ( properties . GetValue ( "FontWeight" ) == null
210
- || properties . GetValue ( "FontSlant" ) == null
211
- || properties . GetValue ( "FontWidth" ) == null )
212
- {
213
- SKFontStyleWeight weight = properties . GetValue ( "FontWeight" ) == null ?
214
- SKFontStyleWeight . Normal : LanguagePrimitives . ConvertTo < SKFontStyleWeight > (
215
- properties . GetValue ( "FontWeight" ) ) ;
216
- SKFontStyleSlant slant = properties . GetValue ( "FontSlant" ) == null ?
217
- SKFontStyleSlant . Upright : LanguagePrimitives . ConvertTo < SKFontStyleSlant > (
218
- properties . GetValue ( "FontSlant" ) ) ;
219
- SKFontStyleWidth width = properties . GetValue ( "FontWidth" ) == null ?
220
- SKFontStyleWidth . Normal : LanguagePrimitives . ConvertTo < SKFontStyleWidth > (
221
- properties . GetValue ( "FontWidth" ) ) ;
222
- style = new SKFontStyle ( weight , width , slant ) ;
223
- }
224
- else
225
- {
226
- style = properties . GetValue ( "FontStyle" ) is SKFontStyle customStyle
227
- ? customStyle
228
- : SKFontStyle . Normal ;
229
- }
199
+ private static SKTypeface CreateTypefaceFromObject ( object input )
200
+ {
201
+ IEnumerable properties ;
202
+ if ( input is Hashtable ht )
203
+ {
204
+ properties = ht ;
205
+ }
206
+ else
207
+ {
208
+ properties = PSObject . AsPSObject ( input ) . Properties ;
209
+ }
210
+
211
+ SKFontStyle style ;
212
+ if ( properties . GetValue ( "FontWeight" ) != null
213
+ || properties . GetValue ( "FontSlant" ) != null
214
+ || properties . GetValue ( "FontWidth" ) != null )
215
+ {
216
+ SKFontStyleWeight weight = properties . GetValue ( "FontWeight" ) == null
217
+ ? SKFontStyleWeight . Normal
218
+ : LanguagePrimitives . ConvertTo < SKFontStyleWeight > ( properties . GetValue ( "FontWeight" ) ) ;
230
219
231
- string familyName = LanguagePrimitives . ConvertTo < string > ( properties . GetValue ( "FamilyName" ) ) ;
232
- return WCUtils . FontManager . MatchFamily ( familyName , style ) ;
220
+ SKFontStyleSlant slant = properties . GetValue ( "FontSlant" ) == null
221
+ ? SKFontStyleSlant . Upright
222
+ : LanguagePrimitives . ConvertTo < SKFontStyleSlant > ( properties . GetValue ( "FontSlant" ) ) ;
223
+
224
+ SKFontStyleWidth width = properties . GetValue ( "FontWidth" ) == null
225
+ ? SKFontStyleWidth . Normal
226
+ : LanguagePrimitives . ConvertTo < SKFontStyleWidth > ( properties . GetValue ( "FontWidth" ) ) ;
227
+
228
+ style = new SKFontStyle ( weight , width , slant ) ;
233
229
}
230
+ else
231
+ {
232
+ style = properties . GetValue ( "FontStyle" ) is SKFontStyle customStyle
233
+ ? customStyle
234
+ : SKFontStyle . Normal ;
235
+ }
236
+
237
+ string familyName = LanguagePrimitives . ConvertTo < string > ( properties . GetValue ( "FamilyName" ) ) ;
238
+ return WCUtils . FontManager . MatchFamily ( familyName , style ) ;
234
239
}
240
+
235
241
}
236
242
237
243
public class SKColorCompleter : IArgumentCompleter
@@ -245,13 +251,16 @@ public IEnumerable<CompletionResult> CompleteArgument(
245
251
{
246
252
foreach ( string color in WCUtils . ColorNames )
247
253
{
248
- if ( string . IsNullOrEmpty ( wordToComplete ) ||
249
- color . StartsWith ( wordToComplete , StringComparison . OrdinalIgnoreCase ) )
254
+ if ( string . IsNullOrEmpty ( wordToComplete )
255
+ || color . StartsWith ( wordToComplete , StringComparison . OrdinalIgnoreCase ) )
250
256
{
251
257
SKColor colorValue = WCUtils . ColorLibrary [ color ] ;
252
258
yield return new CompletionResult (
253
- color , color , CompletionResultType . ParameterValue ,
254
- string . Format ( "{0} (R: {1}, G: {2}, B: {3}, A: {4})" ,
259
+ completionText : color ,
260
+ listItemText : color ,
261
+ CompletionResultType . ParameterValue ,
262
+ toolTip : string . Format (
263
+ "{0} (R: {1}, G: {2}, B: {3}, A: {4})" ,
255
264
color , colorValue . Red , colorValue . Green , colorValue . Blue , colorValue . Alpha ) ) ;
256
265
}
257
266
}
@@ -260,6 +269,60 @@ public IEnumerable<CompletionResult> CompleteArgument(
260
269
261
270
public class TransformToSKColorAttribute : ArgumentTransformationAttribute
262
271
{
272
+ private IEnumerable < SKColor > TransformObject ( object input )
273
+ {
274
+ object [ ] array ;
275
+ if ( input is object [ ] o )
276
+ {
277
+ array = o ;
278
+ }
279
+ else
280
+ {
281
+ array = new [ ] { input } ;
282
+ }
283
+
284
+ foreach ( object item in array )
285
+ {
286
+ if ( item is string str )
287
+ {
288
+ foreach ( var color in MatchColor ( str ) )
289
+ {
290
+ yield return color ;
291
+ }
292
+
293
+ continue ;
294
+ }
295
+
296
+ IEnumerable properties ;
297
+ if ( item is Hashtable ht )
298
+ {
299
+ properties = ht ;
300
+ }
301
+ else
302
+ {
303
+ properties = PSObject . AsPSObject ( item ) . Properties ;
304
+ }
305
+
306
+ byte red = properties . GetValue ( "red" ) == null
307
+ ? ( byte ) 0
308
+ : LanguagePrimitives . ConvertTo < byte > ( properties . GetValue ( "red" ) ) ;
309
+
310
+ byte green = properties . GetValue ( "green" ) == null
311
+ ? ( byte ) 0
312
+ : LanguagePrimitives . ConvertTo < byte > ( properties . GetValue ( "green" ) ) ;
313
+
314
+ byte blue = properties . GetValue ( "blue" ) == null
315
+ ? ( byte ) 0
316
+ : LanguagePrimitives . ConvertTo < byte > ( properties . GetValue ( "blue" ) ) ;
317
+
318
+ byte alpha = properties . GetValue ( "alpha" ) == null
319
+ ? ( byte ) 255
320
+ : LanguagePrimitives . ConvertTo < byte > ( properties . GetValue ( "alpha" ) ) ;
321
+
322
+ yield return new SKColor ( red , green , blue , alpha ) ;
323
+ }
324
+ }
325
+
263
326
private IEnumerable < SKColor > MatchColor ( string name )
264
327
{
265
328
if ( WCUtils . ColorNames . Contains ( name ) )
@@ -278,6 +341,7 @@ private IEnumerable<SKColor> MatchColor(string name)
278
341
{
279
342
bool foundMatch = false ;
280
343
var pattern = new WildcardPattern ( name , WildcardOptions . IgnoreCase ) ;
344
+
281
345
foreach ( var color in WCUtils . ColorLibrary )
282
346
{
283
347
if ( pattern . IsMatch ( color . Key ) )
@@ -302,53 +366,6 @@ private IEnumerable<SKColor> MatchColor(string name)
302
366
throw new ArgumentTransformationMetadataException ( ) ;
303
367
}
304
368
305
- private IEnumerable < SKColor > TransformObject ( object input )
306
- {
307
- object [ ] array ;
308
- if ( input is object [ ] o )
309
- {
310
- array = o ;
311
- }
312
- else
313
- {
314
- array = new [ ] { input } ;
315
- }
316
-
317
- foreach ( object item in array )
318
- {
319
- if ( item is string s )
320
- {
321
- foreach ( var color in MatchColor ( s ) )
322
- {
323
- yield return color ;
324
- }
325
-
326
- continue ;
327
- }
328
-
329
- IEnumerable properties ;
330
- if ( item is Hashtable ht )
331
- {
332
- properties = ht ;
333
- }
334
- else
335
- {
336
- properties = PSObject . AsPSObject ( item ) . Properties ;
337
- }
338
-
339
- byte red = properties . GetValue ( "red" ) == null ?
340
- ( byte ) 0 : ( byte ) LanguagePrimitives . ConvertTo < byte > ( properties . GetValue ( "red" ) ) ;
341
- byte green = properties . GetValue ( "green" ) == null ?
342
- ( byte ) 0 : ( byte ) LanguagePrimitives . ConvertTo < byte > ( properties . GetValue ( "green" ) ) ;
343
- byte blue = properties . GetValue ( "blue" ) == null ?
344
- ( byte ) 0 : ( byte ) LanguagePrimitives . ConvertTo < byte > ( properties . GetValue ( "blue" ) ) ;
345
- byte alpha = properties . GetValue ( "alpha" ) == null ?
346
- ( byte ) 255 : ( byte ) LanguagePrimitives . ConvertTo < byte > ( properties . GetValue ( "alpha" ) ) ;
347
-
348
- yield return new SKColor ( red , green , blue , alpha ) ;
349
- }
350
- }
351
-
352
369
private object Normalize ( IEnumerable < SKColor > results )
353
370
{
354
371
if ( results . Count ( ) == 1 )
0 commit comments