CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [C++/Qt] Parser CSS

DébutPage précedente
1
Page suivantePage suivante
Pseudo supprimé
Niveau 10
25 juillet 2014 à 21:27:07

Bonsoir tous :)

Je dev actuellement un plugin pour l'IDE QtCreator et je me retrouve à devoir écrire un parser CSS (qss en fait).

Mon but est de notamment vérifier que tout le contenu du fichier courant est valide d'un point de vue syntaxique.

Mon problème n'est pas de me conformer à l'API (qui est assez mal documentée x) mais j'y arrive), mais de concevoir le parser.

D'après mes recherches, l'utilisation de regexp est déconseillée.
Je dois donc parser le fichier ligne par ligne.

(faut savoir qu'en prog', j'ai un défaut, si la solution me paraît bête et conne, alors elle est forcément mauvaise) :d) avez-vous des conseils sur les grandes lignes de l'algorithme ? Par exemple, si je détecte un sélecteur Qt, je lis les caractères qui suivent jusqu'à trouver une accolade ouvrante, puis la fermante, puis vérifier la validité des propriétés contenues à l'intérieur du bloc, etc etc... ?

Merci =)

Pseudo supprimé
Niveau 10
26 juillet 2014 à 01:50:23

Bonne nuit ! :hap:

Quand tu dis vérifier la validité des propriétés contenues, tu parles d'interdire des noms de propriétés qui n'existent pas ? Parce que dans ce cas je pense que les Regex sont mal adaptées, du moins pour faire un seul test global. Néanmoins elles peuvent être utiles pour au moins récupérer le contenu des paires clés/valeurs. Je viens de voir le QSS il faut faire attention aux ; optionnels. Ainsi si tu vois que la clé est background, tu doit t'attendre à une couleur derrière, mais il y en a plusieurs types dont tu pourrais appliquer plusieurs Regex etc...

Pseudo supprimé
Niveau 10
26 juillet 2014 à 10:15:57

Re :hap:

Voilà, je compte utiliser l'API de QtCreator pour souligner les noms de propriétés inexistantes, les types non acceptés ou reconnus comme étant des valeurs de propriétés...

Merci pour ta réponse, ça va bien m'aider :-)

Je reviens à la vérification de la validité globale de la feuille de style.

Comment pourrais-je repérer par exemple une erreur de ce type :

------------

QFrame {
}

texte inutile et invalide

QWidget
{}

-----------

Car les regexp que j'ai faites ne captent évidemment que les 2 blocs QSS ci-dessus. Le problème est de repérer la phrase entre ces blocs qui invalide toute la stylesheet.

Et là, à part parser ligne par ligne, et faire un algorithme chiant, je vois pas :hap:

Pseudo supprimé
Niveau 10
26 juillet 2014 à 10:24:15

Je pourrais utiliser les regexp et voir s'il existe un quelconque texte entre les blocs récupérés ?

Pseudo supprimé
Niveau 10
26 juillet 2014 à 16:00:31

J'ai pas encore trop vu les Regexp en C++ mais peut-être tu pourrais mettre des parenthèses capturantes après l'accolade fermante détectée, qui va chercher s'il y a des caractères non blancs. Au final s'il y en a c'est un problème.

[DenshaOtoko] [DenshaOtoko]
MP
Niveau 11
27 juillet 2014 à 15:56:42

peut être que tu peux essayer de parcourir ligne par ligne

puis avoir un booleen qui est à vrai quand t'es dans un bloc, et à faux quand t'es pas dans un bloc

quand tu tombes sur accolade ouvrante, tu mets un booleen à vrai
puis ensuite agir en conséquence de certaines cas comme:

si tu tombes sur accolade ouvrante alors que ton booleen est vrai (déjà dans un bloc) -> ça va pas
si tu tombes sur accolade fermante alors que ton booleen est faux (accolade fermante alors que t'as pas dans un bloc) -> ça va pas
si tu tombes sur accolade fermante et booleen vrai -> c'est ok, ça veut dire que ton bloc se ferme, donc ensuite on met le booleen à faux

ensuite si tu tombes sur du texte alors que ton booleen est à faux, tu verifie si c'est un selecteur (QFrame/QWidget etc puisque c'est pas dans le bloc le selecteur) s'il y a une accolade ouvrante sur la ligne, ou dans la ligne suivante, ou alors voir aussi si c'est du commentaire à l'aide de regex par exemple un truc qui devrait ressembler à #\s*/\*.*\*/\s*# pour voir si c'est de la forme

[espace blanc (tab/espace/etc)]/* moncommentaire */[espace blanc (tab/espace/etc)]

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment