PBToolboxAI v4 ← Site

markdownview — u_pbt_markdownview #

← Referencia de componentes · Índice de la guía

markdownview muestra un documento Markdown de solo lectura, con los colores del tema: títulos, listas, tablas, listas de tareas, código coloreado, imágenes. Fija el texto en is_markdown, o la ruta de un archivo en is_source; un enlace nunca navega, lanza ue_link_clicked y decide la aplicación. El HTML en bruto de un documento nunca se ejecuta.

▶ Verlo en vivo — Aplicación de demostración, mosaico Markdown viewer, con el código y esta página lado a lado.


De un vistazo #

Userobjectu_pbt_markdownview
EntradaUn texto Markdown (is_markdown), o un archivo del equipo o una URL https:// (is_source)
SintaxisCommonMark, más las tablas, las listas de tareas, el tachado y los enlaces sueltos de GitHub
Retornoue_link_clicked para un enlace (decide la aplicación), ue_loaded / ue_load_failed para un archivo, ue_search_result para la búsqueda
SeguridadEl HTML en bruto se muestra como texto; un enlace javascript:, vbscript: o data: no es clicable; una imagen http:// se rechaza

Inicio rápido #

// Show a Markdown file : its pictures and relative links are read against its folder
uo_md.is_source = "C:\Acme\Help\guide.md"

// ... or any text the application has
uo_md.is_markdown = "# Release notes~n~n- [x] Orders~n- [ ] Invoices"

// ue_link_clicked : the viewer never navigates, the application decides where to open as_url

Propiedades #

PropiedadTipoPredeterminadoDescripción
is_markdownstring""El texto Markdown que mostrar. Fijarlo reemplaza el documento (is_source se relee entonces vacío); vacío vacía la vista. El HTML en bruto que contiene se muestra como texto, nunca se ejecuta. Se relee tal como se fijó
is_sourcestring""Un archivo Markdown que mostrar: una ruta del equipo (.md, .markdown, .txt…), una dirección file:/// o una URL https://. Sus imágenes y enlaces relativos se leen respecto a su carpeta. http:// se rechaza (REASON_INSECURE), igual que todo archivo que no sea texto (REASON_UNSUPPORTED); por encima de 16 MB, REASON_TOO_LARGE. Fijarlo reemplaza el documento (is_markdown se relee entonces vacío); sigue ue_loaded o ue_load_failed
ib_search_enabledbooleantrueCtrl+F en el documento abre un cuadro de búsqueda — la misma búsqueda que of_search: escribir resalta, Intro o F3 siguiente, Mayús+Intro o Mayús+F3 anterior, Esc cierra. false deja el atajo a una aplicación que busca desde su propio cuadro
ib_find_match_casebooleanfalseOpción de búsqueda: solo encuentra el texto con las mismas mayúsculas. El conmutador Aa del cuadro de búsqueda es el mismo interruptor. Leída en directo; of_reset la devuelve a false
ib_find_whole_wordbooleanfalseOpción de búsqueda: solo encuentra el texto como palabra completa (pen no se encuentra dentro de pencil). El conmutador ab del cuadro de búsqueda es el mismo interruptor. Leída en directo; of_reset la devuelve a false
is_theme_stylestring""Estilo visual del componente (constantes THEME_STYLE_*); vacío = el de la aplicación, seguido en cada cambio
is_theme_modestring""Variante clara u oscura (constantes THEME_MODE_*); vacío = la de la aplicación, seguida en cada cambio
il_theme_accentlong-1Color de acento de este componente (-1 = acento de la aplicación, o el del tema)
is_tooltipstring""Tooltip simple mostrado al pasar el ratón por el componente
is_super_tooltip_titlestring""Título del tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto del tooltip enriquecido (se acepta el marcado enriquecido)
is_super_tooltip_imagestring""Imagen del tooltip enriquecido

Métodos #

