[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> |