public IClassifier GetClassifier(ITextBuffer buffer) {
IDlrClassifier existing;
if (buffer.Properties.TryGetProperty<IDlrClassifier>(typeof(IDlrClassifier), out existing)) {
return existing;
}
if (_categoryMap == null) {
_categoryMap = FillCategoryMap(_classificationRegistry);
}
var specificContentType = ContentType;
DlrClassifier res = null;
if (specificContentType == null || buffer.ContentType == specificContentType) {
res = new DlrClassifier(this, Engine, buffer);
} else {
foreach (var baseType in buffer.ContentType.BaseTypes) {
if (baseType == specificContentType) {
res = new DlrClassifier(this, Engine, buffer);
break;
}
}
}
if (res != null) {
buffer.Properties.AddProperty(typeof(IDlrClassifier), res);
}
return res;
}