Example #1
0
 def showAllPairs(self, sender=None):
     # open all resulting pairs in Space Center
     rawString = ""
     for g1, g2 in self.touchingPairs:
         rawString += "/%s/%s/space" % (g1, g2)
     s = OpenSpaceCenter(self.f)
     s.setRaw(rawString)
Example #2
0
 def showAllPairs(self, sender=None):
     # open all resulting pairs in Space Center
     rawString = ""
     for g1, g2 in self.touchingPairs:
         rawString += "/%s/%s/space" % (g1, g2)
     s = OpenSpaceCenter(self.f)
     s.setRaw(rawString)
 def showThisGlyphInSC_CB(self, sender):
     if CurrentSpaceCenter() is None:
         spaceCenter = OpenSpaceCenter(self.glyph.font)
         spaceCenter.set([self.glyphBelowName])
     else:
         scGlyphs = CurrentSpaceCenter().get()
         spaceCenter = OpenSpaceCenter(self.glyph.font)
         spaceCenter.set(scGlyphs + [self.glyphBelowName])
Example #4
0
    def tofuButtonCallback(self, sender):
        self.outputText = self.inputText
        noBueno = self.tofuText

        self.updateFont()

        if self.ucCheck == 1:
            self.outputText = self.inputText.upper()
            noBueno = noBueno.upper()

        if self.lcCheck == 1:
            self.outputText = self.inputText.lower()
            noBueno = noBueno.lower()

        if self.digitCheck == 1:
            noBueno += s.digits

        if self.punctCheck == 1:
            noBueno += s.punctuation + "‘’“”«»".decode("utf-8")

        self.outputText = removeExtraSpaces("".join(
            letter for letter in self.outputText if letter not in noBueno))
        # outputText = outputText.translate(None, noBueno)

        self.w.outputText.set(self.outputText)

        if self.copyToSCCheck == 1 and self.outputText != "":
            try:
                OpenSpaceCenter(self.font, newWindow=False)

                sc = CurrentSpaceCenter()
                sc.setRaw(self.outputText)

            except AttributeError:
                Message("You need a font to copy to Space Center")
Example #5
0
 def setSpaceCenter(self, font, text):
     currentSC = CurrentSpaceCenter()
     if currentSC is None:
         print('opening space center, click back into MM window')
         OpenSpaceCenter(font, newWindow=False)
         currentSC = CurrentSpaceCenter()
     currentSC.setRaw(text)
    def __init__(self):

        self.font = CurrentFont()
        self.spaceCenter = None
        if self.font:
            addObserver(self, 'SpaceCenterObserver', 'spaceCenterDidOpen')
            self.spaceCenter = OpenSpaceCenter(self.font, newWindow=True)

            # addObserver(self, None, 'spaceCenterDraw')
            addObserver(self, 'pressedKey', 'spaceCenterKeyDown')
            addObserver(self, 'closeSpaceCenter', 'spaceCenterWillClose')

            # get kerning from CurrentFont and build text list
            self.pairsTextCheck = []
            self.kKeys = self.getKerningPairsRef(self.font)
            # get reference pairs for flipping
            self.refPairs = [pair[0] for pair in self.kKeys]

            for key, gkey in self.kKeys:
                self.pairsTextCheck.append(self.returnPattern(key))

            # index of text
            self.i = 0
            self.maxi = len(self.kKeys)

            self.spaceCenter.set(self.pairsTextCheck[self.i])

        else:
            message('You need to open a font first!')
Example #7
0
 def openTab(self, aString):
     aString = aString[1:]
     if CurrentSpaceCenter():
         CurrentSpaceCenter().set(aString)
     else:
         OpenSpaceCenter(CurrentFont(), newWindow=True)
         CurrentSpaceCenter().set(aString)
    def __init__(self):

        self.font = CurrentFont()
        self.spaceCenter = None
        if self.font:
            addObserver(self, 'SpaceCenterObserver', 'spaceCenterDidOpen')
            self.spaceCenter = OpenSpaceCenter(self.font, newWindow=True)

            addObserver(self, 'pressedKey', 'spaceCenterKeyDown')
            addObserver(self, 'closeSpaceCenter', 'spaceCenterWillClose')

            # get kerning from CurrentFont and build text list
            self.pairsTextCheck = []
            self.kKeys = self.getKerningPairsRef(self.font)
            for key, gkey in self.kKeys:
                self.pairsTextCheck.append(self.returnPattern(key))

            # index of text
            self.i = 0
            self.maxi = len(self.kKeys)

            if self.pairsTextCheck:
                self.hasKerning = True
                self.spaceCenter.set(self.pairsTextCheck[self.i])
            else:
                self.hasKerning = False
                self.spaceCenter.setRaw('YOUR FONT HAS NO KERNING PAIRS -- your font has no kerning pairs')

        else:
            message('You need to open a font first!')
