PBToolboxAI v4 ← Site

markdownview — u_pbt_markdownview #

← Referência dos componentes · Índice do guia

markdownview mostra um documento Markdown só de leitura, com as cores do tema: títulos, listas, tabelas, listas de tarefas, código colorido, imagens. Define o texto em is_markdown, ou o caminho de um ficheiro em is_source; uma ligação nunca navega, levanta ue_link_clicked e é a aplicação que decide. O HTML em bruto de um documento nunca é executado.

▶ Ver ao vivo — Aplicação de demonstração, mosaico Markdown viewer, com o código e esta página lado a lado.


Em resumo #

Userobjectu_pbt_markdownview
EntradaUm texto Markdown (is_markdown), ou um ficheiro do posto ou um URL https:// (is_source)
SintaxeCommonMark, mais as tabelas, as listas de tarefas, o riscado e as ligações soltas do GitHub
Retornoue_link_clicked para uma ligação (a aplicação decide), ue_loaded / ue_load_failed para um ficheiro, ue_search_result para a pesquisa
SegurançaO HTML em bruto é mostrado como texto; uma ligação javascript:, vbscript: ou data: não é clicável; uma imagem http:// é recusada

Início 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

Propriedades #

PropriedadeTipoPredefinidoDescrição
is_markdownstring""O texto Markdown a mostrar. Defini-lo substitui o documento (is_source relê-se então vazio); vazio limpa a vista. O HTML em bruto que contém é mostrado como texto, nunca executado. Relê-se tal como foi definido
is_sourcestring""Um ficheiro Markdown a mostrar: um caminho do posto (.md, .markdown, .txt…), um endereço file:/// ou um URL https://. As suas imagens e ligações relativas leem-se em relação à sua pasta. http:// é recusado (REASON_INSECURE), tal como qualquer ficheiro que não seja texto (REASON_UNSUPPORTED); acima de 16 MB, REASON_TOO_LARGE. Defini-lo substitui o documento (is_markdown relê-se então vazio); segue-se ue_loaded ou ue_load_failed
ib_search_enabledbooleantrueCtrl+F no documento abre uma caixa de pesquisa — a mesma pesquisa que of_search: escrever realça, Enter ou F3 seguinte, Shift+Enter ou Shift+F3 anterior, Esc fecha. false deixa o atalho a uma aplicação que pesquisa a partir da sua própria caixa
ib_find_match_casebooleanfalseOpção de pesquisa: só encontra o texto com as mesmas maiúsculas. O comutador Aa da caixa de pesquisa é o mesmo interruptor. Lida em direto; of_reset repõe-na a false
ib_find_whole_wordbooleanfalseOpção de pesquisa: só encontra o texto como palavra inteira (pen não é encontrado dentro de pencil). O comutador ab da caixa de pesquisa é o mesmo interruptor. Lida em direto; of_reset repõe-na a false
is_theme_stylestring""Estilo visual do componente (constantes THEME_STYLE_*); vazio = o da aplicação, seguido a cada mudança
is_theme_modestring""Variante clara ou escura (constantes THEME_MODE_*); vazio = a da aplicação, seguida a cada mudança
il_theme_accentlong-1Cor de destaque deste componente (-1 = destaque da aplicação, ou o do tema)
is_tooltipstring""Tooltip simples apresentado ao passar sobre o componente
is_super_tooltip_titlestring""Título do tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto do tooltip enriquecido (aceita marcação enriquecida)
is_super_tooltip_imagestring""Imagem do tooltip enriquecido

Métodos #

