@@ -296,98 +296,18 @@ public CodeTypeDeclaration Parse (string resourceDirectory, string rTxtFile, IEn
296
296
297
297
void ProcessRtxtFile ( string file )
298
298
{
299
- var lines = System . IO . File . ReadLines ( file ) ;
300
- foreach ( var line in lines ) {
301
- var items = line . Split ( new char [ ] { ' ' } , 4 ) ;
302
- int value = items [ 1 ] != "styleable" ? Convert . ToInt32 ( items [ 3 ] , 16 ) : - 1 ;
303
- string itemName = items [ 2 ] ;
304
- switch ( items [ 1 ] ) {
305
- case "anim" :
306
- CreateIntField ( animation , itemName , value ) ;
307
- break ;
308
- case "animator" :
309
- CreateIntField ( animator , itemName , value ) ;
310
- break ;
311
- case "attr" :
312
- CreateIntField ( attrib , itemName , value ) ;
313
- break ;
314
- case "array" :
315
- CreateIntField ( arrays , itemName , value ) ;
316
- break ;
317
- case "bool" :
318
- CreateIntField ( boolean , itemName , value ) ;
319
- break ;
320
- case "color" :
321
- CreateIntField ( colors , itemName , value ) ;
322
- break ;
323
- case "dimen" :
324
- CreateIntField ( dimension , itemName , value ) ;
325
- break ;
326
- case "drawable" :
327
- CreateIntField ( drawable , itemName , value ) ;
328
- break ;
329
- case "font" :
330
- CreateIntField ( font , itemName , value ) ;
331
- break ;
332
- case "id" :
333
- CreateIntField ( ids , itemName , value ) ;
334
- break ;
335
- case "integer" :
336
- CreateIntField ( ints , itemName , value ) ;
337
- break ;
338
- case "interpolator" :
339
- CreateIntField ( interpolators , itemName , value ) ;
340
- break ;
341
- case "layout" :
342
- CreateIntField ( layout , itemName , value ) ;
343
- break ;
344
- case "menu" :
345
- CreateIntField ( menu , itemName , value ) ;
346
- break ;
347
- case "mipmap" :
348
- CreateIntField ( mipmaps , itemName , value ) ;
349
- break ;
350
- case "plurals" :
351
- CreateIntField ( plurals , itemName , value ) ;
352
- break ;
353
- case "raw" :
354
- CreateIntField ( raw , itemName , value ) ;
355
- break ;
356
- case "string" :
357
- CreateIntField ( strings , itemName , value ) ;
358
- break ;
359
- case "style" :
360
- CreateIntField ( style , itemName , value ) ;
361
- break ;
362
- case "styleable" :
363
- switch ( items [ 0 ] ) {
364
- case "int" :
365
- CreateIntField ( styleable , itemName , Convert . ToInt32 ( items [ 3 ] , 10 ) ) ;
299
+ var parser = new RtxtParser ( ) ;
300
+ var resources = parser . Parse ( file , Log , map ) ;
301
+ foreach ( var resource in resources ) {
302
+ var r = resource . Value ;
303
+ var cl = CreateClass ( r . ResourceType ) ;
304
+ switch ( r . Type ) {
305
+ case RType . Integer :
306
+ CreateIntField ( cl , r . Identifier , r . Id ) ;
366
307
break ;
367
- case "int[]" :
368
- var arrayValues = items [ 3 ] . Trim ( new char [ ] { '{' , '}' } )
369
- . Replace ( " " , "" )
370
- . Split ( new char [ ] { ',' } ) ;
371
- CreateIntArrayField ( styleable , itemName , arrayValues . Length ,
372
- arrayValues . Select ( x => string . IsNullOrEmpty ( x ) ? - 1 : Convert . ToInt32 ( x , 16 ) ) . ToArray ( ) ) ;
308
+ case RType . Array :
309
+ CreateIntArrayField ( cl , r . Identifier , r . Ids . Length , r . Ids ) ;
373
310
break ;
374
- }
375
- break ;
376
- case "transition" :
377
- CreateIntField ( transition , itemName , value ) ;
378
- break ;
379
- case "xml" :
380
- CreateIntField ( xml , itemName , value ) ;
381
- break ;
382
- // for custom views
383
- default :
384
- CodeTypeDeclaration customClass ;
385
- if ( ! custom_types . TryGetValue ( items [ 1 ] , out customClass ) ) {
386
- customClass = CreateClass ( items [ 1 ] ) ;
387
- custom_types . Add ( items [ 1 ] , customClass ) ;
388
- }
389
- CreateIntField ( customClass , itemName , value ) ;
390
- break ;
391
311
}
392
312
}
393
313
}
@@ -435,15 +355,21 @@ CodeTypeDeclaration CreateResourceClass ()
435
355
return decl ;
436
356
}
437
357
358
+ Dictionary < string , CodeTypeDeclaration > classes = new Dictionary < string , CodeTypeDeclaration > ( StringComparer . OrdinalIgnoreCase ) ;
359
+
438
360
CodeTypeDeclaration CreateClass ( string type )
439
361
{
362
+ if ( classes . ContainsKey ( type ) ) {
363
+ return classes [ type ] ;
364
+ }
440
365
var t = new CodeTypeDeclaration ( ResourceParser . GetNestedTypeName ( type ) ) {
441
366
IsPartial = true ,
442
367
TypeAttributes = TypeAttributes . Public ,
443
368
} ;
444
369
t . Members . Add ( new CodeConstructor ( ) {
445
370
Attributes = MemberAttributes . Private ,
446
371
} ) ;
372
+ classes . Add ( type , t ) ;
447
373
return t ;
448
374
}
449
375
0 commit comments