コード例 #1
0
def cGetMatchingSmartSet(checkSetData, glyph, contourNumber):
    """
		현재 속성을 부여하려고 시도한 그룹 딕셔너리가 바뀌는 경우 교체하기 위한 메소드(한자 버전)

		Return :: int
			스마트 셋의 인덱스를 반환
	"""
    sSets = getSmartSets()
    mode = getExtensionDefault(DefaultKey + ".mode")
    matrix_margin = getExtensionDefault(DefaultKey + ".matrix_margin")
    topology_margin = getExtensionDefault(DefaultKey + ".topology_margin")
    matrix_size = getExtensionDefault(DefaultKey + ".matrix_size")
    font = getExtensionDefault(DefaultKey + ".font")

    if mode is matrixMode:
        searchMode = "Matrix"
    elif mode is topologyMode:
        searchMode = "Topology"
    else:
        return None

    index = -1
    for sSet in sSets:
        index += 1
        checkSetName = str(sSet.name)
        checkSetNameList = checkSetName.split('_')
        if len(checkSetNameList) != 3:
            continue

        standardNameList = checkSetNameList[2].split('-')
        standardGlyphUnicode = standardNameList[0][1:]
        standardIdx = int(standardNameList[1][0:len(standardNameList) - 1])

        for item in sSet.glyphNames:
            if item != glyph.name:
                continue

            if mode == 0:
                standardGlyph = font[standardGlyphUnicode]

                standardMatrix = Matrix(standardGlyph.contours[standardIdx],
                                        matrix_size)
                compareController = groupTestController(
                    standardMatrix, matrix_margin)
                result = compareController.conCheckGroup(glyph[contourNumber])

                if result is not None:
                    return index

            elif mode == 1:
                standardGlyph = font[standardGlyphUnicode]
                result = topologyJudgementController(
                    standardGlyph.contours[standardIdx], glyph[contourNumber],
                    topology_margin).topologyJudgement()

                if result is not False:
                    return index

    return None
コード例 #2
0
def findContoursGroup(checkSetData, mode):
    """
	json파일과 스마트 셋을 참고하여 이미 그룹화가 진행된 컨투어를 찾아냄
	Args :
		checkSetData :: List
			스마트셋 이름을 관리하기 위하여 필요한 checkSetData
			smartSetSearchModule 파일을 이용하여 구함
			[setNumber, syllableNumber,그룹화의 진행 여부]
		mainWindow :: object
			editWindow object
		mode :: int
		0 -> matrix , 1- > topology
	Returns :: Dictionary
		각각의 키는 같은 그룸의 컨투어를 포함하는 글리프, 값은 해당 컨투어의 번호를 저장 :: Dictionary
			key :: RGlyph
			value :: list
	"""
    matrix_margin = getExtensionDefault(DefaultKey + ".matrix_margin")
    matrix_size = getExtensionDefault(DefaultKey + ".matrix_size")
    topology_margin = getExtensionDefault(DefaultKey + ".topology_margin")
    jsonFileName2 = getExtensionDefault(DefaultKey + ".jsonFileName2")
    #파라미터를 받아오는 작업
    font = getExtensionDefault(DefaultKey + ".font")  #RFont

    #초성, 중성, 종성 분리된 딕셔너리 정보를 가져옴
    with open(jsonFileName2, 'r') as jsonFile2:
        configDict = json.load(jsonFile2)

    ssets = getSmartSets()
    glyphList = list()
    res = dict()
    positionName = None
    groupSet = None

    if mode == 0:
        modeName = "Matrix"
    else:
        modeName = "Topology"

    if checkSetData[1] == 0:
        positionName = "first"
    elif checkSetData[1] == 1:
        positionName = "middle"
    else:
        positionName = "final"

    for sset in ssets:
        nameList = str(sset.name).split('_')
        #한자셋은 고려하지 않음
        if len(nameList) == 3:
            continue
        standardNameList = nameList[3].split('-')
        standardGlyphUnicode = int(standardNameList[0][1:])
        standardIdx = int(standardNameList[1][0:len(standardNameList[1]) - 1])
        if (nameList[0] == str(checkSetData[0])) and (
                nameList[1] == positionName) and (nameList[2] == modeName):
            groupSet = sset
            break

    for item in groupSet.glyphNames:
        glyphList.append(font[str(item)])

    for g in glyphList:
        searchContours = []
        for i, comc in enumerate(g.contours):
            if i not in configDict[g.name][checkSetData[1]]:  #초, 중, 종 분리 로직
                continue
            if mode == 0:
                standardGlyph = font[
                    "uni" + str(hex(standardGlyphUnicode)[2:]).upper()]
                standardMatrix = Matrix(standardGlyph.contours[standardIdx],
                                        matrix_size)
                compareController = groupTestController(
                    standardMatrix, matrix_margin)
                result = compareController.conCheckGroup(comc)
                if result is not None:
                    searchContours.append(i)
            elif mode == 1:
                standardGlyph = font[
                    "uni" + str(hex(standardGlyphUnicode)[2:]).upper()]
                result = topologyJudgementController(
                    standardGlyph.contours[standardIdx], comc,
                    topology_margin).topologyJudgement()
                if result is not False:
                    searchContours.append(i)
        res[g] = searchContours

    return res
