TODOPIC

Misceláneas - Interés General => Off Topic => Mensaje iniciado por: CompSystems en 21 de Agosto de 2016, 14:49:49

Título: Aplicación para realizar sangrado (indentación), formato etc
Publicado por: CompSystems 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
Título: Re:notepad++: como realizar sangria, sangrado (indentación)
Publicado por: KILLERJC 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
Título: Re:Aplicación para realizar sangrado (indentación), formato etc
Publicado por: CompSystems 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.
Título: Re:notepad++: como realizar sangria, sangrado (indentación)
Publicado por: KILLERJC 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:
 - Tienes que ingresar para ver archivos adjuntos -

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
Título: Re: Aplicación para realizar sangrado (indentación), formato etc
Publicado por: CompSystems 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


(http://universalindent.sourceforge.net/images/screenshot5.jpg)


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



Título: Re:Aplicación para realizar sangrado (indentación), formato etc
Publicado por: xocas en 22 de Agosto de 2016, 06:44:52
Dale un ojo a los plugins de Notepad++ (http://docs.notepad-plus-plus.org/index.php?title=Plugin_Central), quizá encuentres alguno que te vaya bien.

saludo