Advertisement
AZJIO

validateHTML

Jun 23rd, 2019
1,045
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 4.47 KB | None | 0 0
  1. #region ;**** Directives created by AutoIt3Wrapper_GUI ****
  2. #AutoIt3Wrapper_OutFile=validateHTML.exe
  3. #AutoIt3Wrapper_UseX64=n
  4. #AutoIt3Wrapper_UseUpx=n
  5. ; #AutoIt3Wrapper_Compression=4
  6. #AutoIt3Wrapper_Res_Comment=-
  7. #AutoIt3Wrapper_Res_Description=validateHTML.exe
  8. #AutoIt3Wrapper_Res_Fileversion=0.1.0.0
  9. #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=n
  10. #AutoIt3Wrapper_Res_LegalCopyright=AZJIO
  11. #AutoIt3Wrapper_Res_Language=1033
  12. #AutoIt3Wrapper_Run_AU3Check=n
  13. #AutoIt3Wrapper_Res_Field=Version|0.1
  14. #AutoIt3Wrapper_Res_Field=Build|2019.06.23
  15. #AutoIt3Wrapper_Res_Field=Coded by|AZJIO
  16. #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
  17. #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
  18. #AutoIt3Wrapper_Run_Obfuscator=y
  19. #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
  20. #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
  21. #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
  22.  
  23. ; AZJIO
  24. Local $LngDn, $LngMB1, $LngWrn
  25. Local $hFile, $sFileList, $sText
  26.  
  27. ; En
  28. $LngWrn = 'Warning'
  29. $LngMB1 = 'Are you sure you want to check for errors in the HTML files in the folder?'
  30. $LngDn = 'Done!'
  31.  
  32. ; Ru
  33. ; если русская локализация, то русский язык
  34. If @OSLang = 0419 Then
  35.     $LngWrn = 'Предупреждение'
  36.     $LngMB1 = 'Вы действительно хотите проверить ошибки в HTML-файлах, находящиеся в папке?'
  37.     $LngDn = 'Готово! Результат в буфере обмена.'
  38. EndIf
  39.  
  40. If MsgBox(4 + 48, $LngWrn, $LngMB1) = 7 Then Exit
  41.  
  42. #include <FileOperations.au3>
  43. $sPath = @ScriptDir & '\html' ; Папка поиска
  44. $Len = StringLen($sPath & '\') ; Чтобы возврат относительных путей
  45. $sFileList = _FO_FileSearch($sPath, '*.htm*')
  46.  
  47. $sOutText = ''
  48. For $i = 1 To $sFileList[0]
  49.     $sText = FileRead($sFileList[$i])
  50.     $sText = StringRegExpReplace($sText, "<\w+\h[^<>]+?\h/>", "") ; удаление одинарных закрытых тегов типа <br /> или <img src='...' /> чтобы не получать их в результаты
  51.     $sText = _CountingTegsHTML($sText)
  52.     If Not @error And $sText Then
  53.         $sOutText &= StringTrimLeft($sFileList[$i], $Len) & @CRLF & $sText & @CRLF & @CRLF ; сосставляем лог для результата в буфер обмена
  54.     EndIf
  55. Next
  56. MsgBox(0, '', $LngDn)
  57. ClipPut($sOutText)
  58.  
  59. ; ============================================================================================
  60. ; Имя функции ...: _CountingTegsHTML
  61. ; Описание ........: Валидация тегов HTML. Побсчитывает открывающие и закрывающие теги и выводит разницу
  62. ; Синтаксис.......: _CountingTegsHTML ( $sText )
  63. ; Параметры:
  64. ;       $sText - текст HTML
  65. ; Возвращаемое значение: Успешно - Возвращает строку
  66. ;                   Неудачно -'', @error:
  67. ;                  |0 - нет ошибок
  68. ;                  |1 - один из массивов пуст
  69. ; Автор ..........: AZJIO
  70. ; Примечания ..: Учитывает регистр String <> StRiNg <> STRING
  71. ; ============================================================================================
  72. Func _CountingTegsHTML($sText)
  73.     Local $i, $aTegs, $oSD, $sOutText
  74.     $aTegsStart = StringRegExp($sText, '<(\w+)(?:\h[^<>]+)?>', 3)
  75.     $aTegsEnd = StringRegExp($sText, '</(\w+)>', 3)
  76.     If UBound($aTegsStart) = 0 Or UBound($aTegsEnd) = 0 Then Return SetError(1, 0, '')
  77.  
  78.     $oSD = ObjCreate("Scripting.Dictionary")
  79.     $oSD.CompareMode = 1 ; с учётом регистра
  80.     For $i In $aTegsStart
  81.         $oSD.Item($i) = $oSD.Item($i) + 1 ; подсчитываем число открывающих тегов увеличивая на 1
  82.     Next
  83.     For $i In $aTegsEnd
  84.         $oSD.Item($i) = $oSD.Item($i) - 1 ; минусуем число закрывающими тегами уменьшая на 1
  85.     Next
  86.     $aTegs = $oSD.Keys() ; получаем имена ключей в массив
  87.     $sOutText = ''
  88.     ; Теги для игнора, потому что им не нужен закрывающий
  89.     $oSD.Item('br') = 0
  90.     $oSD.Item('meta') = 0
  91.     $oSD.Item('link') = 0
  92.     $oSD.Item('hr') = 0
  93.     $oSD.Item('img') = 0
  94.  
  95.     For $i In $aTegs
  96.         If $oSD.Item($i) = 0 Then ContinueLoop
  97.         $sOutText &= $oSD.Item($i) & @TAB & $i & @CRLF
  98.     Next
  99.     ; If $k = 0 Then Return SetError(2, 0, '')
  100.     Return SetError(0, 0, $sOutText)
  101. EndFunc   ;==>_CountingStringUnique
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement