Compare commits

..

15 Commits
ueb04 ... main

Author SHA1 Message Date
47a4af1cc0
add .gitignore 2025-01-16 11:30:29 +01:00
61b60cfbaf
add .gitignore 2025-01-15 21:03:49 +01:00
0nlineSam
a2a1ede6b7 Updated jabref to hash 6af91b9 2025-01-11 12:30:11 +01:00
b157c2c194
shell.nix: switch to stable
build with JavaFX broken on unstable
2025-01-11 09:22:05 +01:00
b094db4615
shell.nix: pinned nixpkgs 2025-01-11 08:50:36 +01:00
0nlineSam
a81d9ed65e Import dicegame 2025-01-09 12:22:17 +01:00
cfecc02cad
import news example b 2024-12-07 12:09:18 +01:00
c41072785c
import news example 2024-12-07 10:30:42 +01:00
64c1d0e743
import ueb05_news_example 2024-11-24 17:07:25 +01:00
73a279f24a
shell.nix: docs 2024-11-24 14:15:11 +01:00
944138280d
shell.nix: Gradle runs JabRef 🚀 2024-11-24 13:06:49 +00:00
1c34fe3715
shell.nix: IntelliJ runs JabRef 🚀 2024-11-24 13:04:42 +00:00
154e774296
import jabref with submodules 2024-11-23 18:45:52 +01:00
c5d4d2d059
add shell.nix 2024-11-23 18:11:20 +01:00
a150ed4958
rm built files 2024-11-23 18:10:57 +01:00
11763 changed files with 1141431 additions and 39417 deletions

2
.idea/misc.xml generated
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

Binary file not shown.

View File

@ -1,3 +1,2 @@
/bin/
/out/
/classes/

View File

@ -1,7 +1,8 @@
package fr.enssat.BoulderDash.controllers;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
import fr.enssat.BoulderDash.models.DirtModel;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
/**
@ -61,7 +62,7 @@ public class BoulderAndDiamondController implements Runnable {
DisplayableElementModel elementModel = this.levelModel.getGroundLevelModel()[x][y];
if(elementModel == null) {
elementModel = DisplayableElementModel.newDirtModel();
elementModel = new DirtModel();
}
String spriteName = elementModel.getSpriteName();

View File

@ -2,6 +2,7 @@ package fr.enssat.BoulderDash.controllers;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
import fr.enssat.BoulderDash.controllers.NavigationBetweenViewController;
import fr.enssat.BoulderDash.views.MenuView;
import fr.enssat.BoulderDash.views.GameView;
@ -85,7 +86,7 @@ public class GameController implements ActionListener {
this.gameView.dispose();
if(source.equals("restart")){
this.levelModel = LevelModel.createGameLevelModel(this.navigationBetweenViewController.getPickedLevelIdentifier(), audioLoadHelper);
this.levelModel = new LevelModel(this.navigationBetweenViewController.getPickedLevelIdentifier(), audioLoadHelper);
this.gameView = new GameView(this, levelModel);
this.gameView.setVisible(true);
}

View File

@ -1,7 +1,9 @@
package fr.enssat.BoulderDash.controllers;
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.controllers.RockfordUpdateController;
import fr.enssat.BoulderDash.controllers.BoulderAndDiamondController;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
import java.awt.event.KeyEvent;

View File

@ -9,6 +9,7 @@ import fr.enssat.BoulderDash.helpers.LevelSaveHelper;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.views.HelpView;
import fr.enssat.BoulderDash.views.LevelEditorView;
import fr.enssat.BoulderDash.controllers.NavigationBetweenViewController;
import javax.swing.*;

View File

@ -6,6 +6,8 @@ import java.awt.event.ActionListener;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.views.MenuView;
import fr.enssat.BoulderDash.controllers.LevelEditorController;
import fr.enssat.BoulderDash.controllers.GameController;
/**
* Controller to navigate between the different views
@ -48,7 +50,7 @@ public class NavigationBetweenViewController implements ActionListener {
case "editor":
// New blank model for editor
this.levelModelForEditor = LevelModel.createEditorLevelModel(audioLoadHelper);
this.levelModelForEditor = new LevelModel(audioLoadHelper);
this.levelEditorController = new LevelEditorController(this.levelModelForEditor, this);
this.levelEditorController.getLevelEditorView().setVisible(true);
@ -64,7 +66,7 @@ public class NavigationBetweenViewController implements ActionListener {
// Reinit the levelModelForGame...
pickedLevelIdentifier = this.menuView.getLevelIdentifier();
this.levelModelForGame = LevelModel.createGameLevelModel(pickedLevelIdentifier, audioLoadHelper);
this.levelModelForGame = new LevelModel(pickedLevelIdentifier, audioLoadHelper);
this.gameController = new GameController(levelModelForGame, audioLoadHelper, this);
if (levelEditorController != null) {

View File

@ -2,8 +2,17 @@ package fr.enssat.BoulderDash.helpers;
import fr.enssat.BoulderDash.exceptions.UnknownModelException;
import fr.enssat.BoulderDash.models.displayableElement.RockfordModel;
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
import fr.enssat.BoulderDash.helpers.ModelConvertHelper;
import fr.enssat.BoulderDash.models.ExpandingWallModel;
import fr.enssat.BoulderDash.models.RockfordModel;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
import fr.enssat.BoulderDash.models.EmptyModel;
import fr.enssat.BoulderDash.models.BrickWallModel;
import fr.enssat.BoulderDash.models.BoulderModel;
import fr.enssat.BoulderDash.models.DiamondModel;
import fr.enssat.BoulderDash.models.DirtModel;
import fr.enssat.BoulderDash.models.MagicWallModel;
import fr.enssat.BoulderDash.models.SteelWallModel;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@ -249,8 +258,8 @@ public class LevelLoadHelper {
* @param lineIndex Position in line (vertical axis)
*/
private DisplayableElementModel constructGridElement(String spriteName, int rowIndex, int lineIndex, boolean convertible) throws UnknownModelException {
ModelConvertHelper modelConvert = ModelConvertHelper.getInstance();
DisplayableElementModel element = modelConvert.toModel(spriteName, convertible);
ModelConvertHelper modelConvert = new ModelConvertHelper();
DisplayableElementModel element = modelConvert.toModel(spriteName, convertible);
// Custom actions?
switch (spriteName) {

View File

@ -3,6 +3,8 @@ package fr.enssat.BoulderDash.helpers;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -15,7 +17,8 @@ import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
import fr.enssat.BoulderDash.models.DirtModel;
/**
@ -317,13 +320,13 @@ public class LevelSaveHelper {
// Null?
if(curGridElement == null) {
curGridElement = DisplayableElementModel.newDirtModel();
curGridElement = new DirtModel();
}
// Retrieve current values
groupValue = "field";
groupValue = curGridElement.getGroupName();
nameValue = curGridElement.getSpriteName();
stateValue = "initial";
stateValue = curGridElement.getStateValue();
convertibleValue = curGridElement.isConvertible() ? "1" : "0";
// Create sprite XML element

View File

@ -2,41 +2,34 @@ package fr.enssat.BoulderDash.helpers;
import fr.enssat.BoulderDash.exceptions.UnknownModelException;
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
import fr.enssat.BoulderDash.models.ExpandingWallModel;
import fr.enssat.BoulderDash.models.RockfordModel;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
import fr.enssat.BoulderDash.models.EmptyModel;
import fr.enssat.BoulderDash.models.BrickWallModel;
import fr.enssat.BoulderDash.models.BoulderModel;
import fr.enssat.BoulderDash.models.DiamondModel;
import fr.enssat.BoulderDash.models.DirtModel;
import fr.enssat.BoulderDash.models.MagicWallModel;
import fr.enssat.BoulderDash.models.SteelWallModel;
/**
* ModelConvertHelper
*
* Provides model conversion services.
*
* @author Valerian Saliou <valerian@valeriansaliou.name>
* @since 2015-06-22
*/
public class ModelConvertHelper {
/**
* Holds the single instance of the class.
*/
private static ModelConvertHelper instance = null;
/**
* Class constructor
*/
private ModelConvertHelper() {
public ModelConvertHelper() {
// Nothing done.
}
/**
* Gets the single instance of the ModelConvertHelper.
* Creates the instance if it doesn't exist.
*
* @return The single instance of the ModelConvertHelper.
*/
public static synchronized ModelConvertHelper getInstance() {
if (instance == null) {
instance = new ModelConvertHelper();
}
return instance;
}
/**
* Gets the model associated to the string
*
@ -50,47 +43,47 @@ public class ModelConvertHelper {
switch (spriteName) {
case "black":
case "Black":
element = DisplayableElementModel.newEmptyModel();
element = new EmptyModel();
break;
case "boulder":
case "Boulder":
element = DisplayableElementModel.newBoulderModel(isConvertible);
element = new BoulderModel(isConvertible);
break;
case "brickwall":
case "Brick Wall":
element = DisplayableElementModel.newBrickWallModel();
element = new BrickWallModel();
break;
case "diamond":
case "Diamond":
element = DisplayableElementModel.newDiamondModel();
element = new DiamondModel();
break;
case "dirt":
case "Dirt":
element = DisplayableElementModel.newDirtModel();
element = new DirtModel();
break;
case "magicwall":
case "Magic Wall":
element = DisplayableElementModel.newMagicWallModel();
element = new MagicWallModel();
break;
case "rockford":
case "Rockford":
element = DisplayableElementModel.newRockfordModel();
element = new RockfordModel();
break;
case "steelwall":
case "Steel Wall":
element = DisplayableElementModel.newSteelWallModel();
element = new SteelWallModel();
break;
case "expandingwall":
case "Expanding Wall":
element = DisplayableElementModel.newExpandingWallModel();
element = new ExpandingWallModel();
break;
default:

View File

@ -0,0 +1,48 @@
package fr.enssat.BoulderDash.models;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* BoulderModel
*
* Represents the boulders.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class BoulderModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static String collideSound;
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "boulder";
isDestructible = false;
canMove = true;
impactExplosive = false;
animate = true;
priority = 2;
collideSound = "die";
}
/**
* Class constructor
*/
public BoulderModel(boolean convertible) {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, false, collideSound, convertible);
this.loadSprite(spriteName);
}
public BoulderModel() {
this(false);
}
}

View File

@ -0,0 +1,46 @@
package fr.enssat.BoulderDash.models;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* BrickWallModel
*
* Represents the brick wall in the game.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class BrickWallModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static boolean falling;
private static String collideSound;
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "brickwall";
isDestructible = true;
canMove = false;
impactExplosive = false;
animate = false;
priority = 3;
falling = false;
collideSound = "touch";
}
/**
* Class constructor
*/
public BrickWallModel() {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
this.loadSprite(spriteName);
}
}

View File

@ -0,0 +1,47 @@
package fr.enssat.BoulderDash.models;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* CursorModel
*
* Represents the field cursor pointer.
*
* @author Valerian Saliou <valerian@valeriansaliou.name>
* @since 2015-06-22
*/
public class CursorModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static boolean falling;
private static String collideSound;
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "cursor";
isDestructible = false;
canMove = false;
impactExplosive = false;
animate = false;
priority = 0;
falling = false;
collideSound = null;
}
/**
* Class constructor
*/
public CursorModel() {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
this.loadSprite(spriteName);
}
}

View File

@ -0,0 +1,90 @@
package fr.enssat.BoulderDash.models;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* DiamondModel
*
* Represents a diamond in the game.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class DiamondModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static String collideSound;
private long previousTime;
private int currentFrame;
private final int SIZ_X_OF_SPRITE = 16;
private final int SIZ_Y_OF_SPRITE = 16;
private long speed;
private ArrayList<BufferedImage> framesDiamond;
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "diamond";
isDestructible = true;
canMove = true;
impactExplosive = false;
animate = true;
priority = 0;
collideSound = "coin";
}
/**
* Class constructor
*/
public DiamondModel() {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, false, collideSound);
this.initSprites();
}
/**
* Updates the sprite (animation loop)
*
* @param time Current time
*/
public void update(long time) {
if (time - previousTime >= speed) {
// Update the animation
previousTime = time;
try {
this.currentFrame += 1;
this.setSprite(framesDiamond.get(this.currentFrame));
} catch (IndexOutOfBoundsException e) {
this.currentFrame = 0;
}
}
}
/**
* Initialize the sprites
* This is an animated element, hence this method
*/
private void initSprites() {
/* Initialize object sprites */
this.framesDiamond = new ArrayList<BufferedImage>();
for (int i = 0; i < 8; i++) {
this.framesDiamond.add(
this.grabSprite(loadSprite(spriteName), i * 24, 0, SIZ_X_OF_SPRITE, SIZ_Y_OF_SPRITE)
);
}
}
}

View File

@ -0,0 +1,47 @@
package fr.enssat.BoulderDash.models;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* DirtModel
*
* Represents the dirt in the game.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class DirtModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static boolean falling;
private static String collideSound;
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "dirt";
isDestructible = true;
canMove = false;
impactExplosive = false;
animate = false;
priority = 0;
falling = false;
collideSound = null;
}
/**
* Class constructor
*/
public DirtModel() {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
this.loadSprite(spriteName);
}
}

View File

@ -0,0 +1,302 @@
package fr.enssat.BoulderDash.models;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* DisplayableElementModel
*
* Represents a abstract displayable element
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public abstract class DisplayableElementModel {
private static String spriteStorageFolderPath = "./res/drawable/field/";
private static String groupName;
private static String stateValue;
private boolean destructible;
private boolean moving;
private boolean animate;
private boolean impactExplosive;
private String spriteName;
private int priority;
private BufferedImage sprite;
private boolean falling;
private boolean convertible;
private String collideSound;
/**
* Static dataset
*/
static {
groupName = "field";
stateValue = "initial";
}
/**
* Class constructor
*
* @param destructible Object destructible?
* @param moving Object is moving?
* @param spriteName Object sprite name?
* @param priority Object priority?
* @param impactExplosive Object explodes on impact?
* @param animate Object can be animated?
*/
public DisplayableElementModel(boolean destructible, boolean moving, String spriteName, int priority, boolean impactExplosive, boolean animate, boolean falling, String collideSound, boolean convertible) {
this.moving = moving;
this.destructible = destructible;
this.spriteName = spriteName;
this.priority = priority;
this.animate = animate;
this.impactExplosive = impactExplosive;
this.priority = priority;
this.falling = falling;
this.convertible = convertible;
this.collideSound = collideSound;
}
public DisplayableElementModel(boolean destructible, boolean moving, String spriteName, int priority, boolean impactExplosive, boolean animate, boolean falling, String collideSound) {
this(
destructible, moving, spriteName, priority, impactExplosive, animate, falling, collideSound, false
);
}
/**
* Gets the 'destructible' value
*
* @return Whether object is destructible or not
*/
public boolean isDestructible() {
return this.destructible;
}
/**
* Gets the 'moving' value
*
* @return Whether object is moving or not
*/
public boolean isMoving() {
return this.moving;
}
/**
* Gets the group name value
*
* @return Group name value
*/
public String getGroupName() {
return this.groupName;
}
/**
* Gets the state value
*
* @return State value
*/
public String getStateValue() {
return this.stateValue;
}
/**
* Gets the sprite name value
*
* @return Sprite name value
*/
public String getSpriteName() {
return this.spriteName;
}
/**
* Gets the folder path of the sprite storage
*
* @return Folder path of the sprite storage
*/
private static String getSpriteStorageFolderPath() {
return spriteStorageFolderPath;
}
/**
* Gets the path to the sprite file in storage
*
* @return Path to the sprite file in storage
*/
public String getPathToSprite() {
return getSpriteStorageFolderPath() + getSpriteName() + ".gif";
}
/**
* Gets the priority of the object
*
* @return Object priority
*/
public int getPriority() {
return this.priority;
}
/**
* Sets the priority of the object
*
* @param priority Object priority
*/
public void setPriority(int priority) {
this.priority = priority;
}
/**
* Gets the 'animate' value
*
* @return Whether object is animated or not
*/
public boolean isAnimate() {
return this.animate;
}
/**
* Sets the 'animate' value
*
* @return animate Whether object is animated or not
*/
public void setAnimate(boolean animate) {
this.animate = animate;
}
/**
* Gets the 'impact explosive' value
*
* @return Whether object explodes on impact or not
*/
public boolean isImpactExplosive() {
return this.impactExplosive;
}
/**
* Sets the 'impact explosive' value
*
* @return impactExplosive Whether object explodes on impact or not
*/
public void setImpactExplosive(boolean impactExplosive) {
this.impactExplosive = impactExplosive;
}
/**
* Sets the sprite
*
* @param sprite Sprite object
*/
public void setSprite(BufferedImage sprite) {
this.sprite = sprite;
}
/**
* Gets the sprite
*
* @return Sprite object
*/
public BufferedImage getSprite() {
return sprite;
}
/**
* Loads the target sprite
*
* @param spriteName Sprite name
* @return Sprite object
*/
public BufferedImage loadSprite(String spriteName) {
BufferedImage sprite = null;
try {
sprite = ImageIO.read(new File("res/drawable/field/" + spriteName + ".gif"));
} catch (IOException e) {
e.printStackTrace();
}
this.sprite = sprite;
return sprite;
}
/**
* Grabs the sprite from the large image containing all the static sprites items
*
* @param spriteSheet Sprite sheet instance
* @param x Sub image horizontal offset on sprite sheet
* @param y Sub image vertical offset on sprite sheet
* @param width Sub image width on sprite sheet
* @param height Sub image height on sprite sheet
* @return Target sub image
*/
public BufferedImage grabSprite(BufferedImage spriteSheet, int x, int y, int width, int height) {
BufferedImage subImage = spriteSheet.getSubimage(x, y, width, height);
this.sprite = subImage;
return subImage;
}
/**
* Gets the falling state of the object
*
* @return Whether object is falling or not
*/
public boolean isFalling() {
return this.falling;
}
/**
* Sets the falling state of the object
*
* @param falling Whether object is falling or not
*/
public void setFalling(boolean falling) {
this.falling = falling;
}
/**
* Gets the collide sound of the object
*
* @return Collide sound
*/
public String getCollideSound() {
return this.collideSound;
}
/**
* Sets the collide sound of the object
*
* @param collideSound Collide sound
*/
public void setCollideSound(String collideSound) {
this.collideSound = collideSound;
}
/**
* Gets the convertible value of the object
*
* @return Convertible value
*/
public boolean isConvertible() {
return this.convertible;
}
/**
* Sets the convertible value of the object
*
* @param convertible Convertible value
*/
public void setConvertibleValue(boolean convertible) {
this.convertible = convertible;
}
/**
* Function to update the sprites
* @param currentTimeMillis Current time in milliseconds
*/
public void update(long currentTimeMillis) {}
}

View File

@ -0,0 +1,47 @@
package fr.enssat.BoulderDash.models;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* DoorModel
*
* Represents escape door.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class DoorModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static boolean falling;
private static String collideSound;
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "door";
isDestructible = false;
canMove = false;
impactExplosive = false;
animate = false;
priority = 0;
falling = false;
collideSound = null;
}
/**
* Class constructor
*/
public DoorModel() {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
this.loadSprite(spriteName);
}
}

View File

@ -0,0 +1,47 @@
package fr.enssat.BoulderDash.models;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* EmptyModel
*
* Represents "nothing".
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class EmptyModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static boolean falling;
private static String collideSound;
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "black";
isDestructible = false;
canMove = false;
impactExplosive = false;
animate = false;
priority = 0;
falling = false;
collideSound = null;
}
/**
* Class constructor
*/
public EmptyModel() {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
this.loadSprite(spriteName);
}
}

View File

@ -0,0 +1,46 @@
package fr.enssat.BoulderDash.models;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* ExpandingWallModel
*
* Represents a ExpandingWall in the game.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class ExpandingWallModel extends DisplayableElementModel {
private static String spriteName;
private static boolean destructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static boolean falling;
private static String collideSound;
/*
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "expandingwall";
destructible = false;
canMove = false;
impactExplosive = false;
animate = false;
priority = 10;
falling = false;
collideSound = null;
}
/**
* Class constructor
*/
public ExpandingWallModel() {
super(destructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
this.loadSprite(spriteName);
}
}

View File

@ -5,9 +5,16 @@ import fr.enssat.BoulderDash.exceptions.UnknownModelException;
import fr.enssat.BoulderDash.helpers.LevelLoadHelper;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
import fr.enssat.BoulderDash.helpers.ModelConvertHelper;
import fr.enssat.BoulderDash.models.displayableElement.CursorModel;
import fr.enssat.BoulderDash.models.displayableElement.DisplayableElementModel;
import fr.enssat.BoulderDash.models.displayableElement.RockfordModel;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
import fr.enssat.BoulderDash.models.RockfordModel;
import fr.enssat.BoulderDash.models.GameInformationModel;
import fr.enssat.BoulderDash.models.SteelWallModel;
import fr.enssat.BoulderDash.models.EmptyModel;
import fr.enssat.BoulderDash.models.DiamondModel;
import fr.enssat.BoulderDash.models.DoorModel;
import fr.enssat.BoulderDash.models.DirtModel;
import fr.enssat.BoulderDash.models.ExpandingWallModel;
import fr.enssat.BoulderDash.models.CursorModel;
import java.awt.image.BufferedImage;
import java.util.Observable;
@ -41,11 +48,6 @@ public class LevelModel extends Observable implements Runnable {
private boolean gamePaused;
// Are we in editor or game mode ?
private String mode;
/**
* Gets the single instance of the ModelConvertHelper.
*/
private ModelConvertHelper modelConverter = ModelConvertHelper.getInstance();
/**
* Sprite animation thread
@ -64,7 +66,7 @@ public class LevelModel extends Observable implements Runnable {
* @param audioLoadHelper Audio load helper
* @param mode Instance mode
*/
private LevelModel(String levelName, AudioLoadHelper audioLoadHelper, String mode) {
public LevelModel(String levelName, AudioLoadHelper audioLoadHelper, String mode) {
this.levelName = levelName;
this.audioLoadHelper = audioLoadHelper;
this.gamePaused = false;
@ -77,7 +79,7 @@ public class LevelModel extends Observable implements Runnable {
this.sizeWidth = this.levelLoadHelper.getWidthSizeValue();
this.sizeHeight = this.levelLoadHelper.getHeightSizeValue();
this.cursorModel = DisplayableElementModel.newCursorModel();
this.cursorModel = new CursorModel();
this.gameInformationModel = new GameInformationModel(this.levelLoadHelper.getDiamondsToCatch());
this.createLimits();
@ -88,50 +90,39 @@ public class LevelModel extends Observable implements Runnable {
}
}
/**
* Creates LevelModel for existing level
*
* @param levelName Level name
* @param audioLoadHelper Audio load helper
* @param mode Instance mode
*/
public static LevelModel createExistingLevelModel(String levelName, AudioLoadHelper audioLoadHelper, String mode) {
return new LevelModel(levelName, audioLoadHelper, mode);
}
/**
* Creates LevelModel (game mode)
* Class constructor
*
* @param levelName Level name
* @param audioLoadHelper Audio load helper
*/
public static LevelModel createGameLevelModel(String levelName, AudioLoadHelper audioLoadHelper) {
return new LevelModel(levelName, audioLoadHelper, "game");
public LevelModel(String levelName, AudioLoadHelper audioLoadHelper) {
this(levelName, audioLoadHelper, "game");
}
/**
* Creates LevelModel (editor mode)
* Class constructor (editor mode)
*
* @param audioLoadHelper Audio load helper
*/
public static LevelModel createEditorLevelModel(AudioLoadHelper audioLoadHelper) {
LevelModel levelModel = new LevelModel(null, audioLoadHelper, "editor");
levelModel.gameRunning = false;
public LevelModel(AudioLoadHelper audioLoadHelper) {
this.audioLoadHelper = audioLoadHelper;
this.gameRunning = false;
this.mode = "editor";
levelModel.sizeWidth = 25 + 2;
levelModel.sizeHeight = 25 + 2;
this.sizeWidth = 25 + 2;
this.sizeHeight = 25 + 2;
// Generate dirt
levelModel.groundGrid = new DisplayableElementModel[levelModel.sizeWidth][levelModel.sizeHeight];
this.groundGrid = new DisplayableElementModel[this.sizeWidth][this.sizeHeight];
for (int x = 0; x < levelModel.sizeWidth; x++) {
for (int y = 0; y < levelModel.sizeHeight; y++) {
levelModel.groundGrid[x][y] = DisplayableElementModel.newDirtModel();
for (int x = 0; x < this.sizeWidth; x++) {
for (int y = 0; y < this.sizeHeight; y++) {
this.groundGrid[x][y] = new DirtModel();
}
}
levelModel.createLimits();
return levelModel;
this.createLimits();
}
/**
@ -159,12 +150,12 @@ public class LevelModel extends Observable implements Runnable {
int maxHeight = this.sizeHeight - 1;
for (int x = 0; x < this.sizeWidth; x++) {
this.groundGrid[x][0] = DisplayableElementModel.newSteelWallModel();
this.groundGrid[x][maxHeight] = DisplayableElementModel.newSteelWallModel();
this.groundGrid[x][0] = new SteelWallModel();
this.groundGrid[x][maxHeight] = new SteelWallModel();
}
for (int y = 0; y < this.sizeHeight; y++) {
this.groundGrid[0][y] = DisplayableElementModel.newSteelWallModel();
this.groundGrid[maxWidth][y] = DisplayableElementModel.newSteelWallModel();
this.groundGrid[0][y] = new SteelWallModel();
this.groundGrid[maxWidth][y] = new SteelWallModel();
}
}
@ -257,7 +248,7 @@ public class LevelModel extends Observable implements Runnable {
// Check that we are not out of bound...
if (this.isOutOfBounds(posX, posY) == false) {
// Create a new empty model in the old pos of Rockford
this.groundGrid[oldX][oldY] = DisplayableElementModel.newEmptyModel();
this.groundGrid[oldX][oldY] = new EmptyModel();
// Save the x / y pos of Rockford in the levelModel only
this.updateRockfordPosition(posX, posY);
@ -273,7 +264,7 @@ public class LevelModel extends Observable implements Runnable {
private void spawnExit() {
int x = (int) (Math.random() * (this.getSizeHeight() - 2));
int y = (int) (Math.random() * (this.getSizeWidth() - 2));
this.groundGrid[x + 1][y + 1] = DisplayableElementModel.newDoorModel();
this.groundGrid[x + 1][y + 1] = new DoorModel();
}
/**
@ -292,15 +283,18 @@ public class LevelModel extends Observable implements Runnable {
return;
}
// Grab model value
ModelConvertHelper modelConverter = new ModelConvertHelper();
DisplayableElementModel targetModel;
int xPos, yPos;
xPos = this.getCursorXPosition();
yPos = this.getCursorYPosition();
try {
DisplayableElementModel targetModel = modelConverter.toModel(blockValue, false);
targetModel = modelConverter.toModel(blockValue, false);
// Apply new model in place of cursor
// Apply new model in place of cursor
this.groundGrid[xPos + 1][yPos + 1] = targetModel;
// Disable cursor (important)
@ -350,7 +344,7 @@ public class LevelModel extends Observable implements Runnable {
DisplayableElementModel elementModel = this.getDisplayableElement(x, y);
if(elementModel == null) {
return DisplayableElementModel.newDirtModel().getSprite();
return new DirtModel().getSprite();
}
return elementModel.getSprite();
@ -364,7 +358,7 @@ public class LevelModel extends Observable implements Runnable {
public BufferedImage getCursorImage() {
if (this.cursorModel == null) {
this.cursorModel = DisplayableElementModel.newCursorModel();
this.cursorModel = new CursorModel();
}
return this.cursorModel.getSprite();
@ -487,7 +481,7 @@ public class LevelModel extends Observable implements Runnable {
*/
public void updateSprites(int x, int y) {
if(groundGrid[x][y] == null) {
groundGrid[x][y] = DisplayableElementModel.newDirtModel();
groundGrid[x][y] = new DirtModel();
}
groundGrid[x][y].update(System.currentTimeMillis());
@ -656,15 +650,15 @@ public class LevelModel extends Observable implements Runnable {
* @param y Object vertical position
*/
public void exploseGround(int x, int y) {
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x + 1][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x - 1][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y + 1] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x + 1][y + 1] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x - 1][y + 1] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y - 1] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x + 1][y - 1] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x - 1][y - 1] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y] = new EmptyModel();
this.groundGrid[x + 1][y] = new EmptyModel();
this.groundGrid[x - 1][y] = new EmptyModel();
this.groundGrid[x][y + 1] = new EmptyModel();
this.groundGrid[x + 1][y + 1] = new EmptyModel();
this.groundGrid[x - 1][y + 1] = new EmptyModel();
this.groundGrid[x][y - 1] = new EmptyModel();
this.groundGrid[x + 1][y - 1] = new EmptyModel();
this.groundGrid[x - 1][y - 1] = new EmptyModel();
this.rockford.setHasExplosed(true);
// Again a sleep to notify the observers properly
@ -686,7 +680,7 @@ public class LevelModel extends Observable implements Runnable {
public void makeThisDisplayableElementFall(int x, int y) {
this.groundGrid[x][y].setFalling(true);
this.groundGrid[x][y + 1] = this.groundGrid[x][y];
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y] = new EmptyModel();
}
/**
@ -698,7 +692,7 @@ public class LevelModel extends Observable implements Runnable {
public void makeThisBoulderSlideLeft(int x, int y) {
this.groundGrid[x][y].setFalling(true);
this.groundGrid[x - 1][y + 1] = this.groundGrid[x][y];
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y] = new EmptyModel();
}
/**
@ -710,7 +704,7 @@ public class LevelModel extends Observable implements Runnable {
public void makeThisBoulderSlideRight(int x, int y) {
this.groundGrid[x][y].setFalling(true);
this.groundGrid[x + 1][y + 1] = this.groundGrid[x][y];
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y] = new EmptyModel();
}
/**
@ -720,8 +714,8 @@ public class LevelModel extends Observable implements Runnable {
* @param y Object vertical position
*/
public void transformThisBoulderIntoADiamond(int x, int y) {
this.groundGrid[x][y + 2] = DisplayableElementModel.newDiamondModel();
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y + 2] = new DiamondModel();
this.groundGrid[x][y] = new EmptyModel();
}
/**
@ -732,7 +726,7 @@ public class LevelModel extends Observable implements Runnable {
*/
public void moveThisBoulderToRight(int x, int y) {
this.groundGrid[x + 1][y] = this.groundGrid[x][y];
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y] = new EmptyModel();
}
/**
@ -743,7 +737,7 @@ public class LevelModel extends Observable implements Runnable {
*/
public void moveThisBoulderToLeft(int x, int y) {
this.groundGrid[x - 1][y] = this.groundGrid[x][y];
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y] = new EmptyModel();
}
/**
@ -753,7 +747,7 @@ public class LevelModel extends Observable implements Runnable {
* @param y Object vertical position
*/
public void deleteThisBoulder(int x, int y) {
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y] = new EmptyModel();
}
/**
@ -772,8 +766,8 @@ public class LevelModel extends Observable implements Runnable {
* @param y
*/
public void exploseThisBrickWall(int x, int y) {
this.groundGrid[x][y] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y + 1] = DisplayableElementModel.newEmptyModel();
this.groundGrid[x][y] = new EmptyModel();
this.groundGrid[x][y + 1] = new EmptyModel();
}
/**
@ -783,7 +777,7 @@ public class LevelModel extends Observable implements Runnable {
* @param y
*/
public void expandThisWallToLeft(int x, int y) {
this.groundGrid[x - 1][y] = DisplayableElementModel.newExpandingWallModel();
this.groundGrid[x - 1][y] = new ExpandingWallModel();
}
/**
@ -793,7 +787,7 @@ public class LevelModel extends Observable implements Runnable {
* @param y
*/
public void expandThisWallToRight(int x, int y) {
this.groundGrid[x + 1][y] = DisplayableElementModel.newExpandingWallModel();
this.groundGrid[x + 1][y] = new ExpandingWallModel();
}
/**

View File

@ -0,0 +1,91 @@
package fr.enssat.BoulderDash.models;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* MagicWallModel
*
* Represents the magic wall.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class MagicWallModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static boolean falling;
private static String collideSound;
/**
* Stores the frames
* Used for the sprites
*/
private ArrayList<BufferedImage> framesMagicWall;
private long previousTime;
private int currentFrame;
private long speed;
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "magicwall";
isDestructible = false;
canMove = false;
impactExplosive = false;
animate = false;
priority = 3;
falling = false;
collideSound = "touch";
}
/**
* Class constructor
*/
public MagicWallModel() {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
this.currentFrame = 0;
this.speed = 100;
this.initSprites();
}
/**
* Function to animate the sprite
*/
public void update(long time) {
if (time - previousTime >= speed) {
// Update animation
previousTime = time;
try {
currentFrame += 1;
this.setSprite(framesMagicWall.get(this.currentFrame));
} catch (IndexOutOfBoundsException e) {
currentFrame = 0;
}
}
}
/**
* Init the subimages
*/
private void initSprites() {
this.framesMagicWall = new ArrayList<BufferedImage>();
/* INIT SPRITE FOR DIAMOND */
framesMagicWall.add(grabSprite(loadSprite(spriteName), 0, 0, 16, 16));
framesMagicWall.add(grabSprite(loadSprite(spriteName), 24, 0, 16, 16));
framesMagicWall.add(grabSprite(loadSprite(spriteName), 48, 0, 16, 16));
framesMagicWall.add(grabSprite(loadSprite(spriteName), 72, 0, 16, 16));
}
}

View File

@ -1,8 +1,10 @@
package fr.enssat.BoulderDash.models.displayableElement;
package fr.enssat.BoulderDash.models;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* RockfordModel
@ -13,6 +15,15 @@ import java.util.ArrayList;
* @since 2015-06-19
*/
public class RockfordModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static boolean falling;
private static String collideSound;
/**
* Maps the sub images of the sprite file
*/
@ -46,12 +57,26 @@ public class RockfordModel extends DisplayableElementModel {
private int currentFrame;
private boolean hasExploded;
RockfordModel() {
super("rockford", true, true);
setPriority(1);
setImpactExplosive(true);
setAnimate(true);
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "rockford";
isDestructible = true;
canMove = true;
impactExplosive = true;
animate = true;
priority = 1;
falling = false;
collideSound = null;
}
/**
* Class constructor
*/
public RockfordModel() {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
// Speed of the animation of the sprite
this.setSpeed(100);
// Init the sprites in arrays

View File

@ -0,0 +1,46 @@
package fr.enssat.BoulderDash.models;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
/**
* SteelWallModel
*
* Represents the steelWall
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class SteelWallModel extends DisplayableElementModel {
private static String spriteName;
private static boolean isDestructible;
private static boolean canMove;
private static boolean impactExplosive;
private static boolean animate;
private static int priority;
private static boolean falling;
private static String collideSound;
/**
* Static dataset
* Specifies the physical parameters of the object
*/
static {
spriteName = "steelwall";
isDestructible = false;
canMove = false;
impactExplosive = false;
animate = false;
priority = 3;
falling = false;
collideSound = "touch";
}
/**
* Class constructor
*/
public SteelWallModel() {
super(isDestructible, canMove, spriteName, priority, impactExplosive, animate, falling, collideSound);
this.loadSprite(spriteName);
}
}

View File

@ -1,22 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
/**
* BoulderModel
*
* Represents the boulders.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class BoulderModel extends DisplayableElementModel {
BoulderModel(boolean convertible) {
super("boulder", false,true);
setPriority(2);
setAnimate(true);
setCollideSound("die");
setConvertibleValue(convertible);
loadSprite("boulder");
}
}

View File

@ -1,20 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
/**
* BrickWallModel
*
* Represents the brick wall in the game.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class BrickWallModel extends DisplayableElementModel {
BrickWallModel() {
super("brickwall", true, false);
setPriority(3);
setCollideSound("touch");
loadSprite("brickwall");
}
}

View File

@ -1,17 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
/**
* CursorModel
*
* Represents the field cursor pointer.
*
* @author Valerian Saliou <valerian@valeriansaliou.name>
* @since 2015-06-22
*/
public class CursorModel extends DisplayableElementModel {
CursorModel() {
super("cursor");
this.loadSprite("cursor");
}
}

View File

@ -1,66 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
/**
* DiamondModel
*
* Represents a diamond in the game.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class DiamondModel extends DisplayableElementModel {
private long previousTime;
private int currentFrame;
private final int SIZ_X_OF_SPRITE = 16;
private final int SIZ_Y_OF_SPRITE = 16;
private long speed;
private ArrayList<BufferedImage> framesDiamond;
DiamondModel() {
super("diamond", true, true);
setAnimate(true);
setCollideSound("coin");
this.initSprites();
}
/**
* Updates the sprite (animation loop)
*
* @param time Current time
*/
public void update(long time) {
if (time - previousTime >= speed) {
// Update the animation
previousTime = time;
try {
this.currentFrame += 1;
this.setSprite(framesDiamond.get(this.currentFrame));
} catch (IndexOutOfBoundsException e) {
this.currentFrame = 0;
}
}
}
/**
* Initialize the sprites
* This is an animated element, hence this method
*/
private void initSprites() {
/* Initialize object sprites */
this.framesDiamond = new ArrayList<BufferedImage>();
for (int i = 0; i < 8; i++) {
this.framesDiamond.add(
this.grabSprite(loadSprite(spriteName), i * 24, 0, SIZ_X_OF_SPRITE, SIZ_Y_OF_SPRITE)
);
}
}
}

View File