コード例 #3
0
def getMatchGroupByMatrix(standardGlyph, contourIndex, checkSetData):
    """
	UI와 그룹 방법을 연결시켜주는 함수 (Matrix 방법)
	Args :
		standardGlyph :: RGlyph 
			기준 컨투어
		contourIndex ::  int
			컨투어의 번호
		margin :: int
			matrix로 반별시 오차 범위 허용 값(0 ~ 100)
			숫자가 높을수록 허용 범위가 넓어짐
			(20정도가 적당)
		width :: int
			매트릭스의 가로 구획 수
		height :: int
			매트릭스의 세로 구획 수
		checkSetData :: List
			스마트셋 이름을 관리하기 위하여 필요한 checkSetData
			smartSetSearchModule 파일을 이용하여 구함
			[setNumber, syllableNumber]
		jsonFileName1 :: String
			시계방향, 반시계방향 정보를 담고 있는 json파일 이름(1차 필터링 결과)
		jsonFileName2 :: String
			음절 분리가 되어 있는 json파일 이름을 반환
	Returns: Dict
		처음 그룹화 진행시 생성되는 groupDict을 반환

	2020/03/23
	스마트셋 이름 규칙을 정리함
	set name format example
		: ##(number)_##(syllable)_####(mode)
	"""
    #파라미터를 받아오는 작업
    font = getExtensionDefault(DefaultKey + ".font")  #RFont
    mode = getExtensionDefault(DefaultKey + ".mode")
    jsonFileName1 = getExtensionDefault(DefaultKey + ".jsonFileName1")
    jsonFileName2 = getExtensionDefault(DefaultKey + ".jsonFileName2")
    matrix_margin = getExtensionDefault(DefaultKey + ".matrix_margin")
    matrix_size = getExtensionDefault(DefaultKey + ".matrix_size")

    contour = standardGlyph.contours[contourIndex]

    standardMatrix = Matrix(contour, matrix_size)
    #k에 대한 마진값 적용하는 부분 넣어 주워야 함
    compareController = groupTestController(standardMatrix, matrix_margin)
    smartSetGlyphs = []
    smartSet = SmartSet()

    #추가부분
    with open(jsonFileName1, 'r') as jsonFile1:
        resultDict = json.load(jsonFile1)

    with open(jsonFileName2, 'r') as jsonFile2:
        configDict = json.load(jsonFile2)

    print("checkSetData: ", checkSetData)
    print("~~~~")

    standard = resultDict[standardGlyph.name][contourIndex]
    bar = ProgressBar('Matrix Process', len(resultDict), 'Grouping...')
    barProcess = 0

    if checkSetData[1] == 0:
        smartSet.name = str(checkSetData[0]) + "_first_Matrix_" + "(" + str(
            standardGlyph.unicode) + "-" + str(contourIndex) + ")"
    elif checkSetData[1] == 1:
        smartSet.name = str(checkSetData[0]) + "_middle_Matrix_" + "(" + str(
            standardGlyph.unicode) + "-" + str(contourIndex) + ")"
    elif checkSetData[1] == 2:
        smartSet.name = str(checkSetData[0]) + "_final_Matrix_" + "(" + str(
            standardGlyph.unicode) + "-" + str(contourIndex) + ")"

    smartGroupDict = {}
    smartContourList = []

    for key, value in resultDict.items():
        barProcess += 1
        smartCheck = 0
        for i, compare in enumerate(value):
            if i not in configDict[key][checkSetData[1]]:  #초, 중, 종 분리 로직
                continue
            if (standard['reverse']
                    == compare['reverse']) and (standard['forword']
                                                == compare['forword']):
                compareContour = font[key].contours[i]
                result = compareController.conCheckGroup(compareContour)
                if result is not None:
                    smartContourList.append(i)
                    smartCheck = 1

        if smartCheck == 1:
            smartGroupDict[font[key]] = smartContourList
            smartSetGlyphs.append(font[key].name)
            smartContourList = []
        if barProcess % 10 == 0:
            bar.tick(barProcess)

    bar.close()

    smartSet.glyphNames = smartSetGlyphs
    addSmartSet(smartSet)
    updateAllSmartSets()

    return smartGroupDict
