' Gambas module file
Private $cVar As New Collection
Private $cTrans As New Collection
Private $sLang As String
Private $aLanguages As String[] = ["en:C", "fr:fr_FR.UTF-8", "es:es_ES.UTF-8", "ca:ca_ES.UTF-8", "cs:cs_CZ.UTF-8", "ar:ar_EG.UTF-8", "tr:tr_TR.UTF-8", "zh:zh_CN.UTF-8", "ko:ko_KR.UTF-8", "de:de_DE.UTF-8"]
Private Const NBR_NEWS As Integer = 3
Sub InitVar()
Dim aStable As String[] = ["2.23.1", "2.22.0", "2.21.0", "2.20.2"]
'DIM aDev AS String[] = ["92", "91", "90", "51"]
$cVar["STABLE_VERSION"] = aStable[0]
$cVar["STABLE_VERSION_1"] = aStable[1]
$cVar["STABLE_VERSION_2"] = aStable[2]
$cVar["STABLE_VERSION_3"] = aStable[3]
$cVar["DEV_VERSION"] = "2.99.3"
'$cVar["DEV_VERSION_1"] = "1.9." & aDev[1]
'$cVar["DEV_VERSION_2"] = "1.9." & aDev[2]
'$cVar["DEV_VERSION_3"] = "1.9." & aDev[3]
InitAuthor
End
Private Sub InitAuthor()
Dim hFile As File
Dim hAuthor As CAuthor
Dim sDev As String
Dim sTrans As String
Dim bDark As Boolean
Dim aCountry As New String[]
Dim cCountry As New Collection
Dim sCountry As String
Dim aAuthor As Object[]
Dim iInd As Integer
hFile = Open "authors.txt" For Read
While Not Eof(hFile)
hAuthor = New CAuthor(hFile)
Wend
Close #hFile
CAuthor.All.Sort
For Each hAuthor In CAuthor.All
If hAuthor.Translator Then
For Each sCountry In hAuthor.Translation
If Not cCountry.Exist(sCountry) Then
cCountry[sCountry] = New Object[]
aCountry.Add(sCountry)
Endif
cCountry[sCountry].Add(hAuthor)
Next
Endif
If hAuthor.Developer Then
If bDark Then
sDev &= "
"
Else
sDev &= "
"
Endif
bDark = Not bDark
sDev &= " " & hAuthor.GetLink() & " | \n" &
" " & hAuthor.Country & " | " &
" "
If hAuthor.Works.Count > 1 Then
sDev &= "\n " & hAuthor.Works.Join(".\n ") & ".\n"
Else
sDev &= hAuthor.Works[0] & "."
Endif
sDev &= " | \n
"
Endif
Next
$cVar["DEVELOPERS"] = sDev
bDark = False
aCountry.Sort
For Each sCountry In aCountry
If bDark Then
sTrans &= ""
Else
sTrans &= "
"
Endif
bDark = Not bDark
sTrans &= " " & sCountry & " | \n"
sTrans &= " \n"
aAuthor = cCountry[sCountry]
sTrans &= " " & aAuthor[0].GetLink() & "\n"
For iInd = 1 To aAuthor.Max
sTrans &= " " & aAuthor[iInd].GetLink() & "\n"
Next
sTrans &= " | \n
\n"
Next
$cVar["TRANSLATORS"] = sTrans
End
Sub GetNews(sPath As String) As String
Dim sNews As String
Dim sData As String
Dim iPos As Integer
Dim aDate As String[]
Dim dDate As Date
sNews = File.Load("news.html")
sData = File.Load(sPath)
aDate = Split(File.BaseName(sPath), "-")
dDate = Date(aDate[0], aDate[1], Left(aDate[2], 2))
If File.BaseName(sPath) = "2010-01-04" Then
sNews = Replace(sNews, "$(CLASS)", "news snow")
Else
sNews = Replace(sNews, "$(CLASS)", "news")
Endif
sNews = Replace(sNews, "$(DATE)", Format(dDate, "dd mmm yyyy"))
iPos = InStr(sData, "\n")
sNews = Replace(sNews, "$(TITLE)", Left(sData, iPos - 1))
sNews = Replace(sNews, "$(NEWS)", Trim(Mid$(sData, iPos + 1)))
Return sNews
End
Sub Expand(sPath As String)
Dim sData As String
Dim sVar As String
Dim iNews As Integer
Dim sKey As String
Dim sFile As String
Dim sSubst As String
Dim sDest As String
sDest = File.SetExt(sPath, "")
sData = File.Load(sPath)
For Each sVar In $cVar
sData = Replace(sData, "$(" & $cVar.Key & ")", sVar)
Next
If InStr(sData, "$(HEAD_NEWS)") Then
iNews = NBR_NEWS
sKey = "$(HEAD_NEWS)"
Else If InStr(sData, "$(NEWS)") Then
iNews = 1024
sKey = "$(NEWS)"
Endif
If iNews Then
For Each sFile In Dir("news", "*.html").Sort(gb.Descent)
If $sLang And If Exist("news" &/ $sLang &/ sFile)
sSubst &= GetNews("news" &/ $sLang &/ sFile)
Else
sSubst &= GetNews("news" &/ sFile)
Endif
Dec iNews
If iNews <= 0 Then Break
Next
sData = Replace(sData, sKey, sSubst)
Endif
Try Kill sDest & "~"
Try Move sDest To sDest & "~"
File.Save(sDest, sData)
CAuthor.All.Clear
End
Sub ReplaceMail(sPath As String)
Dim sData As String = File.Load(sPath)
Dim iPos, iPos2 As Integer
Dim sMail As String
Dim sOrig As String
Dim bMail As Boolean
Do
iPos = InStr(sData, "href=\"mailto:", iPos + 1)
If iPos = 0 Then Break
iPos2 = InStr(sData, Chr$(34), iPos + 7)
If iPos2 = 0 Then Break
sMail = Mid$(sData, iPos, iPos2 - iPos + 1)
sOrig = sMail
sMail = Replace(sMail, "@", "_AT_")
sMail = Replace(sMail, ".", "_DOT_")
sData = Left(sData, iPos - 1) & sMail & Mid$(sData, iPos2 + 1)
iPos += Len(sMail)
If sOrig <> sMail Then
If Not bMail Then
bMail = True
Print sPath
Endif
Endif
Loop
Try Kill sPath & "~"
Try Move sPath To sPath & "~"
File.Save(sPath, sData)
End
Private Sub ReplaceLink(sData As String, sAttr As String) As String
Dim iPos, iPos2 As Integer
Dim sLink As String
Do
iPos = InStr(sData, sAttr & "=\"", iPos + 1)
If iPos = 0 Then Break
iPos2 = InStr(sData, "\"", iPos + Len(sAttr) + 2)
If iPos2 = 0 Then Break
sLink = Mid$(sData, iPos + Len(sAttr) + 2, iPos2 - iPos - Len(sAttr) - 2)
If Not sLink Then Continue
If sLink Like "http://*" Then Continue
If sLink Like "https://*" Then Continue
If sLink Like "mailto:*" Then Continue
If sLink Like "/" Then Continue
If sLink Like "*.html" Then Continue
If sLink Like "*.html#*" Then Continue
If Left(sLink) = "#" Then Continue
sData = Left$(sData, iPos + Len(sAttr) + 1) & ".." &/ sLink & Mid$(sData, iPos2)
iPos = iPos2
Loop
Return sData
End
Private Sub Translate(sSrc As String, sDest As String, Optional bNoTrans As Boolean)
Dim sData As String = File.Load(sSrc)
Dim iPos, iPos2 As Integer
Dim sStr As String
If InStr(sDest, "changelog3") Then Stop
Print sDest
If Not bNoTrans Then
Do
iPos = InStr(sData, "{", iPos + 1)
If iPos = 0 Then Break
iPos2 = InStr(sData, "}", iPos + 1)
If iPos2 = 0 Then Break
sStr = Mid$(sData, iPos + 1, iPos2 - iPos - 1)
If InStr(sStr, "\n") Then Continue
$cTrans[sStr] = sStr
Print "{"; sStr; "}";
sStr = MTranslation[sStr]
Print " -> "; sStr
sData = Left$(sData, iPos - 1) & sStr & Mid$(sData, iPos2 + 1)
Loop
Endif
sData = ReplaceLink(sData, "href")
sData = ReplaceLink(sData, "src")
sData = Replace(sData, "$(LANG)", $sLang)
If $sLang = "ar" Then
sData = Replace(sData, "$(LANGDIR)", "rtl")
sData = Replace(sData, "$(DIR)", "-rtl")
sData = Replace(sData, "$(STYLE)", "style-rtl.css")
Else
sData = Replace(sData, "$(LANGDIR)", "ltr")
sData = Replace(sData, "$(DIR)", "")
sData = Replace(sData, "$(STYLE)", "style.css")
Endif
File.Save(sDest, sData)
End
Public Sub Main()
Dim sFile As String
Dim sDir As String
Dim sLang As String
Dim aLang As String[]
Dim sTrans As String
Dim sData As String
Dim iPos, iPos2 As Integer
InitVar
' Trick for directly modifying the project html files
sDir = Application.Path &/ "gambas.sourceforge.net"
' For Each sFile In Dir(sDir, "*.template")
' Print sFile
' Expand(sDir &/ sFile)
' Next
'MChangeLog.MakeChangeLog(sDir, 2)
'MChangeLog.MakeChangeLog(sDir, 3)
If Exist("~/gambas/2.0/trunk") Then
Try Kill "~/gambas/2.0/trunk/app/src/gambas2/authors.txt"
Copy "authors.txt" To "~/gambas/2.0/trunk/app/src/gambas2/authors.txt"
Endif
If Exist("~/gambas/3.0/trunk") Then
Try Kill "~/gambas/3.0/trunk/app/src/gambas3/authors.txt"
Copy "authors.txt" To "~/gambas/3.0/trunk/app/src/gambas3/authors.txt"
Endif
For Each sLang In $aLanguages
aLang = Split(sLang, ":")
$sLang = aLang[0]
System.Language = aLang[1]
sLang = $sLang
For Each sFile In Dir(sDir, "*.template")
Print sFile
Expand(sDir &/ sFile)
Next
For Each sFile In Dir(sDir, "*.html")
ReplaceMail(sDir &/ sFile)
Next
Try Mkdir sDir &/ sLang
MTranslation.Load
For Each sFile In Dir(sDir, "*.html")
If sFile = "index.html" Then Continue
Translate(sDir &/ sFile, sDir &/ sLang &/ sFile, sFile Like "changelog*.html")
Next
Next
Print
Print "Creating the translation module..."
For Each sTrans In $cTrans
sTrans = Replace(sTrans, "\"", "\\\"")
sData &= " $cTr[\"" & sTrans & "\"] = (\"" & sTrans & "\")\n"
Next
sFile = File.Load(Application.Path &/ ".src/MTranslation.module")
iPos = InStr(sFile, "'{")
iPos2 = InStr(sFile, "'}", iPos)
sFile = Left$(sFile, iPos - 1) & "'{\n" & sData & " '}" & Mid$(sFile, iPos2 + 2)
File.Save(Application.Path &/ ".src/MTranslation.module", sFile)
Print
Print "**** DONE! ****"
End