362
362
// malformed property:name pairs.
363
363
String name_and_params, string_value;
365
String[] bits = line.split( ":", 2 );
366
if( bits.length == 2 ) {
367
name_and_params = bits[ 0 ].trim();
368
string_value = bits[ 1 ].trim();
365
String[] parts = line.split( ":", 2 );
366
if( parts.length == 2 ) {
367
name_and_params = parts[ 0 ].trim();
368
string_value = parts[ 1 ].trim();
369
369
if( name_and_params.length() == 0 )
370
370
throw new ParseException( R.string.error_vcf_malformed );
450
450
// get parameter parts
451
String[] name_and_param_bits = name_and_params.split( ";" );
452
for( int i = 0; i < name_and_param_bits.length; i++ )
453
name_and_param_bits[ i ] = name_and_param_bits[ i ].trim();
451
String[] name_param_parts = name_and_params.split( ";", -1 );
452
for( int i = 0; i < name_param_parts.length; i++ )
453
name_param_parts[ i ] = name_param_parts[ i ].trim();
455
455
// parse encoding parameter
456
String encoding = checkParam( name_and_param_bits, "ENCODING" );
456
String encoding = checkParam( name_param_parts, "ENCODING" );
457
457
if( encoding != null ) encoding = encoding.toUpperCase();
458
458
if( encoding != null && !encoding.equals( "8BIT" ) &&
459
459
!encoding.equals( "QUOTED-PRINTABLE" ) )
465
465
// parse charset parameter
466
String charset = checkParam( name_and_param_bits, "CHARSET" );
466
String charset = checkParam( name_param_parts, "CHARSET" );
467
467
if( charset != null ) charset = charset.toUpperCase();
468
468
if( charset != null && !charset.equals( "US-ASCII" ) &&
469
469
!charset.equals( "ASCII" ) && !charset.equals( "UTF-8" ) )
510
510
_parser_buffered_value_so_far + string_value;
512
512
// parse some properties
513
if( name_and_param_bits[ 0 ].equals( "N" ) )
514
parseN( name_and_param_bits, complete_value );
515
else if( name_and_param_bits[ 0 ].equals( "FN" ) )
516
parseFN( name_and_param_bits, complete_value );
517
else if( name_and_param_bits[ 0 ].equals( "ORG" ) )
518
parseORG( name_and_param_bits, complete_value );
519
else if( name_and_param_bits[ 0 ].equals( "TEL" ) )
520
parseTEL( name_and_param_bits, complete_value );
521
else if( name_and_param_bits[ 0 ].equals( "EMAIL" ) )
522
parseEMAIL( name_and_param_bits, complete_value );
513
if( name_param_parts[ 0 ].equals( "N" ) )
514
parseN( name_param_parts, complete_value );
515
else if( name_param_parts[ 0 ].equals( "FN" ) )
516
parseFN( name_param_parts, complete_value );
517
else if( name_param_parts[ 0 ].equals( "ORG" ) )
518
parseORG( name_param_parts, complete_value );
519
else if( name_param_parts[ 0 ].equals( "TEL" ) )
520
parseTEL( name_param_parts, complete_value );
521
else if( name_param_parts[ 0 ].equals( "EMAIL" ) )
522
parseEMAIL( name_param_parts, complete_value );
531
531
if( _name_level >= NAMELEVEL_N ) return;
533
533
// get name parts
534
String[] nameparts = value.split( ";" );
535
for( int i = 0; i < nameparts.length; i++ )
536
nameparts[ i ] = nameparts[ i ].trim();
534
String[] name_parts = value.split( ";" );
535
for( int i = 0; i < name_parts.length; i++ )
536
name_parts[ i ] = name_parts[ i ].trim();
540
if( nameparts.length > 1 && nameparts[ 1 ].length() > 0 )
541
value += nameparts[ 1 ];
542
if( nameparts[ 0 ].length() > 0 )
543
value += ( value.length() == 0? "" : " " ) + nameparts[ 0 ];
540
if( name_parts.length > 1 && name_parts[ 1 ].length() > 0 )
541
value += name_parts[ 1 ];
542
if( name_parts.length > 0 && name_parts[ 0 ].length() > 0 )
543
value += ( value.length() == 0? "" : " " ) + name_parts[ 0 ];
546
546
setName( value );
570
570
if( _name_level >= NAMELEVEL_ORG ) return;
573
String[] orgparts = value.split( ";" );
574
for( int i = 0; i < orgparts.length; i++ )
575
orgparts[ i ] = orgparts[ i ].trim();
573
String[] org_parts = value.split( ";" );
574
for( int i = 0; i < org_parts.length; i++ )
575
org_parts[ i ] = org_parts[ i ].trim();
578
if( orgparts[ 0 ].length() == 0 && orgparts.length > 1 )
579
value = orgparts[ 1 ];
578
if( org_parts.length > 1 && org_parts[ 0 ].length() == 0 )
579
value = org_parts[ 1 ];
581
value = orgparts[ 0 ];
581
value = org_parts[ 0 ];
584
584
setName( value );
597
597
// here's the logic...
598
598
boolean preferred = types.contains( "PREF" );
599
int type = PhonesColumns.TYPE_MOBILE;
599
600
if( types.contains( "VOICE" ) )
600
601
if( types.contains( "WORK" ) )
601
addPhone( value, PhonesColumns.TYPE_WORK, preferred );
602
type = PhonesColumns.TYPE_WORK;
603
addPhone( value, PhonesColumns.TYPE_HOME, preferred );
604
type = PhonesColumns.TYPE_HOME;
604
605
else if( types.contains( "CELL" ) || types.contains( "VIDEO" ) )
605
addPhone( value, PhonesColumns.TYPE_MOBILE, preferred );
606
type = PhonesColumns.TYPE_MOBILE;
606
607
if( types.contains( "FAX" ) )
607
608
if( types.contains( "HOME" ) )
608
addPhone( value, PhonesColumns.TYPE_FAX_HOME, preferred );
609
type = PhonesColumns.TYPE_FAX_HOME;
610
addPhone( value, PhonesColumns.TYPE_FAX_WORK, preferred );
611
type = PhonesColumns.TYPE_FAX_WORK;
611
612
if( types.contains( "PAGER" ) )
612
addPhone( value, PhonesColumns.TYPE_PAGER, preferred );
613
type = PhonesColumns.TYPE_PAGER;
616
addPhone( value, type, preferred );
615
619
public void parseEMAIL( String[] params, String value )
661
665
private Set< String > extractTypes( String[] params,
662
List< String > validTypes )
666
List< String > valid_types )
664
668
HashSet< String > types = new HashSet< String >();
666
670
// get 3.0-style TYPE= param
668
if( ( typeParam = checkParam( params, "TYPE" ) ) != null ) {
669
String[] bits = typeParam.split( "," );
670
for( int i = 0; i < bits.length; i++ )
671
if( validTypes.contains( bits[ i ] ) )
672
types.add( bits[ i ] );
672
if( ( type_param = checkParam( params, "TYPE" ) ) != null ) {
673
String[] parts = type_param.split( "," );
674
for( int i = 0; i < parts.length; i++ )
675
if( valid_types.contains( parts[ i ] ) )
676
types.add( parts[ i ] );
675
679
// get 2.1-style type param
676
680
if( _version.equals( "2.1" ) ) {
677
681
for( int i = 1; i < params.length; i++ )
678
if( validTypes.contains( params[ i ] ) )
682
if( valid_types.contains( params[ i ] ) )
679
683
types.add( params[ i ] );