 	# Numeric literal
 	number:
 		name: "constant.numeric.roff"
-		match: "(?!\\d+(?:/|[cfimnPpsuvz]\\w))(\\|)?(?:(?<!\\w)[-+])?(?:\\d+(?:\\.\\d*)?|\\.\\d+|(?<=[-+])\\.)([cfimnPpsuvz])?"
+		match: "(?!\\d+(?:/|[CDMPTcimnpstuvz]\\w))(\\|)?(?:(?<!\\w)[-+])?(?:\\d+(?:\\.\\d*)?|\\.\\d+|(?<=[-+])\\.)([CDMPTcimnpstuvz])?"
 		captures:
 			1: name: "keyword.operator.absolute.roff"
-			2: name: "keyword.other.unit.roff"
+			2: patterns: [include: "#units"]
+	
+	
+	# Units of measurement
+	units:
+		patterns: [
+			{match: "[Pcimnpuv]", name: "keyword.other.unit.roff"}
+			{match: "z",          name: "keyword.other.unit.gnu.roff"}
+			{match: "[CDMTst]",   name: "keyword.other.unit.heirloom.roff"}
+		]
 	
 	
 	# "Double-quoted string"

			{
				# Change default scaling indicator (GNU)
				name: "meta.scaling-indicator.gnu.roff"
				match: "(?:\\G|(?<=^|\\())([cfimnPpsuvz])(;)"
				captures:
					1: name: "keyword.other.unit.roff"
					2: name: "punctuation.separator.semicolon.roff"
			}
		]

		},{
			
			# Conditional input: Begin
			match: "(?:(?:^|\\G)(\\.|'+)[ \\t]*)?(\\\\\\{(?:\\\\(?=\\R|$))?)"
			captures:
				1: name: "punctuation.definition.request.roff"
				2: name: "constant.character.escape.conditional.block.roff"
				3: name: "punctuation.section.conditional.begin.roff"
		},{
			
			# Conditional input: End
			match: "(?:(?:^|\\G)(\\.|'+)[ \\t]*)?((\\\\\\}(?:\\\\(?=\\R|$))?))"
			captures:
				1: name: "punctuation.definition.request.roff"
				2: name: "constant.character.escape.conditional.block.roff"
				3: name: "punctuation.section.conditional.end.roff"
		},{
			
			# Device control function