Example #9
0
 def makeWords(self, sender=None):
     global warned
     self.f = CurrentFont()
     self.fontChars = self.fontCharacters(self.f)
     self.wordCount = self.getIntegerValue(self.w.basicsBox.wordCount)
     self.minLength = self.getIntegerValue(self.w.basicsBox.minLength)
     self.maxLength = self.getIntegerValue(self.w.basicsBox.maxLength)
     self.case = self.w.basicsBox.case.get()
     self.requiredLetters = self.getInputString(self.w.reqBox.mustLettersBox, False) 
     self.requiredGroups[0] = self.getInputString(self.w.reqBox.group1box, True) 
     self.requiredGroups[1] = self.getInputString(self.w.reqBox.group2box, True) 
     self.requiredGroups[2] = self.getInputString(self.w.reqBox.group3box, True) 
     self.bannedLetters = self.getInputString(self.w.reqBox.notLettersBox, False)
     self.bannedLetters.append(" ")
     self.limitToCharset = self.w.optionsBox.checkbox0.get()
     self.banRepetitions = self.w.optionsBox.checkbox1.get()
     self.randomize = self.w.optionsBox.checkbox2.get()
     self.outputWords = [] #initialize/empty
     
     checker = wordChecker(self.limitToCharset, self.fontChars, self.requiredLetters, self.requiredGroups, self.bannedLetters, self.banRepetitions, self.minLength, self.maxLength)
     for i in self.allWords:
         if len(self.outputWords) >= self.wordCount:
             break
         else:
             if self.randomize:
                 w = choice(self.allWords)
             else:
                 w = i
             if self.case == 1:   w = w.lower()
             elif self.case == 2: w = w.title()
             elif self.case == 3: w = w.upper()
             if checker.checkWord(w, self.outputWords):
                 self.outputWords.append(w)  
     # output
     if len(self.outputWords) < 1:
         print "word-o-mat: No matching words found <sad trombone>"
     else:
         outputString = " ".join(self.outputWords)
         try:
             sp = OpenSpaceCenter(CurrentFont())
             sp.setRaw(outputString)
         except:
             print "word-o-mat:", outputString
             pass
	def spaceCenter(self, sender): 
		if CurrentFont() == None: 
			self.w.textBox.set("Open a font!")
		else:
			self.font = CurrentFont()
			textinput = self.w.textBox.get()
			if textinput == "Open a font!":
			   textinput = ""
			   sc = OpenSpaceCenter(self.font)
			   sc.setRaw(textinput)
			else:		 		  
			   sc = OpenSpaceCenter(self.font)
			   sc.setRaw(textinput)
	def spaceCenterAllFonts(self, sender): 
		if CurrentFont() == None: 
			self.w.textBox.set("Open a font!")
		else: 
			textinput = self.w.textBox.get()
			if textinput == "Open a font!":
			   textinput = ""
			   for font in AllFonts():	 
				    sc = OpenSpaceCenter(font)
				    sc.setRaw(textinput)
			else:	  
			   for font in AllFonts():	 
				    sc = OpenSpaceCenter(font)
				    sc.setRaw(textinput)
Example #12
0
#
# 2015 Benedikt Bramböck
# @arialcrime
#
#########################################################

from mojo.UI import OpenSpaceCenter

import collections, random, string, os
cities = open('cities.txt', 'r')
letters = string.uppercase

azcities = ''

alphabetdict = collections.defaultdict(list)
for city in cities:
    city = city[:-1]
    alphabetdict[city[0].upper()].append(city)

#print alphabet
for l in letters:

    add = random.choice(alphabetdict[l]) + ' '
    azcities += add

# Copy list of cities to clipboard
# os.system("echo '%s' | pbcopy" % azcities)

print azcities
sp = OpenSpaceCenter(CurrentFont())
sp.setRaw(azcities)
Example #13
0
#
# 2015 Benedikt Bramböck
# @arialcrime
#
#########################################################

from mojo.UI import OpenSpaceCenter

import collections, random, string, os
cities = open('cities.txt', 'r')
letters = string.uppercase

azcities = ''

alphabetdict = collections.defaultdict(list)
for city in cities:
    city = city[:-1]
    alphabetdict[city[0].upper()].append(city)
    
#print alphabet
for l in letters: 
    
    add = random.choice(alphabetdict[l]) + ' '
    azcities += add

# Copy list of cities to clipboard
# os.system("echo '%s' | pbcopy" % azcities)