コード例 #4
0
def cSearchGroup(glyph,contourNumber,mode,message = False):
	"""
	스마트셋에 그룹이 존재하는지 확인(한자버전)
	Args:
		glyph :: RGlyph
			검사를 진행하고자 하는 RGlyph
		contourNumber :: int
			RGlyph의 검사를 진행하고자 하는 컨투어의 번호
		mode :: int
			0 -> matrix, 1 -> topology
		font :: RFont
			작업하고 있는 RFont

	Return :: int
		현재 그룹의 번호
	"""
	matrix_margin = getExtensionDefault(DefaultKey+".matrix_margin")
	matrix_size = getExtensionDefault(DefaultKey+".matrix_size")
	topology_margin = getExtensionDefault(DefaultKey+".topology_margin")
	raster_margin = getExtensionDefault(DefaultKey+".raster_margin")
	font = getExtensionDefault(DefaultKey+".font")

	check = 0
	positionNumber = None
	searchSmartSet = None

	if mode == 0:
		setStat = cGetSmartSetStatMatrix()
		searchMode = "Matrix"
	elif mode == 1:
		setStat = cGetSmartSetStatTopology()
		searchMode = "Topology"

	sSets = getSmartSets()
	glyphNames = list()
	check = 0


	for sSet in sSets:
		checkSetName = str(sSet.name)
		checkSetNameList = checkSetName.split('_')
		if len(checkSetNameList) != 3:
			continue
			
		#검사를 진행을 해야함(기준 컨투어는 알고 있고 비교 글리프에 있는 컨투어는 순회를 하면서 조사하는 방식)
		#matrix 체크에서는 같은 그룹이 아니면 None이고 topology 에서는 같은 그룹이 아니면 flase반환
		standardNameList = checkSetNameList[2].split('-')
		standardGlyphUnicode = int(standardNameList[0][4:])
		standardIdx = int(standardNameList[1][:len(standardNameList[1]) -1]) 
		for item in sSet.glyphNames:
			if item != glyph.name:
				continue
			if mode == 0:
				#해당 그룹을 조사
				standardGlyph = font["cid" + str(standardNameList[0][4:]).upper()]
				standardMatrix=Matrix(standardGlyph.contours[standardIdx],matrix_size)
				compareController = groupTestController(standardMatrix,matrix_margin)

				#Matrix 필터링
				result = compareController.conCheckGroup(glyph[contourNumber])

				#rasterize 필터링
				if result is not None:
					result2 = re.compareBitMap(standardGlyph[standardIdx], glyph[contourNumber],raster_margin)
				else:
					continue

				if result2 is True: 
					searchSmartSet = sSet
					check = 1
					message = True
					break

			elif mode == 1:
				standardGlyph = font["cid" + str(standardNameList[0][4:]).upper()]

				#Topology 필터링
				result = topologyJudgementController(standardGlyph.contours[standardIdx],glyph[contourNumber],topology_margin).topologyJudgement()

				#rasterize 필터링
				if result == None:
					result2 = re.compareBitMap(standardGlyph[standardIdx], glyph[contourNumber],raster_margin)
				else:
					continue

				if result2 is True: 
					searchSmartSet = sSet
					check = 1
					message = True
					break

		if check == 1:
			break

	if searchSmartSet is not None:
		if message == True:
			appendNumber = str(searchSmartSet.name).split('_')[0]
			#print(Message("이미 그룹 연산이 진행이 되어 있으므로 그룹화 작업을 생략합니다."))
		return [int(checkSetNameList[0]),positionNumber,0]
	else:
		return [int(setStat[0]),positionNumber,1]
