ForHosting KIT · Texto e IA

Normalizar indentación de texto

Las líneas con 2, 4 y 6 espacios se leen como niveles 1, 2 y 3 de una unidad de 2 espacios, y cada línea se reescribe para ajustarse exactamente a ella. Lo que va después de la sangría no se toca. Gratis en su navegador.

  • Gratis
  • Funciona en su navegador
  • Sin registro
  • Sus datos no salen de su equipo
Úselo desde WebAPIEmailTelegramApp pronto
Si escribe
Texto
def foo(): if True: bar() baz() return
Obtiene
Entrada
def foo(): if True: bar() baz() return
Estilo de sangría
spaces
Unidad de sangría
2
Unidad detectada
2

Los espacios en blanco iniciales inconsistentes son uno de los dolores de cabeza más habituales al pegar código en revisiones, volcados de configuración y bloques de documentación. Un fragmento puede mezclar pasos de dos y cuatro espacios o, peor aún, tabuladores en unas líneas y espacios en otras, hasta que un linter o un compañero rechaza el archivo. Este normalizador de indentación de texto acepta texto plano multilínea, clasifica cada línea no vacía según cómo está escrita su indentación inicial, detecta una única unidad base —el máximo común divisor de los recuentos de espacios, o un tabulador— y reescribe cada línea para que la indentación sea un múltiplo exacto de esa unidad.

Cómo funcionan la detección de la unidad base y la reescritura de niveles

El algoritmo primero normaliza los finales de línea Windows CRLF y CR heredados a una única forma LF, y después divide el documento en líneas. Las líneas totalmente en blanco permanecen en blanco y no aportan estilo de indentación. Para cada línea no vacía se mide la racha inicial de espacios y tabuladores: si ambos caracteres aparecen en esa racha, o si aparece otro espacio en blanco Unicode, la línea se trata como mixta y toda la solicitud falla con un mensaje claro que indica el número de línea.

Si algunas líneas no vacías están indentadas con espacios y otras con tabuladores, el documento no tiene un único estilo claro y también se rechaza: la conversión debe ser deliberada, no adivinada. Cuando toda línea indentada usa espacios, la unidad base es el máximo común divisor de todos los recuentos positivos de espacios iniciales; si nada está indentado, la unidad por defecto para el informe es de dos espacios. Cuando toda línea indentada usa tabuladores, la unidad base es un tabulador y cada tabulador inicial cuenta como un nivel.

El nivel de cada línea se recalcula entonces como recuento dividido por la unidad (exacto para el MCD de los recuentos de espacios observados, recuentos enteros de tabuladores en modo tab), y la línea se reescribe con un prefijo puro de espacios repetidos de longitud nivel por unidad de salida, o de tabuladores repetidos de longitud nivel. El contenido tras la indentación inicial nunca se altera: espacios interiores, espacios finales y tokens de código permanecen idénticos byte a byte.

Limpiar código y configuración pegados antes del commit

Los desarrolladores pegan fragmentos con pasos mezclados de dos y cuatro espacios; la herramienta reescribe cada línea a una unidad base y reporta la profundidad máxima de indentación para revisión.

¿Cómo elige la herramienta la unidad base de indentación?

En líneas indentadas con espacios usa el máximo común divisor de todos los recuentos positivos de espacios iniciales (unidad de informe por defecto dos si nada está indentado). En líneas con tabuladores la unidad es un tabulador por nivel.

¿Qué ocurre si unas líneas usan tabuladores y otras espacios?

Una mezcla a nivel de documento de tabuladores y espacios no tiene un patrón único claro; convierta primero a un solo estilo y luego normalice.

¿Puedo convertir indentación de dos espacios a cuatro espacios?

Se conservan los niveles detectados y cada nivel se reescribe con cuatro espacios.

¿La normalización cambia el código dentro de una línea?

No. Solo se reescribe la racha de indentación inicial. El espaciado interior, los espacios finales y todos los caracteres que no son indentación permanecen sin cambios.

¿Qué pasa con las líneas en blanco y los saltos de línea de Windows?

Las líneas totalmente en blanco siguen en blanco y no cuentan al detectar el estilo de sangría. Los saltos de línea de Windows y de formatos antiguos se unifican en uno solo antes de medir, así que nunca provocan un desajuste.

Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.

POSThttps://api.kit.forhosting.com/text/text-indentation-normalize

¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.