print azcities
sp = OpenSpaceCenter(CurrentFont())
sp.setRaw(azcities)
Example #14
0
 def openSpaceCenter(self, sender):
     self._canUpdateChangeCount = False
     OpenSpaceCenter(self._font)
     self._canUpdateChangeCount = True
Example #15
0
    def getText(self):
        if CurrentFont() is None:
            NSBeep()
            self.showMessage("Open a font first.", "")
            return

        if not self.isConnected():
            NSBeep()
            self.showMessage("Required internet connection not found.", "")
            return

        values = {
            'chars':
            self.w.chars.get().encode('utf-8'),
            'script':
            scriptsTagDict[scriptsNameList[self.w.scriptsPopup.get()]],
            'tb':
            langsTagDict[langsNameDict[scriptsNameList[
                self.w.scriptsPopup.get()]][self.w.langsPopup.get()]]
        }

        if self.w.punctCheck.get():
            values['punct'] = True
        if self.w.figsCheck.get():
            values['figs'] = True
            if self.w.figsPopup.isVisible():
                figsOptTagsList = ["dflt", "locl"]
                values['figsOpt'] = figsOptTagsList[self.w.figsPopup.get()]
        if self.w.trimCheck.get() and self.w.trimCheck.isEnable():
            values['trim'] = True
        if self.w.caseCheck.get() and self.w.caseCheck.isEnable():
            values['case'] = True
        if self.w.casingCheck.get() and self.w.casingCheck.isEnable():
            values['casing'] = casingNameList[self.w.casingPopup.get()].lower()

        data = urlencode(values)
        data = data.encode('utf-8')
        print(data)
        request = Request(url, data)
        response = urlopen(request)
        text = response.read()
        textU = unicode(text, 'utf-8')

        if (msgStr in textU):
            textU = textU.replace(msgStr, "")
            NSBeep()
            self.showMessage(textU, "")
            return

        elif (wrnStr in textU):
            resultIndex = textU.find(rsltStr)
            secmsgIndex = textU.find(sndStr)
            frstmsgU = textU[:secmsgIndex].replace(wrnStr, "")
            scndmsgU = textU[secmsgIndex:resultIndex].replace(sndStr, "")
            textU = textU[resultIndex:].replace(rsltStr, "")
            NSBeep()
            self.showMessage(frstmsgU, scndmsgU)

        textList = textU.split()
        trimmedText = ' '.join(textList[:int(self.w.slider.get())])

        if CurrentSpaceCenter() is None:
            OpenSpaceCenter(CurrentFont(), newWindow=False)

        sp = CurrentSpaceCenter()
        print(trimmedText)
        sp.setRaw(trimmedText)

        # Toggle RTL-LTR
        try:
            sp.setLeftToRight(not self.scriptIsRTL)
            sp.setInputWritingDirection(
                'Right to Left' if self.scriptIsRTL else 'Left to Right')
        except AttributeError:
            pass

        return
