Integrazione con FrontPage

Microsoft FrontPage (versione 2000 o 2002) supporta Visual Basic for Applications (VBA) che utilizzeremo per integrare la validazione nei menu di sistema così che la semplice attivazione di una voce di menu possa avviare la validazione del nostro documento web.

Ho creato un file in Visual Basic (Validate.bas) che in pratica effettua la chiamata al validatore in VBA. Puoi consultare la guida in section 3.2 che descrive come incorporarlo in FrontPage.

Non commenterò il codice dettagliatamente, se non per accennare il principio fondamentale di funzionamento, per il quale nsgml.exe è richiamato dopo aver salvato in un file temporaneo il documento attivo in FrontPage, e presenta l’output di nsgml in una finestra di dialogo.

'
' Validate.bas - Integrare James Clark's SP in Microsoft FrontPage 2000/2002
'
'

Option Explicit

' Specifica il percorso in cui hai installato NSGML
Const NSGML_PATH = "C:Program FilesValidator"       ' Non dimenticare il backslash

' Specifica il percorso dell'eseguibile SP NSGML...
Const NSGML_PROGRAM_FILE = NSGML_PATH & "nsgmls.exe"

' Specifica il percorso di un file temporaneo...
Const TEMP_INPUT_FILE = NSGML_PATH & "input.tmp"
Const TEMP_OUTPUT_FILE = NSGML_PATH & "output.tmp"

' Specifica i file di input di SP (nsgml.exe)
Const XHTML1_SOC_FILE = NSGML_PATH & "PubtextXHTML.soc"
Const HTML4_SOC_FILE = NSGML_PATH & "PubtextHTML4.soc"'
'

'************************************
' VALIDA_FILE
'
'
' Basato sul codice di by Christoph Schneegans <mailto:Christoph@Schneegans.de>
' See <http://www.suodenjoki.dk/produktioner/artikler/validation/validation.zip>
' Tradotto in italiano da webaccessibile.org