MétodoDescrição
of_clear ( ) → longLimpa a vista: is_markdown e is_source relêem-se vazios; ib_search_enabled e as opções de pesquisa mantêm o seu valor (é of_reset que repõe cada propriedade). Devolve 0, -2 se o componente não estiver criado
of_refresh ( ) → longVolta a ler is_source (do disco ou da rede): a forma de mostrar um ficheiro reescrito no mesmo caminho; segue-se ue_loaded ou ue_load_failed. Devolve 0, -5 se nenhum documento for mostrado, -2 se o componente não estiver criado
of_search ( string as_query ) → longRealça cada ocorrência (sem maiúsculas por omissão — ver ib_find_match_case —, como palavra inteira com ib_find_whole_word) e salta para a primeira; uma ocorrência pode atravessar um negrito ou uma ligação. ue_search_result diz quantas. Uma pesquisa vazia é of_clear_search. A caixa de pesquisa abre-se com a pesquisa lá dentro; com ib_search_enabled a false, o documento apenas realça. Devolve 0, -2 se o componente não estiver criado
of_search_next ( ) → longPassa à ocorrência SEGUINTE (volta à primeira depois da última); ue_search_result dá a nova posição. Devolve 0, -2 se o componente não estiver criado
of_search_prev ( ) → longPassa à ocorrência ANTERIOR (volta à última antes da primeira); ue_search_result dá a nova posição. Devolve 0, -2 se o componente não estiver criado
of_clear_search ( ) → longApaga a pesquisa: nem realce nem ocorrência atual (of_match_count devolve 0), a caixa de pesquisa fecha-se. Devolve 0, -2 se o componente não estiver criado
of_match_count ( ) → longDevolve o número de ocorrências da pesquisa atual, lido EM DIRETO — o 12 de uma barra de estado 3 / 12. 0 sem pesquisa
of_match_index ( ) → longDevolve a posição (a partir de 1) da ocorrência atual, lida EM DIRETO — o 3 de uma barra de estado 3 / 12. 0 sem ocorrência
of_toc ( ref string as_titles[], ref long al_levels[], ref string as_anchors[] ) → longO índice, lido EM DIRETO: uma entrada por título, por ordem — o seu texto, o seu nível (1 a 6) e a sua âncora (o que of_scroll_to e uma ligação #âncora recebem, à maneira do GitHub: «Release checklist» dá release-checklist). As matrizes são esvaziadas primeiro. Devolve o número de títulos, 0 para um documento sem títulos
of_scroll_to ( string as_anchor ) → longLeva o título as_anchor ao topo da vista: a sua âncora tal como of_toc a dá, com ou sem #, ou o seu texto. Devolve 0, -5 se nenhum título corresponder, -2 se o componente não estiver criado

Eventos #

EventoQuando
ue_link_clicked (string as_url)O utilizador seguiu uma ligação (um clique, ou Enter numa ligação com o foco). O componente NÃO navega: abra as_url onde quiser. Uma ligação relativa de um ficheiro mostrado por is_source chega resolvida em relação à sua pasta; uma ligação #título desloca-se sozinha e não é levantada; uma ligação javascript: ou data: nem sequer é clicável
ue_loaded (string as_source)O documento está no ecrã: as_source é is_source tal como o escreveu, ou uma cadeia vazia para um texto definido por is_markdown
ue_load_failed (string as_source, string as_reason)is_source não pôde ser mostrado: as_reason é uma das constantes REASON_* — REASON_NOT_FOUND (não existe o ficheiro), REASON_TOO_LARGE (mais de 16 MB), REASON_INSECURE (http://), REASON_UNSUPPORTED (não é um ficheiro de texto, ou outro protocolo), REASON_FAILED (um erro de leitura ou de rede). ue_loaded não é levantado
ue_search_result (long al_count, long al_index)Uma pesquisa começou ou avançou: al_count ocorrências no total, a atual é al_index (a partir de 1, 0 se nenhuma) — o necessário para «3 / 12»

Exemplo #

Uma ajuda em linha que abre as suas ligações #

// 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: um codeeditor e um 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

Um índice numa 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])

Boas práticas #


Herdado da base comum #

Estes membros existem em todos os componentes visuais — não são próprios deste. São detalhados uma só vez, nos capítulos transversais; esta tabela apenas diz onde os ler.

MembrosFunçãoDetalhado em
of_resetRepor o componente a zero3.6 Repor um componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsAtalhos de teclado do componente3.5 Os atalhos de teclado
of_is_created · of_is_ready · of_get_last_errorSe nasceu, se está pronto, o que falhou3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar a renderização como imagem3.8 Exportar a representação como imagem
of_set_redrawAgrupar as alterações num único repinte3.10 Boas práticas
of_preload_iconsÍcones mostrados sem atrasoApresentação instantânea: of_icon
of_set_translationTraduzir uma legenda do componente5.2 Adaptar uma etiqueta: of_set_translation
of_focus_webviewDar o foco ao componente6.4 Teclado e focus
of_print · of_print_to_pdfImprimir, ou escrever um PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar uma propriedade pelo nome3.1 O motor de propriedades

← Referência dos componentes · Índice do guia