MétodoDescripción
of_clear ( ) → longVacía la vista: is_markdown e is_source se releen vacíos; ib_search_enabled y las opciones de búsqueda conservan su valor (es of_reset quien devuelve cada propiedad). Devuelve 0, -2 si el componente no está creado
of_refresh ( ) → longVuelve a leer is_source (del disco o de la red): la manera de mostrar un archivo reescrito en la misma ruta; sigue ue_loaded o ue_load_failed. Devuelve 0, -5 si no se muestra ningún documento, -2 si el componente no está creado
of_search ( string as_query ) → longResalta cada aparición (sin mayúsculas por defecto — ver ib_find_match_case —, como palabra completa con ib_find_whole_word) y salta a la primera; una aparición puede atravesar una negrita o un enlace. ue_search_result dice cuántas. Una búsqueda vacía es of_clear_search. El cuadro de búsqueda se abre con la búsqueda dentro; con ib_search_enabled a false, el documento solo resalta. Devuelve 0, -2 si el componente no está creado
of_search_next ( ) → longPasa a la aparición SIGUIENTE (vuelve a la primera tras la última); ue_search_result da la nueva posición. Devuelve 0, -2 si el componente no está creado
of_search_prev ( ) → longPasa a la aparición ANTERIOR (vuelve a la última antes de la primera); ue_search_result da la nueva posición. Devuelve 0, -2 si el componente no está creado
of_clear_search ( ) → longBorra la búsqueda: ni resaltado ni aparición actual (of_match_count devuelve 0), el cuadro de búsqueda se cierra. Devuelve 0, -2 si el componente no está creado
of_match_count ( ) → longDevuelve el número de apariciones de la búsqueda actual, leído EN DIRECTO — el 12 de una barra de estado 3 / 12. 0 sin búsqueda
of_match_index ( ) → longDevuelve la posición (desde 1) de la aparición actual, leída EN DIRECTO — el 3 de una barra de estado 3 / 12. 0 sin aparición
of_toc ( ref string as_titles[], ref long al_levels[], ref string as_anchors[] ) → longLa tabla de contenidos, leída EN DIRECTO: una entrada por título, en orden — su texto, su nivel (de 1 a 6) y su ancla (lo que toman of_scroll_to y un enlace #ancla, al estilo de GitHub: «Release checklist» da release-checklist). Las matrices se vacían primero. Devuelve el número de títulos, 0 para un documento sin títulos
of_scroll_to ( string as_anchor ) → longLleva el título as_anchor a lo alto de la vista: su ancla tal como la da of_toc, con o sin #, o su texto. Devuelve 0, -5 si ningún título coincide, -2 si el componente no está creado

Eventos #

EventoCuándo
ue_link_clicked (string as_url)El usuario ha seguido un enlace (un clic, o Intro en un enlace con el foco). El componente NO navega: abra as_url donde quiera. Un enlace relativo de un archivo mostrado por is_source llega resuelto respecto a su carpeta; un enlace #título se desplaza solo y no se lanza; un enlace javascript: o data: ni siquiera es clicable
ue_loaded (string as_source)El documento está en pantalla: as_source es is_source tal como lo escribió, o una cadena vacía para un texto fijado por is_markdown
ue_load_failed (string as_source, string as_reason)is_source no se pudo mostrar: as_reason es una de las constantes REASON_* — REASON_NOT_FOUND (no existe el archivo), REASON_TOO_LARGE (más de 16 MB), REASON_INSECURE (http://), REASON_UNSUPPORTED (no es un archivo de texto, u otro protocolo), REASON_FAILED (un error de lectura o de red). ue_loaded no se lanza
ue_search_result (long al_count, long al_index)Una búsqueda ha empezado o avanzado: al_count apariciones en total, la actual es al_index (desde 1, 0 si ninguna) — lo necesario para «3 / 12»

Ejemplo #

Una ayuda en línea que abre sus enlaces #

// ue_link_clicked of uo_md : the viewer never navigates, the application decides
if Lower(Right(as_url, 3)) = ".md" and FileExists(as_url) then
	uo_md.is_source = as_url                        // another page of the help
else
	ShellExecuteW(0, "open", as_url, "", "", 1)     // a web page, a mail
end if

Editar Markdown: un codeeditor y un markdownview #

// The editor colours Markdown ; the viewer shows the page
uo_editor.is_syntax = u_pbt_codeeditor.SYNTAX_MARKDOWN
uo_editor.is_text = ls_notes
uo_md.is_markdown = ls_notes

// ue_changed of uo_editor : the whole recipe
uo_md.is_markdown = uo_editor.is_text

Una tabla de contenidos en una lista #

// Local variables
string ls_titles[], ls_anchors[]
long ll_levels[], ll_i

// One line per heading, indented by its level
for ll_i = 1 to uo_md.of_toc(/*titles*/ ls_titles, /*levels*/ ll_levels, /*anchors*/ ls_anchors)
	lb_toc.AddItem(Fill(" ", (ll_levels[ll_i] - 1) * 3) + ls_titles[ll_i])
next

// SelectionChanged of lb_toc : bring that heading to the top
uo_md.of_scroll_to(/*anchor*/ ls_anchors[index])

Buenas prácticas #


Heredado de la base común #

Estos miembros existen en todos los componentes visuales — no son propios de este. Se detallan una sola vez, en los capítulos transversales; esta tabla solo dice dónde leerlos.

MiembrosFunciónDetallado en
of_resetPoner el componente a cero3.6 Poner un componente a cero: of_reset()
of_register_shortcut · of_clear_shortcutsAtajos de teclado del componente3.5 Los atajos de teclado
of_is_created · of_is_ready · of_get_last_errorSi ha nacido, si está listo, qué ha fallado3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar el render como imagen3.8 Exportar la representación como imagen
of_set_redrawAgrupar los cambios en un solo repintado3.10 Buenas prácticas
of_preload_iconsIconos mostrados sin retardoVisualización instantánea: of_icon
of_set_translationTraducir una etiqueta del componente5.2 Adaptar una etiqueta: of_set_translation
of_focus_webviewDar el foco al componente6.4 Teclado y foco
of_print · of_print_to_pdfImprimir, o escribir un PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar una propiedad por su nombre3.1 El motor de propiedades

← Referencia de componentes · Índice de la guía