Ayuda de MetaEditor

Estilizador

Esta función sirve para representar el código fuente de acuerdo con el estándar recomendado. Lo que permite hacerlo más legible, con una representación más profesional. Un código formateado correctamente es más fácil analizar en el futuro tanto para su autor, como para otros usuarios. Para iniciar el estilizador, debe ejecutar el comando "Estilizador Estilizador" en el menú "Herramientas" o pulsar las teclas "Ctrl+,".

Los cambios en la representación del código se puede cancelar a través del comando "Deshacer Deshacer" en el menú "Editar" o en la barra de herramientas "Estándar", o pulsando la combinación de teclas "Ctrl+Z".

Descripción general

Para dar la forma correcta al código, en el estilizador están previstas las siguientes acciones con el código:

  • Reemplazo de líneas especificadas con otras líneas especificadas;
  • Alineación de operadores del lenguaje;
  • Inserción de comentarios en el encabezamiento del archivo;
  • Inserción de comentarios antes de las funciones, estructuras, clases y sus métodos;
  • Inserción de comentarios al final del archivo.

El estilizador realiza la siguiente corrección basándose en los tipos de acciones arriba mencionados:

Espacios y líneas vacías

La eliminación de los espacios sobrantes permite hacer el código más compacto, mejorando de esta manera su percepción. Además, el estilizador reemplaza cada símbolo de tabulación con tres espacios. Es necesario para evitar las posibles deformaciones de su formateo cuando se abre en otros programas.

Estilizador elimina espacios:

  • Al final de las líneas;
  • Antes del símbolo ";";
  • Entre "if" y "(", "while" y "(", "for" y "(", "switch" y "(", "return" y "(".
  • Después de ";" dentro de "for()";
  • Después de "!";
  • Junto a "(" y ")";
  • Junto a "<" y ">";
  • Junto a "|" y "^";
  • Junto a "+", "-", "/" y "%";
  • Junto a "[" y "]";
  • Junto a "==" y "==";
  • Junto a "!=" y "!=";
  • Junto a "<=" y ">=";
  • Junto a "+=" y "+=";
  • Junto a "-=" y "-=";
  • Junto a "*=" y "*=";
  • Junto a "/=" y "/=";
  • Junto a "<<" y ">>";
  • Un espacio a la derecha e izquierda de "," y "=".

El estilizador pone:

  • Un espacio a la izquierda y a la derecha para "||" y "&&" (resultado: " || " y " && ").

Otras substituciones:

  • En las construcciones del tipo "int* a" los símbolos "*" y "&" se refieren a la variable, y no a su tipo. Por esta razón esta construcción se reemplaza con "int *a";
  • Las líneas en blanco dobles se reemplazan con una línea.

Antes de formateo

Después de formateo

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

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

El tamaño de tabulación del estilizador siempre es de tres espacios, independientemente de los ajustes especificados en el MetaEditor.

Excepciones de reemplazos durante el formateo teniendo en cuenta la alineación interlineal

Las reglas de reemplazos especificados más arriba no se aplican en algunas ocasiones. Esto está implementado para no alterar la alineación del autor por las líneas adyacentes. El estilizador reconoce la alineación interlineal por la línea adyacente para las siguientes palabras claves y símbolos:

  • "//" — símbolos del comentario "C";
  • "{" — la llave izquierda;
  • "}" — la llave derecha;
  • "return" — operador "return";
  • "delete" — operador "delete";
  • "=" — símbolo de igualdad;
  • ":" — dos puntos;
  • "." — punto.

Si durante el análisis de una línea el estilizador encuentra una de las palabras (símbolos) arriba mencionadas en la misma posición que en la siguiente línea, o en la anterior, entonces en ella los reemplazan no se realizan.

Formateo de funciones y operadores

  • Antes de los símbolos "{" y "}" que abren y cierran una función/operador se ponen dos espacios desde la declaración del tipo de la función/operador.
  • Antes de cada línea que se encuentra entre los símbolos "{" y "}" de la función/operador se establecen tres espacios desde el inicio del operador.
  • En caso de haber símbolos "{" o "}" no cerrados en un operador con algún texto dentro, estos símbolos y el texto se colocan en diferentes líneas.
  • Además, la alineación se realiza tomando en consideración el contenido de la línea anterior. Si en la línea anterior un paréntesis no está cerrado o una expresión aritmética no está finalizada, entonces la línea actual va a empezarse desde la primera posición tras "(" o "=" de la línea anterior.
  • Condición "else" siempre se coloca en la misma posición que "if";

Antes de formateo

Después de formateo

void myFunction()  {
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 myFunction() 
  {
   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);
     }
  }

Alineación durante la declaración de estructuras, clases y enumeraciones

En estas expresiones se utiliza llamada tabulación de dos niveles:

  • Antes de la indicación del tipo del miembro/método que se describe se colocan tres espacios;
  • Los nombres de los miembros o métodos de la estructura o clase descritos se indican desde la posición 22 en la línea;
  • Los especificadores de acceso a los miembros y métodos ("private", "protected", "private" y "virtual") se alinean por la palabra "class".

Antes de formateo

Después de formateo

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;
  };

Alineación de comentarios

Existe una diferencia entre la alineación de comentarios en las declaraciones y definiciones:

  • Los comentarios del primer nivel en la definición de una función o método se alinean por la izquierda (sin sangría);
  • Los comentarios del primer nivel en la declaración se alinean por la tercera posición en la línea;
  • Los comentarios de los siguientes niveles se alinean por el nivel correspondiente de los operadores en los que están especificados.

Antes de formateo

Después de formateo

void myFunction()  {
//--- comentario del primer nivel
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);
//--- comentario del segundo nivel
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
else {
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
}

void myFunction() 
  {
//--- comentario del primer nivel
   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);
      //--- comentario del segundo nivel
      if(!state)
         ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
   else 
     {
      ObjectSetInteger(0,name,OBJPROP_STATE,false);
     }
  }

class CTradePad
  {
private:
   int m_rows;
 //--- número de filas
   int m_columns;   
              //--- número de columnas
   int m_button_width; 
//--- ancho de celda
 
  };

class CTradePad
  {
private:
   int               m_rows;
   //--- número de filas
   int               m_columns;
   //--- número de columnas
   int               m_button_width;
   //--- ancho de celda
 
  };

Insertar comentarios

El comentario de este tipo se inserta en el encabezado del archivo en caso de que no haya:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                    Copyright © 2009, CompanyName.|
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+

Los comentarios de este tipo se insertan antes de las funciones, clases, estructuras, etc. en caso de que no haya:

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

Al final del archivo se inserta el comentario interceptado del siguiente tipo:

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