markdownview mostra un documento Markdown in sola lettura, con i colori del tema: titoli, elenchi, tabelle, elenchi di attività, codice colorato, immagini. Si imposta il testo in is_markdown, o il percorso di un file in is_source; un link non naviga mai, solleva ue_link_clicked e decide l'applicazione. L'HTML grezzo di un documento non viene mai eseguito.
▶ Vederlo dal vivo — Applicazione dimostrativa, tessera Markdown viewer, con il codice e questa pagina fianco a fianco.
// 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
Il testo Markdown da mostrare. Impostarlo sostituisce il documento (is_source si rilegge allora vuoto); vuoto svuota la vista. L'HTML grezzo che contiene è mostrato come testo, mai eseguito. Si rilegge così come è stato impostato
is_source
string
""
Un file Markdown da mostrare: un percorso della postazione (.md, .markdown, .txt…), un indirizzo file:/// o un URL https://. Le sue immagini e i suoi link relativi si leggono rispetto alla sua cartella. http:// è rifiutato (REASON_INSECURE), come ogni file che non è testo (REASON_UNSUPPORTED); oltre 16 MB, REASON_TOO_LARGE. Impostarlo sostituisce il documento (is_markdown si rilegge allora vuoto); segue ue_loaded o ue_load_failed
ib_search_enabled
boolean
true
Ctrl+F nel documento apre una casella di ricerca — la stessa ricerca di of_search: digitare evidenzia, Invio o F3 successivo, Maiusc+Invio o Maiusc+F3 precedente, Esc chiude. false lascia la scorciatoia a un'applicazione che cerca dalla propria casella
ib_find_match_case
boolean
false
Opzione di ricerca: trova solo il testo con le stesse maiuscole. L'interruttore Aa della casella di ricerca è lo stesso. Riletta in diretta; of_reset la rimette a false
ib_find_whole_word
boolean
false
Opzione di ricerca: trova il testo solo come parola intera (pen non è trovato dentro pencil). L'interruttore ab della casella di ricerca è lo stesso. Riletta in diretta; of_reset la rimette a false
is_theme_style
string
""
Stile visivo del componente (costanti THEME_STYLE_*); vuoto = quello dell'applicazione, seguito a ogni cambio
is_theme_mode
string
""
Variante chiara o scura (costanti THEME_MODE_*); vuoto = quella dell'applicazione, seguita a ogni cambio
il_theme_accent
long
-1
Colore d'accento di questo componente (-1 = accento dell'applicazione, o quello del tema)
is_tooltip
string
""
Tooltip semplice mostrato al passaggio del mouse sul componente
is_super_tooltip_title
string
""
Titolo del tooltip avanzato (prevale su is_tooltip)
is_super_tooltip_text
string
""
Testo del tooltip avanzato (markup avanzato accettato)
Svuota la vista: is_markdown e is_source si rileggono vuoti; ib_search_enabled e le opzioni di ricerca mantengono il loro valore (è of_reset che rimette ogni proprietà). Restituisce 0, -2 se il componente non è creato
of_refresh ( ) → long
Rilegge is_source (dal disco o dalla rete): il modo per mostrare un file riscritto allo stesso percorso; segue ue_loaded o ue_load_failed. Restituisce 0, -5 se nessun documento è mostrato, -2 se il componente non è creato
of_search ( string as_query ) → long
Evidenzia ogni occorrenza (senza maiuscole per impostazione predefinita — vedere ib_find_match_case —, come parola intera con ib_find_whole_word) e salta alla prima; un'occorrenza può attraversare un grassetto o un link. ue_search_result dice quante. Una ricerca vuota è of_clear_search. La casella di ricerca si apre con la ricerca dentro; con ib_search_enabled a false, il documento evidenzia soltanto. Restituisce 0, -2 se il componente non è creato
of_search_next ( ) → long
Passa all'occorrenza SUCCESSIVA (torna alla prima dopo l'ultima); ue_search_result dà la nuova posizione. Restituisce 0, -2 se il componente non è creato
of_search_prev ( ) → long
Passa all'occorrenza PRECEDENTE (torna all'ultima prima della prima); ue_search_result dà la nuova posizione. Restituisce 0, -2 se il componente non è creato
of_clear_search ( ) → long
Cancella la ricerca: niente più evidenziazione né occorrenza corrente (of_match_count restituisce 0), la casella di ricerca si chiude. Restituisce 0, -2 se il componente non è creato
of_match_count ( ) → long
Restituisce il numero di occorrenze della ricerca corrente, letto IN DIRETTA — il 12 di una barra di stato 3 / 12. 0 senza ricerca
of_match_index ( ) → long
Restituisce la posizione (a partire da 1) dell'occorrenza corrente, letta IN DIRETTA — il 3 di una barra di stato 3 / 12. 0 senza occorrenza
of_toc ( ref string as_titles[], ref long al_levels[], ref string as_anchors[] ) → long
L'indice, letto IN DIRETTA: una voce per titolo, in ordine — il suo testo, il suo livello (da 1 a 6) e la sua ancora (ciò che prendono of_scroll_to e un link #ancora, alla maniera di GitHub: «Release checklist» dà release-checklist). Gli array sono svuotati prima. Restituisce il numero di titoli, 0 per un documento senza titoli
of_scroll_to ( string as_anchor ) → long
Porta il titolo as_anchor in cima alla vista: la sua ancora come la dà of_toc, con o senza #, o il suo testo. Restituisce 0, -5 se nessun titolo corrisponde, -2 se il componente non è creato
L'utente ha seguito un link (un clic, o Invio su un link che ha il focus). Il componente NON naviga: aprite as_url dove volete. Un link relativo di un file mostrato da is_source arriva risolto rispetto alla sua cartella; un link #titolo scorre da solo e non è sollevato; un link javascript: o data: non è nemmeno cliccabile
ue_loaded (string as_source)
Il documento è sullo schermo: as_source è is_source come lo avete scritto, o una stringa vuota per un testo impostato da is_markdown
is_source non ha potuto essere mostrato: as_reason è una delle costanti REASON_* — REASON_NOT_FOUND (nessun file), REASON_TOO_LARGE (oltre 16 MB), REASON_INSECURE (http://), REASON_UNSUPPORTED (non un file di testo, o un altro protocollo), REASON_FAILED (un errore di lettura o di rete). ue_loaded non è sollevato
ue_search_result (long al_count, long al_index)
Una ricerca è partita o è avanzata: al_count occorrenze in tutto, la corrente è al_index (a partire da 1, 0 se nessuna) — quanto basta per «3 / 12»
// 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
Modificare Markdown: un codeeditor e 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
// 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])
È un lettore, non un editor: per scrivere Markdown, mettete accanto un codeeditor in SYNTAX_MARKDOWN, collegato da una riga nel suo ue_changed (vedere l'esempio).
I link sono vostri: niente si apre da solo; ue_link_clicked dà l'indirizzo, già risolto rispetto alla cartella del file, e scegliete voi — il browser, un altro documento nello stesso componente, una schermata dell'applicazione.
Un documento non esegue nulla: l'HTML grezzo è mostrato come scritto, un link javascript: resta testo, un'immagine http:// è rifiutata — un documento venuto da fuori si mostra senza rischi.
Le immagini: un percorso relativo si legge rispetto alla cartella del file; per un'immagine del Web, preferite https://, o scaricatela prima (restclient.of_download) e date il suo percorso.
Un documento grande resta fluido: i primi blocchi compaiono subito, il resto negli istanti seguenti; la ricerca, of_scroll_to e la stampa aspettano che sia completo.
Da destra a sinistra: il documento segue il verso dell'applicazione (elenchi, citazioni e tabelle si capovolgono), un blocco di codice resta da sinistra a destra.
Questi membri esistono su tutti i componenti visivi — non sono propri di questo. Sono descritti una sola volta, nei capitoli trasversali; questa tabella dice solo dove leggerli.