001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005 import java.net.URI;
006 import java.net.URISyntaxException;
007 import java.util.logging.Level;
008 import java.util.logging.Logger;
009 import java.util.regex.Matcher;
010 import java.util.regex.Pattern;
011
012 @SideOnly(Side.CLIENT)
013 public class ChatClickData
014 {
015 public static final Pattern pattern = Pattern.compile("^(?:(https?)://)?([-\\w_\\.]{2,}\\.[a-z]{2,3})(/\\S*)?$");
016 private final FontRenderer fontR;
017 private final ChatLine line;
018 private final int field_78312_d;
019 private final int field_78313_e;
020 private final String field_78310_f;
021
022 /** The URL which was clicked on. */
023 private final String clickedUrl;
024
025 public ChatClickData(FontRenderer par1FontRenderer, ChatLine par2ChatLine, int par3, int par4)
026 {
027 this.fontR = par1FontRenderer;
028 this.line = par2ChatLine;
029 this.field_78312_d = par3;
030 this.field_78313_e = par4;
031 this.field_78310_f = par1FontRenderer.trimStringToWidth(par2ChatLine.getChatLineString(), par3);
032 this.clickedUrl = this.findClickedUrl();
033 }
034
035 /**
036 * Gets the URL which was clicked on.
037 */
038 public String getClickedUrl()
039 {
040 return this.clickedUrl;
041 }
042
043 /**
044 * computes the URI from the clicked chat data object
045 */
046 public URI getURI()
047 {
048 String var1 = this.getClickedUrl();
049
050 if (var1 == null)
051 {
052 return null;
053 }
054 else
055 {
056 Matcher var2 = pattern.matcher(var1);
057
058 if (var2.matches())
059 {
060 try
061 {
062 String var3 = var2.group(0);
063
064 if (var2.group(1) == null)
065 {
066 var3 = "http://" + var3;
067 }
068
069 return new URI(var3);
070 }
071 catch (URISyntaxException var4)
072 {
073 Logger.getLogger("Minecraft").log(Level.SEVERE, "Couldn\'t create URI from chat", var4);
074 }
075 }
076
077 return null;
078 }
079 }
080
081 private String findClickedUrl()
082 {
083 int var1 = this.field_78310_f.lastIndexOf(" ", this.field_78310_f.length()) + 1;
084
085 if (var1 < 0)
086 {
087 var1 = 0;
088 }
089
090 int var2 = this.line.getChatLineString().indexOf(" ", var1);
091
092 if (var2 < 0)
093 {
094 var2 = this.line.getChatLineString().length();
095 }
096
097 return StringUtils.stripControlCodes(this.line.getChatLineString().substring(var1, var2));
098 }
099 }