Thread: [Notes2-team] Bem-vindos novos membros!
Brought to you by:
andersonrb
|
From: Anderson R. B. <no...@ig...> - 2003-09-16 00:56:23
|
Ol=E1 pessoar, Com a aprova=E7=E3o de voc=EAs, j=E1 adicionei oficalmente a Maidy e o Al= lan a Equipe. Quero aproveitar para ser o primeiro a dar as boas-vindas aso novos membros. Aos "velhos": estou no aguardo de coment=E1rios/id=E9ias/cr=EDticas a pro= posta=20 que apresentei. Se n=E3o ouvir nada esta semana, tomarei isto como um "a proposta est=E1=20 =F3tima, vamos trabalhar". Temos que correr contra o tempo, n=E3o d=E1 para enrolar mais= ...=20 Afinal, voc=EAs querem trabalhar ou n=E3o???! Aos "novos": a tal proposta est=E1 anexa. Consiste em um "roadmap", um=20 mapa que prop=F5e v=E1rias fases para o desenvolvimento do Notes, a=E7=F5es de marketing,=20 cria=E7=E3o da documenta=E7=E3o, desenvolvimento do site, da imagem do Notes 2, etc. LEIAM! Junto est=E3o=20 os planos do Notes 2 e especifica=E7=F5es t=E9cnicas que s=F3 interessam aos programad= ores,=20 mas estou mandando junto caso queriam olhar :) Aguardo vossos coment=E1rios, Anderson R. Barbieri |
|
From: Robson C. d. S. <rcs...@ma...> - 2003-09-17 03:23:26
|
Est=E1 =F3timo, pelo menos pra n=F3s da documenta=E7=E3o,(n=E3o sei se = a Maidy concorda) que entraremos em a=E7=E3o um pouco mais tarde. :) ----- Original Message -----=20 From: Anderson R. Barbieri=20 To: not...@li...=20 Sent: Monday, September 15, 2003 9:53 PM Subject: [Notes2-team] Bem-vindos novos membros! Ol=E1 pessoar, Com a aprova=E7=E3o de voc=EAs, j=E1 adicionei oficalmente a Maidy e o = Allan a Equipe. Quero aproveitar para ser o primeiro a dar as boas-vindas = aso novos membros. Aos "velhos": estou no aguardo de coment=E1rios/id=E9ias/cr=EDticas a = proposta=20 que apresentei. Se n=E3o ouvir nada esta semana, tomarei isto como um "a proposta = est=E1=20 =F3tima, vamos trabalhar". Temos que correr contra o tempo, n=E3o d=E1 para enrolar = mais...=20 Afinal, voc=EAs querem trabalhar ou n=E3o???! Aos "novos": a tal proposta est=E1 anexa. Consiste em um "roadmap", um = mapa que prop=F5e v=E1rias fases para o desenvolvimento do Notes, a=E7=F5es de = marketing,=20 cria=E7=E3o da documenta=E7=E3o, desenvolvimento do site, da imagem do Notes 2, etc. LEIAM! Junto = est=E3o=20 os planos do Notes 2 e especifica=E7=F5es t=E9cnicas que s=F3 interessam aos = programadores,=20 mas estou mandando junto caso queriam olhar :) Aguardo vossos coment=E1rios, Anderson R. Barbieri -------------------------------------------------------------------------= ----- Notes 2 Roadmap Este roadmap especifica cada uma das fases de desenvolvimento do Notes = 2, tanto em rela=E7=E3o a cria=E7=E3o do programa quanto as a=E7=F5es de = todos as =E1reas do projeto. FASE 1: - Cria=E7=E3o do planejamento do Notes 2 entre os membros da equipe = levando em considera=E7=E3o todas as sugest=F5es dadas pelo usu=E1rio; - Cria=E7=E3o deste roadmap; - Constru=E7=E3o da Especifica=E7=E3o do Controle de Edi=E7=E3o do = Notes; - Constru=E7=E3o da Especifica=E7=E3o do site de desenvolvimento - = NotesDev. FASE 2: - Desenvolvimento do Controle de Edi=E7=E3o do Notes; - Desenvolvimento do NotesDev; - Cria=E7=E3o do logo do Notes 2 e indentidade visual b=E1sica; - A=E7=F5es de marketing para informar os usu=E1rios do in=EDcio de = desenvolvimento e sobre o que est=E1 sendo planejado para o Notes 2 = (manuten=E7=E3o dos usu=E1rios atuais); - Cria=E7=E3o de especifica=E7=F5es sobre como funcionar=E3o os menus = e atalhos no Notes 2. FASE 3: - Implementa=E7=E3o dos menus e atalhos no Notes 2; - Lan=E7amento oficial do NotesDev; - Marketing mostrando o logo e indentidade visual do Notes 2 aos = usu=E1rios atuais; - Divulga=E7=E3o do NotesDev; - Divulga=E7=E3o da primeira vers=E3o p=FAblica de desenvolvimento; - Cria=E7=E3o de uma pequena documenta=E7=E3o para beta-testers = (readme, manual de instala=E7=E3o, como reportar bugs e sugest=F5es, = capacidades j=E1 implementadas, etc.); FASE 4: - Lan=E7amento e divulga=E7=E3o da primeira vers=E3o de = desenvolvimento ao p=FAblico; - Corre=E7=F5es dos bugs reportados, analise das primeiras = sugest=F5es; - Cria=E7=E3o das especifica=E7=F5es relativas a interface do Notes 2 = (localiza=E7=F5es de bot=F5es, desenho de pain=E9is, desenhos de di=E1logos, etc.); - Cria=E7=E3o da Especifica=E7=E3o do suporte a extens=F5es; FASE 5: - Implementa=E7=E3o do suporte a extens=F5es (e algumas extens=F5es = como o di=E1logo localizar); - Desenvolvimento das partes da documenta=E7=E3o relativas as = extens=F5es; - Cria=E7=E3o das especifica=E7=F5es das ferramentas do Notes 2: = tasklist, gerenciador CVS, gerenciador FTP, barra com combos de = navega=E7=E3o e classview; FASE 6: - Lan=E7amento e divulga=E7=E3o da segunda vers=E3o de desenvolvimento = p=FAblica do Notes 2; - Implementa=E7=E3o das ferramentas do Notes 2; - Desenvolvimento da documenta=E7=E3o das ferramentas do Notes 2; - Cria=E7=E3o da especifica=E7=E3o do gerenciamento de temas do Notes = 2; FASE 7: - Lan=E7amento e divulga=E7=E3o da terceira vers=E3o de = desenvolvimento p=FAblica do Notes 2; - Implementa=E7=E3o do gerenciamento de temas do Notes 2; - Desenvolvimento da documenta=E7=E3o relativa ao suporte a temas do = Notes 2; - Cria=E7=E3o dos primeiros temas para teste; - Cria=E7=E3o da especifica=E7=E3o dos di=E1logos de configura=E7=E3o = do Notes 2; FASE 8: - Lan=E7amento e divulga=E7=E3o da quarta vers=E3o de desenvolvimento = p=FAblica do Notes 2; - Implementa=E7=E3o dos di=E1logos de configura=E7=E3o do Notes 2; - Desenvolvimento da documenta=E7=E3o relativa aos dos di=E1logos de = configura=E7=E3o; - In=EDcio da cria=E7=E3o do site do Notes 2; - Cria=E7=E3o do instalador do Notes 2; - Grande divulga=E7=E3o do lan=E7amento da vers=E3o alpha do Notes 2; FASE 9: - Lan=E7amento e divulga=E7=E3o da vers=E3o alpha do Notes 2; - Corre=E7=F5es de bugs e analise das =FAltimas sugest=F5es; - Cria=E7=E3o da especifica=E7=E3o das modifica=E7=F5es para a = vers=E3o beta do Notes 2; FASE 10: - Desenvolvimento da vers=E3o beta; - Grande divulga=E7=E3o da vers=E3o beta; - Cria=E7=E3o da campanha de marketing do Notes 2; - Finaliza=E7=E3o da documenta=E7=E3o; FASE 11: - Lan=E7amento da vers=E3o beta; - Per=EDodo de Freeze (2 meses apenas fazendo corre=E7=F5es de bugs). - Finaliza=E7=E3o do site; - =DAltimas corre=E7=F5es na documenta=E7=E3o, instalador, etc. - In=EDcio da divulga=E7=E3o da vers=E3o final do Notes 2; FASE 12: - Lan=E7amento do Notes 2, do site e da campanha de marketing!!!!!!!!! - F=E9rias :) -------------------------------------------------------------------------= ----- Especifica=E7=E3o do Controle de Edi=E7=E3o do Notes (CEN) O Controle de edi=E7=E3o do Notes (CEN) ser=E1 um componente = desenvolvido em Object Pascal para ser o "editor" do Notes 2. Ele ser=E1 = baseado no componente de edi=E7=E3o SynEdit (synedit.sf.net), mas ter=E1 = muitas coisas diferentes dele, principalmente, um modo totalmente = diferente de colorir o c=F3digo, suporte a folding e detec=E7=E3o de = erros no c=F3digo. O CEN ser=E1 um componente da CLX, ou seja, poder=E1 = funcionar exatamente da mesma forma no linux e no windows. O modo como o = CEN far=E1 a colora=E7=E3o do c=F3digo =E9 totalmente inspirada na = colora=E7=E3o de c=F3digo do editor Kate. O c=F3digo para suporte a = folding provavelmente vir=E1 do editor JeditEdit. O CEN n=E3o ter=E1 meios de indentificar a linguagem que estiver sendo = editada - ser=E1 de responsabilidade do Notes 2 setar a linguagem antes = de carregar um documento. Da mesma forma que muitos controles do Delphi, = o CEN disponibilizar=E1 os m=E9todos LoadFromFile e SaveToFile que = ser=E3o otimizados em rela=E7=E3o a colora=E7=E3o de sintaxe, foldings, = analise de erros, convers=E3o entre codifica=E7=F5es de texto, etc para = abrir e salvar arquivos.=20 Este documento visa especificar cada uma das capacidades do CEN quanto = ao seu comportamento, dando, quando poss=EDvel id=E9ias para a = implementa=E7=E3o do mesmo. Abaixo s=E3o explicadas cada uma das = capacidades do CEN. 1) Capacidades b=E1sicas de edi=E7=E3o Ao n=EDvel do entendimento do usu=E1rio, o CEN ter=E1 apenas 3 = capacidades de edi=E7=E3o: a inser=E7=E3o de texto; drag and drop de = texto; e sele=E7=E3o de texto com o mouse. Ele n=E3o responder=E1, = sozinho, a nenhum tipo de atalho (del, teclas direcionais, etc.) nem = ter=E1 popups pr=E9-definidas, pois estas coisas ser=E3o todas = configur=E1veis no Notes 2. Ou seja, =E9 do Notes 2 a responsabilidade = de chamar os m=E9todos necess=E1rios para que estas coisas sejam = realizadas. Por outro lado, ao n=EDvel do programador o CEN ter=E1 = m=E9todos para todas as tarefas de edi=E7=E3o - menos a localiza=E7=E3o = de texto, que ser=E1 de responsabilidade de outro m=F3dulo. Uma = sugest=E3o para os m=E9todos e propriedades b=E1sicos est=E1 abaixo: M=E9todo/Propriedade Par=E2metros Descri=E7=E3o =20 Undo =20 Desfaz a =FAltima opera=E7=E3o. =20 Redo =20 Refaz a =FAltima opera=E7=E3o. =20 CanUndo =20 True se a =FAltima opera=E7=E3o pode ser desfeita. Caso = contr=E1rio, retorna false. =20 CanRedo =20 True se a =FAltima opera=E7=E3o pode ser refeita. Caso = contr=E1rio, retorna false. =20 Cut =20 Recorta o texto selecionado. =20 Copy =20 Copia o texto selecionado. =20 Paste =20 Colar da =E1rea de transfer=EAncia. =20 Delete =20 Deleta o pr=F3ximo caracter ou a sele=E7=E3o. =20 SelectAll =20 Seleciona todo o texto. =20 SelectWordAtCursor =20 Seleciona a palavra na qual estiver o cursor. =20 GetWordAtCursorAsStr =20 Retorna a palavra na qual est=E1 o cursor em uma string. =20 SelectCurrentLine =20 Seleciona a linha em que est=E1 o cursor. =20 SelectLine Line: integer; Seleciona a linha indicada no par=E2metro line. =20 SelectRange AStart, AEnd: integer; Seleciona o texto entre Astart e Aend. =20 SelPos =20 Permite pegar/setar a posi=E7=E3o do cursor. =20 SelLength =20 Permite pegar/setar a quantidade de caracteres selecionados. =20 Length =20 N=FAmero de caracteres no texto. =20 LinesCount =20 N=FAmero de linhas do texto. =20 Lines =20 Propriedade que retona/seta o texto como uma TStringList e/ou = permite manipular o texto linha a linha. =20 Text =20 Propriedade que retorna/seta o texto como string. =20 SelText =20 Propriedade que retorna/seta o texto selecionado como string. =20 Modified =20 Propriedade que permite saber se o texto foi modificado (deve ser = setada como true ao carregar/salvar texto). =20 LineLength Line: integer Retorna/seta o n=FAmero de caracteres da linha. =20 GetFirstVisibleLine =20 Retorna o n=FAmero da primeira linha vis=EDvel. =20 GetLastVisibleLine =20 Retorna o n=FAmero da =FAltima linha vis=EDvel. =20 HideSelection =20 Especifica se a sele=E7=E3o deve ser escondida. =20 SelMode ASelMode: TCENSelMode; Especifica o modo de sele=E7=E3o (coluna, normal). =20 CurrentLine =20 Permite setar/pegar a linha em que est=E1 o cursor. =20 PosToChar Pos: Tpoint; Retorna o n=FAmero do caracter que est=E1 na posi=E7=E3o = especificada por Pos (X, Y). =20 PosFromChar CharPos: integer; Retorna a posi=E7=E3o do caracter especificado em CharPos. =20 2) Colora=E7=E3o de c=F3digo A colora=E7=E3o de c=F3digo ser=E1 feita pelo CEN unindo duas fontes = de dados - ambas no formato XML. Uma trar=E1 regras que permitir=E3o = dividir o texto conforme a sintaxe da linguagem que estiver sendo = colorida (arquivo LangRules.xml). Outra dir=E1 ao CEN como pintar cada = parte da sintaxe e como se comportar quando o usu=E1rio estiver editando = o c=F3digo (arquivo LangConfig.xml). O CEN ter=E1 ent=E3o um "parser = gen=E9rico" - ou seja, um parser capaz de entender qualquer formato = desde que os dados lhe digam como ele est=E1 estruturado. a) LangRules.xml O CEN n=E3o dividir=E1 o c=F3digo em tokens separados por espa=E7os em = branco. O texto ser=E1 separado por linhas e cada linha poder=E1 ter uma = ou mais regi=F5es. As regras contidas em LangRules.xml ser=E3o aplicadas = uma a uma na linha corrente e o resultado desta analise ser=E1 guardado = na mem=F3ria. Cada vez que o controle for pintado, os resultados desta = an=E1lise ser=E3o lidos e mostrados usando as configura=E7=F5es do = usu=E1rio para aquela linguagem na tela. Um arquivo LangRules.xml ser=E1 = parecido com o texto abaixo: ----------------- LangRules.xml ------------------- <LangRules> =20 <info> <authors> <author> <name>Equipe do Notes</name> <email>no...@ig...</email> <site>http://notes.codigolivre.org.br</site> </author> </authors> <version>1.0</version> </info> =20 =20 <regions> <region>comentario</region> <region>palavrachave</region> <region>inteiro</region> </regions> =20 <rules> <rule region=3D"comentario" EndAt=3D"EOL"> <find2chars str=3D"//" /> </rule> <rule region=3D"palavrachave" EndAt=3D"Self"> =20 <keyword str=3D"if" />=20 <keyword str=3D"for" /> =20 <keyword str=3D"while" /> =20 <keyword str=3D"function" /> =20 <keyword str=3D"until" /> =20 <keyword str=3D"die" /> =20 </rule> =20 <rule region=3D"inteiro" EndAt=3D"Self"> <findInteger /> </rule> </rules> </LangRules> --------------- fim de LangRules.xml -------------- O arquivo =E9 dividido em tr=EAs partes. A primeira =E9 um "header", = um cabe=E7alho com informa=E7=F5es sobre o(s) autor(es) do arquivo, = vers=E3o, etc. A segunda parte define as regi=F5es que existem no = formato e a =FAltima cont=E9m as regras que ser=E3o usadas para analisar = cara linha do c=F3digo. A tag "rule" cont=E9m o atributo "region" que informa qual regi=E3o a = regra est=E1 procurando e a tag "EndAt" que diz ao CEN onde a regi=E3o = ir=E1 acabar se a regra obtiver sucesso (no exemplo, EOL diz que o = coment=E1rio vai at=E9 o fim da linha e Self indica que a regi=E3o acaba = na string encontrada mesmo). Logo depois disto vem a tag que diz qual = =E9 a regra. O CEN ter=E1 tags pr=E9-definidas para encontrar certos = tipos de elementos comuns a diversas sintaxes (como a tag "findInteger") = e tags que permitem fazer v=E1rios tipos de buscas (como a = "find2Chars"). Valores poss=EDveis para o atributo EndAt: Nome: Descri=E7=E3o: =20 EOL Indica que a regi=E3o acaba ao fim da linha. =20 Self=20 A regi=E3o acaba na pr=F3pria string encontrada. =20 ID:[ValorDaID]=20 Indica o ID de outra "rule" (regra) que o CEN dever=E1 usar para = encontrar o fim da regi=E3o. =20 Space Pr=F3ximo espa=E7o. =20 Tab Pr=F3ximo caracter TAB. =20 BlankSpace Pr=F3ximo espa=E7o, TAB ou quebra de linha. =20 Regras: Nome: Atributos: Descri=E7=E3o: =20 FindInteger -- Encontra os inteiros da linha.=20 =20 FindHex -- Encontra Hexadecimais. =20 FindOct -- Encontra octais. =20 FindFloat -- Encontra pontos flutuantes. =20 FindChar str Encontra o caracter especificado em str. =20 Find2Chars str Encontra os dois caracteres especificados em str. =20 FindAnyOfChars str Encontra qualquer um dos caracteres especificados em str. =20 FindStr Str, CaseSensitive Encontra a string especificada em str. =C9 casesensitive se o = atributo CaseSensitive for "true". =20 RegEx Str, CaseSensitive Busca a express=E3o regular especificada em str. =C9 = casesensitive se o atributo CaseSensitive for "true". =20 Keyword str Procura pela keyword especificada em str. =20 FindRangeStr StrBegin, strEnd Procura pelo intervalo entre StrBegin e StrEnd. =20 FindRangeChar StrBegin, strEnd Procura o intervalo de texto entre os caracteres definidos em = StrBegin e strEnd. =20 FindRange2Chars StrBegin, strEnd Procura o intervalo de texto entre duas strings com 2 caracteres = StrBegin e StrEnd. =20 b) LangConfig.xml=20 Guarda as configura=E7=F5es do usu=E1rio para a linguagem. No que diz = respeito a colora=E7=E3o de c=F3digo, o importante =E9 a parte nomeada = "RegionsStyles". Exemplo: ----------- LangConfig.xml ----------- <LangConfig> =20 <RegionsStyles> <RegionStyle> <RegionName>Comentario</RegionName> <Color>0</Color> <bold>false</bold> <italic>true</italic> <underline>false</underline> </RegionStyle> <RegionStyle> <RegionName>palavraschaves</RegionName> <Color>0</Color> <bold>true</bold> <italic>false</italic> <underline>false</underline> </RegionStyle> <RegionStyle> <RegionName>inteiro</RegionName> <Color>0</Color> <bold>false</bold> <italic>false</italic> <underline>false</underline> </RegionStyle> </RegionsStyles> </LangConfig> -------- fim de LangConfig.xml -------- Com este arquivo, combinado ao exemplo dado de LangRules.xml, o CEN = mostraria ao usu=E1rio todas as strings "if" em negrito e com a cor = preta (0).=20 O CEN precisar=E1 dividir o texto em suas regi=F5es em dois momentos = distintos: ao carregar o texto e ao texto ser editado. Ao fazer essa = divis=E3o durante a edi=E7=E3o, o CEN dever=E1 re-analisar apenas as = regi=F5es pr=F3ximas a regi=E3o que est=E1 sendo editada - precisaremos = testar se o melhor =E9 re-analisar apenas as linhas mais pr=F3ximas ou = as regi=F5es mais pr=F3ximas e qual a quantidade destas.=20 3) Analisador de erros O CEN poder=E1 descobrir erros no c=F3digo enquanto o usu=E1rio = digita. O CEN ter=E1 um mecanismo de verifica=E7=E3o do c=F3digo que = analisar=E1 o texto de tempos em tempos e cada trecho com erros ser=E1 = guardado na mem=F3ria e, posteriormente, pintado pelo CEN com uma linha = colorida em forma de ondas - como os erros de ortografia no MS Word ou = OpenOffice. O analisador ainda ter=E1 dois m=E9todos: um permitir=E1 = retornar corre=E7=F5es para certo erro na forma de uma lista de strings = - que provavelmente ser=E1 apresentada ao usu=E1rio pelo Notes 2 como um = submenu - e outro que permitir=E1 aplicar uma destas corre=E7=F5es.=20 4) Debug O CEN ter=E1 uma barra lateral (gutter) onde o usu=E1rio poder=E1 = clicar para setar Breakpoints. O breakpoint ser=E1 mostrado como um = pequeno =EDcone nesta barra lateral. O programador podera usar a = fun=E7=E3o GetBreakPoints para pegar um array contendo o n=FAmero de = cada uma das linhas que possui breakpoints. Outros m=E9todos = (SetBreakPoint, DelBreakPoint, ClearBreakPoints, CanSetBreakPoints) = estar=E3o dispon=EDveis para gerenciar os breakpoints. Al=E9m dos Breakpoints, o CEN poder=E1 indicar linhas com erros (a = linha ter=E1 o fundo trocado para uma cor especificada pelo usu=E1rio, = vermelho por padr=E3o). 5) Folding O CEN ter=E1 a capacidade de esconder/mostrar parte do texto. Isto = funcionar=E1 do seguinte modo: A) O usu=E1rio especifica o inicio e o fim do trecho que quer esconder = (para isto ele dever=E1 usar duas strings diferentes para indicar o = in=EDcio e o fim do trecho de folding, por padr=E3o estas strings = ser=E3o "{{{" e "}}}" respectivamente). B) Logo que isto =E9 especificado o CEN identifica o trecho de folding = e adiciona na barra lateral (gutter) um =EDcone com o sinal de menos = [-]. Quando este sinal for clicado, o trecho de folding ser=E1 = escondido. C) Quando um trecho est=E1 escondido, um =EDcone de mais [+] aparece = na barra lateral e, ao lado disto no campo de edi=E7=E3o, um trecho que = contem os primeiros caracteres escondidos e o n=FAmero da primeira e da = =FAltima linha escondida. D) O usu=E1rio dever=E1 clicar no =EDcone de [+] para mostrar = novamente o trecho de folding. =C9 importante observar que o trecho de folding ser=E1 sempre = constitu=EDdo por linhas inteiras e que estas linhas ser=E3o apenas = escondidas da vis=E3o no momento em que o CEN for pintado na tela. O = texto estar=E1 sempre dispon=EDvel, sempre inteiro. M=E9todos = especificos dever=E3o permitir saber quais trechos est=E3o escondidos, = setar/deletar trechos de folding, etc. Podemos usar o c=F3digo do editor JediEdit para iniciar essa = funcionalidade. 6) Indenta=E7=E3o autom=E1tica de c=F3digo Para cada uma das linguagens o usu=E1rio por=E1 escolher usar entre o = AutoIndent e o SmartIndent, ou ainda desabilitar a indenta=E7=E3o = autom=E1tica. Estas configura=E7=F5es ser=E3o guardadas no arquivo = LangConfig.xml. Um modelo de como devem funcionar o autoindent e o = smartindent pode ser retirado da edi=E7=E3o atual do Notes (1.5.4).=20 a) Autoindent Quando a op=E7=E3o autoindent estiver ativada, o CEN manter=E1 a = indenta=E7=E3o da linha atual ao criar uma nova linha.=20 b) SmartIndent Quando a op=E7=E3o SmartIndent estiver ativada, o CEN indentar=E1 o = c=F3digo automaticamente enquanto o usu=E1rio digita. Para cada = linguagem um ou mais iniciador de bloco e um ou mais finalizador de = bloco dever=E1 ser definido. Por exemplo, poder=EDamos ter "{" e "}" = como iniciadores e finalizadores de bloco em PHP. Quando o usu=E1rio = teclar <ENTER> ap=F3s um iniciador de bloco, o CEN criar=E1 uma nova = linha com indenta=E7=E3o maior do que a indenta=E7=E3o da linha atual. = Ao teclar <ENTER> ap=F3s um finalizador, o CEN primeiro diminuir=E1 a = indenta=E7=E3o da linha atual em rela=E7=E3o a linha superior e depois = criar=E1 uma nova linha com a mesma indenta=E7=E3o da linha atual. 7) Autoclose Cada linguagem ter=E1 uma lista de strings que ser=E3o automaticamente = "fechadas" pelo CEN. Por exemplo, ao digitar "<HTML>" o CEN = automaticamente inseriria "</HTML>" logo depois, se o usu=E1rio = estivesse editando HTML. A lista de strings ser=E1 guarda da seguinte = forma, em um arquivo denominado LangAutoClose.xml: ------- LangAutoClose.xml ------------------ <LangAutoClose> <!-- Lista de caracteres que chamam o mecanismo de autoclose --> <FireAutoCloseChars><![CDATA[<>-"]]></FireAutoCloseChars> <!-- Fecha tags automaticamente quando true. Use em HTML, XMl, etc. = --> <AutoCloseTags>true</AutoCloseTags> <!-- Lista de strings que devem ser fechadas --> <AutoCloseStr> <Open><![CDATA[<!--]]></Open> <Close><![CDATA[-->]]></Close> </AutoCloseStr> <AutoCloseStr> <Open><![CDATA["]]></Open> <Close><![CDATA["]]></Close> </AutoCloseStr> </LangAutoClose> -----fim de LangAutoClose.xml -------------- A tag fireAutoClose tags define uma lista de caracteres que invocam o = mecanismo de autoclose ao serem digitados. No exemplo, quando o = usu=E1rio digitar uma aspa (") o mecanismo ser=E1 invocado. Ele = descobrir=E1 que a aspa est=E1 na lista de strings a serem fechadas = (est=E1 na tag Open, dentro de uma tag AutocloseStr), e que ela dever=E1 = ser fechada com outra aspa. A tag AutocloseTag permite dizer ao CEN para = fechar tags no estilo de XML e HTML de forma autom=E1tica - ou seja, = assim n=E3o =E9 necess=E1rio especificar as tags a serem fechadas. No = caso de AutocloseTag estar setado como true, o CEN automaticamente = incluir=E1 os caracteres "<" e ">" a lista de caracteres que chama o = mecanismo de autoclose - no exemplo eles foram adicionados manualmente = para manter a clareza, mas isto n=E3o era obrigat=F3rio. 7) Outras capacidades do CEN a) Mostrar linhas na gutter O CEN ter=E1 a habilidade de mostrar o n=FAmero de cada uma das linhas = na gutter (tanto come=E7ando a numera=E7=E3o por zero quanto por 1). = Essa numera=E7=E3o dever=E1 levar em conta o folding. Nas linhas em que = existir folding ou breakpoint, o n=FAmero da linha n=E3o ser=E1 mostrado = - no lugar disto estar=E1 o =EDcone correspondente a estas fun=E7=F5es. b) Setas direcionais livres (estilo editor do Delphi) O CEN poder=E1 ter setas direcionais que se movem livremente como no = editor do Delphi. Esta capacidade j=E1 faz parte do SynEdit - precisamos = apenas mant=EA-la. c) SmartHome e SmartEnd O SmartHome permite que ao teclar <HOME> (ou outro atalho configurado = para fazer a fun=E7=E3o desta tecla) o cursor v=E1 para o primeiro = caracter da linha que n=E3o seja um espa=E7o e/ou tab. O SmartEnd faz o = mesmo com a tecla <END>. d) Wrap autom=E1tico e trim de espa=E7os ao fim da linha O Wrap autom=E1tico faz o CEN quebrar a linha toda a vez que a linha = chegar a um n=FAmero m=E1ximo de caracteres. O "trim de espa=E7os ao fim da linha" faz o CEN retirar os = caracteres espa=E7o e tab que restam ao final da linha. e) Formato do texto O CEN dever=E1 suportar UNICODE e ASCII com finais de linha estilo = Windows, Unix e Mac. O CEN dever=E1 poder abrir, editar, salvar e = converter entre estes formatos. f) =CAnfase da linha atual e de iniciadores/finalizadores de bloco O CEN dever=E1 poder enfatizar a linha que o usu=E1rio estiver = editando (mudando a cor do fundo). Da mesma forma, o CEN dever=E1 poder = enfatizar os iniciadores/finalizadores de bloco. Se est=E1 op=E7=E3o = estiver ativada, quando o cursor chegar ao iniciador/finalizador de = bloco, o inicializador e o finalizador daquele bloco dever=E1 ser = pintado com um fundo diferente. Por exemplo, em um script PHP, quando o = cursor estiver no caracter "{" este caracter e o finalizador do bloco = "}" dever=E3o ser pintados com fundo diferente. g) Espa=E7os e Tabs O CEN dever=E1 poder inserir espa=E7os no lugar do caracter TAB (o = n=FAmero de espa=E7os dever=E1 ser ajust=E1vel). Quando o usu=E1rio = quiser usar o caracter TAB, ele dever=E1 poder escolher o tamanho visual = deste caracter em rela=E7=E3o ao caracter espa=E7o - ou seja, o caracter = tab poder=E1 ter o tamanho de x espa=E7os. -------------------------------------------------------------------------= ----- Planejamento do Notes 2=20 Editando texto Para poder atender a todas as sugest=F5es feitas pelos usu=E1rios, a = Equipe do Notes decidiu construir um componente (controle) de edi=E7=E3o = pr=F3prio (baseado no famoso componente de edi=E7=E3o SynEdit). Este = componente de edi=E7=E3o funcionara no Windows e no Linux exatamente da = mesma forma. As capacidades dele s=E3o discutidas abaixo: Colora=E7=E3o de c=F3digo Este =E9 o pedido mais frequente dos usu=E1rios e, com a = constru=E7=E3o do novo componente, poderemos atend=EA-lo. O componente = usar=E1 defini=E7=F5es que ficar=E3o todas em arquivos XML. Isto = significa que a colora=E7=E3o de c=F3digo ser=E1 altamente flex=EDvel, = podendo ser configurada em detalhes pelo usu=E1rio inclusive permitindo = que a comunidade adicione ao Notes suporte a linguagens n=E3o suportadas = pela distribui=E7=E3o padr=E3o. Implementa=E7=E3o: a implementa=E7=E3o da colora=E7=E3o de c=F3digo se = dar=E1 de forma semelhante a de um editor para Linux chamado Kate. = Assim, o texto seria dividido em blocos definidos atrav=E9s de arquivos = XML (por exemplo: coment=E1rio, string, inteiro, etc.) e n=E3o por = simples tokens separados por espa=E7os em branco. Para evitar que o = parser fique lento, sugere-se que, como no Kate, existam regras = pr=E9-prontas para detectar alguns tipos de blocos: inteiros, = hexadecimais, octais, ponto flutuante, keyword (pr=E9-definindo que uma = keyword =E9 uma string sem espa=E7os, iniciada por uma letra e que = permite al=E9m de letras, n=FAmero e o caracter "_"; as keywords s=E3o = fornecidas pelo arquivo xml). Regras para diferenciar bloco de textos = poder=E3o ser facilmente criadas tanto usando express=F5es regulares = como tags que permitem procurar por strings exatas, por um =FAnico = caracter, pordois caracteres, por qualquer um dos caracteres listados, e = pelo intervalo entre uma string/caracter e outra. Este modelo foi = escolhido por se encaixar perfeitamente nas id=E9ias da equipe e por que = o modelo =E9 altamente flex=EDvel podendo ser usado para definir a = colora=E7=E3o de qualquer linguagem de programa=E7=E3o - seja de script, = de marca=E7=E3o, etc. Analisador e corretor de erros / auto-completar O editor poder=E1 detectar erros no c=F3digo enquanto o usu=E1rio = digita dispensando o uso de compiladores e debugers para a = localiza=E7=E3o e corre=E7=E3o de erros simples de programa=E7=E3o. = Al=E9m de detectar os erros, o editor poder=E1 sugerir corre=E7=F5es = baseado nas estruturas padr=F5es da linguagem que o usu=E1rio estiver = usando. O corretor poder=E1 ser usado pelo usu=E1rio para completar = certas constru=E7=F5es. Por exemplo, um usu=E1rio poder=E1 digitar "if = (x=3D=3Dy" e pedir para o editor auto-completar o c=F3digo, o que o = deixaria semelhante a "if (x=3D=3Dy) { }". Implementa=E7=E3o: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=F3digo para ver = se ele est=E1 de acordo com os modelos que ele conhece. Se o modelo = n=E3o estiver de acordo com a estrutura que o analisador conhece ele = marcar=E1 o trecho de c=F3digo como errado. O usu=E1rio poder=E1 = corrigir o erro manaulmente ou atrav=E9s de sugest=F5es dadas pelo = analisador. As sugest=F5es ser=E3o feitas de forma a transformar o bloco = reconhecido como errado na estrutura que ele conhece que for mais = parecida com o bloco de c=F3digo. Debugando O editor teria a capacidade de setar breakpoints quando informado de = que a linguagem pode ser debugada pelo Notes. Al=E9m disto, erros de = compila=E7=E3o seriam marcados, quando poss=EDvel, de forma semelhante = aos erros marcados pelo analisador.=20 Folding Alguns dos editores mais novos permitem que o usu=E1rio esconda certas = partes do c=F3digo. =C9 semelhante a usar o Windows Explorer (ou o = Konqueror/Nautilus no linux) s=F3 que no lugar de poder navegar certas = pastas e arquivos, pode-se navegar pelas partes do seu c=F3digo. O = folding poder=E1 ser controlado pelo usu=E1rio. Bastar=E1 selecionar = algumas linhas de c=F3digo que ... [truncated message content] |
|
From: Maidy <ma...@te...> - 2003-09-17 03:34:46
|
OPA!!!
Primeiramente, obrigada por terem me aceito no grupo!! Espero poder =
contribuir com o pouco que sei e aprender com todos!!
Segundo, estamos ai para trabalhar.... j=E1 disse pro Anderson e repito: =
"Estou aqui pra botar a m=E3o na massa"....
Thanks!! :-))
----- Original Message -----=20
From: Robson Cardoso dos Santos=20
To: not...@li...=20
Sent: Wednesday, September 17, 2003 12:20 AM
Subject: Re: [Notes2-team] Bem-vindos novos membros!
Est=E1 =F3timo, pelo menos pra n=F3s da documenta=E7=E3o,(n=E3o sei =
se a Maidy concorda) que entraremos em a=E7=E3o um pouco mais tarde. :)
----- Original Message -----=20
From: Anderson R. Barbieri=20
To: not...@li...=20
Sent: Monday, September 15, 2003 9:53 PM
Subject: [Notes2-team] Bem-vindos novos membros!
Ol=E1 pessoar,
Com a aprova=E7=E3o de voc=EAs, j=E1 adicionei oficalmente a Maidy e =
o Allan
a Equipe. Quero aproveitar para ser o primeiro a dar as boas-vindas =
aso
novos membros.
Aos "velhos": estou no aguardo de coment=E1rios/id=E9ias/cr=EDticas =
a proposta=20
que apresentei.
Se n=E3o ouvir nada esta semana, tomarei isto como um "a proposta =
est=E1=20
=F3tima, vamos
trabalhar". Temos que correr contra o tempo, n=E3o d=E1 para enrolar =
mais...=20
Afinal, voc=EAs querem
trabalhar ou n=E3o???!
Aos "novos": a tal proposta est=E1 anexa. Consiste em um "roadmap", =
um=20
mapa que prop=F5e
v=E1rias fases para o desenvolvimento do Notes, a=E7=F5es de =
marketing,=20
cria=E7=E3o da documenta=E7=E3o,
desenvolvimento do site, da imagem do Notes 2, etc. LEIAM! Junto =
est=E3o=20
os planos do
Notes 2 e especifica=E7=F5es t=E9cnicas que s=F3 interessam aos =
programadores,=20
mas estou mandando
junto caso queriam olhar :)
Aguardo vossos coment=E1rios,
Anderson R. Barbieri
-------------------------------------------------------------------------=
---
Notes 2 Roadmap
Este roadmap especifica cada uma das fases de desenvolvimento do =
Notes 2, tanto em rela=E7=E3o a cria=E7=E3o do programa quanto as =
a=E7=F5es de todos as =E1reas do projeto.
FASE 1:
- Cria=E7=E3o do planejamento do Notes 2 entre os membros da equipe =
levando em considera=E7=E3o todas as sugest=F5es dadas pelo usu=E1rio;
- Cria=E7=E3o deste roadmap;
- Constru=E7=E3o da Especifica=E7=E3o do Controle de Edi=E7=E3o do =
Notes;
- Constru=E7=E3o da Especifica=E7=E3o do site de desenvolvimento - =
NotesDev.
FASE 2:
- Desenvolvimento do Controle de Edi=E7=E3o do Notes;
- Desenvolvimento do NotesDev;
- Cria=E7=E3o do logo do Notes 2 e indentidade visual b=E1sica;
- A=E7=F5es de marketing para informar os usu=E1rios do in=EDcio de =
desenvolvimento e sobre o que est=E1 sendo planejado para o Notes 2 =
(manuten=E7=E3o dos usu=E1rios atuais);
- Cria=E7=E3o de especifica=E7=F5es sobre como funcionar=E3o os =
menus e atalhos no Notes 2.
FASE 3:
- Implementa=E7=E3o dos menus e atalhos no Notes 2;
- Lan=E7amento oficial do NotesDev;
- Marketing mostrando o logo e indentidade visual do Notes 2 aos =
usu=E1rios atuais;
- Divulga=E7=E3o do NotesDev;
- Divulga=E7=E3o da primeira vers=E3o p=FAblica de desenvolvimento;
- Cria=E7=E3o de uma pequena documenta=E7=E3o para beta-testers =
(readme, manual de instala=E7=E3o, como reportar bugs e sugest=F5es, =
capacidades j=E1 implementadas, etc.);
FASE 4:
- Lan=E7amento e divulga=E7=E3o da primeira vers=E3o de =
desenvolvimento ao p=FAblico;
- Corre=E7=F5es dos bugs reportados, analise das primeiras =
sugest=F5es;
- Cria=E7=E3o das especifica=E7=F5es relativas a interface do Notes =
2 (localiza=E7=F5es de bot=F5es,
desenho de pain=E9is, desenhos de di=E1logos, etc.);
- Cria=E7=E3o da Especifica=E7=E3o do suporte a extens=F5es;
FASE 5:
- Implementa=E7=E3o do suporte a extens=F5es (e algumas extens=F5es =
como o di=E1logo localizar);
- Desenvolvimento das partes da documenta=E7=E3o relativas as =
extens=F5es;
- Cria=E7=E3o das especifica=E7=F5es das ferramentas do Notes 2: =
tasklist, gerenciador CVS, gerenciador FTP, barra com combos de =
navega=E7=E3o e classview;
FASE 6:
- Lan=E7amento e divulga=E7=E3o da segunda vers=E3o de =
desenvolvimento p=FAblica do Notes 2;
- Implementa=E7=E3o das ferramentas do Notes 2;
- Desenvolvimento da documenta=E7=E3o das ferramentas do Notes 2;
- Cria=E7=E3o da especifica=E7=E3o do gerenciamento de temas do =
Notes 2;
FASE 7:
- Lan=E7amento e divulga=E7=E3o da terceira vers=E3o de =
desenvolvimento p=FAblica do Notes 2;
- Implementa=E7=E3o do gerenciamento de temas do Notes 2;
- Desenvolvimento da documenta=E7=E3o relativa ao suporte a temas do =
Notes 2;
- Cria=E7=E3o dos primeiros temas para teste;
- Cria=E7=E3o da especifica=E7=E3o dos di=E1logos de =
configura=E7=E3o do Notes 2;
FASE 8:
- Lan=E7amento e divulga=E7=E3o da quarta vers=E3o de =
desenvolvimento p=FAblica do Notes 2;
- Implementa=E7=E3o dos di=E1logos de configura=E7=E3o do Notes 2;
- Desenvolvimento da documenta=E7=E3o relativa aos dos di=E1logos de =
configura=E7=E3o;
- In=EDcio da cria=E7=E3o do site do Notes 2;
- Cria=E7=E3o do instalador do Notes 2;
- Grande divulga=E7=E3o do lan=E7amento da vers=E3o alpha do Notes =
2;
FASE 9:
- Lan=E7amento e divulga=E7=E3o da vers=E3o alpha do Notes 2;
- Corre=E7=F5es de bugs e analise das =FAltimas sugest=F5es;
- Cria=E7=E3o da especifica=E7=E3o das modifica=E7=F5es para a =
vers=E3o beta do Notes 2;
FASE 10:
- Desenvolvimento da vers=E3o beta;
- Grande divulga=E7=E3o da vers=E3o beta;
- Cria=E7=E3o da campanha de marketing do Notes 2;
- Finaliza=E7=E3o da documenta=E7=E3o;
FASE 11:
- Lan=E7amento da vers=E3o beta;
- Per=EDodo de Freeze (2 meses apenas fazendo corre=E7=F5es de =
bugs).
- Finaliza=E7=E3o do site;
- =DAltimas corre=E7=F5es na documenta=E7=E3o, instalador, etc.
- In=EDcio da divulga=E7=E3o da vers=E3o final do Notes 2;
FASE 12:
- Lan=E7amento do Notes 2, do site e da campanha de =
marketing!!!!!!!!!
- F=E9rias :)
-------------------------------------------------------------------------=
---
Especifica=E7=E3o do Controle de Edi=E7=E3o do Notes (CEN)
O Controle de edi=E7=E3o do Notes (CEN) ser=E1 um componente =
desenvolvido em Object Pascal para ser o "editor" do Notes 2. Ele ser=E1 =
baseado no componente de edi=E7=E3o SynEdit (synedit.sf.net), mas ter=E1 =
muitas coisas diferentes dele, principalmente, um modo totalmente =
diferente de colorir o c=F3digo, suporte a folding e detec=E7=E3o de =
erros no c=F3digo. O CEN ser=E1 um componente da CLX, ou seja, poder=E1 =
funcionar exatamente da mesma forma no linux e no windows. O modo como o =
CEN far=E1 a colora=E7=E3o do c=F3digo =E9 totalmente inspirada na =
colora=E7=E3o de c=F3digo do editor Kate. O c=F3digo para suporte a =
folding provavelmente vir=E1 do editor JeditEdit.
O CEN n=E3o ter=E1 meios de indentificar a linguagem que estiver =
sendo editada - ser=E1 de responsabilidade do Notes 2 setar a linguagem =
antes de carregar um documento. Da mesma forma que muitos controles do =
Delphi, o CEN disponibilizar=E1 os m=E9todos LoadFromFile e SaveToFile =
que ser=E3o otimizados em rela=E7=E3o a colora=E7=E3o de sintaxe, =
foldings, analise de erros, convers=E3o entre codifica=E7=F5es de texto, =
etc para abrir e salvar arquivos.=20
Este documento visa especificar cada uma das capacidades do CEN =
quanto ao seu comportamento, dando, quando poss=EDvel id=E9ias para a =
implementa=E7=E3o do mesmo. Abaixo s=E3o explicadas cada uma das =
capacidades do CEN.
1) Capacidades b=E1sicas de edi=E7=E3o
Ao n=EDvel do entendimento do usu=E1rio, o CEN ter=E1 apenas 3 =
capacidades de edi=E7=E3o: a inser=E7=E3o de texto; drag and drop de =
texto; e sele=E7=E3o de texto com o mouse. Ele n=E3o responder=E1, =
sozinho, a nenhum tipo de atalho (del, teclas direcionais, etc.) nem =
ter=E1 popups pr=E9-definidas, pois estas coisas ser=E3o todas =
configur=E1veis no Notes 2. Ou seja, =E9 do Notes 2 a responsabilidade =
de chamar os m=E9todos necess=E1rios para que estas coisas sejam =
realizadas. Por outro lado, ao n=EDvel do programador o CEN ter=E1 =
m=E9todos para todas as tarefas de edi=E7=E3o - menos a localiza=E7=E3o =
de texto, que ser=E1 de responsabilidade de outro m=F3dulo. Uma =
sugest=E3o para os m=E9todos e propriedades b=E1sicos est=E1 abaixo:
M=E9todo/Propriedade
Par=E2metros
Descri=E7=E3o
=20
Undo
=20
Desfaz a =FAltima opera=E7=E3o.
=20
Redo
=20
Refaz a =FAltima opera=E7=E3o.
=20
CanUndo
=20
True se a =FAltima opera=E7=E3o pode ser desfeita. Caso =
contr=E1rio, retorna false.
=20
CanRedo
=20
True se a =FAltima opera=E7=E3o pode ser refeita. Caso =
contr=E1rio, retorna false.
=20
Cut
=20
Recorta o texto selecionado.
=20
Copy
=20
Copia o texto selecionado.
=20
Paste
=20
Colar da =E1rea de transfer=EAncia.
=20
Delete
=20
Deleta o pr=F3ximo caracter ou a sele=E7=E3o.
=20
SelectAll
=20
Seleciona todo o texto.
=20
SelectWordAtCursor
=20
Seleciona a palavra na qual estiver o cursor.
=20
GetWordAtCursorAsStr
=20
Retorna a palavra na qual est=E1 o cursor em uma string.
=20
SelectCurrentLine
=20
Seleciona a linha em que est=E1 o cursor.
=20
SelectLine
Line: integer;
Seleciona a linha indicada no par=E2metro line.
=20
SelectRange
AStart, AEnd: integer;
Seleciona o texto entre Astart e Aend.
=20
SelPos
=20
Permite pegar/setar a posi=E7=E3o do cursor.
=20
SelLength
=20
Permite pegar/setar a quantidade de caracteres selecionados.
=20
Length
=20
N=FAmero de caracteres no texto.
=20
LinesCount
=20
N=FAmero de linhas do texto.
=20
Lines
=20
Propriedade que retona/seta o texto como uma TStringList e/ou =
permite manipular o texto linha a linha.
=20
Text
=20
Propriedade que retorna/seta o texto como string.
=20
SelText
=20
Propriedade que retorna/seta o texto selecionado como string.
=20
Modified
=20
Propriedade que permite saber se o texto foi modificado (deve =
ser setada como true ao carregar/salvar texto).
=20
LineLength
Line: integer
Retorna/seta o n=FAmero de caracteres da linha.
=20
GetFirstVisibleLine
=20
Retorna o n=FAmero da primeira linha vis=EDvel.
=20
GetLastVisibleLine
=20
Retorna o n=FAmero da =FAltima linha vis=EDvel.
=20
HideSelection
=20
Especifica se a sele=E7=E3o deve ser escondida.
=20
SelMode
ASelMode: TCENSelMode;
Especifica o modo de sele=E7=E3o (coluna, normal).
=20
CurrentLine
=20
Permite setar/pegar a linha em que est=E1 o cursor.
=20
PosToChar
Pos: Tpoint;
Retorna o n=FAmero do caracter que est=E1 na posi=E7=E3o =
especificada por Pos (X, Y).
=20
PosFromChar
CharPos: integer;
Retorna a posi=E7=E3o do caracter especificado em CharPos.
=20
2) Colora=E7=E3o de c=F3digo
A colora=E7=E3o de c=F3digo ser=E1 feita pelo CEN unindo duas fontes =
de dados - ambas no formato XML. Uma trar=E1 regras que permitir=E3o =
dividir o texto conforme a sintaxe da linguagem que estiver sendo =
colorida (arquivo LangRules.xml). Outra dir=E1 ao CEN como pintar cada =
parte da sintaxe e como se comportar quando o usu=E1rio estiver editando =
o c=F3digo (arquivo LangConfig.xml). O CEN ter=E1 ent=E3o um "parser =
gen=E9rico" - ou seja, um parser capaz de entender qualquer formato =
desde que os dados lhe digam como ele est=E1 estruturado.
a) LangRules.xml
O CEN n=E3o dividir=E1 o c=F3digo em tokens separados por espa=E7os =
em branco. O texto ser=E1 separado por linhas e cada linha poder=E1 ter =
uma ou mais regi=F5es. As regras contidas em LangRules.xml ser=E3o =
aplicadas uma a uma na linha corrente e o resultado desta analise ser=E1 =
guardado na mem=F3ria. Cada vez que o controle for pintado, os =
resultados desta an=E1lise ser=E3o lidos e mostrados usando as =
configura=E7=F5es do usu=E1rio para aquela linguagem na tela. Um arquivo =
LangRules.xml ser=E1 parecido com o texto abaixo:
----------------- LangRules.xml -------------------
<LangRules>
=20
<info>
<authors>
<author>
<name>Equipe do Notes</name>
<email>no...@ig...</email>
<site>http://notes.codigolivre.org.br</site>
</author>
</authors>
<version>1.0</version>
</info>
=20
=20
<regions>
<region>comentario</region>
<region>palavrachave</region>
<region>inteiro</region>
</regions> =20
<rules>
<rule region=3D"comentario" EndAt=3D"EOL">
<find2chars str=3D"//" />
</rule>
<rule region=3D"palavrachave" EndAt=3D"Self"> =20
<keyword str=3D"if" />=20
<keyword str=3D"for" /> =20
<keyword str=3D"while" /> =20
<keyword str=3D"function" /> =20
<keyword str=3D"until" /> =20
<keyword str=3D"die" /> =20
</rule>
=20
<rule region=3D"inteiro" EndAt=3D"Self">
<findInteger />
</rule>
</rules>
</LangRules>
--------------- fim de LangRules.xml --------------
O arquivo =E9 dividido em tr=EAs partes. A primeira =E9 um "header", =
um cabe=E7alho com informa=E7=F5es sobre o(s) autor(es) do arquivo, =
vers=E3o, etc. A segunda parte define as regi=F5es que existem no =
formato e a =FAltima cont=E9m as regras que ser=E3o usadas para analisar =
cara linha do c=F3digo.
A tag "rule" cont=E9m o atributo "region" que informa qual regi=E3o =
a regra est=E1 procurando e a tag "EndAt" que diz ao CEN onde a regi=E3o =
ir=E1 acabar se a regra obtiver sucesso (no exemplo, EOL diz que o =
coment=E1rio vai at=E9 o fim da linha e Self indica que a regi=E3o acaba =
na string encontrada mesmo). Logo depois disto vem a tag que diz qual =
=E9 a regra. O CEN ter=E1 tags pr=E9-definidas para encontrar certos =
tipos de elementos comuns a diversas sintaxes (como a tag "findInteger") =
e tags que permitem fazer v=E1rios tipos de buscas (como a =
"find2Chars").
Valores poss=EDveis para o atributo EndAt:
Nome:
Descri=E7=E3o:
=20
EOL
Indica que a regi=E3o acaba ao fim da linha.
=20
Self=20
A regi=E3o acaba na pr=F3pria string encontrada.
=20
ID:[ValorDaID]=20
Indica o ID de outra "rule" (regra) que o CEN dever=E1 usar =
para encontrar o fim da regi=E3o.
=20
Space
Pr=F3ximo espa=E7o.
=20
Tab
Pr=F3ximo caracter TAB.
=20
BlankSpace
Pr=F3ximo espa=E7o, TAB ou quebra de linha.
=20
Regras:
Nome:
Atributos:
Descri=E7=E3o:
=20
FindInteger
--
Encontra os inteiros da linha.=20
=20
FindHex
--
Encontra Hexadecimais.
=20
FindOct
--
Encontra octais.
=20
FindFloat
--
Encontra pontos flutuantes.
=20
FindChar
str
Encontra o caracter especificado em str.
=20
Find2Chars
str
Encontra os dois caracteres especificados em str.
=20
FindAnyOfChars
str
Encontra qualquer um dos caracteres especificados em str.
=20
FindStr
Str, CaseSensitive
Encontra a string especificada em str. =C9 casesensitive se o =
atributo CaseSensitive for "true".
=20
RegEx
Str, CaseSensitive
Busca a express=E3o regular especificada em str. =C9 =
casesensitive se o atributo CaseSensitive for "true".
=20
Keyword
str
Procura pela keyword especificada em str.
=20
FindRangeStr
StrBegin, strEnd
Procura pelo intervalo entre StrBegin e StrEnd.
=20
FindRangeChar
StrBegin, strEnd
Procura o intervalo de texto entre os caracteres definidos em =
StrBegin e strEnd.
=20
FindRange2Chars
StrBegin, strEnd
Procura o intervalo de texto entre duas strings com 2 =
caracteres StrBegin e StrEnd.
=20
b) LangConfig.xml=20
Guarda as configura=E7=F5es do usu=E1rio para a linguagem. No que =
diz respeito a colora=E7=E3o de c=F3digo, o importante =E9 a parte =
nomeada "RegionsStyles". Exemplo:
----------- LangConfig.xml -----------
<LangConfig>
=20
<RegionsStyles>
<RegionStyle>
<RegionName>Comentario</RegionName>
<Color>0</Color>
<bold>false</bold>
<italic>true</italic>
<underline>false</underline>
</RegionStyle>
<RegionStyle>
<RegionName>palavraschaves</RegionName>
<Color>0</Color>
<bold>true</bold>
<italic>false</italic>
<underline>false</underline>
</RegionStyle>
<RegionStyle>
<RegionName>inteiro</RegionName>
<Color>0</Color>
<bold>false</bold>
<italic>false</italic>
<underline>false</underline>
</RegionStyle>
</RegionsStyles>
</LangConfig>
-------- fim de LangConfig.xml --------
Com este arquivo, combinado ao exemplo dado de LangRules.xml, o CEN =
mostraria ao usu=E1rio todas as strings "if" em negrito e com a cor =
preta (0).=20
O CEN precisar=E1 dividir o texto em suas regi=F5es em dois momentos =
distintos: ao carregar o texto e ao texto ser editado. Ao fazer essa =
divis=E3o durante a edi=E7=E3o, o CEN dever=E1 re-analisar apenas as =
regi=F5es pr=F3ximas a regi=E3o que est=E1 sendo editada - precisaremos =
testar se o melhor =E9 re-analisar apenas as linhas mais pr=F3ximas ou =
as regi=F5es mais pr=F3ximas e qual a quantidade destas.=20
3) Analisador de erros
O CEN poder=E1 descobrir erros no c=F3digo enquanto o usu=E1rio =
digita. O CEN ter=E1 um mecanismo de verifica=E7=E3o do c=F3digo que =
analisar=E1 o texto de tempos em tempos e cada trecho com erros ser=E1 =
guardado na mem=F3ria e, posteriormente, pintado pelo CEN com uma linha =
colorida em forma de ondas - como os erros de ortografia no MS Word ou =
OpenOffice. O analisador ainda ter=E1 dois m=E9todos: um permitir=E1 =
retornar corre=E7=F5es para certo erro na forma de uma lista de strings =
- que provavelmente ser=E1 apresentada ao usu=E1rio pelo Notes 2 como um =
submenu - e outro que permitir=E1 aplicar uma destas corre=E7=F5es.=20
4) Debug
O CEN ter=E1 uma barra lateral (gutter) onde o usu=E1rio poder=E1 =
clicar para setar Breakpoints. O breakpoint ser=E1 mostrado como um =
pequeno =EDcone nesta barra lateral. O programador podera usar a =
fun=E7=E3o GetBreakPoints para pegar um array contendo o n=FAmero de =
cada uma das linhas que possui breakpoints. Outros m=E9todos =
(SetBreakPoint, DelBreakPoint, ClearBreakPoints, CanSetBreakPoints) =
estar=E3o dispon=EDveis para gerenciar os breakpoints.
Al=E9m dos Breakpoints, o CEN poder=E1 indicar linhas com erros (a =
linha ter=E1 o fundo trocado para uma cor especificada pelo usu=E1rio, =
vermelho por padr=E3o).
5) Folding
O CEN ter=E1 a capacidade de esconder/mostrar parte do texto. Isto =
funcionar=E1 do seguinte modo:
A) O usu=E1rio especifica o inicio e o fim do trecho que quer =
esconder (para isto ele dever=E1 usar duas strings diferentes para =
indicar o in=EDcio e o fim do trecho de folding, por padr=E3o estas =
strings ser=E3o "{{{" e "}}}" respectivamente).
B) Logo que isto =E9 especificado o CEN identifica o trecho de =
folding e adiciona na barra lateral (gutter) um =EDcone com o sinal de =
menos [-]. Quando este sinal for clicado, o trecho de folding ser=E1 =
escondido.
C) Quando um trecho est=E1 escondido, um =EDcone de mais [+] aparece =
na barra lateral e, ao lado disto no campo de edi=E7=E3o, um trecho que =
contem os primeiros caracteres escondidos e o n=FAmero da primeira e da =
=FAltima linha escondida.
D) O usu=E1rio dever=E1 clicar no =EDcone de [+] para mostrar =
novamente o trecho de folding.
=C9 importante observar que o trecho de folding ser=E1 sempre =
constitu=EDdo por linhas inteiras e que estas linhas ser=E3o apenas =
escondidas da vis=E3o no momento em que o CEN for pintado na tela. O =
texto estar=E1 sempre dispon=EDvel, sempre inteiro. M=E9todos =
especificos dever=E3o permitir saber quais trechos est=E3o escondidos, =
setar/deletar trechos de folding, etc.
Podemos usar o c=F3digo do editor JediEdit para iniciar essa =
funcionalidade.
6) Indenta=E7=E3o autom=E1tica de c=F3digo
Para cada uma das linguagens o usu=E1rio por=E1 escolher usar entre =
o AutoIndent e o SmartIndent, ou ainda desabilitar a indenta=E7=E3o =
autom=E1tica. Estas configura=E7=F5es ser=E3o guardadas no arquivo =
LangConfig.xml. Um modelo de como devem funcionar o autoindent e o =
smartindent pode ser retirado da edi=E7=E3o atual do Notes (1.5.4).=20
a) Autoindent
Quando a op=E7=E3o autoindent estiver ativada, o CEN manter=E1 a =
indenta=E7=E3o da linha atual ao criar uma nova linha.=20
b) SmartIndent
Quando a op=E7=E3o SmartIndent estiver ativada, o CEN indentar=E1 o =
c=F3digo automaticamente enquanto o usu=E1rio digita. Para cada =
linguagem um ou mais iniciador de bloco e um ou mais finalizador de =
bloco dever=E1 ser definido. Por exemplo, poder=EDamos ter "{" e "}" =
como iniciadores e finalizadores de bloco em PHP. Quando o usu=E1rio =
teclar <ENTER> ap=F3s um iniciador de bloco, o CEN criar=E1 uma nova =
linha com indenta=E7=E3o maior do que a indenta=E7=E3o da linha atual. =
Ao teclar <ENTER> ap=F3s um finalizador, o CEN primeiro diminuir=E1 a =
indenta=E7=E3o da linha atual em rela=E7=E3o a linha superior e depois =
criar=E1 uma nova linha com a mesma indenta=E7=E3o da linha atual.
7) Autoclose
Cada linguagem ter=E1 uma lista de strings que ser=E3o =
automaticamente "fechadas" pelo CEN. Por exemplo, ao digitar "<HTML>" o =
CEN automaticamente inseriria "</HTML>" logo depois, se o usu=E1rio =
estivesse editando HTML. A lista de strings ser=E1 guarda da seguinte =
forma, em um arquivo denominado LangAutoClose.xml:
------- LangAutoClose.xml ------------------
<LangAutoClose>
<!-- Lista de caracteres que chamam o mecanismo de autoclose -->
<FireAutoCloseChars><![CDATA[<>-"]]></FireAutoCloseChars>
<!-- Fecha tags automaticamente quando true. Use em HTML, XMl, etc. =
-->
<AutoCloseTags>true</AutoCloseTags>
<!-- Lista de strings que devem ser fechadas -->
<AutoCloseStr>
<Open><![CDATA[<!--]]></Open>
<Close><![CDATA[-->]]></Close>
</AutoCloseStr>
<AutoCloseStr>
<Open><![CDATA["]]></Open>
<Close><![CDATA["]]></Close>
</AutoCloseStr>
</LangAutoClose>
-----fim de LangAutoClose.xml --------------
A tag fireAutoClose tags define uma lista de caracteres que invocam =
o mecanismo de autoclose ao serem digitados. No exemplo, quando o =
usu=E1rio digitar uma aspa (") o mecanismo ser=E1 invocado. Ele =
descobrir=E1 que a aspa est=E1 na lista de strings a serem fechadas =
(est=E1 na tag Open, dentro de uma tag AutocloseStr), e que ela dever=E1 =
ser fechada com outra aspa. A tag AutocloseTag permite dizer ao CEN para =
fechar tags no estilo de XML e HTML de forma autom=E1tica - ou seja, =
assim n=E3o =E9 necess=E1rio especificar as tags a serem fechadas. No =
caso de AutocloseTag estar setado como true, o CEN automaticamente =
incluir=E1 os caracteres "<" e ">" a lista de caracteres que chama o =
mecanismo de autoclose - no exemplo eles foram adicionados manualmente =
para manter a clareza, mas isto n=E3o era obrigat=F3rio.
7) Outras capacidades do CEN
a) Mostrar linhas na gutter
O CEN ter=E1 a habilidade de mostrar o n=FAmero de cada uma das =
linhas na gutter (tanto come=E7ando a numera=E7=E3o por zero quanto por =
1). Essa numera=E7=E3o dever=E1 levar em conta o folding. Nas linhas em =
que existir folding ou breakpoint, o n=FAmero da linha n=E3o ser=E1 =
mostrado - no lugar disto estar=E1 o =EDcone correspondente a estas =
fun=E7=F5es.
b) Setas direcionais livres (estilo editor do Delphi)
O CEN poder=E1 ter setas direcionais que se movem livremente como no =
editor do Delphi. Esta capacidade j=E1 faz parte do SynEdit - precisamos =
apenas mant=EA-la.
c) SmartHome e SmartEnd
O SmartHome permite que ao teclar <HOME> (ou outro atalho =
configurado para fazer a fun=E7=E3o desta tecla) o cursor v=E1 para o =
primeiro caracter da linha que n=E3o seja um espa=E7o e/ou tab. O =
SmartEnd faz o mesmo com a tecla <END>.
d) Wrap autom=E1tico e trim de espa=E7os ao fim da linha
O Wrap autom=E1tico faz o CEN quebrar a linha toda a vez que a linha =
chegar a um n=FAmero m=E1ximo de
caracteres. O "trim de espa=E7os ao fim da linha" faz o CEN retirar =
os caracteres espa=E7o e tab que restam ao final da linha.
e) Formato do texto
O CEN dever=E1 suportar UNICODE e ASCII com finais de linha estilo =
Windows, Unix e Mac. O CEN dever=E1 poder abrir, editar, salvar e =
converter entre estes formatos.
f) =CAnfase da linha atual e de iniciadores/finalizadores de bloco
O CEN dever=E1 poder enfatizar a linha que o usu=E1rio estiver =
editando (mudando a cor do fundo). Da mesma forma, o CEN dever=E1 poder =
enfatizar os iniciadores/finalizadores de bloco. Se est=E1 op=E7=E3o =
estiver ativada, quando o cursor chegar ao iniciador/finalizador de =
bloco, o inicializador e o finalizador daquele bloco dever=E1 ser =
pintado com um fundo diferente. Por exemplo, em um script PHP, quando o =
cursor estiver no caracter "{" este caracter e o finalizador do bloco =
"}" dever=E3o ser pintados com fundo diferente.
g) Espa=E7os e Tabs
O CEN dever=E1 poder inserir espa=E7os no lugar do caracter TAB (o =
n=FAmero de espa=E7os dever=E1 ser ajust=E1vel). Quando o usu=E1rio =
quiser usar o caracter TAB, ele dever=E1 poder escolher o tamanho visual =
deste caracter em rela=E7=E3o ao caracter espa=E7o - ou seja, o caracter =
tab poder=E1 ter o tamanho de x espa=E7os.
-------------------------------------------------------------------------=
---
Planejamento do Notes 2=20
Editando texto
Para poder atender a todas as sugest=F5es feitas pelos usu=E1rios, a =
Equipe do Notes decidiu construir um componente (controle) de edi=E7=E3o =
pr=F3prio (baseado no famoso componente de edi=E7=E3o SynEdit). Este =
componente de edi=E7=E3o funcionara no Windows e no Linux exatamente da =
mesma forma. As capacidades dele s=E3o discutidas abaixo:
Colora=E7=E3o de c=F3digo
Este =E9 o pedido mais frequente dos usu=E1rios e, com a =
constru=E7=E3o do novo componente, poderemos atend=EA-lo. O componente =
usar=E1 defini=E7=F5es que ficar=E3o todas em arquivos XML. Isto =
significa que a colora=E7=E3o de c=F3digo ser=E1 altamente flex=EDvel, =
podendo ser configurada em detalhes pelo usu=E1rio inclusive permitindo =
que a comunidade adicione ao Notes suporte a linguagens n=E3o suportadas =
pela distribui=E7=E3o padr=E3o.
Implementa=E7=E3o: a implementa=E7=E3o da colora=E7=E3o de c=F3digo =
se dar=E1 de forma semelhante a de um editor para Linux chamado Kate. =
Assim, o texto seria dividido em blocos definidos atrav=E9s de arquivos =
XML (por exemplo: coment=E1rio, string, inteiro, etc.) e n=E3o por =
simples tokens separados por espa=E7os em branco. Para evitar que o =
parser fique lento, sugere-se que, como no Kate, existam regras =
pr=E9-prontas para detectar alguns tipos de blocos: inteiros, =
hexadecimais, octais, ponto flutuante, keyword (pr=E9-definindo que uma =
keyword =E9 uma string sem espa=E7os, iniciada por uma letra e que =
permite al=E9m de letras, n=FAmero e o caracter "_"; as keywords s=E3o =
fornecidas pelo arquivo xml). Regras para diferenciar bloco de textos =
poder=E3o ser facilmente criadas tanto usando express=F5es regulares =
como tags que permitem procurar por strings exatas, por um =FAnico =
caracter, pordois caracteres, por qualquer um dos caracteres listados, e =
pelo intervalo entre uma string/caracter e outra. Este modelo foi =
escolhido por se encaixar perfeitamente nas id=E9ias da equipe e por que =
o modelo =E9 altamente flex=EDvel podendo ser usado para definir a =
colora=E7=E3o de qualquer linguagem de programa=E7=E3o - seja de script, =
de marca=E7=E3o, etc.
Analisador e corretor de erros / auto-completar
O editor poder=E1 detectar erros no c=F3digo enquanto o usu=E1rio =
digita dispensando o uso de compiladores e debugers para a =
localiza=E7=E3o e corre=E7=E3o de erros simples de programa=E7=E3o. =
Al=E9m de detectar os erros, o editor poder=E1 sugerir corre=E7=F5es =
baseado nas estruturas padr=F5es da linguagem que o usu=E1rio estiver =
usando. O corretor poder=E1 ser usado pelo usu=E1rio para completar =
certas constru=E7=F5es. Por exemplo, um usu=E1rio poder=E1 digitar "if =
(x=3D=3Dy" e pedir para o editor auto-completar o c=F3digo, o que o =
deixaria semelhante a "if (x=3D=3Dy) { }".
Implementa=E7=E3o:o analisador buscaria por estruturas chaves =
(principalmente aquelas de controle, como if, while, for, etc.) que =
estariam definidas em um arquivo XML da lin...
[truncated message content] |