# Referencia Rápida de TOML

*Tablas, cadenas, números, fechas, arrays*

> Source: TOML Specification (toml.io) · MIT

## Sintaxis

### Reglas Básicas

| Command | Description |
|---------|-------------|
| `key = value` | Par clave-valor (uno por línea) |
| `#` | Comentario (hasta el final de la línea) |
| `Distingue mayúsculas` | Las claves y valores distinguen entre mayúsculas y minúsculas |
| `UTF-8` | Los archivos deben ser UTF-8 válido |
| `Sin null` | TOML no tiene tipo null |

### Ejemplo Mínimo

```
title = "My App"
debug = true
port = 8080
```

## Cadenas

### Tipos de Cadena

| Command | Description |
|---------|-------------|
| `"basic"` | Cadena básica (soporta secuencias de escape) |
| `'literal'` | Cadena literal (sin escapes) |
| `"""multi"""` | Cadena básica multilínea |
| `'''multi'''` | Cadena literal multilínea |

### Ejemplos

```
basic = "Hello\nWorld"
literal = 'C:\Users\path'
multi = """
Line one
Line two"""
```

### Secuencias de Escape

| Command | Description |
|---------|-------------|
| `\n  \t  \r` | Salto de línea, tabulación, retorno de carro |
| `\\` | Barra invertida |
| `\uXXXX` | Unicode (4 dígitos hexadecimales) |
| `\UXXXXXXXX` | Unicode (8 dígitos hexadecimales) |

## Números y Booleanos

### Tipos Numéricos

| Command | Description |
|---------|-------------|
| `42` | Entero |
| `1_000_000` | Entero con guiones bajos |
| `0xff / 0o77 / 0b11` | Hexadecimal, octal, binario |
| `3.14` | Flotante |
| `5e+22 / 1e-2` | Notación científica |
| `inf / nan` | Valores flotantes especiales |
| `true / false` | Booleano (solo minúsculas) |

### Ejemplos

```
count = 42
price = 19.99
hex_color = 0xFF5733
enabled = true
```

## Fechas

### Tipos de Fecha y Hora

| Command | Description |
|---------|-------------|
| `2026-03-26T10:30:00Z` | Fecha-hora con offset (UTC) |
| `2026-03-26T10:30:00-05:00` | Fecha-hora con offset (EST) |
| `2026-03-26T10:30:00` | Fecha-hora local (sin zona horaria) |
| `2026-03-26` | Fecha local |
| `10:30:00` | Hora local |

### Ejemplos

```
created = 2026-03-26T10:30:00Z
birthday = 1990-05-15
alarm = 07:00:00
```

## Tablas

### Sintaxis de Tabla

```
[server]
host = "localhost"
port = 8080

[server.ssl]
enabled = true
cert = "/path/to/cert.pem"
```

### Array de Tablas

```
[[users]]
name = "Alice"
role = "admin"

[[users]]
name = "Bob"
role = "user"
```

### Reglas

| Command | Description |
|---------|-------------|
| `[name]` | Encabezado de tabla estándar |
| `[a.b.c]` | Clave con puntos — tabla anidada |
| `[[name]]` | Array de tablas |
| `Sin redefinir` | No se puede definir la misma tabla dos veces |

## Arrays

### Sintaxis de Array

```
colors = ["red", "green", "blue"]
numbers = [1, 2, 3]
```

### Array Multilínea

```
hosts = [
  "alpha.example.com",
  "beta.example.com",
]
```

*La coma final está permitida en arrays TOML*

### Reglas

| Command | Description |
|---------|-------------|
| `Mismo tipo` | Todos los elementos deben ser del mismo tipo |
| `Coma final` | Permitida después del último elemento |
| `Saltos de línea` | Los arrays pueden abarcar múltiples líneas |

## Tablas Inline

### Sintaxis de Tabla Inline

```
point = { x = 1, y = 2 }
user = { name = "Alice", admin = true }
```

### Reglas

| Command | Description |
|---------|-------------|
| `Una línea` | Debe aparecer en una sola línea |
| `Sin coma final` | La coma final no está permitida |
| `Sin saltos de línea` | No puede abarcar múltiples líneas |
| `Sin agregar claves` | No se pueden agregar claves a la tabla inline después |

### Inline vs Estándar

```
# Inline — compacto, en una línea
db = { host = "localhost", port = 5432 }
# Estándar — legible, extensible
[db]
host = "localhost"
port = 5432
```

## Patrones Comunes

### pyproject.toml

```
[project]
name = "myapp"
version = "1.0.0"
dependencies = ["flask>=3.0"]
```

### Cargo.toml

```
[package]
name = "myapp"
version = "0.1.0"
edition = "2021"
```

### Consejos

| Command | Description |
|---------|-------------|
| `taplo` | Kit de herramientas TOML — formateador y linter |
| `Sin null` | Omitir la clave en lugar de establecerla en null |
| `Sin anclas` | A diferencia de YAML, no hay sistema de referencias/alias |
| `Estricto` | Sin claves duplicadas, sin arrays de tipos mixtos |
