Un lenguaje de marcado ligero ( LML ), también denominado lenguaje de marcado simple o humano , es un lenguaje de marcado con una sintaxis simple y discreta. Está diseñado para que sea fácil de escribir con cualquier editor de texto genérico y fácil de leer en su forma original. Los lenguajes de marcado ligero se utilizan en aplicaciones en las que puede ser necesario leer el documento original y el resultado final.
Por ejemplo, una persona que descarga una biblioteca de software puede preferir leer la documentación en un editor de texto en lugar de en un navegador web. Otra aplicación de estos lenguajes es facilitar la entrada de datos en publicaciones basadas en la web, como blogs y wikis , donde la interfaz de entrada es un simple cuadro de texto . A continuación, el software del servidor convierte la entrada en un lenguaje de marcado de documentos común, como HTML .
Los lenguajes de marcado ligeros se utilizaban originalmente en pantallas de solo texto que no podían mostrar caracteres en cursiva o negrita , por lo que se tuvieron que desarrollar métodos informales para transmitir esta información. Esta opción de formato se trasladó naturalmente a las comunicaciones por correo electrónico en texto sin formato. Los navegadores de consola también pueden recurrir a convenciones de visualización similares.
En 1986, el estándar internacional SGML proporcionó herramientas para definir y analizar lenguajes de marcado ligeros utilizando gramáticas e implicación de etiquetas. El XML del W3C de 1998 es un perfil de SGML que omite estas herramientas. Sin embargo, no se conoce ninguna definición de tipo de documento (DTD) SGML para ninguno de los lenguajes que se enumeran a continuación.
Los lenguajes de marcado ligeros se pueden clasificar por sus tipos de etiquetas. Al igual que HTML ( ), algunos lenguajes utilizan elementos con nombre que comparten un formato común para las etiquetas de inicio y fin (por ejemplo, BBCode ), mientras que los lenguajes de marcado ligeros adecuados se limitan a los signos de puntuación de solo ASCII y otros símbolos que no sean letras para las etiquetas, pero algunos también mezclan ambos estilos (por ejemplo, Textile ) o permiten HTML incrustado (por ejemplo, Markdown ), posiblemente ampliado con elementos personalizados (por ejemplo, MediaWiki ).<b>bold</b>
[b]bold[/b]
bq.
<ref>'''source'''</ref>
La mayoría de los lenguajes distinguen entre marcado para líneas o bloques y para fragmentos de texto más cortos, pero algunos solo admiten marcado en línea.
Algunos lenguajes de marcado están diseñados para un propósito específico, como documentar código informático (por ejemplo, POD , reST , RD ) o convertirse a un determinado formato de salida (normalmente HTML o LaTeX ) y nada más; otros tienen una aplicación más general. Esto incluye si están orientados a la presentación textual o a la serialización de datos. [ Aclaración necesaria ]
Los lenguajes orientados a la presentación incluyen AsciiDoc , atx , BBCode , Creole , Crossmark, Djot, Epytext , Haml , JsonML , MakeDoc , Markdown , Org-mode , POD (Perl) , reST (Python) , RD (Ruby) , Setext , SiSU , SPIP , Xupl, Texy!, Textile, txt2tags , UDO y Wikitext .
Los lenguajes orientados a la serialización de datos incluyen Curl ( homoicónico , pero también lee JSON; cada objeto se serializa), JSON y YAML .
La sintaxis propia de Markdown no admite atributos de clase ni atributos de identificación; sin embargo, dado que Markdown admite la inclusión de código HTML nativo, estas funciones se pueden implementar utilizando HTML directo. (Algunas extensiones pueden admitir estas funciones).
La sintaxis propia de txt2tags no admite atributos de clase o atributos de identificación; sin embargo, dado que txt2tags admite la inclusión de código HTML nativo en áreas etiquetadas, estas características se pueden implementar utilizando HTML directo al guardar en un destino HTML. [25]
Aunque normalmente se documenta que produce texto en cursiva y negrita, la mayoría de los procesadores de marcado ligeros generan elementos HTML semánticos em
y, strong
en su lugar, el texto monoespaciado puede generar elementos semánticos code
o de presentación tt
. Pocos lenguajes hacen una distinción, por ejemplo, Textile, o permiten al usuario configurar la salida fácilmente, por ejemplo, Texy.
Los LML a veces difieren para el marcado de varias palabras, ya que algunos requieren que los caracteres de marcado reemplacen los espacios entre palabras ( infijo ). Algunos idiomas requieren un solo carácter como prefijo y sufijo, otros necesitan caracteres duplicados o incluso triples o admiten ambos con un significado ligeramente diferente, por ejemplo, diferentes niveles de énfasis.
Gemtext no tiene ningún formato en línea, el texto monoespaciado (llamado texto preformateado en el contexto de Gemtext) debe tener la apertura y el cierre ```
en sus propias líneas.
En HTML, el texto se enfatiza con los tipos de elementos <em>
y <strong>
, mientras que <i>
y <b>
tradicionalmente marcan el texto para que esté en cursiva o negrita, respectivamente.
Microsoft Word y Outlook, y por consiguiente otros procesadores de texto y clientes de correo que buscan una experiencia de usuario similar, admiten la convención básica de utilizar asteriscos para negrita y guiones bajos para cursiva. Mientras que Word elimina los caracteres, Outlook los conserva.
En HTML, el texto eliminado o borrado e insertado se marca con los tipos de elementos <del>
y <ins>
, respectivamente. Sin embargo, los tipos de elementos heredados <s>
o <strike>
y <u>
también siguen estando disponibles para fragmentos de texto tachados y subrayados.
AsciiDoc, ATX, Creole, MediaWiki, PmWiki, reST, Slack, Textile, Texy! y WhatsApp no admiten marcado específico para subrayar texto. Sin embargo, Textile admite la inserción a través de la +inserted+
sintaxis.
AsciiDoc, ATX, Creole, MediaWiki, PmWiki, reST, Setext y Texy! no admiten marcado dedicado para tachar texto.
El código informático citado se presenta tradicionalmente en fuentes similares a las de las máquinas de escribir, donde cada carácter ocupa el mismo ancho fijo. HTML ofrece los tipos de elementos semánticos <code>
y de presentación obsoletos <tt>
para esta tarea.
Mediawiki y Gemtext no proporcionan marcado ligero para tramos de código en línea.
Los encabezados suelen estar disponibles en hasta seis niveles, pero el superior suele reservarse para contener lo mismo que el título del documento, que puede establecerse externamente. Algunos documentos pueden asociar niveles con tipos de división, por ejemplo, parte, capítulo, sección, artículo o párrafo.
La mayoría de los LML siguen uno de dos estilos para los encabezados, ya sea subrayados tipo Setext o marcadores de línea tipo atx [47] , o admiten ambos.
Título de nivel 1===============Título de nivel 2---------------Título de nivel 3~~~~~~~~~~~~~~~
El primer estilo utiliza subrayados, es decir, caracteres repetidos (por ejemplo, igual =
, guion -
o tilde ~
, normalmente al menos dos o cuatro veces) en la línea debajo del texto del encabezado.
RST determina los niveles de encabezado de forma dinámica, lo que hace que la creación sea más individual por un lado, pero complica las fusiones desde fuentes externas por el otro.
# Título de nivel 1## Título de nivel 2 ##### Título de nivel 3 ###
El segundo estilo se basa en marcadores repetidos (por ejemplo, almohadilla #
, igual =
o asterisco *
) al comienzo del encabezado, donde el número de repeticiones indica el nivel del encabezado (a veces inverso). La mayoría de los idiomas también admiten la reduplicación de los marcadores al final de la línea, pero mientras que algunos los hacen obligatorios, otros ni siquiera esperan que sus números coincidan.
Org-mode admite la sangría como un medio para indicar el nivel.
BBCode no admite encabezados de sección en absoluto.
POD y Textile eligen la convención HTML de niveles de encabezado numerados.
Microsoft Word admite el formato automático de párrafos como encabezados si no contienen más de unas pocas palabras, no tienen punto al final y el usuario presiona la tecla Intro dos veces. Para los niveles inferiores, el usuario puede presionar la tecla de tabulación la cantidad de veces que corresponda antes de ingresar el texto, es decir, de una a ocho tabulaciones para los niveles de encabezado del dos al nueve.
Los hipervínculos se pueden agregar en línea, lo que puede saturar el código debido a las URL largas, o con referencias alias
numeradas o con nombre id
a líneas que no contienen nada más que la dirección y los atributos relacionados y, a menudo, pueden estar ubicados en cualquier parte del documento. La mayoría de los lenguajes permiten al autor especificar el texto Text
que se mostrará en lugar de la dirección simple http://example.com
y algunos también proporcionan métodos para establecer un título de vínculo diferente Title
que puede contener más información sobre el destino.
Los LML que están diseñados para configuraciones especiales, por ejemplo, wikis o documentación de código, pueden generar automáticamente anclas con nombre (para encabezados, funciones, etc.) dentro del documento, vincular a páginas relacionadas (posiblemente en un espacio de nombres diferente) o proporcionar una búsqueda textual para palabras clave vinculadas.
La mayoría de los idiomas utilizan corchetes (dobles) o angulares para encerrar los enlaces, pero casi no hay dos idiomas que sean totalmente compatibles. Muchos pueden reconocer y analizar automáticamente las URL absolutas dentro del texto sin necesidad de más marcado.
Los enlaces Gemtext y Setext deben estar en una línea aparte, no se pueden usar en línea.
La sintaxis de enlace normal de Org-mode realiza una búsqueda de texto del archivo. También puedes incluir destinos dedicados con <<id>>
.
HTML requiere un elemento explícito para la lista, que especifique su tipo, y uno para cada elemento de la lista, pero la mayoría de los lenguajes de marcado ligeros solo necesitan prefijos de línea diferentes para las viñetas o los elementos enumerados. Algunos lenguajes dependen de la sangría para las listas anidadas, mientras que otros utilizan marcadores de lista padre repetidos.
Microsoft Word convierte automáticamente los párrafos que comienzan con un asterisco *
, un guión-menos -
o un corchete de mayor que >
seguido de un espacio o una tabulación horizontal como elementos de lista con viñetas. También iniciará una lista enumerada para el dígito 1 y las letras a (para listas alfabéticas) o i (para números romanos) que no distinguen entre mayúsculas y minúsculas, si están seguidas de un punto .
, un paréntesis de cierre )
, un signo de mayor que >
o un guión-menos -
y un espacio o tabulación; en el caso del paréntesis redondo, (
también se admite un paréntesis de apertura opcional antes del marcador de lista.
Los idiomas difieren en cuanto a si admiten dígitos opcionales u obligatorios en elementos de listas numeradas, qué tipos de enumeradores entienden (por ejemplo, dígito decimal 1 , números romanos i o I , letras alfabéticas a o A ) y si admiten mantener valores explícitos en el formato de salida. Algunos dialectos de Markdown, por ejemplo, respetarán un valor inicial distinto de 1, pero ignorarán cualquier otro valor explícito.
Slack ayuda al usuario a ingresar listas enumeradas y con viñetas, pero en realidad no las formatea como tales, es decir, solo incluye un dígito inicial seguido de un punto y un espacio o un carácter de viñeta •
delante de una línea.
Los siguientes lenguajes de marcado ligero, si bien son similares a algunos de los ya mencionados, aún no se han agregado a las tablas de comparación de este artículo: