Public Function HtmlCodeIndenter(code)
' version beta :
'by patricktoulon
Dim I&, elem As Object, t, x&, Elements As Object, Nod As Object, pre As Object, Saut
With CreateObject("htmlfile")
.body.innerhtml = code:
For Each elem In .all: elem.setattribute "indent", 0: Next:
.body.setattribute "indent", 0
Set Elements = .getelementsbytagname("*")
For Each elem In Elements
If I > 1 Then elem.setattribute "indent", Val(elem.parentelement.getattribute("indent")) + 1
I = I + 1
Next
For Each elem In .body.all
If elem.ChildNodes.Length > 1 Then
For Each Nod In elem.ChildNodes
If Nod.NodeType = 3 Then
Set pre = .createelement("PRE"): pre.innerhtml = Replace(Nod.NodeValue, " ", " ")
pre.setattribute "indent", elem.getattribute("indent") + 1
elem.replacechild pre, Nod
End If
Next
End If
Next
Set Elements = .body.getelementsbytagname("*")
For I = 0 To Elements.Length - 1
If Elements(I).all.Length > 1 Or Elements(I).LastChild.NodeType = 1 Then
Set Saut = .createtextnode("| indent=""" & Elements(I).getattribute("indent") & """")
Elements(I).appendchild (Saut)
End If
Next
code = Replace(.body.innerhtml, "><", ">" & vbCrLf & "<")
End With
code = Replace(Replace(code, "|", vbCrLf), vbCrLf & vbCrLf, vbCrLf)
t = Split(code, vbCrLf)
For I = 0 To UBound(t)
If InStr(1, t(I), "indent=") > 0 Then
x = Val(Trim(Split(t(I), "indent=""")(1)))
If Trim(t(I)) <> "" Then t(I) = String(x - 2, vbTab) & t(I)
End If
Next
code = Join(t, vbCrLf)
I = 0
Do While InStr(code, "indent=") > 0
I = I + 1: code = Replace(code, " indent=" & Chr(34) & I & Chr(34), "")
Loop
code = Replace(Replace(code, "<PRE>", ""), "</PRE>", "")
Do While InStr(code, vbCrLf & vbCrLf) > 0: code = Replace(code, vbCrLf & vbCrLf, vbCrLf): Loop
'If Visual.SmallIndent Then code = Replace(code, vbTab, " ")
HtmlCodeIndenter = code
'Debug.Print code
End Function