public static void selectWordLeftText(OutlinerCellRendererImpl textArea, JoeTree tree, OutlineLayoutManager layout) {
		Node currentNode = textArea.node;

		int currentPosition = textArea.getCaretPosition();
		String text = textArea.getText();
		int text_length = text.length();
		
		if (currentPosition == 0) {
			return;
		}
		
		// Update Preferred Caret Position
		char[] chars = text.substring(0,currentPosition).toCharArray();
		
		char c = chars[chars.length - 1];
		boolean isWordChar = false;
		if (Character.isLetterOrDigit(c) || c == '_') {
			isWordChar = true;
		}
		
		int i = chars.length - 2;
		for (; i >= 0; i--) {
			c = chars[i];
			if ((Character.isLetterOrDigit(c) || c == '_') == !isWordChar) {
				break;
			}
		}
		
		int newCaretPosition = currentPosition - (chars.length - 1 - i);
		
		
		tree.getDocument().setPreferredCaretPosition(newCaretPosition);

		// Record the CursorPosition only since the EditingNode should not have changed
		tree.setCursorPosition(newCaretPosition, false);

		textArea.moveCaretPosition(newCaretPosition);
		
		// Redraw and Set Focus if this node is currently offscreen
		if (!currentNode.isVisible()) {
			layout.draw(currentNode,OutlineLayoutManager.TEXT);
		}
		
		// Freeze Undo Editing
		UndoableEdit.freezeUndoEdit(currentNode);
	}