Example #16
0
    def makeWords(self, sender=None):
        """Parse user input, save new values to prefs, compile and display the resulting words.
        
        I think this function is too long and bloated, it should be taken apart. ########
        """
        
        global warned
        self.f = CurrentFont()
        
        if self.f is not None:
            self.fontChars, self.glyphNames = self.fontCharacters(self.f)
            self.glyphNamesForValues = {self.fontChars[i]: self.glyphNames[i] for i in range(len(self.fontChars))}
        else:
            self.fontChars = []
            self.glyphNames = []

        self.wordCount = self.getIntegerValue(self.g1.wordCount)
        self.minLength = self.getIntegerValue(self.g1.minLength)
        self.maxLength = self.getIntegerValue(self.g1.maxLength)
        self.case = self.g1.case.get()
        self.customCharset = []
        
        charset = self.g1.base.get()
        self.limitToCharset = True
        if charset == 0:
            self.limitToCharset = False
            
        elif charset == 2: # use selection
            if len(self.f.selection) == 0: # nothing selected
                Message("word-o-mat: No glyphs were selected in the font window. Will use any characters available in the current font.")
                self.g1.base.set(1) # use font chars
            else:
                try:
                    self.customCharset = []
                    for gname in self.f.selection:
                        if self.f[gname].unicode is not None:
                            try: 
                                self.customCharset.append(unichr(int(self.f[gname].unicode)))
                            except ValueError:
                                pass 
                except AttributeError: 
                    pass 
                    
        elif charset == 3: # use mark color
            c = self.g1.colorWell.get()
            
            if c is None:
                pass
            elif c.className() == "NSCachedWhiteColor": # not set, corresponds to mark color set to None
                c = None
            
            self.customCharset = []
            self.reqMarkColor = (c.redComponent(), c.greenComponent(), c.blueComponent(), c.alphaComponent()) if c is not None else None
            for g in self.f:
                if g.mark == self.reqMarkColor: 
                    try: 
                        self.customCharset.append(unichr(int(g.unicode)))
                    except:
                        pass
            if len(self.customCharset) == 0:
                Message("word-o-mat: Found no glyphs that match the specified mark color. Will use any characters available in the current font.")
                self.g1.base.set(1) # use font chars
                self.toggleColorSwatch(0)
        
        self.matchMode = "text" if self.g2.matchMode.get() == 0 else "grep" # braucht es diese zeile noch?
        
        self.requiredLetters = self.getInputString(self.g2.textMode.mustLettersBox, False)
        self.requiredGroups[0] = self.getInputString(self.g2.textMode.group1box, True) 
        self.requiredGroups[1] = self.getInputString(self.g2.textMode.group2box, True) 
        self.requiredGroups[2] = self.getInputString(self.g2.textMode.group3box, True)
        self.matchPattern = self.g2.grepMode.grepBox.get()
        
        self.banRepetitions = self.g3.checkbox0.get()
        self.outputWords = [] # initialize/empty
        
        self.source = self.g1.source.get()
        languageCount = len(self.textfiles)
        if self.source == languageCount: # User Dictionary    
            self.allWords = self.dictWords["user"]
        elif self.source == languageCount+1: # Use all languages
            for i in range(languageCount):
                # if any language: concatenate all the wordlists
                self.allWords.extend(self.dictWords[self.textfiles[i]])
        elif self.source == languageCount+2: # Custom word list
            try:
                if self.customWords != []:
                    self.allWords = self.customWords
                else:
                    self.allWords = self.dictWords["ukacd"] 
                    self.g1.source.set(0)
            except AttributeError:
                self.allWords = self.dictWords["ukacd"] 
                self.g1.source.set(0)
        else: # language lists
            for i in range(languageCount):
                if self.source == i:
                    self.allWords = self.dictWords[self.textfiles[i]]
                
        # store new values as defaults
        
        markColorPref = self.reqMarkColor if self.reqMarkColor is not None else "None"
        
        extDefaults = {
            "wordCount": self.wordCount, 
            "minLength": self.minLength, 
            "maxLength": self.maxLength, 
            "case": self.case, 
            "limitToCharset": self.writeExtDefaultBoolean(self.limitToCharset), 
            "source": self.source,
            "matchMode": self.matchMode,
            "matchPattern": self.matchPattern, # non compiled string
            "markColor": markColorPref,
            }
        for key, value in extDefaults.iteritems():
            setExtensionDefault("com.ninastoessinger.word-o-mat."+key, value)
                
        # go make words
        if self.checkInput(self.limitToCharset, self.fontChars, self.customCharset, self.requiredLetters, self.minLength, self.maxLength, self.case) == True:
        
            checker = wordcheck.wordChecker(self.limitToCharset, self.fontChars, self.customCharset, self.requiredLetters, self.requiredGroups, self.matchPatternRE, self.banRepetitions, self.minLength, self.maxLength, matchMode=self.matchMode)
            
            for i in self.allWords:
                if len(self.outputWords) >= self.wordCount:
                    break
                else:
                    w = choice(self.allWords)
                    if self.case == 1:   w = w.lower()
                    elif self.case == 2: 
                        # special capitalization rules for Dutch IJ
                        # this only works when Dutch is selected as language, not "any".
                        try:
                            ijs = ["ij", "IJ", "Ij"]
                            if self.languageNames[self.source] == "Dutch" and w[:2] in ijs:
                                wNew = "IJ" + w[2:]
                                w = wNew
                            else:
                                w = w.title()
                        except IndexError:
                            w = w.title()
                    elif self.case == 3:
                        # special capitalization rules for German double s
                        if u"ß" in w:
                            w2 = w.replace(u"ß", "ss")
                            w = w2
                        w = w.upper()
                        
                    if checker.checkWord(w, self.outputWords):
                        self.outputWords.append(w)  
            
            # output
            if len(self.outputWords) < 1:
                Message("word-o-mat: no matching words found <sad trombone>")
            else:
                joinString = " "
                if self.g3.listOutput.get() == True:
                    joinString = "\\n"
                    self.outputWords = self.sortWordsByWidth(self.outputWords)
                outputString = joinString.join(self.outputWords)
                try:
                    sp = OpenSpaceCenter(CurrentFont())
                    sp.setRaw(outputString)
                except:
                    if warned == False:
                        Message("word-o-mat: No open fonts found; words will be displayed in the Output Window.")
                    warned = True
                    print "word-o-mat:", outputString
        else:
            print "word-o-mat: Aborted because of errors"