curl -X POST https://api.kit.forhosting.com/text/text-indentation-normalize \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"def foo():\n  if True:\n      bar()\n    baz()"}'
{
  "text": "def foo():\n  if True:\n      bar()\n    baz()"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "text.text_indentation_normalize",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.

Por solicitud$0.002

Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.

max_tokens20000
HTTPCódigoSignificado
401unauthorizedAPI key ausente o inválida.
402insufficient_balanceEl saldo no cubre el precio de la tarea.
404unknown_typeEl tipo de tarea no existe.
429rate_limitedDemasiadas peticiones. Use el webhook en vez de sondear.

Cuando la misma línea o el documento completo mezcla tabuladores y espacios sin un patrón claro, la tarea falla con invalid_input en lugar de adivinar en silencio. El parámetro opcional target_unit le permite reescalar niveles basados en espacios (por ejemplo de dos a cuatro) sin cambiar el árbol lógico de profundidad.

Cómo funcionan la detección de la unidad base y la reescritura de niveles

El target_unit opcional solo se aplica a documentos con estilo de espacios: se conservan los niveles y la salida usa esa cantidad de espacios por nivel, que es cómo convierte un árbol de dos espacios en uno de cuatro en una sola llamada. La entrada con estilo de tabuladores ignora target_unit para no expandir tabuladores en silencio.

Contrato de entrada, campos de respuesta y comportamiento de error

Prefiera enviar el cuerpo multilínea en bruto en lugar de colapsar saltos de línea de antemano cuando quiera semántica real de indentación por línea; una sola línea larga solo tiene una indentación que normalizar. Envíe por POST un cuerpo JSON con un campo de cadena obligatorio text (alias input, value, string, s, content y body). El valor debe ser una cadena no vacía tras recortar el espacio en blanco global y no debe superar cien mil caracteres, para que un solo pegado no agote la memoria del Worker o del navegador. El target_unit opcional es un entero positivo de uno a treinta y dos; los no enteros y los valores fuera de rango fallan la validación. En caso de éxito la respuesta devuelve input como la cadena original, text como el resultado multilínea reescrito unido con LF, indent_style como spaces, tabs o none, indent_unit como el tamaño efectivo de la unidad de salida, detected_unit como la unidad inferida antes de cualquier override de destino, line_count como el número de líneas incluidas las en blanco, indented_lines como cuántas líneas tenían un nivel positivo, max_level como el nivel de indentación más profundo, levels como la matriz de profundidad entera por línea alineada con lines, lines como la matriz ordenada de cadenas de línea reescritas, y message como un resumen breve del estilo, la unidad, el recuento de líneas y el nivel máximo. La validación fallida —text ausente, valores que no son cadena, contenido vacío, carga excesiva, target_unit inválido, mezcla de tabulador y espacio en la misma línea, o mezcla de estilos a nivel de documento— devuelve invalid_input y nunca se cobra. El precio es un fijo de $0.002 por solicitud exitosa con unidad item. Al integrar, afirme sobre text o lines para el contenido limpio, compare opcionalmente levels e indent_unit en regresiones, y trate invalid_input como un conflicto de estilo del cliente en pegados mixtos, no como un evento de facturación.

Cuándo usar esta herramienta y en qué se diferencia de búsquedas afines

Use esta capacidad cuando la intención de búsqueda sea normalizar niveles de indentación de texto, corregir indentación inconsistente en línea, convertir un pegado irregular de dos y cuatro espacios a una sola unidad, o detectar estilo de indentación por tabulador frente a espacio antes de un commit. Tenga en cuenta los espacios finales y las columnas de alineación interiores: esta herramienta solo reescribe la racha de indentación inicial, no los espacios de alineación dentro de la línea. No es un formateador de código completo, ni un pretty printer consciente del lenguaje, ni un eliminador de líneas en blanco, ni un String.trim global que destruiría la estructura intencional. Las comprobaciones de ida y vuelta en pruebas son sencillas: envíe un bloque de tres líneas con cero, dos y cuatro espacios iniciales y espere indent_unit dos con levels cero, uno y dos; envíe bloques anidados indentados solo con tabuladores y espere indent_style tabs con niveles enteros que coincidan con el recuento de tabuladores; envíe deliberadamente una línea que empiece con tabulador y luego espacios, o una línea con tabulador junto a otra con espacios, y confirme invalid_input mencionando la mezcla de tabuladores y espacios. Prefiera str.trim_lines cuando solo necesite quitar espacios al inicio y al final de cada línea sin conservar un árbol de profundidad; prefiera data.json_format cuando la carga sea JSON que deba imprimirse con indentación fija; prefiera esta capacidad cuando ya exista texto jerárquico plano o bloques similares a código y necesite una unidad base coherente. Las tareas fallidas que devuelven invalid_input no consumen saldo prepago, lo que mantiene barata la validación de formularios y las pruebas negativas de CI.

Preprocesadores de CI y linters

Las tuberías rechazan pronto tabuladores y espacios mezclados con invalid_input, o normalizan árboles solo de espacios a un target_unit del proyecto antes de las comprobaciones de estilo.

Documentación, tutoriales y fixtures de ejercicios

Autores y docentes generan ejemplos multilínea indentados de referencia y casos de error de estilo mixto para editores, herramientas LMS y pruebas golden.

¿Cuánto cuesta normalizar la indentación de texto?

La herramienta en el navegador es gratuita. Las solicitudes API usan saldo KIT prepago a $0.002 por llamada exitosa; la entrada inválida no se factura.

Ver la documentación completa del KIT →