def deleteCurrentLine (): # supprime la ligne ou les lignes sélectionnées sous le curseur nb = 0 iLineStart, iLineEnd, j = 0, 0, 0 d, f = 0, 0 # on trouve le nombre de lignes total du document nb = sp.window.curPage.lineCount-1 # on trouve les numéros des lignes de début et de fin iLineStart = sp.window.curPage.lineOfOffset (sp.window.curPage.selectionStart) iLineEnd = sp.window.curPage.lineOfOffset (sp.window.curPage.selectionEnd) # on identifie la position de début du texte à supprimer d = sp.window.curPage.lineStartOffset(iLineStart) # on identifie la position de fin du texte à supprimer # si la fin est la dernière ligne if iLineEnd == nb: # la position de fin est la fin de tout le texte f = len(sp.window.curPage.text) else: # ce n'est pas la dernière ligne # la fin est le début de la ligne suivante f = sp.window.curPage.lineStartOffset(iLineEnd+1) # end--if # sélection de la portion à supprimer sp.window.curPage.select(d, f) # suppression sp.window.curPage.selectedText = "" # lecture de la nouvelle ligne courante sp.say(sp.window.curPage.line(sp.window.curPage.curLine), True)
def sayText(s, stopSpeech=False): """ si autorisé, fait lire un texte par la synthèse vocale """ flag = True try: flag = sp.window.menus["accessibility"]["vocalSynthesis"].checked except: pass # si synthèse autorisée if flag == True: sp.say(s, stopSpeech)
def previous_function(): page = sp.window.curPage pre_position = page.position #page.curLine -= 1 page.position = page.lineStartOffset(page.curLine) if page.find(regex['function'], scase=False, regex=True, up=True, stealthty=False): page.position = page.selectionStart sp.say(page.curLineText) else: sp.window.messageBeep(0)
def next_struct(): page = sp.window.curPage pre_position = page.position page.curLine += 1 if page.find(regex['struct'], scase=False, regex=True, up=False, stealthty=False): page.position = page.selectionStart sp.say(page.curLineText, True) else: page.position = pre_position sp.window.messageBeep(0)
def compile (self, page): oldDir = os.getcwd() os.chdir(self.dir) proc = Process('c.bat') proc.wait() result = proc.read() os.chdir(oldDir) if not result: win.messageBeep(64) return win.messageBeep(16) say(result) p = win.new('text') p.readOnly=True p.name = msg('Compilation result') p.text = result
def onKeyUp(page, vk): global lastDifferentIndentLevel # Pour les touches tab et Shift + Tab. if vk in [9, 1033] and page.position <= page.lineSafeStartOffset( page.curLine) and not page.selectedText: sp.say( "Niveau " + str(page.lineIndentLevel(page.curLine)) + ". " + page.line(page.curLine), True) # Comme on a changé l'indentation, on met à jour la variable global lastDifferentIndentLevel = page.lineIndentLevel(page.curLine) return True # Pour la touche BackSpace. if vk == 8 and not page.selectedText: if page.position <= page.lineSafeStartOffset(page.curLine): # Si les paramètres d'indentation sont de 1 Tab ou de 1 espace, on donne le niveau. if page.indentation in [0, 1]: sp.say( "Niveau " + str(page.lineIndentLevel(page.curLine)) + ". " + page.line(page.curLine), True) else: # Le niveau d'indentation est fixé sur plus d'une espace, on donne donc le nombre d'indentations. sp.say(getIndentation() + ". " + page.line(page.curLine), True) # end if # Comme on a changé l'indentation, on met à jour la variable global lastDifferentIndentLevel = page.lineIndentLevel(page.curLine) # end if return True # Lecture de l'indentation # Si la touche est FLH, FLB, CTRL+Home, CTRL+END, PGUp, PGDown, CTRL+Up, CTRL+Down. # On donne les informations sur le mode de lecture d'entêtes utilisé. if vk in [33, 34, 38, 40, 547, 548, 550, 552] and not page.selectedText: # lecture seulement sur changement if read_indent_if_dif: if lastDifferentIndentLevel != page.lineIndentLevel(page.curLine): sp.say(getLineHeading(page.curLine), True) # end if # end if # Mode de lecture sans restriction else: sp.say(getLineHeading(page.curLine), True) # end if lastDifferentIndentLevel = page.lineIndentLevel(page.curLine) return True
def readIndentOnlyWhenChange(): """ activate or deactivate the reading of indents if change """ global menuReadIndentOnlyWhenChange global read_indent_if_dif global lastDifferentIndentLevel # bug #menuReadIndentOnlyWhenChange.checked = not(menuReadIndentOnlyWhenChange.checked) read_indent_if_dif = not (read_indent_if_dif) if read_indent_if_dif: #sayLevel() sp.say( "Activation de la lecture du niveau d'indentation si changement") else: #sayNothing() sp.say( "Désactivation de la lecture du niveau d'indentation si changement" ) # end if lastDifferentIndentLevel = sp.window.curPage.lineIndentLevel( sp.window.curPage.curLine)
def move_up(): """Move up one line and read it, return True if they position has changed, False otherwise""" page = sp.window.curPage line, col = page.licol(page.position) if line == 0: sp.window.messageBeep(0) return False # end if # On regarde si la ligne destination n'est pas plus courte. if page.lineLength(line - 1) < col: col = page.lineLength(line - 1) # end if page.position = page.licol(line - 1, col) sp.say(page.curLineText, True) return True
def move_start(): page = sp.window.curPage #On vérifie si la ligne commence directement avec du texte if page.lineStartOffset(page.curLine) == page.lineSafeStartOffset( page.curLine): page.position = page.lineStartOffset(page.curLine) #sp.window.beep(220, 100) #sp.window.beep(220, 100) # On vérifie si le curseur est au début du texte elif page.position == page.lineSafeStartOffset(page.curLine): # On se positionne au début de la ligne sur n'importe quel caractère page.position = page.lineStartOffset(page.curLine) #sp.window.beep(220, 100) else: # On se positionne sur le premier caractère qui n'est pas une espace ou une tabulation page.position = page.lineSafeStartOffset(page.curLine) #sp.window.beep(330, 100) #sp.window.beep(440, 100) if (page.textLength): sp.say(page.text[page.position], True) else: sp.say("vide")
def toggleMode(): if mode == 0: sayIndentation() sp.say("Dire les indentations", True) elif mode == 1: sayLevel() sp.say("Dire les niveaux", True) elif mode == 2: sayNothing() sp.say("Ne rien dire", True)
def delete_word_backward(): """Suprime le mots précédent ou le mots sous le curseur""" page = sp.window.curPage # Liste des caractère spéciaux où stoper la suppression char_stop = r""" .,:;!?=<>+-_)({}[]/\"'"""+"\n" # on identifie la position pos = page.position # Si on est au début du fichier, on emmet un bip if pos == 0 : sp.window.messageBeep(0) return # end if # Cas particulier, si on est sur pos à 1, on suprime jusqu'au début du fichier if pos == 1 : sp.say(page.text[0], True) page.delete(0, 1) page.position = 0 return # end if # On supprime jusqu'à trouver un des caractère spéciaux i = 2 while True : # Si on arrive au début du fichier on suprime jusque là. if pos-i == 0: sp.say(page.text[pos-i:pos], True) page.delete(pos-i, pos) page.position = 0 return # end if # Si on trouve un caractère stop on supprime jusqu'à lui, mais en le conservant. if page.text[pos-i] in char_stop : sp.say(page.text[pos-i+1:pos], True) # Suppression de la chaine entre position de départ et caractère précédent page.delete(pos-i+1,pos) page.position = pos-i+1 return # end if i += 1
def move_end(): page = sp.window.curPage page.position = page.lineEndOffset(page.curLine) if (page.textLength): sp.say(page.text[page.position - 1], True) else: sp.say("vide")
def sayCurIndentLevel(): """ say the current indent level """ page = sp.window.curPage sp.say("Niveau " + str(page.lineIndentLevel(page.curLine)) + ". ")