Example #17
0
    def makeWords(self, sender=None):
        
        global warned
        self.f = CurrentFont()
        self.fontChars, self.glyphNames = self.fontCharacters(self.f)

        self.glyphNamesForValues = {self.fontChars[i]: self.glyphNames[i] for i in range(len(self.fontChars))}

        self.wordCount = self.getIntegerValue(self.basicsBox.wordCount)
        self.minLength = self.getIntegerValue(self.basicsBox.minLength)
        self.maxLength = self.getIntegerValue(self.basicsBox.maxLength)
        self.case = self.basicsBox.case.get()
        self.customCharset = []
        
        charset = self.basicsBox.radioGroup.get()
        self.limitToCharset = True
        if charset == 0:
            self.limitToCharset = False
        else:
            if charset == 2: # use selection
                if len(self.f.selection) == 0: #nothing selected
                    Message("No glyphs were selected in the font window. Word-o-mat will use any characters available in the font.")
                    self.basicsBox.radioGroup.set(1) # use font chars
                else:
                    try:
                        #self.customCharset = self.f.selection # this just gives me the glyph names
                        self.customCharset = []
                        for gname in self.f.selection:
                            if self.f[gname].unicode is not None: # make sure this does what it should
                                try: 
                                    self.customCharset.append(unichr(int(self.f[gname].unicode)))
                                except ValueError:
                                    pass 
                        #for entry in self.customCharset:
                        #    print entry
                    except AttributeError: 
                        pass        
                
        self.requiredLetters = self.getInputString(self.reqBox.mustLettersBox, False)
        self.requiredGroups[0] = self.getInputString(self.reqBox.group1box, True) 
        self.requiredGroups[1] = self.getInputString(self.reqBox.group2box, True) 
        self.requiredGroups[2] = self.getInputString(self.reqBox.group3box, True)
        self.banRepetitions = self.reqBox.checkbox0.get()
        self.outputWords = [] #initialize/empty
        
        
        self.source = self.basicsBox.source.get()
        languageCount = len(self.textfiles)
        if self.source == languageCount: # User Dictionary    
            self.allWords = self.dictWords["user"]
        elif self.source == languageCount+1: # Custom word list
            try:
                if self.customWords != []:
                    self.allWords = self.customWords
                else:
                    self.allWords = self.dictWords["ukacd"] 
                    self.basicsBox.source.set(0)
            except AttributeError:
                self.allWords = self.dictWords["ukacd"] 
                self.basicsBox.source.set(0)
        else: # language lists
            for i in range(languageCount):
                if self.source == i:
                    self.allWords = self.dictWords[self.textfiles[i]]
                
        # store new values as defaults
        extDefaults = {
            "wordCount": self.wordCount, 
            "minLength": self.minLength, 
            "maxLength": self.maxLength, 
            "case": self.case, 
            "limitToCharset": self.writeExtDefaultBoolean(self.limitToCharset), 
            "source": self.source,
            }
        for key, value in extDefaults.iteritems():
            setExtensionDefault("com.ninastoessinger.word-o-mat."+key, value)
                
        # go make words
        if self.checkInput(self.limitToCharset, self.fontChars, self.customCharset, self.requiredLetters, self.minLength, self.maxLength, self.case) == True:
        
            checker = wordChecker(self.limitToCharset, self.fontChars, self.customCharset, self.requiredLetters, self.requiredGroups, self.banRepetitions, self.minLength, self.maxLength)
            for i in self.allWords:
                if len(self.outputWords) >= self.wordCount:
                    break
                else:
                    w = choice(self.allWords)
                    if self.case == 1:   w = w.lower()
                    elif self.case == 2: w = w.title()
                    elif self.case == 3: w = w.upper()
                    if checker.checkWord(w, self.outputWords):
                        self.outputWords.append(w)  
            # output
            if len(self.outputWords) < 1:
                Message("word-o-mat: no matching words found <sad trombone>")
            else:
                joinString = " "
                #if self.reqBox.delimiterRadio.get() == 1:
                if self.reqBox.listOutput.get() == True:
                    joinString = "\\n"
                    self.outputWords = self.sortWordsByWidth(self.outputWords) ##### NEW / EXPERIMENTAL FEATURE
                outputString = joinString.join(self.outputWords)
                try:
                    sp = OpenSpaceCenter(CurrentFont())
                    sp.setRaw(outputString)
                except:
                    if warned == False:
                        Message("No open fonts found; word-o-mat will output to the Output Window.")
                    warned = True
                    print "word-o-mat:", outputString
        else:
            print "word-o-mat: Aborted because of errors"
