---
# System prepended metadata

title: hello word

---

# hello word

## sous-titre

### sous-sous-titre

```
ceci est du code ;
if Romain is a geek
then
xvxv

fin if
```

Python :
```python=
# -*- coding: utf-8 -*-

### On fait les imports qui vont bien
import FreeCAD as App
import FreeCADGui as Gui
from PySide import QtGui

separateur=" " 	# classiquement mettre " " ainsi les blancs seront remplacés par nouveauCaract
nouveauCaract=''  	#Mettre par exemple "_" pour que les séparateurs soit remplacés par "_". Mettre "" pour ne pas avoir de séparateur
majuscule=True 	#mettre à True si on veut que "Diametre du cercle" devienne "DiametreDuCercle"
changeTexteCellule=False # le texte ne sera changé que si changeTexteCellule est à True. Cela ne change rien pour l'allias lui-même
premierCaractereEnMinuscule=True #Force le premier caractère à être en minuscule

# liste des caractères devant être remplacés par un équivalent. par exemple 'é' sera remplacé par 'e'
caracEquivalents =[ ['é','e'],['è','e'],['à','a'],['@','a'],['&','e'],['ç','c'],['²','2'],["'",''] ]

def remplaceCartatParEquivalent(caractere):
# remplace un caractère par sn équivalent sil existe
	caracResult=caractere	
	for couple in caracEquivalents:
		if (couple[0]==caractere):
			caracResult=couple[1]
			break
	return caracResult


def remplaceCararcDansMot(mot):
#remplace tous les caractères du mot par son équivalent s'il existe
	motResult=mot
	for caract in mot:
		a=remplaceCartatParEquivalent(caract)
		motResult=motResult.replace(caract,a)
	return motResult



def traitementChaineSource(chaineSource,separateur,nouveauCaract,majuscule):
# Si séparateur  vaut ' ' et nouveauCaract vaut '_', et majuscule vaut True
# transforme "Diametre du cylindre" en "Diametre_Du_Cylindre"
	chaineResult=''
	first=True
	carctDeSeparation=''
	for mots in chaineSource.split(separateur):	
		mots=remplaceCararcDansMot(mots)
		if (not (first)):
			carctDeSeparation=nouveauCaract	
		if (majuscule):
			chaineResult=chaineResult+nouveauCaract+mots[:1].upper()+mots[1:]
			# On utilise "[:1]" au lieu de "[0]", car ce dernier plante en cas de chaine vide (ce qui arrive si la cellule est vide)
		else:
			chaineResult=chaineResult+nouveauCaract+mots
	if premierCaractereEnMinuscule :
		chaineResult=chaineResult[:1].lower()+chaineResult[1:]
	return chaineResult


def trouveSheet(fenetreActive):
# renvoie le spreadSheet si c'est la fenêtre active
	sheet = App.ActiveDocument.getObjectsByLabel(fenetreActive.windowTitle()) # On essaye de trouver la feuille correspondant à la fenêtre à partir du nom de la fenêtre

	if len(sheet) == 0 and fenetreActive.windowTitle()[-3:] == '[*]': # Si aucune feuille correspondante n'a été trouvée...
		# ... On sait que FreeCAD ajoute au nom de la fenêtre les caractères "[*]" quand la feuille a été modifiée ...
		# ... et seulement dans le cas ou la feuille n'a jamais été renommée (!!!!!) ...
		sheet = App.ActiveDocument.getObjectsByLabel(fenetreActive.windowTitle()[:-3]) # ... Donc on réessaye sans les 3 derniers caractères

	if len(sheet) != 1: # Si aucune feuille n'a été trouvée (ou plusieurs feuilles ont été trouvées)
		App.Console.PrintError("Can't find sheet : {}\n".format(fenetreActive.windowTitle())) # On imprime une erreur dans la rapport
		return ''
	else:
		sheet = sheet[0] # La feuille est la seule qui a été trouvée par la recherche précédente
		return sheet
		
aw = Gui.getMainWindow().centralWidget().activeSubWindow() # On stocke la fenêtre active		
sheet=trouveSheet(aw)	

if (sheet!=''):
	sel_items = aw.widget().findChild(QtGui.QTableView).selectedIndexes() # On récupère la liste complète de toutes les cellules sélectionnées
	proceed = True # Un petit drapeau qui indiquera si on doit vraiment procéder
	for item in sel_items: # On parcourt les cellules sélectionnées
		if item.column() != sel_items[0].column(): # Si une des cellules n'est pas dans la même colonne que la première
			### On affiche un dialogue demandant à l'utilisateur s'il est sûr de son coup
			if QtGui.QMessageBox.warning(Gui.getMainWindow(),
			"Warning","""Selected cells aren't all in the same column.
	Proceed anyway ?""",
			QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel) == QtGui.QMessageBox.Cancel: # Si l'utilisateur annule

				proceed = False # On ne procèdera pas aux changements

			break # Pas la peine de continuer à analyser les colonnes à partir du moment ou au moins 2 ne sont pas sur la même colonne
	
	if proceed: # Si on doit continuer à procéder

		### On définit une fonction qui renverra l'identifiant de la cellule à partir de ses numéros de ligne (r) et colonne (c)
		### Les numéros commencent à 0 pour la première ligne/colonne
		### On gère correctement les colonnes avec un identifiant à 2 lettres
		cellName = lambda r,c:'{}{}{}'.format(chr(c//26 + 64) if c//26 > 0 else '', chr(c%26+65), r+1)

		for item in sel_items: # On parcourt les cellules sélectionnées
			cell = cellName(item.row(),item.column()) # On récupère l'identifiant de la cellule
			next_cell = cellName(item.row(), item.column()+1) # On récupère l'identifiant de la cellule voisine à droite
			activeCellContenu=sheet.getContents(cell)

			# traitement de la chaine de caractère contenue dans la cellule
			activeCellContenu=traitementChaineSource(activeCellContenu,separateur,nouveauCaract,majuscule)
			if changeTexteCellule:# si le paramètre changeTexteCellule est à True alors on remplace le texte de la cellule
				sheet.set(cell, activeCellContenu)
			alias=activeCellContenu
	
			try: # Bloc try pour récupérer les erreurs
				sheet.setAlias(next_cell, alias) # On attribue l'alias à la cellule voisine de droite

			except ValueError: # Si une erreur "ValueError" est déclenchée (ce qui arrive quand l'alias n'est pas valide)
				App.Console.PrintWarning("Can't set alias for cell {} : {} isn't valid\n".format(next_cell, alias)) # On prévient l'utilisateur dans le rapport
```

Si tu veux tu peux mettre en **gras** ou en *italique* ou ~~strike~~

Quand je prends mes notes :
- je fais des items
et d’autres items
> []
    - et des sous-items
    - etc.
- et encore d’autres

1. ou les numéroter
2. lol
3. plouf

- [x] truc à cocher
- [ ] truc aussi à cocher



| Column 1 | Column 2 | Column 3 |
| -------- | -------- | --------:|
| Text     | Text     |     Text |


ligne horizontale

---

maths : $x+1 = e^3$

![alt](https://i.imgur.com/3GwVQPr.png)
