IMHO Instant Blogger è stato realizzato cercando di conferirgli la massima estensibilità, per consentire ai "volonterosi" di customizzare il funzionamento del software e di aggiungere nuove funzionalità. Oltre ai pluggable engine, che consentono la comunicazione con qualsiasi sistema di weblogging, nella versione #1787 sono stati introdotti i Formatters.

Le potenzialità dei formatters è ampiamente dimostrata dal Code Snippet Editor, ma dando uno sguardo ravvicinato al funzionamento di un formatter è evidente che le possibilità offerte da questa tecnica sono innumerevoli. Creare un formatter è un'operazione accessibile a chiunque disponga di un compilatore .NET qualsiasi e comporta semplicemente l'estensione di una classe astratta e l'assegnazione di un attributo all'assembly.

Chi desiderasse cimentarsi in questa attività deve innanzitutto reperire gli assembly Elite.IMHO.Data.dll e Elite.IMHO.Formatters.dll, che contengono tutto ciò che è necessario per la comunicazione con IMHO e l'implementazione dei formatters. In particolare la prima cosa da fare è estendere la classe Elite.IMHO.Formatters.Formatter, riportata nel riquadro:

//////////////////////////////////////////////////////////////////////////////
//
// File: Elite.IMHO.Formatters.cs
// 

using System;
using System.Windows.Forms;

using Elite.IMHO.Formatters;
using Elite.IMHO.Data.Extension;

namespace Elite.IMHO.Formatters
{
    
// Rappresenta un plugin di tipo formatter
    
public abstract class Formatter : Plugin
    {
        
// costruttore
        
public Formatter()
        {
        }

        
// formatta l'oggetto fornito in input
        
public abstract object Format( object inputData );
        
// formato dei dati in input
        
public abstract string InputDataFormat { get; }
        
// formato dei dati in output
        
public abstract string OutputDataFormat { get; }
    }
}

//////////////////////////////////////////////////////////////////////////////
//
// File: Elite.IMHO.Data.Extension.cs
//

using System;
using System.Collections;

namespace Elite.IMHO.Data.Extension
{
    
// Rappresenta un plugin di IMHO
    
public abstract class Plugin
    {
        
// Nome del plugin
        
public abstract string Name { get; }
        
// Autore del plugin
        
public abstract string Author { get; }
        
// Guid univoco del plugin
        
public abstract Guid PluginGuid { get; }
        
// configura il plugin
        
public abstract void Configure();
        
// Dati di configurazione
        
public abstract Hashtable ConfigurationData { getset; }
        
// Informa il runtime se il plugin ha una configurazione
        
public abstract bool HasConfiguration { get; }
    }
}

Occorre tenere presente che questa classe estende a sua volta Elite.IMHO.Data.Extension.Plugin (anch'essa riportata nel riquadro), quindi sarà necessario implementare anche alcuni metodi e proprietà ereditate da essa. Nella scrittura del codice sono degni di particolare rilievo i metodi Configure() e Format(), responsabili rispettivamente della configurazione del plugin e della formattazione vera e propria del testo. Le altre proprietà sono autoesplicative e riguardano molto la determinazione delle caratteristiche del plugin, per la visualizzazione nell'interfaccia e per la comunicazione con esso.

Per formattare un testo occorre definire nella proprietà InputDataFormat e OutputDataFormat, rispettivamente il formato con cui il plugin si attende che gli vengano forniti i dati e quello che restituisce. Per assegnare queste proprietà si possono usare le costanti definite nella classe System.Windows.Forms.DataFormats, relativa la ClipBoard. I dati saranno cosìforniti al metodo format sotto forma di object e da esso dovranno essere restituiti dopo la formattazione.

Il medoto Configure() dal canto suo si aspetta di trovare nella proprietà ConfigurationData una Hashtable che contiene le coppie nome-valore che rappresentano la configurazione del plugin. Questo metodo viene chiamato esclusivamente se la proprietà HasConfiguration restituisce true.

Una volta che il plugin è completo, l'installazione comporta la creazione di una cartella nella directory formatters. In tale cartella verranno depositati gli assembly e i file che compongono il plugin, ad esclusione degli eventuali assembly satellite che invece dovranno essere installati nella apposita cartella nella root dell'installazione.

Ho in mente svariati tipi di formatters e probabilmente da qui a pochi giorni potrò rilasciarne qualcuno (non prima di aver risolto la gestione delle immagini). I formatters comunque sono un buon punto di partenza per integrare IMHO con altre applicazioni. Ad esempio si potrebbe creare un plugin che si connetta ad una base dati dalla quale prelevare informazioni da postare in un weblog di un portale.

Ma forse sto sognando ad occhi aperti...

powered by IMHO