@ -1,18 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
/**
* DirtModel
*
* Represents the dirt in the game.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class DirtModel extends DisplayableElementModel {
DirtModel() {
super("dirt", true, false);
this.loadSprite("dirt");
}
}

View File

@ -1,299 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* DisplayableElementModel
*
* Represents a abstract displayable element
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public abstract class DisplayableElementModel {
protected final String spriteName;
private final boolean destructible;
private final boolean moving;
private boolean animate = false;
private boolean impactExplosive = false;
private int priority = 0;
private boolean falling = false;
private boolean convertible = false;
private String collideSound = null;
private BufferedImage sprite;
public DisplayableElementModel(final String spriteName, boolean destructible, boolean moving){
this.spriteName = spriteName;
this.destructible = destructible;
this.moving = moving;
}
public DisplayableElementModel(final String spriteName){
this(spriteName, false, false);
}
public static BoulderModel newBoulderModel(boolean convertible) {
return new BoulderModel(convertible);
}
public static BrickWallModel newBrickWallModel() {
return new BrickWallModel();
}
public static CursorModel newCursorModel() {
return new CursorModel();
}
public static DiamondModel newDiamondModel() {
return new DiamondModel();
}
public static DirtModel newDirtModel() {
return new DirtModel();
}
public static DoorModel newDoorModel() {
return new DoorModel();
}
public static EmptyModel newEmptyModel() {
return new EmptyModel();
}
public static ExpandingWallModel newExpandingWallModel() {
return new ExpandingWallModel();
}
public static MagicWallModel newMagicWallModel() {
return new MagicWallModel();
}
public static RockfordModel newRockfordModel() {
return new RockfordModel();
}
public static SteelWallModel newSteelWallModel() {
return new SteelWallModel();
}
/**
* Gets the 'destructible' value
*
* @return Whether object is destructible or not
*/
public boolean isDestructible() {
return this.destructible;
}
/**
* Gets the 'moving' value
*
* @return Whether object is moving or not
*/
public boolean isMoving() {
return this.moving;
}
/**
* Gets the sprite name value
*
* @return Sprite name value
*/
public String getSpriteName() {
return this.spriteName;
}
/**
* Gets the folder path of the sprite storage
*
* @return Folder path of the sprite storage
*/
private static String getSpriteStorageFolderPath() {
return "./res/drawable/field/";
}
/**
* Gets the path to the sprite file in storage
*
* @return Path to the sprite file in storage
*/
public String getPathToSprite() {
return getSpriteStorageFolderPath() + getSpriteName() + ".gif";
}
/**
* Gets the priority of the object
*
* @return Object priority
*/
public int getPriority() {
return this.priority;
}
/**
* Sets the priority of the object
*
* @param priority Object priority
*/
public void setPriority(int priority) {
this.priority = priority;
}
/**
* Gets the 'animate' value
*
* @return Whether object is animated or not
*/
public boolean isAnimate() {
return this.animate;
}
/**
* Sets the 'animate' value
*
* @return animate Whether object is animated or not
*/
public void setAnimate(boolean animate) {
this.animate = animate;
}
/**
* Gets the 'impact explosive' value
*
* @return Whether object explodes on impact or not
*/
public boolean isImpactExplosive() {
return this.impactExplosive;
}
/**
* Sets the 'impact explosive' value
*
* @return impactExplosive Whether object explodes on impact or not
*/
public void setImpactExplosive(boolean impactExplosive) {
this.impactExplosive = impactExplosive;
}
/**
* Sets the sprite
*
* @param sprite Sprite object
*/
public void setSprite(BufferedImage sprite) {
this.sprite = sprite;
}
/**
* Gets the sprite
*
* @return Sprite object
*/
public BufferedImage getSprite() {
return sprite;
}
/**
* Loads the target sprite
*
* @param spriteName Sprite name
* @return Sprite object
*/
public BufferedImage loadSprite(String spriteName) {
BufferedImage sprite = null;
try {
sprite = ImageIO.read(new File("res/drawable/field/" + spriteName + ".gif"));
} catch (IOException e) {
e.printStackTrace();
}
this.sprite = sprite;
return sprite;
}
/**
* Grabs the sprite from the large image containing all the static sprites items
*
* @param spriteSheet Sprite sheet instance
* @param x Sub image horizontal offset on sprite sheet
* @param y Sub image vertical offset on sprite sheet
* @param width Sub image width on sprite sheet
* @param height Sub image height on sprite sheet
* @return Target sub image
*/
public BufferedImage grabSprite(BufferedImage spriteSheet, int x, int y, int width, int height) {
BufferedImage subImage = spriteSheet.getSubimage(x, y, width, height);
this.sprite = subImage;
return subImage;
}
/**
* Gets the falling state of the object
*
* @return Whether object is falling or not
*/
public boolean isFalling() {
return this.falling;
}
/**
* Sets the falling state of the object
*
* @param falling Whether object is falling or not
*/
public void setFalling(boolean falling) {
this.falling = falling;
}
/**
* Gets the collide sound of the object
*
* @return Collide sound
*/
public String getCollideSound() {
return this.collideSound;
}
/**
* Sets the collide sound of the object
*
* @param collideSound Collide sound
*/
public void setCollideSound(String collideSound) {
this.collideSound = collideSound;
}
/**
* Gets the convertible value of the object
*
* @return Convertible value
*/
public boolean isConvertible() {
return this.convertible;
}
/**
* Sets the convertible value of the object
*
* @param convertible Convertible value
*/
public void setConvertibleValue(boolean convertible) {
this.convertible = convertible;
}
/**
* Function to update the sprites
* @param currentTimeMillis Current time in milliseconds
*/
public void update(long currentTimeMillis) {}
}

View File

@ -1,17 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
/**
* DoorModel
*
* Represents escape door.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class DoorModel extends DisplayableElementModel {
DoorModel() {
super("door");
this.loadSprite("door");
}
}

View File

@ -1,17 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
/**
* EmptyModel
*
* Represents "nothing".
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class EmptyModel extends DisplayableElementModel {
EmptyModel() {
super("black");
this.loadSprite("black");
}
}

View File

@ -1,19 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
/**
* ExpandingWallModel
*
* Represents a ExpandingWall in the game.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class ExpandingWallModel extends DisplayableElementModel {
ExpandingWallModel() {
super("expandingwall");
setPriority(10);
this.loadSprite("expandingwall");
}
}

View File

@ -1,65 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
/**
* MagicWallModel
*
* Represents the magic wall.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class MagicWallModel extends DisplayableElementModel {
/**
* Stores the frames
* Used for the sprites
*/
private ArrayList<BufferedImage> framesMagicWall;
private long previousTime;
private int currentFrame;
private long speed;
MagicWallModel() {
super("magicwall");
setPriority(3);
setCollideSound("touch");
this.currentFrame = 0;
this.speed = 100;
this.initSprites();
}
/**
* Function to animate the sprite
*/
public void update(long time) {
if (time - previousTime >= speed) {
// Update animation
previousTime = time;
try {
currentFrame += 1;
this.setSprite(framesMagicWall.get(this.currentFrame));
} catch (IndexOutOfBoundsException e) {
currentFrame = 0;
}
}
}
/**
* Init the subimages
*/
private void initSprites() {
this.framesMagicWall = new ArrayList<BufferedImage>();
/* INIT SPRITE FOR DIAMOND */
framesMagicWall.add(grabSprite(loadSprite(spriteName), 0, 0, 16, 16));
framesMagicWall.add(grabSprite(loadSprite(spriteName), 24, 0, 16, 16));
framesMagicWall.add(grabSprite(loadSprite(spriteName), 48, 0, 16, 16));
framesMagicWall.add(grabSprite(loadSprite(spriteName), 72, 0, 16, 16));
}
}

View File

@ -1,20 +0,0 @@
package fr.enssat.BoulderDash.models.displayableElement;
/**
* SteelWallModel
*
* Represents the steelWall
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class SteelWallModel extends DisplayableElementModel {
SteelWallModel() {
super("steelwall");
setPriority(3);
setCollideSound("touch");
this.loadSprite("steelwall");
}
}

View File

@ -1,5 +1,6 @@
package fr.enssat.BoulderDash.views;
import fr.enssat.BoulderDash.views.GroundView;
import fr.enssat.BoulderDash.controllers.GameController;
import fr.enssat.BoulderDash.controllers.GameKeyController;
import fr.enssat.BoulderDash.models.LevelModel;

View File

@ -8,6 +8,8 @@ import java.util.Observer;
import fr.enssat.BoulderDash.controllers.GameController;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.views.GameGroundView;
import fr.enssat.BoulderDash.views.InformationPanel;
/**

View File

@ -1,5 +1,7 @@
package fr.enssat.BoulderDash.views;
import fr.enssat.BoulderDash.views.GroundView;
import fr.enssat.BoulderDash.views.LevelEditorView;
import fr.enssat.BoulderDash.controllers.LevelEditorKeyController;
import fr.enssat.BoulderDash.models.LevelModel;

View File

@ -9,6 +9,9 @@ import fr.enssat.BoulderDash.helpers.LevelSelectorHelper;
import fr.enssat.BoulderDash.controllers.LevelEditorController;
import fr.enssat.BoulderDash.controllers.NavigationBetweenViewController;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.views.LevelEditorGroundView;
import fr.enssat.BoulderDash.views.AssetsLevelEditorComponent;
import fr.enssat.BoulderDash.views.MenuLevelSelector;
/**
@ -166,10 +169,10 @@ public class LevelEditorView extends JFrame implements Observer {
if(selectedLevelValue != null && !selectedLevelValue.isEmpty()) {
// Load existing model
pickedLevelModel = LevelModel.createExistingLevelModel(selectedLevelValue, this.nav.getAudioLoadHelper(), "editor");
pickedLevelModel = new LevelModel(selectedLevelValue, this.nav.getAudioLoadHelper(), "editor");
} else {
// New blank model for editor
pickedLevelModel = LevelModel.createEditorLevelModel(this.nav.getAudioLoadHelper());
pickedLevelModel = new LevelModel(this.nav.getAudioLoadHelper());
}
pickedLevelModel.setShowCursor(true);

4
dicegame/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.gradle/
.idea/
src/build/
target/

View File

@ -0,0 +1,4 @@
Manifest-Version: 1.0
Class-Path: .
Main-Class: WuerfelspielGUI

View File

@ -0,0 +1,5 @@
package dicegame.logic;
public interface DiceInteraction {
public int changeDiceState(int diceIndex) throws SelectionException;
}

View File

@ -0,0 +1,276 @@
package dicegame.logic;
import java.util.Random;
public class Logic implements DiceInteraction {
public static final int DICE_NUMBER = 6;
public static final int DEFAULT_PLAYER_NUMBER = 2;
public static final int DEFAULT_ROUNDS = 10;
private static final int DIE_UNFIXED = 0;
private static final int DIE_TEMP_FIXED = 1;
private static final int DIE_FIXED = 2;
private boolean gameIsRunning;
private boolean playerCanThrowDice;
private int currentPlayer;
private int roundNumber;
private int roundPoints;
private int maxRounds = DEFAULT_ROUNDS;
private int[] points = new int[2];
private String[] names = new String[2];
private int[] dicePips = new int[6];
private int[] diceFixed = new int[6];
private Random random;
public Logic(Random random) {
this.random = random;
}
public void startGame() {
this.resetGame();
this.gameIsRunning = true;
this.playerCanThrowDice = true;
this.roundNumber = 1;
this.currentPlayer = 0;
}
public String rollDice() {
if (!this.gameIsRunning) {
return "Das Spiel läuft aktuell nicht!";
} else {
if (this.isAllDiceFixed()) {
this.resetDice();
}
for(int i = 0; i < DICE_NUMBER; ++i) {
if (this.diceFixed[i] == DIE_TEMP_FIXED) {
this.diceFixed[i] = DIE_FIXED;
} else if (this.diceFixed[i] == DIE_UNFIXED) {
this.dicePips[i] = this.random.nextInt(6) + 1;
}
}
if (this.isScoringPipsAvailable()) {
this.playerCanThrowDice = true;
} else {
this.playerCanThrowDice = false;
this.roundPoints = 0;
}
return null;
}
}
public boolean isScoringPipsAvailable() {
for(int i = 0; i < DICE_NUMBER; ++i) {
if (this.diceFixed[i] != DIE_FIXED && (this.dicePips[i] == 5 || this.dicePips[i] == 1)) {
return true;
}
}
return false;
}
private boolean isAllDiceFixed() {
for(int i = 0; i < DICE_NUMBER; ++i) {
if (this.diceFixed[i] == DIE_UNFIXED) {
return false;
}
}
return true;
}
public String checkIfGameCanStart() {
if (this.gameIsRunning) {
return "Das Spiel läuft bereits!";
} else {
for(int i = 0; i < DEFAULT_PLAYER_NUMBER; ++i) {
if (this.names[i] == null || this.names[i].trim().length() < 2) {
return "Spieler " + (i + 1) + " hat noch keinen Namen!";
}
}
return null;
}
}
public void resetGame() {
this.roundNumber = 0;
this.roundPoints = 0;
this.resetDice();
this.resetPoints();
}
public void finishRound() {
this.resetDice();
int[] var10000 = this.points;
int var10001 = this.currentPlayer;
var10000[var10001] += this.roundPoints;
this.roundPoints = 0;
this.currentPlayer = ++this.currentPlayer % DEFAULT_PLAYER_NUMBER;
if (this.currentPlayer == 0) {
if (this.roundNumber == this.maxRounds) {
this.gameIsRunning = false;
} else {
++this.roundNumber;
}
}
}
private void resetDice() {
for(int i = 0; i < DICE_NUMBER; ++i) {
this.diceFixed[i] = DIE_UNFIXED;
}
}
private void resetPoints() {
for(int i = 0; i < DEFAULT_PLAYER_NUMBER; ++i) {
this.points[i] = 0;
}
}
public int getRoundNumber() {
return this.roundNumber;
}
public int getRoundPoints() {
return this.roundPoints;
}
public boolean isDieFixed(int dieIndex) {
return this.diceFixed[dieIndex] != DIE_UNFIXED;
}
public boolean isAtLeastOneDieFixedInCurrentThrow() {
for(int i = 0; i < DICE_NUMBER; ++i) {
if (this.diceFixed[i] == DIE_TEMP_FIXED) {
return true;
}
}
return false;
}
private int countTempFixedByPips(int pips) {
int count = 0;
for(int i = 0; i < DICE_NUMBER; ++i) {
if (this.diceFixed[i] == DIE_TEMP_FIXED && this.dicePips[i] == pips) {
++count;
}
}
return count;
}
public int getDiePips(int dieIndex) {
return this.dicePips[dieIndex];
}
public int getMaxRounds() {
return this.maxRounds;
}
public String setMaxRounds(int maxRounds) {
if (this.gameIsRunning) {
return "Rundenzahl kann nicht während eines Spiels verändert werden!";
} else {
this.maxRounds = maxRounds;
return null;
}
}
public int getPoints(int playerIndex) {
return this.points[playerIndex];
}
public String getName(int playerIndex) {
return this.names[playerIndex];
}
public String setName(int playerIndex, String name) {
if (this.gameIsRunning) {
return "Ein Spielername kann nicht während eines Spiels verändert werden!";
} else {
this.names[playerIndex] = name;
return null;
}
}
public boolean isPlayerCanThrowDice() {
return this.playerCanThrowDice;
}
public boolean isGameIsRunning() {
return this.gameIsRunning;
}
public int getCurrentPlayer() {
return this.currentPlayer;
}
@Override
public int changeDiceState(int diceIndex) throws SelectionException {
if (this.diceFixed[diceIndex] == DIE_UNFIXED) {
setDieFixed(diceIndex);
} else {
setDieUnfixed(diceIndex);
}
return roundPoints;
}
private void setDieFixed(int dieIndex) throws SelectionException {
int c;
if (this.dicePips[dieIndex] == 1) {
c = this.countTempFixedByPips(1);
if (c != 2 && c != 5) {
this.roundPoints += 100;
} else {
this.roundPoints -= 200;
this.roundPoints += 1000;
}
this.diceFixed[dieIndex] = DIE_TEMP_FIXED;
} else if (this.dicePips[dieIndex] == 5) {
c = this.countTempFixedByPips(5);
if (c != 2 && c != 5) {
this.roundPoints += 50;
} else {
this.roundPoints -= 100;
this.roundPoints += 500;
}
this.diceFixed[dieIndex] = DIE_TEMP_FIXED;
} else {
throw new SelectionException("Es können nur 1'en und 5'en fixiert werden!");
}
}
private void setDieUnfixed(int dieIndex) throws SelectionException {
int c;
if (this.dicePips[dieIndex] == 1) {
c = this.countTempFixedByPips(1);
if (c != 3 && c != 6) {
this.roundPoints -= 100;
} else {
this.roundPoints -= 1000;
this.roundPoints += 200;
}
this.diceFixed[dieIndex] = DIE_UNFIXED;
} else if (this.dicePips[dieIndex] == 5) {
c = this.countTempFixedByPips(5);
if (c != 3 && c != 6) {
this.roundPoints -= 50;
} else {
this.roundPoints -= 500;
this.roundPoints += 100;
}
this.diceFixed[dieIndex] = DIE_UNFIXED;
}
}
}

View File

@ -0,0 +1,7 @@
package dicegame.logic;
public class SelectionException extends Exception {
SelectionException(String msg) {
super(msg);
}
}

View File

@ -0,0 +1,608 @@
package dicegame.view;
import dicegame.logic.SelectionException;
import dicegame.logic.Logic;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
public final class GUI extends JFrame implements ActionListener {
private final Logic logic;
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPanel panelHead = null;
private JPanel panelMain = null;
private JTextField textfieldS1Name = null;
private JLabel labelS1Name = null;
private JLabel labelS2Name = null;
private JTextField textfieldS2Name = null;
private JPanel panelSpieler1 = null;
private JPanel panelSpieler2 = null;
private JLabel labelS1Points = null;
private JLabel labelS1PointsValue = null;
private JLabel labelS2Points = null;
private JLabel labelS2PointsValue = null;
private JPanel panelGoButton = null;
private JButton buttonGo = null;
private JPanel panelRound = null;
private JLabel labelRound = null;
private JLabel labelRoundValue = null;
private JPanel panelDice = null;
private JToggleButton toggleDie1 = null;
private JToggleButton toggleDie2 = null;
private JToggleButton toggleDie3 = null;
private JToggleButton toggleDie4 = null;
private JToggleButton toggleDie5 = null;
private JToggleButton toggleDie6 = null;
private JPanel panelActions = null;
private JPanel panelRoundPoints = null;
private JLabel labelRoundPoints = null;
private JLabel labelRoundPointsValue = null;
private JPanel panelActionsButtons = null;
private JButton buttonRoll = null;
private JButton buttonReady = null;
private JPanel panelDiceActions = null;
private JPanel panelStatus = null;
private JLabel labelStatus = null;
private JPanel getPanelHead() {
if (this.panelHead == null) {
BorderLayout borderLayout3 = new BorderLayout();
borderLayout3.setHgap(3);
borderLayout3.setVgap(3);
this.labelS2Name = new JLabel();
this.labelS2Name.setText("Spieler 2 :");
this.labelS2Name.setFont(new Font("Dialog", 0, 12));
this.labelS2Name.setToolTipText("");
this.labelS1Name = new JLabel();
this.labelS1Name.setText("Spieler 1 :");
this.labelS1Name.setFont(new Font("Dialog", 0, 12));
this.panelHead = new JPanel();
this.panelHead.setLayout(borderLayout3);
this.panelHead.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
this.panelHead.add(this.getPanelSpieler1(), "West");
this.panelHead.add(this.getPanelSpieler2(), "East");
this.panelHead.add(this.getPanelGoButton(), "South");
}
return this.panelHead;
}
private JPanel getPanelMain() {
if (this.panelMain == null) {
BorderLayout borderLayout1 = new BorderLayout();
borderLayout1.setVgap(5);
GridLayout gridLayout3 = new GridLayout();
gridLayout3.setRows(3);
gridLayout3.setColumns(1);
this.panelMain = new JPanel();
this.panelMain.setEnabled(true);
this.panelMain.setBorder(BorderFactory.createEtchedBorder(0));
this.panelMain.setLayout(borderLayout1);
this.panelMain.add(this.getPanelRound(), "North");
this.panelMain.add(this.getPanelDiceActions(), "Center");
}
return this.panelMain;
}
private JTextField getTextfieldS1Name() {
if (this.textfieldS1Name == null) {
this.textfieldS1Name = new JTextField();
this.textfieldS1Name.setColumns(10);
this.textfieldS1Name.setName("");
this.textfieldS1Name.setToolTipText("Name des ersten Spielers, bestehend aus mindestens 2 Zeichen");
this.textfieldS1Name.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
GUI.this.textfieldS2Name.grabFocus();
}
});
this.textfieldS1Name.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
GUI.this.logic.setName(0, GUI.this.textfieldS1Name.getText());
String s = GUI.this.logic.checkIfGameCanStart();
if (s != null) {
GUI.this.labelStatus.setText(s);
GUI.this.buttonGo.setEnabled(false);
} else {
GUI.this.buttonGo.setEnabled(true);
GUI.this.labelStatus.setText(" ");
}
}
});
}
return this.textfieldS1Name;
}
private JTextField getTextfieldS2Name() {
if (this.textfieldS2Name == null) {
this.textfieldS2Name = new JTextField();
this.textfieldS2Name.setColumns(10);
this.textfieldS2Name.setName("");
this.textfieldS2Name.setToolTipText("Name des zweiten Spielers, bestehend aus mindestens 2 Zeichen");
this.textfieldS2Name.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
GUI.this.buttonGo.grabFocus();
}
});
this.textfieldS2Name.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
GUI.this.logic.setName(1, GUI.this.textfieldS2Name.getText());
String s = GUI.this.logic.checkIfGameCanStart();
if (s != null) {
GUI.this.labelStatus.setText(s);
GUI.this.buttonGo.setEnabled(false);
} else {
GUI.this.buttonGo.setEnabled(true);
GUI.this.labelStatus.setText(" ");
}
}
});
}
return this.textfieldS2Name;
}
private JPanel getPanelSpieler1() {
if (this.panelSpieler1 == null) {
GridLayout gridLayout21 = new GridLayout();
gridLayout21.setRows(2);
this.labelS1PointsValue = new JLabel();
this.labelS1PointsValue.setText("0");
this.labelS1PointsValue.setFont(new Font("Dialog", 1, 14));
GridLayout gridLayout1 = new GridLayout();
gridLayout1.setRows(2);
gridLayout1.setColumns(2);
this.labelS1Points = new JLabel();
this.labelS1Points.setText("Punkte :");
this.labelS1Points.setFont(new Font("Dialog", 0, 12));
GridLayout gridLayout = new GridLayout();
gridLayout.setRows(2);
gridLayout.setColumns(2);
this.panelSpieler1 = new JPanel();
this.panelSpieler1.setLayout(gridLayout21);
this.panelSpieler1.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
this.panelSpieler1.add(this.labelS1Name, (Object)null);
this.panelSpieler1.add(this.getTextfieldS1Name(), (Object)null);
this.panelSpieler1.add(this.labelS1Points, (Object)null);
this.panelSpieler1.add(this.labelS1PointsValue, (Object)null);
}
return this.panelSpieler1;
}
private JPanel getPanelSpieler2() {
if (this.panelSpieler2 == null) {
this.labelS2PointsValue = new JLabel();
this.labelS2PointsValue.setText("0");
this.labelS2PointsValue.setFont(new Font("Dialog", 1, 14));
this.labelS2Points = new JLabel();
this.labelS2Points.setText("Punkte :");
this.labelS2Points.setFont(new Font("Dialog", 0, 12));
GridLayout gridLayout2 = new GridLayout();
gridLayout2.setRows(2);
gridLayout2.setColumns(2);
this.panelSpieler2 = new JPanel();
this.panelSpieler2.setLayout(gridLayout2);
this.panelSpieler2.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
this.panelSpieler2.add(this.labelS2Name, (Object)null);
this.panelSpieler2.add(this.getTextfieldS2Name(), (Object)null);
this.panelSpieler2.add(this.labelS2Points, (Object)null);
this.panelSpieler2.add(this.labelS2PointsValue, (Object)null);
}
return this.panelSpieler2;
}
private JPanel getPanelGoButton() {
if (this.panelGoButton == null) {
this.panelGoButton = new JPanel();
this.panelGoButton.setLayout(new GridBagLayout());
this.panelGoButton.setEnabled(true);
this.panelGoButton.add(this.getButtonGo(), new GridBagConstraints());
}
return this.panelGoButton;
}
private JButton getButtonGo() {
if (this.buttonGo == null) {
this.buttonGo = new JButton();
this.buttonGo.setName("");
this.buttonGo.setEnabled(false);
this.buttonGo.setText(" Spiel starten ");
this.buttonGo.addActionListener(this);
}
return this.buttonGo;
}
private JPanel getPanelRound() {
if (this.panelRound == null) {
this.labelRoundValue = new JLabel();
this.labelRoundValue.setText("0");
this.labelRoundValue.setFont(new Font("Dialog", 0, 12));
this.labelRound = new JLabel();
this.labelRound.setText("Runde ");
this.labelRound.setFont(new Font("Dialog", 0, 12));
this.panelRound = new JPanel();
this.panelRound.setLayout(new FlowLayout());
this.panelRound.add(this.labelRound, (Object)null);
this.panelRound.add(this.labelRoundValue, (Object)null);
}
return this.panelRound;
}
private JPanel getPanelDice() {
if (this.panelDice == null) {
GridLayout gridLayout5 = new GridLayout();
gridLayout5.setRows(1);
gridLayout5.setHgap(20);
gridLayout5.setVgap(1);
gridLayout5.setColumns(6);
this.panelDice = new JPanel();
this.panelDice.setPreferredSize(new Dimension(346, 26));
this.panelDice.setBorder(BorderFactory.createEmptyBorder(5, 3, 5, 0));
this.panelDice.setLayout(gridLayout5);
this.panelDice.add(this.getToggleDie1(), (Object)null);
this.panelDice.add(this.getToggleDie2(), (Object)null);
this.panelDice.add(this.getToggleDie3(), (Object)null);
this.panelDice.add(this.getToggleDie4(), (Object)null);
this.panelDice.add(this.getToggleDie5(), (Object)null);
this.panelDice.add(this.getToggleDie6(), (Object)null);
}
return this.panelDice;
}
private JToggleButton getToggleDie1() {
if (this.toggleDie1 == null) {
this.toggleDie1 = new JToggleButton();
this.toggleDie1.setText("1");
this.toggleDie1.setEnabled(false);
this.toggleDie1.addActionListener(this);
}
return this.toggleDie1;
}
private JToggleButton getToggleDie2() {
if (this.toggleDie2 == null) {
this.toggleDie2 = new JToggleButton();
this.toggleDie2.setText("2");
this.toggleDie2.setEnabled(false);
this.toggleDie2.addActionListener(this);
}
return this.toggleDie2;
}
private JToggleButton getToggleDie3() {
if (this.toggleDie3 == null) {
this.toggleDie3 = new JToggleButton();
this.toggleDie3.setText("3");
this.toggleDie3.setEnabled(false);
this.toggleDie3.addActionListener(this);
}
return this.toggleDie3;
}
private JToggleButton getToggleDie4() {
if (this.toggleDie4 == null) {
this.toggleDie4 = new JToggleButton();
this.toggleDie4.setText("4");
this.toggleDie4.setEnabled(false);
this.toggleDie4.addActionListener(this);
}
return this.toggleDie4;
}
private JToggleButton getToggleDie5() {
if (this.toggleDie5 == null) {
this.toggleDie5 = new JToggleButton();
this.toggleDie5.setText("5");
this.toggleDie5.setEnabled(false);
this.toggleDie5.addActionListener(this);
}
return this.toggleDie5;
}
private JToggleButton getToggleDie6() {
if (this.toggleDie6 == null) {
this.toggleDie6 = new JToggleButton();
this.toggleDie6.setText("6");
this.toggleDie6.setEnabled(false);
this.toggleDie6.addActionListener(this);
}
return this.toggleDie6;
}
private JPanel getPanelActions() {
if (this.panelActions == null) {
BorderLayout borderLayout2 = new BorderLayout();
borderLayout2.setVgap(0);
borderLayout2.setHgap(0);
this.panelActions = new JPanel();
this.panelActions.setLayout(borderLayout2);
this.panelActions.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
this.panelActions.add(this.getPanelRoundPoints(), "West");
this.panelActions.add(this.getPanelActionsButtons(), "East");
}
return this.panelActions;
}
private JPanel getPanelRoundPoints() {
if (this.panelRoundPoints == null) {
this.labelRoundPointsValue = new JLabel();
this.labelRoundPointsValue.setText("0");
this.labelRoundPoints = new JLabel();
this.labelRoundPoints.setText("Punkte des aktuellen Zuges : ");
this.labelRoundPoints.setFont(new Font("Dialog", 0, 12));
this.panelRoundPoints = new JPanel();
this.panelRoundPoints.setLayout(new GridBagLayout());
this.panelRoundPoints.add(this.labelRoundPoints, new GridBagConstraints());
this.panelRoundPoints.add(this.labelRoundPointsValue, new GridBagConstraints());
}
return this.panelRoundPoints;
}
private JPanel getPanelActionsButtons() {
if (this.panelActionsButtons == null) {
GridLayout gridLayout6 = new GridLayout();
gridLayout6.setRows(2);
gridLayout6.setHgap(0);
gridLayout6.setVgap(6);
gridLayout6.setColumns(1);
this.panelActionsButtons = new JPanel();
this.panelActionsButtons.setLayout(gridLayout6);
this.panelActionsButtons.add(this.getButtonRoll(), (Object)null);
this.panelActionsButtons.add(this.getButtonReady(), (Object)null);
}
return this.panelActionsButtons;
}
private JButton getButtonRoll() {
if (this.buttonRoll == null) {
this.buttonRoll = new JButton();
this.buttonRoll.setText("Würfeln");
this.buttonRoll.setEnabled(false);
this.buttonRoll.addActionListener(this);
}
return this.buttonRoll;
}
private JButton getButtonReady() {
if (this.buttonReady == null) {
this.buttonReady = new JButton();
this.buttonReady.setText("Zug beenden");
this.buttonReady.setEnabled(false);
this.buttonReady.addActionListener(this);
}
return this.buttonReady;
}
private JPanel getPanelDiceActions() {
if (this.panelDiceActions == null) {
BorderLayout borderLayout = new BorderLayout();
borderLayout.setHgap(5);
borderLayout.setVgap(5);
this.panelDiceActions = new JPanel();
this.panelDiceActions.setLayout(borderLayout);
this.panelDiceActions.add(this.getPanelDice(), "Center");
this.panelDiceActions.add(this.getPanelActions(), "South");
}
return this.panelDiceActions;
}
private JPanel getPanelStatus() {
if (this.panelStatus == null) {
this.labelStatus = new JLabel();
this.labelStatus.setText(" ");
this.labelStatus.setToolTipText("");
this.labelStatus.setFont(new Font("Arial", 0, 12));
this.panelStatus = new JPanel();
this.panelStatus.setLayout(new BorderLayout());
this.panelStatus.setBorder(BorderFactory.createBevelBorder(1));
this.panelStatus.add(this.labelStatus, "North");
}
return this.panelStatus;
}
public GUI() {
this.initialize();
this.logic = new Logic(new Random());
this.logic.resetGame();
}
private void initialize() {
this.setSize(478, 311);
this.setResizable(false);
this.setDefaultCloseOperation(3);
this.setName("mainFrame");
this.setContentPane(this.getJContentPane());
this.setTitle("Dings");
}
private JPanel getJContentPane() {
if (this.jContentPane == null) {
BorderLayout borderLayout4 = new BorderLayout();
borderLayout4.setHgap(3);
borderLayout4.setVgap(2);
this.jContentPane = new JPanel();
this.jContentPane.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));
this.jContentPane.setLayout(borderLayout4);
this.jContentPane.add(this.getPanelHead(), "North");
this.jContentPane.add(this.getPanelMain(), "Center");
this.jContentPane.add(this.getPanelStatus(), "South");
}
return this.jContentPane;
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source != this.textfieldS1Name && source != this.textfieldS2Name) {
if (source == this.buttonGo) {
this.logic.startGame();
this.labelStatus.setText(" ");
this.buttonGo.setEnabled(false);
this.textfieldS1Name.setEditable(false);
this.textfieldS2Name.setEditable(false);
this.buttonReady.setEnabled(true);
this.labelS2PointsValue.setText(String.valueOf(this.logic.getPoints(1)));
this.labelS1PointsValue.setText(String.valueOf(this.logic.getPoints(0)));
this.syncRoundInfoToGui();
this.logic.rollDice();
this.syncLogicDiceToGui();
this.toggleDie1.setEnabled(true);
this.toggleDie2.setEnabled(true);
this.toggleDie3.setEnabled(true);
this.toggleDie4.setEnabled(true);
this.toggleDie5.setEnabled(true);
this.toggleDie6.setEnabled(true);
} else if (source == this.buttonReady) {
this.logic.finishRound();
this.syncRoundInfoToGui();
if (this.logic.isGameIsRunning()) {
this.logic.rollDice();
this.syncLogicDiceToGui();
}
} else if (source == this.buttonRoll) {
if (!this.logic.isAtLeastOneDieFixedInCurrentThrow()) {
this.labelStatus.setText("Wenigstens ein Würfel muss fixiert sein.");
} else {
String s = this.logic.rollDice();
if (s != null) {
this.labelStatus.setText(s);
} else {
this.syncLogicDiceToGui();
}
}
} else if (source == this.toggleDie1) {
this.toggleDie(this.toggleDie1, 0);
} else if (source == this.toggleDie2) {
this.toggleDie(this.toggleDie2, 1);
} else if (source == this.toggleDie3) {
this.toggleDie(this.toggleDie3, 2);
} else if (source == this.toggleDie4) {
this.toggleDie(this.toggleDie4, 3);
} else if (source == this.toggleDie5) {
this.toggleDie(this.toggleDie5, 4);
} else if (source == this.toggleDie6) {
this.toggleDie(this.toggleDie6, 5);
}
}
}
private void toggleDie(JToggleButton die, int dieIndex) {
String result = null;
this.labelStatus.setText(" ");
try {
int resultingPoints = this.logic.changeDiceState(dieIndex);
this.labelRoundPointsValue.setText(String.valueOf(resultingPoints));
} catch (SelectionException e) {
die.setSelected(!die.isSelected());
this.labelStatus.setText(e.getMessage());
}
}
private void syncRoundInfoToGui() {
if (this.logic.isGameIsRunning()) {
this.labelRoundValue.setText(String.valueOf(this.logic.getRoundNumber()));
this.labelRoundPointsValue.setText(String.valueOf(this.logic.getRoundPoints()));
if (this.logic.getCurrentPlayer() == 0) {
this.labelS1Name.setForeground(Color.GREEN);
this.labelS2Name.setForeground(Color.BLACK);
this.labelS2PointsValue.setText(String.valueOf(this.logic.getPoints(1)));
} else {
this.labelS2Name.setForeground(Color.GREEN);
this.labelS1Name.setForeground(Color.BLACK);
this.labelS1PointsValue.setText(String.valueOf(this.logic.getPoints(0)));
}
} else {
this.labelS2Name.setForeground(Color.BLACK);
this.labelS1Name.setForeground(Color.BLACK);
this.textfieldS1Name.setEditable(true);
this.textfieldS2Name.setEditable(true);
this.labelStatus.setText("Das Spiel ist beendet!");
this.buttonReady.setEnabled(false);
this.buttonRoll.setEnabled(false);
this.buttonGo.setEnabled(true);
this.toggleDie1.setEnabled(false);
this.toggleDie2.setEnabled(false);
this.toggleDie3.setEnabled(false);
this.toggleDie4.setEnabled(false);
this.toggleDie5.setEnabled(false);
this.toggleDie6.setEnabled(false);
}
}
private void syncLogicDiceToGui() {
this.syncLogicDieToGui(this.toggleDie1, 0);
this.syncLogicDieToGui(this.toggleDie2, 1);
this.syncLogicDieToGui(this.toggleDie3, 2);
this.syncLogicDieToGui(this.toggleDie4, 3);
this.syncLogicDieToGui(this.toggleDie5, 4);
this.syncLogicDieToGui(this.toggleDie6, 5);
this.buttonRoll.setEnabled(this.logic.isPlayerCanThrowDice());
this.labelRoundPointsValue.setText(String.valueOf(this.logic.getRoundPoints()));
}
private void syncLogicDieToGui(JToggleButton die, int dieIndex) {
die.setText(String.valueOf(this.logic.getDiePips(dieIndex)));
if (this.logic.isDieFixed(dieIndex)) {
die.setForeground(Color.BLUE);
die.setSelected(true);
} else {
die.setForeground(Color.BLACK);
die.setSelected(false);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GUI thisClass = new GUI();
thisClass.setDefaultCloseOperation(3);
thisClass.setVisible(true);
}
});
}
}

View File

@ -31,9 +31,9 @@
// Install java.
// See https://github.com/devcontainers/features/tree/main/src/java#options for details.
"ghcr.io/devcontainers/features/java:1": {
"version": "23.0.1-tem",
"version": "21.0.1-librca",
"installGradle": false,
"jdkDistro": "Temurin"
"jdkDistro": "librca"
}
}
}

View File

@ -1,5 +1,10 @@
Describe the changes you have made here: what, why, ...
Link the issue that will be closed, e.g., "Closes #333". If your PR closes a koppor issue, link it using its URL, e.g., "Closes https://github.com/koppor/jabref/issues/47".
<!--
Describe the changes you have made here: what, why, ...
Link the issue that will be closed, e.g., "Closes #333".
If your PR closes a koppor issue, link it using its URL, e.g., "Closes https://github.com/koppor/jabref/issues/47".
"Closes" is a keyword GitHub uses to link PRs with issues; do not change it.
Don't reference an issue in the PR title because GitHub does not support auto-linking there.
-->
### Mandatory checks
@ -8,8 +13,7 @@ Link the issue that will be closed, e.g., "Closes #333". If your PR closes a kop
- [x] done; [ ] not done / not applicable
-->
- [x] I own the copyright of the code submitted and I licence it under the [MIT license](https://github.com/JabRef/jabref/blob/main/LICENSE)
- [ ] Change in `CHANGELOG.md` described in a way that is understandable for the average user (if change is visible to the user)
- [ ] Change in `CHANGELOG.md` described in a way that is understandable for the average user (if applicable)
- [ ] Tests created for changes (if applicable)
- [ ] Manually tested changed features in running JabRef (always required)
- [ ] Screenshots added in PR description (for UI changes)

View File

@ -2,8 +2,12 @@
message: |
Your code currently does not meet [JabRef's code guidelines](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-13-code-style.html).
We use [Checkstyle](https://checkstyle.sourceforge.io/) to identify issues.
The tool reviewdog already placed comments on GitHub to indicate the places. See the tab "Files" in you PR.
Please carefully follow [the setup guide for the codestyle](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-13-code-style.html).
Afterwards, please [run checkstyle locally](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-13-code-style.html#run-checkstyle) and fix the issues.
You can check review dog's comments at the tab "Files changed" of your pull request.
- jobName: OpenRewrite
message: |
Your code currently does not meet JabRef's code guidelines.
@ -30,8 +34,3 @@
message: |
While the PR was in progress, a new version of JabRef has been released.
You have to merge `upstream/main` and move your entry in `CHANGELOG.md` up to the section `## [Unreleased]`.
- jobName: 'Unit tests'
message: |
JUnit tests are failing. In the area "Some checks were not successful", locate "Tests / Unit tests (pull_request)" and click on "Details". This brings you to the test output.
You can then run these tests in IntelliJ to reproduce the failing tests locally. We offer a quick test running howto in the section [Final build system checks](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-12-build.html#final-build-system-checks) in our setup guide.

View File

@ -0,0 +1,31 @@
name: Add greeting to issues for first time contributors
on:
issues:
types:
- labeled
pull_request_target:
types:
- labeled
jobs:
GreetingFirstTimeCodeContribution:
if: ${{ github.event.label.name == 'FirstTimeCodeContribution' }}
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: GreetingFirstTimeCodeContribution
uses: peter-evans/create-or-update-comment@v4
with:
issue-number: ${{ github.event.issue.number || github.event.pull_request.number }}
body: |
Welcome to the vibrant world of open-source development with JabRef!
Newcomers, we're excited to have you on board. Start by exploring our [Contributing](https://github.com/JabRef/jabref/blob/main/CONTRIBUTING.md) guidelines, and don't forget to check out our [workspace setup guidelines](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace) to get started smoothly.
In case you encounter failing tests during development, please check our [developer FAQs](https://devdocs.jabref.org/code-howtos/faq.html)!
Having any questions or issues? Feel free to ask here on GitHub. Need help setting up your local workspace? Join the conversation on [JabRef's Gitter chat](https://gitter.im/JabRef/jabref). And don't hesitate to open a (draft) pull request early on to show the direction it is heading towards. This way, you will receive valuable feedback.
Happy coding! 🚀

View File

@ -0,0 +1,44 @@
name: Add to Project on Label
on:
issues:
types: [labeled]
permissions:
issues: write
jobs:
add-to-project:
runs-on: ubuntu-latest
steps:
- name: "good first issue"
if: "${{ github.event.label.name == 'good first issue' }}"
env:
GH_TOKEN: ${{ secrets.GH_TOKEN_PROJECT_ITEM_ADD }}
run: |
ISSUE_URL=$(jq --raw-output .issue.html_url "$GITHUB_EVENT_PATH")
gh project item-add 5 --owner JabRef --url $ISSUE_URL
- name: needs-refinement
if: github.event.label.name == 'needs-refinement'
env:
GH_TOKEN: ${{ secrets.GH_TOKEN_PROJECT_ITEM_ADD }}
run: |
ISSUE_URL=$(jq --raw-output .issue.html_url "$GITHUB_EVENT_PATH")
gh project item-add 15 --owner JabRef --url $ISSUE_URL
- name: "status: freeze"
if: "${{ github.event.label.name == 'status: freeze' }}"
env:
GH_TOKEN: ${{ secrets.GH_TOKEN_PROJECT_ITEM_ADD }}
run: |
ISSUE_URL=$(jq --raw-output .issue.html_url "$GITHUB_EVENT_PATH")
gh project item-add 9 --owner JabRef --url $ISSUE_URL
- name: ui
if: "${{ github.event.label.name == 'ui' }}"
env:
GH_DEBUG: api
GH_TOKEN: ${{ secrets.GH_TOKEN_PROJECT_ITEM_ADD }}
run: |
ISSUE_URL=$(jq --raw-output .issue.html_url "$GITHUB_EVENT_PATH")
echo $ISSUE_URL
gh project item-add 8 --owner JabRef --url $ISSUE_URL

View File

@ -1,57 +0,0 @@
name: Assign Issue
on:
schedule:
- cron: 4 12 * * *
issue_comment:
types: [created]
workflow_dispatch:
jobs:
assign:
if: github.repository_owner == 'JabRef'
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Assign the user or unassign stale assignments
id: assign
uses: takanome-dev/assign-issue-action@beta
with:
github_token: '${{ secrets.GITHUB_TOKEN }}'
days_until_unassign: 30
maintainers: koppor, Siedlerchr, ThiloteE, calixtus, HoussemNasri
assigned_comment: |
👋 Hey @{{ handle }}, thank you for your interest in this issue! 🎉
We're excited to have you on board. Start by exploring our [Contributing](https://github.com/JabRef/jabref/blob/main/CONTRIBUTING.md) guidelines, and don't forget to check out our [workspace setup guidelines](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace) to get started smoothly.
In case you encounter failing tests during development, please check our [developer FAQs](https://devdocs.jabref.org/code-howtos/faq.html)!
Having any questions or issues? Feel free to ask here on GitHub. Need help setting up your local workspace? Join the conversation on [JabRef's Gitter chat](https://gitter.im/JabRef/jabref). And don't hesitate to open a (draft) pull request early on to show the direction it is heading towards. This way, you will receive valuable feedback.
Happy coding! 🚀
⏳ Please note, you will be automatically unassigned if the issue isn't closed within **{{ total_days }} days** (by **{{ unassigned_date }}**). A maintainer can also add the "**{{ pin_label }}**"" label to prevent automatic unassignment.
- name: Move Issue to "Assigned" Column in "Candidates for University Projects"
if: steps.assign.outputs.assigned == 'yes'
uses: m7kvqbe1/github-action-move-issues@feat/skip-if-not-in-project-flag
with:
github-token: ${{ secrets.GH_TOKEN_ACTION_MOVE_ISSUE }}
project-url: "https://github.com/orgs/JabRef/projects/3"
target-labels: "📍 Assigned"
target-column: "Assigned"
ignored-columns: ""
default-column: "Free to take"
skip-if-not-in-project: true
- name: Move Issue to "Assigned" Column in "Good First Issues"
if: steps.assign.outputs.assigned == 'yes'
uses: m7kvqbe1/github-action-move-issues@feat/skip-if-not-in-project-flag
with:
github-token: ${{ secrets.GH_TOKEN_ACTION_MOVE_ISSUE }}
project-url: "https://github.com/orgs/JabRef/projects/5"
target-labels: "📍 Assigned"
target-column: "Assigned"
ignored-columns: ""
default-column: "Free to take"
skip-if-not-in-project: true

View File

@ -10,13 +10,13 @@ jobs:
runs-on: ubuntu-latest
# Run only if PR is inside JabRef's main repository and created by dependabot or by an update workflow
if: >
(github.repository == 'JabRef/jabref') &&
(github.repository == 'JabRef/jabref') &&
(github.event.pull_request.head.repo.full_name == 'JabRef/jabref') &&
(
(github.actor == 'dependabot[bot]') ||
(
startsWith(github.event.pull_request.title, '[Bot] ') ||
startsWith(github.event.pull_request.title, 'Bump ') ||
startsWith(github.event.pull_request.title, '[Bot] ') ||
startsWith(github.event.pull_request.title, 'Bump ') ||
startsWith(github.event.pull_request.title, 'New Crowdin updates') ||
startsWith(github.event.pull_request.title, 'Update Gradle Wrapper from')
)
@ -26,9 +26,9 @@ jobs:
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GH_TOKEN: ${{secrets.GH_TOKEN_JABREF_MACHINE_PR_APPROVE}}
GITHUB_TOKEN: ${{secrets.GH_TOKEN_JABREF_MACHINE_PR_APPROVE}}
- name: Merge PR
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GH_TOKEN: ${{secrets.GH_TOKEN_UPDATE_GRADLE_WRAPPER}}
GITHUB_TOKEN: ${{secrets.GH_TOKEN_UPDATE_GRADLE_WRAPPER}}

View File

@ -18,7 +18,6 @@ concurrency:
jobs:
lychee:
if: github.repository_owner == 'JabRef'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
@ -32,7 +31,7 @@ jobs:
restore-keys: cache-lychee-
- name: Link Checker
id: lychee
uses: lycheeverse/lychee-action@v2.1.0
uses: lycheeverse/lychee-action@v1.10.0
with:
fail: true
args: --accept '200,201,202,203,204,403,429,500' --max-concurrency 1 --cache --no-progress --exclude-all-private './**/*.md'

