4140 if (*s == '@') {
4141 outValue->dataType = outValue->TYPE_REFERENCE;
4142
4143 // Note: we don't check attrType here because the reference can
4144 // be to any other type; we just need to count on the client making
4145 // sure the referenced type is correct.
4146
4147 //printf("Looking up ref: %s\n", String8(s, len).string());
4148
4149 // It's a reference!
4150 if (len == 5 && s[1]=='n' && s[2]=='u' && s[3]=='l' && s[4]=='l') {
4151 outValue->data = 0;
4152 return true;
4153 } else {
4154 bool createIfNotFound = false;
4155 const char16_t* resourceRefName;
4156 int resourceNameLen;
4157 if (len > 2 && s[1] == '+') {
4158 createIfNotFound = true;
4159 resourceRefName = s + 2;
4160 resourceNameLen = len - 2;
4161 } else if (len > 2 && s[1] == '*') {
4162 enforcePrivate = false;
4163 resourceRefName = s + 2;
4164 resourceNameLen = len - 2;
4165 } else {
4166 createIfNotFound = false;
4167 resourceRefName = s + 1;
4168 resourceNameLen = len - 1;
4169 }
4234 if (*s == '#') {
4235 // It's a color! Convert to an integer of the form 0xaarrggbb.
4236 uint32_t color = 0;
4237 bool error = false;
4310 if (*s == '?') {
4311 outValue->dataType = outValue->TYPE_ATTRIBUTE;
4312
4313 // Note: we don't check attrType here because the reference can
4314 // be to any other type; we just need to count on the client making
4315 // sure the referenced type is correct.
4316
4317 //printf("Looking up attr: %s\n", String8(s, len).string());
4318
4319 static const String16 attr16("attr");
4320 String16 package, type, name;