Tokenise the string into a list of tokens or raise ValueError if it cannot
	be tokenised (relatively) unambiguously. The string should not include
	whitespace, i.e. it is assumed to be a single word.

	If strict=False, allow non-standard letters and diacritics, as well as
	initial diacritic-only tokens (e.g. pre-aspiration). If replace=True,
	replace some common non-IPA symbols with their IPA counterparts. If
	tones=False, ignore tone symbols. If unknown=False, ignore symbols that
	cannot be classified into a relevant category.

	Helper for tokenise(string, ..).

def tokenise_word(string,
					strict=False, replace=False, tones=False, unknown=False):
	"""
	Tokenise the string into a list of tokens or raise ValueError if it cannot
	be tokenised (relatively) unambiguously. The string should not include
	whitespace, i.e. it is assumed to be a single word.

	If strict=False, allow non-standard letters and diacritics, as well as
	initial diacritic-only tokens (e.g. pre-aspiration). If replace=True,
	replace some common non-IPA symbols with their IPA counterparts. If
	tones=False, ignore tone symbols. If unknown=False, ignore symbols that
	cannot be classified into a relevant category.

	Helper for tokenise(string, ..).
	"""
	string = normalise(string)

	if replace:
		string = ipa.replace_substitutes(string)

	tokens = []

	for index, char in enumerate(string):
		if ipa.is_letter(char, strict):
			if tokens and ipa.is_tie_bar(string[index-1]):
				tokens[-1] += char
			else:
				tokens.append(char)

		elif ipa.is_tie_bar(char):
			if not tokens:
				raise ValueError('The string starts with a tie bar: {}'.format(string))
			tokens[-1] += char

		elif ipa.is_diacritic(char, strict) or ipa.is_length(char):
			if tokens:
				tokens[-1] += char
			else:
				if strict:
					raise ValueError('The string starts with a diacritic: {}'.format(string))
				else:
					tokens.append(char)

		elif tones and ipa.is_tone(char, strict):
			if unicodedata.combining(char):
				if not tokens:
					raise ValueError('The string starts with an accent mark: {}'.format(string))
				tokens[-1] += char
			elif tokens and ipa.is_tone(tokens[-1][-1], strict):
				tokens[-1] += char
			else:
				tokens.append(char)

		elif ipa.is_suprasegmental(char, strict):
			pass

		else:
			if strict:
				raise ValueError('Unrecognised char: {} ({})'.format(char, unicodedata.name(char)))
			elif unknown:
				tokens.append(char)
			else:
				pass

	return tokens