[Notes2-team] Planejamento - v. 000002
Brought to you by:
andersonrb
|
From: Anderson R. B. <no...@ig...> - 2003-07-30 04:18:50
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
<title></title>
</head>
<body text="#000000" bgcolor="#ffffff">
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
<title></title>
<big style="font-family: helvetica,arial,sans-serif; font-weight: bold;"><big>Planejamento
do Notes 2</big></big><span
style="font-family: helvetica,arial,sans-serif; font-weight: bold;"> </span><br
style="font-family: helvetica,arial,sans-serif;">
<br style="font-family: helvetica,arial,sans-serif;">
<br style="font-family: helvetica,arial,sans-serif;">
<span style="font-family: helvetica,arial,sans-serif;"><big><span
style="font-weight: bold;">Editando texto</span></big><br>
Para poder atender a todas as sugestões feitas pelos usuários, a Equipe
do Notes decidiu construir um componente (controle) de edição próprio
(baseado no famoso componente de edição SynEdit). Este componente de
edição funcionara no Windows e no Linux da mesma forma. As capacidades
dele são discutidas abaixo:<br>
<br>
<big><small style="font-weight: bold;">Coloração de código</small><br>
<small>Esta foi a sugestão mais feita pelos usuários e vamos finalmente
poder atendê-la. E não vamos fazer isto de qualquer forma: o componente
usará definições que ficarão <span style="font-style: italic;">todas </span>em
arquivos XML. Isto significa que a coloração de código será altamente
flexível, podendo ser configurada em detalhes pelo usuário - diferente
da maioria dos editores, que só permitem que você configure as cores.
Linguagens não suportadas por padrão pelo Notes 2 poderão ser
adicionadas facilmente e aquelas suportadas poderão ser configuradas de
forma a atender as necessidades do usuário.<br>
<span style="font-weight: bold;"><br>
<small style="color: rgb(0, 0, 102);">Implementação:</small></span><small
style="color: rgb(0, 0, 102);">
a implementação da coloração de código se dará de forma semelhante a de
um editor para linux chamado Kate. Assim, o texto seria dividido em
blocos definidos através de arquivos XML (por exemplo: comentário,
string, inteiro, etc.) e não por simples tokens separados por espaços
em branco. Para evitar que o parser fique lento, sugere-se que, como no
Kate, existam regras pré-prontas para detectar alguns tipos de blocos:
inteiros, hexadecimais, octais, ponto flutuante, keyword (pré-definindo
que uma keyword é uma string sem espaços, iniciada por uma letra e que
permite além de letras, número e o caracter "_"; as keywords são
fornecidas pelo arquivo xml). Regras para diferenciar bloco de textos
poderão ser facilmente criadas tanto usando expressões regulares como
tags que permitem procurar por strings exatas, por um único caracter, </small></small></big></span><span
style="font-family: helvetica,arial,sans-serif; color: rgb(0, 0, 102);"><big><small><small>por
</small></small></big><big><small><small>dois caracteres, </small></small></big><big><small><small>por
</small></small></big></span><span
style="font-family: helvetica,arial,sans-serif;"><big><small><small
style="color: rgb(0, 0, 102);">qualquer
um dos caracteres listados, e pelo intervalo entre uma string/caracter
e outra. Este modelo foi escolhido por se encaixar perfeitamente nas
idéias da equipe e por que o modelo é altamente flexível podendo ser
usado para definir a coloração de qualquer linguagem de programação -
seja de script, de marcação, etc.</small><span
style="font-weight: bold;"><br>
<br>
<br>
</span><big>Analisador e corretor de erros</big><span
style="font-weight: bold;"><br>
</span>O editor poderá também detectar erros no código enquanto você
digita. Sim, isso mesmo - você não precisará mais compilar todo o
código para descobrir que cometeu um erro simples de programação.
Claro, o Notes 2 não substituirá o seu debuger/compilador favorito, mas
alguns erros ele poderá indentificar - salvando minutos, ou até horas
de compilação! Além disto, ele poderá propor correções para alguns
problemas. <br>
<br>
<small style="color: rgb(0, 0, 102);"><span style="font-weight: bold;">Implementação:
</span>o
analisador buscaria por estruturas chaves (principalmente aquelas de
controle, como if, while, for, etc.) que estariam definidas em um
arquivo XML da linguagem. Por exemplo, ao encontrar a palavra-chave if,
ele testaria o bloco de código para ver se ele está de acordo com os
modelos que ele conhece. Se o modelo for desconhecido o analisador
marca o trecho de código como errado. O usuário poderá corrigir o erro
manaulmente ou através de sugestões dadas pelo analisador. As sugestões
serão feitas de forma a transformar o bloco reconhecido como errado na
estrutura que ele conhece que for mais parecida com o bloco de código.</small><span
style="font-weight: bold;"><br>
<br>
Debugando<br>
</span></small></big></span><big
style="font-family: helvetica,arial,sans-serif;"><small>O
editor teria a capacidade de setar breakpoints quando informado de que
a linguagem pode ser debugada pelo Notes. Além disto, erros de
compilação seriam marcados, quando possível, de forma semelhante aos
erros marcados pelo analisador. </small></big><br>
<span style="font-family: helvetica,arial,sans-serif;"><big><small><span
style="font-weight: bold;">
<br>
Folding</span><br>
Alguns dos editores mais novos permitem que o usuário esconda certas
partes do código. É como se você estivesse usando o Windows Explorer
(ou o Konqueror/Nautilus no linux) só que no lugar de poder navegar
certas pastas e arquivos, você pode navegar pelas partes do seu
código. O folding poderá ser controlado pelo usuário. Bastará você
selecionar algumas linhas de código que um pequeno ícone aparecerá:
clicando nele aquela parte do código será escondida, bastando clicar
nele novamente para mostrar a partes escondida novamente. Você poderá
também marcar manualmente as áreas de folding. Basta adcionar "{{{"
para
iniciar uma área de folding e "}}}" para fechá-la (sem as aspas).
Selecionando as linhas e clicando no ícone para esconder o trecho o
Notes adicionará para você estes marcadores.<br>
<br>
<small style="color: rgb(0, 0, 102);"><span style="font-weight: bold;">Implementação:</span>
será usado como base o código para folding do editor JediEdit, já que
ele não difere muito das especificações de folding desejado pela
equipe. Modificações serão feitas conforme necessário para que o
comportamento descrito acima seja alcançado.</small><br>
<br>
</small></big><span style="font-weight: bold;"><br>
Intellisense/Code completion, ToolTip com argumentos e Templates</span><br>
O editor poderá completar nomes de classes, constantes, etc. como nas
IDEs da Microsoft® e da Borland®.<br>
Além disto, mostrará tooltips (dicas) mostrando os parâmetros de
métodos e funções quando o usuário teclar "(" (ou outro caracter
dependendo da linguagem). Para completar, o editor suportará templates.
Estes são palavras especiais definidas pelo usuário que são
transformadas pelo editor (quando invocado) em uma string maior. Por
exemplo, você poderá definir a palavra "class" e então invocar a
função para que o editor substitua class pela definição de classe de
alguma linguagem. <br>
<br>
<small><span style="font-weight: bold; color: rgb(255, 0, 0);">Implementação:
?????????????</span></small><br>
<br>
<br>
</span><big style="font-family: helvetica,arial,sans-serif;"><small
style="font-weight: bold;">Split</small><br>
</big><span style="font-family: helvetica,arial,sans-serif;">O velho
edit do DOS e outros editores atuais permitem qeu você possa dividir o
componente de edição em 2. <br>
No Notes 2 está capacidade estará presente, podendo dividir o editor
tanto horizontalmente quanto verticalmente, quantas vezes você quiser.<br
style="font-family: helvetica,arial,sans-serif;">
</span><br>
<span style="font-weight: bold; color: rgb(255, 0, 0);">Implementação:
????????????</span><br>
<br>
<br style="font-family: helvetica,arial,sans-serif;">
<span style="font-family: helvetica,arial,sans-serif;"><big><span
style="font-weight: bold;">A Interface</span></big><br>
A interface do Notes 2 será altamente configurável. Isso ocorrerá por
que menus e toolbars serão criados a partir de arquivos XML, ao invés
de estarem definidos dentro do binário. Além disto, o Notes 2 suportará
skins (temas) que
poderão alterar os controles (botões, campos de edição, combos, etc.) e
os ícones padrões. Apesar de altamente configurável, continuará simples
de usar,
pois sua organização seguirá a forma a qual os programadores já estão
acostumados. <br>
<br>
<small style="color: rgb(0, 0, 153);"><span
style="font-weight: bold; color: rgb(0, 0, 102);">Implementação:</span><span
style="color: rgb(0, 0, 102);">
existirão dois arquivos xml, um que define os menus e outro que define
as toolbars. As ações dos itens dos menus/toolbars serão definidas pela
tag "onClick" de cada um dos itens. Dito de outra forma, a string
definida em onClick é que dirá ao notes o que ele deve fazer quando o
usuário clicar no item. O Notes trará muitos métodos pré-definidos.
Estes métodos poderão ser chamados usando uma string contendo "Notes."
seguido do nome do método. Por exemplo, ao detectar um click no
primeiro item do primeiro menu, o Notes lê a string contida na tag
onClick do item (seria bom guardar esta string no próprio intem).
Digamos que a string é esta: "Notes.New()". Este método faz o Notes
abrir o diálogo para novos arquivos e projetos - que é o que ocorre
depois de um parser interno entender o que significa a string. Este
mesmo parser será usado para enteder todos os métodos onClick. Além dos
métodos providos pelo Notes, estarão disponíveis os métodos das
extensões instaladas pelo usuário. A extensões serão sempre
responsáveis por adicionar itens a menus/toolbars usando as opções do
Notes eXtension Installer. Digamos que o usuário queira usar uma
extensão chamada "SuperSearch" que adiciona ao Notes um diálogo para
fazer pesquisa de milhões de formas diferentes. O usuário não terá
muitos problemas para isto: basta chamar o Notes eXtension Installer e
escolher que extensão ele quer instalar. De acordo com o script xml de
instalação da extensão, o eXtension Installer adicionará itens aos
menus, aos toolbars, ao ToolBox, etc. Estes itens também terão a tag
onClick, exatamente como os itens que chamam os métodos do Notes. Mas
as strings onClick começarão com "Extension." ao invés de "Notes." e
serão seguidas de sua categoria (comandos, diálogos, etc.), de seu nome
e, por último, do método contido na extensão a ser chamado. (Nem todas
as extensões poderão ser chamadas deste modo, pois algumas delas não
adicionam novos métodos ao notes, mas sim coloração de syntaxe para
alguma nova linguagem, templates, etc.) Um exemplo seria um comando,
implementado na forma de um script em PHP, que formata o código Java de
acordo com os estilos recomendados pela Sun®. A string para chamar esta
extensão seria a seguinte:
"Extension.Command.PhpJavaFormater.Execute()". Todas as extensões que
adicionam métodos ao Notes poderão ser chamadas pelo método
"Execute()". Em scripts este método não existe, mas o Notes entende que
a extensão é um script e o executa. No caso de plugins (DLLs, DSOs,
BPLs), este método deverá ser implementado ou ele deverá usar o arquivo
extension.xml para pedir ao Notes que chame outro método no lugar dele.
As complexidades ficam sempre a cargo do Notes, pois os usuários e os
desenvolvedores de extensões podem sempre usar um método padrão para
chamar as extensões.</span><br>
</small><br>
<br>
<big>Como será a interface?<br>
<small>Num programa tão configurável quanto o Notes 2, esta é uma
pergunta difícil de responder. Temos pensando em uma estrutura assim
(de cima para baixo): menus; barra de ferramentas; tabs (para mudar
entre os arquivos abertos) e um botão seletor de projetos (no Notes 2
você poderá abrir vários projetos ao mesmo tempo, clique no botão para
mudar de um para outro); na esquerda um painel vertical onde ficaram
várias ferramentas (gerenciador de projetos, gerenciador CVS, etc.) e
na direita a área de edição; um painel horizotal (abaixo do editor, mas
não abaixo do painel vertical) com outras ferramentas (saída de
compiladores, gerenciador de tarefas, etc.); e, por último, a barra de
status.<br>
<br>
<small style="color: rgb(255, 0, 0);"><span style="font-weight: bold;">Implementação:
</span>??? aguardando sugestões sobre como os temas poderão ser
implementados ???</small><br>
</small>
</big></span><br>
<span style="font-family: helvetica,arial,sans-serif;"><big>Dando poder
ao teclado<br>
<small>A maioria dos programadores usa muito mais o teclado que o mouse
- o que difere uma IDE como o Notes 2 de outros aplicativos. Então
prometemos desde já dar uma atenção especial a ele. No caso do editor,
AutoIndent, SmartIndent, SmartHome, SmartEnd, SmartPaste ajudarão a
diminuir o tempo que um programador gasta escrevendo e formatando o
código. Além disto, o editor poderá usar features normalmente só
encontradadas em editores da Borland®, como as setas que podem se
movimentar livremente no texto. Além disto tudo, as teclas de atalho
poderão ser totalmente configuradas. Pensamos até em permitir que
algumas delas mudem conforme a linguagem que se está editando!!!<br>
<br>
<small style="color: rgb(0, 0, 102);"><span style="font-weight: bold;">Implementação:</span>
algumas destas características já vem implementadas no SynEdit,
componente que modificaremos para construir o controle de edição. No
caso do SmatIndent deveremos permitir que seja configurado, como todo o
resto, através de um arquivo XML para cada linguagem. O arquivo poderá
conter até diferentes estilos de indentação que poderão ser escolhidos
pelo usuário como aquele que ele quer usar. No caso das teclas de
atalho, bastará reusarmos o parser das tags onClick referido na
descrição da implementação da interface para que façamos elas altamente
configuráveis. </small><br>
</small></big></span>
<br>
<big style="font-family: helvetica,arial,sans-serif;"><span
style="font-weight: bold;">Integração<br>
</span><small>Sendo programadores, estamos cientes de que um editor de
código não é a única ferramenta necessária durante o desenvolvimento.
Por isto o Notes 2 terá uma boa integração com compiladores, debugers,
CVS, FTP, etc. Outros IDEs fazem isto
construindo novas ferramentas (quase sempre proprietárias) diferentes
daquelas que os programadores estão acostumados a usar. Queremos que o
Notes 2 se integre com as ferramentas que estão aí e que você já sabe
usar. Nada de inventar a roda e obrigá-lo a aprender algo que você não
quer.<br>
<br>
<small><span style="font-weight: bold; color: rgb(0, 0, 102);">Implementação:</span><span
style="color: rgb(0, 0, 102);">
a implementação depende em larga escala aqui de uma classe ou
procedures que nos permitam ler e escrever em programas de modo texto -
ou seja, comunicarmos através de pipes. É isto que precisaremos para
nos integrarmos com CVS, compiladores e debugers. Alguns aplicativos
(como o cvs e o jdb, debuger do java) exigem que você além de ler sua
sáida (stdout) possam também escrever nela (stdin). A partir deste
código será necessário criar o suporte para cada ferramenta de forma
separada, já que cada um deste possui comandos completamente
diferentes. No caso de debugers e compiladores este suporte poderia ser
feito através de extensões: além de possibilitar que suporte a novos
compiladores/debugers seja facilmente adicionado, isto diminuiria o
número de forms linkados diretamente no binário. As extensões usariam
APIs do Notes para que pudessem se comunicarem com os aplicativos por
pipes de forma mais fácil e multi-plataforma. No caso do CVS, o suporte
poderia ser interno, já que trata-se de algo amplamente usado. O mesmo
com o FTP - mas neste a implementação não precisaria de um programa
externo para rodar (existe uma biblioteca SL chamada Synapse para
Delphi/Kylix que nos permitirá fazer isto facilmente).</span></small><br>
</small></big>
<br style="font-family: helvetica,arial,sans-serif;">
<big style="font-family: helvetica,arial,sans-serif;"><small
style="font-weight: bold;">Compiladores e debugers<br>
</small><small>O Notes suportaria por padrão os compiladores mais
usados no windows (vc++, delphi, free pascal, gcc, java, etc.) e no
linux (gcc e suas variações, java, kylix, etc.). Para cada compilador
(o compilador do projeto será escolhido pelo usuário nas propriedades
do projeto) o Notes exibirá um diálgo diferente, permitindo que o
usuário configure todas as opções do compilador como se estivesse
usando uma IDE específica para a sua linguagem. Quanto aos debugers, </small></big><big
style="font-family: helvetica,arial,sans-serif;"><small>seriam
suportados aqueles mais usados, como o GNU Debuger, o jdb, etc. </small><small
style="font-weight: bold;"><br>
</small></big><big style="font-family: helvetica,arial,sans-serif;"><small
style="font-weight: bold;"><br>
</small><small style="font-weight: bold;"><br>
CVS<br>
</small><small>O gerenciado de CVS do Notes permitirá que você use esta
ferramenta de maneira fácil e sem sair da IDE. O gerenciador estará
integrado ao resto do Notes, permitindo por exemplo que um novo projeto
seja criado a partir do downlod (checkout) de fontes de um servidor
local ou remoto. Assim você podecom facilitade começar a participar de
um dos muitos projetos de software livre existentes!</small><small
style="font-weight: bold;"><br>
<br>
<br>
Sites dinâmicos e Linguagens de Script<br>
</small><small>Os desenvolvedores de sites dinâmicos (php, jsp, asp,
etc.) não foram esquecidos. Você poderá publicar o projeto para um ftp
ou para uma pasta local e ver o resultado em um dos seus browser - tudo
isto sem sair da IDE. Da mesma forma, os desenvolvedores de script
poderão rodar seus aplciativos facilmente. No caso de linguagens de
script muito usadas e que possuam um debuger padrão, este será
suportado da mesma forma que os debugers para linguagens compiladas.</small><small
style="font-weight: bold;"><br>
<br>
<br>
</small><span style="font-weight: bold;">Extensibilidade<br>
</span><small>Por mais que nos esforcemos, nunca poderemos oferecer
tudo o que um usuário precisa. Há ferramentas que são muito
específicas, isto é, úteis apenas para uma linguagem ou para alguns
poucos usuários. Há linguagens que não existem ainda ou outras, mais
antigas, que poderão não ser suportadas por padrão quando o Notes 2 for
lançado. E além disto, todos os membros da equipe são humanos! Para
resolver o problema, o Notes 2 será altamente extensível: você poderá
adicionar suporte a novas linguagens, criar novos comandos na sua
linguagem de script preferida para fazer pequenas modificações no
código ou, até mesmo, escrever novos diálogos e ferramentas - plugins -
em C/C++, Object Pascal, etc. Além de tudo isto, as
extensões poderão ser instaladas através do Notes e farão todas as
modificações necessárias para que você possa sair usando elas sem
precisar ler manuais complicados.<br>
<br>
<big>Plugins<br>
<small>Os plugins serão as extensões mais poderosas no Notes 2. Isto
por que os plugins terão acesso a uma API do Notes, feita especialmente
para eles. Com isto poderão conseguir todo tipo de informações que
precisarem, poderão alterar certos comportamentos, capturar eventos,
usar bibliotecas do Notes (como a de expressões regulares ou a de
configurações), etc. Um plugin poderá implementar "serviços" (um novo
comportamento, como inserir uma quebra de linha toda vez que você
digitar "{"), diálogos, novas ferramentas que podem ser dockadas aos
painéis do Notes 2, etc.<br>
<br>
<small style="color: rgb(0, 0, 102);"><span style="font-weight: bold;">Implementação:</span>
o código para a implementação dos plugins já existe, então não há tanto
trabalho pela frente. Talvez a maior dificuldade seja o que incluiremos
na API - pois precisamos saber extamente de que métodos temos para
poder permitir que plugins usem eles. </small><br>
</small>
<br>
Scripts<br>
<small>No Notes 2 você poderá usar a sua linguagem de scripts preferida
para adicionar novas ferramentas ao Notes (claro que você precisará ter
o interpretador já instalado, não dá para querer que o Notes aprenda a
interpretar todas as linguagens de scripts existentes). Outra novidade
é que você poderá ter interfaces simples para o seus scripts - usando
apenas a sua linguagem de script e um pouco de XML (que é fácil). Com
isto você poderá adicionar, por exemplo, um botão na barra de
ferramentas que, quando acionado, mostre ao usuário um diálogo com
várias opções permitindo a ele criar uma tabela HTML em poucos
segundos. <br>
<br>
</small></big></small></big><big
style="font-family: helvetica,arial,sans-serif;"><small><big><small><small
style="color: rgb(0, 0, 102);"><span style="font-weight: bold;">Implementação:</span>
relativamente simples. O Notes lê primeiro o arquivo XML que define a
gui. Cada membro da gui possui o nome de uma variável anexado a ele.
Conforme o usuário manipula a GUI, estes valores são armazenados nas
variáveis. Por exemplo, se a GUI possui um campo de texto e o usuário
preenche nele "Isto é o valor da variável" e a variável associada ao
campo chama-se MinhaVariável, MinhaVariável armazena a string </small></small></big></small></big><small
style="color: rgb(0, 0, 102); font-family: helvetica,arial,sans-serif;"><big><small>"Isto
é o valor da variável". Quando o usuário clcia OK na GUI, o Notes abre
o arquivo de script e substituí nele as variáveis pelo valor que o
usuário deu para elas. Por exemplo, achando %MinhaVariável% no script,
o Notes a substituirpa por </small></big></small><small
style="color: rgb(0, 0, 102); font-family: helvetica,arial,sans-serif;"><big><small>"Isto
é o valor da variável". Depois disto, o Notes executa o script. O
script cria então alguns arquivos: um com a sua saída (normalmente é o
texto modificado); outro com erros, quando necessário; e um terceiro
que definirá o que o Notes fará com a suas saída.</small></big></small><br>
<big style="font-family: helvetica,arial,sans-serif;"><small><big>
<br>
Suporte a novas linguagens<br>
</big>Através das extensões será possível também adicionar suporte a
outras linguagens e melhorar o suporte as linguagens que são suportadas
no Notes 2 por padrão. Uma extensão poderá conter templates, o arquivo
de coloração de código para a linguagem, snippets, scripts, plugins,
etc. </small><span style="font-weight: bold;"><br>
<br>
</span><span style="font-weight: bold;">Mais detalhes</span><br>
<br>
ToolBox<small><br>
O Notes SE incluia o menu inserir. Apesar de ser altamente funcional,
ele tinha um problema: você tinha que navegar pelos submenus até achar
o que queria inserir. Para solucionar este problema, a equipe do Notes
incluirá um ToolBox no painel vertical, que facilitará o acesso aos
códigos do menu inserir.<br>
<br>
<big>Ferramentas para SQL e XML<small><br>
O Notes 2 incluirá também ferramentas para que você possa manipular
banco de dados, construir querys SQL com facilidade e editar
visualmente arquivos XML.</small></big></small></big>
</body>
</html>
|