Traducción al Español que hice de gendoc, programa que se puede obtener clonando este repositorio. Esta traducción está licenciada por el Autor del sitio bajo los mismos términos y condiciones de la web antes citada y por la Licencia FDL 1.3.
gendoc es una pequeña herramienta que genera documentación en un archivo HTML estático y formateado. Es similar a Sphinx y ReadtheDocs, pero mucho mejor y mucho más interesante, ya que no tiene partes componentes del servidor y funciona sin JavaScript.
Sugerencia
Esta documentación es corta, mucho más corta que la de RtD. Esto no se debe a que me dé pereza escribirla, sino a que gendoc es realmente sencillo de utilizar. Ya se sabe, "¡Mantenlo estupidamente simple!"
A diferencia de RtD, gendoc no proporciona alojamiento. Pero como los documentos son sólo archivos individuales y tenemos gitlab, github, etc. esto no es un problema real. (Tal vez permitirle tener una copia de su propia documentación y no llevársela a la nube no sea una desventaja en absoluto...)
Lo primero es descargar el código fuente o el script del repositorio. Ambos son archivos individuales, de unos 100 kilobytes cada uno. En serio, no hay dependencias (aparte de un intérprete de php para el script, por supuesto). Todo está incluido sin problemas.
Para la versión ANSI C:
$ gcc gendoc.c -o gendoc $ ./gendoc <salida.html> <archivo entrada> [archivo entrada...]
$ php ./gendoc.php <output> <input file> [input file...]
El formato de salida es detectado por la extensión, y a falta de un plugin de escritura para esa extensión, por defecto es un único archivo HTML5 válido para el W4C, autocontenido y sin dependencias, que puede llevar a cualquier parte (como el que está leyendo ahora). La salida de la versión ANSI C y de la versión PHP debería ser idéntica bit a bit (excepto si tiene la extensión php-gd instalada, entonces la versión PHP encogerá de forma transparente las imágenes alineadas para ahorrar espacio de almacenamiento).
Puede utilizar un archivo de entrada o varios archivos. No importa, gendoc de cualquier manera generará un único archivo de salida. Usted tiene el control total de cómo organizar sus documentos de origen, no influye en la salida (no como Sphinx).
Los archivos de entrada también se incorporan a la salida, su formato se detecta por la extensión, y en ausencia de un plugin de lectura, se utiliza por defecto las etiquetas de gendoc.
Nota
La versión ANSI C sólo lee etiquetas gendoc y sólo genera en formato de salida HTML5, no soporta plugins de lectura/escritura de formatos de archivo. Sin embargo, tiene un filtro incorporado para convertir MarkDown en gendoc, basado en smu. El plugin de PHP utiliza una clase ParseDown extendida.
Se escriben archivos de texto simples, por defecto con etiquetas similares a las de HTML, pero MUCHO MÁS simples. También puede añadir plugins para soportar cualquier formato de entrada, como ReadFirst o MarkDown. Esta documentación, en adelante, habla del formato de etiquetas por defecto de gendoc.
Hay dos categorías para las etiquetas. Las etiquetas de la primera categoría especifican la metainformación y la estructura general de la documentación.
Estos están encerrados entre las etiquetas gendoc: <doc>...</doc>. Bastante simples, sólo especifican algunos datos variables y etiquetas traducidas para el documento, sobre todo para las cajas de alerta. El <doc> debe ser la primera etiqueta en el archivo de documentación de origen. Sus subetiquetas son las siguientes:
Uso el ejemplo que escribió su Autor:
<doc> <titleimg>logo.png gendoc</titleimg> <title>Documentación</title> <url>https://texto-plano.xyz/~tano/archivos-gendoc/07_gendoc.html</url> <version>1.0.0</version> <theme>theme.css</theme> <lang>es</lang> <rslt>Resultado de la Búsqueda</rslt> <home>Inicio</home> <link>Enlace permanente a este Encabezado</link> <info>Importante</info> <hint>Consejo</hint> <note>Nota</note> <also>Vea También</also> <todo>Hacer</todo> <args>Argumentos</args> <rval>Valor de Retorno</rval> <warn>Advertencia</warn> <prev>Anterior</prev> <next>Siguiente</next> <copy>2022 Tano (tano@texto-plano.xyz)</copy> </doc>
Nota
Ya sea que se de <titleimg> o <title>, el título real se concatena a partir del texto alt y la etiqueta <title>, por lo tanto será "documentación gendoc" en el ejemplo anterior.
Las siguientes etiquetas influyen en el modo en que se genera el índice de contenidos (TOC) de la izquierda. Estas etiquetas son
La etiqueta <h1> abre una nueva página. Otros subtítulos añaden secciones a esa página. Los enlaces y las urls se generan automáticamente a partir del texto del encabezamiento, pero por si acaso el nombre generado no se ajusta a sus necesidades, puede especificar el id de la etiqueta a mano con <h1 (id)>, <h2 (id)>i, <h3 (id)> etc.
Por ejemplo:
<h1>Encabezado Simple</h1> (Usará siempre "encabezado_simple" como etiqueta) <h1 mi_etiqueta_puntual>Otro Encabezado</h1> (usará "mi_etiqueta_puntual")
Puede encerrar la primera, y exactamente una etiqueta <h1> con sus subtítulos en un
Estas rúbricas quedarán excluidas del índice de contenidos y, a cambio, se mostrarán como página de bienvenida. Además, el enlace "Inicio" con sus rutas de navegación llevará a esta página en lugar de a la primera entrada del índice de contenidos.
Ninguna. Se asume que "Antonieta de las Nieves" necesita una documentación, así que escribe los archivos de entrada y ejecuta gendoc en su ordenador local, y con suerte Antonieta no quiere hackear a "de las Nieves" (¿tal vez si es esquizofrénica?). En resumen, sólo hay una parte en el proceso de generación.
Entonces "de las Nieves" solamente recibe el HTML estático generado, no tiene acceso a los archivos de entrada, no ejecuta gendoc ni se involucra en el proceso de generación de la documentación de ninguna manera. Todo lo que obtiene es el producto estático final.
Si "Antonieta" sube la documentación a un servidor, eso tampoco es un problema, porque gendoc no tiene absolutamente ningún componente de servidor. "de las Nieves" descargará la documentación en su ordenador (probablemente en la caché local de su navegador), y la búsqueda se ejecutará en su ordenador local. Si "de las Nieves" intenta piratear la búsqueda, sólo obtendrá malos resultados en su propio ordenador, pero no influirá en Cecil ni en otros lectores de documentos.
La segunda categoría es para las etiquetas que utiliza para dar formato al documento. gendoc le quita el peso de la web moderna de encima, lo libera de la locura de las hojas de estilo y de las etiquetas neutrales al contexto, puede utilizar etiquetas sencillas tal y como Sir Burners Lee pretendía originalmente.
En un documento fuente bien formado no deberían existir más etiquetas que las enumeradas aquí (olvídese de <span>, <div>, etc.). Pero para proporcionar compatibilidad con HTML, los generadores no imponen esto, todas las etiquetas que no son reconocidas por gendoc se copian literalmente en la documentación final (con una advertencia).
Advertencia
No se deje engañar por el parecido: las etiquetas gendoc no son etiquetas HTML, sólo lo parecen para acortar significativamente su curva de aprendizaje.
Advertencia
En cuanto escriba su primer atributo de la etiqueta, puede estar seguro de que lo está haciendo mal.
Todas las etiquetas tienen su correspondiente etiqueta de cierre, excepto <include>, <api>, <br>, <mb*> e <img*> (donde '*' puede ser l,r,w). Esto se valida y los errores se reportan para cada sección individualmente.
Cita, no creo que necesites esto en una documentación, pero por si acaso
Cabecera 1 | Cabecera 2 | Cabecera 3 |
---|---|---|
(1,2) Izquierda | (2,2) Izquierda | (3,2) Derecha |
(1,1) Derecha | (2,1) Izquierda | (3,1) Izquierda |
Este es un ejemplo de texto preformateado con varias líneas y que es muy muy largo, tanto que no cabe en la pantalla y debe aparecer una barra de desplazamiento.
Este es un ejemplo de texto preformateado que tiene un texto resaltado, e incluso algunos resaltados de líneas completocomo ejemplo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdlib.h>
/* comentario 1
multilínea */
// comentario 2, línea única
int main(int argc, char **argv)
{
volatile static int i, a = 0xff, b = -1ULL;
wchar_t c = L'\e', *d = L"wide string";
float e = 1.0f, f = .5, g = -1e10;
for(i = 0; i < 128; i++)
a += b->c;
printf("Hola Mundo!\n");
}
Hay dos tipos de enlaces en el documento:
En la documentación de un software es muy común tener que explicar cómo se realiza la entrada de datos por parte del Usuario. gendoc lo ayuda mucho con eso.
Para estas cajas, el texto de la cabecera puede definirse en la etiqueta <doc>.
Sugerencia
Esta es una pista.
Importante
Esta es una información importante.
Nota
Esta es una nota.
Ver También
Una buena película. Has jugado demasiado con el ordenador.
Advertencia
Esta es una advertencia.
Hacer
Probablemente no deberías usar esto, en su lugar termine su código.
Puede elegir utilizar MarkDown para su formato de origen. Para ello, use la extensión .md en sus archivos de entrada. La versión ANSI C tiene un parser incorporado, la versión PHP necesita un plugin. En ambos casos, puede mezclar MarkDown simple con etiquetas gendoc (no HTML), como <mbl>, <imgl> etc.
Nota
Use la etiqueta <doc> al igual que lo haría con el formato XML para especificar los metadatos.
Use el estándar MD, las líneas subrayadas con el signo igual (‘=’) harán los encabezados <h1>, el guión (‘-’) hará los encabezados <h2>. También puede utilizar el prefijo hashmark (‘#’ marca de hash), donde el número de hashmarks establece el nivel del encabezado (de uno a seis).
Encabezado 1 ========= Encabezado 2 --------- # Encabezado 1 ## Encabezado 2 ### Encabezado 3 #### Encabezado 4 ##### Encabezado 5 ###### Encabezado 6
Estos no son realmente el estándar de MD.
Citas:
> esta es una cita
> esto también pertenece a la misma cita
> No creo que necesites esto en una documentación
|
|
|
| Cabecera de Ejemplo 1 | Cabecera de Ejemplo 2 | Cabecera de Ejemplo 3 | |-----------------------|-----------------------|----------------------:| | Dato de ejemplo 1 | Dato de ejemplo 2 | Dato de ejemplo 3 | | Dato de ejemplo 4 | Dato de ejemplo 5 | Dato de ejemplo 6 |
Hay dos tipos de enlaces en el documento:
Los párrafos estándar que comienzan con una de las siguientes cadenas se convierten en cuadros de alerta.
Ahora esta parte es realmente mucho más simple que con Sphinx y ReadtheDocs. A diferencia de aquellos, aquí la lógica y la apariencia están realmente separados. Sí, sé que RtD tiene dos referencias de hojas de estilo, pero ¡mira los archivos .css! El css principal tiene códigos de color, y el css del tema está lleno de ajustes de márgenes, paddings, desbordamientos, visualizaciones, etc. Esto no es suficiente.
Sugerencia
En gendoc toda la lógica de navegación se implementa en CSS. No se necesita JavaScript.
En primer lugar, se especifica el tema con la etiqueta <theme>...</theme> del <doc>. Ésta debe contener un nombre de archivo relativo al documento fuente.
Aunque el CSS es una hoja de estilo válida, sólo incluye unos pocos selectores DOM específicos con sólo atributos temáticos.
Selector DOM | Descripción |
---|---|
hr,table,th,td | Si lo desea, establezca el color del borde y el color de fondo de la cabecera de la tabla. |
tr | Establecer la alteración de los colores de fondo de las filas. |
a | Establezca el color y la decoración de los enlaces. |
.content | Cambie aquí el color y la familia de la fuente por defecto de toda la documentación. |
.title | Cambia el aspecto de la zona grande de la parte superior izquierda. |
.title, .home, h1>a,h2>a,h3>a, h4>a,h5>a,h6>a |
Debe establecer el mismo color de fondo para estos para un tema de buen aspecto. |
.search | Cambiar los colores de la caja de entrada de la búsqueda. |
.nav | Cambiar el color de la fuente y el color de fondo de la barra de navegación. |
.nav p | El selector de subtítulos de la TOC. También establece el aspecto de la leyenda "Resultados de la búsqueda". |
.nav label | Entrada inactiva del nivel superior de la TOC |
.nav current | La entrada activa del nivel superior de la TOC |
.nav a | Resultado de la búsqueda Entrada TOC |
.nav li>ul>li | Color d fondo de los subniveles |
.nav li>ul>li>a | Color de primer plano de los subniveles |
pre | Fondo y borde de los bloques preformateados. |
.info .hint, .warn |
Cambia el color de fondo de los cuadros de alerta. |
.info>p:firstchild | Cambia el color de fondo de la cabecera de las cajas de alerta, . |
.btn | El estilo de los botones "Anterior" y "Siguiente" en la parte inferior. |
.ui1, ui2, ui3, .ui4, ui5, ui6 |
Puede utilizar estas clases para imitar los elementos de entrada de la interfaz de Usuario de su software, como los botones, por ejemplo. |
Advertencia
NUNCA cambie la lógica de un tema CSS, como la configuración de los atributos "display", "position", etc. Sólo cambie el color de fondo, el color del borde, el color de la fuente, la familia de la fuente, el tamaño de la fuente, etc.
Para ello, tiene que definir unas cuantas clases en el CSS de su tema. En realidad son pocas. Estas clases son genéricas para todos los lenguajes:
Clase | Descripción |
---|---|
.hl_h | Parte resaltada manualmente. |
.hl_c | Resaltado de sintaxis de los comentarios. |
hl_p | Resaltado sintáctico de pseudoelemento (como las directivas del precompilador, podría ser lo mismo que los comentarios). |
hl_o | Resaltado de sintaxis de operador. |
hl_n | Resaltado de sintasix del número literal. |
hl_s | Resaltado de sintaxis de cadena literal. |
hl_t | Resaltado de sintaxis de tipo. |
hl_k | Resaltado de sintaxis de palabra clave. |
hl_f | Resaltado de sintaxis de función. |
hl_v | Resaltado de sintaxis de variable. |
hr,table,th,td{border-color:#e1e4e5;} th{background:#d6d6d6;} tr:nth-child(odd){background:#f3f6f6;} a{text-decoration:none;color:#2980B9;} .content{background:#fcfcfc;color:#404040;font-family:Helvetica,sans-serif;} .title,.home,h1>a,h2>a,h3>a,h4>a,h5>a,h6>a{background:#2980B9;color:#fcfcfc;} .version{color:rgba(255,255,255,0.3);} .search{border:1px solid #2472a4;background:#fcfcfc;} .nav{background:#343131;color:#d9d9d9;} .nav p{color:#55a5d9;} .nav label:hover,.nav a:hover{background:#4e4a4a;} .nav .current{background:#fcfcfc;color:#404040;} .nav li>ul>li{background:#e3e3e3;} .nav li>ul>li>a{color:#404040;} .nav li>ul>li>a:hover{background:#d6d6d6;} .pre {border:1px solid #e1e4e5;background:#f8f8f8;} .info{background:#e7f2fa;} .info>p:first-child{background:#6ab0de;color:#fff;} .hint{background:#dbfaf4;} .hint>p:first-child{background:#1abc9c;color:#fff;} .warn{background:#ffedcc;} .warn>p:first-child{background:#f0b37e;color:#fff;} .btn{background:#f3f6f6;} .btn:hover{background:#e5ebeb;} .ui1{font-family:Serif;font-size:12px;border-radius:3px;background:#cfcfcf;} .hl_h{background-color:#ccffcc;} .hl_c{color:#808080;font-style:italic;} .hl_p{color:#1f7199;} .hl_o{color:#404040;} .hl_n{color:#0164eb;} .hl_s{color:#986801;} .hl_t{color:#60A050;} .hl_k{color:#a626a4;} .hl_f{color:#2a9292;} .hl_v{color:#e95649;}
Los plugins se encuentran en el mismo directorio que el archivo gendoc.php, en el subdirectorio "plugins". La versión ANSI C también revisa el directorio "/usr/share/gendoc/plugins". Se nombran de forma coherente, con un prefijo que indica de qué tipo de plugin se trata.
Nota
La similitud entre los plugins de lectura y escritura de archivos no es una coincidencia: el mismo plugin de formato de archivo puede implementar las funcionalidades de lectura y escritura.
Nombrado como plugins/hl_(lang).json, por ejemplo plugins/hl_python.json.
Utilizado tanto por la versión ANSI C como por la versión PHP. El resaltador genérico funciona bastante bien con cualquier lenguaje de programación (en el peor de los casos, algunas palabras clave del lenguaje u operadores especiales se resaltan como una variable). Pero en caso de que necesite cosas específicas del lenguaje, puede añadir reglas con estos plugins. Estos archivos deben contener una cadena JSON compatible con RFC 8259 con un array de los siguientes campos:
Índice | Descripción |
---|---|
0 | Una matriz de regexp (expresión regular) que coinciden con los comentarios |
1 | Un array (arreglos) de regexp (expresión regular) que coinciden con pseudo elementos (como las directivas del precompilador) |
2 | Una matriz de regexp (expresión regular) que coincide con operadores (como +, -, *, /, >=, =, <= etc.) |
3 | Una matriz de regexp (expresión regular) que coincida con números (normalmente [0-9]+, pero también podría coincidir con números de coma flotante) |
4 | Una matriz de cadenas que inician y terminan literales de cadena (normalmente ", ', ` pero podría ser L", b' etc.) |
5 | Una matriz de caracteres que siempre separan los tokens (normalmente {, }, ; etc.) |
6 | Una matriz de cadenas que coinciden con los tipos (son palabras clave, sólo que resaltadas de forma diferente, como true, false, nullptr, etc.) |
7 | Una matriz de cadenas que coinciden con palabras clave (como function for, forach, etc.) |
Índice | Descripción |
---|---|
$ | Coincide con el final de la línea |
.*? | Coincide con cero o más apariciones de cualquier carácter hasta que el patrón que le sigue coincida (por ejemplo .*?abc coincide con cualquier cosa hasta que abc coincida) |
. | Coincide con cualquier caracter. |
[(list)] | Coincide con los caracteres de la lista. La lista puede contener intervalos (start)-(end), por lo que para que coincida con el guión, utilice \-. |
[(list)]? | Coincide con cero o una ocurrencia de los caracteres de la lista. |
[(list)]+ | Coincide con varias (al menos una o más) apariciones de los caracteres de la lista. |
[(list)]* | Coincide con la aparición múltiple (cero o más) de los caracteres de la lista. |
[^(list)] | Coincide con cualquier carácter que no esté en la lista. |
[^(list)]? | Coincide con cero o una ocurrencia de cualquier carácter que no esté en la lista. |
[^(list)]+ | Coincide con la aparición múltiple (al menos una o más) de cualquier carácter que no esté en la lista. |
[^(list)]* | Coincide con la aparición múltiple (cero o más) de cualquier carácter que no esté en la lista. |
1
2
3
4
5
6
7
8
9
10
11
12
/* reglas de resaltado de sintaxis para el lenguaje C */
[
/* 0 comentario */ [ "\/\/.*?$", "\/\*.*?\*\/" ],
/* 1 pseudo */ [ "#.*?$" ],
/* 2 operadores */ [ "->", "[=\<\>\+\-\*\/%&\^\|!:\.][=]?" ],
/* 3 números */ [ "[0-9][0-9bx]?[0-9\.a-f\+\-]*[UL]*" ],
/* 4 cadenas */ [ "\"", "'", "L\"", "L'" ],
/* 5 separadores */ [ "[", "]", "{", "}", ",", ";" ],
/* 6 tipos */ [ "char", "short", "int", "long", "float", ... ],
/* 7 palabras claves */ [ "if", "else", "switch", "case", "for", ... ]
]
Nombrado como plugins/api_(lang).php, por ejemplo plugins/api_python.php.
Estos plugins deben implementar una única función con el nombre gendoc_api_(lang), que recibe el contenido del archivo fuente, lo analiza en busca de comentarios doctype y llama a varios métodos de gendoc:: para generar la salida.
plugins/api_c.php1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
/* generar documentación de la API para el lenguaje C */
function gendoc_api_c($str) {
/* obtener todos los comentarios con cadenas doctype */
if(preg_match_all("/\/\*\*[^\*](.*?)\*\/[\n](.*?)$/ims", $s, $M, PREG_SET_ORDER)) {
gendoc::data_list_open();
foreach($M as $m) {
gendoc::data_topic_open();
gendoc::source_code($m[2], "c");
gendoc::data_topic_close();
gendoc::data_description_open();
/* generar una salida de buen aspecto del comentario aquí */
gendoc::data_description_close();
}
gendoc::data_list_close();
}
}
Nombrados como plugins/fmt_(extensión).php, por ejemplo plugins/fmt_rst.php.
Estos plugins (al igual que los plugins de escritura de archivos) deben implementar una clase con el nombre gendoc_(extension). Para un lector, se requiere un método estático, llamado gendoc_(extension)::parse, que recibe el contenido del documento fuente como cadena, lo analiza y llama a varios métodos de gendoc:: para generar la salida. Los plugins del lector de archivos son responsables de incrementar el contador de número de línea en gendoc::$l cada vez que analizan un carácter de nueva línea (necesario para informar correctamente de los errores).
Por ejemplo:
plugins/fmt_md.php1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
/* Plugin lector de formatos de archivo MarkDown */
class gendoc_md {
public static parse($str) {
/* hacer algo con el documento fuente en $str
* y llamar a los métodos de gendoc para generar la salida */
gendoc::heading(1,
"The Hundread Years Old Man Who Climbed Out on the Window and Disappeared");
gendoc::heading(2, "Chapter 1");
gendoc::paragraph_open();
gendoc::text("Lorem ipsum sic dolor amet");
gendoc::paragraph_close();
gendoc::heading(2, "Chapter 2");
/* ... */
/* mantener actualizado el contador de líneas actuales */
gendoc::$l++;
}
}
Alternativamente, si la generación de la salida a través de los métodos de llamada no es factible, un plugin de lector de entrada podría devolver una cadena con etiquetas gendoc.
plugins/fmt_ext.php1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/* Un plugin lector de formatos de archivo que no utiliza los métodos de gendoc:: */
class gendoc_ext {
public static parse($str) {
/* hacer algo con el documento fuente en $str
* y generar una cadena de salida con etiquetas gendoc */
return
"<h1>The Hundread Years Old Man Who Climbed Out on the Window and Disappeared</h1>".
"<h2>Chapter 1</h2>".
"<p>Lorem ipsum sic dolor amet</p>".
"<h2>Chapter 2</h2>";
}
}
Advertencia
Esto devuelve etiquetas gendoc, y no etiquetas HTML.
Nombrados como plugins/fmt_(extension).php, por ejemplo plugins/fmt_md.php.
Estos plugins (al igual que los plugins lectores de archivos) deben implementar una clase con el nombre gendoc_(extension). Para un escritor, deben implementarse todos los métodos que están marcados como "tiene que ser implementado por los plugins de escritor" en la lista de la API más abajo. Además, deben instanciar esa clase y devolver una instancia.
Por ejemplo:
plugins/fmt_pdf.php1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
/* Plugin de creación de archivos PDF */
class gendoc_pdf {
/* ganchos (hooks) para generar la salida a esta instancia */
public function heading($level, $id, $name) { /* ... */ }
public function paragraph_open() { /* ... */ }
public function paragraph_close() { /* ... */ }
public function source_code($str, $type = "", $tokens = []) { /* ... */ }
/* ... más métodos ... */
/* output this instance to a file */
public function output($fn) {
$f = fopen($fn, "wb+");
if(!$f) { gendoc::report_error("unable to write file"); die; }
/* imprimir en formato */
fclose($f);
}
}
/* ¡Esto es muy importante! */
return new gendoc_pdf;
Índice | Descripción |
---|---|
0 | El tipo del token ("" texto, "c" comentario, "o" operador, "n" número, "s" cadena, "k" palabra clave, "t" tipo, "v" variable, igual que en las clases CSS de resaltado). |
1 | Cadena, la parte de la fuente incluida en este token. |
Tanto para el texto preformateado como para el código fuente, el plugin File Format Writer es responsable de manejar las etiquetas <hl> y <hm> (que se incluyen en la cadena de entrada $str, sin importar el formato).
Sugerencia
La concatenación de los segundos campos en la matriz de tokens debería dar como resultado la cadena de código fuente original.
Estos métodos son utilizados por los plugins. Salvo unos pocos, que sólo se implementan en la clase gendoc y que se enumeran al principio, los plugins de escritor tienen que implementar todos ellos (como funciones no estáticas). Los plugins de lectura sólo tienen que implementar el método estático parse, pero llaman a estos métodos para generar la salida.
1
2
public static function safeid($str)
Argumentos |
---|
cadena de entrada |
Valor de Retorno |
cadena la cadena convertida |
1
public static function report_error($msg)
Argumentos |
---|
cadena mensaje de error |
1
2
public static function api($c, $fn)
Argumentos |
---|
cadena lenguaje |
cadena nombre de archivo |
1
2
public static function include($fn) {
Argumentos |
---|
cadena nombre de archivo |
1
2
public static function doc($str)
Argumentos |
---|
cadena con sub-etiquetas <doc> |
1
2
public static function hello_open()
1
2
public static function caption($name)
Argumentos |
---|
cadena nombre del título |
1
2
public static function heading($level, $name, $id = "", $alias = "")
Argumentos |
---|
cadena "1" a "6" |
cadena de encabezamiento nombre legible por el Usuario |
cadena id de etiqueta de encabezado |
1
2
public static function paragraph_open()
1
2
public static function paragraph_close()
1
2
public static function bold_open()
1
2
public static function bold_close()
1
2
public static function italic_open()
1
2
public static function italic_close()
1
2
public static function underline_open()
1
2
public static function underline_close()
1
2
public static function strike_open()
1
2
public static function strike_close()
1
2
public static function superscript_open()
1
2
public static function superscript_close()
1
2
public static function subscript_open()
1
2
public static function subscript_close()
1
2
public static function quote_open()
1
2
public static function quote_close()
1
2
public static function line_break()
1
2
public static function ordered_list_open()
1
2
public static function ordered_list_close()
1
2
public static function unordered_list_open()
1
2
public static function unordered_list_close()
1
2
public static function list_item_open()
1
2
public static function list_item_close()
1
2
public static function data_list_open()
1
2
public static function data_list_close()
1
2
public static function data_topic_open()
1
2
public static function data_topic_close()
1
2
public static function data_description_open()
1
2
public static function data_description_close()
1
2
public static function grid_open()
1
2
public static function grid_row_open()
1
2
public static function grid_cell_open()
1
2
public static function grid_cell_wide_open()
1
2
public static function grid_cell_close()
1
2
public static function grid_row_close()
1
2
public static function grid_close()
1
2
public static function grid_row_close()
1
2
public static function grid_close()
1
2
public static function table_open()
1
2
public static function table_row_open()
1
2
public static function table_header_open()
1
2
public static function table_header_wide_open()
1
2
public static function table_header_close()
1
2
public static function table_cell_open()
1
2
public static function table_cell_wide_open()
1
2
public static function table_number_open()
1
2
public static function table_number_wide_open()
1
2
public static function table_cell_close()
1
2
public static function table_row_close()
1
2
public static function table_close()
1
2
public static function teletype($str)
Argumentos |
---|
cadena el texto |
1
2
public static function preformatted($str)
Argumentos |
---|
cadena el texto |
1
2
public static function source_code($str, $type = "", $tokens = [])
Argumentos |
---|
cadena el código fuente como cadena |
string el tipo de idioma (o cadena vacía) |
código fuente con tokens de matriz (para resaltar la sintaxis) |
1
2
public static function prev_link()
1
2
public static function next_link($id, $name)
Argumentos |
---|
cadena id etiquetas de encabezamiento |
cadena nombre encabezado legible por el Usuario |
1
2
public static function internal_link($name, $lnk = "")
Argumentos |
---|
cadena nombre encabezado legible por el Usuario |
cadena a la que enlazar, podría ser una cadena de sustitución para las siguientes referencias |
1
2
public static function resolve_link($subst, $id)
Argumentos |
---|
cadena la cadena de sustitución que se utilizó como id |
cadena el id real |
1
2
public static function external_link_open($url)
Argumentos |
---|
URL's como cadena |
1
2
public static function external_link_close()
1
2
public static function user_interface_open($type)
Argumentos |
---|
cadena de tipo "1" a "6" |
1
2
public static function user_interface_close()
1
2
public static function keyboard($key)
Argumentos |
---|
cadena nombre de la clave |
1
2
public static function mouse_button($type)
Argumentos |
---|
cadena "l" (botón izquierdo), "r" (botón derecho) o "w" (rueda) |
1
2
public static function image($align, $fn, $a = [], $img = "")
Argumentos |
---|
cadena de caracteres "t" (alineada como texto), "l" (izquierda), "r" (derecha), "c" (centrada) o "w" (ancha, centrada) |
cadena nombre de archivo de la imagen |
arreglo índice 0 ancho, 1 alto, 'mime' tipo mime |
cadena datos de la imagen |
1
2
public static function figure($name)
Argumentos |
---|
cadena descripción de la figura |
1
2
public static function alert_box_open($type)
Argumentos |
---|
cadenas ya sea "info", "hint", "note", "also", "todo" o "warn" |
1
2
public static function alert_box_close()
1
2
public static function text($str)
Argumentos |
---|
cadena el texto |
1
2
public static function parse($s)
Argumentos |
---|
cadena contenido del documento fuente |
gendoc::\$fn nombre del archivo fuente |
Valor de Retorno |
gendoc::\$l número de línea actual, debe ser incrementado por el plugin de lectura |
1
2
public static function output($fn)
Argumentos |
---|
nombre de cadena del archivo en el que se va a escribir |
Algunos navegadores se niegan a recargar la página si se introduce una URL con una etiqueta de anclaje (la que va después de '#'). Además de escribir la URL y pulsar ↵ Enter, también hay que pulsar F5 (refrescar la página). Esto no debería ser, pero podría ser problemático al enlazar la documentación desde otras fuentes, por lo que el documento generado también acepta las etiquetas como cadena de consulta de la URL (después de '?' en la URL). Todos los navegadores piensan que una URL con una cadena de consulta tiene que ser recargada. Estos tipos de enlaces se redirigen de forma transparente a una URL con una variante de anclaje (que entonces está bien, porque la recarga ya se ha producido).
No es un problema. La barra de navegación de la izquierda con el TOC funcionará como se espera. También lo hará el "Inicio" en la parte superior, y los enlaces "Anterior" y "Siguiente" en la parte inferior. Sin embargo, los enlaces internos creados mediante la etiqueta <a> sólo funcionarán dentro de la misma página, y no cambiarán de página (debido al problema de no recargar con anclas explicado anteriormente, y la solución requiere JavaScript).
Tanto el código fuente en C ANSI como el script en PHP están disponibles bajo la licencia GPLv3+ o cualquier versión posterior de la misma.
Este programa es software libre; puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General GNU publicada por la Fundación para el Software Libre; ya sea la versión 3 de la Licencia, o (a su elección) cualquier versión posterior. Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; ni siquiera la garantía implícita de COMERCIALIZACIÓN o ADECUACIÓN A UN PROPÓSITO PARTICULAR. Consulte la Licencia Pública General de GNU para más detalles. Debería haber recibido una copia de la Licencia Pública General GNU junto con este programa; si no es así, escriba a la Free Software 675 Mass Ave, Cambridge, MA 02139, USA.
Esos pocos iconos incrustados en la salida provienen de iconos públicos de FontAwesome y tienen licencia CC-BY-4.0.
Usted es libre de: - Compartir - copiar y redistribuir el material en cualquier medio o formato - Adaptar - remezclar, transformar y construir sobre el material El licenciante no puede revocar estas libertades siempre y cuando usted siga los términos de la licencia. Bajo los siguientes términos: - Atribución - Debe dar el crédito apropiado, proporcionar un enlace a la licencia, e indicar si se han realizado cambios. Puede hacerlo de de manera razonable, pero no de forma que sugiera que el que el licenciante lo respalda a usted o a su uso.
Me gustaría decir que el CSS incrustado es de RtD, pero la verdad es que el estilo de RtD era un desastre y tuve que reescribir todo desde cero. Así que parece y se siente como la hoja de estilo original de RtD, pero es una reescritura completa desde cero, con licencia CC-BY.
El código JavaScript mínimo que se introduce en los documentos (para proporcionar resultados de búsqueda) también tiene licencia CC-BY.