public XamlTypeName ParseName(string text, out string error) { error = string.Empty; _scanner = new GenericTypeNameScanner(text); _inputText = text; StartStack(); try { _scanner.Read(); P_XamlTypeName(); if (_scanner.Token != GenericTypeNameScannerToken.NONE) { ThrowOnBadInput(); } } catch (TypeNameParserException ex) { error = ex.Message; } XamlTypeName typeName = null; if (String.IsNullOrEmpty(error)) { typeName = CollectNameFromStack(); } return(typeName); }
// SimpleTypeName ::= (Prefix ‘:’)? TypeName // private void P_SimpleTypeName() { // caller checks this. Debug.Assert(_scanner.Token == GenericTypeNameScannerToken.NAME); string prefix = string.Empty; string name = _scanner.MultiCharTokenText; _scanner.Read(); // Colon is optional. if (_scanner.Token == GenericTypeNameScannerToken.COLON) { prefix = name; _scanner.Read(); // IF there was a colon then there must be a name following. if (_scanner.Token != GenericTypeNameScannerToken.NAME) { ThrowOnBadInput(); } name = _scanner.MultiCharTokenText; _scanner.Read(); } Callout_FoundName(prefix, name); }