Boa tarde, amigos.
2014 chegando e eu estou querendo iniciar um projeto pessoal que há muito tenho imaginado mas pelo qual pouco tenho feito. Pois bem, estou me organizando para começá-lo em breve, além de estudar coisas que poderão me ser úteis, como C++, Java, Qt e Android.
Sem mais delongas (ou com mais delongas), preciso de dicas, ajudas e afins em dois tópicos distintos mas complementares. O meu objetivo, basicamente, é criar um Editor de Textos.
Claro, há algumas diferenças significativas, senão seria apenas uma questão de me basear em ferramentas já existentes (como JEditorPane/JTextPane do Java) e fazer as devidas alterações, ou mesmo utilizar um editor já existente (LibreOffice, Abiword). A motivação por trás desse software e as diferenças não são o foco aqui porque, embora existam boas opções similares ao que pretendo por aí, eu irei desenvolver mesmo assim (por isso o “reinventar a roda” no título ).
Os dois assuntos nos quais quero recomendações são:
1 - Criar uma especificação de documento
Falando a grosso modo, quero criar a especificação que diz como o documento deve ser estruturado, validado e armazenado. Algo como o Open Document ou o Office OpenXML, mas obviamente mais simples, e que irá crescer com o tempo. Minha ideia é utilizar uma notação XML como base, mas não fui além de definir isso. Pretendo suportar mais de um idioma (ao menos os que possuem um alfabeto próximo do nosso), então a especificação deve prever esse suporte. Provavelmente o formato não precisará embutir elementos que não sejam texto (como imagens) e outros elementos (como tabelas e linhas) serão definidos como tags, ficando a cargo do aplicativo interpretá-los e fazer a renderização de acordo.
2 - Criar um editor para a especificação de documento
Como pretendo suportar mais de um tipo de dispositivo (computadores, smartphones e tablets), provavelmente utilizarei um framework multiplataforma (como o Qt), mas a questão principal nesse caso é saber os conceitos envolvidos em um aplicativo desse tipo, sendo que ele vai ser desenvolvido desde as bases (ou seja, desenhando os elementos em 2D, atualizando esses elementos, fazendo rolagem de tela, visualização, copiar/colar/recortar, seleção, cursor, etc). Gostaria de dicas e técnicas para lidar com esse tipo de coisa. Por exemplo, como exibir o cursor do texto piscante, ou como destacar um trecho selecionado do texto, etc.
Considerações Finais:
Sei que este não é um assunto exatamente simples e rápido. Não é algo que pretendo terminar em pouco tempo nem fazer às pressas, será um projeto de longo prazo (alguns anos). Não é também muito fácil de se achar referências fazendo buscas (principalmente porque assuntos como “criar editor de textos” e “document model” direcionam para coisas diversas do que eu espero), por isso estou pedindo ajuda diretamente.
O que eu desejo não é tanto dicas, mas bibliografias e afins que me permitam pesquisar por conta própria esses assuntos, sejam livros, artigos, publicações, etc. Outra forma de ajudar seria indicar fóruns e grupos de discussão aos quais eu possa consultar a respeito.
Material tanto em português quanto inglês será bem vindo.
Abraço.