コード例 #5
0
def searchGroup(glyph,contourNumber,mode,message = False):
	"""
	스마트셋에 그룹이 존재하는지 확인
	Args:
		glyph :: RGlyph
			검사를 진행하고자 하는 RGlyph
		contourNumber :: int
			RGlyph의 검사를 진행하고자 하는 컨투어의 번호
		mode :: int
			0 - > matrix , 1-> topology
		font :: RFont
			작업하고 있는 RFont

	Return :: List
		[스마트 셋의 번호,음절 번호(0 - 초성, 1- 중성, 2- 종성),그룹화 진행 여부에 대한 번호(0 -> grouped , 1 -> not grouped)]
	"""

	syllableJudgementController = getExtensionDefault(DefaultKey + ".syllableJudgementController")
	glyphConfigure = syllableJudgementController.GetSyllable(glyph)
	font = getExtensionDefault(DefaultKey+".font")
	matrix_margin = getExtensionDefault(DefaultKey+".matrix_margin")
	matrix_size = getExtensionDefault(DefaultKey+".matrix_size")
	topology_margin = getExtensionDefault(DefaultKey+".topology_margin")
	raster_margin = getExtensionDefault(DefaultKey+".raster_margin")


	check = 0
	positionNumber = None
	searchSmartSet = None

	#해당 컨투어가 초성인지 중성인지 종성인지 확인
	for i in range(0,len(glyphConfigure[str(glyph.unicode)])):
		for j in range(0,len(glyphConfigure[str(glyph.unicode)][i])):
			if contourNumber == glyphConfigure[str(glyph.unicode)][i][j]:
				check = 1
				positionNumber = i
				break

		if check == 1:
			break

	if mode == 0:
		setStat = getSmartSetStatMatrix()
		searchMode = "Matrix"
	elif mode == 1:
		setStat = getSmartSetStatTopology()
		searchMode = "Topology"

	if positionNumber == 0:
		positionName = "first"
	elif positionNumber == 1:
		positionName = "middle"
	else:
		positionName = "final"



	sSets = getSmartSets()
	glyphNames = list()
	check = 0

	for sSet in sSets:
		checkSetName = str(sSet.name)
		checkSetNameList = checkSetName.split('_')
		if checkSetNameList[1] != positionName or checkSetNameList[2] != searchMode:
			continue

		#검사를 진행을 해야함(기준 컨투어는 알고 있고 비교 글리프에 있는 컨투어는 순회를 하면서 조사하는 방식)
		#matrix 체크에서는 같은 그룹이 아니면 None이고 topology 에서는 같은 그룹이 아니면 flase반환
		standardNameList = checkSetNameList[3].split('-')
		standardGlyphUnicode = int(standardNameList[0][1:])
		standardIdx = int(standardNameList[1][0:len(standardNameList)-1]) 
		for item in sSet.glyphNames:
			if item != glyph.name:
				continue
			if mode == 0:
				standardGlyph = font["uni" + str(hex(standardGlyphUnicode)[2:]).upper()]
				standardMatrix=Matrix(standardGlyph.contours[standardIdx],matrix_size)
				compareController = groupTestController(standardMatrix,matrix_margin)
				result = compareController.conCheckGroup(glyph[contourNumber])

				if result is not None: 
					searchSmartSet = sSet
					check = 1
					message = True
					break
			elif mode == 1:
				standardGlyph = font["uni" + str(hex(standardGlyphUnicode)[2:]).upper()]
				result = topologyJudgementController(standardGlyph.contours[standardIdx],glyph[contourNumber],topology_margin).topologyJudgement()
				if result is not False: 
					searchSmartSet = sSet
					check = 1
					message = True
					break
					
		if check == 1:
			break

	if positionNumber == 0:
		appendNumber = setStat["first"]
	elif positionNumber == 1:
		appendNumber = setStat["middle"]
	elif positionNumber == 2:
		appendNumber = setStat["final"]

	if searchSmartSet is not None:
		if message == True:
			appendNumber = str(searchSmartSet.name).split('_')[0]
			#print(Message("이미 그룹 연산이 진행이 되어 있으므로 그룹화 작업을 생략합니다."))
		return [int(appendNumber),positionNumber,0]
	else:
		return [appendNumber,positionNumber,1]