def OpenRoboFontProject(path):
    root = os.path.dirname(path)
    project = readPlist(path)

    documentController = NSDocumentController.sharedDocumentController()
    delegate = NSApp().delegate()

    openFileNames = [window.representedFilename() for window in NSApp().windows()]

    for fileName, data in project["documents"].items():

        isUntitled = fileName == "untitled"

        if not isUntitled:
            if not os.path.exists(fileName):
                fileName = os.path.abspath(os.path.join(root, fileName))

            if not os.path.exists(fileName):
                continue

            if fileName in openFileNames:
                continue

        data.sort(key=lambda item: item.get("name") != "FontWindow")

        for windowData in data:
            name = windowData["windowName"]
            x, y, w, h = windowData["frame"]

            if isUntitled:
                if name == "FontWindow":
                    RFont()
                elif name == "ScriptingWindow":
                    delegate.scriptingWindow_(None)
                elif name == "FeatureWindow":
                    delegate.newFeature_(None)

            else:
                url = NSURL.fileURLWithPath_(fileName)
                doc, error = documentController.openDocumentWithContentsOfURL_display_error_(url, True, None)
                if error:
                    delegate.application_openFile_(NSApp(), fileName)

            window = NSApp().mainWindow()

            vanillaWrapper = None
            if hasattr(window.delegate(), "vanillaWrapper"):
                vanillaWrapper = window.delegate().vanillaWrapper()

            if vanillaWrapper:
                font = CurrentFont()
                if name == "GlyphWindow":
                    window = OpenGlyphWindow(font[windowData["glyphName"]], newWindow=True)
                    window.w.getNSWindow().setFrame_display_animate_(((x, y), (w, h)), True, False)
                    continue

                elif name == "SpaceCenter":
                    spaceCenter = OpenSpaceCenter(font)
                    spaceCenter.setPointSize(windowData["pointSize"])
                    spaceCenter.setPre(windowData["pre"])
                    spaceCenter.setAfter(windowData["after"])
                    spaceCenter.set(windowData["input"])

                    window = CurrentSpaceCenterWindow()
                    window.w.getNSWindow().setFrame_display_animate_(((x, y), (w, h)), True, False)
                    continue

            window.setFrame_display_animate_(((x, y), (w, h)), True, False)

    for windowData in project["toolWindows"]:
        name = windowData["windowName"]
        x, y, w, h = windowData["frame"]

        if name == "DebugWindow":
            window = OutputWindow()
            window.show()
            window.w.getNSWindow().setFrame_display_animate_(((x, y), (w, h)), True, False)

        elif name == "InspectorWindow":
            try:
                # a little bit hacky
                # will move to mojo.UI in the upcoming releases
                window = delegate._inspectorWindow.w.getNSWindow()
            except:
                window = None
            if window is None:
                delegate.openInspector_(None)
                window = delegate._inspectorWindow.w.getNSWindow()
            window.setFrame_display_animate_(((x, y), (w, h)), True, False)

    if "execute" in project:
        try:
            ScriptRunner(text=project["execute"])
        except:
            import traceback
            print traceback.format_exc(5)
