From 8ace926aaaef93a76d10721a87fd1919fc610305 Mon Sep 17 00:00:00 2001 From: gambas Date: Wed, 17 Feb 2021 01:58:42 +0100 Subject: [PATCH] Support for a new source archive format that should be able to fool GMail. [DEVELOPMENT ENVIRONMENT] * NEW: Update French translation. * NEW: Use String.RemoveDiacritics() instead of the old local utility function. * NEW: Support for a new source archive format that should be able to fool GMail. --- app/src/gambas3/.lang/fr.po | 64 ++++++++------- .../gambas3/.src/Component/CComponent.class | 10 +-- .../.src/Connection/FImportTable.class | 2 +- .../ProjectChooser/FProjectChooser.class | 8 ++ app/src/gambas3/.src/Project.module | 9 ++- app/src/gambas3/.src/Util.module | 79 +++++++++++-------- 6 files changed, 102 insertions(+), 70 deletions(-) diff --git a/app/src/gambas3/.lang/fr.po b/app/src/gambas3/.lang/fr.po index f35da53bd..a83cd4019 100644 --- a/app/src/gambas3/.lang/fr.po +++ b/app/src/gambas3/.lang/fr.po @@ -222,7 +222,7 @@ msgid "" msgstr "" "Project-Id-Version: gambas3 3.15.90\n" -"PO-Revision-Date: 2021-02-16 06:19 UTC\n" +"PO-Revision-Date: 2021-02-17 00:57 UTC\n" "Last-Translator: Benoît Minisini \n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -1881,7 +1881,7 @@ msgstr "Déselectionner tout" msgid "Gambas 3 project conversion" msgstr "Conversion en projet Gambas 3" -#: FCrash.class:73 FTranslate.class:245 Project.module:4759 +#: FCrash.class:73 FTranslate.class:245 Project.module:4758 msgid "The '&1' command has failed." msgstr "La commande '&1' a échoué." @@ -3391,7 +3391,7 @@ msgstr "Recharger le projet" msgid "Quit" msgstr "Quitter" -#: FMain.form:400 Project.module:6920 +#: FMain.form:400 Project.module:6923 msgid "Save as" msgstr "Enregistrer sous" @@ -4144,7 +4144,7 @@ msgstr "Selectionnez l'archive source" msgid "*.gz;*.bz2;*.xz" msgstr "" -#: FMakePatch.form:97 Project.module:4805 +#: FMakePatch.form:97 Project.module:4808 msgid "Source packages" msgstr "Paquets sources" @@ -4185,7 +4185,7 @@ msgstr "Nom de groupe incorrect !" msgid "This menu is too deep !" msgstr "Ce menu est trop profond !" -#: FMenu.class:1101 Project.module:5693 +#: FMenu.class:1101 Project.module:5696 msgid "modified" msgstr "modifié" @@ -6009,7 +6009,7 @@ msgstr "Nouveau projet..." msgid "Recent projects" msgstr "Projets récents" -#: FWelcome.class:73 Project.module:6539 +#: FWelcome.class:73 Project.module:6542 msgid "Installed software" msgstr "Logiciels installés" @@ -7593,7 +7593,7 @@ msgstr "'makepkg' a échoué." msgid "The directory is not a Gambas project" msgstr "Le répertoire n'est pas un projet Gambas" -#: Patch.class:52 Project.module:4772 +#: Patch.class:52 Project.module:4775 msgid "Unsupported source archive format." msgstr "Format d'archive source non supporté." @@ -7901,71 +7901,75 @@ msgstr "Le répertoire du projet existe déjà." msgid "The project directory cannot be created because a file with the same name already exists." msgstr "Le répertoire du projet ne peut être créé car un fichier avec le même nom existe déjà." -#: Project.module:4778 +#: Project.module:4781 msgid "Unable to create source archive." msgstr "Impossible de créer l'archive source." -#: Project.module:4804 +#: Project.module:4807 msgid "Create source package" msgstr "Générer une archive des sources du projet" -#: Project.module:5096 +#: Project.module:4808 +msgid "Source packages that fool GMail" +msgstr "Paquets sources qui trompent GMail" + +#: Project.module:5099 msgid "Cannot copy file &1." msgstr "Impossible de copier le fichier &1." -#: Project.module:5144 +#: Project.module:5147 msgid "Cannot create link &1." msgstr "Impossible de créer le lien &1." -#: Project.module:5159 +#: Project.module:5162 msgid "Cannot move a directory inside itself." msgstr "Impossible de déplacer un répertoire à l'intérieur de lui-même." -#: Project.module:5223 +#: Project.module:5226 msgid "Cannot move file &1." msgstr "Impossible de déplacer le fichier &1." -#: Project.module:5436 +#: Project.module:5439 msgid "The following files couldn't be removed:" msgstr "Les fichiers suivants n'ont pu être supprimés :" -#: Project.module:5918 +#: Project.module:5921 msgid "Project cleanup..." msgstr "Nettoyage du projet..." -#: Project.module:5924 +#: Project.module:5927 msgid "Project files conversion..." msgstr "Conversion des fichiers du projet..." -#: Project.module:5954 +#: Project.module:5957 msgid "Unable to convert &1" msgstr "Impossible de convertir &1" -#: Project.module:6234 +#: Project.module:6237 msgid "Unable to update forms." msgstr "Impossible de mettre à-jour les formulaires." -#: Project.module:6324 +#: Project.module:6327 msgid "The &1 program is not installed on your system." msgstr "Le programme &1 n'est pas installé sur votre système." -#: Project.module:6326 +#: Project.module:6329 msgid "The following programs are not installed on your system: &1." msgstr "Les programmes suivants ne sont pas installés sur votre système : &1." -#: Project.module:6417 +#: Project.module:6420 msgid "Unable to read component description file." msgstr "Impossible de lire le fichier de description du composant." -#: Project.module:6478 +#: Project.module:6481 msgid "Cannot write component description file." msgstr "Impossible d'écrire le fichier de description du composant." -#: Project.module:6539 +#: Project.module:6542 msgid "Project templates" msgstr "Modèles de projet" -#: Project.module:6585 +#: Project.module:6588 msgid "Unable to run terminal." msgstr "Impossible de démarrer le terminal." @@ -7977,22 +7981,26 @@ msgstr "Impossible d'enregistrer le fichier !" msgid "Published &1" msgstr "Publié &1" -#: Util.module:39 +#: Util.module:6 msgid "&1 B" msgstr "&1 o" -#: Util.module:41 +#: Util.module:8 msgid "&1 KiB" msgstr "&1 Kio" -#: Util.module:43 +#: Util.module:10 msgid "&1 MiB" msgstr "&1 Mio" -#: Util.module:45 +#: Util.module:12 msgid "&1 GiB" msgstr "&1 Gio" +#: Util.module:46 +msgid "Incorrect format" +msgstr "Format incorrect" + #: VersionControl.module:85 msgid "Please set the $EDITOR environment variable with your favorite graphical text editor. Some version control commands need it." msgstr "Veuillez définir la variable d'environnement $EDITOR avec votre éditeur de texte graphique favori. Les commandes de suivi de version en ont besoin." diff --git a/app/src/gambas3/.src/Component/CComponent.class b/app/src/gambas3/.src/Component/CComponent.class index 7e62c66e4..180093007 100644 --- a/app/src/gambas3/.src/Component/CComponent.class +++ b/app/src/gambas3/.src/Component/CComponent.class @@ -534,12 +534,12 @@ Public Sub Match(sFilter As String) As Boolean For Each sFilter In Split(sFilter, " ", Chr$(34), True) - sFilter = Util.RemoveAccents(sFilter) + sFilter = String.RemoveDiacritics(sFilter) - If InStr(Util.RemoveAccents(Key), sFilter, 1, gb.IgnoreCase) Then Return True - If InStr(Util.RemoveAccents(Name), sFilter, 1, gb.IgnoreCase) Then Return True - If InStr(Util.RemoveAccents(Authors.Join("\n")), sFilter, 1, gb.IgnoreCase) Then Return True - If InStr(Util.RemoveAccents(Implement.Join("\n")), sFilter, 1, gb.IgnoreCase) Then Return True + If InStr(String.RemoveDiacritics(Key), sFilter, 1, gb.IgnoreCase) Then Return True + If InStr(String.RemoveDiacritics(Name), sFilter, 1, gb.IgnoreCase) Then Return True + If InStr(String.RemoveDiacritics(Authors.Join("\n")), sFilter, 1, gb.IgnoreCase) Then Return True + If InStr(String.RemoveDiacritics(Implement.Join("\n")), sFilter, 1, gb.IgnoreCase) Then Return True Next diff --git a/app/src/gambas3/.src/Connection/FImportTable.class b/app/src/gambas3/.src/Connection/FImportTable.class index 3c3e20a4e..ef6c18a5b 100644 --- a/app/src/gambas3/.src/Connection/FImportTable.class +++ b/app/src/gambas3/.src/Connection/FImportTable.class @@ -219,7 +219,7 @@ Private Function TransformField(sName As String) As String ' sNewName &= sCar ' Next - Return Util.RemoveAccents(sName) + Return String.RemoveDiacritics(sName) End diff --git a/app/src/gambas3/.src/Exported/ProjectChooser/FProjectChooser.class b/app/src/gambas3/.src/Exported/ProjectChooser/FProjectChooser.class index 2c5eec5ff..8a5f19a10 100644 --- a/app/src/gambas3/.src/Exported/ProjectChooser/FProjectChooser.class +++ b/app/src/gambas3/.src/Exported/ProjectChooser/FProjectChooser.class @@ -17,6 +17,8 @@ End Public Sub Form_Open() $sLast = "" + + dchProject.UncompressFilter = ["*.tar.gz.gmail.txt"] dchProject.Bookmarks = Project.GetBookmarks() dchProject.ShowFile = True dchProject_Change @@ -184,3 +186,9 @@ Public Sub Form_Arrange() panOpen.Raise End + +Public Sub dchProject_Uncompress(Path As String) + + Util.UncompressForGmail(Path) + +End diff --git a/app/src/gambas3/.src/Project.module b/app/src/gambas3/.src/Project.module index 996ac45e1..0e6b31914 100644 --- a/app/src/gambas3/.src/Project.module +++ b/app/src/gambas3/.src/Project.module @@ -4736,7 +4736,7 @@ Public Sub MakeSourcePackageFromTo(sFrom As String, sPath As String) As Boolean sCmdName = "tar" - If sPath Ends ".gz" Then + If sPath Ends ".gz" Or If sPath Ends ".gz.gmail.txt" Then sOpt = "z" Else If sPath Ends ".bz2" Then sOpt = "j" @@ -4755,9 +4755,12 @@ Public Sub MakeSourcePackageFromTo(sFrom As String, sPath As String) As Boolean End Select Shell sCmd To sOutput - If Not Exist(sTemp) Then Error.Raise(Subst$(("The '&1' command has failed.") & "\n\n" & Html(Trim(sOutput)) & "", sCmdName)) + If sPath Ends ".gz.gmail.txt" Then + sTemp = Util.CompressForGmail(sTemp) + Endif + Try Kill sPath Copy sTemp To sPath Try Kill sTemp @@ -4802,7 +4805,7 @@ Public Sub MakeSourceArchive() Dialog.Path = sDir &/ GetDefaultArchiveBaseName() Dialog.Title = ("Create source package") - Dialog.Filter = ["*.tar.gz", ("Source packages"), "*.tar.bz2", ("Source packages"), "*.tar.xz", ("Source packages"), "*.zip", ("Source packages")] + Dialog.Filter = ["*.tar.gz", ("Source packages"), "*.tar.gz.gmail.txt", ("Source packages that fool GMail"), "*.tar.bz2", ("Source packages"), "*.tar.xz", ("Source packages"), "*.zip", ("Source packages")] Dialog.AutoExt = True If Dialog.SaveFile() Then Return diff --git a/app/src/gambas3/.src/Util.module b/app/src/gambas3/.src/Util.module index d1c7efd89..aefb82d5b 100644 --- a/app/src/gambas3/.src/Util.module +++ b/app/src/gambas3/.src/Util.module @@ -1,38 +1,5 @@ ' Gambas module file -Private Const REMOVE_ACC As String = "ÀÁÂÃÄÅ[A]àáâãäå[a]Æ[AE]æ[ae]Œ[OE]œ[oe]Ç[C]ç[c]ÈÉÊËẼ[E]èéêëẽ[e]ÌÍÎĨÏ[I]ìíîïĩ[i]ÑŃǸ[N]ñńǹ[n]ÒÓÔÕÖ[O]òóôõö[o]ÙÚÛÜ[U]ùúûü[u]ÝŸ[Y]ýÿ[y]ß[ss]°[]" - -Public Sub RemoveAccents(sStr As String) As String - - Dim iInd As Integer - Dim sCar As String - Dim iPos As Integer - Dim iPosL As Integer - Dim iPosR As Integer - Dim sNewStr As String - - If Not sStr Then Return - If IsAscii(sStr) Then Return sStr - - For iInd = 1 To String.Len(sStr) - sCar = String.Mid$(sStr, iInd, 1) - If Len(sCar) > 1 Then - iPos = InStr(REMOVE_ACC, sCar) - If iPos Then - iPosL = InStr(REMOVE_ACC, "[", iPos + 1) - iPosR = InStr(REMOVE_ACC, "]", iPos + 1) - If iPosL <> 0 And If iPosR <> 0 And If iPosL < iPosR Then - sCar = Mid$(REMOVE_ACC, iPosL + 1, iPosR - iPosL - 1) - Endif - Endif - Endif - sNewStr &= sCar - Next - - Return sNewStr - -End - Public Sub GetFileSize(iSize As Long) As String If iSize < 1000 Then @@ -47,6 +14,52 @@ Public Sub GetFileSize(iSize As Long) As String End +Public Sub CompressForGmail(sPath As String) As String + + Dim sDest As String + Dim hFile As File + Dim sBase64 As String + Dim I As Integer + + sDest = sPath & ".gmail.txt" + hFile = Open sDest For Output Create + Print #hFile, "" + sBase64 = Base64(File.Load(sPath)) + For I = 1 To Len(sBase64) Step 76 + Print #hFile, Mid$(sBase64, I, 76) + Next + Print #hFile, "" + Close #hFile + + Try Kill sPath + Return sDest + +End + +Public Sub UncompressForGmail(sPath As String) + + Dim aData As String[] + Dim sDest As String + + aData = Split(File.Load(sPath), "\n") + If Not aData.Last Then aData.Remove(aData.Max) + If aData[0] Not Like "" Or If aData.Last <> "" Then Error.Raise(("Incorrect format")) + aData.Remove(0) + aData.Remove(aData.Max) + + sDest = sPath & ".tmp" + File.Save(sDest, FromBase64(aData.Join(""))) + Try Kill sPath + + If sPath Ends ".gmail.txt" Then + Move sDest To Left(sPath, -10) + Else + Move sDest To sPath + Endif + +End + + Public Sub Main() Dim A As Float