Search the Community
Showing results for tags 'beautify'.
-
..so I got Notepad++ but was not working with the xml printing plugin, the online beautifiers would no work all the time, and I wanted like Tidy does with tabs so it looks nice in Scite to look at the code and make my own template for a script I'm working on....very frustrating and time consuming, so, I put this code together. I get in a 10th of a sec. the xml prettified vs. minutes and frustration. Anyway, how I use it is I drag and drop the word doc. ( saved in XML format ) to scite , copy to the clipboard ( ctrl-A, ctrl-C ) , switch to this code, press F5 and I'm happy If Not StringInStr($CmdLineRaw, "/ErrorStdOut") And Not @Compiled Then Exit MsgBox( 262144 , @ScriptName, "please run from Editor", 10) Local $s = ClipGet() If Not StringInStr($s, '<?mso-application progid="Word.Document"?>') Then Exit MsgBox(262144, StringTrimRight(@ScriptName, 4), "tested only in Word.Document XML" & @CR & @CR & "no changes made to clipboard", 20) Local $sOut = msWordXML_Beautify($s, 2) ; 2=return as beautified string, 1=ConsoleWrite beautified string, 0=return beautified array ClipPut($sOut) MsgBox(262144, StringTrimRight(@ScriptName, 4), "clipboard content replaced by beautified XML", 2) Func msWordXML_Beautify($s, $iEcho = 0) Local $iTimer = TimerInit() $s = StringReplace($s, @CR, '') $s = StringReplace($s, @LF, '') Local $a = StringSplit($s, "<") Local $b[$a[0] * 2] Local $i = 0, $c = "" For $x = 1 To $a[0] If StringReplace($a[$x], @TAB, "") = "" Then ContinueLoop If StringInStr($a[$x], ">") Then $a[$x] = StringReplace($a[$x], @TAB, '') $c = StringSplit($a[$x], ">") If UBound($c) < 2 Then ContinueLoop For $y = 1 To $c[0] If $y = 1 Then $i += 1 $b[$i] = "<" & $c[$y] & ">" Else If $c[$y] = "" Then ContinueLoop $i += 1 $b[$i] = $c[$y] EndIf Next Next ReDim $b[$i + 1] $b[0] = $i For $x = 3 To $b[0] If Not StringInStr($b[$x - 1], ">") Then $b[$x] = $b[$x - 2] & $b[$x - 1] & $b[$x] $b[$x - 2] = "<>" $b[$x - 1] = "<>" EndIf Next Dim $c[$b[0] + 1] $i = 0 For $x = 1 To $b[0] If $b[$x] = "<>" Then ContinueLoop $i += 1 $c[$i] = $b[$x] Next $b = $c $c = "" ReDim $b[$i + 1] $b[0] = UBound($b) - 1 Local $tabs = "" For $x = 1 To $b[0] $b[$x] = StringStripWS($b[$x], 3) If StringLeft($b[$x], 2) = "<!" Then ContinueLoop If StringLeft($b[$x], 2) = "<?" Then ContinueLoop If StringLeft($b[$x], 1) = "<" And StringRight($b[$x], 2) = "/>" Then $b[$x] = $tabs & $b[$x] ContinueLoop EndIf If StringLeft($b[$x], 2) = "</" And StringRight($b[$x], 1) = ">" Then $tabs = StringTrimRight($tabs, 1) $b[$x] = $tabs & $b[$x] ContinueLoop EndIf If StringLeft($b[$x], 1) = "<" And StringRight($b[$x], 1) = ">" And Not StringInStr($b[$x], '</') Then $b[$x] = $tabs & $b[$x] $tabs &= @TAB ContinueLoop EndIf $b[$x] = $tabs & $b[$x] Next ConsoleWrite('+ msWordXML_Beautify done in about ' & Round(TimerDiff($iTimer), 5) & ' mSec.' & @CRLF) Local $sOut = "" If $iEcho Then For $x = 1 To $b[0] If $iEcho = 1 Then ConsoleWrite( $b[$x] & @CRLF ) Else $sOut &= $b[$x] & @CRLF EndIf Next EndIf If $iEcho = 2 Then Return $sOut Return $b EndFunc ;==>msWordXML_Beautify ..hope it saves time to someone. Edit 1: it works nice with <?mso-application progid="Excel.Sheet"?>, it may just work with any XML, no clue. Edit 2: fixed an error in the code