class SpaceCenterKerning(object):

    """class for SpaceCenterKerning"""

    def __init__(self):

        self.font = CurrentFont()
        self.spaceCenter = None
        if self.font:
            addObserver(self, 'SpaceCenterObserver', 'spaceCenterDidOpen')
            self.spaceCenter = OpenSpaceCenter(self.font, newWindow=True)

            # addObserver(self, None, 'spaceCenterDraw')
            addObserver(self, 'pressedKey', 'spaceCenterKeyDown')
            addObserver(self, 'closeSpaceCenter', 'spaceCenterWillClose')

            # get kerning from CurrentFont and build text list
            self.pairsTextCheck = []
            self.kKeys = self.getKerningPairsRef(self.font)
            # get reference pairs for flipping
            self.refPairs = [pair[0] for pair in self.kKeys]

            for key, gkey in self.kKeys:
                self.pairsTextCheck.append(self.returnPattern(key))

            # index of text
            self.i = 0
            self.maxi = len(self.kKeys)

            self.spaceCenter.set(self.pairsTextCheck[self.i])

        else:
            message('You need to open a font first!')

    def SpaceCenterObserver(self, info):
        if self.spaceCenter:
            self.spaceCenter.set(self.pairsTextCheck[self.i])
            self.updateSpaceCenter()

    def pressedKey(self, info):
        event = info['event']
        pair = self.kKeys[self.i][1]
        keyCode = event.keyCode()

        # modifier key? alt, shift, None
        if event.modifierFlags() == 11010336:
            kIncrement = 1
        elif event.modifierFlags() == 10617090:
            kIncrement = 5
        else:
            kIncrement = 10

        # down, up, left, right keyCodes
        if keyCode == 125:
            self.i += 1
        elif keyCode == 126:
            self.i -= 1
        elif keyCode == 123:
            self.font.kerning[pair] -= kIncrement
        elif keyCode == 124:
            self.font.kerning[pair] += kIncrement
        # flip pair: command-shift-f
        elif event.modifierFlags() == 1179914 and keyCode == 3:
            # print 'command-shift-f hit!'
            refPair = self.kKeys[self.i][0]
            flippedPair = refPair[1], refPair[0]
            if flippedPair in self.refPairs:
                self.i = self.refPairs.index(flippedPair)
            else:
                print 'Flipped pair (%s, %s) has no kern value' % refPair

        # reset if self.i is out of range
        if self.i == self.maxi or self.i == -self.maxi:
            self.i = 0

        self.spaceCenter.set(self.pairsTextCheck[self.i])

    def getKerningPairsRef(self, font):
        """use only the main glyph from kerning group and keep the reference"""
        kerningRef = font.kerning.keys()[:]

        for k in kerningRef:
            left, right = k

            if left in font.groups:
                groupGlyphs = font.groups[left]
                groupGlyphs.sort()
                # get first glyphname in the group
                leftRef = groupGlyphs[0]
            else:
                leftRef = left

            if right in font.groups:
                groupGlyphs = font.groups[right]
                groupGlyphs.sort()
                # get first glyphname in the group
                rightRef = groupGlyphs[0]
            else:
                rightRef = right

            i = kerningRef.index(k)
            kerningRef[i] = (leftRef, rightRef), (left, right)

        kerningRef.sort()
        return kerningRef

    def returnPattern(self, pair):
        """returns the pattern for each kerning pair for its use in the SpaceCenter"""
        left, right = pair
        pattern = 'H/O/H/%s/%s/H/O/H/\\n/H/H/H/%s/%s/H/H/H/\\n/O/O/O/%s/%s/o/o/o/\\n/X/H/X/%s/%s/x/o/x' % (
            left, right, left, right, left, right, left, right,)
        return pattern

    def closeSpaceCenter(self, info):
        """remove Observers when closing the custom SpaceCenter"""
        removeObserver(self, 'spaceCenterDidOpen')
        # removeObserver(self, 'spaceCenterDraw')
        removeObserver(self, 'spaceCenterWillClose')
        removeObserver(self, 'spaceCenterKeyDown')
