From e12664e881e9a7e2a788cb7b47db0fa71561da9d Mon Sep 17 00:00:00 2001 From: Bastien Dumont Date: Fri, 19 Feb 2021 23:53:23 +0100 Subject: [PATCH] Ajout des macros ApresZotero avec license --- .../ApresZotero/ApZotFunctions.xba | 576 ++++++++++++++++++ .../ApresZotero/ApZotGlobalOptions.xba | 40 ++ .../LibreOffice/ApresZotero/ApZotRevues.xba | 85 +++ .../ApresZotero/ApZotUtilities.xba | 55 ++ Macros/LibreOffice/ApresZotero/dialog.xlb | 3 + Macros/LibreOffice/ApresZotero/script.xlb | 8 + Macros/LibreOffice/ApresZotero_LO.oxt | Bin 0 -> 30247 bytes 7 files changed, 767 insertions(+) create mode 100644 Macros/LibreOffice/ApresZotero/ApZotFunctions.xba create mode 100644 Macros/LibreOffice/ApresZotero/ApZotGlobalOptions.xba create mode 100644 Macros/LibreOffice/ApresZotero/ApZotRevues.xba create mode 100644 Macros/LibreOffice/ApresZotero/ApZotUtilities.xba create mode 100644 Macros/LibreOffice/ApresZotero/dialog.xlb create mode 100644 Macros/LibreOffice/ApresZotero/script.xlb create mode 100644 Macros/LibreOffice/ApresZotero_LO.oxt diff --git a/Macros/LibreOffice/ApresZotero/ApZotFunctions.xba b/Macros/LibreOffice/ApresZotero/ApZotFunctions.xba new file mode 100644 index 0000000..9a78519 --- /dev/null +++ b/Macros/LibreOffice/ApresZotero/ApZotFunctions.xba @@ -0,0 +1,576 @@ + + +REM ***** BASIC ***** + +'************************************************************************ +'* Copyright 2021 by Bastien Dumont (bastien.dumont@posteo.net) +'* +'* This file is part of the ApresZotero library. +'* +'* ApresZotero is free software: you can redistribute it and/or modify +'* it under the terms of the GNU General Public License as published by +'* the Free Software Foundation, either version 3 of the License, or +'* (at your option) any later version. +'* +'* ApresZotero is distributed in the hope that it will be useful, +'* but WITHOUT ANY WARRANTY; without even the implied warranty of +'* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +'* GNU General Public License for more details. +'* +'* You should have received a copy of the GNU General Public License +'* along with ApresZotero. If not, see <https://www.gnu.org/licenses/>. +'* +'************************************************************************ + +Option Compatible +Option Explicit + +Function Check (mJournal As String) As Integer + Dim iReturnCode As Long + + iReturnCode = MsgBox("Avez-vous terminé de modifier le document et actualisé les citations Zotéro ?", 4, mJournal) + If iReturnCode = 7 Then + MsgBox("Veuillez terminer votre travail sur le document et actualiser les citations avant de lancer la macro.", 0, mJournal) + End If + Check = iReturnCode +End Function + +Sub Abbreviate (oDocument As Object, mTitreLong() As Variant, mAbrev() As Variant, mEditeur As String, bExpandFirstCitation As Boolean) + + REM Cette subroutine devrait devenir obsolète si les pistes envisagées dans le fil et la page ci-dessous se concrétisent : + REM https://forums.zotero.org/discussion/comment/325925#Comment_325925 + REM https://www.zotero.org/support/kb/journal_abbreviations + + Dim oSearch As Object + Dim sCited As String + Dim oCursor As Object + Dim n As Integer + Dim oOccurrence As Object + Dim bAlreadyAbbreviated As Boolean + Dim iReturnCode As Integer + Dim vCharPosture As Variant + + On Error Goto ErrorHandler 'Si l'utilisateur a tenté de lancer cette sous-routine, oDocument n'est pas défini. + oSearch = oDocument.createSearchDescriptor() + oSearch.SearchWords = TRUE + oSearch.SearchRegularExpression = FALSE + oSearch.SearchCaseSensitive = FALSE + On Error GoTo 0 + oCursor = oDocument.getCurrentController.getViewCursor() + For n = lbound(mTitreLong) To ubound(mTitreLong) + oSearch.SearchString = mTitreLong(n) + oOccurrence = oDocument.findFirst(oSearch) + bAlreadyAbbreviated = FALSE + Do While Not IsNull(oOccurrence) + oCursor.gotoRange(oOccurrence, False) + iReturnCode = MsgBox("Remplacer le texte sélectionné par l'abréviation correspondante ?", 3, mEditeur) + If iReturnCode = 2 Then 'Cancel + MsgBox("Vous avez arrêté l'exécution de la macro, mais les éventuels titres de revues déjà remplacés n'ont pas été restaurés.", 0, mEditeur) + Exit Sub + ElseIf iReturnCode = 6 Then 'Yes + vCharPosture = oCursor.CharPosture + If bExpandFirstCitation AND bAlreadyAbbreviated = FALSE Then + oCursor.collapseToEnd() + oCursor.setString(" (" & mAbrev(n) & ")") + oCursor.CharPosture = vCharPosture + bAlreadyAbbreviated = TRUE + Else + oCursor.setString(mAbrev(n)) + oCursor.CharPosture = vCharPosture + End If + ElseIf iReturnCode = 7 Then 'No + End If + oOccurrence = oDocument.findNext(oOccurrence.End, oSearch) + Loop + Next n + Exit Sub + + ErrorHandler: + If Err = 449 Then + MsgBox("La macro Abbreviate n'est pas destinée à être lancée directement par l'utilisateur. "&_ + "Veuillez lancer la macro correspondant au nom de la revue souhaité.", 0, "Erreur") + Else + MsgBox(Error$, 0, "Erreur") + End If + On Error Goto 0 +End Sub + +Sub SetStringPartToExponent(oScope As Object, sWholeStringRegex As String, sSubstringInExponentRegex As String) + + Dim oViewProperties As Object + Dim nCurrentZoomFactor As Integer + Dim oWholeStringSearch As Object + Dim oWholeStringResult As Object + Dim oFound As Object + Dim iResult As Integer + Dim oFoundCursor As Object + Dim iReturnCode As Integer + + oViewProperties = ThisComponent.getViewData().getByIndex(0) + nCurrentZoomFactor = getCurrentZoomFactor() + ThisComponent.CurrentController.ViewSettings.ZoomType = 3 + ThisComponent.CurrentController.ViewSettings.ZoomValue = nBigZoomFactor + + oWholeStringSearch = ThisComponent.createSearchDescriptor + oWholeStringSearch.SearchString = sWholeStringRegex + oWholeStringSearch.SearchRegularExpression = TRUE + oWholeStringResult = oScope.findAll(oWholeStringSearch) + oFoundCursor = ThisComponent.getCurrentController.getViewCursor() + For iResult = 0 To oWholeStringResult.count - 1 + oFound = oWholeStringResult.getByIndex(iResult) + oFoundCursor.gotoRange(oFound, False) + PlaceCursorOnSubstring(oFoundCursor, sSubstringInExponentRegex) + iReturnCode = MsgBox("Mettre le texte surligné en exposant ?", 3) + If iReturnCode = 2 Then 'Cancel + MsgBox("Vous avez arrêté l'exécution de la macro, mais les actions déjà réalisées n'ont pas été annulées.", 0) + ThisComponent.CurrentController.ViewSettings.ZoomValue = nCurrentZoomFactor + Exit Sub + ElseIf iReturnCode = 6 Then 'Yes + oFoundCursor.CharEscapement = nExponentCharSizePercentage + oFoundCursor.CharEscapementHeight = nExponentCharHeightPercentage + ElseIf iReturnCode = 7 Then 'No + End If + Next iResult + + ThisComponent.CurrentController.ViewSettings.ZoomValue = nCurrentZoomFactor +End Sub + + +Function getCurrentZoomFactor() As Integer + Dim oDocument As Object + Dim oViewProperties As Object + Dim iProperty As Integer + + oViewProperties = ThisComponent.getViewData().getByIndex(0) + For iProperty = 0 to UBound(oViewProperties) + If oViewProperties(iProperty).Name = "ZoomFactor" Then + getCurrentZoomFactor = oViewProperties(iProperty).Value + End If + Next iProperty +End Function + + +Sub PlaceCursorOnSubstring(oCursor As Object, sSubstringRegex As String) + Dim oSubstringSearch As Object + Dim oResult As Object + + oSubstringSearch = ThisComponent.createSearchDescriptor() + oSubstringSearch.SearchString = sSubstringRegex + oSubstringSearch.SearchRegularExpression = TRUE + oResult = ThisComponent.findNext(oCursor.getStart(), oSubstringSearch) + oCursor.gotoRange(oResult, FALSE) +End Sub + + +Function extractMatchingString(sSearchedString As String, aSearchResult As Object, iMatch As Integer, nCharsToIgnore As Integer) As String + Dim iMatchStartPos As Integer + Dim nMatchLen As Integer + + iMatchStartPos = aSearchResult.startOffset(iMatch) + 1 + nMatchLen = aSearchResult.endOffset(iMatch) - aSearchResult.startOffset(iMatch) + extractMatchingString = Mid(sSearchedString, iMatchStartPos+nCharsToIgnore, nMatchLen-nCharsToIgnore) + End Function + +Sub AddItemToMap(vMap() As Variant, sID As String, sTitle As String) + Dim iItem As Integer + + For iItem = LBound(vMap(), 1) To UBound(vMap(), 1) + If vMap(iItem, 0) = sID Then + vMap(iItem, 2) = vMap(iItem, 2)+1 + Exit Sub + End If + Next iItem + + vMap(UBound(vMap(), 1), 0) = sID + vMap(UBound(vMap(), 1), 1) = sTitle + vMap(UBound(vMap(), 1), 2) = 1 + ReDim Preserve vMap(UBound(vMap(), 1)+1, 3) As Variant +End Sub + +Function sortMapByNbOccurrences(ByVal vMap() As Variant) + Dim vSortedMap(UBound(vMap(), 1), 3) As Variant + Dim iSortedMap As Integer + Dim nMaxOccurrences As Integer + Dim iNbOccurrences As Integer + Dim iMap As Integer + + nMaxOccurrences = getMaxOccurrences(vMap) + + iSortedMap = 0 + For iNbOccurrences = nMaxOccurrences To 1 Step -1 + For iMap = LBound(vMap(), 1) To UBound(vMap(), 1) + If vMap(iMap, 2) = iNbOccurrences Then + vSortedMap(iSortedMap, 0) = vMap(iMap, 0) + vSortedMap(iSortedMap, 1) = vMap(iMap, 1) + vSortedMap(iSortedMap, 2) = iNbOccurrences + iSortedMap = iSortedMap+1 + End If + Next iMap + Next iNbOccurrences + + sortMapByNbOccurrences = vSortedMap +End Function + +Function getMaxOccurrences(vMap As Variant) + Dim nCurrentOccurrences As Integer + Dim iMap As Integer + + For iMap = LBound(vMap(), 1) To UBound(vMap(), 1) + If vMap(iMap, 2) > nCurrentOccurrences Then + nCurrentOccurrences = vMap(iMap, 2) + End If + Next iMap + + getMaxOccurrences = nCurrentOccurrences +End Function + +Sub PrintMap(vMap() As Variant) + Dim oDocumentText As Object + Dim iMap As Integer + Dim sStringToInsert As String + + oDocumentText = ThisComponent.Text + oDocumentText.insertString(oDocumentText.End, CHR$(10) & CHR$(10) & CHR$(10), False) + For iMap = LBound(vMap(), 1) To UBound(vMap(), 1)-1 + sStringToInsert = vMap(iMap, 2) & " {""" & vMap(iMap, 1) & CHR$(10) & CHR$(10) + oDocumentText.insertString(oDocumentText.End, sStringToInsert, False) + Next iMap +End Sub + +Sub HandleItemsInBibliography'(sBibliographyHeaderStyle As String) + Dim iReturnCode As Integer + Dim oBibliographyCursor As Object + Dim sAbbrevsAndExtendedList() As String + Const sBibliographyHeaderStyle As String = "Titre Liste des abréviations" + + iReturnCode = MsgBox("Avez-vous créé une liste d'abréviations ?" &_ + " Si oui, la première mention de chaque item dans la bibliographie sera abrégée.",_ + 4, "Traitement des items de la bibliographie") + If iReturnCode = 7 Then + Exit Sub + End If + + oBibliographyCursor= getBibliographyCursor(sBibliographyHeaderStyle) + + sAbbrevsAndExtendedList() = createAbbrevsAndExtendedReferencesList(oBibliographyCursor) + + SuppressFirstCitationReferenceForItemsInAbbrevList(sAbbrevsAndExtendedList) + + MsgBox("Le traitement est terminé. Il vous reste à abréger manuellement la première référence de chaque item cité dans la bibliographie.") +End Sub + +Function createAbbrevsAndExtendedReferencesList(oBibliographyCursor As Object) + Dim oFirstNoteText As Object + Dim sAbbrevsAndExtendedList() As String + Dim oTextCursorToStore As Object + Dim oNextParagraph As Object + Dim sAbbrev As String + Dim sExtendedReference As String + + oBibliographyCursor.gotoNextParagraph(False) + oBibliographyCursor.gotoPreviousParagraph(False) + + Do + oBibliographyCursor.collapseToStart() + Do While InStr(oBibliographyCursor.getString(), sSeparatorForListOfAbbreviations) = 0 + oBibliographyCursor.goRight(1, True) + Loop + oBibliographyCursor.goLeft(1, True) + sAbbrev = oBibliographyCursor.getString() + AddToList(sAbbrev, sAbbrevsAndExtendedList) + ReplaceSeparator(oBibliographyCursor) + oBibliographyCursor.gotoEndOfParagraph(True) + sExtendedReference = oBibliographyCursor.getString() + AddToList(sExtendedReference, sAbbrevsAndExtendedList) + oBibliographyCursor.gotoNextParagraph(False) + oBibliographyCursor.gotoEndOfParagraph(True) + Loop While oBibliographyCursor.ParaStyleName = sBibliographyStyleName _ + AND InStr(oBibliographyCursor.getString(), sSeparatorForListOfAbbreviations) > 0 + + createAbbrevsAndExtendedReferencesList = sAbbrevsAndExtendedList +End Function + +Sub ReplaceSeparator(oCursor As Object) + oCursor.collapseToEnd() + oCursor.goRight(1, True) + oCursor.setString(sReplacementSeparatorForListOfAbbreviations) + oCursor.CharPosture = "com.sun.star.awt.FontSlant.NONE" + oCursor.collapseToEnd() +End Sub + +Sub AddToList(sString As String, sList() As String) + ReDim Preserve sList(UBound(sList)+1) + sList(UBound(sList)) = sString +End Sub + + +Sub SuppressFirstCitationReferenceForItemsInAbbrevList(sAbbrevsAndExtendedList As String) + Dim oDocument As Object + Dim oCitRefSearch As Object + Dim nReferences As Integer + Dim iAbbrev As Integer + Dim sAbbrevString As String + Dim oCitRefResult As Object + Dim oCitRefFoundCursor As Object + Dim oCitRefFound As Object + Dim iResult As Integer + + oDocument = ThisComponent + oCitRefSearch = oDocument.createSearchDescriptor() + For iAbbrev = LBound(sAbbrevsAndExtendedList) To UBound(sAbbrevsAndExtendedList)-1 Step 2 + sAbbrevString = sAbbrevsAndExtendedList(iAbbrev) + oCitRefSearch.SearchString = sAbbrevString & sFirstCitationPrefix & "[0-9]+" + oCitRefSearch.SearchRegularExpression = TRUE + oCitRefResult = oDocument.findAll(oCitRefSearch) + oCitRefFoundCursor = ThisComponent.getCurrentController.getViewCursor() + For iResult = 0 To oCitRefResult.count - 1 + oCitRefFound = oCitRefResult.getByIndex(iResult) + oCitRefFoundCursor.gotoRange(oCitRefFound, False) + oCitRefFoundCursor.goRight(Len(sAbbrevString), True) + oCitRefFoundCursor.setString("") + Next iResult + Next iAbbrev + +End Sub + +Sub AbbreviateFirstOccurrences(oAbbrevAndReferencesList As Object) + Dim oDocument As Object + Dim oFootnotes As Object + Dim iExpandedReference As Integer + Dim oExpandedRefSearch As Object + Dim oFirstOccurrence As Object + Dim oCopyPasteCursor As Object + Dim oFrame As Object + Dim oDispatcher As Object + + + oDocument = ThisComponent + oCopyPasteCursor = oDocument.currentController.getViewCursor() + oFrame = oDocument.CurrentController.Frame + oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper") + oExpandedRefSearch = oDocument.createSearchDescriptor() + + For iExpandedReference = 1 To UBound(oAbbrevAndReferencesList) Step 2 + oExpandedRefSearch.SearchString = oAbbrevAndReferencesList(iExpandedReference).getString() + oExpandedRefSearch.SearchRegularExpression = FALSE + oFirstOccurrence = oDocument.findFirst(oExpandedRefSearch) + oFirstOccurrence.setString("") + oCopyPasteCursor.gotoRange(oAbbrevAndReferencesList(iExpandedReference)-1, False) + oDispatcher.executeDispatch(oFrame, ".uno:Copy", "", 0, Array()) + oCopyPasteCursor.gotoRange(oFirstOccurrence, False) + oCopyPasteCursor.CharCaseMap = 0 + oCopyPasteCursor.CharPosture = "com.sun.star.awt.FontSlant.NONE" + oCopyPasteCursor.ParaStyleName = "Style par défaut" + oDispatcher.executeDispatch(oFrame, ".uno:Paste", "", 0, Array()) + Next iExpandedReference + +End Sub + + +Sub AbbrevAnnee_Philologique(bExpandFirstCitation as Boolean) + + Const mJournal As String = "Année Philologique" + Dim mTitreLong() As String + mTitreLong = Array("Antike und Abendland", "Antigüedad y cristianismo", "Atene e Roma", "Archäologischer Anzeiger / Deutsches Archäologisches Institut", "Acta ad archaeologiam et artium historiam pertinentia. Series altera in 8o;", "Annuaire / Amis de la Bibliothèque humaniste de Sélestat", "Anales de arqueología cordobesa", "Annuario / Accademia Etrusca di Cortona", "Anzeiger für die Altertumswissenschaft", "Atti della Accademia Ligure di Scienze e Lettere", "Atti della Accademia di Scienze Morali e Politiche della Società Nazionale di Scienze, Lettere ed Arti di Napoli", "Acta antiqua Academiae Scientiarum Hungaricae", "Atti della Accademia Pontaniana", "Atti della Accademia di Scienze, Lettere e Arti di Palermo. 2, Lettere", "Atti e memorie dell'Accademia Patavina di Scienze, Lettere ed Arti. 3, Memorie della Classe di Scienze Morali, Lettere ed Arti", "Atti della Accademia Peloritana dei Pericolanti, Classe di Lettere, Filosofia e Belle Arti", "Acta archaeologica", "Acta archaeologica Academiae Scientiarum Hungaricae", "Arheološki vestnik", "Annales archéologiques arabes syriennes", "Atti della Accademia Roveretana degli Agiati, Classe di Scienze umane, Classe di Lettere ed Arti", "Jahrbuch Archäologie Schweiz", "Annuaire d'Archéologie Suisse", "The Annual of the American Schools of Oriental Research", "Atti della Accademia delle Scienze di Torino. 2, Classe di Scienze Morali, Storiche e Filologiche", "Atti e memorie dell'Accademia Toscana La Colombaria", "Anzeiger der philosophisch-historischen Klasse / Österreichische Akademie der Wissenschaften Wien", "Analecta Bollandiana", "Archiv für Begriffsgeschichte", "Annales de Bretagne et des Pays de l'Ouest", "The Annual of the British School at Athens", "The Art Bulletin", "Abhandlungen der Braunschweigischen Wissenschaftlichen Gesellschaft", "L'Antiquité classique", "Acta classica Universitatis Scientiarum Debreceniensis", "Annuaire du Collège de France", "Acta classica", "Acme", "Acta Hyperborea", "Ἀρχαιολογικὸν Δελτίον. Μελέτες", "Adamantius", "Annali del Dipartimento di Filosofia, Università di Firenze", "Archivo español de arqueología", "Aegyptus", "Αρχείον οικονομικής ιστορίας", "Archives of economic history", "Ἀρχαιολογικὴ ἐφημερίς", "Archaeologiai értesítő", "Aestimatio", "Aevum", "Aevum antiquum", "Anuari de filologia. Secció D, Studia Graeca et Latina", "Anales de filología clásica", "Annali della Facoltà di Giurisprudenza di Genova", "Anuario filósofico", "Annali della Facoltà di Lettere e Filosofia, Università degli Studi di Bari", "Annali della Facoltà di Lettere e Filosofia dell'Università di Cagliari", "Annales de la Faculté des lettres et sciences humaines, Université Cheikh Anta Diop de Dakar", "Annali della Facoltà di Lettere e Filosofia, Università di Macerata", "Annali della Facoltà di Lettere e Filosofia dell'Università di Napoli", "Annali della Facoltà di Lettere e Filosofia di Perugia. 1, Studi classici", "Annali della Facoltà di Lettere e Filosofia di Perugia. 4, Studi filosofici", "Annali della Facoltà di Lettere e Filosofia di Perugia. 3, Studi linguistici e letterari", "Annali della Facoltà di Lettere e Filosofia di Perugia. 2, Studi storico-antropologici", "Annali della Facoltà di Lettere e Filosofia, Università di Siena", "Annali della Facoltà di Magistero dell'Università di Cagliari", "Africa", "Annali della Facoltà di Scienze della Formazione dell'Università di Cagliari", "Archivio glottologico italiano", "Annuario del Ginnasio Liceo A. Volta di Como", "Archiv für Geschichte der Philosophie", "Ancient History", "Anales de historia antigua y medieval", "Annales d'histoire et d'archéologie / Université Saint-Joseph, Faculté des lettres et des sciences humaines", "The Ancient history Bulletin", "Revue d'histoire ancienne", "Annuarium historiae conciliorum", "Anuario de historia del derecho español", "Archive for history of exact sciences", "Anuario de historia de la Iglesia", "Acta historica Academiae Scientiarum Hungaricae", "Archives d'histoire doctrinale et littéraire du Moyen Âge", "The American Historical Review", "Archives internationales d'histoire des sciences", "Annali dell'Istituto Italiano di Numismatica", "Annali dell'Istituto Italiano per gli Studi Storici", "Annali di archeologia e storia antica", "Annali dell'Istituto Universitario Orientale di Napoli, Dipartimento di Studi del Mondo classico e del Mediterraneo antico. Sezione filologico-letteraria", "Annali dell'Istituto Universitario Orientale di Napoli, Dipartimento di Studi del mondo classico e del Mediterraneo antico. Sezione linguistica. ", "Annales de l'Institut de philosophie de l'Université de Bruxelles", "Annuaire de l'Institut de Philologie et d'Histoire Orientales et Slaves / Université Libre de Bruxelles", "Atti / Istituto Veneto di Scienze, Lettere ed Arti, Classe di Scienze Morali, Lettere ed Arti", "The Archaeological Journal", "American Journal of Archaeology", "American Journal of Ancient history", "American Journal of Numismatics", "American Journal of Philology", "Antike Kunst", "Archäologisches Korrespondenzblatt", "Archäologie im Kanton Bern", "Archéologie dans le canton de Berne", "Archiv für Kulturgeschichte", "Akroterion", "Alba Regia", "Alfinge", "Annali del Liceo classico G. Garibaldi di Palermo", "Archivum Latinitatis Medii Aevi", "Das Altertum", "Analecta Malacitana", "Atti e memorie / Accademia Nazionale di Scienze, Lettere e Arti di Modena. Atti", "Atti e memorie / Accademia Nazionale di Scienze, Lettere e Arti di Modena. Memorie scientifiche, giuridiche, letterarie", "Atti e memorie della Accademia Petrarca di Lettere, Arti e Scienze", "Atti e memorie / Arcadia", "Atti e memorie della Accademia di Agricoltura, Scienze e Lettere di Verona", "Ambix", "Atti e memorie della Società Istriana di Archeologia e Storia Patria", "Archiv für Musikwissenschaft", "Aquileia nostra", "Anabases", "Anas", "Anatolica", "Ancient narrative", "Ancient philosophy", "Ancient society", "The Ancient world", "Anemos", "Annales. Histoire, sciences sociales", "Annales de Normandie", "Annali di storia dell'esegesi", "Anregung", "Der Anschnitt", "Antiquités africaines", "Antichthon", "Antiquity", "The Antiquaries journal", "Antonianum", "Antiquorum philosophia", "Antiquité tardive", "Archiv für Orientforschung", "Annali online di Ferrara. Lettere", "Acta orientalia Academiae Scientiarum Hungaricae", "Analecta papyrologica", "Acta patristica et Byzantina", "Apeiron", "Archiv für Papyrusforschung und verwandte Gebiete", "Archives de philosophie du droit", "Apocrypha", "Apollinaris", "Aquila legionis", "Aquitania", "Archaeological reports", "Aram periodical", "Arcadia", "Archaeologia", "Archaeologiae", "Archaeonautica", "Ἀρχαιογνωσία", "Archeologia classica", "Archeologia", "Architectura", "Archaeological news", "Archív orientální", "Archives de philosophie", "Archäologie der Schweiz", "Archéologie suisse", "Arctos", "Arethusa", "Appunti romani di filologia", "Archiv für Religionsgeschichte", "Argos", "Αριάδνη", "Analecta Romana Instituti Danici", "Arion", "Accordia research papers", "Anatolian studies", "Annuario della Scuola Archeologica di Atene e delle Missioni Italiane in Oriente", "Annales du Service des antiquités de l'Égypte", "Archivio storico per la Calabria e la Lucania", "Asclepio", "Anglo-Saxon England", "Atti del Sodalizio Glottologico Milanese", "Annali del Seminario Giuridico della Università di Palermo", "Anales del seminario de historia de la filosofía", "Atti e memorie della Società Magna Grecia", "Annali della Scuola Normale Superiore di Pisa, Classe di Lettere e Filosofia", "Archivio storico pugliese", "Annali di scienze religiose", "Archivio storico sardo", "Die Alte Stadt", "Ἀθηνᾶ", "Athenaeum", "ʿAtiqot. English series", "Der altsprachliche Unterricht", "Annales Universitatis Scientiarum Budapestinensis de Rolando Eötvös nominatae. Sectio classica", "Annales Universitatis Scientiarum Budapestinensis de Rolando Eötvös nominatae. Sectio iuridica", "Annales Universitatis Scientiarum Budapestinensis de Rolando Eötvös nominatae. Sectio philosophica et sociologica", "Annali dell'Università di Ferrara. Nuova serie. Sezione V, Scienze giuridiche", "Aufidus", "Annali dell'Università di Ferrara. Nuova serie. Sezione VI, Lettere", "Annali dell'Università di Ferrara. Sezione Storia", "Augustinian studies", "Augustiniana", "Augustinianum", "Augustinus", "AUMLA", "Annuaire de l'Université de Sofia St. Kliment Ohridski, Centre de recherches slavo-byzantines Ivan Dujčev", "Auster", "Annales valaisannes", "Atti e memorie / Accademia Nazionale Virgiliana di Scienze, Lettere ed Arti", "Antike Welt", "Allgemeine Zeitschrift für Philosophie", "Bibliothek und Wissenschaft", "Bollettino d'arte", "Bulletin d'archéologie et d'architecture libanaises", "Bulletin de la Classe des lettres et des sciences morales et politiques / Académie royale de Belgique", "Babesch", "Bulletin de l'Association Guillaume Budé", "Bulletin des antiquités luxembourgeoises", "Bulletin d'archéologie marocaine", "Bulletin of the American Schools of Oriental Research", "The Bulletin of the American Society of Papyrologists", "Beiträge zur allgemeinen und vergleichenden Archäologie", "Bollettino della Badia Greca di Grottaferrata", "Bullettino della Commissione Archeologica Comunale di Roma", "Bulletin de correspondance hellénique", "Bollettino del Centro Internazionale per lo Studio dei Papyri Ercolanesi (Cronache ercolanesi)", "Bulletin archéologique du Comité des travaux historiques et scientifiques. Afrique du Nord", "Bibliothèque de l'École des chartes", "Belfagor", "Bulletin d'études orientales", "Berceo", "Berytus", "Bulletin of the history of medicine", "Bulletin de l'Institut français d'archéologie orientale", "Bibliothèque d'humanisme et Renaissance", "Biblica", "Biblos", "Bulletin de l'Institut historique belge de Rome", "Bulletin of the Institute of Classical Studies", "Bullettino dell'Istituto di Diritto Romano", "Bitarte", "Biblische Zeitschrift", "Bonner Jahrbücher des Rheinischen Landesmuseums in Bonn und des Rheinischen Amtes für Bodendenkmalpflege im Landschaftsverband Rheinland und des Vereins von Altertumsfreunden im Rheinlande", "British journal for the history of philosophy", "The British journal for the history of science", "Bulletin de littérature ecclésiastique", "The Bodleian Library record", "Bulletin des Musées royaux d'art et d'histoire", "Bulletin van de Koninklijke Musea voor Kunst en Geschiedenis", "Bryn Mawr classical review", "The Metropolitan Museum of Art bulletin", "Bollettino / Monumenti, musei e gallerie pontificie", "Bulletin / Medelhavsmuseet", "Bulletin / Museum of Mediterranean and Near Eastern Antiquities", "Bulletin / Museums of Art and Archaeology, University of Michigan", "Boletín / Museo de Zaragoza", "Beiträge zur Namenforschung", "Bollettino di numismatica", "Bibliotheca orientalis", "Bollettino dei classici", "Bolskan", "Boreas", "Bericht der Römisch-Germanischen Kommission / Deutsches Archäolo-gisches Institut", "Britannia", "Bulletin of the John Rylands University Library of Manchester", "Bulletin de la Société nationale des antiquaires de France", "Bulletin de la Société des antiquaires de l'Ouest", "Bulletin trimestriel de la Société des antiquaires de Picardie", "Boletín del Seminario de Estudios de Arte y Arqueología", "Bollettino della Società Filosofica Italiana", "Bulletin de la Société de linguistique de Paris", "Bulletin de la Société française de philosophie", "Bollettino di storia delle scienze matematiche", "Bulletin de la Société toulousaine d'études classiques", "Bollettino di studi latini", "Bayerische Vorgeschichtsblätter", "Berichte zur Wissenschaftsgeschichte", "Byzantion", "Byzantinische Forschungen", "Byzantinoslavica", ", Byzantinische Zeitschrift ", "Baseler Zeitschrift für Geschichte und Altertumskunde", "Classica et christiana", "Classica et mediaevalia", "Cahiers alsaciens d'archéologie, d'art et d'histoire", "Caesaraugusta", "Caesarodunum", "Cahiers archéologiques", "Cambridge archaeological journal", "The Classical bulletin", "Civiltà classica e cristiana", "Cahiers du Centre d'études chypriotes. [S", "Cahiers du Centre Gustave-Glotz", "Collectanea Christiana Orientalia", "Chronique Élisabeth.", "Cahiers des études anciennes", "Centaurus", "Cronache ercolanesi", "Cuadernos de filología clásica. Estudios griegos e indoeuropeos", "Cuadernos de filología clásica. Estudios latinos", "Cahiers Ferdinand de Saussure", "Cahiers du GITA", "Cahiers d'histoire", "Cuadernos de historia del derecho", "Church History", "Chiron", "The Catholic Historical Review", "Chronos", "Computers and the Humanities", "Ciceroniana", "Cuadernos de investigación filológica", "Cahiers de l'Institut de linguistique de Louvain", "Cahiers de l'Institut du Moyen-Âge grec et latin", "Circe", "The Classical Journal", "Canadian Journal of Philosophy", "Classical Antiquity", "Classica – revista brasileira de estudos clássicos", "Classica – boletim de pedagogia e cultura", "Classics Ireland", "Classical Studies", "Acta Universitatis Wratislaviensis. Classica Wratislaviensia", "Comparative Literature Studies", "Clio medica", "Classical and Modern Literature", "The Classical Outlook", "Codices manuscripti", "Colby Quarterly", "Comparative Literature", "Conimbriga. Arqueologia.", "Connaissance hellénique", "Quaderns de prehistória i arqueologia de Castelló", "Cuadernos de prehistoria y arqueología", "Connaissance des Pères de l'Église", "Classical philology", "Cahiers de philosophie politique et juridique", "Canadian Philosophical Reviews", "Revue canadienne de comptes rendus en philosophie", "Classical quarterly", "Classical review", "Comptes rendus / Académie des inscriptions et belles-lettres", "Canadian Review of Comparative Literature", "Revue canadienne de littérature comparée", "Cahiers de recherches de l'Institut de papyrologie et d'égyptologie de Lille", "Cristianesimo nella storia", "Critica storica", "Les Cahiers de Tunisie", "Cudas", "Classical world", "Dissertations abstracts", "Dacia", "Deutsches Dante-Jahrbuch", "Δευκαλίων", "Deucalion", "Dialogues d'histoire ancienne", "Dialectica", "Dialogue", "Dike", "Diogène", "Dioniso", "Dionysius", "Diotima", "Δωδώνη. Ιστορία και αρχαιολογία", "Δωδώνη : επιστημονική επετηρίδα του Τμήματος Φιλολογίας της Φιλοσοφικής Σχολής του Πανεπιστημίου Ιωαννίνων", "Δωδώνη : επιστημονική επετηρίδα του Τμήματος Φιλοσοφίας της Φιλοσοφικής Σχολής του Πανεπιστημίου Ιωαννίνων", "Dumbarton Oaks Papers", "Downside Review", "Documenti e studi sulla tradizione filosofica medievale", "Dynamis", "East and West", "Epigraphica Anatolica", "Ethnographisch-archäologische Zeitschrift", "Études celtiques", "Estudios clásicos", "Ἐπιστημονικὴ ἐπετηρὶς τῆς φιλοσοφικῆς Σχολῆς τοῦ Πανεπιστημίου Ἀθηνῶν", "Επιστημονική επετηρίδα της Φιλοσοφικής Σχολής. Tεύχος Τμήματος φιλολογίας", "Επιστημονική επετηρίδα της Φιλοσοφικής Σχολής [του Αριστοτελείου Πανεπιστημίου Θεσσαλονίκης, Τμήμα φιλοσοφίας]", "Εγνατία", "Ἐπετηρὶς τοῦ Κέντρου Ἐρεύνης τῆς ῾Ιστορίας τοῦ Ἑλληνικοῦ Δικαίου", "The English historical review", "Estudios humanísticos. Filología", "Eikasmos", "Eirene", "Études de lettres", "Electronic antiquity", "Elenchos", "Ensaios de literatura e filologia", "Échos du monde classique", "Classical views", "Early medieval Europe", "Emerita", "Empúries", "Enchoria", "Eos", "Les Études philosophiques", "Epigraphica", "Epimeleia", "Études platoniciennes", "Epos", "Eranos", "Eranos-Jahrbuch", "Études savoisiennes", "Estudios de la Antigüedad", "Espacio, tiempo y forma. Serie 1, Prehistoria y arqueología", "Espacio, tiempo y forma. Serie 2", "Ephemerides theologicae Lovanienses", "Etruscan studies", "Εὐλιμένη", "Euphrosyne", "Eurasia antiqua", "Èuresis", "Eutopia", "Egitto e Vicino Oriente", "Exemplaria classica", "Excerpta philologica", "Exemplaria", "Fabula", "Filologia antica e moderna", "Faventia", "Fundberichte aus Baden-Württemberg", "Folia electronica classica", "Filosofia", "Forum Iulii", "Florilegium", "Florentia Iliberritana", "Frühmittelalterliche Studien", "Filología neotestamentaria", "Fontes", "Fortunatae", "Felix Ravenna", "Francia", "Fundort Wien", "Freiburger Zeitschrift für Philosophie und Theologie", "Greece and Rome", "Gaia", "Gallaecia", "Gallia", "Grazer Beiträge", "Giornale critico della filosofia italiana", "Genava", "Geographia antiqua", "Gerión", "Germania", "Gesnerus", "Göttinger Forum für Altertumswissenschaft", "Giornale ferrarese di retorica e filologia", "Göttingische gelehrte Anzeigen", "Giornale italiano di filologia", "The Geographical journal", "Gladius", "Graecolatina et orientalia", "Glotta", "Acta Universitatis Carolinae. Graecolatina Pragensia", "Giornale di metafisica", "The J. Paul Getty Museum journal", "Gnomon", "Schweizer Münzblätter", "Gazette numismatique suisse", "Greek, Roman and Byzantine Studies", "Gregorianum", "Geschichte in Wissenschaft und Unterricht", "Gymnasium", "History and Theory", "Helvetia archaeologica", "Habis", "Hagiographica", "Hispania antiqua", "Hefte des Archäologischen Seminars der Universität Bern", "Hamburger Beiträge zur Archäologie", "Hebrew Union College annual", "Histoire, épistémologie, langage", "Helikon", "Helios", "Hellas", "Ελληνικά", "Helmantica", "Hephaistos", "Hermathena", "Hermes", "Hesperia", "Hispania", "Historische Literatur", "Historia", "History", "Histos", "Historisches Jahrbuch", "Harvard Library bulletin", "Historia mathematica", "Ὅρμος", "´Ορος", "History of Philosophy Quarterly", "History and Philosophy of the Life Sciences", "History of Political Thought", "History of Religions", "History of Science", "Historische Sprachforschung", "Historical linguistics", "Histoire des sciences médicales", "Harvard studies in classical philology", "History of technology", "Harvard theological review", "Humanística", "Humanitas : rivista bimestrale di cultura", "Humanitas : revista do Instituto de Estudos Clássicos", "Humanistica Lovaniensia", "Hyperboreus", "Historische Zeitschrift", "Iranica antiqua", "Illinois classical studies", "Israel exploration journal", "Indogermanische Forschungen", "International journal of the classical tradition", "International journal of musicology", "The International journal of nautical archaeology", "International journal of philosophical studies", "Incontri linguistici", "Iliria", "'Ilu", "Italia medioevale e umanistica", "Incidenza dell'Antico", "Index", "Interpretation", "Intertexts", "Invigilata lucernis", "International philosophical quarterly", "Iran", "Iraq", "Isis", "International Studies in Philosophy", "Studi internazionali di filosofia", "Ítaca", "Italica", "Itineraria", "Iura", "Journal asiatique", "Journal of ancient civilizations", "Jahresberichte aus Augst und Kaiseraugst", "Journal of the American Oriental Society", "Journal of the American Research Center in Egypt", "Journal of the Royal Asiatic Society", "Journal of the British Archaeological Association", "Jahrbuch für Antike und Christentum", "Jahrbuch der Berliner Museen", "Journal of biblical literature", "Journal of classical studies", "Jahrbuch des Deutschen Archäologischen Instituts", "The Journal of Egyptian Archaeology", "Journal of Early Christian Studies", "The Journal of Ecclesiastical History", "Journal of the Economic and Social History of the Orient", "Journal of European Archaeology", "Journal of Field Archaeology", "Journal for the History of Astronomy", "Journal for the History of Arabic Science", "Jahrbuch der Heidelberger Akademie der Wissenschaften", "Journal of the History of Biology", "Journal of the History of Ideas", "Journal of the History of Medicine and Allied Sciences", "Journal of the History of Philosophy", "The Journal of Hellenic studies", "Journal of the history of sexuality", "The Journal of Indo-European studies", "The Journal of juristic papyrology", "Journal für Kunstgeschichte", "Journal of Mediterranean archaeology", "Journal of Near Eastern studies", "Jahrbuch für Numismatik und Geldgeschichte", "The Journal of Neoplatonic studies", "Jahreshefte des Österreichischen Archäologischen Institutes in Wien", "Jahrbuch der Österreichischen Byzantinistik", "The Journal of Philosophy", "Journal of Prehistoric Religion", "The Journal of Religion", "Journal of Roman archaeology", "Jahrbuch des Römisch-Germanischen Zentralmuseums Mainz", "Journal of Religious History", "Journal of Roman Military Equipment Studies", "The Journal of Roman Studies", "Journal des savants", "Journal of the Society of Architectural Historians", "Jahrbuch der Schweizerischen Gesellschaft für Ur- und Frühgeschichte", "Annuaire de la Société suisse de préhistoire et d'archéologie", "Journal for the study of Judaism in the Persian, Hellenistic and Roman period", "The Journal of Theological Studies", "Jaarbericht van het Vooraziatisch-Egyptisch Genootschap Ex Oriente Lux", "Journal of the Walters Art Gallery", "Jahrbuch für Wirtschaftsgeschichte", "Journal of the Warburg and Courtauld Institutes", "Kadmos", "Kalathos", "Kant-Studien", "Karthago", "Kentron", "Kernos", "Bericht über die Tagung für Ausgrabungswissenschaft und Bauforschung", "Kölner Jahrbuch", "Klearchos", "Kleos", "Kléos", "Klio", "Kodai", "Κοινωνία", "Κώκαλος", "Kratylos", "Ktema", "Kurtrierisches Jahrbuch", "Lingua e stile", "L'Homme", "La Pensée", "Labeo", "Lalies", "Langages", "Language", "Larouco", "Lateranum", "Latinitas", "Latomus", "Laverna", "Liverpool Classical Monthly", "Les études classiques", "Levant", "Lexis", "Listy filologické", "Folia philologica", "Libya antiqua", "Libyan studies", "Leeds International Classical Studies", "Lettre d'informations", "Limes", "La Linguistique", "Lingua", "Litterae caelestes", "Lingue e linguaggio", "Littérature, médecine et société", "Litterae Numismaticae Vindobonenses", "Logo", "Logos", "Laval théologique et philosophique", "Lucentum", "Lustrum", "Mediaevalia et Humanistica", "Medicina e storia", "Le Moyen Âge", "Memoirs of the American Academy in Rome", "Maecenas", "Medium aevum", "Maia", "Memorie dell'Accademia delle Scienze dell'Istituto di Bologna, Classe di Scienze Morali", "Mainake", "Manuscripta", "Memorie dell'Accademia delle Scienze di Torino. 2, Classe di Scienze morali, storiche e filologiche", "Mededelingen van de Koninklijke Academie voor Wetenschappen, Letteren en Schone Kunsten van België, Klasse der Letteren", "Mainzer Archäologische Zeitschrift", "Münstersche Beiträge zur antiken Handelsgeschichte", "Museum criticum", "Mélanges de la Casa de Velázquez", "Materiali e discussioni per l'analisi dei testi classici", "Mitteilungen des Deutschen Archäologischen Instituts, Athenische Abteilung", "Damaszener Mitteilungen / Deutsches Archäologisches Institut", "Istanbuler Mitteilungen / Deutsches Archäologisches Institut", "Madrider Mitteilungen / Deutsches Archäologisches Institut", "Mitteilungen des Deutschen Archäologischen Instituts, Römische Abteilung", "Bullettino dell'Istituto Archeologico Germanico, Sezione romana", "Meander", "Mediterranean archaeology", "Medical history", "Mediterraneus", "Mediterraneo antico", "Medicina nei secoli", "Mélanges de l'École française de Rome. Antiquité", "Mélanges de l'École française de Rome. Moyen Âge", "Medioevo greco", "Μήνη", "Minima epigraphica et papyrologica", "Mesopotamia", "Messana", "Metalogicon", "Méthexis", "Mètis", "Militärgeschichtliche Mitteilungen", "Militärgeschichtliche Zeitung", "Museum Helveticum", "Memorias de historia antigua", "Medizinhistorisches Journal", "Medicine and the Life Sciences in History", "Mediterranean historical review", "Mitteilungen zur Christlichen Archäologie", "Memorie dell'Istituto Lombardo", "Mind", "Minerva", "Minos", "Mitteilungen des Instituts für Österreichische Geschichtsforschung", "Mittellateinisches Jahrbuch", "Monuments et mémoires publiés par l'Académie des inscriptions et belles-lettres", "Metropolitan Museum journal", "Mnemosyne", "Mededelingen van het Nederlands Instituut te Rome", "Papers of the Netherlands Institute in Rome. Antiquity", "The Modern schoolman", "Mouseion", "Revue de la Société canadienne des études classiques", "Mediaeval studies", "Mélanges de science religieuse", "Münchener Studien zur Sprachwissenschaft", "Miscellanea di studi storici", "Museum Tusculanum", "Munibe", "Le Muséon", "Mélanges de l'Université Saint-Joseph", "Museum Patavinum", "Musiva et sectilia", "Myrtia", "Mythos", "Mainzer Zeitschrift", "Numismatica e antichità classiche", "Nuovi annali della Facoltà di Magistero dell'Università di Messina", "Numismatic chronicle", "Numismatic circular", "Nea Rhome", "New England Classical Journal", "Nestor", "Nicolaus", "Nikephoros", "Numismatic Literature", "Neulateinisches Jahrbuch", "Numismatisches Nachrichtenblatt", "Nova Tellus", "Nuova rivista storica", "Nouvelle revue théologique", "Atti della Accademia Nazionale dei Lincei. Notizie degli scavi di antichità", "Novum Testamentum", "New Testament Abstracts", "NTM", "International Journal of History and Ethics of Natural Sciences, Technology and Medicine", "New Testament studies", "Nubica et Aethiopica", "Numen", "Numisma", "Nuncius", "Numismatische Zeitschrift", "Oriens antiquus", "Opuscula Atheniensia", "Oriens christianus", "Orientalia Christiana periodica", "Oxford Journal of Archaeology", "Orientalia Lovaniensia Periodica", "Orientalistische Literaturzeitung", "Opus", "Ordia prima", "Oriens-Occidens", "Orientalia", "Orizzonti", "Opuscula Romana", "Orpheus", "Ostkirchliche Studien", "Oxford studies in ancient philosophy", "Ostraka", "Orbis terrarum", "Past and present", "Πρακτικὰ τῆς Ἀκαδημίας Ἀθηνῶν", "Πρακτικὰ τῆς ἐν Ἀθήναις Ἀρχαιολογικῆς Ἑταιρείας", "Proceedings of the American Catholic Philosophical Association", "Paideia", "Palestine Exploration quarterly", "Pallas", "Proceedings of the American Philosophical Society", "Papyrologica Lupiensia", "Παρνασσός", "Παρουσία", "Parthica", "Proceedings of the Aristotelian Society", "Proceedings of the Aristotelian Society. Supplementary Volume", "Patavium", "Proceedings of the British Academy", "Papers of the British School at Rome", "Proceedings of the Classical Association", "Proceedings of the Cambridge Philological Society", "Pegasus", "Perficit", "The Philosophical forum", "Philosophy and literature", "Philosophy and phenomenological research", "Philosophy and rhetoric", "Philosophical books", "Pharmacy in history", "Philologus", "Philosophie antique", "Φιλοσοφία", "Philosophiques", "Philosophy", "The Philosophical Quarterly", "Φιλόθεος", "Philotheos", "Przegląd historyczny", "Philosophisches Jahrbuch", "Philosophischer Literaturanzeiger", "Philosophia naturalis", "Phoenix", "Philological quarterly", "The Philosophical review", "Philosophische Rundschau", "Philosophy in Review", "Comptes rendus philosophiques", "Phronesis", "Physis", "Picus", "Philosophiegeschichte und logische Analyse", "Logical Analysis and History of Philosophy", "Potsdamer Lateintage", "Πλάτων", "Periodicum Online zur Erforschung der Kommunikationsstrukturen in der Spätantike", "Ploutarchos", "Poetica", "Polifemo", "Polis", "Parole de l'Orient", "La Parola del passato", "Perspektiven der Philosophie", "Il Pensiero politico", "Praesentia", "Primum legere", "Bulletin de l'Association Pro Aventico", "Jahresbericht / Gesellschaft Pro Vindonissa", "Prometheus", "Prudentia", "The Petronian Society Newsletter", "Puteoli", "Proceedings of the Virgil Society", "Pyrenae", "Quaderni di archeologia della Libia", "Quaderni catanesi di studi classici e medievali", "Quaderni catanesi di studi antichi e medievali", "Quaderni di cultura e di tradizione classica", "Quaderni dell'Istituto di Archeologia e Storia antica / Università degli Studi G. D'Annunzio, Chieti", "Quaderni dell'Istituto di Filosofia, Università degli Studi di Perugia, Facoltà di Magistero", "The Quarterly journal of speech", "Quaderni di storia", "Quaderni urbinati di cultura classica", "Revue archéologique", "Rendiconti della Accademia di Archeologia, Lettere e Belle Arti", "Rivista di archeologia cristiana", "Revue archéologique du Centre de la France", "Rivista archeologica dell'antica provincia e diocesi di Como", "Revue archéologique de l'Est", "Rendiconti dell'Accademia delle Scienze dell'Istituto di Bologna, Classe di Scienze Morali", "Atti della Accademia Nazionale dei Lincei, Classe di Scienze Morali, Storiche e Filologiche. Rendiconti", "Ramus", "Revue archéologique de Narbonnaise", "Revue archéologique de Picardie", "Revue belge d’archéologie et d’histoire de l’art", "Belgisch tijdschrift voor oudheidkunde en kunstgeschiedenis", "Revue bénédictine", "Revue biblique", "Revue belge de numismatique et de sigillographie", "Revue belge de philologie et d'histoire", "Belgisch tijdschrift voor filo geschiedenis", "Regulae Benedicti studia", "Rivista di cultura classica e medioevale", "Revue historique de droit français et étranger", "Rivista di archeologia", "Report of the Department of Antiquities of Cyprus", "Revue du Nord", "Revue du Nord-Archéologie de la Picardie et du Nord de la France", "Rivista di diritto romano", "Revue des études anciennes", "Ricerche di egittologia e di antichità copte", "Revue des études arméniennes", "Revue des études augustiniennes et patristiques", "Revue des études byzantines", "Revista de estudios clásicos", "Recherches augustiniennes et patristiques", "Recherches de science religieuse", "Recherches de théologie et philosophie médiévales", "Forschungen zur Theologie und Philosophie des Mittelalters", "Revue des études grecques", "Revue d'égyptologie", "Revue des études juives", "Revue des études latines", "Revista de estudios latinos", "Religion", "Religious studies", "Renaissance quarterly", "Revue des études sud-est européennes", "Revista española de lingüística", "Revista de filosofía", "Rivista di filosofia", "Revista de filosofía", "Revue française d'histoire des idées politiques", "Rivista di filologia e di istruzione classica", "Rivista di filosofia neo-scolastica", "Revue historique", "Tijdschrift voor rechtsgeschiedenis", "Revue d'histoire du droit", "Revue d'histoire ecclésiastique", "Rhetorica", "Rhetorik", "Rhetoric Review", "Rheinisches Museum für Philologie", "Revue d'histoire et de philosophie religieuses", "Revue de l'histoire des religions", "Revue d'histoire des sciences", "Revue d'histoire des textes", "Revue historique vaudoise", "Rivista dell'Istituto Nazionale di Archeologia e Storia dell'Arte", "Ricerche teologiche", "Revue internationale des droits de l'antiquité", "Rivista internazionale di filosofia del diritto", "Rendiconti / Istituto Lombardo, Accademia di Scienze e Lettere, Classe di Lettere, Scienze morali e storiche", "Rivista italiana di numismatica e scienze affini", "Rinascimento", "Revue internationale de philosophie", "Revue Informatique et statistique dans les sciences humaines", "Rivista biblica", "Rechtshistorisches Journal", "Reports of the Keio Institute of Cultural and Linguistic Studies", "Revista de letras", "Revista latinoamericana de filosofía", "The Review of metaphysics", "Revue de métaphysique et de morale", "Revue numismatique", "Römisches Österreich", "Roczniki humanistyczne. Filologia klasyczna", "Annales de lettres et sciences humaines", "Romanobarbarica", "Romanische Forschungen", "Revista portuguesa de arqueologia", "Atti della Pontificia Accademia Romana di Archeologia. Serie III. Rendiconti", "Revue de philologie, de littérature et d'histoire anciennes", "Revue de philosophie ancienne", "Revue philosophique de la France et de l'étranger", "Revue philosophique de Louvain", "Res publica litterarum", "Römische Quartalschrift für christliche Altertumskunde und für Kirchen-geschichte", "Revue de synthèse", "Rivista storica dell'Antichità", "Zeitschrift für schweizerische Archäologie und Kunstgeschichte", "Revue suisse d'art et d'archéologie", "Ricerche storico bibliche", "Rivista di studi bizantini e neoellenici", "Rivista di studi bizantini e slavi", "Rivista di storia della Chiesa in Italia", "Rivista di storia del cristianesimo", "Rivista di storia della filosofia", "Rivista storica italiana", "Rivista di storia e letteratura religiosa", "Rivista degli studi orientali", "Rivista di studi pompeiani", "Revue des sciences philosophiques et théologiques", "Rhetoric Society Quarterly. University Park (Pa.)", "Revue des sciences religieuses", "Rassegna storica salernitana", "Rivista di studi fenici", "Rivista di studi liguri", "Revue théologique de Louvain", "Revue de théologie et de philosophie", "Rudiae", "Revista venezolana de filosofía", "Scrittura e civiltà", "Segno e testo", "Saeculum", "Saguntum", "Saitabi", "Salesianum", "Sandalion", "Sapienza", "Schol(ia)", "Scholia", "Scripta classica Israelica", "Studi classici e orientali", "Scriptorium", "Scripta theologica", "Studia et documenta historiae et iuris", "Studi etruschi", "Sehepunkte", "Seia", "Sacris erudiri", "Semitica", "Seminari romani di cultura greca", "Studi di egittologia e di papirologia", "Scripta Fulgentina", "Studi genuensi", "Studia historica. Historia antigua", "Studies in history and philosophy of science", "Siculorum gymnasium", "Studi italiani di filologia classica", "Sileno", "Studi italiani di linguistica teorica e applicata", "Silva", "Simblos", "Saalburg-Jahrbuch", "The Southern journal of philosophy", "Σκέψις", "Studia linguistica", "Silvae di Latina Didaxis", "Studi micenei ed egeo-anatolici", "Schede medievali", "Studi e materiali di storia delle religioni", "Studi medievali e umanistici", "Schweizerische numismatische Rundschau", "Revue suisse de numismatique", "Symbolae Osloenses", "Studi orientali e linguistici", "Studia Oliveriana", "Speculum", "Sborník prací Filosofické fakulty Brnĕnské Univerzity. Řada klasická", "Studia minora Facultatis Philosophicae Universitatis Brunensis. Series classica", "Studies in philology", "Symbolae philologorum Posnanensium Graecae et Latinae", "Studia philologica Salmanticensia", "Studia philologica Valentina", "Die Sprache", "Sprachkunst", "Studies in Religion", "Sciences religieuses", "Studi e ricerche dell'Istituto di Civilità Classica, Cristiana, Medievale", "Studi sardi", "Studi e saggi linguistici", "Storia della storiografia", "Histoire de l'historiographie", "Studia Troica", "Stadion", "Studia theologica", "Storiografia", "Studii clasice", "Studies in language", "Studi magrebini", "Studi medievali", "Studia monastica", "Studium Ovetense", "Studia Patavina", "Studia philosophica", "The Studia Philonica annual", "Studia Picena", "Studi romani", "Studi romagnoli", "Studi salentini", "Studi storici", "Studi umanistici piceni", "Studi urbinati. Serie B, Scienze umane e sociali", "Sudhoffs Archiv", "Sungraphe", "Światowit", "Syllecta classica", "Symbolon", "ΣΥΝΤΑΚΤΙΚΑ", "Syntaktika", "Synthesis", "Syria", "Studia Zamorensia", "Schweizerische Zeitschrift für Geschichte", "Revue suisse d'histoire", "Technology and culture", "Travaux et mémoires du Centre de recherche d'histoire et civilisation byzan-tines", "Text & presentation", "Teología y vida", "Tabona", "Τάλαντα", "Talia dixit", "Transactions of the American Philological Association", "Transactions of the American Philosophical Society", "Travaux / Cercle linguistique d'Aix-en-Provence", "Teiresias", "Τεκμήρια", "Beiträge zur Geschichte der griechischen und römischen Welt", "Temenos", "Tempora", "Tempus", "Tijdschrift voor filosofie", "Tijdschrift voor geschiedenis", "Theologie und Philosophie", "Theoria", "Thetis", "Theologische Literaturzeitung", "The Thomist", "Theologische Quartalschrift", "Theologische Rundschau", "Theologische Revue", "Theological studies", "Theologische Zeitschrift", "Trinity journal", "TLS", "Trésors monétaires", "Topoi: an international review of philosophy", "ΤΟΠΟΙ. Orient-Occident", "Transactions of the Philological Society", "Traditio", "Travaux neuchâtelois de linguistique", "Trivium", "Tyche", "Trierer Zeitschrift für Geschichte und Kunst des Trierer Landes und seiner Nachbargebiete", "Ugarit-Forschungen", "Uranie", "Verkundigung und Forschung", "Vallesia", "Vigiliae Christianae", "Vestnik drevnej istorii", "Journal of Ancient History", "Veleia", "Verbum", "Vergilius", "Vetera Christianorum", "Viator", "Vichiana", "Vivarium", "Vivens Homo", "Vita Latina", "Voces", "Vox Latina", "Vox Patrum", "Vox Romanica", "Vetus Testamentum", "Wort und Dienst", "Wiener humanistische Blätter", "Würzburger Jahrbücher für die Altertumswissenschaft", "Die Welt des Orients", "Word", "Wiener Studien", "Xenia antiqua", "Yale classical studies", "The Yale journal of criticism", "The Yale University Library gazette", "Zeitschrift für antikes Christentum", "Journal of Ancient Christianity", "Živa Antika", "Antiquité vivante", "Zeitschrift für ägyptische Sprache und Altertumskunde", "Zeitschrift für die Alttestamentliche Wissenschaft", "Zeitschrift der Deutschen Morgenländischen Gesellschaft", "Zephyrus", "Zeitschrift für Archäologie", "Zeitschrift für Kirchengeschichte", "Zeitschrift für Katholische Theologie", "Zeitschrift für die Neutestamentliche Wissenschaft und die Kunde der älteren Kirche", "Zeitschrift des Deutschen Palästina-Vereins", "Zeitschrift für Papyrologie und Epigraphik", "Zeitschrift für philosophische Forschung", "Zeitschrift der Savigny-Stiftung für Rechtsgeschichte. Romanistische Abteilung", "Zeitschrift für Religions- und Geistesgeschichte", "Zeitschrift für romanische Philologie", "Zeitschrift für Semiotik") + Dim mAbrev() As String + mAbrev = Array("A&A", "A&Cr", "A&R", "AA", "AAAH", "AABS", "AAC", "AAEC", "AAHG", "AALig", "AAN", "AAntHung", "AAP", "AAPal", "AAPat", "AAPel", "AArch", "AArchHung", "AArchSlov", "AArchSyr", "AARov", "AAS", "AAS", "AASO", "AAT", "AATC", "AAWW", "AB", "ABG", "ABPO", "ABSA", "ABull", "ABWG", "AC", "ACD", "ACF", "AClass", "Acme", "ActaHyp", "AD", "Adamantius", "ADFF", "AEA", "Aegyptus", "AEH", "AEH", "AEph", "AErt", "Aestimatio", "Aevum", "Aevum(ant)", "AFB", "AFC", "AFGG", "AFilos", "AFLB", "AFLC", "AFLD", "AFLM", "AFLN", "AFLPer(class)", "AFLPer(filos)", "AFLPer(ling)", "AFLPer(stor)", "AFLS", "AFMC", "Africa", "AFSFC", "AGI", "AGLComo", "AGPh", "AH", "AHAM", "AHAUSJ", "AHB", "AHB", "AHC", "AHDE", "AHES", "AHIg", "AHistHung", "AHMA", "AHR", "AIHS", "AIIN", "AIIS", "AION(archeol)", "AION(filol)", "AION(ling)", "AIPh", "AIPhO", "AIV", "AJ", "AJA", "AJAH", "AJN", "AJPh", "AK", "AKB", "AKBern", "AKBern", "AKG", "Akroterion", "Alba Regia", "Alfinge", "ALGP", "ALMA", "Altertum", "AMal", "AMAM(A)", "AMAM(M)", "AMAP", "AMArc", "AMAV", "Ambix", "AMSI", "AMW", "AN", "Anabases", "Anas", "Anatolica", "AncNarr", "AncPhil", "AncSoc", "AncW", "Anemos", "Annales (HSS)", "AnnNorm", "AnnSE", "Anregung", "Anschnitt", "AntAfr", "Antichthon", "Antiquity", "AntJ", "Antonianum", "AntPhilos", "AntTard", "AOF", "AOFL", "AOrientHung", "APapyrol", "APB", "Apeiron", "APF", "APhD", "Apocrypha", "Apollinaris", "Aquila legionis", "Aquitania", "AR", "Aram", "Arcadia", "Archaeologia", "Archaeologiae", "Archaeonautica", "Archaiognosia", "ArchClass", "Archeologia", "Architectura", "ArchN", "ArchOrient", "ArchPhilos", "ArchS", "ArchS", "Arctos", "Arethusa", "ARF", "ARG", "Argos", "Ariadne", "ARID", "Arion", "ARP", "AS", "ASAA", "ASAE", "ASCL", "Asclepio", "ASE", "ASGM", "ASGP", "ASHF", "ASMG", "ASNP", "ASP", "ASR", "ASSard", "AStadt", "Athena", "Athenaeum", "Atiqot", "AU", "AUB(class)", "AUB(jur)", "AUB(phil)", "AUFG", "Aufidus", "AUFL", "AUFS", "AugStud", "Augustiniana", "Augustinianum", "Augustinus", "AUMLA", "AUS", "Auster", "AV", "AVM", "AW", "AZP", "B&W", "BA", "BAAL", "BAB", "BABesch", "BAGB", "BAL", "BAM", "BASO", "BASP", "BAVA", "BBGG", "BCAR", "BCH", "BCPE", "BCTH", "BECh", "Belfagor", "BEO", "Berceo", "Berytus", "BHM", "BIAO", "BiblH&R", "Biblica", "Biblos", "BIBR", "BICS", "BIDR", "Bitarte", "BiZ", "BJ", "BJHP", "BJHS", "BLE", "BLR", "BMAH", "BMAH", "BMCRev", "BMM", "BMMP", "BMNE", "BMNE", "BMusUM", "BMZ", "BN", "BNum", "BO", "BollClass", "Bolskan", "Boreas", "BRGK", "Britannia", "BRL", "BSAF", "BSAO", "BSAP", "BSEAA", "BSFI", "BSL", "BSPh", "BSSM", "BSTEC", "BStudLat", "BVBl", "BWG", "Byzantion", "ByzF", "ByzSlav", "ByzZ", "BZG", "C&C", "C&M", "CAAH", "Caesaraugusta", "Caesarodunum", "CArch", "CArchJ", "CB", "CCC", "CCEC", "CCG", "CCO", "CE", "CEA", "Centaurus", "CErc", "CFC(G)", "CFC(L)", "CFS", "CGITA", "CH", "CHD", "ChHist", "Chiron", "CHR", "Chronos", "CHum", "Ciceroniana", "CIF", "CILL", "CIMAGL", "Circe", "CJ", "CJPh", "ClAnt", "Classica (Brasil)", "Classica (Lisboa)", "Classics Ireland", "ClassStud", "ClassWrat", "CLS", "CM", "CML", "CO", "CodMan", "ColbyQ", "CompLit", "Conimbriga", "ConnHell", "CPAC", "CPAM", "CPE", "CPh", "CPhPJ", "CPhRev", "CPhRev", "CQ", "CR", "CRAI", "CRCL", "CRCL", "CRIPEL", "CrSt", "CS", "CT", "Cudas", "CW", "DA", "Dacia", "DDJ", "Deukalion", "Deukalion", "DHA", "Dialectica", "Dialogue", "Dike", "Diogène", "Dioniso (N. S.)", "Dionysius", "Diotima", "Dodone(hist)", "Dodone(philol)", "Dodone(philos)", "DOP", "DR", "DSTradF", "Dynamis", "E&W", "EA", "EAZ", "EC", "EClás", "EEAth", "EEThess(philol)", "EEThess(philos)", "Egnatia", "EHHD", "EHR", "EHum", "Eikasmos", "Eirene", "EL", "ElectronAnt", "Elenchos", "ELF", "EMC", "EMC", "EME", "Emerita", "Empúries", "Enchoria", "Eos", "EPh", "Epigraphica", "Epimeleia", "EPlaton", "Epos", "Eranos", "Eranos-Jb", "ESav", "EstAnt", "ETF(arqueol)", "ETF(hist)", "EThL", "EtrStud", "Eulimene", "Euphrosyne", "EurAnt", "Euresis", "Eutopia", "EVO", "ExClass", "ExcPhilol", "Exemplaria", "Fabula", "FAM", "Faventia", "FBW", "FEC", "Filosofia", "FIul", "Florilegium", "FlorIlib", "FMS", "FNT", "Fontes", "Fortunatae", "FR", "Francia", "FWien", "FZPhTh", "G&R", "Gaia", "Gallaecia", "Gallia", "GB", "GCFI", "Genava", "GeorgAnt", "Gerión", "Germania", "Gesnerus", "GFA", "GFRF", "GGA", "GIF", "GJ", "Gladius", "GLO", "Glotta", "GLP", "GM", "GMusJ", "Gnomon", "GNS", "GNS", "GRBS", "Gregorianum", "GWU", "Gymnasium", "H&T", "HA", "Habis", "Hagiographica", "HAnt", "HASB", "HBA", "HebrUCA", "HEL", "Helikon", "Helios", "Hellas", "Hellenica", "Helmantica", "Hephaistos", "Hermathena", "Hermes", "Hesperia", "Hispania", "HistLit", "Historia", "History", "Histos", "HJ", "HLB", "HM", "Hormos", "Horos", "HPhQ", "HPLS", "HPTh", "HR", "HS", "HSF", "HSF", "HSMed", "HSPh", "HTechn", "HThR", "Humanística", "Humanitas (Brescia)", "Humanitas (Coimbra)", "HumLov", "Hyperboreus", "HZ", "IA", "ICS", "IEJ", "IF", "IJCT", "IJM", "IJNA", "IJPS", "ILing", "Iliria", "Ilu", "IMU", "IncidAntico", "Index", "Interpretation", "Intertexts", "InvLuc", "IPQ", "Iran", "Iraq", "Isis", "ISPh", "ISPh", "Itaca", "Italica", "Itineraria", "Iura", "JA", "JAC", "JAK", "JAOS", "JARCE", "JAS", "JBAA", "JbAC", "JBerlM", "JBL", "JCS", "JDAI", "JEA", "JECS", "JEH", "JESHO", "JEurArch", "JFA", "JHA", "JHAS", "JHAW", "JHB", "JHI", "JHM", "JHPh", "JHS", "JHSex", "JIES", "JJP", "JKG", "JMA", "JNES", "JNG", "JNStud", "JÖAI", "JÖByz", "JPh", "JPR", "JR", "JRA", "JRGZ", "JRH", "JRMES", "JRS", "JS", "JSAH", "JSGU", "JSGU", "JSJ", "JThS", "JVEG", "JWAG", "JWG", "JWI", "Kadmos", "Kalathos", "KantStud", "Karthago", "Kentron", "Kernos", "KGB", "KJ", "Klearchos", "Kleos", "Kléos (Brasil)", "Klio", "Kodai", "Koinonia", "Kokalos", "Kratylos", "Ktema", "KurtrJb", "L&S", "L'Homme", "La Pensée", "Labeo", "Lalies", "Langages", "Language", "Larouco", "Lateranum", "Latinitas", "Latomus", "Laverna", "LCM", "LEC", "Levant", "Lexis", "LF", "LF", "LibAnt", "LibStud", "LICS", "LIMAM", "Limes", "Ling", "Lingua", "LittCael", "LL", "LMS", "LNV", "Logo", "Logos (Madrid)", "LThPh", "Lucentum", "Lustrum", "M&H", "M&S", "MA", "MAAR", "Maecenas", "MAev", "Maia", "MAIB", "Mainake", "Manuscripta", "MAT", "MAWBL", "MAZ", "MBAH", "MCr", "MCV", "MD", "MDAI(A)", "MDAI(D)", "MDAI(I)", "MDAI(M)", "MDAI(R)", "MDAI(R)", "Meander", "MedArch", "MedHist", "Mediterraneus", "MediterrAnt", "MedSec", "MEFRA", "MEFRM", "MEG", "Mene", "MEP", "Mesopotamia", "Messana", "Metalogicon", "Méthexis", "Mètis", "MGM", "MGZ", "MH", "MHA", "MHJ", "MHJ", "MHR", "MiChA", "MIL", "Mind", "Minerva", "Minos", "MIÖG", "MLatJb", "MMAI", "MMJ", "Mnemosyne", "MNIR", "MNIR", "ModSch", "Mouseion (Canada)", "Mouseion (Canada)", "MS", "MSR", "MSS", "MStudStor", "MT", "Munibe", "Muséon", "MUSJ", "MusPat", "MusSect", "Myrtia", "Mythos", "MZ", "NAC", "NAFM", "NC", "NCirc", "Nea Rhome", "NECJ", "Nestor", "Nicolaus", "Nikephoros", "NL", "NLJ", "NNB", "Nova Tellus", "NRS", "NRTh", "NSA", "NT", "NTA", "NTM", "NTM", "NTS", "Nubica", "Numen", "Numisma", "Nuncius", "NZ", "OA", "OAth", "OC", "OCP", "OJA", "OLP", "OLZ", "Opus", "Ordia prima", "Oriens-Occidens", "Orientalia", "Orizzonti", "ORom", "Orpheus", "OS", "OSAPh", "Ostraka", "OTerr", "P&P", "PAA", "PAAH", "PACPhA", "Paideia", "PalEQ", "Pallas", "PAPhS", "PapLup", "Parnassos", "Parousia", "Parthica", "PAS", "PAS(suppl)", "Patavium", "PBA", "PBSR", "PCA", "PCPhS", "Pegasus", "Perficit", "PF", "Ph&Lit", "Ph&PhenR", "Ph&Rh", "PhB", "PhH", "Philologus", "PhilosAnt", "Philosophia", "Philosophiques", "Philosophy", "PhilosQ", "Philotheos", "Philotheos", "PHist", "PhJ", "PhLA", "PhN", "Phoenix", "PhQ", "PhR", "PhRdschau", "PhRev", "PhRev", "Phronesis", "Physis", "Picus", "PlA", "PlA", "PLat", "Platon", "Plekos", "Ploutarchos", "Poetica", "Polifemo", "Polis", "POr", "PP", "PPh", "PPol", "Praesentia", "Primum legere", "Pro Aventico", "Pro Vindonissa", "Prometheus", "Prudentia", "PSN", "Puteoli", "PVS", "Pyrenae", "QAL", "QC", "QCSAM", "QCTC", "QIASA", "QIFP", "QJS", "QS", "QUCC", "RA", "RAAN", "RAC", "RACF", "RAComo", "RAE", "RAIB", "RAL", "Ramus", "RAN", "RAPic", "RBA", "RBA", "RBen", "RBi", "RBN", "RBPh", "RBPh", "RBS", "RCCM", "RD", "RdA", "RDAC", "RdN", "RdN(archéol)", "RDR", "REA", "REAC", "REArm", "REAug", "REByz", "REC", "RecAug", "RecSR", "RecTh", "RecTh", "REG", "REgypt", "REJ", "REL", "RELat", "Religion", "RelStud", "RenQ", "RESE", "REspLing", "RF (Argentina)", "RF (Bologna)", "RF (Madrid)", "RFHIP", "RFIC", "RFN", "RH", "RHD", "RHD", "RHE", "Rhetorica", "Rhetorik", "RhetR", "RhM", "RHPhR", "RHR", "RHS", "RHT", "RHV", "RIA", "RicTeol", "RIDA", "RIFD", "RIL", "RIN", "Rinascimento", "RIPh", "RISSH", "RivBibl", "RJ", "RKI", "RL", "RLAF", "RMeta", "RMM", "RN", "RÖ", "RoczHum", "RoczHum", "RomBarb", "RomForsch", "RPA", "RPAA", "RPh", "RPhA", "RPhilos", "RPhL", "RPL", "RQA", "RS", "RSA", "RSAA", "RSAA", "RSB", "RSBN", "RSBS", "RSCI", "RSCr", "RSF", "RSI", "RSLR", "RSO", "RSP", "RSPh", "RSQ", "RSR", "RSS", "RStudFen", "RStudLig", "RThL", "RThPh", "Rudiae", "RVF", "S&C", "S&T", "Saeculum", "Saguntum", "Saitabi", "Salesianum", "Sandalion", "Sapienza", "Schol(i)a", "Scholia", "SCI", "SCO", "Scriptorium", "ScrTheol", "SDHI", "SE", "Sehepunkte", "Seia", "SEJG", "Semitica", "SemRom", "SEP", "SFulg", "SG", "SHHA", "SHPS", "SicGymn", "SIFC", "Sileno", "SILTA", "Silva", "Simblos", "SJ", "SJPh", "Skepsis", "SL", "SLD", "SMEA", "SMed", "SMSR", "SMU", "SNR", "SNR", "SO", "SOL", "SOliv", "Speculum", "SPFB(klas)", "SPFB(klas)", "SPh", "SPhP", "SPhS", "SPhV", "Sprache", "Sprachkunst", "SR", "SR", "SRIC", "SS", "SSL", "SStor", "SStor", "ST", "Stadion", "STh", "Storiografia", "StudClas", "StudLang", "StudMagr", "StudMed", "StudMon", "StudOv", "StudPat", "StudPhil", "StudPhilon", "StudPic", "StudRom", "StudRomagn", "StudSal", "StudStor", "StudUmanistPiceni", "StudUrb(B)", "Sudhoffs Archiv", "Sungraphe", "Swiatowit", "SyllClass", "Symbolon", "Syntaktika", "Syntaktika", "Synthesis", "Syria", "SZ", "SZG", "SZG", "T&C", "T&MByz", "T&P", "T&V", "Tabona", "Talanta", "Talia dixit", "TAPhA", "TAPhS", "TCLA", "Teiresias", "Tekmeria", "Tekmeria", "Temenos", "Tempora", "Tempus", "TF", "TG", "Th&Ph", "Theoria", "Thetis", "ThLZ", "Thomist", "ThQ", "ThRdschau", "ThRev", "ThS", "ThZ", "TJ", "TLS", "TMon", "Topoi (Dordrecht)", "Topoi (Lyon)", "TPhS", "Traditio", "TRANEL", "Trivium", "Tyche", "TZ", "UF", "Uranie", "V&F", "Vallesia", "VChr", "VDI", "VDI", "Veleia", "Verbum", "Vergilius", "VetChr", "Viator", "Vichiana", "Vivarium", "Vivens Homo", "VL", "Voces", "VoxLat", "VoxP", "VR", "VT", "W&D", "WHB", "WJA", "WO", "Word", "WS", "XAnt", "YClS", "YJC", "YLG", "ZAC", "ZAC", "ZAnt", "ZAnt", "ZÄS", "ZATW", "ZDMG", "Zephyrus", "ZfA", "ZKG", "ZKTh", "ZNTW", "ZPalV", "ZPE", "ZPhF", "ZRG", "ZRGG", "ZRPh", "ZS") + + Dim oDocument As Object + Dim iReturnCode As Integer + + + If Check(mJournal) = 7 Then + Exit Sub + End If + + iReturnCode = MsgBox("Cette macro vous permet d'abréger les titres des revues citées en suivant les normes de l'Année Philologique." &_ + vbNewLine & vbNewLine & "Attention, il est recommandé d'appliquer les normes de votre éditeur (éventuellement grâce à une macro dédiée) avant celles de l'Année Philologique." &_ + vbNewLine & vbNewLine & "Voulez-vous continuer ?",_ + 1, mJournal) + If iReturnCode = 2 Then + Exit Sub + Endif + + oDocument = ThisComponent + Abbreviate (oDocument, mTitreLong(), mAbrev(), mJournal, bExpandFirstCitation) + + End Sub + +Function getOccurrencesCount(oScope As Object) As Variant + Const sZoteroItemIDRegex As String = """itemData"":\{""id"":[0-9]+" + Const nZoteroItemIDCharsToIgnore As Integer = 17 + Const sZoteroItemInfoRegex As String = "[^}]+\}" + Const nZoteroItemInfoCharsToIgnore As Integer = 2 + + Dim oZoteroNotes As Object + Dim sZoteroNoteContent As String + Dim iZoteroNote As Integer + Dim sItemIDRegex As String + Dim vIDBiblioNboccMap(0, 2) As Variant + Dim iMap As Integer + Dim oItemIDSearch As Object + Dim aIDSearchOptions As New com.sun.star.util.SearchOptions + Dim oItemInfoSearch As Object + Dim aInfoSearchOptions As New com.sun.star.util.SearchOptions + Dim aIDSearchResult As Object + Dim aTitleSearchResult As Object + Dim iItemIDMatch As Integer + Dim sItemID As String + Dim sItemInfo As String + Dim vSortedItemMap As Variant + + oItemIDSearch = CreateUnoService("com.sun.star.util.TextSearch") + With aIDSearchOptions + .algorithmType = com.sun.star.util.SearchAlgorithms.REGEXP + .searchString = sZoteroItemIDRegex + End With + oItemIDSearch.setOptions(aIDSearchOptions) + + oItemInfoSearch = CreateUnoService("com.sun.star.util.TextSearch") + With aInfoSearchOptions + .algorithmType = com.sun.star.util.SearchAlgorithms.REGEXP + .searchString = sZoteroItemInfoRegex + End With + oItemInfoSearch.setOptions(aInfoSearchOptions) + + oZoteroNotes = oScope.getReferenceMarks() + For iZoteroNote = 0 To oZoteroNotes.getCount()-1 + sZoteroNoteContent = oZoteroNotes.getByIndex(iZoteroNote).Name + aIDSearchResult = oItemIDSearch.searchForward(sZoteroNoteContent, 0, Len(sZoteroNoteContent)-1) + Do While aIDSearchResult.subRegExpressions > 0 + iItemIDMatch = aIDSearchResult.subRegExpressions - 1 + sItemID = extractMatchingString(sZoteroNoteContent, aIDSearchResult, iItemIDMatch, nZoteroItemIDCharsToIgnore) + aTitleSearchResult = oItemInfoSearch.searchForward(sZoteroNoteContent, aIDSearchResult.endOffset(iItemIDMatch), Len(sZoteroNoteContent)-1) + sItemInfo = extractMatchingString(sZoteroNoteContent, aTitleSearchResult, 0, nZoteroItemInfoCharsToIgnore) + AddItemToMap(vIDBiblioNboccMap, sItemID, sItemInfo) + aIDSearchResult = oItemIDSearch.searchForward(sZoteroNoteContent, aIDSearchResult.endOffset(iItemIDMatch)+1, Len(sZoteroNoteContent)-1) + Loop + Next iZoteroNote + + getOccurrencesCount = sortMapByNbOccurrences(vIDBiblioNboccMap) + +End Function + + +Function getBibliographySection() As Object +Dim oTextSections As Object +Dim oTextSectionNames As Object +Dim iTextSection As Integer +Const sZoteroBibliographyID As String = "ZOTERO_BIBL" + +On Error Goto + +oTextSections = ThisComponent.getTextSections() +oTextSectionNames = oTextSections.getElementNames() +For iTextSection = 0 to UBound(oTextSectionNames) + If InStr(1, oTextSectionNames(iTextSection), sZoteroBibliographyID, 1) = 1 Then + getBibliographySection = oTextSections.getByIndex(iTextSection) + End If +Next iTextSection + +End Function + +Function getBibliographyCursor(sBibliographyHeaderStyle As String) As Object + Dim oSearch As Object + Dim oCursor As Object + + oSearch = ThisComponent.createSearchDescriptor() + oSearch.SearchString = sBibliographyHeaderStyle + oSearch.SearchWords = TRUE + oSearch.SearchRegularExpression = FALSE + oSearch.SearchStyles = TRUE + On Error GoTo 0 + oCursor = ThisComponent.Text.createTextCursorByRange(ThisComponent.findFirst(oSearch)) + oCursor.collapseToEnd() + oCursor.gotoNextParagraph(False) + + getBibliographyCursor = oCursor +End Function + +Sub SetFontSlantToString(sString As String, vFontSlant As Variant) + Dim oDocument As Object + Dim oSearch As Object, oReplace As Object, oResult As Object + Dim oFound As Object, oFoundCursor As Object + Dim n As Integer + + oDocument = ThisComponent + oSearch = oDocument.createSearchDescriptor + oReplace = oDocument.createReplaceDescriptor + + oSearch.SearchString = sString + oSearch.SearchRegularExpression = FALSE + oSearch.SearchWords = TRUE + oSearch.SearchCaseSensitive = TRUE + oResult = oDocument.findAll(oSearch) + If oResult.count > 0 Then + For n = 0 To oResult.count - 1 + oFound = oResult.getByIndex(n) + oFoundCursor = oFound.Text.createTextCursorByRange(oFound) + oFoundCursor.CharPosture = vFontSlant + Next n + End If +End Sub + + +Sub SetFolioToPluralForm(sFolioSingular As String, sFolioPlural As String) + Dim sFolioFindRegex As String + sFolioFindRegex = " " & sFolioSingular & "([0-9]+[rv]?)-" + Dim sFolioReplaceRegex As String + sFolioReplaceRegex = " " & sFolioPlural & "$1-" + + Dim oDocument As Object + Dim oSearch As Object, oReplace As Object, oResult As Object + + oDocument = ThisComponent + oReplace = oDocument.createReplaceDescriptor + + oReplace.SearchString = sFolioFindRegex + oReplace.SearchRegularExpression = TRUE + oReplace.SearchAll = TRUE + oReplace.ReplaceString = sFolioReplaceRegex + oDocument.replaceAll(oReplace) +End Sub + + +Sub RestoreNonBreakableSpaces ' Must be called before macros that involve formatting of the targeted strings. + Dim sStringsWithBreakableSpaceFirstSpace() As String + sStringsWithBreakableSpaceFirstSpace = Array(" ;", " :", " !", " ?") + Dim sStringsWithBreakableSpaceSecondSpace() As String + sStringsWithBreakableSpaceSecondSpace = Array(" n. ", " no ", " nos ", " p. ", " f. ", " ff. ", " l. ") + Dim oDocument As Object + Dim oReplace As Object, oResult As Object + Dim iString As Integer + Dim sStringToReplace As String + + oDocument = ThisComponent + oReplace = oDocument.createReplaceDescriptor + + For iString = 0 To UBound(sStringsWithBreakableSpaceFirstSpace) + sStringToReplace = sStringsWithBreakableSpaceFirstSpace(iString) + oReplace.SearchString = sStringToReplace + oReplace.SearchRegularExpression = FALSE + oReplace.SearchAll = TRUE + oReplace.ReplaceString = Replace(sStringToReplace, " ", " ") ' First space is breakable, second is non-breakable. + oDocument.replaceAll(oReplace) + Next iString + For iString = 0 To UBound(sStringsWithBreakableSpaceSecondSpace) + sStringToReplace = sStringsWithBreakableSpaceSecondSpace(iString) + oReplace.SearchString = sStringToReplace + oReplace.SearchRegularExpression = FALSE + oReplace.SearchAll = TRUE + oReplace.ReplaceString = " " & Replace(sStringToReplace, " ", " ", 2) ' First space is breakable, second is non-breakable. + oDocument.replaceAll(oReplace) + Next iString +End Sub + +Sub ReplaceString(sToReplace As String, sReplacement As String, bIsRegex As Boolean) + Dim oReplace As Object + + oReplace = ThisComponent.createSearchDescriptor() + oReplace.SearchString = sToReplace + oReplace.SearchRegularExpression = bIsRegex + oReplace.ReplaceString = sReplacement + ThisComponent.replaceAll(oReplace) +End Sub + + diff --git a/Macros/LibreOffice/ApresZotero/ApZotGlobalOptions.xba b/Macros/LibreOffice/ApresZotero/ApZotGlobalOptions.xba new file mode 100644 index 0000000..f5c62ea --- /dev/null +++ b/Macros/LibreOffice/ApresZotero/ApZotGlobalOptions.xba @@ -0,0 +1,40 @@ + + +REM ***** BASIC ***** + +'************************************************************************ +'* Copyright 2021 by Bastien Dumont (bastien.dumont@posteo.net) +'* +'* This file is part of the ApresZotero library. +'* +'* ApresZotero is free software: you can redistribute it and/or modify +'* it under the terms of the GNU General Public License as published by +'* the Free Software Foundation, either version 3 of the License, or +'* (at your option) any later version. +'* +'* ApresZotero is distributed in the hope that it will be useful, +'* but WITHOUT ANY WARRANTY; without even the implied warranty of +'* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +'* GNU General Public License for more details. +'* +'* You should have received a copy of the GNU General Public License +'* along with ApresZotero. If not, see <https://www.gnu.org/licenses/>. +'* +'************************************************************************ + +Public Const nExponentCharSizePercentage As Integer = 33 +Public Const nExponentCharHeightPercentage As Integer = 58 +Public Const nBigZoomFactor As Integer = 350 +Public Const nMaxArray As Integer = 1002 +Public Const sSeparatorForListOfAbbreviations As String = "|" +Public Const sReplacementSeparatorForListOfAbbreviations As String = " : " +Public Const sAbbrevRefSeparator As String = " : " +Public Const sAbbrevRefSuffix As String = "." +Public Const sFirstCitationPrefix As String = ", cité n. " +Public Const nDefaultCharHeight As Integer = 12 +Public Const sGreekTextRegex As String = "[ΑΖΕΡΤΨΥΙΟΠΘΣΔΦΓΗϞΚΛΜΩΞΧϐΒΝαζερτψυιοπθσδφγηϟκλμωξχϐβνϡϠ]*[αζερτψυιοπθσδφγηϟκλμωξχϐβνϡϠ] ?[,;:!.·]?" +Public Const GreekFont As String = "IFAO-Grec Unicode" +Public Const sBibliographyStyleName As String = "Bibliography 1" +Public Const sRectoVersoRegex As String = "[0-9]+[rv](-v)?" +Public Const sNumberOrIssueRegex As String = " nos? " ' last character is a non-breakable space + diff --git a/Macros/LibreOffice/ApresZotero/ApZotRevues.xba b/Macros/LibreOffice/ApresZotero/ApZotRevues.xba new file mode 100644 index 0000000..cc980a5 --- /dev/null +++ b/Macros/LibreOffice/ApresZotero/ApZotRevues.xba @@ -0,0 +1,85 @@ + + +REM ***** BASIC ***** + +'************************************************************************ +'* Copyright 2021 by Bastien Dumont (bastien.dumont@posteo.net) +'* +'* This file is part of the ApresZotero library. +'* +'* ApresZotero is free software: you can redistribute it and/or modify +'* it under the terms of the GNU General Public License as published by +'* the Free Software Foundation, either version 3 of the License, or +'* (at your option) any later version. +'* +'* ApresZotero is distributed in the hope that it will be useful, +'* but WITHOUT ANY WARRANTY; without even the implied warranty of +'* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +'* GNU General Public License for more details. +'* +'* You should have received a copy of the GNU General Public License +'* along with ApresZotero. If not, see <https://www.gnu.org/licenses/>. +'* +'************************************************************************ + +Option Compatible +Option Explicit + +Sub REB + + Const mJournal As String = "REB" + Const sCitedPrefix As String = ", cité n. " + Dim mTitreLong() As String + mTitreLong = Array("Acta Sanctorum", "Acta Conciliorum Oecumenicorum", "Analecta Bollandiana", "Archives de l'Orient chrétien", "Byzantinische Forschungen", "Bibliotheca Hagiographica Graeca", "Byzantine and Modern Greek Studies", "Byzantinisch-Neugriechische Jahrbücher", "Byzantinoslavica", "Byzantion", "Byzantinische Zeitschrift", "Cahiers Archéologiques", "Corpus Christianorum, Series Graeca", "Corpus Fontium Historiae Byzantinae", "Clavis Patrum Graecorum", "Corpus Scriptorum Christianorum Orientalium", "Corpus Scriptorum Historiae Byzantinae", "Dictionnaire d'Archéologie Chrétienne et de Liturgie", "Δελτίον τῆς Χριστιανικῆς καὶ Ἀρχαιολογικῆς Ἑταιρείας", "Dictionnaire d’Histoire et de Géographie Ecclésiastiques", "Dumbarton Oaks Papers", "Dictionnaire de Théologie Catholique", "Ἐπετηρὶς Ἑταιρείας Βυζαντινῶν Σπουδῶν", "Échos d'Orient", "Greek, Roman and Byzantine Studies", "Известия Русскаго Археолгическаго Института в Константинополие", "Jahrbuch der Österreichischen Byzantinistik", "Lexikon zur byzantinischen Gräzität", "Lexikon für Theologie und Kirche", "Μεσαιωνικὴ Βιβλιοθήκη", "Medioevo Greco", "Monumenta Germaniae Historica", "F. Miklosich, J. Müller (éd.), Acta et diplomata", "Νέος Ἑλληνομνήμων", "Orientalia Christiana Analecta", "Orientalia Christiana Periodica", "The Oxford Dictionary of Byzantium, I-III, New York – Oxford 1991", "Prosopography of the Byzantine Empire I (641-867)", "Prosopography of the Byzantine World", "Patrologia Graeca", "Patrologie grecque", "Patrologia Latina", "Patrologie latine", "Prosopographisches Lexikon der Palaiologenzeit", "Prosopographie der mittelbyzantinischen Zeit (641-1025)", "Patrologia Orientalis", "Patrologie orientale", "Patristische Texte und Studien", "Revue des Études Byzantines", "Revue des Études Grecques", "Revue des Études Sud-Est Européennes", "Repertorium der griechischen Kopisten", "Rivista di Studi Bizantini e Neoellenici", "Rivista di Studi Bizantini e Slavi", "Studies in Byzantine Sigillography", "Sources Chrétiennes", "Synaxarium Ecclesiae Constantinopolitanae", "Θρησκευτικὴ καὶ Ἠθικὴ Ἐγκυκλοπαιδεία", "Tabula Imperii Byzantini", "Travaux et Mémoires", "Византийский Временник") + Dim mAbrev() As String + mAbrev= Array("AASS", "ACO", "An. Boll.", "AOC", "BF", "BHG", "BMGS", "BNJ", "BS", "Byz.", "BZ", "CA", "CCSG", "CFHB", "CPG", "CSCO", "CSHB", "DACL", "DChAE", "DHGE", "DOP", "DTC", "EEBS", "EO", "GRBS", "IRAIK", "JÖB", "LBG", "LTK", "MB", "MEG", "MGH", "MM", "NE", "OCA", "OCP", "ODB", "PBE", "PBW", "PG", "PG", "PL", "PL", "PLP", "PMBZ", "PO", "PO", "PTS", "REB", "REG", "RESEE", "RGK", "RSBN", "RSBS", "SBS", "SC", "Syn. CP", "ThEE", "TIB", "TM", "VV") + Const sLineRefRegex As String = ", l\.[  ]([A-D0-9-]+)" + + Dim oDocument As Object + Dim oSearch As Object, oReplace As Object, oResult As Object + Dim oFound As Object, oFoundCursor As Object + Dim n As Integer + Dim iReturnCode As Integer + + ' Initialisation des objets utilisés dans plusieurs blocs de code + oDocument = ThisComponent + oSearch = oDocument.createSearchDescriptor + oReplace = oDocument.createReplaceDescriptor + + ' Vérifier que le document n'a plus à être modifié. + If Check(mJournal) = 7 Then + Exit Sub + End If + + ' Abrègement des titres de revues + Abbreviate (oDocument, mTitreLong(), mAbrev(), mJournal, False) + AbbrevAnnee_Philologique(True) + + ' Numéros de lignes en exposant sans "l. " + oSearch.SearchString = sLineRefRegex + oSearch.SearchRegularExpression = TRUE + oResult = oDocument.findAll(oSearch) + For n = 0 To oResult.count - 1 + oFound = oResult.getByIndex(n) + oFoundCursor = oFound.Text.createTextCursorByRange(oFound) + oFoundCursor.CharEscapement = nExponentCharSizePercentage + oFoundCursor.CharEscapementHeight = nExponentCharHeightPercentage + Next n + ReplaceString(sLineRefRegex, "$1", TRUE) + + SetFolioToPluralForm("f. ", "ff. ") + + ReplaceString(" ", " ", FALSE) ' Replace narrow non breakable spaces (automatically generated by Zotero) by simple non breakable spaces. + ReplaceString(" - ", "-", FALSE) + + SetStringPartToExponent(oDocument, sRectoVersoRegex, "[rv](-v)?") + SetStringPartToExponent(oDocument, sNumberOrIssueRegex, "os?") + + SetFontSlantToString("CPG", com.sun.star.awt.FontSlant.ITALIC) + SetFontSlantToString("BHG", com.sun.star.awt.FontSlant.ITALIC) + + HandleItemsInBibliography("Titre Liste des abréviations") + +end sub + + diff --git a/Macros/LibreOffice/ApresZotero/ApZotUtilities.xba b/Macros/LibreOffice/ApresZotero/ApZotUtilities.xba new file mode 100644 index 0000000..e9f7431 --- /dev/null +++ b/Macros/LibreOffice/ApresZotero/ApZotUtilities.xba @@ -0,0 +1,55 @@ + + +REM ***** BASIC ***** + +'************************************************************************ +'* Copyright 2021 by Bastien Dumont (bastien.dumont@posteo.net) +'* +'* This file is part of the ApresZotero library. +'* +'* ApresZotero is free software: you can redistribute it and/or modify +'* it under the terms of the GNU General Public License as published by +'* the Free Software Foundation, either version 3 of the License, or +'* (at your option) any later version. +'* +'* ApresZotero is distributed in the hope that it will be useful, +'* but WITHOUT ANY WARRANTY; without even the implied warranty of +'* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +'* GNU General Public License for more details. +'* +'* You should have received a copy of the GNU General Public License +'* along with ApresZotero. If not, see <https://www.gnu.org/licenses/>. +'* +'************************************************************************ + +Sub CountOccurrencesPerReference + Dim vSortedItemMap As Variant + Dim oScope As Object + + oScope = ThisComponent + + vSortedItemMap = getOccurrencesCount(oScope) + PrintMap(vSortedItemMap) +End Sub + + Sub ChangeGreekFont + Dim oSearch As Object + Dim oDocument As Object + Dim oResult As Object + Dim i As Integer + Dim oFound As Object + Dim oFoundCursor As Object + + oDocument = ThisComponent + oSearch = oDocument.createSearchDescriptor + oSearch.SearchString = sGreekTextRegex + oSearch.SearchRegularExpression = TRUE + oResult = oDocument.findAll(oSearch) + For i = 0 To oResult.count - 1 + oFound = oResult.getByIndex(i) + oFoundCursor = oFound.Text.createTextCursorByRange(oFound) + oFoundCursor.CharFontName = GreekFont + Next i + + End Sub + diff --git a/Macros/LibreOffice/ApresZotero/dialog.xlb b/Macros/LibreOffice/ApresZotero/dialog.xlb new file mode 100644 index 0000000..e75d026 --- /dev/null +++ b/Macros/LibreOffice/ApresZotero/dialog.xlb @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Macros/LibreOffice/ApresZotero/script.xlb b/Macros/LibreOffice/ApresZotero/script.xlb new file mode 100644 index 0000000..ee01107 --- /dev/null +++ b/Macros/LibreOffice/ApresZotero/script.xlb @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Macros/LibreOffice/ApresZotero_LO.oxt b/Macros/LibreOffice/ApresZotero_LO.oxt new file mode 100644 index 0000000000000000000000000000000000000000..f94c43d4086eddf04e11b7b9ff79c6ec4d30d762 GIT binary patch literal 30247 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 literal 0 HcmV?d00001