[merge] Created new infrastructure for table merging logic
diff --git a/Lib/fontTools/merge.py b/Lib/fontTools/merge.py
index a45bde8..5c926da 100644
--- a/Lib/fontTools/merge.py
+++ b/Lib/fontTools/merge.py
@@ -1,6 +1,6 @@
 # Copyright 2013 Google, Inc. All Rights Reserved.
 #
-# Google Author(s): Behdad Esfahbod
+# Google Author(s): Behdad Esfahbod, Roozbeh Pournader
 
 """Font merger.
 """
@@ -27,15 +27,28 @@
 		return None
 	return wrapper
 
+# General utility functions for merging values from different fonts
+def assert_equal(lst):
+	first = lst[0]
+	assert all([item == first for item in lst])
+
+def first(lst):
+	return lst[0]
+
 
 @_add_method(ttLib.getTableClass('maxp'))
 def merge(self, m):
+	logic = {
+		'*': max,
+		'tableVersion': assert_equal,
+		'numGlyphs': sum,
+		'maxStorage': max, # FIXME: may need to be changed to sum
+		'maxFunctionDefs': sum,
+		'maxInstructionDefs': sum,
+	}
 	# TODO When we correctly merge hinting data, update these values:
 	# maxFunctionDefs, maxInstructionDefs, maxSizeOfInstructions
-	# TODO Assumes that all tables have format 1.0; safe assumption.
-	allKeys = reduce(set.union, (list(vars(table).keys()) for table in m.tables), set())
-	for key in allKeys:
-		setattr(self, key, max(getattr(table, key) for table in m.tables))
+	m._mergeKeys(self, logic)
 	return True
 
 @_add_method(ttLib.getTableClass('head'))
@@ -383,6 +396,14 @@
 				mega.append(glyphName)
 		return mega
 
+	def _mergeKeys(self, return_table, logic):
+		logic['tableTag'] = assert_equal
+		allKeys = set.union(set(), *(vars(table).keys() for table in self.tables))
+		for key in allKeys:
+			merge_logic = logic.get(key, logic['*'])
+			key_value = merge_logic([getattr(table, key) for table in self.tables])
+			setattr(return_table, key, key_value)
+
 
 class Logger(object):