Merge pull request #931 from Joshua-F/feat/removeTags

Add a util method for removing tags
This commit is contained in:
Adam
2018-03-11 12:16:19 -04:00
committed by GitHub
7 changed files with 122 additions and 9 deletions

View File

@@ -39,6 +39,7 @@ import net.runelite.client.config.ConfigManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.util.Text;
@PluginDescriptor(
name = "Nightmare Zone"
@@ -110,7 +111,7 @@ public class NightmareZonePlugin extends Plugin
return;
}
String msg = event.getMessage().replaceAll("<[^>]*>", " "); //remove color and linebreaks
String msg = Text.removeTags(event.getMessage()); //remove color and linebreaks
if (msg.contains("The effects of overload have worn off, and you feel normal again."))
{
notifier.notify("Your overload has worn off");

View File

@@ -45,6 +45,7 @@ import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.OverlayPriority;
import net.runelite.client.ui.overlay.components.BackgroundComponent;
import net.runelite.client.ui.overlay.components.TextComponent;
import net.runelite.client.util.Text;
class OpponentInfoOverlay extends Overlay
{
@@ -120,14 +121,14 @@ class OpponentInfoOverlay extends Overlay
{
lastTime = Instant.now();
lastRatio = (float) opponent.getHealthRatio() / (float) opponent.getHealth();
opponentName = opponent.getName().replaceAll("<[^>]*>", "");
opponentName = Text.removeTags(opponent.getName());
lastMaxHealth = oppInfoHealth.get(opponentName + "_" + opponent.getCombatLevel());
Actor opponentsOpponent = opponent.getInteracting();
if (opponentsOpponent != null
&& (opponentsOpponent != client.getLocalPlayer() || client.getSetting(Varbits.MULTICOMBAT_AREA) == 1))
{
opponentsOpponentName = opponentsOpponent.getName().replaceAll("<[^>]*>", "");
opponentsOpponentName = Text.removeTags(opponentsOpponent.getName());
}
else
{

View File

@@ -68,6 +68,7 @@ import net.runelite.client.plugins.raids.solver.LayoutSolver;
import net.runelite.client.plugins.raids.solver.RotationSolver;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.Text;
@PluginDescriptor(
name = "Chambers Of Xeric"
@@ -252,7 +253,7 @@ public class RaidsPlugin extends Plugin
{
if (inRaidChambers && event.getType() == ChatMessageType.CLANCHAT_INFO)
{
String message = event.getMessage().replaceAll("<[^>]*>", "");
String message = Text.removeTags(event.getMessage());
if (config.raidsTimer() && message.startsWith(RAID_START_MESSAGE))
{

View File

@@ -81,6 +81,7 @@ import net.runelite.client.plugins.screenshot.imgur.ImageUploadResponse;
import net.runelite.client.ui.ClientUI;
import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.OverlayRenderer;
import net.runelite.client.util.Text;
import net.runelite.http.api.RuneLiteAPI;
import okhttp3.Call;
import okhttp3.Callback;
@@ -227,7 +228,7 @@ public class ScreenshotPlugin extends Plugin
if (chatMessage.contains("You have completed") && chatMessage.contains("Treasure"))
{
Matcher m = NUMBER_PATTERN.matcher(chatMessage.replaceAll("<[^>]*>", ""));
Matcher m = NUMBER_PATTERN.matcher(Text.removeTags(chatMessage));
if (m.find())
{
clueNumber = Integer.valueOf(m.group());
@@ -238,7 +239,7 @@ public class ScreenshotPlugin extends Plugin
if (chatMessage.startsWith("Your Barrows chest count is"))
{
Matcher m = NUMBER_PATTERN.matcher(chatMessage.replaceAll("<[^>]*>", ""));
Matcher m = NUMBER_PATTERN.matcher(Text.removeTags(chatMessage));
if (m.find())
{
barrowsNumber = Integer.valueOf(m.group());
@@ -248,7 +249,7 @@ public class ScreenshotPlugin extends Plugin
if (chatMessage.startsWith("Your completed Chambers of Xeric count is:"))
{
Matcher m = NUMBER_PATTERN.matcher(chatMessage.replaceAll("<[^>]*>", ""));
Matcher m = NUMBER_PATTERN.matcher(Text.removeTags(chatMessage));
if (m.find())
{
raidsNumber = Integer.valueOf(m.group());

View File

@@ -53,6 +53,7 @@ import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.task.Schedule;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.Text;
@PluginDescriptor(
name = "Slayer"
@@ -155,7 +156,7 @@ public class SlayerPlugin extends Plugin
Widget NPCDialog = client.getWidget(WidgetInfo.DIALOG_NPC_TEXT);
if (NPCDialog != null)
{
String NPCText = NPCDialog.getText().replaceAll("<[^>]*>", " "); //remove color and linebreaks
String NPCText = Text.removeTags(NPCDialog.getText()); //remove color and linebreaks
Matcher mAssign = NPC_ASSIGN_MESSAGE.matcher(NPCText); //number, name
Matcher mCurrent = NPC_CURRENT_MESSAGE.matcher(NPCText); //name, number
boolean found1 = mAssign.find();
@@ -193,7 +194,7 @@ public class SlayerPlugin extends Plugin
return;
}
String chatMsg = event.getMessage().replaceAll("<[^>]*>", ""); //remove color and linebreaks
String chatMsg = Text.removeTags(event.getMessage()); //remove color and linebreaks
if (chatMsg.endsWith("; return to a Slayer master."))
{
Matcher mComplete = CHAT_COMPLETE_MESSAGE.matcher(chatMsg);

View File

@@ -0,0 +1,65 @@
/*
* Copyright (c) 2018, Joshua Filby <joshua@filby.me>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.util;
/**
* A set of utilities to use when dealing with text.
*/
public class Text
{
/**
* Removes all tags from the given `str`.
*
* @param str The string to remove tags from.
* @return The given `str` with all tags removed from it.
*/
public static String removeTags(String str)
{
StringBuilder builder = new StringBuilder(str.length());
boolean inTag = false;
for (int i = 0; i < str.length(); i++)
{
char currentChar = str.charAt(i);
if (currentChar == '<')
{
inTag = true;
}
else if (currentChar == '>')
{
inTag = false;
}
else if (!inTag)
{
builder.append(currentChar);
}
}
return builder.toString();
}
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright (c) 2018, Joshua Filby <joshua@filby.me>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.util;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class TextTest
{
@Test
public void removeTags()
{
assertEquals("Test", Text.removeTags("<col=FFFFFF>Test</col>"));
assertEquals("Test", Text.removeTags("<img=1><s>Test</s>"));
assertEquals("Zezima (level-126)", Text.removeTags("<col=ffffff><img=2>Zezima<col=00ffff> (level-126)"));
assertEquals("", Text.removeTags("<colrandomtext test>"));
assertEquals("Not so much.", Text.removeTags("<col=FFFFFF This is a very special message.</col>Not so much."));
assertEquals("Remove no tags", Text.removeTags("Remove no tags"));
}
}