Skip to content

Commit 90b7b94

Browse files
Splitting up a method on Slash Command
Refactoring the TexCommand satisfying spotless
1 parent 6ee1989 commit 90b7b94

File tree

1 file changed

+47
-20
lines changed
  • application/src/main/java/org/togetherjava/tjbot/commands/mathcommands

1 file changed

+47
-20
lines changed

application/src/main/java/org/togetherjava/tjbot/commands/mathcommands/TeXCommand.java

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import net.dv8tion.jda.api.interactions.components.Button;
77
import net.dv8tion.jda.api.interactions.components.ButtonStyle;
88
import org.jetbrains.annotations.NotNull;
9-
import org.jetbrains.annotations.Nullable;
109
import org.scilab.forge.jlatexmath.ParseException;
1110
import org.scilab.forge.jlatexmath.TeXConstants;
1211
import org.scilab.forge.jlatexmath.TeXFormula;
@@ -63,6 +62,7 @@ public void onSlashCommand(@NotNull final SlashCommandEvent event) {
6362
String latex = Objects.requireNonNull(event.getOption(LATEX_OPTION)).getAsString();
6463
String userID = (Objects.requireNonNull(event.getMember()).getId());
6564
TeXFormula formula;
65+
6666
try {
6767
if (latex.contains("$")) {
6868
latex = convertInlineLatexToFull(latex);
@@ -72,49 +72,76 @@ public void onSlashCommand(@NotNull final SlashCommandEvent event) {
7272
event.reply("That is an invalid latex: " + e.getMessage()).setEphemeral(true).queue();
7373
return;
7474
}
75+
7576
event.deferReply().queue();
76-
Image image = formula.createBufferedImage(TeXConstants.STYLE_DISPLAY, DEFAULT_IMAGE_SIZE,
77-
FOREGROUND_COLOR, BACKGROUND_COLOR);
78-
if (image.getWidth(null) == -1 || image.getHeight(null) == -1) {
79-
event.getHook().setEphemeral(true).editOriginal(RENDERING_ERROR).queue();
80-
logger.warn(
81-
"Unable to render latex, image does not have an accessible width or height. Formula was {}",
82-
latex);
83-
return;
84-
}
85-
BufferedImage renderedTextImage = new BufferedImage(image.getWidth(null),
86-
image.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR);
87-
renderedTextImage.getGraphics().drawImage(image, 0, 0, null);
88-
ByteArrayOutputStream renderedTextImageStream = new ByteArrayOutputStream();
8977

9078
try {
91-
ImageIO.write(renderedTextImage, "png", renderedTextImageStream);
79+
Image image = renderImage(formula);
80+
sendImage(event, userID, image);
9281
} catch (IOException e) {
93-
event.getHook().setEphemeral(true).editOriginal(RENDERING_ERROR).queue();
82+
event.getHook().editOriginal(RENDERING_ERROR).queue();
9483
logger.warn(
9584
"Unable to render latex, could not convert the image into an attachable form. Formula was {}",
9685
latex, e);
97-
return;
86+
87+
} catch (IllegalStateException e) {
88+
event.getHook().editOriginal(RENDERING_ERROR).queue();
89+
90+
logger.warn(
91+
"Unable to render latex, image does not have an accessible width or height. Formula was {}",
92+
latex, e);
93+
}
94+
}
95+
96+
private @NotNull Image renderImage(@NotNull TeXFormula formula) {
97+
Image image = formula.createBufferedImage(TeXConstants.STYLE_DISPLAY, DEFAULT_IMAGE_SIZE,
98+
FOREGROUND_COLOR, BACKGROUND_COLOR);
99+
100+
if (image.getWidth(null) == -1 || image.getHeight(null) == -1) {
101+
throw new IllegalStateException("Image has no height or width");
98102
}
103+
return image;
104+
}
105+
106+
private void sendImage(@NotNull SlashCommandEvent event, @NotNull String userID,
107+
@NotNull Image image) throws IOException {
108+
109+
ByteArrayOutputStream renderedTextImageStream = getRenderedTextImageStream(image);
99110
event.getHook()
100111
.editOriginal(renderedTextImageStream.toByteArray(), "tex.png")
101112
.setActionRow(Button.of(ButtonStyle.DANGER, generateComponentId(userID), "Delete"))
102113
.queue();
103114
}
104115

116+
@NotNull
117+
private ByteArrayOutputStream getRenderedTextImageStream(@NotNull Image image)
118+
throws IOException {
119+
120+
BufferedImage renderedTextImage = new BufferedImage(image.getWidth(null),
121+
image.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR);
122+
123+
renderedTextImage.getGraphics().drawImage(image, 0, 0, null);
124+
ByteArrayOutputStream renderedTextImageStream = new ByteArrayOutputStream();
125+
126+
ImageIO.write(renderedTextImage, "png", renderedTextImageStream);
127+
128+
return renderedTextImageStream;
129+
}
130+
105131
/**
106-
*
107132
* Converts inline latex like: {@code hello $\frac{x}{2}$ world} to full latex
108133
* {@code \text{hello}\frac{x}{2}\text{ world}}.
109-
*
110134
*/
111135
@NotNull
112136
private String convertInlineLatexToFull(@NotNull String latex) {
113137
if (isInvalidInlineFormat(latex)) {
114-
throw new ParseException("One dollar sign is invalid, wrap whole expression with it. ");
138+
throw new ParseException(
139+
"The amount of $-symbols must be divisible by two. Did you forget to close an expression? ");
115140
}
141+
116142
Matcher matcher = INLINE_LATEX_REPLACEMENT.matcher(latex);
117143
StringBuilder sb = new StringBuilder();
144+
118145
while (matcher.find()) {
119146
boolean isInsideMathRegion = matcher.group(1) != null;
120147
if (isInsideMathRegion) {

0 commit comments

Comments
 (0)