Ajuda para o MetaEditor

Criar Estilo

Esta função é destinada para formatar o código-fonte de acordo com o padrão recomendado. Isto permite fazer o código-fonte legível e parecer como o de um profissional. Um código formatado corretamente é muito mais fácil para uma análise mais aprofundada, tanto pelo seu autor tanto para outros usuários. A fim de usar um estilo, deve-se executar o comando "Criar Estilo Criar Estilo" do menu "Ferramentas" ou usar a combinação de teclas "Ctrl+,".

As mudanças na formatação do código-fonte feitas pelo novo estilo podem ser revertidas com o comando "Desfazer Desfazer" do menu "Editar" ou da barra de ferramentas "Padrão" ou pressionando "Ctrl+Z".

Descrição Comum

Os seguintes tipos de ações no código-fonte estão implementadas no estilo para uma formatação correta:

  • Substituir linhas especificadas por outras especificadas;
  • Alinhamento dos operadores da linguagem;
  • Inserção de comentários no cabeçalho do arquivo;
  • Inserção de comentários antes de funções, estruturas, classes e seus métodos;
  • Inserção de comentários no final do arquivo.

O estilo executa as seguintes correções com base nos tipos de ação acima mencionados:

Espaços e Linhas Vazias

A supressão de espaços desnecessários permite fazer o código-fonte compacto e melhorar o seu entendimento. Também o estilo substitui cada guia por três caracteres de espaço. Isso é necessário para evitar a distorção da formatação do código-fonte quando ele for aberto em um software de terceiro.

O Estilo Removerá Espaços:

  • No final das linhas;
  • Antes de ";";
  • Entre "if" e "(", "while" e "(", "for" e "(", "switch" e "(", "return" e "(".
  • Depois de ";" dentro do "for()";
  • Depois de "!";
  • Perto de "(" e ")";
  • Perto de "<" e ">";
  • Perto de "|" e "^";
  • Perto de "+", "-", "/" e "%";
  • Perto de "[" e "]";
  • Perto de "==" e "==";
  • Perto de "!=" e "!=";
  • Perto de "<=" e ">=";
  • Perto de "+=" e "+=";
  • Perto de "-=" e "-=";
  • Perto de "*=" e "*=";
  • Perto de "/=" e "/=";
  • Perto de "<<" e ">>";
  • Um espaço por vez para a direita e para à esquerda de "," e "=".

Locais do Estilo:

  • Um espaço por vez para a direita e para à esquerda de  "||" e "&&" (o resultado é " || " e " && ").

Demais Substituições:

  • Nas construções como "int* a", os símbolos "*" e "&" referem-se a variável, mas não para o tipo, então estas construções são substituídas por "int *a";
  • linhas duplas vazias são substituídas por uma.

Antes de Formatar

Depois de Formatar

void minhaFuncao() 
  {
   if   (I  <  10)
  {
   printf (“Oi\n”) ;
   if (< 5 )
     {
             printf (“i<5 !\n”) ;
             if (< 3)
               {
                printf (“i<3 !\n”) ;
                if (< 2)
                  {
                  }
               }
            }
  }
     }

void minhaFuncao()
  {
   if(I<10)
     {
      printf(“Oi\n”);
      if(I<5)
        {
         printf(“i<5 !\n”);
         if(i<3)
           {
            printf(“i<3 !\n”);
            if(i<2)
              {
              }
           }
        }
     }
  }

O tamanho da guia é sempre igual a três espaços, independentemente das configurações do MetaEditor.

Exceções de Formatação da Substituição com um Olhar para o Alinhamento Entre Linhas

As regras de substituição realizadas pelo estilo não são aplicadas em alguns casos. Ele é implementado para manter o alinhamento personalizado a partir de linhas adjacentes. O estilo reconhece o alinhamento entre linhas a partir de linhas adjacentes para as seguintes palavras e símbolos:

  • "//" – símbolos de um comentário "C";
  • "{" – chave esquerda;
  • "}" – chave direita;
  • "return" – o operador "retorno";
  • "delete" – o operador "delete";
  • "=" – o símbolo de igualdade;
  • ":" – dois pontos;
  • "." – ponto.

