Option Explicit '=============================================================================== 'Contexte : slc66.net - Outils '=============================================================================== 'Nom du fichier : IndenterHTML.vbs ' 'Auteur : stephane.lecaer@slc66.net ' 'Version : 1.0 08/03/2006 Version initiale ' '------------------------------------------------------------------------------- 'Description : ' Indenter un fichier HTML. ' ' Refait l'indentation du fichier HTML dont le nom est passé en paramètre ' en s'appuyant sur les balises : ' <head>,<body>,<table>,<tr> et <td> ' 'Utilisation : ' IndenterHTML.vbs <nom_du_fichier> ' '=============================================================================== '=============================================================================== 'Déclaration des constantes '=============================================================================== Const K_FSO_FOR_READING = 1 'FSO Mode ouverture fichier Const K_FSO_FOR_WRITING = 2 Const K_FSO_FOR_APPENDING = 3 Const K_FSO_FORMAT_DEFAULT = -2 'FSO Format fichier texte Const K_FSO_FORMAT_UNICODE = -1 Const K_FSO_FORMAT_ASCII = 0 Const K_FSO_FOLDER_WIN = 0 'FSO Dossiers Spéciaux Const K_FSO_FOLDER_SYS = 1 Const K_FSO_FOLDER_TMP = 2 '=============================================================================== 'Déclaration des variables '=============================================================================== Dim objArgs Dim strFilePath Dim strTmpFilePath Dim strTmpFilename Dim objFSO Dim objTempFolder Dim objFile Dim objTmpFile Dim objTextStream Dim strLine Dim intNbIndent Dim intPhase Dim blnError '=============================================================================== 'DEBUT DU PROGRAMME '=============================================================================== 'Initialisation '-------------- blnError = False 'Lire les arguments de la ligne de commande '------------------------------------------ Set objArgs = WScript.Arguments 'Si un nom de fichier est passé en paramètre '------------------------------------------- If (objArgs.Count >= 1) Then 'Récupérer le nom de fichier à traiter '------------------------------------- strFilePath = objArgs(0) Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject") 'Si le fichier existe '-------------------- If objFSO.FileExists(strFilePath) Then 'Créer un fichier temporaire '--------------------------- Set objFile = objFSO.GetFile(strFilePath) Set objTempFolder = objFSO.GetSpecialFolder(K_FSO_FOLDER_TMP) strTmpFilename = objFSO.GetTempName 'Traiter en 2 passes '------------------- For intPhase = 1 to 2 Select Case intPhase 'Insérer un retour chariot après chaque balise traitée '----------------------------------------------------- Case 1 Set objTextStream = objFile.OpenAsTextStream(K_FSO_FOR_READING, K_FSO_FORMAT_DEFAULT) Set objTmpFile = objTempFolder.CreateTextFile(strTmpFilename) Do While Not objTextStream.AtEndOfStream strLine = objTextStream.ReadLine If (strLine <> "") Then objTmpFile.WriteLine InsertCrLf(strLine) End if Loop objTextStream.Close objTmpFile.Close strTmpFilePath = objTempFolder.Path & "\\" & strTmpFilename objFSO.CopyFile strTmpFilePath, strFilePath objFSO.DeleteFile strTmpFilePath 'Indenter le fichier '------------------- Case 2 Set objTextStream = objFile.OpenAsTextStream(K_FSO_FOR_READING, K_FSO_FORMAT_DEFAULT) Set objTmpFile = objTempFolder.CreateTextFile(strTmpFilename) intNbIndent = 0 Do While Not objTextStream.AtEndOfStream strLine = ReadStreamLine(objTextStream) If (strLine <> "") Then If Not objTextStream.AtEndOfStream Then objTmpFile.WriteLine Indent(intNbIndent, strLine) Else objTmpFile.Write Indent(intNbIndent, strLine) End if End if Loop objTextStream.Close objTmpFile.Close strTmpFilePath = objTempFolder.Path & "\\" & strTmpFilename objFSO.CopyFile strTmpFilePath, strFilePath objFSO.DeleteFile strTmpFilePath End Select Next End If Else 'Afficher l'aide '--------------- WScript.Echo "IndenterHTML.vbs - 1.0 " & vbCrLf & _ "par stephane.lecaer@slc66.net " & vbCrLf & _ " " & vbCrLf & _ " Description : " & vbCrLf & _ " Indenter un fichier HTML. " & vbCrLf & _ " " & vbCrLf & _ " Refait l'indentation du fichier HTML dont le nom est passé en paramètre" & vbCrLf & _ " en s'appuyant sur les balises : " & vbCrLf & _ " <head>,<body>,<table>,<tr> et <td> " & vbCrLf & _ " " & vbCrLf & _ " Utilisation : " & vbCrLf & _ " CompresserLigne.vbs <nom_du_fichier> " & vbCrLf & _ " " blnError = True End If 'Sortir du programme '------------------- If blnError Then WScript.Quit -1 Else WScript.Quit 0 End If '=============================================================================== 'FIN DU PROGRAMME '=============================================================================== '============================================================================== Private Function InsertCrLf(strLine) Dim objRegExp Set objRegExp = New RegExp objRegExp.Global = True objRegExp.Pattern = "<br>" strLine = objRegExp.Replace(strLine, vbCrLf & "<br>") objRegExp.Pattern = "<head" strLine = objRegExp.Replace(strLine, vbCrLf & "<head") objRegExp.Pattern = "<body" strLine = objRegExp.Replace(strLine, vbCrLf & "<body") objRegExp.Pattern = "<table" strLine = objRegExp.Replace(strLine, vbCrLf & "<table") objRegExp.Pattern = "<tbody" strLine = objRegExp.Replace(strLine, vbCrLf & "<tbody") objRegExp.Pattern = "<tr" strLine = objRegExp.Replace(strLine, vbCrLf & "<tr") objRegExp.Pattern = "<td" strLine = objRegExp.Replace(strLine, vbCrLf & "<td") objRegExp.Pattern = "<\/head" strLine = objRegExp.Replace(strLine, vbCrLf & "</head") objRegExp.Pattern = "<\/body" strLine = objRegExp.Replace(strLine, vbCrLf & "</body") objRegExp.Pattern = "<\/table" strLine = objRegExp.Replace(strLine, vbCrLf & "</table") objRegExp.Pattern = "<\/tbody" strLine = objRegExp.Replace(strLine, vbCrLf & "</tbody") objRegExp.Pattern = "<\/tr" strLine = objRegExp.Replace(strLine, vbCrLf & "</tr") objRegExp.Pattern = "<\/td" strLine = objRegExp.Replace(strLine, vbCrLf & "</td") InsertCrLf = strLine End Function '============================================================================== Private Function ReadStreamLine(objStream) Dim strLine Dim objRegExp Set objRegExp = New RegExp Do strLine = objStream.Readline objRegExp.Pattern = "\t" objRegExp.Global = True strLine = Trim(objRegExp.Replace(strLine, " ")) Loop Until (strLine <> "") or objStream.AtEndOfStream ReadStreamLine = strLine End Function '============================================================================== Private Function Indent(intNbIndent, strLine) Dim objRegExpIndent Dim objRegExpUnindent Dim intIndent set objRegExpIndent = New RegExp set objRegExpUnIndent = New RegExp intIndent = intNbIndent objRegExpIndent.Pattern = "<head|<body|<table|<tr|<td" objRegExpIndent.IgnoreCase = True objRegExpIndent.Global = True objRegExpUnindent.Pattern = "<\/head|<\/body|<\/table|<\/tr|<\/td" objRegExpUnindent.IgnoreCase = True objRegExpUnindent.Global = True If objRegExpIndent.Test(strLine) Then intNbIndent = intNbIndent + 1 End if If objRegExpUnindent.Test(strLine) Then intNbIndent = intNbIndent - 1 If (intNbIndent < 0) Then intNbIndent = 0 End if intIndent = intNbIndent End if Indent = String(intIndent, vbTab) & strLine End Function