Tipos de conteúdo

O pacoteorg.eclipse.core.runtime.content fornece suporte para definir os tipos de conteúdo para fluxos de dados. Os tipos de conteúdo são utilizados por vários recursos sensíveis ao conteúdo do Eclipse, como determinação de codificação automática, seleção do editor de comparação e contribuições de menu. Um registro de conteúdo central gerenciado por um IContentTypeManager permite que os plug-ins definam os tipos de conteúdo e especifiquem uma classe que sabe ler e descrever o conteúdo. Para contribuir com tipos de conteúdo, um entendimento básico da estrutura de conteúdo é necessário.

Nota:  Para esta discussão, evitamos especificamente o uso da palavra arquivo ao conversar sobre conteúdo. O mecanismo de conteúdo do tempo de execução não supõe que o conteúdo esteja contido em um arquivo no sistema de arquivos. No entanto, inclui um protocolo que permite que os tipos de conteúdo estejam associados aos padrões de nomeação do arquivo. Na prática, esses nomes de arquivo representam arquivos no sistema de arquivos, mas nada na implementação do sistema de conteúdo supõe que o conteúdo esteja localizado no sistema de arquivos. A Codificação do arquivo e os tipos de conteúdo discutem os tipos de conteúdo orientados pelo arquivo contribuído pelo plug-in dos recursos da plataforma.

Definindo e Descrevendo o Conteúdo

A plataforma define alguns tipos fundamentais de conteúdo, como texto simples e fluxos de dados XML. Esses tipos de conteúdo são definidos da mesma forma que os que são contribuídos por outros plug-ins. Observaremos como a plataforma define o tipo de conteúdo do texto para melhorar o entendimento da estrutura do tipo de conteúdo.

Os plug-ins definem os tipos de conteúdo, contribuindo com uma extensão para o ponto de extensão org.eclipse.core.runtime.contentTypes. Nesta extensão, um plug-in especifica um id e um nome para o tipo de conteúdo e um IContentDescriber que pode ler um fluxo de entrada e fornecer uma descrição do conteúdo. O seguinte snippet é a contribuição do plug-in de tempo de execução para o tipo de conteúdo do texto:

	<extension point="org.eclipse.core.runtime.contentTypes">
		<content-type id="text" name="%textContentTypeName">
			priority="high"
			file-extensions="txt">
			<describer class="org.eclipse.core.internal.content.TextContentDescriber"/>	
		</content-type>
		...

O TextContentDescriber é responsável pela leitura de um fluxo de entrada e a determinação rápida se o conteúdo fornecido é uma amostra válida do texto. O método describe(inputStream, description) é chamado sempre que a plataforma está tentando determinar o conteúdo para um fluxo de dados específico. O IContentDescriber é responsável por determinar rapidamente se o conteúdo representa uma amostra válida para o seu tipo de conteúdo e retorna uma constante que indica se o conteúdo corresponde ao tipo. Se o conteúdo corresponde ao tipo, o descritor também deve ser preenchido no IContentDescription fornecido com informações sobre os dados.

O IContentDescription armazena os atributos específicos para conteúdo nos pares chave/valor. Esses atributos são específicos para o tipo de conteúdo específico. A plataforma especifica atributos para o conjunto de caracteres e a ordem de byte de um arquivo de texto, mas outros podem ser definidos.

Aprendendo Sobre os Tipos de Conteúdo

O IContentTypeManager define o protocolo para o registro de conteúdo. Os clientes utilizam essa classe para testar um fluxo de conteúdo ou aprender sobre outros tipos de conteúdo no sistema.

Os tipos de conteúdo são representados por IContentType. Essa classe representa um tipo de conteúdo exclusivo que sabe como ler um fluxo de dados e interpretar as informações específicas do tipo de conteúdo. Os tipos de conteúdo são hierárquicos por natureza. Por exemplo, um tipo de conteúdo para dados XML é considerado um filho do tipo de conteúdo do texto.

		<content-type id="xml" name="%xmlContentTypeName" 	
			base-type="text"
			priority="high"			
			file-extensions="xml"
			default-charset="UTF-8">
			<describer class="org.eclipse.core.internal.content.XMLContentDescriber"/>
		</content-type>

Isso permite que novos tipos de conteúdo alavanquem os atributos ou o comportamento de tipos de conteúdo mais gerais.

Conjuntos de Caractere

O tipo de conteúdo de texto da plataforma não define um conjunto de caracteres para o conteúdo de texto. Os filhos do tipo de conteúdo de texto estão livres para especificar diferentes conjuntos de caracteres padrão quando apropriado, como o tipo de conteúdo XML faz. O conjunto de caracteres padrão para os fluxos XML é UTF-8, que significa que quando um arquivo XML não tem a codificação explicitamente definida em seu conteúdo, sua codificação será considerada UTF-8.

Colisões do Tipo de Conteúdo

É concebível que dois plug-ins independentes contribuam com um tipo de conteúdo para o mesmo tipo de conteúdo. Neste caso, a plataforma selecionará somente um descritor de conteúdo para o conteúdo. O descritor selecionado é determinado utilizando um atributo priority que pode ser especificado na extensão contentTypes. Se dois plug-ins contribuírem para um tipo de conteúdo para o mesmo conteúdo com a mesma prioridade, é indeterminado qual descritor de conteúdo será selecionado. No entanto, assim que um descritor de conteúdo é selecionado, todas as referências de registro ao descritor de conteúdo de "perda" será colocado em alias para o que foi escolhido.

Avisos legais.