public static String rewriteDescriptionForNewLineSize(String moveDesc,
			String newline, int lineSize, StringSizeDeterminer ssd) {
		// We rewrite the description we're given based on some new chars per
		// line.
		moveDesc = moveDesc.replace("-" + newline, "").replace(newline, " ");
		// Keep spatk/spdef as one word on one line
		moveDesc = moveDesc.replace("Sp. Atk", "Sp__Atk");
		moveDesc = moveDesc.replace("Sp. Def", "Sp__Def");
		moveDesc = moveDesc.replace("SP. ATK", "SP__ATK");
		moveDesc = moveDesc.replace("SP. DEF", "SP__DEF");
		String[] words = moveDesc.split(" ");
		StringBuilder fullDesc = new StringBuilder();
		StringBuilder thisLine = new StringBuilder();
		int currLineWC = 0;
		int currLineCC = 0;
		int linesWritten = 0;
		for (int i = 0; i < words.length; i++) {
			// Reverse the spatk/spdef preservation from above
			words[i] = words[i].replace("SP__", "SP. ");
			words[i] = words[i].replace("Sp__", "Sp. ");
			int reqLength = ssd.lengthFor(words[i]);
			if (currLineWC > 0) {
				reqLength++;
			}
			if (currLineCC + reqLength <= lineSize) {
				// add to current line
				if (currLineWC > 0) {
					thisLine.append(' ');
				}
				thisLine.append(words[i]);
				currLineWC++;
				currLineCC += reqLength;
			} else {
				// Save current line, if applicable
				if (currLineWC > 0) {
					if (linesWritten > 0) {
						fullDesc.append(newline);
					}
					fullDesc.append(thisLine.toString());
					linesWritten++;
					thisLine = new StringBuilder();
				}
				// Start the new line
				thisLine.append(words[i]);
				currLineWC = 1;
				currLineCC = ssd.lengthFor(words[i]);
			}
		}

		// If the last line has anything add it
		if (currLineWC > 0) {
			if (linesWritten > 0) {
				fullDesc.append(newline);
			}
			fullDesc.append(thisLine.toString());
			linesWritten++;
		}

		return fullDesc.toString();
	}