Sub Validate_File()

  Dim bFlipToHTMLSource As Boolean
  bFlipToHTMLSource = False

  If ActivePageWindow Is Nothing Then
    MsgBox "Apri un file nell'editor di FrontPage.", _
    vbOKOnly Or vbCritical
    Exit Sub
  End If

  If Not ActivePageWindow.ViewMode = fpPageViewNormal Then
    bFlipToHTMLSource = True
    ActivePageWindow.ViewMode = fpPageViewNormal
  End If

  Dim doc As FPHTMLDocument
  Set doc = ActivePageWindow.Document

  Dim fs
  Set fs = CreateObject("Scripting.FileSystemObject")

  Dim ts
  Set ts = fs.CreateTextFile(TEMP_INPUT_FILE)

 ' Scrive il documento corrente di FrpntPage in un file temporaneo
  ts.Write doc.DocumentHTML
  ts.Close

  Dim sSocFile ' As String
  Dim sLine ' As String
  Dim nLine ' As Integer

 ' Si assume che si intende validare un file XHTML 1.0
  sSocFile = XHTML1_SOC_FILE

 ' Il codice che segue prova (in prima battuta) a stabilire
  ' quale DTD sia stato specificato nel file di input, così
  '  da poter scegliere quale file SOC accoppiare a nsgml.exe
  Set ts = fs.OpenTextFile(TEMP_INPUT_FILE)
  nLine = 1
  While nLine < 4 And Not ts.AtEndOfStream ' Cerchiamo solo nelle prime 4 linee
    sLine = ts.ReadLine()
    If InStr(sLine, "DTD HTML 4") > 0 Then
      sSocFile = HTML4_SOC_FILE
    End If
    nLine = nLine + 1
  Wend
  ts.Close

  Dim strCmd As String

  ' Costruisce la riga di comando
  strCmd = NSGML_PROGRAM_FILE & " -s" & _
           " -c """ & sSocFile & """" & _
           " -f """ & TEMP_OUTPUT_FILE & """" & _
           " """ & TEMP_INPUT_FILE & """"

  'MsgBox strCmd

 ' Esegue la riga di comando...
  ' Per maggiori informazioni, consulta <http://support.microsoft.com/support/kb/articles/Q129/7/96.asp>
  ExecCmd strCmd

  If bFlipToHTMLSource Then
    ActivePageWindow.ViewMode = fpPageViewHtml
  End If

  Dim es
 'Legge il TEMP_OUTPUT_FILE e ne copia il contenuto nel Form_output
  Set es = fs.OpenTextFile(TEMP_OUTPUT_FILE, 1) ' 1=ForReading
  If es.AtEndOfStream Then
    Dim sOutput
    sOutput = "/documento validato con successo"
    If sSocFile = XHTML1_SOC_FILE Then
      sOutput = sOutput & " come XHTML 1.0"
    Else
      sOutput = sOutput & " come HTML 4.0"
    End If
    sOutput = sOutput & ". Nessun errore riscontrato."
    Form_tidy_output.TextBox_tidy_output.Text = sOutput
  Else
    Form_tidy_output.TextBox_tidy_output.Text = es.ReadAll
  End If
  Form_tidy_output.Caption = "Risultato della validazione"
  Form_tidy_output.Show

  Exit Sub

  ValidationError:
    MsgBox "La validazione non è stata eseguita correttamente. " & _
           "Non è stata apportata nessuna modifica." & Chr(10) & _
           "Error # " & CStr(Err.Number) & " " & Err.Description, _
           vbOKOnly Or vbCritical
End Sub

3.1 Personalizzare il codice VBA

Il codice VBA non può essere usato direttamente, ma necessita di un minimo di personalizzazione, rispetto a dove hai installato SP. Ci sono cinque stringhe da definire come costanti. Se hai installato tutto in una singola cartella, e se questa contiene al suo interno la cartella ‘pubtext’, dovrebbe essere sufficiente la modifica della sola costante NSGML_PATH.

' Specifica il percorso in cui hai installato NSGML
Const NSGML_PATH = "C:Program FilesValidator"       ' Non dimenticare il backslash

' Specifica il percorso dell'eseguibile SP NSGML...
Const NSGML_PROGRAM_FILE = NSGML_PATH & "nsgmls.exe"

' Specifica il percorso di un file temporaneo...
Const TEMP_INPUT_FILE = NSGML_PATH & "input.tmp"
Const TEMP_OUTPUT_FILE = NSGML_PATH & "output.tmp"

' Specifica i file di input di SP (nsgml.exe)
Const XHTML1_SOC_FILE = NSGML_PATH & "PubtextXHTML.soc"
Const HTML4_SOC_FILE = NSGML_PATH & "PubtextHTML4.soc"'

Volendo, puoi aggiungere un ulteriore livello di controllo sugli errori dopo un’esecuzione di ExecCmd. ExecCmd() restituisce il livello di errore riscontrato nel file eseguito. Nel caso di Tidy, “0” significa “OK”, “1” significa “Ci sono degli avvertimenti”, “2” significa “Ci sono errori”. In caso di errori, Tidy non può proseguire. Si potrebbe semplicemente aggiungere qualcosa del tipo:

If ExecCmd(strCmd) > 1 Then
  ...
  Exit Sub
End If

3.2 Personalizzare il menu di FrontPage

Questa sezione mostra come personalizzare il menu di FrontPage inserendo un nuovo menu che preveda la chiamata della funzione VBA. 

Segui i passi:

  1. Apri FrontPage.
  2. Attiva la voce di menu ‘Strumenti|Macro|Visual Basic Editor‘. Si dovrebbe attivare così l’editor VBA di FrontPage.
  3. Fai clic col tasto destro sulla cartella Moduli e seleziona ‘Importa File…‘ ed importa il file ExecuteCmd.bas. Attiva nuovamente l’importazione di file ed importaValidate.bas. Guarda la figura di sotto. Dovresti avere almeno due moduli nella cartella Moduli, uno chiamato ExecuteCmd, l’altro Validate. Se ci dovesse essere un altro modulo vuoto (Modulo1), lo puoi tranquillamente cancellare.

    Figure illustrating the import file feature of VBA.
    » La figura illustra la funzionalità di importazione di VBA.

  4. Importa il file Form_output.frm, che definisce la finestra in cui verrà evidenziato l’output, una volta invocato il programma esterno.
  5. Entra nel modulo Validate e definisci le 5 costanti, come abbiamo appena visto nel paragrafo 3.1 
  6. Chiudi l’editor VBA col comando ‘File|Chiudi‘ o con la combinazione di tasti Alt + Q. Ora sei nuovamente in FrontPage
  7. Seleziona ‘Strumenti|Personalizza‘ per aprire la finestra corrispondente
  8. Seleziona la cartella Comandi, come nella figura di sotto
    The Tools|Customize dialog.
    » Finestra di dialogo Strumenti|Personalizza.
  9. Seleziona la voce Nuovo menu nella casella delle categorie. La casella sulla destra dovrebbe contenere almeno un comando chiamato “Nuovo menu”
  10. Trascina il comando “Nuovo menu” sul menu principale di FrontPage, nella posizione che preferisci, per esempio dopo la voce di menu Format. Questa nuova posizione verrà evidenziata da una barra verticale.
  11. Fai clic col tasto destro sul menu appena inserito; si apre un particolare menu contestuale. 
  12. Il menu di contesto contiene una voce chiamata Nuovo nome che ti permette di specificare un nome per il nuovo menu. Io, per esempio l’ho chiamato “E&xtras”, dove il carattere & precede la lettera che servirà da scorciatoia – e che quindi verrà sottolineata.
  13. Nella finestra di personalizzaizone, scegli l’elemento Macro dalla casella delle categorie. Dovresti ora avere disponibili due nuovi comandi sulla destra; seleziona “Elemento di menu” e trascinalo sul tuo nuovo menu Extras.
  14. Usa di nuovo il tasto destro sul nuovo elemento appena inserito per attivare il menu di contesto, col quale specificherai il nome da dargli, per esempio “&Valida un Documento” .
  15. Sempre a partire dal menu di contesto (che si attiva col tasto destro sull’elemento da modificare) usa il comando “Assegna macro” e seleziona la macro Validate (quella che deriva dal modulo VBA di prima).
  16. Chiudi la finestra di personalizzazione
  17. Tutto dovrebbe essere pronto. Prova a vedere come funziona!

Potrebbero interessarti anche i seguenti articoli

  • Integrazione con FrontPageIntegrazione con FrontPage Microsoft FrontPage, versione 2000 o 2002, hai il supporto di Visual Basic® for Applications che utilizzeremo per integrare HTML Tidy nel menu di sistema. Tramite […]
  • Integrazione validatore XHTML in FrontPageIntegrazione validatore XHTML in FrontPage Questo articolo mostra come migliorare la qualità delle tue pagine HTML/XHTML integrando la funzionalità offline di validazione HTML/XHTML in Microsoft FrontPage, […]
  • Creare codice standard con Microsoft FrontpageCreare codice standard con Microsoft Frontpage Questo articolo descrive come incrementare la qualità delle pagine HTML/XHTML integrando HTML Tidy in Microsoft FrontPage 2000 or 2002 (Office XP). Si tratta di una […]
  • Audio BlogAudio Blog Blogger ha un nuovo servizio che si chiama AudioBlogger. All'apparenza non sembra niente di eccezionale rispetto ad un moblog (la possibilit? di popolare un photo blog […]
  • Il validatoreIl validatore Come già accennato in precedenza, il validatore che useremo è James Clark's SGML Conforming Parser (SP).  Ma cos'è SGML? SGML è l'acronimo di Standard […]
Condividi:

Informazioni sull'autore

Roberto Castaldo
Roberto Castaldo
Sono nato e vivo a Napoli, ed opero professionalmente nel mondo dell'informatica da più di vent'anni. In realtà l'informatica, insieme alla musica e ad altre poche cose, è stato da sempre un mio chiodo fisso, e la buona sorte mi ha aiutato a trasformarlo in un mestiere. Sin dalle mie primissime esperienze lavorative - insegnavo dattilografia ed i primi rudimenti di informatica in una scuola privata - mi sono trovato a mio agio nel settore della formazione e della divulgazione, certamente aiutato dai miei studi classici. Nel 1987 ho iniziato la mia attività come insegnante d'informatica in un Istituto Professionale Statale - per circa due anni sono stato il più giovane insegnante di ruolo d'Italia. Ho avuto svariate esperienze anche nel settore privato come sviluppatore (TPascal - lo ricordate? - VB, ASP e, più di recente VB.NET ed ASP.NET), ma soprattutto come docente e come divulgatore. Ho effettuato attività di formazione presso le più grandi realtà imprenditoriali italiane (IBM, Omnitel, Telecom Italia, TIM, Unicredito, Ekip, BNL, SSGRR), ma anche all'estero in qualità di docente e/o progettista di percorsi formativi; gli argomenti spaziano dal mondo Office fino al multimedia ed alla programmazione avanzata ASP ed ASP.NET. Ho collaborato con l'Istituto Italiano per gli Studi Filosofici di Napoli, ho redatto articoli/tutorial per un'importante rivista informatica (Win98 Magazine), ed ho partecipato allo sviluppo di CD-Rom Multimediali (IBM, Selfin, BNL) curando personalmente la registrazione dei commenti audio ed il montaggio delle musiche (CoolEdit), l'eventuale connessione a database remoti, l'assemblaggio degli elementi testuali, grafici e multimediali (Director 8) fino alla creazione del master definitivo. Negli anni 1998-2000 ho collaborato con la Gazzetta dello Sport Online curando, in occasione dei più importanti avvenimenti sportivi (Mondiali ed Europei di calcio, Giro d'Italia, Campionato di Serie A) le pagine contenenti la traduzione in inglese e francese degli articoli in italiano. Il mio compito consisteva nell'inviare ai miei traduttori la cronaca in italiano, riceverne la traduzione, creare le pagine inglesi e francesi del sito www.gazzetta.it e pubblicarle sul server, il tutto entro 90 minuti dalla fine dell'evento. Nel frattempo, mi avvicinavo in maniera sempre più approfondita alle problematiche legate all'accessibilità di siti web, progettando percorsi di formazione ad hoc, ed aderendo entusiasticamente al progetto webaccessibile.org. Sono stato per diversi mesi membro del XML Protocol Working Group del W3C, ed attualmente partecipo ai lavoro del WAI Web Content Accessibility Guidelines (WCAG) Working Group e del E&O Education ad Outreach Working Group.

Commenti

Nessun commento

    Rispondi

    Link e informazioni