Se o estilo, durante a análise, encontra uma das palavras acima mencionadas ou os símbolos nas mesmas posições em que se encontram na linha anterior, então as substituições não são executadas.

Formatação de Funções e Operadores

  • Dois espaços antes das declarações do tipo de função/operador são inseridos antes dos símbolos "{" e "}" que abrem e fecham a função/operador
  • Três espaços, desde o início do operador, são estabelecidos antes de cada linha localizada entre os símbolos "{" e "}" da função/operador.
  • No caso dos símbolos "{" ou "}" não fechados em um operador com algum texto dentro dele, então esses símbolos serão colocados em linhas diferentes.
  • O alinhamento também é realizado com a tomada da linha anterior. Se a linha anterior contém um colchete não fechado ou uma expressão aritmética inacabada, então a linha atual irá começar a partir da primeira posição depois de "(" ou de "=" da linha anterior.
  • A condição "else" é sempre colocada na mesma posição do "if";

Antes de Formatar

Depois de Formatar

void minhaFuncao()  {
int k[10],t=0;
for(int i=0;i<10;i++){
   k[i]=i;
   t+=i;}   
if  (button==name) {
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
else {
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
}

void minhaFuncao() 
  {
   int k[10],t=0;
   for(int i=0;i<10;i++)
     {
      k[i]=i;
      t+=i;
     }
   if(button==name) 
     {
      bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
      if(!state)
         ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
   else 
     {
      ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
  }

Alinhamento da Declaração de Estruturas, Classes e Enumeradores

Em tais tipos de expressão, o nível duplo de tabulação é usado:

  • Três espaços são colocados antes da indicação do tipo de membro/método descrito;
  • Os nomes dos membros ou métodos da classe ou da estrutura são especificados a partir da posição 22 na linha;
  • As especificações de acesso aos membros e métodos ("private", "protected", e "virtual") estão alinhadas com palavra "class".

Antes de Formatar

Depois de Formatar

class CTradePad  {
 private:
 int m_rows;
 int m_columns;
 int m_button_width;
 int m_button_height;
 int m_top;
 int m_left;
 int m_left_previous_header;
  };

class CTradePad  
  {
private:
   int               m_rows;
   int               m_columns;
   int               m_button_width;
   int               m_button_height;
   int               m_top;
   int               m_left;
   int               m_left_previous_header;
  };

Alinhamento de Comentários

Há uma diferença entre o alinhamento dos comentários nas declarações e nas definições:

  • Os comentários do primeiro nível estão alinhados para a esquerda (sem um travessão) nas definições de funções e métodos;
  • Os comentários do primeiro nível na declaração estão alinhados pela terceira posição da linha;
  • Comentários dos níveis seguintes estão alinhados pelos níveis correspondentes de operadores em que são especificados.

Antes de Formatar

Depois de Formatar

void minhaFuncao()  {
//--- comentário de primeiro nível
int k[10],t=0;
for(int i=0;i<10;i++){
   k[i]=i;
   t+=i;}   
if  (button==name) {
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
//--- comentário de segundo nível
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
else {
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
}

void minhaFuncao() 
  {
//--- comentário de primeiro nível
   int k[10],t=0;
   for(int i=0;i<10;i++)
     {
      k[i]=i;
      t+=i;
     }
   if(button==name) 
     {
      bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
      //--- comentário de segundo nível
      if(!state)
         ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
   else 
     {
      ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
  }

class CTradePad
  {
private:
   int m_rows;
 //--- número de linhas
   int m_columns;   
              //--- número de colunas
   int m_button_width; 
//--- cell width
 
  };

class CTradePad
  {
private:
   int               m_rows;
   //--- número de linhas
   int               m_columns;
   //--- número de colunas
   int               m_button_width;
   //--- cell width
 
  };

Inserção de Comentários

Os comentários do seguinte tipo são inseridos no cabeçalho do arquivo, se ele estiver ausente:

//+------------------------------------------------------------------+
//|                                                    NomedoProjeto |
//|                                Copyright © 2009, NomedaCompania.|
//|                                    http://www.nomedacompania.net |
//+------------------------------------------------------------------+

Os comentários do seguinte tipo são inseridos antes de funções, classes, estruturas, etc, se não houver nenhum comentário:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

O seguinte comentário é inserido no final do arquivo:

//+------------------------------------------------------------------+