View File

@ -6,7 +6,6 @@ on:
jobs:
cleanup:
if: github.repository_owner == 'JabRef'
runs-on: ubuntu-latest
steps:
- name: Cancel deployment run
@ -29,7 +28,7 @@ jobs:
BUILDJABREFPRIVATEKEY: ${{ secrets.buildJabRefPrivateKey }}
- name: Delete folder on builds.jabref.org
if: steps.checksecrets.outputs.secretspresent == 'YES'
uses: appleboy/ssh-action@v1.1.0
uses: appleboy/ssh-action@v1.0.3
with:
script: rm -rf /var/www/builds.jabref.org/www/pull/${{ github.event.pull_request.number }} || true
host: build-upload.jabref.org
@ -38,8 +37,8 @@ jobs:
key: ${{ secrets.buildJabRefPrivateKey }}
- name: Update PR comment
if: steps.checksecrets.outputs.secretspresent == 'YES'
uses: thollander/actions-comment-pull-request@v3
uses: thollander/actions-comment-pull-request@v2
with:
comment-tag: download-link
comment_tag: download-link
message: The build for this PR is no longer available. Please visit <https://builds.jabref.org/main/> for the latest build.
mode: upsert

View File

@ -34,7 +34,6 @@ concurrency:
jobs:
build:
if: github.repository_owner == 'JabRef'
strategy:
fail-fast: false
matrix:
@ -78,7 +77,7 @@ jobs:
- name: Setup JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Clean up keychain
run: |
@ -206,7 +205,7 @@ jobs:
if: ${{ (!startsWith(github.ref, 'refs/heads/gh-readonly-queue')) && (steps.checksecrets.outputs.secretspresent == 'YES') && ((matrix.os == 'ubuntu-latest') || ((matrix.os == 'macos-14') && !((startsWith(github.ref, 'refs/tags/') || inputs.notarization == true)))) }}
shell: bash
run: |
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' build/distribution/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' build/distribution/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/
- name: Upload to GitHub workflow artifacts store (macOS)
if: (matrix.os == 'macos-14') && (steps.checksecrets.outputs.secretspresent == 'YES') && (startsWith(github.ref, 'refs/tags/') || inputs.notarization == true)
uses: actions/upload-artifact@v4

View File

@ -32,13 +32,12 @@ concurrency:
jobs:
build:
if: github.repository_owner == 'JabRef'
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest, buildjet-8vcpu-ubuntu-2204-arm]
jdk: [23]
javafx: [24]
jdk: [22]
javafx: [23]
include:
- os: ubuntu-latest
displayName: linux
@ -267,7 +266,7 @@ jobs:
shell: cmd
# for rsync installed by chocolatey, we need the ssh.exe delivered with that installation
run: |
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/jdk-ea && rsync" -e 'C:\ProgramData\chocolatey\lib\rsync\tools\bin\ssh.exe -p 9922 -i sshkey -o StrictHostKeyChecking=no' build/distribution/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/jdk-ea/ || true
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/jdk-ea && rsync" -e 'C:\ProgramData\chocolatey\lib\rsync\tools\bin\ssh.exe -p 9922 -i sshkey -o StrictHostKeyChecking=no' build/distribution/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/jdk-ea/
- name: Upload to builds.jabref.org (linux, macOS)
if: (matrix.os != 'windows-latest') && (steps.checksecrets.outputs.secretspresent == 'YES') && (github.ref == 'refs/heads/main')
shell: bash

View File

@ -90,7 +90,7 @@ jobs:
- name: Setup JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
@ -242,7 +242,7 @@ jobs:
shell: cmd
# for rsync installed by chocolatey, we need the ssh.exe delivered with that installation
run: |
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'C:\ProgramData\chocolatey\lib\rsync\tools\bin\ssh.exe -p 9922 -i sshkey -o StrictHostKeyChecking=no' build/distribution/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'C:\ProgramData\chocolatey\lib\rsync\tools\bin\ssh.exe -p 9922 -i sshkey -o StrictHostKeyChecking=no' build/distribution/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/
- name: Upload to builds.jabref.org (linux, macOS)
# macOS: Negated condition of "Upload to GitHub workflow artifacts store (macOS)"
# Reason: We either upload the non-notarized files - or notarize the files later (and upload these later)
@ -250,7 +250,7 @@ jobs:
if: ${{ (!startsWith(github.ref, 'refs/heads/gh-readonly-queue')) && (steps.checksecrets.outputs.secretspresent == 'YES') && ((matrix.os == 'ubuntu-latest') || ((matrix.os == 'macos-13') && !((startsWith(github.ref, 'refs/tags/') || inputs.notarization == true)))) }}
shell: bash
run: |
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' build/distribution/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' build/distribution/ jrrsync@build-upload.jabref.org:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/
- name: Upload to GitHub workflow artifacts store (macOS)
if: (matrix.os == 'macos-13') && (steps.checksecrets.outputs.secretspresent == 'YES') && (startsWith(github.ref, 'refs/tags/') || inputs.notarization == true)
uses: actions/upload-artifact@v4
@ -287,11 +287,11 @@ jobs:
BUILDJABREFPRIVATEKEY: ${{ secrets.buildJabRefPrivateKey }}
- name: Comment PR
if: (steps.checksecrets.outputs.secretspresent == 'YES')
uses: thollander/actions-comment-pull-request@v3
uses: thollander/actions-comment-pull-request@v2
with:
message: |
The build of this PR is available at <https://builds.jabref.org/pull/${{ github.event.pull_request.number }}/merge>.
comment-tag: download-link
comment_tag: download-link
mode: recreate
notarize: # outsourced in a separate job to be able to rerun if this fails for timeouts
name: macOS notarization

View File

@ -15,7 +15,6 @@ concurrency:
jobs:
action:
if: github.repository_owner == 'JabRef'
runs-on: ubuntu-latest
steps:
- name: 'Checkout'

View File

@ -1,124 +0,0 @@
name: On labeled issue
on:
issues:
types:
- labeled
jobs:
Assigned:
# Triggered when manually assigned the label "📍 Assigned" to trigger the automatic unassignment after 30 days
name: "📍 Assigned"
if: ${{ github.event.label.name == '📍 Assigned' && github.repository_owner == 'JabRef' }}
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Move Issue to "Free to take" Column in "Candidates for University Projects"
uses: m7kvqbe1/github-action-move-issues@feat/skip-if-not-in-project-flag
with:
github-token: ${{ secrets.GH_TOKEN_ACTION_MOVE_ISSUE }}
project-url: "https://github.com/orgs/JabRef/projects/3"
target-labels: "📍 Assigned"
target-column: "Free to take"
ignored-columns: ""
default-column: "Free to take"
skip-if-not-in-project: true
- name: Move Issue to "Free to take" Column in "Good First Issues"
uses: m7kvqbe1/github-action-move-issues@feat/skip-if-not-in-project-flag
with:
github-token: ${{ secrets.GH_TOKEN_ACTION_MOVE_ISSUE }}
project-url: "https://github.com/orgs/JabRef/projects/5"
target-labels: "📍 Assigned"
target-column: "Free to take"
ignored-columns: ""
default-column: "Free to take"
skip-if-not-in-project: true
FirstTimeCodeContribution:
if: ${{ github.event.label.name == 'FirstTimeCodeContribution' && github.repository_owner == 'JabRef' }}
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: GreetingFirstTimeCodeContribution
uses: peter-evans/create-or-update-comment@v4
with:
issue-number: ${{ github.event.issue.number || github.event.pull_request.number }}
body: |
Welcome to the vibrant world of open-source development with JabRef!
Newcomers, we're excited to have you on board. Start by exploring our [Contributing](https://github.com/JabRef/jabref/blob/main/CONTRIBUTING.md) guidelines, and don't forget to check out our [workspace setup guidelines](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace) to get started smoothly.
In case you encounter failing tests during development, please check our [developer FAQs](https://devdocs.jabref.org/code-howtos/faq.html)!
Having any questions or issues? Feel free to ask here on GitHub. Need help setting up your local workspace? Join the conversation on [JabRef's Gitter chat](https://gitter.im/JabRef/jabref). And don't hesitate to open a (draft) pull request early on to show the direction it is heading towards. This way, you will receive valuable feedback.
⚠ Note that this issue will become unassigned if it isn't closed within **30 days**.
🔧 A maintainer can also add the **`Pinned`** label to prevent it from being unassigned automatically.
Happy coding! 🚀
- name: Move Issue to "Assigned" Column in "Candidates for University Projects"
uses: m7kvqbe1/github-action-move-issues@feat/skip-if-not-in-project-flag
with:
github-token: ${{ secrets.GH_TOKEN_ACTION_MOVE_ISSUE }}
project-url: "https://github.com/orgs/JabRef/projects/3"
target-labels: "FirstTimeCodeContribution"
target-column: "Assigned"
ignored-columns: ""
default-column: "Free to take"
skip-if-not-in-project: true
- name: Move Issue to "Assigned" Column in "Good First Issues"
uses: m7kvqbe1/github-action-move-issues@feat/skip-if-not-in-project-flag
with:
github-token: ${{ secrets.GH_TOKEN_ACTION_MOVE_ISSUE }}
project-url: "https://github.com/orgs/JabRef/projects/5"
target-labels: "FirstTimeCodeContribution"
target-column: "Assigned"
ignored-columns: ""
default-column: "Free to take"
skip-if-not-in-project: true
good-first-issue:
name: "good first issue"
if: "${{ github.event.label.name == 'good first issue' && github.repository_owner == 'JabRef' }}"
runs-on: ubuntu-latest
steps:
- name: "good first issue"
env:
GH_TOKEN: ${{ secrets.GH_TOKEN_PROJECT_ITEM_ADD }}
run: |
ISSUE_URL=$(jq --raw-output .issue.html_url "$GITHUB_EVENT_PATH")
gh project item-add 5 --owner JabRef --url $ISSUE_URL
needs-refinement:
if: github.event.label.name == 'needs-refinement' && github.repository_owner == 'JabRef'
runs-on: ubuntu-latest
steps:
- name: needs-refinement
env:
GH_TOKEN: ${{ secrets.GH_TOKEN_PROJECT_ITEM_ADD }}
run: |
ISSUE_URL=$(jq --raw-output .issue.html_url "$GITHUB_EVENT_PATH")
gh project item-add 15 --owner JabRef --url $ISSUE_URL
status-freeze:
name: "status: freeze"
if: "${{ github.event.label.name == 'status: freeze' && github.repository_owner == 'JabRef' }}"
runs-on: ubuntu-latest
steps:
- name: "status: freeze"
env:
GH_TOKEN: ${{ secrets.GH_TOKEN_PROJECT_ITEM_ADD }}
run: |
ISSUE_URL=$(jq --raw-output .issue.html_url "$GITHUB_EVENT_PATH")
gh project item-add 9 --owner JabRef --url $ISSUE_URL
ui:
if: "${{ github.event.label.name == 'ui' && github.repository_owner == 'JabRef' }}"
runs-on: ubuntu-latest
steps:
- name: ui
env:
GH_DEBUG: api
GH_TOKEN: ${{ secrets.GH_TOKEN_PROJECT_ITEM_ADD }}
run: |
ISSUE_URL=$(jq --raw-output .issue.html_url "$GITHUB_EVENT_PATH")
echo $ISSUE_URL
gh project item-add 8 --owner JabRef --url $ISSUE_URL

View File

@ -1,23 +0,0 @@
name: On labeled PR
on:
pull_request:
types:
- labeled
jobs:
automerge:
name: Auto Merge
if: "${{ github.event.label.name == 'automerge' && github.repository_owner == 'JabRef' }}"
runs-on: ubuntu-latest
steps:
- name: Approve PR
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GH_TOKEN_JABREF_MACHINE_PR_APPROVE}}
- name: Merge PR
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GH_TOKEN_UPDATE_GRADLE_WRAPPER}}

View File

@ -1,34 +0,0 @@
name: On unlabeled issue
on:
issues:
types:
- unlabeled
jobs:
FirstTimeCodeContribution_or_Assigned:
if: ${{ ((github.event.label.name == 'FirstTimeCodeContribution') || (github.event.label.name == '📍 Assigned')) && github.repository_owner == 'JabRef' }}
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Move Issue to "Free to take" Column in "Candidates for University Projects"
uses: m7kvqbe1/github-action-move-issues@feat/skip-if-not-in-project-flag
with:
github-token: ${{ secrets.GH_TOKEN_ACTION_MOVE_ISSUE }}
project-url: "https://github.com/orgs/JabRef/projects/3"
target-labels: "📍 Assigned"
target-column: "Assigned"
ignored-columns: ""
default-column: "Free to take"
skip-if-not-in-project: true
- name: Move Issue to "Free to take" Column in "Good First Issues"
uses: m7kvqbe1/github-action-move-issues@feat/skip-if-not-in-project-flag
with:
github-token: ${{ secrets.GH_TOKEN_ACTION_MOVE_ISSUE }}
project-url: "https://github.com/orgs/JabRef/projects/5"
target-labels: "📍 Assigned"
target-column: "Assigned"
ignored-columns: ""
default-column: "Free to take"
skip-if-not-in-project: true

View File

@ -6,8 +6,6 @@ on:
- 'docs/**'
- '.github/workflows/pages.yml'
push:
branches:
main
paths:
- 'docs/**'
- '.github/workflows/pages.yml'
@ -19,8 +17,9 @@ permissions:
pages: write
id-token: write
# Allow one concurrent deployment
concurrency:
group: "${{ github.workflow }}-${{ github.head_ref || github.ref }}"
group: "pages"
cancel-in-progress: true
jobs:
@ -34,9 +33,9 @@ jobs:
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3' # Not needed with a .ruby-version file
ruby-version: '2.7' # Not needed with a .ruby-version file
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
cache-version: 0 # Increment this number if you need to re-download cached gems
cache-version: 1 # Increment this number if you need to re-download cached gems
working-directory: docs/
- name: Setup Pages
id: pages

View File

@ -14,7 +14,7 @@ on:
jobs:
comment:
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-based-on-the-conclusion-of-another-workflow
if: ${{ github.event.workflow_run.conclusion == 'failure' && (github.repository_owner == 'JabRef') }}
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
permissions:
actions: read
@ -34,27 +34,16 @@ jobs:
PR_NUMBER=$(cat pr_number.txt)
echo "Read PR number $PR_NUMBER"
echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT
- uses: actions/checkout@v4
- name: Is PR from forked?
if: ${{ steps.read-pr_number.outputs.pr_number != '' }}
id: isCrossRepository
run: |
isCrossRepository=$(gh pr view $pr_number --json isCrossRepository --jq '.isCrossRepository')
echo "Got isCrossRepository $isCrossRepository"
echo isCrossRepository=$isCrossRepository >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ github.token }}
pr_number: ${{ steps.read-pr_number.outputs.pr_number }}
- name: Checkout
if: ${{ steps.read-pr_number.outputs.pr_number != '' && steps.isCrossRepository.outputs.isCrossRepository == 'true' }}
if: ${{ steps.read-pr_number.outputs.pr_number != '' }}
uses: actions/checkout@v4
with:
fetch-depth: '0'
show-progress: 'false'
token: ${{ secrets.GITHUB_TOKEN }}
- name: jbang
if: ${{ steps.read-pr_number.outputs.pr_number != '' && steps.isCrossRepository.outputs.isCrossRepository == 'true' }}
uses: jbangdev/jbang-action@v0.119.0
if: ${{ steps.read-pr_number.outputs.pr_number != '' }}
uses: jbangdev/jbang-action@v0.117.1
with:
script: ghprcomment@koppor/ghprcomment
scriptargs: "-r JabRef/jabref -p ${{ steps.read-pr_number.outputs.pr_number }} -w ${{ github.event.workflow_run.id }}"

View File

@ -48,7 +48,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

View File

@ -37,7 +37,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Run checkstyle reporter
uses: dbelyaev/action-checkstyle@master
@ -65,7 +65,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
@ -87,7 +87,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
@ -109,7 +109,7 @@ jobs:
submodules: 'false'
show-progress: 'false'
- name: markdownlint-cli2-action
uses: DavidAnson/markdownlint-cli2-action@v17
uses: DavidAnson/markdownlint-cli2-action@v16
with:
globs: |
*.md
@ -131,7 +131,7 @@ jobs:
export PATH=$PATH:$HOME/.jbang/bin
# run heylogs verification
jbang com.github.nbbrd.heylogs:heylogs-cli:0.9.2:bin check CHANGELOG.md > heylogs.txt || true
jbang com.github.nbbrd.heylogs:heylogs-cli:0.7.2:bin check CHANGELOG.md > heylogs.txt || true
# improve output
sed -i 's/all-h2-contain-a-version/all-h2-contain-a-version (ignored)/' heylogs.txt
@ -175,7 +175,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
@ -218,7 +218,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
@ -259,7 +259,7 @@ jobs:
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
@ -309,7 +309,7 @@ jobs:
if: github.ref == 'refs/heads/main'
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
@ -332,24 +332,6 @@ jobs:
env:
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
requirements_coverage:
name: "Validate requirement coverage"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
show-progress: 'false'
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- run: ./gradlew traceRequirements
- if: failure()
run: cat build/reports/tracing.txt
# This is https://github.com/marketplace/actions/gradle-wrapper-validation
# It ensures that the jar file is from gradle and not by a strange third party.
gradlevalidation:
@ -380,7 +362,7 @@ jobs:
uses: actions/github-script@v7
with:
script: |
core.setFailed('Pull requests should come from a branch other than "main"\n\n👉 Please read [the CONTRIBUTING guide](https://github.com/JabRef/jabref/blob/main/CONTRIBUTING.md#contributing) carefully again. 👈')
core.setFailed('Pull requests should come from a branch other than "main"\n\n👉 Please read https://devdocs.jabref.org/contributing again carefully. 👈')
upload-pr-number:
runs-on: ubuntu-latest

View File

@ -7,7 +7,6 @@ on:
jobs:
update-gradle-wrapper:
if: github.repository_owner == 'JabRef'
runs-on: ubuntu-latest
steps:
@ -15,11 +14,11 @@ jobs:
- name: Setup JDK
uses: actions/setup-java@v4
with:
java-version: 23.0.1
java-version: 21.0.2
distribution: 'temurin'
- name: Update Gradle Wrapper
uses: gradle-update/update-gradle-wrapper-action@v2
uses: gradle-update/update-gradle-wrapper-action@v1
with:
labels: dependencies
repo-token: ${{ secrets.GH_TOKEN_UPDATE_GRADLE_WRAPPER }}

View File

@ -5,4 +5,4 @@ FROM gitpod/workspace-full
# All available versions can be listed using sdk ls java
# More information about SDKMAN available at https://github.com/sdkman/sdkman-cli#sdkman-cli
RUN bash -c ". /home/gitpod/.sdkman/bin/sdkman-init.sh \
&& sdk install java 23-open"
&& sdk install java 21-open"

View File

@ -1,6 +1,6 @@
{
"recommendations": [
"davidanson.vscode-markdownlint",
"ltex-plus.vscode-ltex-plus"
"valentjn.vscode-ltex"
]
}

View File

@ -2,6 +2,4 @@ Checkstyle
CouchDB
JabDrive
JabRef
OpenFastTrace
OpenRewrite
Temurin

View File

