Autor Tema: Aplicación para realizar sangrado (indentación), formato etc  (Leído 4701 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Aplicación para realizar sangrado (indentación), formato etc
« en: 21 de Agosto de 2016, 14:49:49 »
Hola,

Estoy buscando una aplicación que permita dar formato con varias posibilidades y estilos a un código de programa, el editor de códigos mas conocido es notepad++, Encontré un sub-menú en esta aplicación para realizar sangría o sangrado automático de código de programacion en notepad++:

Menu configuración/ submenus: preferencias/otros [✔] Auto sangría, la selecciono pero no veo que haga nada. ¿que sucede?

El menú, editar, sangría solo aumenta o disminuye de tabulacion a la porción señalada, pero no hace una tabulacion inteligente de código.


gracias

Deseo probar la indentación de CASE cuando tiene los contenedores {}, ya que muchos IDES no lo realizan bien


Ejemplo:



Código: C++
  1. // MODE 2, MODE 1, MODE 0
  2. divisionMicrostepping = microstep_div;
  3. switch ( divisionMicrostepping ) {
  4. case 1: { // fullStep1_1: Mayor torque, movimientos bruscos y mayor ruido
  5. digitalWrite( microstep_mode0, LOW ); // 0
  6. digitalWrite( microstep_mode1, LOW ); // 0
  7. digitalWrite( microstep_mode2, LOW ); // 0 -> 000 = 0
  8. stepsPerRevolution = fullStep * microstep_div; // 200*1=200 pasos para dar una vuelta del motor
  9. anglePerStep = rev / stepsPerRevolution; // 360/200 = 9/5 = 1.8º/paso
  10. // 200 pasos * 1.8 deg = 360 deg == 1 vuelta
  11. // ...
  12. break;
  13. }
  14. case 2: { // halfStep1_2: Menor torque, movimientos suaves y menor ruido
  15. digitalWrite( microstep_mode0, HIGH );// 1
  16. digitalWrite( microstep_mode1, LOW ); // 0
  17. digitalWrite( microstep_mode2, LOW ); // 0 -> 001 = 1
  18. stepsPerRevolution = fullStep * microstep_div; // 200*2=400
  19. anglePerStep = rev / stepsPerRevolution; // 360/400 = 9/10 = 0.9º/paso
  20. // 400 pasos * 0.9 deg = 360 deg
  21. // ...
  22. break;
  23. }
  24. ...
  25. default: { // fullStep1_1: Mayor torque, movimientos bruscos y mayor ruido
  26. digitalWrite( microstep_mode0, LOW );
  27. digitalWrite( microstep_mode1, LOW );
  28. digitalWrite( microstep_mode2, LOW ); // 000 = 0
  29. stepsPerRevolution = fullStep * microstep_div; // 200*1=200 pasos para dar una vuelta del motor
  30. anglePerStep = rev / stepsPerRevolution; // 360/200 = 9/5 = 1.8º/paso
  31. // 200 pasos * 1.8 deg = 360 deg == 1 vuelta
  32. // ...
  33. break;
  34. }
  35. }

el resultado debe ser:


Código: C++
  1. // MODE 2, MODE 1, MODE 0
  2. divisionMicrostepping = microstep_div;
  3. switch ( divisionMicrostepping ) {
  4. ±      case 1: { // fullStep1_1: Mayor torque, movimientos bruscos y mayor ruido
  5.                 digitalWrite( microstep_mode0, LOW ); // 0
  6.                 digitalWrite( microstep_mode1, LOW ); // 0
  7.                 digitalWrite( microstep_mode2, LOW ); // 0 -> 000 = 0
  8.                 stepsPerRevolution = fullStep * microstep_div; // 200*1=200 pasos para dar una vuelta del motor
  9.                 anglePerStep = rev / stepsPerRevolution; // 360/200 = 9/5 = 1.8º/paso
  10.                 // 200 pasos * 1.8 deg = 360 deg == 1 vuelta
  11.                 // ...
  12.                 break;
  13.         }
  14. ±      case 2: { // halfStep1_2: Menor torque, movimientos suaves y menor ruido
  15.                 digitalWrite( microstep_mode0, HIGH );// 1
  16.                 digitalWrite( microstep_mode1, LOW ); // 0
  17.                 digitalWrite( microstep_mode2, LOW ); // 0 -> 001 = 1
  18.                 stepsPerRevolution = fullStep * microstep_div; // 200*2=400
  19.                 anglePerStep = rev / stepsPerRevolution; // 360/400 = 9/10 = 0.9º/paso
  20.                 // 400 pasos * 0.9 deg = 360 deg
  21.                 // ...
  22.                 break;
  23.         }
  24.         ...
  25. ±      default: { // fullStep1_1: Mayor torque, movimientos bruscos y mayor ruido
  26.                 digitalWrite( microstep_mode0, LOW );
  27.                 digitalWrite( microstep_mode1, LOW );
  28.                 digitalWrite( microstep_mode2, LOW ); // 000 = 0
  29.                 stepsPerRevolution = fullStep * microstep_div; // 200*1=200 pasos para dar una vuelta del motor
  30.                 anglePerStep = rev / stepsPerRevolution; // 360/200 = 9/5 = 1.8º/paso
  31.                 // 200 pasos * 1.8 deg = 360 deg == 1 vuelta
  32.                 // ...
  33.                 break;
  34.         }
  35. }

El menú, editar, sangría solo aumenta o disminuye de tabulacion, pero no hace un formato de código :(

https://es.wikipedia.org/wiki/Indentaci%C3%B3n
« Última modificación: 22 de Agosto de 2016, 01:09:58 por CompSystems »
Desde Colombia

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:notepad++: como realizar sangria, sangrado (indentación)
« Respuesta #1 en: 21 de Agosto de 2016, 15:06:33 »
Y por que no usar un IDE ¿? directamente realizado para programacion con autocompletar y todo lo demas?

Igual nunca use el notepad++ siempre use notepad y con el Tab le doy la identacion que quiero

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re:Aplicación para realizar sangrado (indentación), formato etc
« Respuesta #2 en: 21 de Agosto de 2016, 15:17:56 »
Con la tecla TAB se organiza manualmente porciones de código, pero yo le dejo esa tarea al IDE para que lo haga automaticamente con la función FORMAT que aparece en muchos IDEs

Por ejemplo al copiar y pegar porciones de código siempre se desorganiza la indentacion o tabulacion y ajustarlo con TAB no es practico, hay que volver a ejecutar la función FORMAT

Por favor killerjc puedes probar el ejemplo anterior en los IDEs de microcontroladores que manejas para ver si lo hacen bien, ya que ese código tiene CASEs con llaves entre el bloque de instrucciones, los {} son innecesarios en las instrucciones CASE y DEFAULT  pero yo los uso para colapsar o expandir (ocultar o hacer visible) el código dentro de este cuerpo de instrucciones.
« Última modificación: 22 de Agosto de 2016, 01:12:16 por CompSystems »
Desde Colombia

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:notepad++: como realizar sangria, sangrado (indentación)
« Respuesta #3 en: 21 de Agosto de 2016, 15:46:15 »
Copiar y pegarlo simplemente no te los acomoda, Lo que hacen los IDE es que al presionar el Enter, luego de abrir una llave o escribir el case solo se acomoda. Imagino que eso es lo que tiene el notepad++, pero copiarlo y pegarlo y que solo al pegarlo lo idente realmente nunca lo vi.

De todas formas lo probe en eclipse y luego de seleccionarlo lo puse que arregle la identacion (Click derecho - Source - Correct Identation o Ctrl+I), quedando asi (Configraucion por default K&R):

Código: C
  1. switch ( divisionMicrostepping ) {
  2.         case 1: { // fullStep1_1: Mayor torque, movimientos bruscos y mayor ruido
  3.                 digitalWrite( microstep_mode0, LOW ); // 0
  4.                 digitalWrite( microstep_mode1, LOW ); // 0
  5.                 digitalWrite( microstep_mode2, LOW ); // 0 -> 000 = 0
  6.                 stepsPerRevolution = fullStep * microstep_div; // 200*1=200 pasos para dar una vuelta del motor
  7.                 anglePerStep = rev / stepsPerRevolution; // 360/200 = 9/5 = 1.8º/paso
  8.                 // 200 pasos * 1.8 deg = 360 deg == 1 vuelta
  9.                 // ...
  10.                 break;
  11.         }
  12.         case 2: { // halfStep1_2: Menor torque, movimientos suaves y menor ruido
  13.                 digitalWrite( microstep_mode0, HIGH );// 1
  14.                 digitalWrite( microstep_mode1, LOW ); // 0
  15.                 digitalWrite( microstep_mode2, LOW ); // 0 -> 001 = 1
  16.                 stepsPerRevolution = fullStep * microstep_div; // 200*2=400
  17.                 anglePerStep = rev / stepsPerRevolution; // 360/400 = 9/10 = 0.9º/paso
  18.                 // 400 pasos * 0.9 deg = 360 deg
  19.                 // ...
  20.                 break;
  21.         }
  22.         ...
  23.         default: { // fullStep1_1: Mayor torque, movimientos bruscos y mayor ruido
  24.                 digitalWrite( microstep_mode0, LOW );
  25.                 digitalWrite( microstep_mode1, LOW );
  26.                 digitalWrite( microstep_mode2, LOW ); // 000 = 0
  27.                 stepsPerRevolution = fullStep * microstep_div; // 200*1=200 pasos para dar una vuelta del motor
  28.                 anglePerStep = rev / stepsPerRevolution; // 360/200 = 9/5 = 1.8º/paso
  29.                 // 200 pasos * 1.8 deg = 360 deg == 1 vuelta
  30.                 // ...
  31.                 break;
  32.         }
  33.         }

Despues de generar un nuevo Profile de formato de codigo, en Window-> Preference

C/C++ -> Code Style ->Formater

Seleccionar Edit, En la pestaña Identation, tildar la opcion "Statements within 'switch' body" , cambiarle el nombre para guardar el nuevo perfil ( para no sobreescribir el deaful K&R). Termina quedando asi, luego de ejecutar el comando de "Identacion Correcta"

Código: C
  1. switch ( divisionMicrostepping ) {
  2.                 case 1: { // fullStep1_1: Mayor torque, movimientos bruscos y mayor ruido
  3.                         digitalWrite( microstep_mode0, LOW ); // 0
  4.                         digitalWrite( microstep_mode1, LOW ); // 0
  5.                         digitalWrite( microstep_mode2, LOW ); // 0 -> 000 = 0
  6.                         stepsPerRevolution = fullStep * microstep_div; // 200*1=200 pasos para dar una vuelta del motor
  7.                         anglePerStep = rev / stepsPerRevolution; // 360/200 = 9/5 = 1.8º/paso
  8.                         // 200 pasos * 1.8 deg = 360 deg == 1 vuelta
  9.                         // ...
  10.                         break;
  11.                 }
  12.                 case 2: { // halfStep1_2: Menor torque, movimientos suaves y menor ruido
  13.                         digitalWrite( microstep_mode0, HIGH );// 1
  14.                         digitalWrite( microstep_mode1, LOW ); // 0
  15.                         digitalWrite( microstep_mode2, LOW ); // 0 -> 001 = 1
  16.                         stepsPerRevolution = fullStep * microstep_div; // 200*2=400
  17.                         anglePerStep = rev / stepsPerRevolution; // 360/400 = 9/10 = 0.9º/paso
  18.                         // 400 pasos * 0.9 deg = 360 deg
  19.                         // ...
  20.                         break;
  21.                 }
  22.                 ...
  23.                 default: { // fullStep1_1: Mayor torque, movimientos bruscos y mayor ruido
  24.                         digitalWrite( microstep_mode0, LOW );
  25.                         digitalWrite( microstep_mode1, LOW );
  26.                         digitalWrite( microstep_mode2, LOW ); // 000 = 0
  27.                         stepsPerRevolution = fullStep * microstep_div; // 200*1=200 pasos para dar una vuelta del motor
  28.                         anglePerStep = rev / stepsPerRevolution; // 360/200 = 9/5 = 1.8º/paso
  29.                         // 200 pasos * 1.8 deg = 360 deg == 1 vuelta
  30.                         // ...
  31.                         break;
  32.                 }
  33.         }

Que creo que es lo que estas buscando. Otros cambios que pueden hacerse es:

Código: C
  1. default:
  2.                 { // fullStep1_1: Mayor torque, movimientos bruscos y mayor ruido
  3.                         digitalWrite( microstep_mode0, LOW );
  4.                         digitalWrite( microstep_mode1, LOW );
  5.                         digitalWrite( microstep_mode2, LOW ); // 000 = 0
  6.                         stepsPerRevolution = fullStep * microstep_div; // 200*1=200 pasos para dar una vuelta del motor
  7.                         anglePerStep = rev / stepsPerRevolution; // 360/200 = 9/5 = 1.8º/paso
  8.                         // 200 pasos * 1.8 deg = 360 deg == 1 vuelta
  9.                         // ...
  10.                         break;
  11.                 }

En el mismo lugar que antes, nomas que en la pestaña Bracer, usas el "block in case statement", Usas next Line o Next Line Idented, esta ultima posee un TAB mas. es Decir las llaves se desplazan un TAB mas, y por ende desplazan al contenido un TAB mas, el codigo que pase es sin el Idented
De la misma forma el switch en caso que quieras el { en la otra linea.

------------------

Folding. Tambien tenes la opcion de habilitar el folding en los if/swithc etc. Eso habilita el folding de los case tambien, es decir podes reducir el cuerpo y que solo se muestre el "case xxx"

Imagen de como queda:

* 123456.png
(16.98 kB, 726x73 - visto 1263 veces)


Y no es necesario las llaves para crear un bloque y poder hacerle un folding

------------------

Finalmente buscando por internet ( que es lo primero que deberias haber realizado)

http://stackoverflow.com/questions/412427/auto-indent-in-notepad
« Última modificación: 21 de Agosto de 2016, 19:27:35 por KILLERJC »

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Re: Aplicación para realizar sangrado (indentación), formato etc
« Respuesta #4 en: 22 de Agosto de 2016, 00:56:32 »
Gracias KILLERJC, lo que escribiste es precisamente lo que deseo ver en notePad++, buscando con mas detenimiento, encontré una pequeña aplicación que realiza muy bien el formato, sangrado, ..., permitiendo configurar con parámetros y varios estilos ademas esta contiene un plugin para notePad++

Pagina del proyecto

https://sourceforge.net/projects/universalindent/?source=directory

Enlace de descarga de la aplicación para windows

http://downloads.sourceforge.net/project/universalindent/uigui/UniversalIndentGUI_1.2.0/UniversalIndentGUI_1.2.0_win32.zip





Me comentan que les parece este programa

esto me ha animado a crear una pequeña guia, si desean me pueden colaborar para llevar la siguiente publicación a español

fuente: https://en.wikipedia.org/wiki/Indent_style

dentro de la codificación hay varios puntos

A: STYLE (Estilo), si hablamos de C/C++ el mas común es Kernighan and Ritchie's

A.1: Sobre los símbolos contenedores de cuerpo de instrucciones { } o parentesis tipo llave

El de apertura ({ llave a la izquierda ) va junto a la palabra clave del bloque, y el contenedor final (} llave a derecha) alineado verticalmente al primer carácter del mismo

A.2: La primer sentencia va debajo del contenedor de apertura


ejemplo

Código: C++
  1. while(x==y){
  2.     funcion_algo();
  3.     funcion_otraCosa();
  4. }



B: INDENTACION (Sangria)

C: FORMATO (FORMAT)

Redactando ...



« Última modificación: 23 de Agosto de 2016, 10:58:29 por CompSystems »
Desde Colombia

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re:Aplicación para realizar sangrado (indentación), formato etc
« Respuesta #5 en: 22 de Agosto de 2016, 06:44:52 »
Dale un ojo a los plugins de Notepad++, quizá encuentres alguno que te vaya bien.

saludo


 

anything