コード例 #6
0
def getMatchingSmartSet(checkSetData, glyph, contourNumber):
    """
		현재 속성을 부여하려고 시도한 그룹 딕셔너리가 바뀌는 경우 교체하기 위한 메소드(한글 버전)
	"""
    sSets = getSmartSets()
    check = 0
    mode = getExtensionDefault(DefaultKey + ".mode")
    glyphConfigure = getConfigure(glyph)
    positionNumber = None
    searchSmartSet = None
    matrix_margin = getExtensionDefault(DefaultKey + ".matrix_margin")
    topology_margin = getExtensionDefault(DefaultKey + ".topology_margin")
    matrix_size = getExtensionDefault(DefaultKey + ".matrix_size")
    font = getExtensionDefault(DefaultKey + ".font")

    if mode is matrixMode:
        searchMode = "Matrix"
    elif mode is topologyMode:
        searchMode = "Topology"
    else:
        return None

    for i in range(0, len(glyphConfigure[str(glyph.unicode)])):
        for j in range(0, len(glyphConfigure[str(glyph.unicode)][i])):
            if contourNumber == glyphConfigure[str(glyph.unicode)][i][j]:
                check = 1
                positionNumber = i
                break

        if check == 1:
            break

    syllable = ["first", "middle", "final"]
    positionName = syllable[positionNumber]
    check = 0

    index = -1
    for sSet in sSets:
        index += 1
        checkSetName = str(sSet.name)
        checkSetNameList = checkSetName.split('_')

        if checkSetNameList[1] != positionName or checkSetNameList[
                2] != searchMode:
            continue
        if len(checkSetNameList) == 3:
            continue

        standardNameList = checkSetNameList[3].split('-')
        standardGlyphUnicode = int(standardNameList[0][1:])
        standardIdx = int(standardNameList[1][0:len(standardNameList) - 1])

        for item in sSet.glyphNames:
            if item != glyph.name:
                continue

            if mode == 0:
                standardGlyph = font[
                    "uni" + str(hex(standardGlyphUnicode)[2:]).upper()]
                standardMatrix = Matrix(standardGlyph.contours[standardIdx],
                                        matrix_size)
                compareController = groupTestController(
                    standardMatrix, matrix_margin)
                result = compareController.conCheckGroup(glyph[contourNumber])

                if result is not None:
                    return index
            elif mode == 1:
                standardGlyph = font[
                    "uni" + str(hex(standardGlyphUnicode)[2:]).upper()]
                result = topologyJudgementController(
                    standardGlyph.contours[standardIdx], glyph[contourNumber],
                    topology_margin).topologyJudgement()

                if result is not False:
                    return index

    return None
コード例 #7
0
def cFindContoursGroup(checkSetData, mode):
	"""
	json파일과 스마트 셋을 참고하여 이미 그룹화가 진행된 컨투어를 찾아냄
	Args :
		checkSetData :: int
			한자를 관리하기 위한 번호
		mainWindow :: object
			editWindow object
		mode :: int
		0 -> matrix , 1- > topology
	Returns :: Dictionary
		각각의 키는 같은 그룸의 컨투어를 포함하는 글리프, 값은 해당 컨투어의 번호를 저장 :: Dictionary
			key :: RGlyph
			value :: list
	"""

	#파라미터를 받아오는 작업
	font = getExtensionDefault(DefaultKey+".font")#RFont

	ssets = getSmartSets()
	glyphList = list()
	res = dict()
	positionName  = None
	groupSet = None

	if mode == 0:
		modeName = "Matrix"
	else:
		modeName = "Topology"

	for sset in ssets:
		nameInfo = sset.name.split('_')
		#print("nameInfo : ",nameInfo)
		if len(nameInfo) != 3:
			continue

		ChineseIndex = int(nameInfo[0])
		if checkSetData[0] == ChineseIndex:
			groupSet = sset
			break


	for item in groupSet.glyphNames:
		glyphList.append(font[str(item)])

	#기준 컨투어를 뽑아내는 작업
	checkSetName = str(groupSet.name)
	checkSetNameList = checkSetName.split('_')
	standardNameList = checkSetNameList[2].split('-')
	standardGlyphUnicode = int(standardNameList[0][4:])
	standardIdx = int(standardNameList[1][:len(standardNameList[1]) -1])
	matrix_margin = getExtensionDefault(DefaultKey+".matrix_margin")
	matrix_size = getExtensionDefault(DefaultKey+".matrix_size")
	topology_margin = getExtensionDefault(DefaultKey+".topology_margin")



	for g in glyphList:
		searchContours = []
		for i,comc in enumerate(g.contours):
			if mode == 0:
				standardGlyph = font["cid" + str(standardNameList[0][4:]).upper()]
				standardMatrix=Matrix(standardGlyph.contours[standardIdx],matrix_size)
				compareController = groupTestController(standardMatrix,matrix_margin)
				result = compareController.conCheckGroup(comc)
				if result is not None:
					searchContours.append(i)
			elif mode == 1:
				standardGlyph = font["cid" + str(standardNameList[0][4:]).upper()]
				result = topologyJudgementController(standardGlyph.contours[standardIdx],comc,topology_margin).topologyJudgement()
				if result is not False:
					searchContours.append(i)
		res[g] = searchContours

	return res
