docs: 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