@ -11,16 +11,13 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv
### Added
- We added a "view as BibTeX" option before importing an entry from the citation relation tab. [#11826](https://github.com/JabRef/jabref/issues/11826)
- We added probable search hits instead of exact matches. Sorting by hit score can be done by the new score table column. [#11542](https://github.com/JabRef/jabref/pull/11542)
- We added support finding LaTeX-encoded special characters based on plain Unicode and vice versa. [#11542](https://github.com/JabRef/jabref/pull/11542)
- When a search hits a file, the file icon of that entry is changed accordingly. [#11542](https://github.com/JabRef/jabref/pull/11542)
- We added an AI-based chat for entries with linked PDF files. [#11430](https://github.com/JabRef/jabref/pull/11430)
- We added an AI-based summarization possibility for entries with linked PDF files. [#11430](https://github.com/JabRef/jabref/pull/11430)
- We added an AI section in JabRef's [preferences](https://docs.jabref.org/ai/preferences). [#11430](https://github.com/JabRef/jabref/pull/11430)
- We added AI providers: OpenAI, Mistral AI, Hugging Face and Google. [#11430](https://github.com/JabRef/jabref/pull/11430), [#11736](https://github.com/JabRef/jabref/pull/11736)
- We added AI providers: [Ollama](https://docs.jabref.org/ai/local-llm#step-by-step-guide-for-ollama) and GPT4All, which add the possibility to use local LLMs privately on your own device. [#11430](https://github.com/JabRef/jabref/pull/11430), [#11870](https://github.com/JabRef/jabref/issues/11870)
- We added support for selecting and using CSL Styles in JabRef's OpenOffice/LibreOffice integration for inserting bibliographic and in-text citations into a document. [#2146](https://github.com/JabRef/jabref/issues/2146), [#8893](https://github.com/JabRef/jabref/issues/8893)
- We added "Tools > New library based on references in PDF file" ... to create a new library based on the references section in a PDF file. [#11522](https://github.com/JabRef/jabref/pull/11522)
- We added Tools > New library based on references in PDF file... to create a new library based on the references section in a PDF file. [#11522](https://github.com/JabRef/jabref/pull/11522)
- When converting the references section of a paper (PDF file), more than the last page is treated. [#11522](https://github.com/JabRef/jabref/pull/11522)
- Added the functionality to invoke offline reference parsing explicitly. [#11565](https://github.com/JabRef/jabref/pull/11565)
- The dialog for [adding an entry using reference text](https://docs.jabref.org/collect/newentryfromplaintext) is now filled with the clipboard contents as default. [#11565](https://github.com/JabRef/jabref/pull/11565)
@ -29,57 +26,26 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv
- We enabled creating a new file link manually. [#11017](https://github.com/JabRef/jabref/issues/11017)
- We added a toggle button to invert the selected groups. [#9073](https://github.com/JabRef/jabref/issues/9073)
- We reintroduced the floating search in the main table. [#4237](https://github.com/JabRef/jabref/issues/4237)
- We improved [cleanup](https://docs.jabref.org/finding-sorting-and-cleaning-entries/cleanupentries) of `arXiv` IDs in distributed in the fields `note`, `version`, `institution`, and `eid` fields. [#11306](https://github.com/JabRef/jabref/issues/11306)
- We added a switch not to store the linked file URL, because it caused troubles at other apps. [#11735](https://github.com/JabRef/jabref/pull/11735)
- When starting a new SLR, the selected catalogs now persist within and across JabRef sessions. [koppor#614](https://github.com/koppor/jabref/issues/614)
- We added support for drag'n'drop on an entry in the maintable to an external application to get the entry preview dropped. [#11846](https://github.com/JabRef/jabref/pull/11846)
- We added the functionality to double click on a [LaTeX citation](https://docs.jabref.org/advanced/entryeditor/latex-citations) to jump to the respective line in the LaTeX editor. [#11996](https://github.com/JabRef/jabref/issues/11996)
- We added a different background color to the search bar to indicate when the search syntax is wrong. [#11658](https://github.com/JabRef/jabref/pull/11658)
- We added a setting which always adds the literal "Cited on pages" text before each JStyle citation. [#11691](https://github.com/JabRef/jabref/pull/11732)
- We added a new plain citation parser that uses LLMs. [#11825](https://github.com/JabRef/jabref/issues/11825)
- We added support for modifier keys when dropping a file on an entry in the main table. [#12001](https://github.com/JabRef/jabref/pull/12001)
- We added an importer for SSRN URLs. [#12021](https://github.com/JabRef/jabref/pull/12021)
- We added a compare button to the duplicates in the citation relations tab to open the "Possible duplicate entries" window. [#11192](https://github.com/JabRef/jabref/issues/11192)
- We added automatic browser extension install on Windows for Chrome and Edge. [#6076](https://github.com/JabRef/jabref/issues/6076)
- We added support to automatically open a `.bib` file in the current/parent folder if no other library is opened. [koppor#377](https://github.com/koppor/jabref/issues/377)
- We added a search bar for filtering keyboard shortcuts. [#11686](https://github.com/JabRef/jabref/issues/11686)
- By double clicking on a local citation in the Citation Relations Tab you can now jump the linked entry. [#11955](https://github.com/JabRef/jabref/pull/11955)
- We use the menu icon for background tasks as a progress indicator to visualise an import's progress when dragging and dropping several PDF files into the main table. [#12072](https://github.com/JabRef/jabref/pull/12072)
### Changed
- The search syntax is changed to [Apache Lucene syntax](https://lucene.apache.org/core/9_11_1/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Overview) (also to be similar to the [online search syntax](https://docs.jabref.org/collect/import-using-online-bibliographic-database#search-syntax)). [#11542](https://github.com/JabRef/jabref/pull/11542/)
- When searching using a regular expression, one needs to enclose the search string in `/`. [#11542](https://github.com/JabRef/jabref/pull/11542/)
- A search in "any" fields ignores the [groups](https://docs.jabref.org/finding-sorting-and-cleaning-entries/groups). [#7996](https://github.com/JabRef/jabref/issues/7996)
- When a communication error with an [online service](https://docs.jabref.org/collect/import-using-online-bibliographic-database) occurs, JabRef displays the HTTP error. [#11223](https://github.com/JabRef/jabref/issues/11223)
- The Pubmed/Medline Plain importer now imports the PMID field as well [#11488](https://github.com/JabRef/jabref/issues/11488)
- The 'Check for updates' menu bar button is now always enabled. [#11485](https://github.com/JabRef/jabref/pull/11485)
- JabRef respects the [configuration for storing files relative to the .bib file](https://docs.jabref.org/finding-sorting-and-cleaning-entries/filelinks#directories-for-files) in more cases. [#11492](https://github.com/JabRef/jabref/pull/11492)
- JabRef does not show finished background tasks in the status bar popup. [#11821](https://github.com/JabRef/jabref/pull/11821)
- JabRef does not show finished background tasks in the status bar popup. [#11574](https://github.com/JabRef/jabref/pull/11574)
- We enhanced the indexing speed. [#11502](https://github.com/JabRef/jabref/pull/11502)
- When dropping a file into the main table, after copy or move, the file is now put in the [configured directory and renamed according to the configured patterns](https://docs.jabref.org/finding-sorting-and-cleaning-entries/filelinks#filename-format-and-file-directory-pattern). [#12001](https://github.com/JabRef/jabref/pull/12001)
- ⚠️ Renamed command line parameters `embeddBibfileInPdf` to `embedBibFileInPdf`, `writeMetadatatoPdf` to `writeMetadataToPdf`, and `writeXMPtoPdf` to `writeXmpToPdf`. [#11575](https://github.com/JabRef/jabref/pull/11575)
- The browse button for a Custom theme now opens in the directory of the current used CSS file. [#11597](https://github.com/JabRef/jabref/pull/11597)
- The browse button for a Custom exporter now opens in the directory of the current used exporter file. [#11717](https://github.com/JabRef/jabref/pull/11717)
- ⚠️ We relaxed the escaping requirements for [bracketed patterns](https://docs.jabref.org/setup/citationkeypatterns), which are used for the [citaton key generator](https://docs.jabref.org/advanced/entryeditor#autogenerate-citation-key) and [filename and directory patterns](https://docs.jabref.org/finding-sorting-and-cleaning-entries/filelinks#auto-linking-files). One only needs to write `\"` if a quote sign should be escaped. All other escapings are not necessary (and working) any more. [#11967](https://github.com/JabRef/jabref/pull/11967)
- When importing BibTeX data starging from on a PDF, the XMP metadata takes precedence over Grobid data. [#11992](https://github.com/JabRef/jabref/pull/11992)
- JabRef now uses TLS 1.2 for all HTTPS connections. [#11852](https://github.com/JabRef/jabref/pull/11852)
- We improved the functionality of getting BibTeX data out of PDF files. [#11999](https://github.com/JabRef/jabref/issues/11999)
- We improved the display of long messages in the integrity check dialog. [#11619](https://github.com/JabRef/jabref/pull/11619)
- We improved the undo/redo buttons in the main toolbar and main menu to be disabled when there is nothing to undo/redo. [#8807](https://github.com/JabRef/jabref/issues/8807)
- We improved the DOI detection in PDF imports. [#11782](https://github.com/JabRef/jabref/pull/11782)
- We improved the performance when pasting and importing entries in an existing library. [#11843](https://github.com/JabRef/jabref/pull/11843)
- When fulltext search is selected but indexing is deactivated, a dialog is now shown asking if the user wants to enable indexing now [#9491](https://github.com/JabRef/jabref/issues/9491)
- We changed instances of 'Search Selected' to 'Search Pre-configured' in Web Search Preferences UI. [#11871](https://github.com/JabRef/jabref/pull/11871)
- We added a new CSS style class `main-table` for the main table. [#11881](https://github.com/JabRef/jabref/pull/11881)
- When renaming a file, the old extension is now used if there is none provided in the new name. [#11903](https://github.com/JabRef/jabref/issues/11903)
- When importing a file using "Find Unlinked Files", when one or more file directories are available, the file path will be relativized where possible [koppor#549](https://github.com/koppor/jabref/issues/549)
- We added minimum window sizing for windows dedicated to creating new entries [#11944](https://github.com/JabRef/jabref/issues/11944)
- We changed the name of the library-based file directory from 'General File Directory' to 'Library-specific File Directory' per issue. [#571](https://github.com/koppor/jabref/issues/571)
- We changed the defualt [unwanted charachters](https://docs.jabref.org/setup/citationkeypatterns#removing-unwanted-characters) in the citation key generator and allow a dash (`-`) and colon (`:`) being part of a citation key. [#12144](https://github.com/JabRef/jabref/pull/12144)
- The CitationKey column is now a default shown column for the entry table. [#10510](https://github.com/JabRef/jabref/issues/10510)
### Fixed
- We fixed an issue where certain actions were not disabled when no libraries were open. [#11923](https://github.com/JabRef/jabref/issues/11923)
- We fixed an issue where the "Check for updates" preference was not saved. [#11485](https://github.com/JabRef/jabref/pull/11485)
- We fixed an issue where an exception was thrown after changing "show preview as a tab" in the preferences. [#11515](https://github.com/JabRef/jabref/pull/11515)
- We fixed an issue where JabRef put file paths as absolute path when an entry was created using drag and drop of a PDF file. [#11173](https://github.com/JabRef/jabref/issues/11173)
@ -98,31 +64,13 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv
- We fixed an issue where the full-text search results were incomplete. [#8626](https://github.com/JabRef/jabref/issues/8626)
- We fixed an issue where search result highlighting was incorrectly highlighting the boolean operators. [#11595](https://github.com/JabRef/jabref/issues/11595)
- We fixed an issue where search result highlighting was broken at complex searches. [#8067](https://github.com/JabRef/jabref/issues/8067)
- We fixed an exception when searching for unlinked files. [#11731](https://github.com/JabRef/jabref/issues/11731)
- We fixed an issue with the link to the full text at the BVB fetcher. [#11852](https://github.com/JabRef/jabref/pull/11852)
- We fixed an issue where two contradicting notifications were shown when cutting an entry in the main table. [#11724](https://github.com/JabRef/jabref/pull/11724)
- We fixed an issue where unescaped braces in the arXiv fetcher were not treated. [#11704](https://github.com/JabRef/jabref/issues/11704)
- We fixed an issue where HTML instead of the fulltext pdf was downloaded when importing arXiv entries. [#4913](https://github.com/JabRef/jabref/issues/4913)
- We fixed an issue where the keywords and crossref fields were not properly focused. [#11177](https://github.com/JabRef/jabref/issues/11177)
- We fixed handling of `\"` in [bracketed patterns](https://docs.jabref.org/setup/citationkeypatterns) containing a RegEx. [#11967](https://github.com/JabRef/jabref/pull/11967)
- We fixed an issue where the Undo/Redo buttons were active even when all libraries are closed. [#11837](https://github.com/JabRef/jabref/issues/11837)
- We fixed an issue where recently opened files were not displayed in the main menu properly. [#9042](https://github.com/JabRef/jabref/issues/9042)
- We fixed an issue where the DOI lookup would show an error when a DOI was found for an entry. [#11850](https://github.com/JabRef/jabref/issues/11850)
- We fixed an issue where <kbd>Tab</kbd> cannot be used to jump to next field in some single-line fields. [#11785](https://github.com/JabRef/jabref/issues/11785)
- We fixed an issue where the "Do not ask again" checkbox was not working, when asking for permission to use Grobid [koppor#556](https://github.com/koppor/jabref/issues/566).
- We fixed an issue where we display warning message for moving attached open files. [#10121](https://github.com/JabRef/jabref/issues/10121)
- We fixed an issue where it was not possible to select selecting content of other user's comments.[#11106](https://github.com/JabRef/jabref/issues/11106)
- We fixed an issue where web search preferences "Custom API key" table modifications not discarded. [#11925](https://github.com/JabRef/jabref/issues/11925)
- We fixed an issue when opening attached files in [extra file columns](https://docs.jabref.org/finding-sorting-and-cleaning-entries/filelinks#adding-additional-columns-to-entry-table-for-file-types). [#12005](https://github.com/JabRef/jabref/issues/12005)
- We fixed an issue where trying to open a library from a failed mounted directory on Mac would cause an error. [#10548](https://github.com/JabRef/jabref/issues/10548)
- We fixed an issue when the preview was out of sync. [#9172](https://github.com/JabRef/jabref/issues/9172)
- We fixed an issue where identifier paste couldn't work with Unicode REPLACEMENT CHARACTER. [#11986](https://github.com/JabRef/jabref/issues/11986)
### Removed
- We removed support for case-sensitive and exact search. [#11542](https://github.com/JabRef/jabref/pull/11542)
- We removed the description of search strings. [#11542](https://github.com/JabRef/jabref/pull/11542)
- We removed support for importing using the SilverPlatterImporter (`Record INSPEC`). [#11576](https://github.com/JabRef/jabref/pull/11576)
- We removed support for automatically generating file links using the CLI (`--automaticallySetFileLinks`).

View File

@ -1,198 +1,17 @@
# Contributing
General overview about contributing for non-programmers is available at <https://docs.jabref.org/contributing>.
When contributing to this repository, please first discuss the change you wish to make via issue,
email, or any other method with the owners of this repository before making a change.
We welcome contributions to JabRef and encourage you to follow the GitHub workflow specified below.
If you are not familiar with this type of workflow, take a look at GitHub's excellent overview on the [GitHub flow](https://docs.github.com/en/get-started/using-github/github-flow) and the explanation of [Feature Branch Workflow](https://atlassian.com/git/tutorials/comparing-workflows#feature-branch-workflow) for the idea behind this kind of development.
Support on **code contribution** is available at <https://devdocs.jabref.org/contributing#contribute-code>.
Before you start, get the JabRef code on your local machine.
Detailed instructions about this step can be found in our [guidelines for setting up a local workspace](getting-into-the-code/guidelines-for-setting-up-a-local-workspace/).
## Table of Contents
* [Choosing a task](#choosing-a-task-)
* [Getting a task assigned](#getting-a-task-assigned)
* [Pull Request Process](#pull-request-process)
* [Requirements on the pull request and code](#requirements-on-the-pull-request-and-code)
* [After submission of a pull request](#after-submission-of-a-pull-request)
* [Development hints](#development-hints)
## Choosing a task [![Join the chat at https://gitter.im/JabRef/jabref](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/JabRef/jabref)
In general, we offer small issues perfect for aspiring developers.
These tasks provide an opportunity to learn how to set up your local workspace, create your first pull request on GitHub, and contribute towards solving minor problems or making small enhancements in JabRef.
It is essential to note that JabRef's issues vary in difficulty.
Some are simpler, while others are more complex. Our primary aim is to guide you through the code, ensuring that the understanding scope remains manageable. Sometimes, grasping the code might demand more effort than actually writing lines of code.
### I am a student and I want to start with something easy
We collect good issues to start with at our [list of good first issues](https://github.com/orgs/JabRef/projects/5/views/1).
### I am a student and I want to choose from a curated list of university projects
Take a look at [JabRef's candidates for university projects](https://github.com/orgs/JabRef/projects/3). There, a list of possible projects to work on during a teaching period is offered.
### I am a lecturer
If you ask yourself how to integrate JabRef into your class, please read the [documentation about how to integrate JabRef into a class of software engineering training](https://devdocs.jabref.org/teaching.html#jabref-and-software-engineering-training).
As student, you may notify your lecturer about this possibility.
### I want something with huge impact
Look at the discussions in our forum about [new features](https://discourse.jabref.org/c/features/6).
Find an interesting topic, discuss it and start contributing.
Alternatively, you can check out [JabRef's projects page at GitHub](https://github.com/JabRef/jabref/projects?query=is%3Aopen).
Although, of course, you can choose to work on ANY issue, choosing from the projects page has the advantage that these issues have already been categorized, sorted and screened by JabRef maintainers.
A typical subclassifications scheme is "priority" (high, normal and low). Fixing high priority issues is preferred.
### I want to know how to contribute code and set up my workspace
Check out the [documentation for developers](https://devdocs.jabref.org/contributing.html#contribute-code)
### I want to improve the developer's documentation
For improving developer's documentation, go on at the [docs/ subdirectory of JabRef's code](https://github.com/JabRef/jabref/tree/main/docs) and edit the file.
GitHub offers a good guide at [Editing files in another user's repository](https://help.github.com/en/github/managing-files-in-a-repository/editing-files-in-another-users-repository).
One can also add [callouts](https://just-the-docs.github.io/just-the-docs-tests/components/callouts/).
## Getting a task assigned
Comment on the issue you want to work at with `/assign-me`.
GitHub will then automatically assign you.
General overview about contributing for programmers and non-programmers is available at <https://contribute.jabref.org>.
## Pull Request Process
1. Follow the steps at [Pre Condition 3: Code on the local machine](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/pre-03-code.html) to a) create a fork and b) have the fork checked out on your local machine
2. Ensure that you followed the [steps to set up a local workspace](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/) to have the code running properly in IntelliJ.
3. **Create a new branch** (such as `fix-for-issue-121`). Be sure to create a **separate branch** for each improvement you implement.
4. Work on the **new branch — not the `main` branch.** Refer to our [code how-tos](https://devdocs.jabref.org/code-howtos) if you have questions about your implementation.
5. Create a [pull request to JabRef main repository](https://github.com/JabRef/jabref/pulls).
For an overview on the concept of pull requests, take a look at GitHub's [pull request help documentation](https://help.github.com/articles/about-pull-requests/).
1. Ensure that you followed the requirements listed below. They are not too hard, they merely support the maintainers to focus on supportive feedback than just stating the obvious.
2. For text inspirations, consider [How to write the perfect pull request](https://github.com/blog/1943-how-to-write-the-perfect-pull-request).
3. In case your pull request is not yet complete or not yet ready for review, create a [draft pull request](https://github.blog/2019-02-14-introducing-draft-pull-requests/) instead.
6. Wait for feedback of the developers
7. Address the feedback of the developers
8. After two developers gave their green flag, the pull request will be merged.
In case you have any questions, please
1. comment on the issue,
2. show up in our [Gitter chat](https://gitter.im/JabRef/jabref), or
3. show your current code using a draft pull request and ask questions.
We favor looking into your code using a draft pull request, because we can then also load the code into our IDE.
As counterexample, if you provide us with a screenshot of your changes, we cannot run it in our IDE.
### Requirements on the pull request and code
#### Test your code
We know that writing test cases takes a lot of time.
Nevertheless, we rely on our test cases to ensure that a bug fix or a feature implementation does not break anything.
For UI changes, we know that test cases are hard to write.
Therefore, you can omit them.
However, please at least add a screenshot showing your changes to the request.
<!-- In case you do not have time to add a test case, we nevertheless ask you to at least run `gradlew check` to ensure that your change does not break anything else. -->
#### Write a good commit message
See [good commit message](https://github.com/joelparkerhenderson/git-commit-message) or [commit guidelines section of Pro Git](http://git-scm.com/book/en/Distributed-Git-Contributing-to-a-Project#Commit-Guidelines). For the curious: [Why good commit messages matter!](https://cbea.ms/git-commit/). The first line of your commit message is automatically taken as the title for the pull-request. All other lines make up the body of the pull request. Add the words `fixes #xxx` to your PR to auto-close the corresponding issue.
#### Add your change to `CHANGELOG.md`
You should edit the [`CHANGELOG.md`](https://github.com/JabRef/jabref/blob/main/CHANGELOG.md#changelog) file located in the root directory of the JabRef source. Add a line with your changes in the appropriate section.
If you did internal refactorings or improvements not visible to the user (e.g., UI, .bib file), then you don't need to put an entry there.
#### Author credits
Please, **do not add yourself at JavaDoc's `@authors`**.
The contribution information is tracked via the version control system and shown at [https://github.com/JabRef/jabref/graphs/contributors](https://github.com/JabRef/jabref/graphs/contributors).
We also show all contributors in our blog posts. See [Release 5.15 blog post](https://blog.jabref.org/2024/07/16/JabRef5-15/) for an example.
Your contribution is considered being made under [MIT license](https://tldrlegal.com/license/mit-license).
#### Notes on AI usage
Please keep these two principles in mind when you contribute:
1. Never let an LLM speak for you.
2. Never let an LLM think for you.
More reading on that is available at <https://roe.dev/blog/using-ai-in-open-source>.
We reserve the right to reject pull requests that contain little or no genuine and original contribution from the contributor.
### After submission of a pull request
After you submitted a pull request, automated checks will run.
You may see "Some checks were not successful".
You can click on failing checks to see more information about why they failed.
Then, please look into them and handle accordingly.
Afterwards, you will receive comments on your pull request.
The pull request may be approved immediatly, or a reviewer may request changes.
In that case, please implement the requested changes.
After implementing changes, commit to the branch your pull request is *from* and push.
The pull request will automatically be updated with your changes.
Your commits will also be automatically squashed upon the pull request being accepted.
Please **Never ever close a pull request and open a new one** -
This causes unessesary work on our side, and is not in the the style of the GitHub open source community.
You can push any changes you need to make to the branch your pull request is *from*.
These changes will be automatically added to your pull request.
### Development hints
#### When adding an external dependency
Please try to use a version available at JCenter and add it to `build.gradle`.
In any case, describe the library at [`external-libraries.md`](https://github.com/JabRef/jabref/blob/main/external-libraries.md#external-libraries).
We need that information for our package maintainers (e.g., those of the [debian package](https://tracker.debian.org/pkg/jabref)).
#### When making an architectural decision
In case you add a library or do major code rewrites, we ask you to document your decision. Recommended reading: [https://adr.github.io/](https://adr.github.io).
We simply ask to create a new markdown file in `docs/adr` following the template presented at [https://adr.github.io/madr/](https://adr.github.io/madr/).
You can link that ADR using `@ADR({num})` as annotation.
#### When adding a new `Localization.lang` entry
Add new `Localization.lang("KEY")` to a Java file. The tests will fail. In the test output a snippet is generated, which must be added to the English translation file.
Example:
```text
java.lang.AssertionError: DETECTED LANGUAGE KEYS WHICH ARE NOT IN THE ENGLISH LANGUAGE FILE
PASTE THESE INTO THE ENGLISH LANGUAGE FILE
[
Opens\ JabRef's\ Twitter\ page=Opens JabRef's Twitter page
]
Expected :[]
Actual :[Opens\ JabRef's\ Twitter\ page (src\main\java\org\jabref\gui\JabRefFrame.java LANG)]
```
Add the above snippet to the English translation file located at `src/main/resources/l10n/JabRef_en.properties`.
[Crowdin](https://crowdin.com/project/jabref) will automatically pick up the new string and add it to the other translations.
You can also directly run the specific test in your IDE.
The test "`LocalizationConsistencyTest`" is placed under `src/test/java/org.jabref.logic.l10n/LocalizationConsistencyTest.java`.
Find more information in the [JabRef developer docs](https://devdocs.jabref.org/code-howtos/localization.html).
#### **Format of keyboard shortcuts**
In Markdown files (e.g., `CHANGELOG.md`), sometimes keyboard shortcuts need to be added.
Example: `<kbd>Ctrl</kbd> + <kbd>Enter</kbd>`
In case you add keys to the changelog, please follow these rules:
* `<kbd>` tag for each key
* First letter of key capitalized
* Combined keys separated by `+`
* Spaces before and after separator `+`
1. Understand the basics listed at <https://devdocs.jabref.org/contributing#contribute-code>.
2. Follow the "formal requirements". They are not too hard, they merely support the maintainers to focus on supportive feedback than just stating the obvious. They also have helpful hints how to work with localization.
3. Create a pull request. You can create a draft pull request to enable automatic checks.
4. Wait for feedback of the developers
5. Address the feedback of the developers
6. After two developers gave their green flag, the pull request will be merged.

View File

@ -38,46 +38,45 @@ These third parties may log additional information besides your IP address and t
These third-party services are the following:
| Service | Privacy Policy |
|------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| [ACM](https://www.acm.org/) | <https://www.acm.org/privacy-policy> |
| [ACS Publications](https://pubs.acs.org/) | <https://www.acs.org/privacy.html> |
| [APS Advancing Physics](https://harvest.aps.org/) | <https://www.aps.org/about/privacy.cfm#privacy> |
| [arXiv.org](https://arxiv.org/) | <https://info.arxiv.org/help/policies/privacy_policy.html> |
| [Bibliotheksverbund Bayern](https://www.bib-bvb.de/) | <https://www.bib-bvb.de/web/guest/datenschutzerklaerung-bvb-homepage> |
| [Biodiversity Heritage Library](https://www.biodiversitylibrary.org/) | <https://www.si.edu/Privacy> |
| [Collection of Computer Science Bibliographies](https://en.wikipedia.org/wiki/Collection_of_Computer_Science_Bibliographies) | **currently unavailable**, offline |
| [CrossRef](https://www.crossref.org/) | <https://www.crossref.org/operations-and-sustainability/privacy/> |
| [dblp](https://dblp.uni-trier.de/) | <https://dblp.uni-trier.de/db/about/privacy.html> |
| [DJL (Deep Java Library)](https://djl.ai/) | <https://github.com/deepjavalibrary/djl/discussions/3370#discussioncomment-10233632> |
| [Directory of Open Access Books](https://www.doabooks.org/) | <https://www.doabooks.org/en/resources/accessibility> |
| [Digitala Vetenskapliga Arkivet](https://www.diva-portal.org/) | <https://www.uu.se/en/about-uu/data-protection-policy/> |
| [DOI Foundation](https://www.doi.org/) | <https://www.doi.org/privacy-policy/> |
| [Elsevier](https://www.elsevier.com/) | <https://www.elsevier.com/legal/privacy-policy> |
| [Google Gemini](https://ai.google.dev/gemini-api) | <https://ai.google.dev/gemini-api/terms> |
| [Google Scholar](https://scholar.google.com/) | <https://policies.google.com/privacy> |
| [Gemeinsamer Verbundkatalog](https://www.gbv.de/) | <https://www.gbv.de/datenschutz> |
| [Hugging Face](https://huggingface.co/) | <https://huggingface.co/privacy> |
| [IACR](https://www.iacr.org/) | <https://www.iacr.org/privacy.html> |
| [IEEEXplore](https://ieeexplore.ieee.org/Xplore/home.jsp) | <https://www.ieee.org/security-privacy.html> |
| Service | Privacy Policy |
|------------------------------------------------------------------------------------------------------------------------------|----------------|
| [ACM](https://www.acm.org/) | <https://www.acm.org/privacy-policy> |
| [ACS Publications](https://pubs.acs.org/) | <https://www.acs.org/privacy.html> |
| [APS Advancing Physics](https://harvest.aps.org/) | <https://www.aps.org/about/privacy.cfm#privacy> |
| [arXiv.org](https://arxiv.org/) | <https://info.arxiv.org/help/policies/privacy_policy.html> |
| [Bibliotheksverbund Bayern](https://www.bib-bvb.de/) | <https://www.bib-bvb.de/web/guest/datenschutzerklaerung-bvb-homepage> |
| [Biodiversity Heritage Library](https://www.biodiversitylibrary.org/) | <https://www.si.edu/Privacy> |
| [Collection of Computer Science Bibliographies](https://en.wikipedia.org/wiki/Collection_of_Computer_Science_Bibliographies) | **currently unavailable**, offline |
| [CrossRef](https://www.crossref.org/) | <https://www.crossref.org/operations-and-sustainability/privacy/> |
| [dblp](https://dblp.uni-trier.de/) | <https://dblp.uni-trier.de/db/about/privacy.html> |
| [DJL (Deep Java Library)](https://djl.ai/) | <https://github.com/deepjavalibrary/djl/discussions/3370#discussioncomment-10233632> |
| [Directory of Open Access Books](https://www.doabooks.org/) | <https://www.doabooks.org/en/resources/accessibility> |
| [Digitala Vetenskapliga Arkivet](https://www.diva-portal.org/) | <https://www.uu.se/en/about-uu/data-protection-policy/> |
| [DOI Foundation](https://www.doi.org/) | <https://www.doi.org/privacy-policy/> |
| [Elsevier](https://www.elsevier.com/) | <https://www.elsevier.com/legal/privacy-policy> |
| [Google Scholar](https://scholar.google.com/) | <https://policies.google.com/privacy> |
| [Gemeinsamer Verbundkatalog](https://www.gbv.de/) | <https://www.gbv.de/datenschutz> |
| [Hugging Face](https://huggingface.co/) | <https://huggingface.co/privacy> |
| [IACR](https://www.iacr.org/) | <https://www.iacr.org/privacy.html> |
| [IEEEXplore](https://ieeexplore.ieee.org/Xplore/home.jsp) | <https://www.ieee.org/security-privacy.html> |
| [INSPIRE](https://inspirehep.net/) | <https://cern.service-now.com/service-portal?id=privacy_policy&se=INSPIRE-Online&notice=main> |
| [ISIDORE](https://isidore.science/) | <https://isidore.science/credit> |
| [JSTOR](https://www.jstor.org/) | <https://www.ithaka.org/privacypolicy/> |
| [Library of Congress](https://lccn.loc.gov/) | <https://www.loc.gov/legal/> |
| [Mistral AI](https://mistral.ai/) | <https://mistral.ai/terms/#privacy-policy> |
| [National Library of Medicine](https://www.ncbi.nlm.nih.gov/) | <https://www.nlm.nih.gov/web_policies.html> |
| [MathSciNet](http://www.ams.org/mathscinet) | <https://www.ams.org/about-us/privacy> |
| [mEDRA](https://www.medra.org/) | <https://www.medra.org/stdoc/en/Servizio_DOI_Informativa_ENG.pdf> |
| [Mr. DLib](https://mr-dlib.org/) [1] | <https://support.dataverse.harvard.edu/harvard-dataverse-privacy-policy> |
| [OpenAI](https://openai.com/) | <https://openai.com/policies/privacy-policy/> |
| [Openlibrary](https://openlibrary.org) | <https://archive.org/about/terms.php> |
| [ResearchGate](https://www.researchgate.net/) | <https://www.researchgate.net/privacy-policy> |
| [IETF Datatracker](https://datatracker.ietf.org/) | <https://www.ietf.org/privacy-statement/> |
| [Semantic Scholar](https://www.semanticscholar.org/), powered by [Allen Institute for AI](https://allenai.org/) | <https://allenai.org/privacy-policy> |
| [Springer Nature](https://dev.springernature.com/) | <https://dev.springernature.com/privacy-policy/> |
| [The SAO/NASA Astrophysics Data System](https://ui.adsabs.harvard.edu/) | <https://ui.adsabs.harvard.edu/help/privacy/> |
| [Unpaywall](https://unpaywall.org/) | <https://unpaywall.org/legal/privacy> |
| [zbMATH Open](https://www.zbmath.org) | <https://zbmath.org/privacy-policy/> |
| [ISIDORE](https://isidore.science/) | <https://isidore.science/credit> |
| [JSTOR](https://www.jstor.org/) | <https://www.ithaka.org/privacypolicy/> |
| [Library of Congress](https://lccn.loc.gov/) | <https://www.loc.gov/legal/> |
| [Mistral AI](https://mistral.ai/) | <https://mistral.ai/terms/#privacy-policy> |
| [National Library of Medicine](https://www.ncbi.nlm.nih.gov/) | <https://www.nlm.nih.gov/web_policies.html> |
| [MathSciNet](http://www.ams.org/mathscinet) | <https://www.ams.org/about-us/privacy> |
| [mEDRA](https://www.medra.org/) | <https://www.medra.org/stdoc/en/Servizio_DOI_Informativa_ENG.pdf> |
| [Mr. DLib](https://mr-dlib.org/) [1] | <https://support.dataverse.harvard.edu/harvard-dataverse-privacy-policy> |
| [OpenAI](https://openai.com/) | <https://openai.com/policies/privacy-policy/> |
| [Openlibrary](https://openlibrary.org) | <https://archive.org/about/terms.php> |
| [ResearchGate](https://www.researchgate.net/) | <https://www.researchgate.net/privacy-policy> |
| [IETF Datatracker](https://datatracker.ietf.org/) | <https://www.ietf.org/privacy-statement/> |
| [Semantic Scholar](https://www.semanticscholar.org/), powered by [Allen Institute for AI](https://allenai.org/) | <https://allenai.org/privacy-policy> |
| [Springer Nature](https://dev.springernature.com/) | <https://dev.springernature.com/privacy-policy/> |
| [The SAO/NASA Astrophysics Data System](https://ui.adsabs.harvard.edu/) | <https://ui.adsabs.harvard.edu/help/privacy/> |
| [Unpaywall](https://unpaywall.org/) | <https://unpaywall.org/legal/privacy> |
| [zbMATH Open](https://www.zbmath.org) | <https://zbmath.org/privacy-policy/> |
[1]: *Note: The Mr. DLib service is used for the related articles tab in the entry editor and collects also your language, your browser and operating system (*disabled* by default).*

View File

@ -6,7 +6,7 @@ import org.jabref.build.xjc.XjcTask
plugins {
id 'application'
id 'com.github.andygoossens.modernizer' version '1.10.0'
id 'com.github.andygoossens.modernizer' version '1.9.3'
id 'me.champeau.jmh' version '0.7.2'
@ -15,7 +15,7 @@ plugins {
id 'org.openjfx.javafxplugin' version '0.1.0'
id 'org.beryx.jlink' version '3.1.0-rc-1'
id 'org.beryx.jlink' version '3.0.1'
// nicer test outputs during running and completion
// Homepage: https://github.com/radarsh/gradle-test-logger-plugin
@ -29,9 +29,7 @@ plugins {
id 'idea'
id 'org.openrewrite.rewrite' version '6.27.0'
id "org.itsallcode.openfasttrace" version "3.0.1"
id 'org.openrewrite.rewrite' version '6.20.0'
}
// Enable following for debugging
@ -45,8 +43,8 @@ group = "org.jabref"
version = project.findProperty('projVersion') ?: '100.0.0'
java {
sourceCompatibility = JavaVersion.VERSION_23
targetCompatibility = JavaVersion.VERSION_23
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
// Workaround needed for Eclipse, probably because of https://github.com/gradle/gradle/issues/16922
// Should be removed as soon as Gradle 7.0.1 is released ( https://github.com/gradle/gradle/issues/16922#issuecomment-828217060 )
@ -56,12 +54,8 @@ java {
// If this is updated, also update
// - .gitpod.Dockerfile
// - .devcontainer/devcontainer.json#L34 and
// - .github/workflows/deployment*.yml
// - .github/workflows/tests*.yml
// - .github/workflows/update-gradle-wrapper.yml
// - docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-12-build.md
// - build.gradle -> jacoco -> toolVersion (because JaCoCo does not support newest JDK out of the box. Check versions at https://www.jacoco.org/jacoco/trunk/doc/changes.html)
languageVersion = JavaLanguageVersion.of(23)
// - .github/workflows/deployment-jdk-ea.yml#L53
languageVersion = JavaLanguageVersion.of(21)
// See https://docs.gradle.org/current/javadoc/org/gradle/jvm/toolchain/JvmVendorSpec.html for a full list
// vendor = JvmVendorSpec.AMAZON
}
@ -130,7 +124,6 @@ sourceSets {
repositories {
mavenCentral()
maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
maven { url 'https://jitpack.io' }
maven { url 'https://oss.sonatype.org/content/groups/public' }
@ -147,12 +140,12 @@ dependencyLocking {
}
javafx {
version = "23.0.1"
version = "22.0.2"
modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.web', 'javafx.swing' ]
}
jacoco {
toolVersion = "0.8.13-SNAPSHOT"
toolVersion = "0.8.10"
}
dependencies {
@ -171,21 +164,21 @@ dependencies {
exclude group: 'commons-logging'
}
def luceneVersion = "10.0.0"
def luceneVersion = "9.11.1"
implementation "org.apache.lucene:lucene-core:$luceneVersion"
implementation "org.apache.lucene:lucene-queryparser:$luceneVersion"
implementation "org.apache.lucene:lucene-queries:$luceneVersion"
implementation "org.apache.lucene:lucene-analysis-common:$luceneVersion"
implementation "org.apache.lucene:lucene-highlighter:$luceneVersion"
implementation group: 'org.apache.commons', name: 'commons-csv', version: '1.12.0'
implementation group: 'org.apache.commons', name: 'commons-csv', version: '1.11.0'
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.17.0'
implementation group: 'org.apache.commons', name: 'commons-text', version: '1.12.0'
implementation 'commons-logging:commons-logging:1.3.4'
implementation 'com.h2database:h2-mvstore:2.3.232'
// required for reading write-protected PDFs - see https://github.com/JabRef/jabref/pull/942#issuecomment-209252635
implementation 'org.bouncycastle:bcprov-jdk18on:1.79'
implementation 'org.bouncycastle:bcprov-jdk18on:1.78.1'
implementation 'commons-cli:commons-cli:1.9.0'
@ -203,10 +196,10 @@ dependencies {
antlr4 'org.antlr:antlr4:4.13.2'
implementation 'org.antlr:antlr4-runtime:4.13.2'
implementation group: 'org.eclipse.jgit', name: 'org.eclipse.jgit', version: '7.0.0.202409031743-r'
implementation group: 'org.eclipse.jgit', name: 'org.eclipse.jgit', version: '6.10.0.202406032230-r'
implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.18.1'
implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.18.1'
implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.17.2'
implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.17.2'
implementation 'com.fasterxml:aalto-xml:1.3.3'
@ -215,8 +208,8 @@ dependencies {
implementation 'org.postgresql:postgresql:42.7.4'
// Support unix socket connection types
implementation 'com.kohlschutter.junixsocket:junixsocket-core:2.10.1'
implementation 'com.kohlschutter.junixsocket:junixsocket-mysql:2.10.1'
implementation 'com.kohlschutter.junixsocket:junixsocket-core:2.10.0'
implementation 'com.kohlschutter.junixsocket:junixsocket-mysql:2.10.0'
implementation ('com.oracle.ojdbc:ojdbc10:19.3.0.0') {
// causing module issues
@ -243,7 +236,7 @@ dependencies {
}
implementation 'org.fxmisc.flowless:flowless:0.7.3'
implementation 'org.fxmisc.richtext:richtextfx:0.11.3'
implementation (group: 'com.dlsc.gemsfx', name: 'gemsfx', version: '2.64.0') {
implementation (group: 'com.dlsc.gemsfx', name: 'gemsfx', version: '2.43.0') {
exclude module: 'javax.inject' // Split package, use only jakarta.inject
exclude module: 'commons-lang3'
exclude group: 'org.apache.commons.validator'
@ -256,19 +249,16 @@ dependencies {
}
// Required by gemsfx
implementation 'tech.units:indriya:2.2'
// Required by gemsfx and langchain4j
implementation ('com.squareup.retrofit2:retrofit:2.11.0') {
exclude group: 'com.squareup.okhttp3'
}
implementation 'org.controlsfx:controlsfx:11.2.1'
// region HTTP clients
implementation 'org.jsoup:jsoup:1.18.1'
implementation 'com.konghq:unirest-java-core:4.4.4'
implementation 'com.konghq:unirest-modules-gson:4.4.5'
implementation 'org.apache.httpcomponents.client5:httpclient5:5.4'
// endregion
implementation 'com.konghq:unirest-modules-gson:4.4.4'
implementation 'org.apache.httpcomponents.client5:httpclient5:5.3.1'
implementation 'org.slf4j:slf4j-api:2.0.16'
implementation 'org.tinylog:tinylog-api:2.7.0'
@ -276,9 +266,9 @@ dependencies {
implementation 'org.tinylog:tinylog-impl:2.7.0'
// route all requests to java.util.logging to SLF4J (which in turn routes to tinylog)
implementation 'org.slf4j:jul-to-slf4j:2.0.16'
implementation 'org.slf4j:jul-to-slf4j:2.0.13'
// route all requests to log4j to SLF4J
implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.24.1'
implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.23.1'
implementation('de.undercouch:citeproc-java:3.1.0') {
exclude group: 'org.antlr'
@ -307,17 +297,17 @@ dependencies {
// API
implementation 'jakarta.ws.rs:jakarta.ws.rs-api:4.0.0'
// Implementation of the API
implementation 'org.glassfish.jersey.core:jersey-server:3.1.9'
implementation 'org.glassfish.jersey.core:jersey-server:3.1.8'
// injection framework
implementation 'org.glassfish.jersey.inject:jersey-hk2:3.1.9'
implementation 'org.glassfish.jersey.inject:jersey-hk2:3.1.8'
implementation 'org.glassfish.hk2:hk2-api:3.1.1'
// testImplementation 'org.glassfish.hk2:hk2-testing:3.0.4'
// implementation 'org.glassfish.hk2:hk2-testing-jersey:3.0.4'
// testImplementation 'org.glassfish.hk2:hk2-junitrunner:3.0.4'
// HTTP server
// implementation 'org.glassfish.jersey.containers:jersey-container-netty-http:3.1.1'
implementation 'org.glassfish.jersey.containers:jersey-container-grizzly2-http:3.1.9'
testImplementation 'org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-grizzly2:3.1.9'
implementation 'org.glassfish.jersey.containers:jersey-container-grizzly2-http:3.1.8'
testImplementation 'org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-grizzly2:3.1.8'
// Allow objects "magically" to be mapped to JSON using GSON
// implementation 'org.glassfish.jersey.media:jersey-media-json-gson:3.1.1'
@ -331,58 +321,37 @@ dependencies {
implementation 'com.github.vatbub:mslinks:1.0.6.2'
// YAML formatting
implementation 'org.yaml:snakeyaml:2.3'
implementation 'org.yaml:snakeyaml:2.2'
// region AI
implementation 'dev.langchain4j:langchain4j:0.35.0'
// AI
implementation 'dev.langchain4j:langchain4j:0.33.0'
// Even though we use jvm-openai for LLM connection, we still need this package for tokenization.
implementation('dev.langchain4j:langchain4j-open-ai:0.35.0') {
exclude group: 'com.squareup.okhttp3'
exclude group: 'com.squareup.retrofit2', module: 'retrofit'
exclude group: 'org.jetbrains.kotlin'
implementation('dev.langchain4j:langchain4j-open-ai:0.33.0') {
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
}
implementation('dev.langchain4j:langchain4j-mistral-ai:0.35.0') {
exclude group: 'com.squareup.okhttp3'
exclude group: 'com.squareup.retrofit2', module: 'retrofit'
exclude group: 'org.jetbrains.kotlin'
}
implementation('dev.langchain4j:langchain4j-google-ai-gemini:0.35.0') {
exclude group: 'com.squareup.okhttp3'
exclude group: 'com.squareup.retrofit2', module: 'retrofit'
}
implementation('dev.langchain4j:langchain4j-hugging-face:0.35.0') {
exclude group: 'com.squareup.okhttp3'
exclude group: 'com.squareup.retrofit2', module: 'retrofit'
exclude group: 'org.jetbrains.kotlin'
}
implementation 'org.apache.velocity:velocity-engine-core:2.4.1'
implementation platform('ai.djl:bom:0.30.0')
implementation 'ai.djl:api'
implementation 'ai.djl.huggingface:tokenizers'
implementation 'ai.djl.pytorch:pytorch-model-zoo'
implementation 'io.github.stefanbratanov:jvm-openai:0.11.0'
implementation('dev.langchain4j:langchain4j-mistral-ai:0.33.0')
implementation('dev.langchain4j:langchain4j-hugging-face:0.33.0')
implementation 'ai.djl:api:0.29.0'
implementation 'ai.djl.pytorch:pytorch-model-zoo:0.29.0'
implementation 'ai.djl.huggingface:tokenizers:0.29.0'
implementation 'io.github.stefanbratanov:jvm-openai:0.10.0'
// openai depends on okhttp, which needs kotlin - see https://github.com/square/okhttp/issues/5299 for details
implementation ('com.squareup.okhttp3:okhttp:4.12.0') {
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
}
// GemxFX also (transitively) depends on kotlin
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21'
// endregion
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.20'
implementation 'commons-io:commons-io:2.17.0'
implementation 'commons-io:commons-io:2.16.1'
// Even if "compileOnly" is used, IntelliJ always adds to module-info.java. To avoid issues during committing, we use "implementation" instead of "compileOnly"
implementation 'io.github.adr:e-adr:2.0.0-SNAPSHOT'
implementation 'io.zonky.test:embedded-postgres:2.0.7'
implementation enforcedPlatform('io.zonky.test.postgres:embedded-postgres-binaries-bom:17.0.0')
testImplementation 'io.github.classgraph:classgraph:4.8.177'
testImplementation 'io.github.classgraph:classgraph:4.8.175'
testImplementation 'org.junit.jupiter:junit-jupiter:5.11.0'
testImplementation 'org.junit.platform:junit-platform-launcher:1.10.3'
testImplementation 'org.mockito:mockito-core:5.14.2'
testImplementation 'org.mockito:mockito-core:5.13.0'
testImplementation 'org.xmlunit:xmlunit-core:2.10.0'
testImplementation 'org.xmlunit:xmlunit-matchers:2.10.0'
testRuntimeOnly 'com.tngtech.archunit:archunit-junit5-engine:1.3.0'
@ -390,17 +359,13 @@ dependencies {
testImplementation "org.testfx:testfx-core:4.0.16-alpha"
testImplementation "org.testfx:testfx-junit5:4.0.16-alpha"
testImplementation "org.hamcrest:hamcrest-library:3.0"
testImplementation "com.github.javaparser:javaparser-symbol-solver-core:3.26.2"
// recommended by https://github.com/wiremock/wiremock/issues/2149#issuecomment-1835775954
testImplementation 'org.wiremock:wiremock-standalone:3.3.1'
checkstyle 'com.puppycrawl.tools:checkstyle:10.20.1'
checkstyle 'com.puppycrawl.tools:checkstyle:10.18.0'
// xjc needs the runtime as well for the ant task, otherwise it fails
xjc group: 'org.glassfish.jaxb', name: 'jaxb-xjc', version: '3.0.2'
xjc group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '3.0.2'
rewrite(platform("org.openrewrite.recipe:rewrite-recipe-bom:2.19.0"))
rewrite(platform("org.openrewrite.recipe:rewrite-recipe-bom:2.17.0"))
rewrite("org.openrewrite.recipe:rewrite-static-analysis")
rewrite("org.openrewrite.recipe:rewrite-logging-frameworks")
rewrite("org.openrewrite.recipe:rewrite-testing-frameworks")
@ -765,14 +730,16 @@ jlink {
// TODO: Remove the following correction to the merged module
// The module descriptor automatically generated by the plugin for the merged module contained some invalid entries.
// This is based on ./gradlew suggestMergedModuleInfo, sort, strip ";"", remove non-used modules, and include the suggested directives here.
// This is based on ./gradlew suggestMergedModuleInfo, sort, strip ";"", comment non-used modules, and include the suggested directives here.
// However, we need to fine-tune this manually (non-alphabetic order)
mergedModule {
requires 'com.google.gson'
requires 'com.fasterxml.jackson.annotation'
requires 'com.fasterxml.jackson.databind'
requires 'com.fasterxml.jackson.core'
requires 'com.fasterxml.jackson.datatype.jdk8'
requires 'jakarta.xml.bind'
requires 'javafx.base'
requires 'javafx.controls'
requires 'javafx.fxml'
requires 'javafx.graphics'
requires 'javafx.media'
requires 'javafx.swing'
requires 'java.compiler'
requires 'java.datatransfer'
requires 'java.desktop'
@ -780,48 +747,33 @@ jlink {
requires 'java.management'
requires 'java.naming'
requires 'java.net.http'
requires 'java.rmi'
requires 'java.scripting'
requires 'java.security.jgss'
requires 'java.security.sasl'
requires 'java.sql'
requires 'java.sql.rowset'
requires 'java.transaction.xa'
requires 'java.rmi'
requires 'java.xml'
requires 'javafx.base'
requires 'javafx.controls'
requires 'javafx.fxml'
requires 'javafx.graphics'
requires 'javafx.media'
requires 'javafx.swing'
requires 'jdk.jsobject'
requires 'jdk.security.jgss'
requires 'jdk.unsupported'
requires 'jdk.unsupported.desktop'
requires 'jdk.security.jgss'
requires 'jdk.xml.dom'
requires 'org.apache.commons.lang3'
requires 'org.apache.commons.logging'
requires 'org.apache.commons.text'
requires 'org.apache.commons.codec'
requires 'org.apache.commons.io'
requires 'org.apache.commons.compress'
requires 'org.freedesktop.dbus'
requires 'com.google.gson'
requires 'org.jsoup'
requires 'org.slf4j'
requires 'org.tukaani.xz';
uses 'ai.djl.engine.EngineProvider'
uses 'ai.djl.repository.RepositoryFactory'
uses 'ai.djl.repository.zoo.ZooProvider'
uses 'dev.langchain4j.spi.prompt.PromptTemplateFactory'
uses 'kong.unirest.core.json.JsonEngine'
uses 'org.eclipse.jgit.lib.Signer'
uses 'org.eclipse.jgit.transport.SshSessionFactory'
uses 'org.mariadb.jdbc.LocalInfileInterceptor'
uses 'org.mariadb.jdbc.authentication.AuthenticationPlugin'
requires 'jakarta.xml.bind'
requires 'org.apache.commons.lang3'
requires 'org.apache.commons.text'
requires 'org.apache.commons.logging';
uses 'org.mariadb.jdbc.credential.CredentialPlugin'
uses 'org.mariadb.jdbc.authentication.AuthenticationPlugin'
uses 'org.mariadb.jdbc.tls.TlsSocketPlugin'
uses 'org.postgresql.shaded.com.ongres.stringprep.Profile'
uses 'org.mariadb.jdbc.LocalInfileInterceptor'
uses 'org.eclipse.jgit.transport.SshSessionFactory'
uses 'org.eclipse.jgit.lib.GpgSigner'
uses 'kong.unirest.core.json.JsonEngine';
provides 'org.mariadb.jdbc.tls.TlsSocketPlugin' with 'org.mariadb.jdbc.internal.protocol.tls.DefaultTlsSocketPlugin'
provides 'java.sql.Driver' with 'org.postgresql.Driver'
provides 'org.mariadb.jdbc.authentication.AuthenticationPlugin' with 'org.mariadb.jdbc.internal.com.send.authentication.CachingSha2PasswordPlugin',
@ -838,12 +790,7 @@ jlink {
provides 'java.security.Provider' with 'org.bouncycastle.jce.provider.BouncyCastleProvider',
'org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider'
provides 'kong.unirest.core.json.JsonEngine' with 'kong.unirest.modules.gson.GsonEngine';
provides 'ai.djl.repository.zoo.ZooProvider' with 'ai.djl.engine.rust.zoo.RsZooProvider',
'ai.djl.huggingface.zoo.HfZooProvider',
'ai.djl.pytorch.zoo.PtZooProvider',
'ai.djl.repository.zoo.DefaultZooProvider';
provides 'ai.djl.engine.EngineProvider' with 'ai.djl.engine.rust.RsEngineProvider',
'ai.djl.pytorch.engine.PtEngineProvider';
}
jpackage {
@ -949,7 +896,3 @@ jmh {
iterations = 10
fork = 2
}
requirementTracing {
inputDirectories = files('docs', 'src/main/java', 'src/test/java')
}

View File

@ -0,0 +1,43 @@
{
"files": [
"README.md"
],
"imageSize": 100,
"commit": false,
"contributors": [
{
"login": "jlaehne",
"name": "Jonas Lähnemann",
"avatar_url": "https://avatars1.githubusercontent.com/u/7076057?v=4",
"profile": "https://github.com/jlaehne",
"contributions": [
"content",
"doc"
]
},
{
"login": "dominicelse",
"name": "dominicelse",
"avatar_url": "https://avatars0.githubusercontent.com/u/17165189?v=4",
"profile": "https://github.com/dominicelse",
"contributions": [
"content"
]
},
{
"login": "wolfgang-noichl",
"name": "Wolfgang Noichl",
"avatar_url": "https://avatars0.githubusercontent.com/u/294780?v=4",
"profile": "https://github.com/wolfgang-noichl",
"contributions": [
"content"
]
}
],
"contributorsPerLine": 7,
"projectName": "abbrv.jabref.org",
"projectOwner": "JabRef",
"repoType": "github",
"repoHost": "https://github.com",
"skipCi": true
}

View File

@ -0,0 +1,8 @@
# unix line endings at unix files
*.sh eol=lf
*.csv eol=lf
# ensure that line endings of text files are normalized
*.md txt
*.txt text

View File

@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"

View File

@ -0,0 +1,18 @@
name: Assign Issue
on:
schedule:
- cron: 0 0 * * *
issue_comment:
types: [created]
workflow_dispatch:
jobs:
assign:
runs-on: ubuntu-latest
steps:
- name: Assign the user or unassign stale assignments
uses: takanome-dev/assign-issue-action@beta
with:
github_token: '${{ secrets.GITHUB_TOKEN }}'
days_until_unassign: 30

View File

@ -0,0 +1,21 @@
name: automerge
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
github-actions:
runs-on: ubuntu-latest
if: ${{ github.actor == 'koppor' }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
show-progress: ''
- name: Merge PR
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

View File

@ -0,0 +1,26 @@
name: Checks
on:
- push
- pull_request
- workflow_dispatch
jobs:
markdown-check:
name: Check Markdown
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Lint markdown
uses: avto-dev/markdown-lint@v1
with:
config: './.markdownlint.yml'
args: .
ampersands-check:
name: Check Ampersands are Unescaped
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Run Python Ampersands Script
run: python3 scripts/check_ampersands.py

View File

@ -0,0 +1,73 @@
name: Refresh Journal Lists
on:
push:
branches:
- update-workflow
schedule:
# Run on the first of each month at 9:00 AM (See https://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html#tag_20_25_07)
- cron: "0 9 1 * *"
workflow_dispatch:
jobs:
update-aea:
name: Update AEA
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: gautamkrishnar/keepalive-workflow@v2
- uses: actions/setup-python@v5
- run: wget https://raw.github.com/jrnold/jabref-econ-journal-abbrevs/master/aea-abbrevs.txt -O journals/journal_abbreviations_aea.txt
- run: pip install pandas
- run: python scripts/convert_txt2csv.py
- run: rm journals/journal_abbreviations_aea.txt
- uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: update-aea
title: "[Bot] Update AEA Journal abbreviation list"
commit-message: "Update AEA journal abbreviation list"
update-astronomy:
name: Update Astronomy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: wget https://raw.githubusercontent.com/timstaley/jabref-astro-abbreviations/master/MNRAS_abbreviations.txt -O journals/journal_abbreviations_astronomy.txt
- run: pip install pandas
- run: python scripts/convert_txt2csv.py
- run: rm journals/journal_abbreviations_astronomy.txt
- uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: update-astronomy
title: "[Bot] Update Astronomy Journal abbreviation list"
commit-message: "Update Astronomy journal abbreviation list"
update-mathscinet:
name: Update MathSciNet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pip install pandas
- run: python scripts/update_mathscinet.py
- uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: update-mathscinet
title: "[Bot] Update MathSciNet Journal abbreviation list"
commit-message: "Update MathSciNet journal abbreviation list"
update-ubc:
name: Update UBC
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pip install beautifulsoup4 requests
- run: python scripts/update_ubc.py
- uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: update-ubc
title: "[Bot] Update UBC Journal abbreviation list"
commit-message: "Update UBC journal abbreviation list"

View File

@ -0,0 +1,450 @@
# Created by https://www.toptal.com/developers/gitignore/api/linux,windows,intellij+all,microsoftoffice,latex
# Edit at https://www.toptal.com/developers/gitignore?templates=linux,windows,intellij+all,microsoftoffice,latex
### Intellij+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### Intellij+all Patch ###
# Ignores the whole .idea folder and all .iml files
# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360
.idea/
# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023
*.iml
modules.xml
.idea/misc.xml
*.ipr
# Sonarlint plugin
.idea/sonarlint
### LaTeX ###
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
*.lzo
*.lzs
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
# *.ist
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Comment the next line if you want to keep your tikz graphics files
*.tikz
*-tikzDictionary
# listings
*.lol
# luatexja-ruby
*.ltjruby
# makeidx
*.idx
*.ilg
*.ind
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices and outlines
*.xyc
*.xyd
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# gummi
.*.swp
# KBibTeX
*~[0-9]*
# TeXnicCenter
*.tps
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta
# Makeindex log files
*.lpz
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
# Uncomment the next line to have this generated file ignored.
#*Notes.bib
### LaTeX Patch ###
# LIPIcs / OASIcs
*.vtc
# glossaries
*.glstex
### Linux ###
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
### MicrosoftOffice ###
*.tmp
# Word temporary
~$*.doc*
# Word Auto Backup File
Backup of *.doc*
# Excel temporary
~$*.xls*
# Excel Backup File
*.xlk
# PowerPoint temporary
~$*.ppt*
# Visio autosave temporary files
*.~vsd*
### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# End of https://www.toptal.com/developers/gitignore/api/linux,windows,intellij+all,microsoftoffice,latex
# For repo
/*.csv
journals/*.txt

View File

@ -0,0 +1,6 @@
default: true
MD013: false
# all-contributors generates inline-html
MD033: false

View File

@ -0,0 +1,3 @@
unabbreviating
unabbreviation
JabRef

View File

@ -0,0 +1,30 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
The project is versioned using [CalVer](https://calver.org/).
## [Unreleased]
### Added
- Added checker "Escaped Ampersands": `check_ampersands.py` which checks all CSV journals in the folder `journals` to make sure all instances of ampersands are unescaped
### Changed
- `.github/workflows/tests.yml` contains the script `check_ampersands.py`
- Minor format changes in `README.md` and `LISENSE.md` as the old GitHub actions check was already failing
- Found an escaped ampersand using the new script in `journal_abbreviations_dainst.csv` so this was amended.
### Removed
- `[;<frequency>]` was removed, because it was used very seldom - and the data should be collected at other places.
- "Web of Science" abbreviation list was removed. The [data source](https://su.figshare.com/articles/dataset/Journal_abbreviations_from_Web_of_Science/3207787) is from 2016 and had serious issues. [#176](https://github.com/JabRef/abbrv.jabref.org/issues/176)
## 2021-09
Initial tagged release
<!-- markdownlint-disable-file MD012 MD024 MD033 -->
[Unreleased]: https://github.com/JabRef/abbrv.jabref.org/compare/2021-09...main

View File

@ -0,0 +1 @@
abbrv.jabref.org

View File

@ -0,0 +1,32 @@
# How to contribute to the journal abbreviation lists
If you find errors or missing journals in the journal abbreviation list used by JabRef, this is the place to submit a correction.
If you have an extensive list for your subject area that is not covered by the existing lists, you can consider adding a journal list.
## Corrections and additions to existing journal lists
In any case, you need a [GitHub account](https://github.com/login).
If you don't feel comfortable to touch the lists and create a pull request, [open an issue](https://github.com/JabRef/abbrv.jabref.org/issues) listing the errors and proposed changes or missing entries.
With a little extra effort you can directly edit one of the journal abbreviation files and create a pull request:
1. Go to <https://github.com/JabRef/abbrv.jabref.org/tree/main/journals> and select the correct file that is most appropriate to your subject area. If none of the files fits your subject, edit `journal_abbreviations_general.csv`.
2. Use the *pencil icon* to start editing the file.
3. Make your corrections. If you add a journal, keep in mind that the list is ordered alphabetically. Make sure to adhere to the [format described below](#format-of-the-file).
4. When done editing, fill out the commit description at the bottom and click *Commit changes*.
5. Create a pull request for your changes.
6. You should now find it in the list of [pull requests](https://github.com/JabRef/abbrv.jabref.org/pulls).
**Note:** *For use in JabRef, the topical lists are merged alphabetically with preference given to the last occurrence of duplicate journal titles. The general list currently overrides all other lists. Also, an abbreviation might be present in several lists. If you are submitting a correction, check if it exists in several lists due to overlapping subjects or in the general list and make sure all occurrences are corrected.*
## Adding a journal list
1. Get a [GitHub account/sign in](https://github.com/login).
2. Add the file to <https://github.com/JabRef/abbrv.jabref.org/tree/master/journals> (make sure to use the `.csv` format [described below](#format-of-the-file); for importing TXT data files, you should use [this script](scripts/convert_txt2csv.py) before).
3. Add the file to <https://github.com/JabRef/abbrv.jabref.org/blob/main/journals/README.md> (sorted in alphabetically).
4. Create a pull request on this repository.
## Format of the file
Please see [`README.md`](./README.md) for the format of the file.

View File

@ -0,0 +1,41 @@
# CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER.
## Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
1. __Copyright and Related Rights.__ A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
2. __Waiver.__ To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.
3. __Public License Fallback.__ Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.
4. __Limitations and Disclaimers.__
a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.

View File

@ -0,0 +1,65 @@
# Abbreviations
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->
A repository of abbreviations for references, e.g., for journals, conferences, and institutes.
## Journal abbreviations
Currently, a number of journal lists are offered.
Please check the direcotry [`journals`](journals/) for
- A list of abbreviations
- An explaining [`README.md`](journals/README.md) listing the sources of the CSV file. For instance, some lists are generated using Python, some are maintained manually.
## Conference and institute abbreviations
This is future work.
## Format of the CSV files
Since October 2019, the data files are in CSV format (using commas as separators):
```csv
"<full name>","<abbreviation>"[,"<shortest unique abbreviation>"]
```
The abbreviation should follow the ISO4 standard, see <https://marcinwrochna.github.io/abbrevIso/> for details on the abbreviation rules and a search form for title word abbreviations.
The last two fields are optional, and you can safely omit them.
JabRef supports the third field, which contains the "shortest unique abbreviation".
The third field is optional, one can omit it.
For instance both formats are valid
```csv
"Accounts of Chemical Research","Acc. Chem. Res."
```
```csv
"Accounts of Chemical Research","Acc. Chem. Res.","ACHRE4"
```
The list should follow the ISO4 standard with dots.
*If you want to **add a list or submit corrections**, see the [contribution guidelines](CONTRIBUTING.md).*
## Relation to JabRef
JabRef can help you refactor your reference list by automatically abbreviating or unabbreviating journal names.
This requires that you keep one or more lists of journal names and their respective abbreviations.
To set up these lists, choose Options -> Manage journal abbreviations.
See <https://docs.jabref.org/advanced/journalabbreviations> for an extensive documentation.
At each release of JabRef all available journal lists using dots [are combined](https://github.com/JabRef/jabref/blob/main/.github/workflows/refresh-journal-lists.yml) and made available to the users.
In case of duplicate appearances in the journal lists, the last occurring abbreviation is chosen.
## Other projects
### abbrevIso
[`abbrevIso`](https://marcinwrochna.github.io/abbrevIso/) is an online service abbreviation a single journal title by using heuristics.
It takes the official list of ISO4 abbreviations of single words, plus the general rules defined in the ISO4 specifications to deduce the abbreviation for any journal name you input.
However, it does not handle unabbreviation, for which there is no alternative to lists.
Its source is available at <https://github.com/marcinwrochna/abbrevIso> and the API at <https://tools.wmflabs.org/abbreviso/>.

View File

@ -0,0 +1 @@
theme: jekyll-theme-slate

View File

@ -0,0 +1,24 @@
# Journal Abbreviations
| Title | File | Author/Contributor | Note |
| ---------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| General | [`journal_abbreviations_general.csv`](journal_abbreviations_general.csv) | | |
| American Chemical Society | [`journal_abbreviations_acs.csv`](journal_abbreviations_acs.csv) | J. Gutow | |
| American Economic Association | [`journal_abbreviations_aea.csv`](journal_abbreviations_aea.csv) | Jeff Arnold (as posted on the [AEA website](https://www.aeaweb.org/)) | [Source](https://raw.github.com/jrnold/jabref-econ-journal-abbrevs/master/aea-abbrevs.txt). [GitHub](https://github.com/jrnold/jabref-econ-journal-abbrevs/). |
| American Mathematical Society | [`journal_abbreviations_ams.csv`](journal_abbreviations_ams.csv) | Tzu-Hao Wei, minor additions by Matthias Mayr. | |
| Année philologique | [`journal_abbreviations_annee-philologique.csv`](journal_abbreviations_annee-philologique.csv) | Domenico Cufalo | Provides non-ISO abbreviations only. |
| Astronomy | [`journal_abbreviations_astronomy.csv`](journal_abbreviations_astronomy.csv) | Tim Staley | [Source](https://raw.githubusercontent.com/timstaley/jabref-astro-abbreviations/master/MNRAS_abbreviations.txt). Please contribute using [GitHub](https://github.com/timstaley/jabref-astro-abbreviations). |
| Deutsches Archäologisches Institut | [`journal_abbreviations_dainst.csv`](journal_abbreviations_dainst.csv) | [Lukas C. Bossert](http://digitales-altertum.de). _Note: provides non-ISO abbreviations only._ | |
| Entrez | [`journal_abbreviations_entrez.csv`](journal_abbreviations_entrez.csv) | Emmanuel Charpentier | Provides Medline (dotless) abbreviations only. |
| Geology and Physics | [`journal_abbreviations_geology_physics.csv`](journal_abbreviations_geology_physics.csv) | [anonymous user](https://sourceforge.net/p/jabref/patches/164/) and Jonas Lähnemann. | |
| IEEE | [`journal_abbreviations_ieee.csv`](journal_abbreviations_ieee.csv) | Thomas Arildsen and “eyliu” | |
| Index Medicus | [`journal_abbreviations_medicus.csv`](journal_abbreviations_medicus.csv) | Guy Tsafnat | Provides Medline (dotless) abbreviations only. |
| Life Science | [`journal_abbreviations_lifescience.csv`](journal_abbreviations_lifescience.csv) | Zé Roberto Ribeiro | |
| Mathematics | [`journal_abbreviations_mathematics.csv`](journal_abbreviations_mathematics.csv) | | From [MathSciNet](https://mathscinet.ams.org/mathscinet/help/librarians.html) (look for "(CSV file)"), generated by [`update_mathscinet.py`](../scripts/update_mathscinet.py) |
| Mechanical and biomechanical | [`journal_abbreviations_mechanical.csv`](journal_abbreviations_mechanical.csv) | [anonymous user](https://sourceforge.net/p/jabref/patches/151/) | |
| Meteorology | [`journal_abbreviations_meteorology.csv`](journal_abbreviations_meteorology.csv) | Thijs Heus | |
| Sociology | [`journal_abbreviations_sociology.csv`](journal_abbreviations_sociology.csv) | Ronggui Huang | |
| UBC | [`journal_abbreviations_ubc.csv`](journal_abbreviations_ubc.csv) | Northword | From [UBC library](https://journal-abbreviations.library.ubc.ca) |
_If you want to **add a list or submit corrections**, see the [contribution guidelines](../CONTRIBUTING.md).
For importing TXT data files, you should use [this script](../scripts/convert_txt2csv.py) before._

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,848 @@
"Abhandlungen der Akademie der Wissenschaften in Mainz, Geistes und sozialwissenschaftliche Klasse","AAWM"
"Abhandlungen der Bayerischen Akademie der Wissenschaften, Philos.-Hist. Klasse","ABAW"
"Abhandlungen der Heidelberger Akademie der Wissenschaften, Philos.- Hist. Klasse","AHAW"
"Abhandlungen der Sächsischen Akademie der Wissenschaften zu Leipzig","ASAW"
"Acta ad archaeologiam et artium historiam pertinentia","AAAH"
"Acta Antiqua Academiae Scientiarum Hungaricae","AAntHung"
"Acta Archaeologica","AArch"
"Acta Archaeologica (Arheoloski Vestnik)","AArchSlov"
"Acta Archaeologica Academiae Scientiarum Hungaricae","AArchHung"
"Acta classica: proceedings of the Classical Association of South Africa","AClass"
"Acta classica Universitatis Scientiarum Debreceniensis","ACD"
"Acta Historica Academiae Scientiarum Hungaricae","AHistHung"
"Acta Iranica: encyclopédie permanente des études iraniennes","AI"
"Acta Orientalia Academiae Scientiarum Hungaricae","AOrientHung"
"Acta Univ. de Attila József nominatae, Acta antiqua et archaeologica.","AAASzeged"
"Acta Univ. de Attila Jozsef nominatae, Acta Historica","AHSzeged"
"Acta Universitatis Wratislaviensis. Classica Wratislaviensia.","ClassWrat"
"Aevum: rassegna di scienze storiche, linguistiche e filologiche","Aevum"
"Aevum antiquum","Aevum(ant)"
"Akroterion: quarterly for the Classics in South Africa","Akroterion"
"Akten der Gesellschaft für griechische und hellenistische Rechts- geschichte","AGR"
"Alba Regia: annales Musei Stephani Regis","Alba Regia"
"Allgemeine Zeitschrift für Philosophie","AZP"
"American Historical Review","AHR"
"American Journal of Ancient History","AJAH"
"American Journal of Archaeology","AJA"
"American Journal of Numismatics","AJN"
"American Journal of Philology","AJPh"
"American Philosophical Quarterly","APhQ"
"Analecta Bollandiana","AB"
"Analecta Malacitana: revista de la Sección de Filología de la Facultad de Filosofía y Letras","AMal"
"Analecta Romana Instituti Danic","ARID"
"Anales de Filologia clásica","AFC"
"Anales de Historia antigua y medieval","AHAM"
"Anales de la Universidad de Murcia, Facultad de Letras","AUM"
"Anatolian Studies: journal of the British Inst. of Archaeology at Ankara","AS"
"Ancient History","AH"
"Ancient Philosophy","AncPhil"
"Ancient Society","AncSoc"
"Anglo-Saxon England","ASE"
"Annales: économies, sociétés, civilisations","Annales (ESC)"
"Annales: histoire, sciences sociales","Annales (HSS)"
"Annales d'histoire et d'archéologie / Université Saint-Joseph","AHAUSJ"
"Annales de Bretagne et des Pays de l'Ouest","ABPO"
"Annales de l'Institut de philosophie","AIPh"
"Annales de la Faculté des Lettres et Sciences humaines de l'Université de Dakar","AFLD"
"Annales de Normandie","AnnNorm"
"Annales du Service des Antiquités d'égypte","ASAE"
"Annales Latini Montium Arvernorum: bulletin du Groupe d'études latines de l'Université de Clermont","ALMArv"
"Annales Universitatis Budapestinensis de Rolando Eötvös nominatae, Ê Sectio iuridica","AUBFjur.)"
"Annales Universitatis Budapestinensis de Rolando Eötvös nominatae, Ê Sectio philosophica et sociologica","AUB(phil)"
"Annales Universitatis Budapestinensis de Rolando Eötvös nominatae, Sectio classica","AUB(class)"
"Annales Valaisannes","AV"
"Annali del Dipartimento di filosofia dell'Università di Firenze","ADFF"
"Annali dell'Istituto di Storia, Univ. di Firenze","AISF"
"Annali dell'Istituto Italiano di Numismatica","AIIN"
"Annali dell'Istituto Italiano per gli Studi Storici","AIIS"
"Annali dell'Istituto universitario orientale di Napoli, Dipartimento di studi del mondo classico e del Mediterraneo antico, Sezione di archeologia e storia antica","AION(archeol)"
"Annali dell'Istituto universitario orientale di Napoli, Dipartimento di studi del mondo classico e del Mediterraneo antico, Sezione filologico-letteraria","AION(filol)"
"Annali dell'Istituto universitario orientale di Napoli, Dipartimento di studi del mondo classico e del Mediterraneo antico, Sezione linguistica","AION(ling)"
"Annali dell'Università di Ferrara, Sez. V, Sc. giurid","AUFG"
"Annali della Facoltà di Giurisprudenza, Università di Genova","AFGG"
"Annali della Facoltà di Lettere di Lecce","AFLL"
"Annali della Facoltà di Lettere e Filosofia, Università di Macerata","AFLM"
"Annali della Facoltà di Lettere e Filosofia dell'Università di Siena","AFLS"
"Annali della Facoltà di Lettere e Filosofia della Università di Cagliari","AFLC"
"Annali della Facoltà di Lettere e Filosofia della Università di Napoli","AFLN"
"Annali della Facoltà di Lettere e Filosofia di Bari","AFLB"
"Annali della Facoltà di Lettere e Filosofia di Perugia","AFLPer"
"Annali della Facoltà di Magistero dell'Università di Cagliari","AFMC"
"Annali della Facoltà di Scienze della Formazione dell'Università di Cagliari","AFSFC"
"Annali della Scuola Normale Superiore di Pisa, Classe di Lettere e Filosofia","ASNP"
"Annali del Liceo classico G. Garibaldi di Palermo","ALGP"
"Annali del Seminario Giuridico dell'Univ. di Palermo","ASGP"
"Annali di storia dell'esegesi","AnnSE"
"Annuaire de l'école pratique des Hautes études, IV' sect., Sciences hist. & philol","AEHE IV"
"Annuaire de l'école pratique des Hautes études, Ve sect., Sciences religieuses","AEHE V"
"Annuaire de l'Institut de Philologie et d'Histoire Orientales et Slaves de l'Université Libre de Bruxelles","AIPhO"
"Annuaire de l'Université de Sofia, Faculté des Lettres","AUS"
"Annuaire des amis de la Bibliothèque de Sélestat","AABS"
"Annuaire du Collège de France","ACF"
"Annual of the British School at Athens","ABSA"
"Annuario del Ginnasio Liceo A. Volta di Como","AGLComo"
"Annuario dell'Accademia etrusca di Cortona","AAEC"
"Annuario della Scuola Archeologica di Atene a delle Missioni Italiane in Oriente","ASAA"
"Annuarium Historiae Conciliorum","AHC"
"Antichità altoadriatiche","AAAD"
"Anticnaja drevnost'i srednije veka (L'antiquité et le Moyen Âge)","ADSV"
"Anticnyj mir i arkheologija (Le monde antique et l'archéologie)","AMA"
"Antike Kunst, hrsg. von der Vereiningung der Freunde antiker Kunst","AK"
"Antike und Abendland: Beiträge zum Verständnis der Griechen und Römer und ihre Nachlebens","A&A"
"Antike Welt","AW"
"Antiquités africaines","AntAfr"
"Anuari de filologia, Secció D, Studia Graeca et Latina","AFB"
"Anuario de Historia del Derecho Español","AHDE"
"Anzeiger der Österreichischen Akademie der Wissenschaften in Wien, Philos.-Hist. Klasse","AAWW"
"Anzeiger für die Altertumswissenschaft, hrsg. von der Österreichischen Humanistischen Gesellschaft","AAHG"
"Aquileia nostra: bolletino dell'Associazione nazionale per Aquileia","AN"
"Archaeologiai Ertesitö","AErt"
"Archaeological news","ArchN"
"Archaeological Reports","AR"
"Archaiologike ephemeris","AEph"
"Archaiologike Ephemeris","AE"
"Archaiologikon Deltion","AD"
"Archäologie der Schweiz: Mitteilungsblatt der Schweizerischen Gesellschaft für Ur- und Frühgeschichte","ArchS"
"Archäologie im Kanton Bern: Fundberichte und Aufsätze","AKBern"
"Archäologischer Anzeiger","AA"
"Archäologisches Korrespondenzblatt: Urgeschichte, Römerzeit, Frühmittelalter","AKB"
"Archeologia classica: rivista della Scuola naz. di Archeologia, pubbl. a cura degli Ist. di Archeologia e Storia dell'arte greca e romana e di Etruscologia e antichità italiche dell'Univ. di Roma","ArchClass"
"Archive for history of exact sciences","AHES"
"Archives d'histoire doctrinale et littéraire du Moyen Âge","AHMA"
"Archives de philosophie: recherches et documentation","ArchPhilos"
"Archives de philosophie du droit","APhD"
"Archives internationales d'histoire des sciences","AIHS"
"Archiv für Begriffsgeschichte: Bausteine zu einem historischen Wörterbuch der Philosophie","ABG"
"Archiv für Geschichte der Philosophie","AGPh"
"Archiv für Kulturgeschichte","AKG"
"Archiv für Musikwissenschaft","AMW"
"Archiv für Orientforschung: Internationale Zeitschrift für die Wissenschaft vom Vorderen Orient","AOF"
"Archiv für Papyrusforschung und verwandte Gebiete","APF"
"Archivio Glottologico Italiano","AGI"
"Archivio Storico per la Calabria e la Lucania","ASCL"
"Archivio Storico Pugliese","ASP"
"Archivio Storico Sardo","ASSARD"
"Archivo Español de Arqueología","AEA"
"Archiv orientální","ArchOrient"
"Archivum Latinitatis Medii Aevi (Bulletin Du Cange)","ALMA"
"Argeion oikonomikes istorias (Archives of Economic History, Athens)","AEH"
"Arheologiâ, publ. par l'Inst. d'Archéol. de l'Acad. des Sciences d'Ukraine et par la Soc. ukrainienne pour la préservation des monuments culturels et historiques","ARH"
"Atene e Roma: rassegna trimestrale dell'Associazione Italiana di Cultura classica","A&R"
"Atti del Centro ricerche e documentazione sull'antichità classica","CRDAC"
"Atti dell'Accademia di Scienze, Lettere e Arti di Palermo","AAPal"
"Atti dell'Accademia Ligure di Scienze e Lettere","AALIG"
"Atti dell'Accademia Pontaniana","AAP"
"Atti dell'Istituto Veneto di Scienze, Lettere ed Arti, Classe di Scienze morali e Lettere","AIV"
"Atti della Accademia delle Scienze di Torino, Classe di Scienze morali, storiche e filologiche","AAT"
"Atti della Accademia di Scienze morali e politiche della Società nazionale di Scienze, Lettere ed Arti di Napoli","AAN"
"Atti della Accademia Mediterranea delle Scienze","AAMed"
"Atti della Accademia Nazionale dei Lincei, Classe di Scienze Morali, Storiche e Filologiche. Rendiconti","RAL"
"Atti della Accademia Peloritana dei Pericolanti, Classe di Lettere, Filosofia e Belle Arti","AAPel"
"Atti della Accademia Roveretana degli Agiati, Classe di Scienze umane, Lettere ed Arti","AARov"
"Atti della Pontificia Accademia romana di Archeologia, Ser. IIIa, Memorie (in-4¡)","MPAA"
"Atti del Sodalizio glottologico milanese","ASGM"
"Atti e Memorie dell'Accademia Patavina di Scienze, Lettere ed Arti, Classe di Sc. mor., Lett. ed Arti","AAPat"
"Atti e Memorie dell'Accademia Toscana La Colombaria","AATC"
"Atti e Memorie dell'Arcadia","AMArc"
"Atti e memorie della Accademia Virgiliana di Mantova","AVM"
"Atti e Memorie della Società Istriana di Archeologia e Storia Patria","AMSI"
"Atti e memorie della Società Magna Grecia","ASMG"
"Atti e Memorie delle Accademie di Agricoltura, Scienze e Lettere di Verona","AMAV"
"Aufstieg und Niedergang der römischen Welt: Geschichte und Kultur Roms im Spiegel der neueren Forschung","ANRW"
"Augustan Age","AugAge"
"Augustinian Studies","AugStud"
"Basler Zeitschrift für Geschichte und Altertumskunde","BZG"
"Bayerische Vorgeschichtsblätter","BVBl"
"Beiträge zur allgemeinen und vergleichenden Archäologie","BAVA"
"Beiträge zur Namenforschung","BN"
"Bericht der Römisch-Germanischen Kommission des Deutschen Archäologischen Instituts","BRGK"
"Berichte zur Wissenschaftsgeschichte","BWG"
"Bibliotheca Orientalis, uitg. van het Nederlandsch Instituut voor het Nabije Oosten","BO"
"Bibliothek und Wissenschaft","B&W"
"Bibliothèque d'humanisme et Renaissance","BiblH&R"
"Bibliothèque de l'école des Chartes","BECh"
"Biblische Zeitschrift (Neue Folge)","BiZ"
"Boletín del Museo arqueológico nacional","BMAN"
"Boletín del Seminario de Estudios de Arte y Arqueología","BSEAA"
"Bolletino del Centro Inernazionale per lo Studio dei Papyri Ercolanesi (Cronache Ercolanesi)","BCPE"
"Bollettino d'arte del Ministero per i beni culturali e ambientali","BA"
"Bollettino dei classici","BollClass"
"Bollettino dei monumenti, musei e gallerie pontificie","BMMP"
"Bollettino della Badia Greca di Grottaferrata","BBGG"
"Bollettino di numismatica","BNum"
"Bollettino di studi latini: periodico quadrimestrale d'informazione bibliografica","BStudLat"
"Bonner Jahrbücher des Rheinischen Landesmuseums in Bonn und des Vereins von Altertumsfreunden im Rheinlande","BJ"
"British Archaeological Abstracts","BritAA"
"British Archaeological Bibliography","BritAB"
"British Journal for the History of Philosophy","BJHP"
"British Journal for the History of Science","BJHS"
"Bryn Mawr Classical Review","BMCRev"
"Bulletin Antieke Beschaving","BABesch"
"Bulletin archéologique du Comité des travaux historique","BCTH"
"Bulletin d'archéologie algérienne","BAA"
"Bulletin d'archéologie marocaine","BAM"
"Bulletin d'études orientales, publié par l'Institut Français de Damas","BEO"
"Bulletin d'information de l'Association internationale pour l'étude de la mosaïque antique","BullAIEMA"
"Bulletin de correspondance hellénique","BCH"
"Bulletin de l'Association Guillaume Budé","BAGB"
"Bulletin de l'Institut français d'archéologie orientale","BIAO"
"Bulletin de l'Institut historique belge de Rome","BIBR"
"Bulletin de la Classe des Lettres de l'Académie Royale de BelgiqueN","BAB"
"Bulletin de la Faculté des Lettres de Mulhouse","BFLM"
"Bulletin de la Société de linguistique de Paris","BSL"
"Bulletin de la Société française de numismatique","BSFN"
"Bulletin de la Société française de philosophie","BSPh"
"Bulletin de la Société internationale pour l'étude de la philosophie médiévale","BPHM"
"Bulletin de la Société nationale des antiquaires de France","BSAF"
"Bulletin de la Société toulousaine d'études classiques","BSTEC"
"Bulletin de littérature ecclésiastique","BLE"
"Bulletin des antiquités luxembourgeoises","BAL"
"Bulletin des Musées royaux d'Art et d'Histoire","BMAH"
"Bulletin de théologie ancienne et médiévale","BTh"
"Bulletin du Musée de Beyrouth","BMB"
"Bulletin of the American Schools of Oriental Research in Jerusalem and Baghdad","BASO"
"Bulletin of the American Society of Papyrologists","BASP"
"Bulletin of the Egyptological Seminar","BES"
"Bulletin of the History of Medicine","BHM"
"Bulletin of the Institute of Archaeology of the Univ. of London","BIAL"
"Bulletin of the Institute of Classical Studies of the University of London","BICS"
"Bulletin of the John Rylands Library","BRL"
"Bulletin of the Metropolitan Museum of Art","BMM"
"Bulletin of the Museum of Mediterranean and Near Eastern Antiquities","BMNE"
"Bulletin of the Museums of Art and Archaeology of the University of Michigan","BMUSUM"
"Bulletins de la Société des Antiquaires de l'Ouest","BSAO"
"Bulletins trimestriels de la Société des antiquaires de Picardie","BSAP"
"Bullettino dell'Istituto di Diritto romano","BIDR"
"Bullettino della Commissione Archeologica Comunale in Roma","BCAR"
"Byzantinische Forschungen: internationale Zeitschrift für Byzantinistik","ByzF"
"Byzantinische Zeitschrift","ByzZ"
"Byzantinoslavica: revue internationale des études byzantines","ByzSlav"
"Byzantion: revue internationale des études byzantines","Byzantion"
"Cahiers alsaciens d'archéologie, d'art et d'histoire","CAAH"
"Cahiers archéologiques: fin de l'antiquité et Moyen Âge","CArch"
"Cahiers d'histoire publ. par les Univ. de Clermont-Lyon-Grenoble","CH"
"Cahiers de l'Institut du Moyen Âge grec et latin","CIMA"
"Cahiers de Numismatique: bulletin de la Société d'études numismatiques et archéologiques","CahNum"
"Cahiers de philosophie politique et juridique","CPhPJ"
"Cahiers de recherches de l'Institut de Papyrologie et d'égyptologie de Lille III","CRIPEL"
"Cahiers des études anciennes","CEA"
"Cahiers du Centre d'études Chypriotes","CCEC"
"Cahiers du Centre Georges Radet","CCGR"
"Cahiers du Centre Gustave Glotz","CCG"
"Cahiers du groupe interdisciplinaire du théâtre antique (Cahiers du GITA)","CGITA"
"Cahiers Ferdinand de Saussure: review suisse de linguistique générale","CFS"
"Canadian Journal of Philosophy","CJPh"
"Canadian philosophical reviews","CPhRev"
"Canadian review of comparative literature","CRCL"
"Catholic Historical Review","CHR"
"Centre d'études et de documentation archéologique de la Conservation de Carthage. Bulletin","CEDAC"
"Chronique d'Egypte","CE"
"Church History","ChHist"
"Civiltà classica e cristiana","CCC"
"Classica: Boletim de pedagogia e cultura","Classica(Lisboa)"
"Classica: revista brasileira de estudos clássicos","Classica(Brasil)"
"Classica et mediaevalia: revue danoise d'histoire et de philologie publiée par la Société danoise pour les études anciennes et médiévales","C&M"
"Classical and Modern Literature","CML"
"Classical Antiquity","ClAnt"
"Classical Philology","CPh"
"Classical Quarterly","CQ"
"Classical Review","CR"
"Classical Studies","ClassStud"
"Clio Medica: acta Academiae internationalis historiae medicinae","CM"
"Codices manuscripti: Zeitschrift für Handschriftenkunde","CodMan"
"Colby Quarterly","ColbyQ"
"Comparative Literature","CompLit"
"Comparative Literature Studies","CLS"
"Comparative Studies in Society and History","CSSH"
"Comptes rendus de l'Académie des Inscriptions et Belles-Lettres","CRAI"
"Computers and the Humanitie","CHum"
"Connaissance hellénique","ConnHell"
"Contributi dell'Istituto di Storia antica dell'Univ. del Sacro Cuore","CISA"
"Corolla Londiniensis","CL"
"Cristianesimo nella storia: richerche storiche, esegetiche, teologiche","CrSt"
"Critica storica","CS"
"Cronache Ercolanesi","CronErc"
"Cuadernos de filología clásica. Estudios griegos e indoeuropeos.","CFC(G)"
"Cuadernos de filología clásica. Estudios latinos.","CFC(L)"
"Cuadernos de investigación filológica","CIF"
"Cuadernos de prehistoria i arqueología","CPAM"
"Cuaderns de prehistòria i arqueologia de Castelló","CPAC"
"Cultura e scuola","C&S"
"Damaszener Mitteilungen, hrsg. von dem Deutschen Archäologischen Institut (Station Damaskus)","MDAI(D)"
"Das Altertum, hrsg. vom Zentralinst. für Alte Gesch. und Archäol. der Dt. Akad. der DDR","Altertum"
"Der altsprachliche Unterricht: Arbeitshefte zu seiner wissenschaftlichen Begründung und praktischen Gestalt","AU"
"Deutsche Literaturzeitung für Kritik der internationalen Wissenschaft","DLZ"
"Deutsches Dante-Jahrbuch","DDJ"
"Dialoghi di archeologia","DArch"
"Dialogues d'histoire ancienne","DHA"
"Die Alte Stadt: Vierteljahreszeitschrift für Stadtgeschichte, Stadtsoziologie und Denkmalpflege","ASTADT"
"Die Welt des Orients: wissenschaftliche Beiträge zur Kunde des Morgenlandes","WO"
"Dissertations Abstracts: international abstracts of dissertation available in microfilm or as xerographic reproductions","DA"
"Downside Review","DR"
"Drevnejsije Gosudarstva na territorii SSSR (Les états les plus anciens sur le territoire de l'URSS: matériaux et recherches)","DGT"
"Dumbarton Oaks Papers","DOP"
"Durham University Journal","DUJ"
"East and West","E&W"
"Échos du monde classique (Classical Views)","EMC"
"Egitto e Vicino Oriente","EVO"
"Eikasmos: quaderni bolognesi di filologia classica","Eikasmos"
"Eirene: studia Graeca et Latina","Eirene"
"English Historical Review","EHR"
"Ensaios de literatura e filologia, publ. do Dept. de Letras clássicas, Fac. de Letras Univ. federal de Minas Gerais","ELF"
"Epeteris tes Hetaireias Eleiakon Meleton","EHEM"
"Epeteris tes Kentrou Ereunes tes Historias tou Hellenikou Dikaiou","EHHD"
"Ephemerides Theologicae Lovanienses","EThL"
"Epigraphica Anatolica: Zeitschrift für Epigraphik und historische Geographie Anatoliens","EA"
"Epistemonike epeterida tes philosophikes Scholes tou Aristoteleiou Panepistemiou Thessalonikes, Tmema philosophias","EEThess(philos)"
"Epistemonike epeteris tes philosophikes Scholes tou Panepistemiou Athenon","EEAth"
"Eranos: acta philologica Suecana","Eranos"
"Eranos-Jahrbuch","Eranos-Jb"
"Espacio, tiempo y forma: revista de la Facultad de Geografía e Historia, Ser. 1","ETF(arqueol)"
"Espacio, tiempo y forma: revista de la Facultad de Geografia e Historia, Ser. 2","ETF(hist)"
"Estudios clásicos: organo de la Sociedad espanola de estudios clásicos","EClás"
"Estudios de la antigüedad","EstAnt"
"Estudios humanisticos","EHum"
"Ethnographisch-archäologische Zeitschrift","EAZ"
"Études celtiques","EC"
"Études de lettres: bulletin de la Faculté des Lettres de l'Univ. de Lausanne et de la Soc. des études de Lettres","EL"
"Études indo-européennes","EIE"
"Études philosophiques","EPh"
"Excerpta philologica","ExcPhilol"
"Exemplaria: revista de literatura comparada","Exemplaria"
"Exemplaria Classica","ExClass"
"Gazette numismatique suisse","GNS"
"Geographia Antiqua","GeorgAnt"
"German Studies: a review of German-language research contributions. Sect. l: Philosophy and history","GS"
"Geschichte in Wissenschaft und Unterricht","GWU"
"Giornale critico della filosofia italiana","GCFI"
"Giornale di metafisica","GM"
"Giornale ferrarese di retorica e filologia","GFRF"
"Giornale italiano di filologia: rivista trimestrale di cultura","GIF"
"Gnomon: kritische Zeitschrift für die gesamte klassische Altertumswissenschaft","Gnomon"
"Göttinger Forum für Altertumswissenschaft","GFA"
"Göttingische Gelehrte Anzeigen","GGA"
"Graecolatina et Orientalia: zborník Filoz. Fak. Univerz. Komenského","GLO"
"Graecolatina Pragensia: acta Universitatis Carolinae","GLP"
"Grazer Beiträge: Zeitschrift für die klassische Altertumswissenschaft","GB"
"Greece and Rome","G&R"
"Greek, Roman and Byzantine Studies","GRBS"
"Hamburger Beiträge zur Archäologie","HBA"
"Hamburger Beiträge zur Numismatik","HBN"
"Harvard Library Bulletin","HLB"
"Harvard Studies in Classical Philology","HSPh"
"Harvard Theological Review","HThR"
"Hebrew Union College Annual","HebrUCA"
"Hefte des Archäologischen Seminars der Universität Bern","HASB"
"Ελληνικά: φιλολογικό, ιστορικό και λαογραφικό περιοδικό σύγγραμμα","Hellenica"
"Helvetia archaeologica","HA"
"Hermes: Zeitschrift für klassische Philologie","Hermes"
"Hispania antiqua: revista de historia antigua","HAnt"
"Histoire, épistémologie, langage","HEL"
"Histoire des sciences médicales","HSMed"
"Historia mathematica: international journal of the history of mathematics","HM"
"Historisches Jahrbuch","HJ"
"Historische Sprachforschung (Historical Linguistics)","HSF"
"Historische Zeitschrift","HZ"
"History and Philosophy of the Life Sciences","HPLS"
"History and Theory: studies in the philosophy of history","H&T"
"History of Philosophy Quarterly","HPhQ"
"History of political thought","HPTh"
"History of Religions","HR"
"History of Science","HS"
"History of Technology","HTechn"
"Humanistica Lovaniensia","HumLov"
"Hyperboreus: studia classica","Hyperboreus"
"Illinois Classical Studies","ICS"
"Il pensiero politico: rivista di storia delle idee politiche e sociali","PPol"
"Incontri linguistici","ILing"
"Indogermanische Forschungen","IF"
"Inozemna filologìâ (Philologie étrangère)","InFil"
"International journal of nautical archaeology","IJNA"
"International journal of philosophical studies","IJPS"
"International journal of the classical tradition","IJCT"
"International Philosophical Quarterly","IPQ"
"International Studies in Philosophy","ISPh"
"Invigilata lucernis: rivista dell'Istituto di Latino","InvLuc"
"Iranica antiqua","IA"
"Israel Exploration Journal","IEJ"
"Istoriko-filosofsky ezegodnik (History of philosophy yearbook), ed. by the Inst. of Philosophy of the Acad. of Sciences of URSS","IFE"
"Italia medioevale e umanistica","IMU"
"Jaarbericht van het Voor-Aziatisch-Egyptisch Genootschap Ex Oriente Lux","JVEG"
"Jahrbuch der Berliner Museen","JBerlM"
"Jahrbuch der Heidelberger Akad. der Wissenschaften","JHAW"
"Jahrbuch der Österreichischen Byzantinistik","JöByz"
"Jahrbuch der Schweizerischen Gesellschaft für Ur- und Frühgeschichte","JSGU"
"Jahrbuch des Deutschen Archäologischen Instituts","JDAI"
"Jahrbuch des Römisch-Germanischen Zentralmuseums","JRGZ"
"Jahrbuch für Antike und Christentum","JbAC"
"Jahrbuch für Numismatik und Geldgeschichte","JNG"
"Jahrbuch für Wirtschaftsgeschichte","JWG"
"Jahresberichte aus Augst und Kaiseraugst","JAK"
"Jahreshefte des Österreichischen Archäologischen Instituts","JöAI"
"Journal asiatique","JA"
"Journal des Savants","JS"
"Journal for the history of Arabic science","JHAS"
"Journal for the history of astronomy","JHA"
"Journal for the study of Judaism: (in the Persian, Hellenistic and Roman period)","JSJ"
"Journal of ancient civilizations","JAC"
"Journal of Biblical Literature","JBL"
"Journal of Classical Studies: the journal of the Class. Soc. of Japan","JCS"
"Journal of early Christian studies","JECS"
"Journal of Ecclesiastical History","JEH"
"Journal of Egyptian Archaeology","JEA"
"Journal of European archaeology","JEurArch"
"Journal of Field Archaeology","JFA"
"Journal of Glass Studies","JGS"
"Journal of Greco-Roman Studies","JGRS"
"Journal of Hellenic Studies","JHS"
"Journal of Indo-European Studies","JIES"
"Journal of Juristic Papyrology","JJP"
"Journal of Mediterranean archaeology","JMA"
"Journal of Near Eastern Studies","JNES"
"Journal of Philology","JPhil"
"Journal of Philosophy","JPh"
"Journal of prehistoric religion","JPR"
"Journal of Religion","JR"
"Journal of Religious History","JRH"
"Journal of Roman archaeology","JRA"
"Journal of Roman military equipment studies","JRMES"
"Journal of Roman Studies","JRS"
"Journal of the American Oriental Society","JAOS"
"Journal of the American Research Center in Egypt","JARCE"
"Journal of the Australasian Universities Language and Literature Association","AUMLA"
"Journal of the economic and social history of the Orient","JESHO"
"Journal of the history of biology","JHB"
"Journal of the History of Ideas","JHI"
"Journal of the History of Medicine and allied Sciences","JHM"
"Journal of the History of Philosophy","JHPh"
"Journal of the history of sexuality","JHSex"
"Journal of Theological Studies. Oxford, Clarendon Press","JThS"
"Journal of the Royal Asiatic Society of Great Britain and Ireland","JAS"
"Journal of the Society of Architectural Historians","JSAH"
"Journal of the Walters Art Gallery","JWAG"
"Journal of the Warburg and Courtauld Institutes","JWI"
"Kant-Studien: Philosophische Zeitschrift","KantStud"
"Κοινωνία","Koinonia"
"Koldewey-Gesellschaft, Vereinigung für baugeschichtliche Forschung e. V. Bericht über die Tagung für Ausgrabungswissenschaft und Bauforschung","KGB"
"Kölner Jahrbuch für Vor- und Frühgeschichte, hrsg. vom Römisch- Germanischen Museum und der Archäologischen Gesellschaft Köln","KJ"
"Kratkije soobseniâ Inst. arheol. Akad. Nauk SSSR","KSIA"
"Kul'tura iskusstvo anticnogo mira","KIAM"
"L'Année épigraphique","AnnEpigr"
"L'Année Philologique","APh"
"L'Antiquité classique","AC"
"L'Écrit du temps","EDT"
"L'Information grammaticale","IG"
"L'Information historique","IH"
"L'Information littéraire","IL"
"La linguistique","Ling"
"La Parola del passato: rivista di studi antichi","PP"
"Laval Théologique et Philosophique","LThPh"
"Le Genre humain","GH"
"Le Moyen Âge: revue trimestrielle d'histoire et de philologie","MA"
"Les Cahiers de Tunisie","CT"
"Les Études Classiques","LEC"
"Le Temps de la réflexion","TR"
"Libyan Studies","LibStud"
"Lingua e stile","L&S"
"Linguistica Biblica: interdisziplinäre Zeitschrift für Theologie und Linguistik","LingBibl"
"Listy filologické","LF"
"Litterae Numismaticae Vindobonenses","LNV"
"Littérature, médicine, société","LMS"
"Liverpool Classical Monthly","LCM"
"Maia: rivista di letterature classiche","Maia"
"Mainzer Archäologische Zeitschrift","MAZ"
"Mainzer Zeitschrift: Mittelrheinisches Jahrbuch für Archäologie, Kunst und Geschichte","MZ"
"Materiali e contributi per la storia della narrativa greco-latina","MCSN"
"Materiali e discussioni per l'analisi dei testi classici","MD"
"Mededelingen van de koninklijke Academie voor Wetensehappen, Letteren & Schone Kunsten van België, Kl. der Letteren","MAWBL"
"Mededelingen van het Nederlandsch historisch Instituut te Rome","MNIR"
"Mediaeval Studies","MS"
"Medical History: a quarterly journal devoted to the history of medicine and related sciences","MedHist"
"Medievalia et Humanistica: studies in medieval and Renaissance society","M&H"
"Medioevo greco","MEG"
"Mediterranean Archaeology: Australian and New Zealand journal for the archaeology of the Mediterranean world","MedArch"
"Mediterranean Historical Review, ed. by the Aranne School of History, Tel Aviv Univ","MHR"
"Medium Aevum","MAev"
"Medizin-historisches Journal","MHJ"
"Mélanges d'Archéologie et d'Histoire de l'école Française de Rome, Antiquité","MEFRA"
"Mélanges de l'école française de Rome. Moyen Âge et temps modernes","MEFRM"
"Mélanges de la Casa de Velázquez, Madrid","MCV"
"Mélanges de Science Religieuse","MSR"
"Mémoires de l'Académie des Inscriptions et Belles Lettres","MAI"
"Memorias de historia antigua","MHA"
"Memorie dell'Accademia delle Scienze dell'Istituto di Bologna, Cl. di Sc. morali","MAIB"
"Memorie dell'Accademia delle Scienze di Torino, Classe di Scienze morali, storiche e filologiche","MAT"
"Memorie dell'Ist. Lombardo, Accademia di Scienze e Lettere, Cl. di Lett., Sc. morali e storiche","MIL"
"Memorie della Classe di Scienze morali e storiche dell'Accademia dei Lincei","MAL"
"Metropolitan Museum Journal","MMJ"
"Militärgeschichtliche Mitteilungen","MGM"
"Minerva: revista de filología clásica","Minerva(vall)"
"Minerva: the international review of ancient art and archaeology","Minerva(lond)"
"Miscellanea greca e romana: studi pubblicati dall'Ist. italiano per la storia antica","MGR"
"Mitteilungen der Archäologischen Gesellschaft Steiermark","MAGS"
"Mitteilungen des Deutschen Archäologischen Instituts (Abt. Istambul)","MDAI(I)"
"Mitteilungen des Deutschen Archäologischen Instituts (Abt. Madrid)","MDAI(M)"
"Mitteilungen des Deutschen Archäologischen Instituts (Athen. Abt.)","MDAI(A)"
"Mitteilungen des Deutschen Archäologischen Instituts (Röm. Abt.)","MDAI(R)"
"Mitteilungen des Instituts für österreichische Geschichtsforschung","MIöG"
"Mitteilungen zur christlichen Archäologie","MiChA"
"Mittellateinisches Jahrbuch","MLatJB"
"Mnemosyne: bibliotheca classica Batava","Mnemosyne"
"Monumenti antichi, pubblicati dall'Accademia dei Lincei","MonAL"
"Monuments et mémoires publiés par l'Académie des Inscriptions et Belles-Lettres (Fondation Piot)","MMAI"
"Münchener Studien zur Sprachwissenschaft","MSS"
"Münsterische Beiträge zur antiken Handelsgeschichte","MBAH"
"Museo de Zaragoza, Boletín","BMZ"
"Museum Criticum","MCr"
"Museum Helveticum: revue suisse pour l'étude de l'Antiquité classique","MH"
"Museum Patavinum: rivista semestrale della Facoltà di Lettere e Filosofia di Padova","MusPat"
"Museum Philologum Londiniense","MPhL"
"Museum Tusculanum","MT"
"Nachrichten der Akademie der Wissenschaften in Göttingen, Philol.- Hist. Klasse","NAWG"
"Neuphilologische Mitteilungen","NphM"
"New England Classical Newsletter","NECN"
"Newsletter of the Society for ancient medicine and pharmacy","SAMPhN"
"New Testament Abstracts","NTA"
"New Testament Studies: an international journal publ. quarterly under the auspices of Studiorum Novi Testamenti Societas","NTS"
"Notizie degli scavi di antichità","NSA"
"Nouvelle Revue Théologique","NRTh"
"Novum Testamentum: an international quarterly for New Testament and related studies","NT"
"Numismatica e antichità classiche: quaderni ticinesi","NAC"
"Numismatic Chronicle","NC"
"Numismatic Circular","NCirc"
"Numismatic Literature","NL"
"Numismatika i èpigraphika","NE"
"Numismatisches Nachrichtenblatt: Organ des Verbandes der Dt. Münzvereine","NNB"
"Numismatische Zeitschrift","NZ"
"Nuova rivista storica","NRS"
"Nuovi annali della Facoltà di Magistero dell'Università di Messina","NAFM"
"Opuscula Atheniensia: acta Inst. Athen. Regni Sueciae","OAth"
"Opuscula Romana: acta Inst. Rom. Regni Sueciae","ORom"
"Oriens Antiquus: rivista del Centro per le Antichità e la Storia dell'Arte del vicino Oriente","OA"
"Oriens Christianus: Hefte für die Kunde des christlichen Orients","OC"
"Orientalia Christiana Periodica","OCP"
"Orientalia Lovaniensia Periodica","OLP"
"Orientalistische Literaturzeitung","OLZ"
"Orpheus: rivista di umanità classica e cristiana","Orpheus"
"Ostkirchliche Studien","OS"
"Oudheidkundige Mededelingen uit het Rijksmuseum van Oudheiden te Leiden","OMRL"
"Oxford Journal of Archaeology","OJA"
"Oxford Studies in Ancient Philosophy","OSAPh"
"Palestine Exploration Quarterly","PalEQ"
"Pamâtniki kul'tury (Monuments of culture: new discoveries)","PK"
"Papers of the British School at Rome","PBSR"
"Past and Present: a journal of historical Studies","P&P"
"Patma-banasirakan handes: revue historico-philologique","PBH"
"Perspektiven der Philosophie: neues Jahrbuch","PPH"
"Petronian Society Newsletter","PSN"
"Pharmacy in history","PhH"
"Philologia classica: recueil interuniversitaire périodique","PhilClass"
"Philological Quarterly","PhQ"
"Philologus: Zeitschrift für antike Literatur und ihre Rezeption","Philologus"
"Philosophia naturalis","PhN"
"Philosophical Review","PhR"
"Philosophical Studies","PhStud"
"Philosophischer Literaturanzeiger","PhLA"
"Philosophische Rundschau: eine Zeitschrift für philosophische Kritik","PhRdschau"
"Philosophisches Jahrbuch","PhJ"
"Philosophy and Literature","Ph&Lit"
"Philosophy and Phenomenological Research","Ph&PhenR"
"Philosophy and Rhetoric","Ph&Rh"
"Phoenix: journal of the Classical Association of Canada","Phoenix"
"Pitannâ klasicnoï filologìï (Questions de philologie classique)","PKFil"
"Praktika tes Akademias Athenon","PAA"
"Praktika tes en Athenais Archaiologikes Etaireias","PAAH"
"Proceedings of the American Catholic Philosophical Association","PACPhA"
"Proceedings of the American Philosophical Society","PAPHS"
"Proceedings of the Aristotelian Society","PAS"
"Proceedings of the Aristotelian Society. Supplementary volume.","PAS(suppl)"
"Proceedings of the British Academy","PBA"
"Proceedings of the Cambridge Philological Society","PCPhS"
"Proceedings of the Classical Association","PCA"
"Proceedings of the Royal Irish Academy","PRIA"
"Proceedings of the Virgil Society","PVS"
"Przeglad Historyczny","PHist"
"Quaderni catanesi di cultura classica e medievale","QCCCM"
"Quaderni catanesi di studi classici e medievali","QC"
"Quaderni dell'Ist. di Filosofia, Univ. degli Studi di Perugia, Fac. di Magistero","QIFP"
"Quaderni dell'Istituto di Archeologia e Storia antica dell'Univ. G. d'Annunzio, Chieti","QIASA"
"Quaderni dell'Istituto di Filologia Greca di Cagliari","QIFG"
"Quaderni dell'Istituto di Lingua e Letteratura latina. Università di Roma, Fac. di Magistero","QILL"
"Quaderni del Museo archeologico F. Ribezzo di Brindisi","QMAB"
"Quaderni di archeologia della Libia","QAL"
"Quaderni di Cultura e di Tradizione classica","QCTC"
"Quaderni di filologia classica dell'Università di Trieste, Ist. di Filol. class.","QFC"
"Quaderni di storia","QS"
"Quaderni linguistici e filologici: ricerche svolte presso l'Univ. degli Studi di Macerata","QLF"
"Quaderni urbinati di cultura classica","QUCC"
"Quarterly Journal of Speech","QJS"
"Rassegna storica salernitana","RSS"
"Reallexikon für Antike und Christentum","RLAC"
"Recherches augustiniennes (Supplément à REAug)","RecAug"
"Recherches de science religieuse","RecSR"
"Recherches de théologie ancienne et médiévale","RecTh"
"Rechtshistoriches Journal","RJ"
"Regulae Benedicti Studia: annuarium internationale","RBS"
"Religious Studies","RelStud"
"Renaissance Quarterly","RenQ"
"Rendiconti dell'Accademia di Archeologia, Lettere e Belle Arti di Napoli","RAAN"
"Rendiconti dell'Istituto Lombardo, Classe di Lettere, Scienze morali e storiche","RIL"
"Rendiconti della Pontificia Accademia di Archeologia","RPAA"
"Rendiconti dellAccademia delle Scienze dellIstituto di Bologna, Classe di Scienze Morali","RAIB"
"Report of the Department of Antiquities, Cyprus","RDAC"
"Report of the Keio Institute of Cultural and Linguistic Studies","RKI"
"Res publica litterarum: studies in the classical tradition","RPL"
"Review of Metaphysics","RMeta"
"Revista de estudios clásicos","REC"
"Revista de filosofía","RF(Argentina)"
"Revista de letras","RL"
"Revista española de linguística","REspLing"
"Revista latinoamericana de filosofía","RLAF"
"Revista venezolana de filosofía","RVF"
"Revue archéologique","RA"
"Revue archéologique de l'Est et du Centre-Est","RAE"
"Revue archéologique de Narbonnaise","RAN"
"Revue archéologique de Picardie","RAPic"
"Revue archéologique du Centre [de la France]","RACF"
"Revue belge d'archéologie et d'histoire de l'art","RBA"
"Revue belge de numismatique et de sigillographie","RBN"
"Revue belge de philologie et d'histoire","RBPh"
"Revue bénédictine","RBen"
"Revue biblique","RBi"
"Revue d'égyptologie","REgypt"
"Revue d'études ligures","RELig"
"Revue d'histoire de la pharmacie","RHPHARM"
"Revue d'histoire des sciences et de leurs applications","RHS"
"Revue d'histoire des textes","RHT"
"Revue d'histoire du droit (Tijdschrift voor Rechtsgeschiedenis)","RHD"
"Revue d'histoire ecclésiastique","RHE"
"Revue d'histoire et de philosophie religieuses","RHPhR"
"Revue de l'enseignement philosophique","REPh"
"Revue de l'histoire des religions","RHR"
"Revue de l'Université de Bruxelles","RUB"
"Revue de métaphysique et de morale","RMM"
"Revue de philologie, de littérature et d'histoire anciennes","RPh"
"Revue de philosophie ancienne","RPhA"
"Revue des études anciennes","REA"
"Revue des études arméniennes","REArm"
"Revue des études augustiniennes","REAug"
"Revue des études byzantines","REByz"
"Revue des études grecques","REG"
"Revue des études juives","REJ"
"Revue des études latines","REL"
"Revue des études sud-est européennes","RESE"
"Revue des questions scientifiques","RQS"
"Revue des sciences philosophiques et théologiques","RSPh"
"Revue des sciences religieuses","RSR"
"Revue de synthèse","RS"
"Revue de théologie et de philosophie","RThPh"
"Revue du Nord","RdN"
"Revue historique","RH"
"Revue historique de droit français et étranger","RD"
"Revue historique vaudoise","RHV"
"Revue informatique et statistique dans les sciences humaines","RISSH"
"Revue internationale d'onomastique","RIO"
"Revue internationale de philosophie","RIPh"
"Revue internationale des droits de l'Antiquité","RIDA"
"Revue numismatique","RN"
"Revue philosophique de la France et de l'étranger","RPhilos"
"Revue philosophique de Louvain","RPhL"
"Revue suisse d'art et d'archéologie","RSAA"
"Revue théologique de Louvain","RThL"
"Rheinisches Museum für Philologie","RhM"
"Ricerche teologiche","RicTeol"
"Riggisberger Berichte","RigBer"
"Rinascimento: rivista dellIstituto Nazionale di Studi sul Rinascimento","Rinascimento"
"Rivista archeologica dell'antica provincia e diocesi di Como","RAComo"
"Rivista biblica","RivBibl"
"Rivista critica di storia della filosofia","RSF"
"Rivista degli studi orientali","RSO"
"Rivista dell'Istituto Nazionale di Archeologia e Storia dell'Arte","RIA"
"Rivista di archeologia","RdA"
"Rivista di archeologia cristiana","RAC"
"Rivista di cultura classica e medioevale","RCCM"
"Rivista di filologia e di istruzione classica","RFIC"
"Rivista di filosofia","RF(Bologna)"
"Rivista di filosofia neoscolastica","RFN"
"Rivista di storia della Chiesa in Italia","RSCI"
"Rivista di storia e letteratura religiosa","RSLR"
"Rivista di studi bizantini e neoellenici","RSBN"
"Rivista di studi bizantini e slavi","RSBS"
"Rivista di studi fenici, pubbl. dal Centro di studio per la civiltà fenicia e punica","RStudFen"
"Rivista di studi pompeiani","RSP"
"Rivista internazionale di filosofia del diritto","RIFD"
"Rivista italiana di numismatica e scienze affini","RIN"
"Rivista storica dell'Antichità","RSA"
"Rivista storica italiana","RSI"
"Roczniki humanistyczne","RocsHum"
"Roczniki humanistyczne. 3, Filologia klasyczna","RHum"
"Romanische Forschungen: Vierteljahresschrift für romanische Sprachen und Literaturen","RomForsch"
"Romanobarbarica: contributi allo studio dei rapporti culturali tra mondo latino e mondo barbarico","RomBarb"
"Römische Quartalschrift für christliche Altertumskunde und für Kirchengeschichte","RQA"
"Römisches österreich: Jahresschrift der Österreichischen Gesellschaft für Archäologie",""
"Rudiae: ricerche sul mondo classico","Rudiae"
"Saalburg-Jahrbuch","SJ"
"Sacris Erudiri: jaarboek voor Godsdienstwetenschappen","SEJG"
"Sborník Prací Filosofické Fak. Brnenské Univ. Rada archeol. klas.","SPFB"
"Sborník Prací Filosofické Fakulty Brnenské University","SPFB(klas)"
"Scandinavian Journal of Theology","STh"
"Schede medievali: rassegna a cura dell'officina di studi medievali","SMed"
"Schriftenreihe für Geschichte der Naturwissenschaften, Technik und Medizin","NTM"
"Schweizerische numismatische Rundschau","SNR"
"Schweizerische Zeitschrift für Geschichte","SZG"
"Scripta classica Israelica: yearbook of the Israel Soc. for the promotion of classical Studies","SCI"
"Scriptorium: revue internationale des études relatives aux manuscrits","Scriptorium"
"Scrittura e Civiltà","S&C"
"Segno e testo","S&T"
"Seminari romani di cultura greca","SemRom"
"Siculorum Gymnasium: rassegna semestrale della Facoltà di Lettere e Filosofia dell'Università di Catania","SicGymn"
"Sitzungsberichte der Akademie der Wissenschaften in Berlin, Gesellschaftswissenschaften (G)","SAWDDR"
"Sitzungsberichte der Bayerischen Akademie der Wissenschaften, Philos.- Hist. Klasse","SBAW"
"Sitzungsberichte der Heidelberger Akademie der Wissenschaften, Philos.- Hist. Klasse","SHAW"
"Sitzungsberichte der Österreichischen Akademie der Wissenschaft in Wien, Philos.-Hist. Klasse","SAWW"
"Soobseniâ Gosudarstvennogo Èrmitaza (Reports of the Hermitage Museum)","SGE"
"Sources: travaux historiques","STHist"
"Sovetskaja arheologia","SA"
"Sprachkunst. Beiträge zur Literaturwissenschaft","Sprachkunst"
"Storia della storiografia","SStor"
"Studia et Documenta Historiae et Iuris","SDHI"
"Studia historica historia antigua","SHHA"
"Studia linguistica: revue de linguistique générale et comparée","SL"
"Studia monastica","StudMon"
"Studia Oliveriana","SOliv"
"Studia Patavina: rivista di scienze religiose","StudPat"
"Studia philologica Salmanticensia. Univ. de Salamanca, Acta Salm. Filos. y Letras","SPhS"
"Studia philosophica: annuaire de la Société suisse de philosophie","StudPhil"
"Studia Picena","StudPic"
"Studia Zamorensia","SZ"
"Studi classici e orientali","SCO"
"Studi e materiali di storia delle religioni","SMSR"
"Studien zum Buch- und Bibliothekswesen","SBB"
"Studi e ricerche dell'Ist. di Civilità classica, cristiana, medievale","SRIC"
"Studi e saggi linguistici","SSL"
"Studies in history and philosophy of science","SHPS"
"Studies in Language: international journal sponsored by the Foundations of Language","StudLang"
"Studies in Philology","SPh"
"Studies in religion (Sciences religieuses)","SR"
"Studi etruschi. Roma, Giorgio Bretschneider","SE"
"Studi genuensi","SG"
"Studii Clasice","StudClas"
"Studi italiani di filologia classica","SIFC"
"Studi italiani di linguistica teorica e applicata","SILTA"
"Studi magrebini","StudMagr"
"Studi medievali","StudMed"
"Studi micenei ed egeo-anatolici","SMEA"
"Studi romagnoli","StudRomagn"
"Studi romani: rivista bimestrale dell'Istituto di Studi Romani","StudRom"
"Studi salentini","StudSal"
"Studi sardi","SS"
"Studi storici: rivista trimestrale dell'Ist. Gramsci","StudStor"
"Studium Ovetense: revista del Centro sup. de EStudios eclesiásticos La Asunción","StudOv"
"Studi urbinati di storia, filosofia e letteratura","StudUrb(B)"
"Stylus: cuadernos de filología","Stylus"
"Sudhoffs Archiv: Zeitschrift für Wissenschaftsgeschichte","ZWG"
"Syllecta classica","SyllClass"
"Symbolae Osloenses, auspiciis Societatis Graeco-Latine","SO"
"Symbolae Philologorum Posnanensium","SPhP"
"Technology and Culture","T&C"
"The Ancient History Bulletin","AHB"
"The Ancient World","AncW"
"The Annual of the American Schools of Oriental Research","AASO"
"The Antiquaries Journal: being the Journal of the Society of Antiquaries of London","AntJ"
"The Archaeological Journal","AJ"
"The Art Bulletin: a quarterly published by the College Art Association of America","ABull"
"The Bodleian Library Record","BLR"
"The Classical Bulletin","CB"
"The Classical Journal","CJ"
"The Classical Outlook: journal of the American Classical League","CO"
"The Classical World","CW"
"The Geographical Journal","GJ"
"The J. Paul Getty Museum Journal","GMusJ"
"The Journal of the British Archaeological Association","JBAA"
"The Modern Schoolman: a quarterly Journal of Philosophy","ModSch"
"Theological Studies","ThS"
"Theologie und Philosophie","Th&Ph"
"Theologische Literaturzeitung: Monatsschrift für das gesamte Gebiet der Theologie und Religionswissenschaft","ThLZ"
"Theologische Quartalschrift","ThQ"
"Theologische Revue","ThRev"
"Theologische Rundschau","ThRdschau"
"Theologische Zeitschrift","ThZ"
"Theoria: a Swedish journal of philosophy and psychology","Theoria"
"The Philosophical Forum: a philosophical quarterly publ. with the cooper. of the Dept. of Philosophy of Boston Univ.","PF"
"The Philosophical Quarterly","PhilosQ"
"The second century: a journal of early Christian studies","SCent"
"The Studia Philonica Annual: studies in Hellenistic Judaism","StudPhilon"
"The Times Literary Supplement","TLS"
"The Yale Journal of Criticism","YJC"
"Tijdschrift voor filosofie","TF"
"Tijdschrift voor geschiedenis","TG"
"Topoi: an international review of philosophy","Topoi(Dordrecht)"
"Topoi: Orient-Occident","Topoi(Lyon)"
"Traditio: studies in ancient and medieval history, thought, and religion","Traditio"
"Transactions and Proceedings of the American Philological Association","TAPhA"
"Transactions of the American Philosophical Society","TAPhS"
"Transactions of the Philological Society","TPhS"
"Travaux du Cercle linguistique d'Aix-en-Provence","TCLA"
"Travaux et mémoires du Centre de recherches d'hist. et civil. byzantines","T&MBYZ"
"Travaux neuchâtelois de linguistique","TraNeL"
"Trends in Classics","TC"
"Trésors monétaires","TMon"
"Trierer Zeitschrift, für Geschichte und Kunst des Trierer Landes und seiner Nachbargebiete","TZ"
"Trinity Journal, publ. by Trinity Evangelical Divinity School","TJ"
"Trudy gosudarstbennogo Èrmitaza (travaux du Musée d'État de l'Ermitage)",""
"Ugarit-Forschungen","UF"
"Veleia: revista de prehistoria, historia antigua, arqueologá y filología clásicas","Veleia"
"Verbum: revue de linguistique publ. par l'Univ. de Nancy II","Verbum"
"Verkundigung und Forschung: Wissenschaft vom Neuen Testament. Beitr. zu Evangelische Theologie","V&F"
"Vestnik Drevnej Istorii (Revue d'Histoire ancienne)","VDI"
"Vestnik Leningradskogo Universiteta, Ser. 2, Istor.","VLUIST"
"Vestnik Leningradskogo Universiteta, Ser. 6, Filos.","VLUFILOS"
"Vestnik Moskovskogo Universiteta (filol. sekcija)","VMUFILOL"
"Vestnik Moskovskogo Universiteta (filos. sekcija)","VMUFILOS"
"Vestnik Moskovskogo Universiteta (ist. sekcija)","VMUIST"
"Vetera Christianorum","VetChr"
"Vetus Testamentum: quarterly publ. by the International Organization of Old Testament Scholars","VT"
"Vichiana: rassegna di studi filologici e storici","Vichiana"
"Vigiliae Christianae: a review of early Christian life and language","VChr"
"Visible Religion: annual for religious iconography","VRel"
"Vita Latina","VL"
"Vivarium: a journal for mediaeval philosophy and the intellectual life of the Middle Ages","Vivarium"
"Voprosy âzykoznaniâ (Problèmes de linguistique)","Vopåz"
"Voprosy filosofii (Problèmes de philosophie)","VopFilos"
"Voprosy istorii (Problèmes d'histoire)","VopIst"
"Voprosy klassiceskoj Filologii","VKF"
"Vox Latina: commentarii periodici","VoxLat"
"Vox Patrum","VoxP"
"Vox Romanica: annales Helvetici explorandis Linguis Romanicis destinati","VR"
"Wiener humanistische Blätter","WHB"
"Wiener Studien: Zeitschrift für klassische Philologie und Patristik","WS"
"Wissenschaftliche Zeitschrift der Ernst-Moritz-Arndt-Univ., Greifswald, Gesellsch.- & sprachwiss. Reihe.","WZGREIFS"
"Wissenschaftliche Zeitschrift der Friedrich-Schiller-Univ. Jena, Gesellsch.- & sprachwiss. Reihe.","WZJENA"
"Wissenschaftliche Zeitschrift der Humboldt-Univ. Berlin, Gesellsch.- & sprachwiss. Reihe","WZBERLIN"
"Wissenschaftliche Zeitschrift der Karl-Marx-Univ. Leipzig, Gesellsch.- & sprachwlss. Reihe.","WZLEIPZIG"
"Wissenschaftliche Zeitschrift der Martin-Luther-Univ. Halle-Wittenberg","WZHALLE"
"Wissenschaftliche Zeitschrift der Wilhelm-Pieck-Univ. Rostock Gesellsch.- & sprachwiss. Reihe.","WZROSTOCK"
"Wort und Dienst: Jahrbuch der kirchlichen Hochschule Bethel (bei Bielefeld)","W&D"
"Würzburger Jahrbücher für die Altertumswissenschaft","WJA"
"Yale Classical Studies","YCIS"
"Yale University Library Gazette","YLG"
"Zeitschrift der Deutschen Morgenländischen Gesellschaft","ZDMG"
"Zeitschrift der Savigny-Stiftung für Rechtsgeschichte (Romanistische Abteilung)","ZRG"
"Zeitschrift des Deutschen Palästina-Vereins","ZPalV"
"Zeitschrift für ägyptische Sprache und Altertumskunde","ZAS"
"Zeitschrift für antikes Christentum","ZAC"
"Zeitschrift für Archäologie","ZfA"
"Zeitschrift für die Alttestamentliche Wissenschaft","ZATW"
"Zeitschrift für die Neutestamentliche Wissenschaft und die Kunde der älteren Kirche","ZNTW"
"Zeitschrift für Katholische Theologie","ZKTh"
"Zeitschrift für Kirchengeschichte","ZKG"
"Zeitschrift für Papyrologie und Epigraphik","ZPE"
"Zeitschrift für Philosophische Forschung","ZPhF"
"Zeitschrift für Religions- und Geistesgeschichte","ZRGG"
"Zeitschrift für Romanische Philologie","ZRPh"
"Zeitschrift für Semiotik","ZS"
"Zeitschrift für Vergleichende Sprachforschung","ZVS"
"Zentralblatt für Bibliothekswesen","ZBB"
"Ziva Antika (Antiquité vivante)","ZAnt"
"Zprávy Jednoty Klasickaych Filologu","ZJKF"
"Νέα Ῥώμη. Rivista di ricerche bizantinistiche","Nea Rhome"
1 Abhandlungen der Akademie der Wissenschaften in Mainz, Geistes und sozialwissenschaftliche Klasse AAWM
2 Abhandlungen der Bayerischen Akademie der Wissenschaften, Philos.-Hist. Klasse ABAW
3 Abhandlungen der Heidelberger Akademie der Wissenschaften, Philos.- Hist. Klasse AHAW
4 Abhandlungen der Sächsischen Akademie der Wissenschaften zu Leipzig ASAW
5 Acta ad archaeologiam et artium historiam pertinentia AAAH
6 Acta Antiqua Academiae Scientiarum Hungaricae AAntHung
7 Acta Archaeologica AArch
8 Acta Archaeologica (Arheoloski Vestnik) AArchSlov
9 Acta Archaeologica Academiae Scientiarum Hungaricae AArchHung
10 Acta classica: proceedings of the Classical Association of South Africa AClass
11 Acta classica Universitatis Scientiarum Debreceniensis ACD
12 Acta Historica Academiae Scientiarum Hungaricae AHistHung
13 Acta Iranica: encyclopédie permanente des études iraniennes AI
14 Acta Orientalia Academiae Scientiarum Hungaricae AOrientHung
15 Acta Univ. de Attila József nominatae, Acta antiqua et archaeologica. AAASzeged
16 Acta Univ. de Attila Jozsef nominatae, Acta Historica AHSzeged
17 Acta Universitatis Wratislaviensis. Classica Wratislaviensia. ClassWrat
18 Aevum: rassegna di scienze storiche, linguistiche e filologiche Aevum
19 Aevum antiquum Aevum(ant)
20 Akroterion: quarterly for the Classics in South Africa Akroterion
21 Akten der Gesellschaft für griechische und hellenistische Rechts- geschichte AGR
22 Alba Regia: annales Musei Stephani Regis Alba Regia
23 Allgemeine Zeitschrift für Philosophie AZP
24 American Historical Review AHR
25 American Journal of Ancient History AJAH
26 American Journal of Archaeology AJA
27 American Journal of Numismatics AJN
28 American Journal of Philology AJPh
29 American Philosophical Quarterly APhQ
30 Analecta Bollandiana AB
31 Analecta Malacitana: revista de la Sección de Filología de la Facultad de Filosofía y Letras AMal
32 Analecta Romana Instituti Danic ARID
33 Anales de Filologia clásica AFC
34 Anales de Historia antigua y medieval AHAM
35 Anales de la Universidad de Murcia, Facultad de Letras AUM
36 Anatolian Studies: journal of the British Inst. of Archaeology at Ankara AS
37 Ancient History AH
38 Ancient Philosophy AncPhil
39 Ancient Society AncSoc
40 Anglo-Saxon England ASE
41 Annales: économies, sociétés, civilisations Annales (ESC)
42 Annales: histoire, sciences sociales Annales (HSS)
43 Annales d'histoire et d'archéologie / Université Saint-Joseph AHAUSJ
44 Annales de Bretagne et des Pays de l'Ouest ABPO
45 Annales de l'Institut de philosophie AIPh
46 Annales de la Faculté des Lettres et Sciences humaines de l'Université de Dakar AFLD
47 Annales de Normandie AnnNorm
48 Annales du Service des Antiquités d'égypte ASAE
49 Annales Latini Montium Arvernorum: bulletin du Groupe d'études latines de l'Université de Clermont ALMArv
50 Annales Universitatis Budapestinensis de Rolando Eötvös nominatae, Ê Sectio iuridica AUBFjur.)
51 Annales Universitatis Budapestinensis de Rolando Eötvös nominatae, Ê Sectio philosophica et sociologica AUB(phil)
52 Annales Universitatis Budapestinensis de Rolando Eötvös nominatae, Sectio classica AUB(class)
53 Annales Valaisannes AV
54 Annali del Dipartimento di filosofia dell'Università di Firenze ADFF
55 Annali dell'Istituto di Storia, Univ. di Firenze AISF
56 Annali dell'Istituto Italiano di Numismatica AIIN
57 Annali dell'Istituto Italiano per gli Studi Storici AIIS
58 Annali dell'Istituto universitario orientale di Napoli, Dipartimento di studi del mondo classico e del Mediterraneo antico, Sezione di archeologia e storia antica AION(archeol)
59 Annali dell'Istituto universitario orientale di Napoli, Dipartimento di studi del mondo classico e del Mediterraneo antico, Sezione filologico-letteraria AION(filol)
60 Annali dell'Istituto universitario orientale di Napoli, Dipartimento di studi del mondo classico e del Mediterraneo antico, Sezione linguistica AION(ling)
61 Annali dell'Università di Ferrara, Sez. V, Sc. giurid AUFG
62 Annali della Facoltà di Giurisprudenza, Università di Genova AFGG
63 Annali della Facoltà di Lettere di Lecce AFLL
64 Annali della Facoltà di Lettere e Filosofia, Università di Macerata AFLM
65 Annali della Facoltà di Lettere e Filosofia dell'Università di Siena AFLS
66 Annali della Facoltà di Lettere e Filosofia della Università di Cagliari AFLC
67 Annali della Facoltà di Lettere e Filosofia della Università di Napoli AFLN
68 Annali della Facoltà di Lettere e Filosofia di Bari AFLB
69 Annali della Facoltà di Lettere e Filosofia di Perugia AFLPer
70 Annali della Facoltà di Magistero dell'Università di Cagliari AFMC
71 Annali della Facoltà di Scienze della Formazione dell'Università di Cagliari AFSFC
72 Annali della Scuola Normale Superiore di Pisa, Classe di Lettere e Filosofia ASNP
73 Annali del Liceo classico G. Garibaldi di Palermo ALGP
74 Annali del Seminario Giuridico dell'Univ. di Palermo ASGP
75 Annali di storia dell'esegesi AnnSE
76 Annuaire de l'école pratique des Hautes études, IV' sect., Sciences hist. & philol AEHE IV
77 Annuaire de l'école pratique des Hautes études, Ve sect., Sciences religieuses AEHE V
78 Annuaire de l'Institut de Philologie et d'Histoire Orientales et Slaves de l'Université Libre de Bruxelles AIPhO
79 Annuaire de l'Université de Sofia, Faculté des Lettres AUS
80 Annuaire des amis de la Bibliothèque de Sélestat AABS
81 Annuaire du Collège de France ACF
82 Annual of the British School at Athens ABSA
83 Annuario del Ginnasio Liceo A. Volta di Como AGLComo
84 Annuario dell'Accademia etrusca di Cortona AAEC
85 Annuario della Scuola Archeologica di Atene a delle Missioni Italiane in Oriente ASAA
86 Annuarium Historiae Conciliorum AHC
87 Antichità altoadriatiche AAAD
88 Anticnaja drevnost'i srednije veka (L'antiquité et le Moyen Âge) ADSV
89 Anticnyj mir i arkheologija (Le monde antique et l'archéologie) AMA
90 Antike Kunst, hrsg. von der Vereiningung der Freunde antiker Kunst AK
91 Antike und Abendland: Beiträge zum Verständnis der Griechen und Römer und ihre Nachlebens A&A
92 Antike Welt AW
93 Antiquités africaines AntAfr
94 Anuari de filologia, Secció D, Studia Graeca et Latina AFB
95 Anuario de Historia del Derecho Español AHDE
96 Anzeiger der Österreichischen Akademie der Wissenschaften in Wien, Philos.-Hist. Klasse AAWW
97 Anzeiger für die Altertumswissenschaft, hrsg. von der Österreichischen Humanistischen Gesellschaft AAHG
98 Aquileia nostra: bolletino dell'Associazione nazionale per Aquileia AN
99 Archaeologiai Ertesitö AErt
100 Archaeological news ArchN
101 Archaeological Reports AR
102 Archaiologike ephemeris AEph
103 Archaiologike Ephemeris AE
104 Archaiologikon Deltion AD
105 Archäologie der Schweiz: Mitteilungsblatt der Schweizerischen Gesellschaft für Ur- und Frühgeschichte ArchS
106 Archäologie im Kanton Bern: Fundberichte und Aufsätze AKBern
107 Archäologischer Anzeiger AA
108 Archäologisches Korrespondenzblatt: Urgeschichte, Römerzeit, Frühmittelalter AKB
109 Archeologia classica: rivista della Scuola naz. di Archeologia, pubbl. a cura degli Ist. di Archeologia e Storia dell'arte greca e romana e di Etruscologia e antichità italiche dell'Univ. di Roma ArchClass
110 Archive for history of exact sciences AHES
111 Archives d'histoire doctrinale et littéraire du Moyen Âge AHMA
112 Archives de philosophie: recherches et documentation ArchPhilos
113 Archives de philosophie du droit APhD
114 Archives internationales d'histoire des sciences AIHS
115 Archiv für Begriffsgeschichte: Bausteine zu einem historischen Wörterbuch der Philosophie ABG
116 Archiv für Geschichte der Philosophie AGPh
117 Archiv für Kulturgeschichte AKG
118 Archiv für Musikwissenschaft AMW
119 Archiv für Orientforschung: Internationale Zeitschrift für die Wissenschaft vom Vorderen Orient AOF
120 Archiv für Papyrusforschung und verwandte Gebiete APF
121 Archivio Glottologico Italiano AGI
122 Archivio Storico per la Calabria e la Lucania ASCL
123 Archivio Storico Pugliese ASP
124 Archivio Storico Sardo ASSARD
125 Archivo Español de Arqueología AEA
126 Archiv orientální ArchOrient
127 Archivum Latinitatis Medii Aevi (Bulletin Du Cange) ALMA
128 Argeion oikonomikes istorias (Archives of Economic History, Athens) AEH
129 Arheologiâ, publ. par l'Inst. d'Archéol. de l'Acad. des Sciences d'Ukraine et par la Soc. ukrainienne pour la préservation des monuments culturels et historiques ARH
130 Atene e Roma: rassegna trimestrale dell'Associazione Italiana di Cultura classica A&R
131 Atti del Centro ricerche e documentazione sull'antichità classica CRDAC
132 Atti dell'Accademia di Scienze, Lettere e Arti di Palermo AAPal
133 Atti dell'Accademia Ligure di Scienze e Lettere AALIG
134 Atti dell'Accademia Pontaniana AAP
135 Atti dell'Istituto Veneto di Scienze, Lettere ed Arti, Classe di Scienze morali e Lettere AIV
136 Atti della Accademia delle Scienze di Torino, Classe di Scienze morali, storiche e filologiche AAT
137 Atti della Accademia di Scienze morali e politiche della Società nazionale di Scienze, Lettere ed Arti di Napoli AAN
138 Atti della Accademia Mediterranea delle Scienze AAMed
139 Atti della Accademia Nazionale dei Lincei, Classe di Scienze Morali, Storiche e Filologiche. Rendiconti RAL
140 Atti della Accademia Peloritana dei Pericolanti, Classe di Lettere, Filosofia e Belle Arti AAPel
141 Atti della Accademia Roveretana degli Agiati, Classe di Scienze umane, Lettere ed Arti AARov
142 Atti della Pontificia Accademia romana di Archeologia, Ser. IIIa, Memorie (in-4¡) MPAA
143 Atti del Sodalizio glottologico milanese ASGM
144 Atti e Memorie dell'Accademia Patavina di Scienze, Lettere ed Arti, Classe di Sc. mor., Lett. ed Arti AAPat
145 Atti e Memorie dell'Accademia Toscana La Colombaria AATC
146 Atti e Memorie dell'Arcadia AMArc
147 Atti e memorie della Accademia Virgiliana di Mantova AVM
148 Atti e Memorie della Società Istriana di Archeologia e Storia Patria AMSI
149 Atti e memorie della Società Magna Grecia ASMG
150 Atti e Memorie delle Accademie di Agricoltura, Scienze e Lettere di Verona AMAV
151 Aufstieg und Niedergang der römischen Welt: Geschichte und Kultur Roms im Spiegel der neueren Forschung ANRW
152 Augustan Age AugAge
153 Augustinian Studies AugStud
154 Basler Zeitschrift für Geschichte und Altertumskunde BZG
155 Bayerische Vorgeschichtsblätter BVBl
156 Beiträge zur allgemeinen und vergleichenden Archäologie BAVA
157 Beiträge zur Namenforschung BN
158 Bericht der Römisch-Germanischen Kommission des Deutschen Archäologischen Instituts BRGK
159 Berichte zur Wissenschaftsgeschichte BWG
160 Bibliotheca Orientalis, uitg. van het Nederlandsch Instituut voor het Nabije Oosten BO
161 Bibliothek und Wissenschaft B&W
162 Bibliothèque d'humanisme et Renaissance BiblH&R
163 Bibliothèque de l'école des Chartes BECh
164 Biblische Zeitschrift (Neue Folge) BiZ
165 Boletín del Museo arqueológico nacional BMAN
166 Boletín del Seminario de Estudios de Arte y Arqueología BSEAA
167 Bolletino del Centro Inernazionale per lo Studio dei Papyri Ercolanesi (Cronache Ercolanesi) BCPE
168 Bollettino d'arte del Ministero per i beni culturali e ambientali BA
169 Bollettino dei classici BollClass
170 Bollettino dei monumenti, musei e gallerie pontificie BMMP
171 Bollettino della Badia Greca di Grottaferrata BBGG
172 Bollettino di numismatica BNum
173 Bollettino di studi latini: periodico quadrimestrale d'informazione bibliografica BStudLat
174 Bonner Jahrbücher des Rheinischen Landesmuseums in Bonn und des Vereins von Altertumsfreunden im Rheinlande BJ
175 British Archaeological Abstracts BritAA
176 British Archaeological Bibliography BritAB
177 British Journal for the History of Philosophy BJHP
178 British Journal for the History of Science BJHS
179 Bryn Mawr Classical Review BMCRev
180 Bulletin Antieke Beschaving BABesch
181 Bulletin archéologique du Comité des travaux historique BCTH
182 Bulletin d'archéologie algérienne BAA
183 Bulletin d'archéologie marocaine BAM
184 Bulletin d'études orientales, publié par l'Institut Français de Damas BEO
185 Bulletin d'information de l'Association internationale pour l'étude de la mosaïque antique BullAIEMA
186 Bulletin de correspondance hellénique BCH
187 Bulletin de l'Association Guillaume Budé BAGB
188 Bulletin de l'Institut français d'archéologie orientale BIAO
189 Bulletin de l'Institut historique belge de Rome BIBR
190 Bulletin de la Classe des Lettres de l'Académie Royale de BelgiqueN BAB
191 Bulletin de la Faculté des Lettres de Mulhouse BFLM
192 Bulletin de la Société de linguistique de Paris BSL
193 Bulletin de la Société française de numismatique BSFN
194 Bulletin de la Société française de philosophie BSPh
195 Bulletin de la Société internationale pour l'étude de la philosophie médiévale BPHM
196 Bulletin de la Société nationale des antiquaires de France BSAF
197 Bulletin de la Société toulousaine d'études classiques BSTEC
198 Bulletin de littérature ecclésiastique BLE
199 Bulletin des antiquités luxembourgeoises BAL
200 Bulletin des Musées royaux d'Art et d'Histoire BMAH
201 Bulletin de théologie ancienne et médiévale BTh
202 Bulletin du Musée de Beyrouth BMB
203 Bulletin of the American Schools of Oriental Research in Jerusalem and Baghdad BASO
204 Bulletin of the American Society of Papyrologists BASP
205 Bulletin of the Egyptological Seminar BES
206 Bulletin of the History of Medicine BHM
207 Bulletin of the Institute of Archaeology of the Univ. of London BIAL
208 Bulletin of the Institute of Classical Studies of the University of London BICS
209 Bulletin of the John Rylands Library BRL
210 Bulletin of the Metropolitan Museum of Art BMM
211 Bulletin of the Museum of Mediterranean and Near Eastern Antiquities BMNE
212 Bulletin of the Museums of Art and Archaeology of the University of Michigan BMUSUM
213 Bulletins de la Société des Antiquaires de l'Ouest BSAO
214 Bulletins trimestriels de la Société des antiquaires de Picardie BSAP
215 Bullettino dell'Istituto di Diritto romano BIDR
216 Bullettino della Commissione Archeologica Comunale in Roma BCAR
217 Byzantinische Forschungen: internationale Zeitschrift für Byzantinistik ByzF
218 Byzantinische Zeitschrift ByzZ
219 Byzantinoslavica: revue internationale des études byzantines ByzSlav
220 Byzantion: revue internationale des études byzantines Byzantion
221 Cahiers alsaciens d'archéologie, d'art et d'histoire CAAH
222 Cahiers archéologiques: fin de l'antiquité et Moyen Âge CArch
223 Cahiers d'histoire publ. par les Univ. de Clermont-Lyon-Grenoble CH
224 Cahiers de l'Institut du Moyen Âge grec et latin CIMA
225 Cahiers de Numismatique: bulletin de la Société d'études numismatiques et archéologiques CahNum
226 Cahiers de philosophie politique et juridique CPhPJ
227 Cahiers de recherches de l'Institut de Papyrologie et d'égyptologie de Lille III CRIPEL
228 Cahiers des études anciennes CEA
229 Cahiers du Centre d'études Chypriotes CCEC
230 Cahiers du Centre Georges Radet CCGR
231 Cahiers du Centre Gustave Glotz CCG
232 Cahiers du groupe interdisciplinaire du théâtre antique (Cahiers du GITA) CGITA
233 Cahiers Ferdinand de Saussure: review suisse de linguistique générale CFS
234 Canadian Journal of Philosophy CJPh
235 Canadian philosophical reviews CPhRev
236 Canadian review of comparative literature CRCL
237 Catholic Historical Review CHR
238 Centre d'études et de documentation archéologique de la Conservation de Carthage. Bulletin CEDAC
239 Chronique d'Egypte CE
240 Church History ChHist
241 Civiltà classica e cristiana CCC
242 Classica: Boletim de pedagogia e cultura Classica(Lisboa)
243 Classica: revista brasileira de estudos clássicos Classica(Brasil)
244 Classica et mediaevalia: revue danoise d'histoire et de philologie publiée par la Société danoise pour les études anciennes et médiévales C&M
245 Classical and Modern Literature CML
246 Classical Antiquity ClAnt
247 Classical Philology CPh
248 Classical Quarterly CQ
249 Classical Review CR
250 Classical Studies ClassStud
251 Clio Medica: acta Academiae internationalis historiae medicinae CM
252 Codices manuscripti: Zeitschrift für Handschriftenkunde CodMan
253 Colby Quarterly ColbyQ
254 Comparative Literature CompLit
255 Comparative Literature Studies CLS
256 Comparative Studies in Society and History CSSH
257 Comptes rendus de l'Académie des Inscriptions et Belles-Lettres CRAI
258 Computers and the Humanitie CHum
259 Connaissance hellénique ConnHell
260 Contributi dell'Istituto di Storia antica dell'Univ. del Sacro Cuore CISA
261 Corolla Londiniensis CL
262 Cristianesimo nella storia: richerche storiche, esegetiche, teologiche CrSt
263 Critica storica CS
264 Cronache Ercolanesi CronErc
265 Cuadernos de filología clásica. Estudios griegos e indoeuropeos. CFC(G)
266 Cuadernos de filología clásica. Estudios latinos. CFC(L)
267 Cuadernos de investigación filológica CIF
268 Cuadernos de prehistoria i arqueología CPAM
269 Cuaderns de prehistòria i arqueologia de Castelló CPAC
270 Cultura e scuola C&S
271 Damaszener Mitteilungen, hrsg. von dem Deutschen Archäologischen Institut (Station Damaskus) MDAI(D)
272 Das Altertum, hrsg. vom Zentralinst. für Alte Gesch. und Archäol. der Dt. Akad. der DDR Altertum
273 Der altsprachliche Unterricht: Arbeitshefte zu seiner wissenschaftlichen Begründung und praktischen Gestalt AU
274 Deutsche Literaturzeitung für Kritik der internationalen Wissenschaft DLZ
275 Deutsches Dante-Jahrbuch DDJ
276 Dialoghi di archeologia DArch
277 Dialogues d'histoire ancienne DHA
278 Die Alte Stadt: Vierteljahreszeitschrift für Stadtgeschichte, Stadtsoziologie und Denkmalpflege ASTADT
279 Die Welt des Orients: wissenschaftliche Beiträge zur Kunde des Morgenlandes WO
280 Dissertations Abstracts: international abstracts of dissertation available in microfilm or as xerographic reproductions DA
281 Downside Review DR
282 Drevnejsije Gosudarstva na territorii SSSR (Les états les plus anciens sur le territoire de l'URSS: matériaux et recherches) DGT
283 Dumbarton Oaks Papers DOP
284 Durham University Journal DUJ
285 East and West E&W
286 Échos du monde classique (Classical Views) EMC
287 Egitto e Vicino Oriente EVO
288 Eikasmos: quaderni bolognesi di filologia classica Eikasmos
289 Eirene: studia Graeca et Latina Eirene
290 English Historical Review EHR
291 Ensaios de literatura e filologia, publ. do Dept. de Letras clássicas, Fac. de Letras Univ. federal de Minas Gerais ELF
292 Epeteris tes Hetaireias Eleiakon Meleton EHEM
293 Epeteris tes Kentrou Ereunes tes Historias tou Hellenikou Dikaiou EHHD
294 Ephemerides Theologicae Lovanienses EThL
295 Epigraphica Anatolica: Zeitschrift für Epigraphik und historische Geographie Anatoliens EA
296 Epistemonike epeterida tes philosophikes Scholes tou Aristoteleiou Panepistemiou Thessalonikes, Tmema philosophias EEThess(philos)
297 Epistemonike epeteris tes philosophikes Scholes tou Panepistemiou Athenon EEAth
298 Eranos: acta philologica Suecana Eranos
299 Eranos-Jahrbuch Eranos-Jb
300 Espacio, tiempo y forma: revista de la Facultad de Geografía e Historia, Ser. 1 ETF(arqueol)
301 Espacio, tiempo y forma: revista de la Facultad de Geografia e Historia, Ser. 2 ETF(hist)
302 Estudios clásicos: organo de la Sociedad espanola de estudios clásicos EClás
303 Estudios de la antigüedad EstAnt
304 Estudios humanisticos EHum
305 Ethnographisch-archäologische Zeitschrift EAZ
306 Études celtiques EC
307 Études de lettres: bulletin de la Faculté des Lettres de l'Univ. de Lausanne et de la Soc. des études de Lettres EL
308 Études indo-européennes EIE
309 Études philosophiques EPh
310 Excerpta philologica ExcPhilol
311 Exemplaria: revista de literatura comparada Exemplaria
312 Exemplaria Classica ExClass
313 Gazette numismatique suisse GNS
314 Geographia Antiqua GeorgAnt
315 German Studies: a review of German-language research contributions. Sect. l: Philosophy and history GS
316 Geschichte in Wissenschaft und Unterricht GWU
317 Giornale critico della filosofia italiana GCFI
318 Giornale di metafisica GM
319 Giornale ferrarese di retorica e filologia GFRF
320 Giornale italiano di filologia: rivista trimestrale di cultura GIF
321 Gnomon: kritische Zeitschrift für die gesamte klassische Altertumswissenschaft Gnomon
322 Göttinger Forum für Altertumswissenschaft GFA
323 Göttingische Gelehrte Anzeigen GGA
324 Graecolatina et Orientalia: zborník Filoz. Fak. Univerz. Komenského GLO
325 Graecolatina Pragensia: acta Universitatis Carolinae GLP
326 Grazer Beiträge: Zeitschrift für die klassische Altertumswissenschaft GB
327 Greece and Rome G&R
328 Greek, Roman and Byzantine Studies GRBS
329 Hamburger Beiträge zur Archäologie HBA
330 Hamburger Beiträge zur Numismatik HBN
331 Harvard Library Bulletin HLB
332 Harvard Studies in Classical Philology HSPh
333 Harvard Theological Review HThR
334 Hebrew Union College Annual HebrUCA
335 Hefte des Archäologischen Seminars der Universität Bern HASB
336 Ελληνικά: φιλολογικό, ιστορικό και λαογραφικό περιοδικό σύγγραμμα Hellenica
337 Helvetia archaeologica HA
338 Hermes: Zeitschrift für klassische Philologie Hermes
339 Hispania antiqua: revista de historia antigua HAnt
340 Histoire, épistémologie, langage HEL
341 Histoire des sciences médicales HSMed
342 Historia mathematica: international journal of the history of mathematics HM
343 Historisches Jahrbuch HJ
344 Historische Sprachforschung (Historical Linguistics) HSF
345 Historische Zeitschrift HZ
346 History and Philosophy of the Life Sciences HPLS
347 History and Theory: studies in the philosophy of history H&T
348 History of Philosophy Quarterly HPhQ
349 History of political thought HPTh
350 History of Religions HR
351 History of Science HS
352 History of Technology HTechn
353 Humanistica Lovaniensia HumLov
354 Hyperboreus: studia classica Hyperboreus
355 Illinois Classical Studies ICS
356 Il pensiero politico: rivista di storia delle idee politiche e sociali PPol
357 Incontri linguistici ILing
358 Indogermanische Forschungen IF
359 Inozemna filologìâ (Philologie étrangère) InFil
360 International journal of nautical archaeology IJNA
361 International journal of philosophical studies IJPS
362 International journal of the classical tradition IJCT
363 International Philosophical Quarterly IPQ
364 International Studies in Philosophy ISPh
365 Invigilata lucernis: rivista dell'Istituto di Latino InvLuc
366 Iranica antiqua IA
367 Israel Exploration Journal IEJ
368 Istoriko-filosofsky ezegodnik (History of philosophy yearbook), ed. by the Inst. of Philosophy of the Acad. of Sciences of URSS IFE
369 Italia medioevale e umanistica IMU
370 Jaarbericht van het Voor-Aziatisch-Egyptisch Genootschap Ex Oriente Lux JVEG
371 Jahrbuch der Berliner Museen JBerlM
372 Jahrbuch der Heidelberger Akad. der Wissenschaften JHAW
373 Jahrbuch der Österreichischen Byzantinistik JöByz
374 Jahrbuch der Schweizerischen Gesellschaft für Ur- und Frühgeschichte JSGU
375 Jahrbuch des Deutschen Archäologischen Instituts JDAI
376 Jahrbuch des Römisch-Germanischen Zentralmuseums JRGZ
377 Jahrbuch für Antike und Christentum JbAC
378 Jahrbuch für Numismatik und Geldgeschichte JNG
379 Jahrbuch für Wirtschaftsgeschichte JWG
380 Jahresberichte aus Augst und Kaiseraugst JAK
381 Jahreshefte des Österreichischen Archäologischen Instituts JöAI
382 Journal asiatique JA
383 Journal des Savants JS
384 Journal for the history of Arabic science JHAS
385 Journal for the history of astronomy JHA
386 Journal for the study of Judaism: (in the Persian, Hellenistic and Roman period) JSJ
387 Journal of ancient civilizations JAC
388 Journal of Biblical Literature JBL
389 Journal of Classical Studies: the journal of the Class. Soc. of Japan JCS
390 Journal of early Christian studies JECS
391 Journal of Ecclesiastical History JEH
392 Journal of Egyptian Archaeology JEA
393 Journal of European archaeology JEurArch
394 Journal of Field Archaeology JFA
395 Journal of Glass Studies JGS
396 Journal of Greco-Roman Studies JGRS
397 Journal of Hellenic Studies JHS
398 Journal of Indo-European Studies JIES
399 Journal of Juristic Papyrology JJP
400 Journal of Mediterranean archaeology JMA
401 Journal of Near Eastern Studies JNES
402 Journal of Philology JPhil
403 Journal of Philosophy JPh
404 Journal of prehistoric religion JPR
405 Journal of Religion JR
406 Journal of Religious History JRH
407 Journal of Roman archaeology JRA
408 Journal of Roman military equipment studies JRMES
409 Journal of Roman Studies JRS
410 Journal of the American Oriental Society JAOS
411 Journal of the American Research Center in Egypt JARCE
412 Journal of the Australasian Universities Language and Literature Association AUMLA
413 Journal of the economic and social history of the Orient JESHO
414 Journal of the history of biology JHB
415 Journal of the History of Ideas JHI
416 Journal of the History of Medicine and allied Sciences JHM
417 Journal of the History of Philosophy JHPh
418 Journal of the history of sexuality JHSex
419 Journal of Theological Studies. Oxford, Clarendon Press JThS
420 Journal of the Royal Asiatic Society of Great Britain and Ireland JAS
421 Journal of the Society of Architectural Historians JSAH
422 Journal of the Walters Art Gallery JWAG
423 Journal of the Warburg and Courtauld Institutes JWI
424 Kant-Studien: Philosophische Zeitschrift KantStud
425 Κοινωνία Koinonia
426 Koldewey-Gesellschaft, Vereinigung für baugeschichtliche Forschung e. V. Bericht über die Tagung für Ausgrabungswissenschaft und Bauforschung KGB
427 Kölner Jahrbuch für Vor- und Frühgeschichte, hrsg. vom Römisch- Germanischen Museum und der Archäologischen Gesellschaft Köln KJ
428 Kratkije soobseniâ Inst. arheol. Akad. Nauk SSSR KSIA
429 Kul'tura iskusstvo anticnogo mira KIAM
430 L'Année épigraphique AnnEpigr
431 L'Année Philologique APh
432 L'Antiquité classique AC
433 L'Écrit du temps EDT
434 L'Information grammaticale IG
435 L'Information historique IH
436 L'Information littéraire IL
437 La linguistique Ling
438 La Parola del passato: rivista di studi antichi PP
439 Laval Théologique et Philosophique LThPh
440 Le Genre humain GH
441 Le Moyen Âge: revue trimestrielle d'histoire et de philologie MA
442 Les Cahiers de Tunisie CT
443 Les Études Classiques LEC
444 Le Temps de la réflexion TR
445 Libyan Studies LibStud
446 Lingua e stile L&S
447 Linguistica Biblica: interdisziplinäre Zeitschrift für Theologie und Linguistik LingBibl
448 Listy filologické LF
449 Litterae Numismaticae Vindobonenses LNV
450 Littérature, médicine, société LMS
451 Liverpool Classical Monthly LCM
452 Maia: rivista di letterature classiche Maia
453 Mainzer Archäologische Zeitschrift MAZ
454 Mainzer Zeitschrift: Mittelrheinisches Jahrbuch für Archäologie, Kunst und Geschichte MZ
455 Materiali e contributi per la storia della narrativa greco-latina MCSN
456 Materiali e discussioni per l'analisi dei testi classici MD
457 Mededelingen van de koninklijke Academie voor Wetensehappen, Letteren & Schone Kunsten van België, Kl. der Letteren MAWBL
458 Mededelingen van het Nederlandsch historisch Instituut te Rome MNIR
459 Mediaeval Studies MS
460 Medical History: a quarterly journal devoted to the history of medicine and related sciences MedHist
461 Medievalia et Humanistica: studies in medieval and Renaissance society M&H
462 Medioevo greco MEG
463 Mediterranean Archaeology: Australian and New Zealand journal for the archaeology of the Mediterranean world MedArch
464 Mediterranean Historical Review, ed. by the Aranne School of History, Tel Aviv Univ MHR
465 Medium Aevum MAev
466 Medizin-historisches Journal MHJ
467 Mélanges d'Archéologie et d'Histoire de l'école Française de Rome, Antiquité MEFRA
468 Mélanges de l'école française de Rome. Moyen Âge et temps modernes MEFRM
469 Mélanges de la Casa de Velázquez, Madrid MCV
470 Mélanges de Science Religieuse MSR
471 Mémoires de l'Académie des Inscriptions et Belles Lettres MAI
472 Memorias de historia antigua MHA
473 Memorie dell'Accademia delle Scienze dell'Istituto di Bologna, Cl. di Sc. morali MAIB
474 Memorie dell'Accademia delle Scienze di Torino, Classe di Scienze morali, storiche e filologiche MAT
475 Memorie dell'Ist. Lombardo, Accademia di Scienze e Lettere, Cl. di Lett., Sc. morali e storiche MIL
476 Memorie della Classe di Scienze morali e storiche dell'Accademia dei Lincei MAL
477 Metropolitan Museum Journal MMJ
478 Militärgeschichtliche Mitteilungen MGM
479 Minerva: revista de filología clásica Minerva(vall)
480 Minerva: the international review of ancient art and archaeology Minerva(lond)
481 Miscellanea greca e romana: studi pubblicati dall'Ist. italiano per la storia antica MGR
482 Mitteilungen der Archäologischen Gesellschaft Steiermark MAGS
483 Mitteilungen des Deutschen Archäologischen Instituts (Abt. Istambul) MDAI(I)
484 Mitteilungen des Deutschen Archäologischen Instituts (Abt. Madrid) MDAI(M)
485 Mitteilungen des Deutschen Archäologischen Instituts (Athen. Abt.) MDAI(A)
486 Mitteilungen des Deutschen Archäologischen Instituts (Röm. Abt.) MDAI(R)
487 Mitteilungen des Instituts für österreichische Geschichtsforschung MIöG
488 Mitteilungen zur christlichen Archäologie MiChA
489 Mittellateinisches Jahrbuch MLatJB
490 Mnemosyne: bibliotheca classica Batava Mnemosyne
491 Monumenti antichi, pubblicati dall'Accademia dei Lincei MonAL
492 Monuments et mémoires publiés par l'Académie des Inscriptions et Belles-Lettres (Fondation Piot) MMAI
493 Münchener Studien zur Sprachwissenschaft MSS
494 Münsterische Beiträge zur antiken Handelsgeschichte MBAH
495 Museo de Zaragoza, Boletín BMZ
496 Museum Criticum MCr
497 Museum Helveticum: revue suisse pour l'étude de l'Antiquité classique MH
498 Museum Patavinum: rivista semestrale della Facoltà di Lettere e Filosofia di Padova MusPat
499 Museum Philologum Londiniense MPhL
500 Museum Tusculanum MT
501 Nachrichten der Akademie der Wissenschaften in Göttingen, Philol.- Hist. Klasse NAWG
502 Neuphilologische Mitteilungen NphM
503 New England Classical Newsletter NECN
504 Newsletter of the Society for ancient medicine and pharmacy SAMPhN
505 New Testament Abstracts NTA
506 New Testament Studies: an international journal publ. quarterly under the auspices of Studiorum Novi Testamenti Societas NTS
507 Notizie degli scavi di antichità NSA
508 Nouvelle Revue Théologique NRTh
509 Novum Testamentum: an international quarterly for New Testament and related studies NT
510 Numismatica e antichità classiche: quaderni ticinesi NAC
511 Numismatic Chronicle NC
512 Numismatic Circular NCirc
513 Numismatic Literature NL
514 Numismatika i èpigraphika NE
515 Numismatisches Nachrichtenblatt: Organ des Verbandes der Dt. Münzvereine NNB
516 Numismatische Zeitschrift NZ
517 Nuova rivista storica NRS
518 Nuovi annali della Facoltà di Magistero dell'Università di Messina NAFM
519 Opuscula Atheniensia: acta Inst. Athen. Regni Sueciae OAth
520 Opuscula Romana: acta Inst. Rom. Regni Sueciae ORom
521 Oriens Antiquus: rivista del Centro per le Antichità e la Storia dell'Arte del vicino Oriente OA
522 Oriens Christianus: Hefte für die Kunde des christlichen Orients OC
523 Orientalia Christiana Periodica OCP
524 Orientalia Lovaniensia Periodica OLP
525 Orientalistische Literaturzeitung OLZ
526 Orpheus: rivista di umanità classica e cristiana Orpheus
527 Ostkirchliche Studien OS
528 Oudheidkundige Mededelingen uit het Rijksmuseum van Oudheiden te Leiden OMRL
529 Oxford Journal of Archaeology OJA
530 Oxford Studies in Ancient Philosophy OSAPh
531 Palestine Exploration Quarterly PalEQ
532 Pamâtniki kul'tury (Monuments of culture: new discoveries) PK
533 Papers of the British School at Rome PBSR
534 Past and Present: a journal of historical Studies P&P
535 Patma-banasirakan handes: revue historico-philologique PBH
536 Perspektiven der Philosophie: neues Jahrbuch PPH
537 Petronian Society Newsletter PSN
538 Pharmacy in history PhH
539 Philologia classica: recueil interuniversitaire périodique PhilClass
540 Philological Quarterly PhQ
541 Philologus: Zeitschrift für antike Literatur und ihre Rezeption Philologus
542 Philosophia naturalis PhN
543 Philosophical Review PhR
544 Philosophical Studies PhStud
545 Philosophischer Literaturanzeiger PhLA
546 Philosophische Rundschau: eine Zeitschrift für philosophische Kritik PhRdschau
547 Philosophisches Jahrbuch PhJ
548 Philosophy and Literature Ph&Lit
549 Philosophy and Phenomenological Research Ph&PhenR
550 Philosophy and Rhetoric Ph&Rh
551 Phoenix: journal of the Classical Association of Canada Phoenix
552 Pitannâ klasicnoï filologìï (Questions de philologie classique) PKFil
553 Praktika tes Akademias Athenon PAA
554 Praktika tes en Athenais Archaiologikes Etaireias PAAH
555 Proceedings of the American Catholic Philosophical Association PACPhA
556 Proceedings of the American Philosophical Society PAPHS
557 Proceedings of the Aristotelian Society PAS
558 Proceedings of the Aristotelian Society. Supplementary volume. PAS(suppl)
559 Proceedings of the British Academy PBA
560 Proceedings of the Cambridge Philological Society PCPhS
561 Proceedings of the Classical Association PCA
562 Proceedings of the Royal Irish Academy PRIA
563 Proceedings of the Virgil Society PVS
564 Przeglad Historyczny PHist
565 Quaderni catanesi di cultura classica e medievale QCCCM
566 Quaderni catanesi di studi classici e medievali QC
567 Quaderni dell'Ist. di Filosofia, Univ. degli Studi di Perugia, Fac. di Magistero QIFP
568 Quaderni dell'Istituto di Archeologia e Storia antica dell'Univ. G. d'Annunzio, Chieti QIASA
569 Quaderni dell'Istituto di Filologia Greca di Cagliari QIFG
570 Quaderni dell'Istituto di Lingua e Letteratura latina. Università di Roma, Fac. di Magistero QILL
571 Quaderni del Museo archeologico F. Ribezzo di Brindisi QMAB
572 Quaderni di archeologia della Libia QAL
573 Quaderni di Cultura e di Tradizione classica QCTC
574 Quaderni di filologia classica dell'Università di Trieste, Ist. di Filol. class. QFC
575 Quaderni di storia QS
576 Quaderni linguistici e filologici: ricerche svolte presso l'Univ. degli Studi di Macerata QLF
577 Quaderni urbinati di cultura classica QUCC
578 Quarterly Journal of Speech QJS
579 Rassegna storica salernitana RSS
580 Reallexikon für Antike und Christentum RLAC
581 Recherches augustiniennes (Supplément à REAug) RecAug
582 Recherches de science religieuse RecSR
583 Recherches de théologie ancienne et médiévale RecTh
584 Rechtshistoriches Journal RJ
585 Regulae Benedicti Studia: annuarium internationale RBS
586 Religious Studies RelStud
587 Renaissance Quarterly RenQ
588 Rendiconti dell'Accademia di Archeologia, Lettere e Belle Arti di Napoli RAAN
589 Rendiconti dell'Istituto Lombardo, Classe di Lettere, Scienze morali e storiche RIL
590 Rendiconti della Pontificia Accademia di Archeologia RPAA
591 Rendiconti dell’Accademia delle Scienze dell’Istituto di Bologna, Classe di Scienze Morali RAIB
592 Report of the Department of Antiquities, Cyprus RDAC
593 Report of the Keio Institute of Cultural and Linguistic Studies RKI
594 Res publica litterarum: studies in the classical tradition RPL
595 Review of Metaphysics RMeta
596 Revista de estudios clásicos REC
597 Revista de filosofía RF(Argentina)
598 Revista de letras RL
599 Revista española de linguística REspLing
600 Revista latinoamericana de filosofía RLAF
601 Revista venezolana de filosofía RVF
602 Revue archéologique RA
603 Revue archéologique de l'Est et du Centre-Est RAE
604 Revue archéologique de Narbonnaise RAN
605 Revue archéologique de Picardie RAPic
606 Revue archéologique du Centre [de la France] RACF
607 Revue belge d'archéologie et d'histoire de l'art RBA
608 Revue belge de numismatique et de sigillographie RBN
609 Revue belge de philologie et d'histoire RBPh
610 Revue bénédictine RBen
611 Revue biblique RBi
612 Revue d'égyptologie REgypt
613 Revue d'études ligures RELig
614 Revue d'histoire de la pharmacie RHPHARM
615 Revue d'histoire des sciences et de leurs applications RHS
616 Revue d'histoire des textes RHT
617 Revue d'histoire du droit (Tijdschrift voor Rechtsgeschiedenis) RHD
618 Revue d'histoire ecclésiastique RHE
619 Revue d'histoire et de philosophie religieuses RHPhR
620 Revue de l'enseignement philosophique REPh
621 Revue de l'histoire des religions RHR
622 Revue de l'Université de Bruxelles RUB
623 Revue de métaphysique et de morale RMM
624 Revue de philologie, de littérature et d'histoire anciennes RPh
625 Revue de philosophie ancienne RPhA
626 Revue des études anciennes REA
627 Revue des études arméniennes REArm
628 Revue des études augustiniennes REAug
629 Revue des études byzantines REByz
630 Revue des études grecques REG
631 Revue des études juives REJ
632 Revue des études latines REL
633 Revue des études sud-est européennes RESE
634 Revue des questions scientifiques RQS
635 Revue des sciences philosophiques et théologiques RSPh
636 Revue des sciences religieuses RSR
637 Revue de synthèse RS
638 Revue de théologie et de philosophie RThPh
639 Revue du Nord RdN
640 Revue historique RH
641 Revue historique de droit français et étranger RD
642 Revue historique vaudoise RHV
643 Revue informatique et statistique dans les sciences humaines RISSH
644 Revue internationale d'onomastique RIO
645 Revue internationale de philosophie RIPh
646 Revue internationale des droits de l'Antiquité RIDA
647 Revue numismatique RN
648 Revue philosophique de la France et de l'étranger RPhilos
649 Revue philosophique de Louvain RPhL
650 Revue suisse d'art et d'archéologie RSAA
651 Revue théologique de Louvain RThL
652 Rheinisches Museum für Philologie RhM
653 Ricerche teologiche RicTeol
654 Riggisberger Berichte RigBer
655 Rinascimento: rivista dell’Istituto Nazionale di Studi sul Rinascimento Rinascimento
656 Rivista archeologica dell'antica provincia e diocesi di Como RAComo
657 Rivista biblica RivBibl
658 Rivista critica di storia della filosofia RSF
659 Rivista degli studi orientali RSO
660 Rivista dell'Istituto Nazionale di Archeologia e Storia dell'Arte RIA
661 Rivista di archeologia RdA
662 Rivista di archeologia cristiana RAC
663 Rivista di cultura classica e medioevale RCCM
664 Rivista di filologia e di istruzione classica RFIC
665 Rivista di filosofia RF(Bologna)
666 Rivista di filosofia neoscolastica RFN
667 Rivista di storia della Chiesa in Italia RSCI
668 Rivista di storia e letteratura religiosa RSLR
669 Rivista di studi bizantini e neoellenici RSBN
670 Rivista di studi bizantini e slavi RSBS
671 Rivista di studi fenici, pubbl. dal Centro di studio per la civiltà fenicia e punica RStudFen
672 Rivista di studi pompeiani RSP
673 Rivista internazionale di filosofia del diritto RIFD
674 Rivista italiana di numismatica e scienze affini RIN
675 Rivista storica dell'Antichità RSA
676 Rivista storica italiana RSI
677 Roczniki humanistyczne RocsHum
678 Roczniki humanistyczne. 3, Filologia klasyczna RHum
679 Romanische Forschungen: Vierteljahresschrift für romanische Sprachen und Literaturen RomForsch
680 Romanobarbarica: contributi allo studio dei rapporti culturali tra mondo latino e mondo barbarico RomBarb
681 Römische Quartalschrift für christliche Altertumskunde und für Kirchengeschichte RQA
682 Römisches österreich: Jahresschrift der Österreichischen Gesellschaft für Archäologie
683 Rudiae: ricerche sul mondo classico Rudiae
684 Saalburg-Jahrbuch SJ
685 Sacris Erudiri: jaarboek voor Godsdienstwetenschappen SEJG
686 Sborník Prací Filosofické Fak. Brnenské Univ. Rada archeol. klas. SPFB
687 Sborník Prací Filosofické Fakulty Brnenské University SPFB(klas)
688 Scandinavian Journal of Theology STh
689 Schede medievali: rassegna a cura dell'officina di studi medievali SMed
690 Schriftenreihe für Geschichte der Naturwissenschaften, Technik und Medizin NTM
691 Schweizerische numismatische Rundschau SNR
692 Schweizerische Zeitschrift für Geschichte SZG
693 Scripta classica Israelica: yearbook of the Israel Soc. for the promotion of classical Studies SCI
694 Scriptorium: revue internationale des études relatives aux manuscrits Scriptorium
695 Scrittura e Civiltà S&C
696 Segno e testo S&T
697 Seminari romani di cultura greca SemRom
698 Siculorum Gymnasium: rassegna semestrale della Facoltà di Lettere e Filosofia dell'Università di Catania SicGymn
699 Sitzungsberichte der Akademie der Wissenschaften in Berlin, Gesellschaftswissenschaften (G) SAWDDR
700 Sitzungsberichte der Bayerischen Akademie der Wissenschaften, Philos.- Hist. Klasse SBAW
701 Sitzungsberichte der Heidelberger Akademie der Wissenschaften, Philos.- Hist. Klasse SHAW
702 Sitzungsberichte der Österreichischen Akademie der Wissenschaft in Wien, Philos.-Hist. Klasse SAWW
703 Soobseniâ Gosudarstvennogo Èrmitaza (Reports of the Hermitage Museum) SGE
704 Sources: travaux historiques STHist
705 Sovetskaja arheologia SA
706 Sprachkunst. Beiträge zur Literaturwissenschaft Sprachkunst
707 Storia della storiografia SStor
708 Studia et Documenta Historiae et Iuris SDHI
709 Studia historica historia antigua SHHA
710 Studia linguistica: revue de linguistique générale et comparée SL
711 Studia monastica StudMon
712 Studia Oliveriana SOliv
713 Studia Patavina: rivista di scienze religiose StudPat
714 Studia philologica Salmanticensia. Univ. de Salamanca, Acta Salm. Filos. y Letras SPhS
715 Studia philosophica: annuaire de la Société suisse de philosophie StudPhil
716 Studia Picena StudPic
717 Studia Zamorensia SZ
718 Studi classici e orientali SCO
719 Studi e materiali di storia delle religioni SMSR
720 Studien zum Buch- und Bibliothekswesen SBB
721 Studi e ricerche dell'Ist. di Civilità classica, cristiana, medievale SRIC
722 Studi e saggi linguistici SSL
723 Studies in history and philosophy of science SHPS
724 Studies in Language: international journal sponsored by the Foundations of Language StudLang
725 Studies in Philology SPh
726 Studies in religion (Sciences religieuses) SR
727 Studi etruschi. Roma, Giorgio Bretschneider SE
728 Studi genuensi SG
729 Studii Clasice StudClas
730 Studi italiani di filologia classica SIFC
731 Studi italiani di linguistica teorica e applicata SILTA
732 Studi magrebini StudMagr
733 Studi medievali StudMed
734 Studi micenei ed egeo-anatolici SMEA
735 Studi romagnoli StudRomagn
736 Studi romani: rivista bimestrale dell'Istituto di Studi Romani StudRom
737 Studi salentini StudSal
738 Studi sardi SS
739 Studi storici: rivista trimestrale dell'Ist. Gramsci StudStor
740 Studium Ovetense: revista del Centro sup. de EStudios eclesiásticos La Asunción StudOv
741 Studi urbinati di storia, filosofia e letteratura StudUrb(B)
742 Stylus: cuadernos de filología Stylus
743 Sudhoffs Archiv: Zeitschrift für Wissenschaftsgeschichte ZWG
744 Syllecta classica SyllClass
745 Symbolae Osloenses, auspiciis Societatis Graeco-Latine SO
746 Symbolae Philologorum Posnanensium SPhP
747 Technology and Culture T&C
748 The Ancient History Bulletin AHB
749 The Ancient World AncW
750 The Annual of the American Schools of Oriental Research AASO
751 The Antiquaries Journal: being the Journal of the Society of Antiquaries of London AntJ
752 The Archaeological Journal AJ
753 The Art Bulletin: a quarterly published by the College Art Association of America ABull
754 The Bodleian Library Record BLR
755 The Classical Bulletin CB
756 The Classical Journal CJ
757 The Classical Outlook: journal of the American Classical League CO
758 The Classical World CW
759 The Geographical Journal GJ
760 The J. Paul Getty Museum Journal GMusJ
761 The Journal of the British Archaeological Association JBAA
762 The Modern Schoolman: a quarterly Journal of Philosophy ModSch
763 Theological Studies ThS
764 Theologie und Philosophie Th&Ph
765 Theologische Literaturzeitung: Monatsschrift für das gesamte Gebiet der Theologie und Religionswissenschaft ThLZ
766 Theologische Quartalschrift ThQ
767 Theologische Revue ThRev
768 Theologische Rundschau ThRdschau
769 Theologische Zeitschrift ThZ
770 Theoria: a Swedish journal of philosophy and psychology Theoria
771 The Philosophical Forum: a philosophical quarterly publ. with the cooper. of the Dept. of Philosophy of Boston Univ. PF
772 The Philosophical Quarterly PhilosQ
773 The second century: a journal of early Christian studies SCent
774 The Studia Philonica Annual: studies in Hellenistic Judaism StudPhilon
775 The Times Literary Supplement TLS
776 The Yale Journal of Criticism YJC
777 Tijdschrift voor filosofie TF
778 Tijdschrift voor geschiedenis TG
779 Topoi: an international review of philosophy Topoi(Dordrecht)
780 Topoi: Orient-Occident Topoi(Lyon)
781 Traditio: studies in ancient and medieval history, thought, and religion Traditio
782 Transactions and Proceedings of the American Philological Association TAPhA
783 Transactions of the American Philosophical Society TAPhS
784 Transactions of the Philological Society TPhS
785 Travaux du Cercle linguistique d'Aix-en-Provence TCLA
786 Travaux et mémoires du Centre de recherches d'hist. et civil. byzantines T&MBYZ
787 Travaux neuchâtelois de linguistique TraNeL
788 Trends in Classics TC
789 Trésors monétaires TMon
790 Trierer Zeitschrift, für Geschichte und Kunst des Trierer Landes und seiner Nachbargebiete TZ
791 Trinity Journal, publ. by Trinity Evangelical Divinity School TJ
792 Trudy gosudarstbennogo Èrmitaza (travaux du Musée d'État de l'Ermitage)
793 Ugarit-Forschungen UF
794 Veleia: revista de prehistoria, historia antigua, arqueologá y filología clásicas Veleia
795 Verbum: revue de linguistique publ. par l'Univ. de Nancy II Verbum
796 Verkundigung und Forschung: Wissenschaft vom Neuen Testament. Beitr. zu Evangelische Theologie V&F
797 Vestnik Drevnej Istorii (Revue d'Histoire ancienne) VDI
798 Vestnik Leningradskogo Universiteta, Ser. 2, Istor. VLUIST
799 Vestnik Leningradskogo Universiteta, Ser. 6, Filos. VLUFILOS
800 Vestnik Moskovskogo Universiteta (filol. sekcija) VMUFILOL
801 Vestnik Moskovskogo Universiteta (filos. sekcija) VMUFILOS
802 Vestnik Moskovskogo Universiteta (ist. sekcija) VMUIST
803 Vetera Christianorum VetChr
804 Vetus Testamentum: quarterly publ. by the International Organization of Old Testament Scholars VT
805 Vichiana: rassegna di studi filologici e storici Vichiana
806 Vigiliae Christianae: a review of early Christian life and language VChr
807 Visible Religion: annual for religious iconography VRel
808 Vita Latina VL
809 Vivarium: a journal for mediaeval philosophy and the intellectual life of the Middle Ages Vivarium
810 Voprosy âzykoznaniâ (Problèmes de linguistique) Vopåz
811 Voprosy filosofii (Problèmes de philosophie) VopFilos
812 Voprosy istorii (Problèmes d'histoire) VopIst
813 Voprosy klassiceskoj Filologii VKF
814 Vox Latina: commentarii periodici VoxLat
815 Vox Patrum VoxP
816 Vox Romanica: annales Helvetici explorandis Linguis Romanicis destinati VR
817 Wiener humanistische Blätter WHB
818 Wiener Studien: Zeitschrift für klassische Philologie und Patristik WS
819 Wissenschaftliche Zeitschrift der Ernst-Moritz-Arndt-Univ., Greifswald, Gesellsch.- & sprachwiss. Reihe. WZGREIFS
820 Wissenschaftliche Zeitschrift der Friedrich-Schiller-Univ. Jena, Gesellsch.- & sprachwiss. Reihe. WZJENA
821 Wissenschaftliche Zeitschrift der Humboldt-Univ. Berlin, Gesellsch.- & sprachwiss. Reihe WZBERLIN
822 Wissenschaftliche Zeitschrift der Karl-Marx-Univ. Leipzig, Gesellsch.- & sprachwlss. Reihe. WZLEIPZIG
823 Wissenschaftliche Zeitschrift der Martin-Luther-Univ. Halle-Wittenberg WZHALLE
824 Wissenschaftliche Zeitschrift der Wilhelm-Pieck-Univ. Rostock Gesellsch.- & sprachwiss. Reihe. WZROSTOCK
825 Wort und Dienst: Jahrbuch der kirchlichen Hochschule Bethel (bei Bielefeld) W&D
826 Würzburger Jahrbücher für die Altertumswissenschaft WJA
827 Yale Classical Studies YCIS
828 Yale University Library Gazette YLG
829 Zeitschrift der Deutschen Morgenländischen Gesellschaft ZDMG
830 Zeitschrift der Savigny-Stiftung für Rechtsgeschichte (Romanistische Abteilung) ZRG
831 Zeitschrift des Deutschen Palästina-Vereins ZPalV
832 Zeitschrift für ägyptische Sprache und Altertumskunde ZAS
833 Zeitschrift für antikes Christentum ZAC
834 Zeitschrift für Archäologie ZfA
835 Zeitschrift für die Alttestamentliche Wissenschaft ZATW
836 Zeitschrift für die Neutestamentliche Wissenschaft und die Kunde der älteren Kirche ZNTW
837 Zeitschrift für Katholische Theologie ZKTh
838 Zeitschrift für Kirchengeschichte ZKG
839 Zeitschrift für Papyrologie und Epigraphik ZPE
840 Zeitschrift für Philosophische Forschung ZPhF
841 Zeitschrift für Religions- und Geistesgeschichte ZRGG
842 Zeitschrift für Romanische Philologie ZRPh
843 Zeitschrift für Semiotik ZS
844 Zeitschrift für Vergleichende Sprachforschung ZVS
845 Zentralblatt für Bibliothekswesen ZBB
846 Ziva Antika (Antiquité vivante) ZAnt
847 Zprávy Jednoty Klasickaych Filologu ZJKF
848 Νέα Ῥώμη. Rivista di ricerche bizantinistiche Nea Rhome

View File

@ -0,0 +1,17 @@
"Acta Astronomica","Acta Astron."
"Annual Review of Astronomy and Astrophysics","ARA&A"
"Astronomische Nachrichten","Astron. Nachrichten"
"Astronomy and Astrophysics","A&A"
"Astrophysics and Space Science","Ap&SS"
"GRB Coordinates Network","NASA-GCN"
"Journal of Cosmology and Astro-Particle Physics","J. Cosmology & Astro-Part. Phys."
"Monthly Notices of the Royal Astronomical Society","MNRAS"
"Nature","Nat"
"New Astronomy Review","New Astron. Rev."
"Physics Reports","Phys. Rep."
"Publications of the Astronomical Society of the Pacific","PASP"
"Science","Sci"
"Space Science Reviews","Space Sci. Rev."
"The Astronomical Journal","AJ"
"The Astrophysical Journal","ApJ"
"The Astrophysical Journal Letters","ApJ"
1 Acta Astronomica Acta Astron.
2 Annual Review of Astronomy and Astrophysics ARA&A
3 Astronomische Nachrichten Astron. Nachrichten
4 Astronomy and Astrophysics A&A
5 Astrophysics and Space Science Ap&SS
6 GRB Coordinates Network NASA-GCN
7 Journal of Cosmology and Astro-Particle Physics J. Cosmology & Astro-Part. Phys.
8 Monthly Notices of the Royal Astronomical Society MNRAS
9 Nature Nat
10 New Astronomy Review New Astron. Rev.
11 Physics Reports Phys. Rep.
12 Publications of the Astronomical Society of the Pacific PASP
13 Science Sci
14 Space Science Reviews Space Sci. Rev.
15 The Astronomical Journal AJ
16 The Astrophysical Journal ApJ
17 The Astrophysical Journal Letters ApJ

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,145 @@
"Acta Physica Polonica-Series A General Physics","Acta Phys. Pol.-Ser. Gen. Phys."
"Annals of Physics (Amsterdam, Netherlands)","Ann. Phys. (Amsterdam, Neth.)"
"Annalen der Physik","Ann. Phys. (Berl.)"
"Astronomical Journal","Astron. J."
"Astronomy Journal","Astron. J."
"Astrophysics Journal","Astrophys. J."
"Astrophysics Journal Supplement Series","Astrophys. J. Suppl. Ser."
"Astrophysical Journal, Letters to the Editor","Astrophys. J. Lett."
"Astrophysical Journal, Supplement Series","Astrophys. J. Suppl. Ser."
"Astrophysical Journal","Astrophys. J."
"Astrophysics and Space Science","Astrophy. Space Sci."
"Beiträge Zur Physik der Atmosphäre","Beitr. Zur Phys. Atmosphäre"
"Chinese Journal of Physics [translation of Wuli Xuebao (Acta Physica Sinica)]","Chin. J. Phys."
"Comptes Rendus Hebdomadaires des Séances de l'Académie des Sciences, Serie B: Sciences Physiques","C. R. Acad. Sci. Ser. B"
"Comptes Rendus Hebdomadaires des Séances de lAcadémie des Sciences, Serie A: Sciences Mathématiques","C. R. Acad. Sci. Ser. A"
"Comptes Rendus Hebdomadaires des Séances de lAcadémie des Sciences","C. R. Acad. Sci."
"Comptes Rendus de l'Académie des Sciences - Series I - Mathematics","C. R. Acad. Sci. Paris, Ser. I"
"Comptes Rendus de l'Académie des Sciences - Series I - Mathematics","Comptes Rendus Académie Sci. - Ser. - Math."
"Comptes Rendus Physique","C. R. Physique"
"Comptes Rendus Physique","Comptes Rendus Phys."
"Czechoslovak Journal of Physics","Czechoslov. J. Phys."
"European Physical Journal A: Hadrons and Nuclei","Eur. Phys. J. A"
"European Physical Journal AM: Applied Metamaterials","Eur. Phys. J. AM"
"European Physical Journal AP: Applied Physics","Eur. Phys. J. AP"
"European Physical Journal B: Condensed Matter and Complex Systems","Eur. Phys. J. B"
"European Physical Journal C: Particles and Fields","Eur. Phys. J. C"
"European Physical Journal D: Atomic, Molecular, Optical and Plasma Physics","Eur. Phys. J. D"
"European Physical Journal DS: Data Science","Eur. Phys. J. DS"
"European Physical Journal E: Soft Matter and Biological Physics","Eur. Phys. J. E"
"European Physical Journal H: Historical Perspectives on Contemporary Physics","Eur. Phys. J. H"
"European Physical Journal N: Nuclear Sciences and Technologies","Eur. Phys. J. N"
"European Physical Journal NBP: Nonlinear Biomedical Physics","Eur. Phys. J. NBP"
"European Physical Journal Plus","Eur. Phys. J. Plus"
"European Physical Journal PV: Photovoltaics","Eur. Phys. J. PV"
"European Physical Journal QT: Quantum Technology","Eur. Phys. J. QT"
"European Physical Journal ST: Special Topics","Eur. Phys. J. ST"
"European Physical Journal TI: Techniques and Instrumentation","Eur. Phys. J. TI"
"European Physical Journal WOC: Web of Conferences","Eur. Phys. J. WOC"
"European Physics Journal B: Condensed Matter","Eur. Phys. J. B"
"European Physics Journal C: Particles and Fields","Eur. Phys. J. C"
"European Physics Journal D: Atomic, Molecular, and Optical Physics","Eur. Phys. J. D"
"European Physics Journal E: Soft Matter","Eur. Phys. J. E"
"European Physical Journal Applied Physics","Eur. Phys. J. Appl. Phys."
"European Physical Journal B: Condensed Matter and Complex Systems","Eur. Phys. J. B-Condens. Matter Complex Syst."
"General Relativity and Gravitation","Gen. Relativ. Gravitation"
"Helvetica Physica Acta","Helvetica Phys. Acta"
"IEEE Journal of Selected Topics in Quantum Electronics","IEEE J. of Sel. Top. Quantum Electron."
"IEEE Transactions on Microwave Theory and Techniques","IEEE Trans. Microwave Theory Tech."
"Japanese Journal of Applied Physics Part 1","Jpn. J. Appl. Phys., Part 1"
"Japanese Journal of Applied Physics Part 2","Jpn. J. Appl. Phys., Part 2"
"JETP Letters [translation of Pisma v Zhurnal Eksperimentalnoi i Teoreticheskoi Fiziki]","JETP Lett."
"Journal de Physique IV","J. Phys. IV Fr."
"Journal of Chemical Physics","J. Chem. Phys."
"Journal of Electronic Materials","J. Electronic Mater."
"Journal of Physics A: Mathematical and General","J. Phys. A"
"Journal of Physics A: Mathematical and Theoretical","J. Phys. Math. Theor."
"Journal of Physics B: Atomic, Molecular and Optical","J. Phys. B"
"Journal of Physics C: Solid State Physics","J. Phys. C"
"Journal of Physics C: Solid State Physics","J. Phys. C Solid State Phys."
"Journal of Physics D: Applied Physics","J. Phys. Appl. Phys."
"Journal of Physics G: Nuclear and Particle Physics","J. Phys. G"
"Journal of Physics: Condensed Matter","J. Phys. Condens. Matter"
"Journal of Physics: Conference series","J. Phys. Conf. Series"
"Journal of Quantitative Spectroscopy & Radiative Transfer","J. Quant. Spectrosc. Radiat. Transfer"
"Journal of Statistical Mechanics: Theory and Experiment","J. Stat. Mech."
"Journal of Statistical Mechanics: Theory and Experiment","J. Stat. Mech: Theory Exp."
"Physica A: Statistical Mechanics and its Applications","Physica A"
"Journal of Vacuum Science and Technology B: Microelectronics and Nanometer Structures","J. Vac. Sci. Technol., B"
"Kongelige Danske Videnskabernes Selskab, Matematisk-Fysiske Meddelelser","K. Dan. Vidensk. Selsk. Mat. Fys. Medd."
"Materials Research Society Symposium Proceedings","Mat. Res. Soc. Symp. Proc."
"Nano Futures","Nano Futures"
"Phase Transitions","Phase Transitions"
"Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences","Philos. Trans. R. Soc. Math. Phys. Eng. Sci."
"Philosophical Transactions of the Royal Society of London. Series A. Mathematical, Physical and Engineering Sciences","Philos. Trans. R. Soc. Lond. Ser. A Math. Phys. Eng. Sci."
"Philosophical Transactions of the Royal Society of London, Series A: Mathematical and Physical Sciences","Philos. Trans. R. Soc. London, Ser. A"
"Philosophical Transactions of the Royal Society of London, Series A","Philos. Trans. R. Soc. London, Ser. A"
"Philosophical Transactions of the Royal Society of London, Series B","Philos. Trans. R. Soc. London, Ser. B"
"Philosophical Transactions of the Royal Society of London. Series A. Mathematical, Physical and Engineering Sciences","Philos. Trans. R. Soc. Lond. Ser. A Math. Phys. Eng. Sci."
"Philosophical Transactions of the Royal Society of London","Philos. Trans. R. Soc. London"
"Physica A: Statistical Mechanics and its Applications","Physica A"
"Physica B","Physica B"
"Physica B: Condensed Matter","Phys. B Condens. Matter"
"Physica C: Superconductivity and its Applications","Phys. C Supercond. Its Appl."
"Physica D: Nonlinear Phenomena","Phys. D Nonlinear Phenom."
"Physica E: Low-dimensional Systems and Nanostructures","Phys. E: Low-Dimens. Syst. Nanostructures"
"Physica D: Nonlinear Phenomena","Phys. Nonlinear Phenom."
"Physica D: Nonlinear Phenomena","Physica D"
"Physica E-low-dimensional Systems & Nanostructures","Physica E"
"Physica Scripta, T.","Phys. Scr. T."
"Physica Status Solidi (RRL) Rapid Research Letters","Phys. Status Solidi RRL"
"Physica Status Solidi A: Applications and Materials Science","Phys. Status Solidi Appl. Mater. Sci."
"Physica Status Solidi A","Phys. Status Solidi A"
"Physica Status Solidi B","Phys. Status Solidi B"
"Physica Status Solidi C","Phys. Status Solidi C"
"Physica Status Solidi RRL: Rapid Research Letters","Phys. Status Solidi RRL"
"Physical Chemistry Chemical Physics","Phys. Chem. Chem. Phys. PCCP"
"Physical Review Applied","Phys. Rev. Applied"
"Physical Review A: Atomic, Molecular, and Optical Physics","Phys. Rev. A"
"Physical Review B: Condensed Matter","Phys. Rev. B Condens. Matter"
"Physical Review C: Nuclear Physics","Phys. Rev. C"
"Physical Review D: Particles and Fields","Phys. Rev. D"
"Physical Review E: Statistical Physics, Plasmas, Fluids, and Related Interdisciplinary Topics","Phys. Rev. E"
"Physical Review Materials","Phys. Rev. Materials"
"Proceedings of SPIE","SPIE Proc."
"Proceedings of the National Academy of Sciences of the United States of America","PNAS"
"Proceedings of the National academy of Sciences of the United States of America","Proc. Nat. Acad. Sci. U.S.A."
"Proceedings of the National Academy of Sciences","Proc. Natl. Acad. Sci."
"Proceedings of the Physical Society, London, Section A","Proc. Phys. Soc. London, Sec. A"
"Proceedings of the Physical Society, London, Section B","Proc. Phys. Soc. London, Sec. B"
"Proceedings of the Physical Society, London","Proc. Phys. Soc. London"
"Proceedings of the Physical Society B","Proc. Phys. Soc. B"
"Proceedings of the Physical Society. Section A","Proc. Phys. Soc. London, Sect. A"
"Proceedings of the Physical Society. Section B","Proc. Phys. Soc. London, Sect. B"
"Proceedings of the Physical Society","Proc. Phys. Soc."
"Proceedings of the Royal Society of London, Series A: Mathematical and Physical Sciences","Proc. R. Soc. London, Ser. A"
"Proceedings of the Royal Society of London A","Proc. R. Soc. Lond. Ser. Math. Phys. Sci."
"Proceedings of the Royal Society of London A","Proc. R. Soc. Math. Phys. Eng. Sci."
"Proceedings of the Royal Society of London Series A","Proc. R. Soc. London, Ser. A"
"Proceedings of the Royal Society of London Series B","Proc. R. Soc. London, Ser. B"
"Science in China, Series A: Mathematics","Sci. China, Ser. A: Math."
"Science in China, Series C: Life Sciences","Sci. China, Ser. C: Life Sci."
"Science in China, Series D: Earth Sciences","Sci. China, Ser. D: Earth Sci."
"Science in China, Series G: Physics Mechanics and Astronomy","Sci. China, Ser. G"
"Science in China, Series A: Mathematics","Sci. China, Ser. A Math."
"Science in China, Series C: Life Sciences","Sci. China, Ser. C Life Sci."
"Science in China, Series D: Earth Sciences","Sci. China, Ser. D Earth Sci."
"Quantum Electronics","Quantum Electron. (UK) or Quantum Electron. (USA)"
"The European Physical Journal A: Hadrons and Nuclei","Eur. Phys. J. A"
"The European Physical Journal AP: Applied Physics","Eur. Phys. J. AP"
"The European Physical Journal B: Condensed Matter and Complex Systems","Eur. Phys. J. B"
"The European Physical Journal C: Particles and Fields","Eur. Phys. J. C"
"The European Physical Journal D: Atomic, Molecular, Optical and Plasma Physics","Eur. Phys. J. D"
"The European Physical Journal E: Soft Matter and Biological Physics","Eur. Phys. J. E"
"The European Physical Journal Plus","Eur. Phys. J. Plus"
"The European Physical Journal Special Topics","Eur. Phys. J. Special Topics"
"Transactions of the American Geophysical Union","Trans.-Am. Geophys. Union"
"Zeitschrift für Kristallographie","Z. Für Krist."
"Zeitschrift für Kristallographie","Z. für Krist."
"Zeitschrift für Physik A: Atoms and Nuclei","Z. Phys. A: Hadrons Nucl."
"Zeitschrift für Physik A Hadrons and Nuclei","Z. Phys. A Hadrons Nucl."
"Zeitschrift für Physik B Condensed Matter and Quanta","Z. Phys. B Condens. Matter Quanta"
"Zeitschrift für Physik B Condensed Matter","Z. Phys. B Condens. Matter"
"Zeitschrift für Physik","Z. Für Phys."
"Zeitschrift für Physik","Z. für Phys."
"Solar Energy Materials and Solar Cells","Sol. Energ. Mat. Sol."
1 Acta Physica Polonica-Series A General Physics Acta Phys. Pol.-Ser. Gen. Phys.
2 Annals of Physics (Amsterdam, Netherlands) Ann. Phys. (Amsterdam, Neth.)
3 Annalen der Physik Ann. Phys. (Berl.)
4 Astronomical Journal Astron. J.
5 Astronomy Journal Astron. J.
6 Astrophysics Journal Astrophys. J.
7 Astrophysics Journal Supplement Series Astrophys. J. Suppl. Ser.
8 Astrophysical Journal, Letters to the Editor Astrophys. J. Lett.
9 Astrophysical Journal, Supplement Series Astrophys. J. Suppl. Ser.
10 Astrophysical Journal Astrophys. J.
11 Astrophysics and Space Science Astrophy. Space Sci.
12 Beiträge Zur Physik der Atmosphäre Beitr. Zur Phys. Atmosphäre
13 Chinese Journal of Physics [translation of Wuli Xuebao (Acta Physica Sinica)] Chin. J. Phys.
14 Comptes Rendus Hebdomadaires des Séances de l'Académie des Sciences, Serie B: Sciences Physiques C. R. Acad. Sci. Ser. B
15 Comptes Rendus Hebdomadaires des Séances de l’Académie des Sciences, Serie A: Sciences Mathématiques C. R. Acad. Sci. Ser. A
16 Comptes Rendus Hebdomadaires des Séances de l’Académie des Sciences C. R. Acad. Sci.
17 Comptes Rendus de l'Académie des Sciences - Series I - Mathematics C. R. Acad. Sci. Paris, Ser. I
18 Comptes Rendus de l'Académie des Sciences - Series I - Mathematics Comptes Rendus Académie Sci. - Ser. - Math.
19 Comptes Rendus Physique C. R. Physique
20 Comptes Rendus Physique Comptes Rendus Phys.
21 Czechoslovak Journal of Physics Czechoslov. J. Phys.
22 European Physical Journal A: Hadrons and Nuclei Eur. Phys. J. A
23 European Physical Journal AM: Applied Metamaterials Eur. Phys. J. AM
24 European Physical Journal AP: Applied Physics Eur. Phys. J. AP
25 European Physical Journal B: Condensed Matter and Complex Systems Eur. Phys. J. B
26 European Physical Journal C: Particles and Fields Eur. Phys. J. C
27 European Physical Journal D: Atomic, Molecular, Optical and Plasma Physics Eur. Phys. J. D
28 European Physical Journal DS: Data Science Eur. Phys. J. DS
29 European Physical Journal E: Soft Matter and Biological Physics Eur. Phys. J. E
30 European Physical Journal H: Historical Perspectives on Contemporary Physics Eur. Phys. J. H
31 European Physical Journal N: Nuclear Sciences and Technologies Eur. Phys. J. N
32 European Physical Journal NBP: Nonlinear Biomedical Physics Eur. Phys. J. NBP
33 European Physical Journal Plus Eur. Phys. J. Plus
34 European Physical Journal PV: Photovoltaics Eur. Phys. J. PV
35 European Physical Journal QT: Quantum Technology Eur. Phys. J. QT
36 European Physical Journal ST: Special Topics Eur. Phys. J. ST
37 European Physical Journal TI: Techniques and Instrumentation Eur. Phys. J. TI
38 European Physical Journal WOC: Web of Conferences Eur. Phys. J. WOC
39 European Physics Journal B: Condensed Matter Eur. Phys. J. B
40 European Physics Journal C: Particles and Fields Eur. Phys. J. C
41 European Physics Journal D: Atomic, Molecular, and Optical Physics Eur. Phys. J. D
42 European Physics Journal E: Soft Matter Eur. Phys. J. E
43 European Physical Journal Applied Physics Eur. Phys. J. Appl. Phys.
44 European Physical Journal B: Condensed Matter and Complex Systems Eur. Phys. J. B-Condens. Matter Complex Syst.
45 General Relativity and Gravitation Gen. Relativ. Gravitation
46 Helvetica Physica Acta Helvetica Phys. Acta
47 IEEE Journal of Selected Topics in Quantum Electronics IEEE J. of Sel. Top. Quantum Electron.
48 IEEE Transactions on Microwave Theory and Techniques IEEE Trans. Microwave Theory Tech.
49 Japanese Journal of Applied Physics Part 1 Jpn. J. Appl. Phys., Part 1
50 Japanese Journal of Applied Physics Part 2 Jpn. J. Appl. Phys., Part 2
51 JETP Letters [translation of Pisma v Zhurnal Eksperimentalnoi i Teoreticheskoi Fiziki] JETP Lett.
52 Journal de Physique IV J. Phys. IV Fr.
53 Journal of Chemical Physics J. Chem. Phys.
54 Journal of Electronic Materials J. Electronic Mater.
55 Journal of Physics A: Mathematical and General J. Phys. A
56 Journal of Physics A: Mathematical and Theoretical J. Phys. Math. Theor.
57 Journal of Physics B: Atomic, Molecular and Optical J. Phys. B
58 Journal of Physics C: Solid State Physics J. Phys. C
59 Journal of Physics C: Solid State Physics J. Phys. C Solid State Phys.
60 Journal of Physics D: Applied Physics J. Phys. Appl. Phys.
61 Journal of Physics G: Nuclear and Particle Physics J. Phys. G
62 Journal of Physics: Condensed Matter J. Phys. Condens. Matter
63 Journal of Physics: Conference series J. Phys. Conf. Series
64 Journal of Quantitative Spectroscopy & Radiative Transfer J. Quant. Spectrosc. Radiat. Transfer
65 Journal of Statistical Mechanics: Theory and Experiment J. Stat. Mech.
66 Journal of Statistical Mechanics: Theory and Experiment J. Stat. Mech: Theory Exp.
67 Physica A: Statistical Mechanics and its Applications Physica A
68 Journal of Vacuum Science and Technology B: Microelectronics and Nanometer Structures J. Vac. Sci. Technol., B
69 Kongelige Danske Videnskabernes Selskab, Matematisk-Fysiske Meddelelser K. Dan. Vidensk. Selsk. Mat. Fys. Medd.
70 Materials Research Society Symposium Proceedings Mat. Res. Soc. Symp. Proc.
71 Nano Futures Nano Futures
72 Phase Transitions Phase Transitions
73 Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences Philos. Trans. R. Soc. Math. Phys. Eng. Sci.
74 Philosophical Transactions of the Royal Society of London. Series A. Mathematical, Physical and Engineering Sciences Philos. Trans. R. Soc. Lond. Ser. A Math. Phys. Eng. Sci.
75 Philosophical Transactions of the Royal Society of London, Series A: Mathematical and Physical Sciences Philos. Trans. R. Soc. London, Ser. A
76 Philosophical Transactions of the Royal Society of London, Series A Philos. Trans. R. Soc. London, Ser. A
77 Philosophical Transactions of the Royal Society of London, Series B Philos. Trans. R. Soc. London, Ser. B
78 Philosophical Transactions of the Royal Society of London. Series A. Mathematical, Physical and Engineering Sciences Philos. Trans. R. Soc. Lond. Ser. A Math. Phys. Eng. Sci.
79 Philosophical Transactions of the Royal Society of London Philos. Trans. R. Soc. London
80 Physica A: Statistical Mechanics and its Applications Physica A
81 Physica B Physica B
82 Physica B: Condensed Matter Phys. B Condens. Matter
83 Physica C: Superconductivity and its Applications Phys. C Supercond. Its Appl.
84 Physica D: Nonlinear Phenomena Phys. D Nonlinear Phenom.
85 Physica E: Low-dimensional Systems and Nanostructures Phys. E: Low-Dimens. Syst. Nanostructures
86 Physica D: Nonlinear Phenomena Phys. Nonlinear Phenom.
87 Physica D: Nonlinear Phenomena Physica D
88 Physica E-low-dimensional Systems & Nanostructures Physica E
89 Physica Scripta, T. Phys. Scr. T.
90 Physica Status Solidi (RRL) – Rapid Research Letters Phys. Status Solidi RRL
91 Physica Status Solidi A: Applications and Materials Science Phys. Status Solidi Appl. Mater. Sci.
92 Physica Status Solidi A Phys. Status Solidi A
93 Physica Status Solidi B Phys. Status Solidi B
94 Physica Status Solidi C Phys. Status Solidi C
95 Physica Status Solidi RRL: Rapid Research Letters Phys. Status Solidi RRL
96 Physical Chemistry Chemical Physics Phys. Chem. Chem. Phys. PCCP
97 Physical Review Applied Phys. Rev. Applied
98 Physical Review A: Atomic, Molecular, and Optical Physics Phys. Rev. A
99 Physical Review B: Condensed Matter Phys. Rev. B Condens. Matter
100 Physical Review C: Nuclear Physics Phys. Rev. C
101 Physical Review D: Particles and Fields Phys. Rev. D
102 Physical Review E: Statistical Physics, Plasmas, Fluids, and Related Interdisciplinary Topics Phys. Rev. E
103 Physical Review Materials Phys. Rev. Materials
104 Proceedings of SPIE SPIE Proc.
105 Proceedings of the National Academy of Sciences of the United States of America PNAS
106 Proceedings of the National academy of Sciences of the United States of America Proc. Nat. Acad. Sci. U.S.A.
107 Proceedings of the National Academy of Sciences Proc. Natl. Acad. Sci.
108 Proceedings of the Physical Society, London, Section A Proc. Phys. Soc. London, Sec. A
109 Proceedings of the Physical Society, London, Section B Proc. Phys. Soc. London, Sec. B
110 Proceedings of the Physical Society, London Proc. Phys. Soc. London
111 Proceedings of the Physical Society B Proc. Phys. Soc. B
112 Proceedings of the Physical Society. Section A Proc. Phys. Soc. London, Sect. A
113 Proceedings of the Physical Society. Section B Proc. Phys. Soc. London, Sect. B
114 Proceedings of the Physical Society Proc. Phys. Soc.
115 Proceedings of the Royal Society of London, Series A: Mathematical and Physical Sciences Proc. R. Soc. London, Ser. A
116 Proceedings of the Royal Society of London A Proc. R. Soc. Lond. Ser. Math. Phys. Sci.
117 Proceedings of the Royal Society of London A Proc. R. Soc. Math. Phys. Eng. Sci.
118 Proceedings of the Royal Society of London Series A Proc. R. Soc. London, Ser. A
119 Proceedings of the Royal Society of London Series B Proc. R. Soc. London, Ser. B
120 Science in China, Series A: Mathematics Sci. China, Ser. A: Math.
121 Science in China, Series C: Life Sciences Sci. China, Ser. C: Life Sci.
122 Science in China, Series D: Earth Sciences Sci. China, Ser. D: Earth Sci.
123 Science in China, Series G: Physics Mechanics and Astronomy Sci. China, Ser. G
124 Science in China, Series A: Mathematics Sci. China, Ser. A Math.
125 Science in China, Series C: Life Sciences Sci. China, Ser. C Life Sci.
126 Science in China, Series D: Earth Sciences Sci. China, Ser. D Earth Sci.
127 Quantum Electronics Quantum Electron. (UK) or Quantum Electron. (USA)
128 The European Physical Journal A: Hadrons and Nuclei Eur. Phys. J. A
129 The European Physical Journal AP: Applied Physics Eur. Phys. J. AP
130 The European Physical Journal B: Condensed Matter and Complex Systems Eur. Phys. J. B
131 The European Physical Journal C: Particles and Fields Eur. Phys. J. C
132 The European Physical Journal D: Atomic, Molecular, Optical and Plasma Physics Eur. Phys. J. D
133 The European Physical Journal E: Soft Matter and Biological Physics Eur. Phys. J. E
134 The European Physical Journal Plus Eur. Phys. J. Plus
135 The European Physical Journal Special Topics Eur. Phys. J. Special Topics
136 Transactions of the American Geophysical Union Trans.-Am. Geophys. Union
137 Zeitschrift für Kristallographie Z. Für Krist.
138 Zeitschrift für Kristallographie Z. für Krist.
139 Zeitschrift für Physik A: Atoms and Nuclei Z. Phys. A: Hadrons Nucl.
140 Zeitschrift für Physik A Hadrons and Nuclei Z. Phys. A Hadrons Nucl.
141 Zeitschrift für Physik B Condensed Matter and Quanta Z. Phys. B Condens. Matter Quanta
142 Zeitschrift für Physik B Condensed Matter Z. Phys. B Condens. Matter
143 Zeitschrift für Physik Z. Für Phys.
144 Zeitschrift für Physik Z. für Phys.
145 Solar Energy Materials and Solar Cells Sol. Energ. Mat. Sol.

Some files were not shown because too many files have changed in this diff Show More