Example #20
0
    def makeWords(self, sender=None):
        """Parse user input, save new values to prefs, compile and display the resulting words.
        
        I think this function is too long and bloated, it should be taken apart. ########
        """

        global warned
        self.f = CurrentFont()

        if self.f is not None:
            self.fontChars, self.glyphNames = self.fontCharacters(self.f)
            self.glyphNamesForValues = {
                self.fontChars[i]: self.glyphNames[i]
                for i in range(len(self.fontChars))
            }
        else:
            self.fontChars = []
            self.glyphNames = []

        self.wordCount = self.getIntegerValue(self.g1.wordCount)
        self.minLength = self.getIntegerValue(self.g1.minLength)
        self.maxLength = self.getIntegerValue(self.g1.maxLength)
        self.case = self.g1.case.get()
        self.customCharset = []

        charset = self.g1.base.get()
        self.limitToCharset = True
        if charset == 0:
            self.limitToCharset = False

        elif charset == 2:  # use selection
            if len(self.f.selection) == 0:  # nothing selected
                Message(
                    "word-o-mat: No glyphs were selected in the font window. Will use any characters available in the current font."
                )
                self.g1.base.set(1)  # use font chars
            else:
                try:
                    self.customCharset = []
                    for gname in self.f.selection:
                        if self.f[gname].unicode is not None:
                            try:
                                self.customCharset.append(
                                    unichr(int(self.f[gname].unicode)))
                            except ValueError:
                                pass
                except AttributeError:
                    pass

        elif charset == 3:  # use mark color
            c = self.g1.colorWell.get()

            if c is None:
                pass
            elif c.className(
            ) == "NSCachedWhiteColor":  # not set, corresponds to mark color set to None
                c = None

            self.customCharset = []
            self.reqMarkColor = (c.redComponent(), c.greenComponent(),
                                 c.blueComponent(),
                                 c.alphaComponent()) if c is not None else None
            for g in self.f:
                if g.mark == self.reqMarkColor:
                    try:
                        self.customCharset.append(unichr(int(g.unicode)))
                    except:
                        pass
            if len(self.customCharset) == 0:
                Message(
                    "word-o-mat: Found no glyphs that match the specified mark color. Will use any characters available in the current font."
                )
                self.g1.base.set(1)  # use font chars
                self.toggleColorSwatch(0)

        self.matchMode = "text" if self.g2.matchMode.get(
        ) == 0 else "grep"  # braucht es diese zeile noch?

        self.requiredLetters = self.getInputString(
            self.g2.textMode.mustLettersBox, False)
        self.requiredGroups[0] = self.getInputString(
            self.g2.textMode.group1box, True)
        self.requiredGroups[1] = self.getInputString(
            self.g2.textMode.group2box, True)
        self.requiredGroups[2] = self.getInputString(
            self.g2.textMode.group3box, True)
        self.matchPattern = self.g2.grepMode.grepBox.get()

        self.banRepetitions = self.g3.checkbox0.get()
        self.outputWords = []  # initialize/empty

        self.source = self.g1.source.get()
        languageCount = len(self.textfiles)
        if self.source == languageCount:  # User Dictionary
            self.allWords = self.dictWords["user"]
        elif self.source == languageCount + 1:  # Use all languages
            for i in range(languageCount):
                # if any language: concatenate all the wordlists
                self.allWords.extend(self.dictWords[self.textfiles[i]])
        elif self.source == languageCount + 2:  # Custom word list
            try:
                if self.customWords != []:
                    self.allWords = self.customWords
                else:
                    self.allWords = self.dictWords["ukacd"]
                    self.g1.source.set(0)
            except AttributeError:
                self.allWords = self.dictWords["ukacd"]
                self.g1.source.set(0)
        else:  # language lists
            for i in range(languageCount):
                if self.source == i:
                    self.allWords = self.dictWords[self.textfiles[i]]

        # store new values as defaults

        markColorPref = self.reqMarkColor if self.reqMarkColor is not None else "None"

        extDefaults = {
            "wordCount": self.wordCount,
            "minLength": self.minLength,
            "maxLength": self.maxLength,
            "case": self.case,
            "limitToCharset": self.writeExtDefaultBoolean(self.limitToCharset),
            "source": self.source,
            "matchMode": self.matchMode,
            "matchPattern": self.matchPattern,  # non compiled string
            "markColor": markColorPref,
        }
        for key, value in extDefaults.iteritems():
            setExtensionDefault("com.ninastoessinger.word-o-mat." + key, value)

        # go make words
        if self.checkInput(self.limitToCharset, self.fontChars,
                           self.customCharset, self.requiredLetters,
                           self.minLength, self.maxLength, self.case) == True:

            checker = wordcheck.wordChecker(self.limitToCharset,
                                            self.fontChars,
                                            self.customCharset,
                                            self.requiredLetters,
                                            self.requiredGroups,
                                            self.matchPatternRE,
                                            self.banRepetitions,
                                            self.minLength,
                                            self.maxLength,
                                            matchMode=self.matchMode)

            for i in self.allWords:
                if len(self.outputWords) >= self.wordCount:
                    break
                else:
                    w = choice(self.allWords)
                    if self.case == 1: w = w.lower()
                    elif self.case == 2:
                        # special capitalization rules for Dutch IJ
                        # this only works when Dutch is selected as language, not "any".
                        try:
                            ijs = ["ij", "IJ", "Ij"]
                            if self.languageNames[
                                    self.source] == "Dutch" and w[:2] in ijs:
                                wNew = "IJ" + w[2:]
                                w = wNew
                            else:
                                w = w.title()
                        except IndexError:
                            w = w.title()
                    elif self.case == 3:
                        # special capitalization rules for German double s
                        if u"ß" in w:
                            w2 = w.replace(u"ß", "ss")
                            w = w2
                        w = w.upper()

                    if checker.checkWord(w, self.outputWords):
                        self.outputWords.append(w)

            # output
            if len(self.outputWords) < 1:
                Message("word-o-mat: no matching words found <sad trombone>")
            else:
                joinString = " "
                if self.g3.listOutput.get() == True:
                    joinString = "\\n"
                    self.outputWords = self.sortWordsByWidth(self.outputWords)
                outputString = joinString.join(self.outputWords)
                try:
                    sp = OpenSpaceCenter(CurrentFont())
                    sp.setRaw(outputString)
                except:
                    if warned == False:
                        Message(
                            "word-o-mat: No open fonts found; words will be displayed in the Output Window."
                        )
                    warned = True
                    print "word-o-mat:", outputString
 def openClusterInSpaceCenterCallback(self, sender):
     spaceCenter = OpenSpaceCenter(self.glyph.font)
     spaceCenter.set([glyph.glyph.name for glyph in self.glyphList])