;
; Builds AutoIt3 Editor Syntax files
;

FileChangeDir(@ScriptDir) ; As the build scripts have a habit of changing the working directory.

#Region Includes
#include "include\MiscLib.au3"
#include "include\OutputLib.au3"
#include "include\SettingsLib.au3"
#EndRegion Includes

#Region Global Variables
; The name of the project.
Global Const $g_sProjectLang = "english"
Global Const $g_sProject = "syntaxfiles"
Global Const $g_sProjectDir = "docs\autoit\" & $g_sProjectLang & "\txt2htm"
#EndRegion Global Variables

#Region Main body of code
Global $g_nExitCode = _Main()
Exit $g_nExitCode
#EndRegion Main body of code

#Region _Main()
; ===================================================================
; _Main()
;
; The main function responsible for generating the syntax files.
; Parameters:
; None.
; Returns:
; 0 on success, non-zero on failure.
; ===================================================================
Func _Main()
  ; Create the output window and initial message.
  _OutputWindowCreate()
  _OutputProgressWrite("==== Output for " & StringTrimRight(@ScriptName, StringLen(".exe")) & " (" & $g_sProject & ") ====" & @CRLF)
  _OutputProgressWrite("Generating syntax files." & @CRLF)

  ; Set the build directory based on the rules and the INI file value.
  Local $sBuildDir = _SettingBuildDir()

  Local Const $sSyntaxFiles = $sBuildDir & "\" & $g_sProjectDir & "\" & $g_sProject

  ; Generate macros.htm.
  _OutputBuildWrite("Creating macros.htm file" & @CRLF)
  RunWait('"' & @AutoItExe & '" "' & $sBuildDir & '\docs\autoit\english\Gen_Macros.au3"')

  ; Syntax files lists
  _OutputProgressWrite("Syntax files creation...")
  _OutputBuildWrite("Creating syntax files" & @CRLF)
  RunWait('"' & @AutoItExe & '" "' & $sSyntaxFiles & '\gen_lists.au3"')
  _OutputProgressWrite("Complete." & @CRLF)

  Local Enum $eEditor_Project, $eEditor_FileName
  Local $aEditorFiles = [["Crimson", "autoit3.key"], _ ; Project, Project filename.
      ["Notepad++", "autoit.xml"], _
      ["PSPad", "AutoIt3.def"], _
      ["Sublime Text", "AutoIt.tmLanguage"], _
      ["Textpad", "autoit_v3.syn"]]

  For $i = 0 To UBound($aEditorFiles) - 1
    _OutputProgressWrite($aEditorFiles[$i][$eEditor_Project] & " creation...")
    _OutputBuildWrite("Creating " & $aEditorFiles[$i][$eEditor_FileName] & " file" & @CRLF)
    RunWait('"' & @AutoItExe & '" "' & $sSyntaxFiles & '\' & $aEditorFiles[$i][$eEditor_Project] & '\gen_syntax.au3"')
    If FileMove($sSyntaxFiles & "\" & $aEditorFiles[$i][$eEditor_Project] & "\" & $aEditorFiles[$i][$eEditor_FileName], _
        $sBuildDir & "\install\Extras\Editors\" & $aEditorFiles[$i][$eEditor_Project] & "\" & $aEditorFiles[$i][$eEditor_FileName], $FC_OVERWRITE_CREATE) Then
      _OutputProgressWrite("Complete." & @CRLF)
    Else
      _OutputProgressWrite("Error. It appears an error occurred moving the syntax files for " & $aEditorFiles[$i][$eEditor_Project] & @CRLF)
    EndIf
  Next

  ; Move AutoIt3.ini for PSPad as well. This is a quick workaround.
  FileMove($sSyntaxFiles & "\PSPad\AutoIt3.ini", $sBuildDir & "\install\Extras\Editors\PSPad\AutoIt3.ini", $FC_OVERWRITE_CREATE)

  ; Create the autoit.php file for GeSHi.
  _OutputProgressWrite("GeSHi creation...")
  _OutputBuildWrite("Creating autoit.php file" & @CRLF)
  RunWait('"' & @AutoItExe & '" "' & $sSyntaxFiles & '\Geshi\gen_syntax.au3"')
  If FileMove($sSyntaxFiles & "\Geshi\autoit.php", $sBuildDir & "\install\Extras\Geshi\autoit.php", $FC_OVERWRITE_CREATE) Then
    _OutputProgressWrite("Complete." & @CRLF)
  Else
    _OutputProgressWrite("Error. It appears an error occurred moving the syntax files for " & $aEditorFiles[$i][$eEditor_Project] & @CRLF)
  EndIf

  ; Write closing message and wait for close (if applicable).
  _OutputProgressWrite("Finished." & @CRLF & @CRLF) ; Two CRLF's in case of chained output.
  _OutputWaitClosed()

  Return 0
EndFunc   ;==>_Main
#EndRegion _Main()