 				i += part.length
 				tabMapPart[lastString] = []
 				tabMapPart[lastString][i] = parseInt(part, 10)
-			else if part.search(multiplierPattern) is 0
+			else if part.search(multiplierLinePattern) is 0
 				# multiplier
-				part = part.match(multiplierPattern)
+				part = part.match(multiplierLinePattern)
 				i += part.length
 				tabMapPart = this.parseMultiplier(part)
 			else if part.search(riffPattern) is 0

		max
	
	addTabMaps: (a, b) ->
		result = this.normalizeTabMap(a)
		aLen = this.longestString(a)
		for strNum, strNotesArr of b
			for fret, i in strNotesArr
				result[strNum][aLen + i] = fret
		result


		customVars[variableName]

	parseMultiplier: (input) ->
		result = {}

		# parse either a riff or a chord. TODO: make this work without code duplication
		if input.search(chordPattern) is 0
			part = input.match(chordPattern)[0]
			tabToMultiply = this.parseChord(part)
		else if input.search(riffPattern) is 0
			part = input.match(riffPattern)[0]
			tabToMultiply = this.parseRiff(part)
		else
			throw "cannot set invalid multiplied part: " + part

		part = input.substr(part.length, input.length-part.length)# get rest of line
		# advance past ignored characters
		while part.search(ignorePattern) is 0
			part = part.substr(1, part.length-1)

		# - parse multiplier
		multiplier = part.match(multiplierPattern)[0]
		times = multiplier.substr(1, multiplier.length-1)# advance past "x" character
		times = parseInt(times, 10)

		# - make riff happen x times
		i = 1
		while i <= times
			result = this.addTabMaps(result, tabToMultiply)
			i++

		# return tab map
		result

	# makes each string's notes array the same length
	normalizeTabMap: (tabMap = {}) ->
