Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
47a4af1cc0 | |||
61b60cfbaf | |||
![]() |
a2a1ede6b7 | ||
b157c2c194 | |||
b094db4615 | |||
![]() |
a81d9ed65e | ||
cfecc02cad | |||
c41072785c | |||
64c1d0e743 | |||
73a279f24a | |||
944138280d | |||
1c34fe3715 | |||
154e774296 | |||
c5d4d2d059 | |||
a150ed4958 |
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@ -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>
|
BIN
Exercise 04.pdf
BIN
Exercise 04.pdf
Binary file not shown.
1
boulder-dash/.gitignore
vendored
1
boulder-dash/.gitignore
vendored
@ -1,3 +1,2 @@
|
||||
/bin/
|
||||
/out/
|
||||
/classes/
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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.*;
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
47
boulder-dash/src/fr/enssat/BoulderDash/models/DirtModel.java
Normal file
47
boulder-dash/src/fr/enssat/BoulderDash/models/DirtModel.java
Normal 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);
|
||||
}
|
||||
}
|
@ -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) {}
|
||||
}
|
47
boulder-dash/src/fr/enssat/BoulderDash/models/DoorModel.java
Normal file
47
boulder-dash/src/fr/enssat/BoulderDash/models/DoorModel.java
Normal 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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
@ -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
|
@ -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);
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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) {}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
4
dicegame/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
.gradle/
|
||||
.idea/
|
||||
src/build/
|
||||
target/
|
4
dicegame/META-INF/MANIFEST.MF
Normal file
4
dicegame/META-INF/MANIFEST.MF
Normal file
@ -0,0 +1,4 @@
|
||||
Manifest-Version: 1.0
|
||||
Class-Path: .
|
||||
Main-Class: WuerfelspielGUI
|
||||
|
5
dicegame/src/dicegame/logic/DiceInteraction.java
Normal file
5
dicegame/src/dicegame/logic/DiceInteraction.java
Normal file
@ -0,0 +1,5 @@
|
||||
package dicegame.logic;
|
||||
|
||||
public interface DiceInteraction {
|
||||
public int changeDiceState(int diceIndex) throws SelectionException;
|
||||
}
|
276
dicegame/src/dicegame/logic/Logic.java
Normal file
276
dicegame/src/dicegame/logic/Logic.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
7
dicegame/src/dicegame/logic/SelectionException.java
Normal file
7
dicegame/src/dicegame/logic/SelectionException.java
Normal file
@ -0,0 +1,7 @@
|
||||
package dicegame.logic;
|
||||
|
||||
public class SelectionException extends Exception {
|
||||
SelectionException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
608
dicegame/src/dicegame/view/GUI.java
Normal file
608
dicegame/src/dicegame/view/GUI.java
Normal 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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
12
jabref/.github/PULL_REQUEST_TEMPLATE.md
vendored
12
jabref/.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -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)
|
||||
|
9
jabref/.github/ghprcomment.yml
vendored
9
jabref/.github/ghprcomment.yml
vendored
@ -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.
|
||||
|
31
jabref/.github/workflows/add-greeting-to-issue.yml
vendored
Normal file
31
jabref/.github/workflows/add-greeting-to-issue.yml
vendored
Normal 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! 🚀
|
44
jabref/.github/workflows/add-to-projects.yml
vendored
Normal file
44
jabref/.github/workflows/add-to-projects.yml
vendored
Normal 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
|
57
jabref/.github/workflows/assign-issue.yml
vendored
57
jabref/.github/workflows/assign-issue.yml
vendored
@ -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
|
10
jabref/.github/workflows/automerge.yml
vendored
10
jabref/.github/workflows/automerge.yml
vendored
@ -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}}
|
||||
|
3
jabref/.github/workflows/check-links.yml
vendored
3
jabref/.github/workflows/check-links.yml
vendored
@ -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'
|
||||
|
7
jabref/.github/workflows/cleanup-pr.yml
vendored
7
jabref/.github/workflows/cleanup-pr.yml
vendored
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
10
jabref/.github/workflows/deployment.yml
vendored
10
jabref/.github/workflows/deployment.yml
vendored
@ -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
|
||||
|
1
jabref/.github/workflows/gource.yml
vendored
1
jabref/.github/workflows/gource.yml
vendored
@ -15,7 +15,6 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
action:
|
||||
if: github.repository_owner == 'JabRef'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout'
|
||||
|
124
jabref/.github/workflows/on-labeled-issue.yml
vendored
124
jabref/.github/workflows/on-labeled-issue.yml
vendored
@ -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
|
23
jabref/.github/workflows/on-labeled-pr.yml
vendored
23
jabref/.github/workflows/on-labeled-pr.yml
vendored
@ -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}}
|
34
jabref/.github/workflows/on-unlabeled-issue.yml
vendored
34
jabref/.github/workflows/on-unlabeled-issue.yml
vendored
@ -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
|
9
jabref/.github/workflows/pages.yml
vendored
9
jabref/.github/workflows/pages.yml
vendored
@ -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
|
||||
|
19
jabref/.github/workflows/pr-comment.yml
vendored
19
jabref/.github/workflows/pr-comment.yml
vendored
@ -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 }}"
|
||||
|
2
jabref/.github/workflows/tests-fetchers.yml
vendored
2
jabref/.github/workflows/tests-fetchers.yml
vendored
@ -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
|
||||
|
38
jabref/.github/workflows/tests.yml
vendored
38
jabref/.github/workflows/tests.yml
vendored
@ -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
|
||||
|
@ -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 }}
|
||||
|
2
jabref/.gitpod.Dockerfile
vendored
2
jabref/.gitpod.Dockerfile
vendored
@ -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"
|
||||
|
2
jabref/.vscode/extensions.json
vendored
2
jabref/.vscode/extensions.json
vendored
@ -1,6 +1,6 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"davidanson.vscode-markdownlint",
|
||||
"ltex-plus.vscode-ltex-plus"
|
||||
"valentjn.vscode-ltex"
|
||||
]
|
||||
}
|
||||
|
2
jabref/.vscode/ltex.dictionary.en-US.txt
vendored
2
jabref/.vscode/ltex.dictionary.en-US.txt
vendored
@ -2,6 +2,4 @@ Checkstyle
|
||||
CouchDB
|
||||
JabDrive
|
||||
JabRef
|
||||
OpenFastTrace
|
||||
OpenRewrite
|
||||
Temurin
|
||||
|
@ -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`).
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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 [](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.
|
||||
|
@ -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¬ice=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).*
|
||||
|
||||
|
@ -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')
|
||||
}
|
||||
|
43
jabref/buildres/abbrv.jabref.org/.all-contributorsrc
Normal file
43
jabref/buildres/abbrv.jabref.org/.all-contributorsrc
Normal 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
|
||||
}
|
8
jabref/buildres/abbrv.jabref.org/.gitattributes
vendored
Normal file
8
jabref/buildres/abbrv.jabref.org/.gitattributes
vendored
Normal 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
|
6
jabref/buildres/abbrv.jabref.org/.github/dependabot.yml
vendored
Normal file
6
jabref/buildres/abbrv.jabref.org/.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "monthly"
|
18
jabref/buildres/abbrv.jabref.org/.github/workflows/assign-issue.yml
vendored
Normal file
18
jabref/buildres/abbrv.jabref.org/.github/workflows/assign-issue.yml
vendored
Normal 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
|
21
jabref/buildres/abbrv.jabref.org/.github/workflows/automerge.yml
vendored
Normal file
21
jabref/buildres/abbrv.jabref.org/.github/workflows/automerge.yml
vendored
Normal 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}}
|
26
jabref/buildres/abbrv.jabref.org/.github/workflows/checks.yml
vendored
Normal file
26
jabref/buildres/abbrv.jabref.org/.github/workflows/checks.yml
vendored
Normal 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
|
73
jabref/buildres/abbrv.jabref.org/.github/workflows/refresh-journal-lists.yml
vendored
Normal file
73
jabref/buildres/abbrv.jabref.org/.github/workflows/refresh-journal-lists.yml
vendored
Normal 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"
|
450
jabref/buildres/abbrv.jabref.org/.gitignore
vendored
Normal file
450
jabref/buildres/abbrv.jabref.org/.gitignore
vendored
Normal 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
|
6
jabref/buildres/abbrv.jabref.org/.markdownlint.yml
Normal file
6
jabref/buildres/abbrv.jabref.org/.markdownlint.yml
Normal file
@ -0,0 +1,6 @@
|
||||
default: true
|
||||
|
||||
MD013: false
|
||||
|
||||
# all-contributors generates inline-html
|
||||
MD033: false
|
3
jabref/buildres/abbrv.jabref.org/.vscode/ltex.dictionary.en-US.txt
vendored
Normal file
3
jabref/buildres/abbrv.jabref.org/.vscode/ltex.dictionary.en-US.txt
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
unabbreviating
|
||||
unabbreviation
|
||||
JabRef
|
30
jabref/buildres/abbrv.jabref.org/CHANGELOG.md
Normal file
30
jabref/buildres/abbrv.jabref.org/CHANGELOG.md
Normal 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
|
1
jabref/buildres/abbrv.jabref.org/CNAME
Normal file
1
jabref/buildres/abbrv.jabref.org/CNAME
Normal file
@ -0,0 +1 @@
|
||||
abbrv.jabref.org
|
32
jabref/buildres/abbrv.jabref.org/CONTRIBUTING.md
Normal file
32
jabref/buildres/abbrv.jabref.org/CONTRIBUTING.md
Normal 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.
|
41
jabref/buildres/abbrv.jabref.org/LICENSE.md
Normal file
41
jabref/buildres/abbrv.jabref.org/LICENSE.md
Normal 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.
|
65
jabref/buildres/abbrv.jabref.org/README.md
Normal file
65
jabref/buildres/abbrv.jabref.org/README.md
Normal file
@ -0,0 +1,65 @@
|
||||
# Abbreviations
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
||||
[](#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/>.
|
1
jabref/buildres/abbrv.jabref.org/_config.yml
Normal file
1
jabref/buildres/abbrv.jabref.org/_config.yml
Normal file
@ -0,0 +1 @@
|
||||
theme: jekyll-theme-slate
|
24
jabref/buildres/abbrv.jabref.org/journals/README.md
Normal file
24
jabref/buildres/abbrv.jabref.org/journals/README.md
Normal 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
@ -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 dell’Accademia delle Scienze dell’Istituto 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 dell’Istituto 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","Rö"
|
||||
"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)","TÈ"
|
||||
"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"
|
|
@ -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"
|
|
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
File diff suppressed because it is too large
Load Diff
@ -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 l’Académie des Sciences, Serie A: Sciences Mathématiques","C. R. Acad. Sci. Ser. A"
|
||||
"Comptes Rendus Hebdomadaires des Séances de l’Acadé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."
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user