Windows Live Writer Beta 2 e SyntaxColor4Writer v0.23

In passato ho avuto modo di segnalarvi il buon SyntaxColor4Writer, un plugin per WLW utile per colorare il codice sorgente delle vostre applicazioni/script all'interno dei messaggi con il supporto per svariati linguaggi di programmazione. Questa mattina, installando l'ultima versione di WLW anche sul portatile, ho scoperto che purtroppo questo plugin non risulta più compatibile (al contrario di altri plugin che invece continuano ad andare tranquillamente) per cui sono andato a vedere se per caso sul sito ufficiale fosse disponibile qualche aggiornamento, constatando però che l'ultima versione risale ancora al 12/11/2006. I problemi fondamentalmente sono due:

  • SC4W referenzia gli assembly di WLW esplicitandone la versione, questo comporta il fallimento nel caricamento degli stessi con l'eccezione "The located assembly's manifest definition does not match the assembly reference", infatti la loro versione è cambiata da 1.0.1.6 a 12.0.1183.516
  • Un componente dell'interfaccia, per la precisione la classe SectionHeaderControl, è stato spostato di assembly passando da WindowsLive.Writer.Controls.dll a WindowsLive.Writer.ApplicationFramework.dll

Scartando a priori l'idea di fare a meno di questo plugin, soprattutto dopo aver investito alcune ore mesi fa per creare delle regole decenti per la sintassi di Ruby, ho pensato di porre rimedio a questa rogna pur non avendo il codice sorgente dal momento che l'autore non lo ha pubblicato. Per raggiungere lo scopo bastano l'ultima versione di SC4W (la 0.23), un disassemblatore e un assemblatore di IL come ILDASM e ILASM e un editor di testo come SciTE (tra l'altro, non avendo ILDASM a portata di mano, mi è toccato accendere il computer in ufficio e lavorare su lì in remoto).

Prima di tutto bisogna decompilare l'assembly IStaySharp.SyntaxColor4Writer.dll per ottenere il codice IL. Per farlo con ILDASM basta lanciare l'applicativo, caricare la DLL stessa e poi, premendo CTRL+D, effettuarne il dump assicurandosi che tutte le opzioni siano spuntate. Il dump consiste in un file IL, che chiameremo IStaySharp.SyntaxColor4Writer.il, accompagnato da più file (risorse e altro), per cui il consiglio è di effettuarlo in una directory per conto suo.

Una volta effettuato il dump, occorre caricare il file IStaySharp.SyntaxColor4Writer.il nel proprio editor di testo preferito per cominciare le modifiche. Per iniziare è necessario cambiare le versioni degli assembly di WLW che differiscono, modificando quindi .ver 1:0:1:6 in .ver 12:0:1183:516 come da esempio (il codice riportato inizia intorno alla riga 1533 del file sorgente):

PRIMA DELLA MODIFICA

.assembly extern /*23000005*/ WindowsLive.Writer.ApplicationFramework { .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) // 1.8V.6N5 .ver 1:0:1:6 } .assembly extern /*23000006*/ WindowsLive.Writer.Controls { .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) // 1.8V.6N5 .ver 1:0:1:6 } // NB: qui in mezzo ci sono gli import di ActiproSoftware.CodeHighlighter.Net20, // System.Drawing e System che però ignoriamo .assembly extern /*2300000A*/ WindowsLive.Writer.PostEditor { .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) // 1.8V.6N5 .ver 1:0:1:6 } .assembly extern /*2300000B*/ WindowsLive.Writer.CoreServices { .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) // 1.8V.6N5 .ver 1:0:1:6 }

DOPO LA MODIFICA

.assembly extern /*23000005*/ WindowsLive.Writer.ApplicationFramework { .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) // 1.8V.6N5 .ver 12:0:1183:516 } .assembly extern /*23000006*/ WindowsLive.Writer.Controls { .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) // 1.8V.6N5 .ver 12:0:1183:516 } // NB: qui in mezzo ci sono gli import di ActiproSoftware.CodeHighlighter.Net20, // System.Drawing e System che però ignoriamo .assembly extern /*2300000A*/ WindowsLive.Writer.PostEditor { .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) // 1.8V.6N5 .ver 12:0:1183:516 } .assembly extern /*2300000B*/ WindowsLive.Writer.CoreServices { .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) // 1.8V.6N5 .ver 12:0:1183:516 }

A questo punto occorre modificare l'assembly e il namespace in cui viene cercata la classe SectionHeaderControl e per fare ciò basta un banale search & replace per sostituire:

[WindowsLive.Writer.Controls/*23000006*/]WindowsLive.Writer.Controls.SectionHeaderControl

con la seguente stringa (fate attenzione che sia su una riga sola, può essere che la formattazione nel blog la visualizzi su due righe anche se non è così):

[WindowsLive.Writer.ApplicationFramework/*23000005*/]WindowsLive.Writer.ApplicationFramework.SectionHeaderControl

Concluse queste operazioni occorre salvare le modifiche apportate al file sorgente ed effettuare la compilazione. Utilizzando ILASM basta lanciare la seguente riga di comando all'interno della directory in cui abbiamo il file .il e tutti i file accessori e di risorse:

ilasm IStaySharp.SyntaxColor4Writer.il /dll /res:IStaySharp.SyntaxColor4Writer.res

Con questo comando ILASM produrrà una nuova DLL chiamata IStaySharp.SyntaxColor4Writer.dll includendo automaticamente tutte le risorse necessarie che sono contenute nella directory. Ora non resta altro da fare che che sostituire la DLL da noi compilata con quella originale e lanciare WLW: all'interno del box Insert figurerà la voce Insert code e potremo nuovamente colorare il nostro codice usando SC4W.

Se a qualcuno dovesse interessare la versione modificata già ricompilata mi faccia sapere, anche perché in questo caso vorrei prima avvertire l'autore originale del plugin.


Puoi scrivere un commento oppure inviare un trackback dal tuo sito.

1 commento a “Windows Live Writer Beta 2 e SyntaxColor4Writer v0.23”

  1. Windows Update, Windows Live Writer e SyntaxColor4Writer

    Primo post del 2008 all’alba del tredicesimo giorno di gennaio, complimenti a me stesso per la tempestività. Insomma, anche se con un ritardo madornale vorrei augurarvi un buon 2008… per lo meno ora sapete che non ho fatto la fine del ...

Lascia un commento

Puoi utilizzare i seguenti tag XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>