コード例 #8
0
def cGetMatchGroupByMatrix(standardGlyph, contourIndex, checkSetData):
	"""
	한자버전
	UI와 그룹 방법을 연결시켜주는 함수 (Matrix 방법)
	Args :
		standardGlyph :: RGlyph 
			기준 글리프
		contourIndex ::  int
			컨투어의 번호
		margin :: int
			matrix로 반별시 오차 범위 허용 값(0 ~ 100)
			숫자가 높을수록 허용 범위가 넓어짐
			(20정도가 적당)
		width :: int
			매트릭스의 가로 구획 수
		height :: int
			매트릭스의 세로 구획 수
		checkSetData :: int
			한자를 관리하기 위한 번호
		jsonFileName1 :: String
			시계방향, 반시계방향 정보를 담고 있는 json파일 이름(1차 필터링 결과)
		jsonFileName2 :: String
			음절 분리가 되어 있는 json파일 이름을 반환

	2020/03/23
	스마트셋 이름 규칙은 숫자 번호대로
	"""

	#파라미터를 받아오는 작업
	font = getExtensionDefault(DefaultKey+".font")#RFont
	mode = getExtensionDefault(DefaultKey+".mode")
	jsonFileName1 = getExtensionDefault(DefaultKey+".jsonFileName1")
	jsonFileName2 = getExtensionDefault(DefaultKey+".jsonFileName2")
	matrix_margin = getExtensionDefault(DefaultKey+".matrix_margin")
	matrix_size = getExtensionDefault(DefaultKey+".matrix_size")
	raster_margin = getExtensionDefault(DefaultKey+".raster_margin")


	contour = standardGlyph.contours[contourIndex]

	standardMatrix = Matrix(contour,matrix_size)
	#k에 대한 마진값 적용하는 부분 넣어 주워야 함
	compareController = groupTestController(standardMatrix,matrix_margin)
	smartSetGlyphs = []
	smartSet = SmartSet()

	#추가부분
	with open(jsonFileName1, 'r') as jsonFile1:
	    resultDict = json.load(jsonFile1)


	standard = resultDict[standardGlyph.name][contourIndex]

	bar = ProgressBar('Matrix Process',len(resultDict),'Grouping...')
	barProcess = 0

	smartGroupDict = {}
	smartContourList = []

	smartSet.name = str(checkSetData[0])+"_Matrix_" + "(" + str(standardGlyph.name) + "-" + str(contourIndex) + ")"
	


	for key, value in resultDict.items():
		barProcess += 1
		smartCheck = 0
		for i,compare in enumerate(value):
			#비교 컨투어 설정
			compareContour = font[key].contours[i]
			#clockWise 1차 필터링
			if (standard['reverse'] == compare['reverse']) and (standard['forword'] == compare['forword']):
				#Matrix 2차 필터링
				result = compareController.conCheckGroup(compareContour)

				#rasterize 3차 필터링
				if result is not None:
					result2 = re.compareBitMap(standardGlyph[contourIndex], compareContour,raster_margin)
				else:
					continue

				if result2 is True:
					smartContourList.append(i)
					smartCheck = 1
				#if result is not None:
					#smartContourList.append(i)
					#smartCheck = 1
				#else:
					#continue

		if smartCheck == 1:
			glyphUniName = font[key].name
			smartGroupDict[glyphUniName] = smartContourList
			smartSetGlyphs.append(glyphUniName)
			smartContourList = []
		if barProcess % 10 == 0:
			bar.tick(barProcess)

	bar.close()


	smartSet.glyphNames = smartSetGlyphs
	addSmartSet(smartSet)
	updateAllSmartSets()