IDE, coloration syntaxique et principe de programmation..

IDE, coloration syntaxique et principe de programmation.. - Programmation

Marsh Posté le 07-08-2002 à 22:41:40    

vala pour "m'amuser" :D je souhaite me faire un micro- ide en c++  (mais micro)
 
 
 
je me pose des questions au niveau des principes de programmation( pas les algos) de la coloration syntaxique
 
 
1- je me fais un tableau des lignes de ma feuille de code  ( un tableau de strings-lignes )
sur lequel je travaille ?
 
 [dans le cas de c++builder je fais un TRichEdit, je travaille directement dessus  ?]
 
2- j'appelle ma "fonction de coloration" a chaque nouveau caractere appuyé ?
 
vala, je demande pas des algos, c a moi de les faire, mais juste les grandes lignes du principe

Reply

Marsh Posté le 07-08-2002 à 22:41:40   

Reply

Marsh Posté le 07-08-2002 à 23:06:31    

ben ca dépend bcp du niveau de coloration que tu veux : si tu veux juste une coloration des mots clef, des chaines et des commentaires c'est facile. par contre si tu veux un truc méga puissant (genre emacs :D ) qui gère la syntaxe du langage, là c'est chaud !

Reply

Marsh Posté le 07-08-2002 à 23:16:02    

j'ai pas dit une coloration qui gere la syntaxe du langage !
 
sinon ce serait plus une coloration
 
 
(en + je fait un stage dans la coloration chez l'oreal, alors je sais de quoi je parle :lol: :lol:)

Reply

Marsh Posté le 07-08-2002 à 23:21:30    

farib a écrit a écrit :

j'ai pas dit une coloration qui gere la syntaxe du langage !
 
sinon ce serait plus une coloration




:??:
 
quand je dis "qui gere la syntaxe du langage" je veux dire, qui est capacble de colorer différemment les noms de méthodes, les variables, etc ...

Reply

Marsh Posté le 07-08-2002 à 23:32:22    

bah moi j'ai jamais utilisé emacs, et je connais que le gras des mots clefs, les commentaires, et les strings....
 
 

Reply

Marsh Posté le 07-08-2002 à 23:38:16    

Code :
  1. ;;; Keyword regexp fontification functions.
  2. (defsubst font-lock-apply-highlight (highlight)
  3.   "Apply HIGHLIGHT following a match.
  4. HIGHLIGHT should be of the form MATCH-HIGHLIGHT, see `font-lock-keywords'."
  5.   (let* ((match (nth 0 highlight))
  6.  (start (match-beginning match)) (end (match-end match))
  7.  (override (nth 2 highlight)))
  8.     (cond ((not start)
  9.    ;; No match but we might not signal an error.
  10.    (or (nth 3 highlight)
  11.        (error "No match %d in highlight %S" match highlight)))
  12.   ((not override)
  13.    ;; Cannot override existing fontification.
  14.    (or (text-property-not-all start end 'face nil)
  15.        (put-text-property start end 'face (eval (nth 1 highlight)))))
  16.   ((eq override t)
  17.    ;; Override existing fontification.
  18.    (put-text-property start end 'face (eval (nth 1 highlight))))
  19.   ((eq override 'prepend)
  20.    ;; Prepend to existing fontification.
  21.    (font-lock-prepend-text-property start end 'face (eval (nth 1 highlight))))
  22.   ((eq override 'append)
  23.    ;; Append to existing fontification.
  24.    (font-lock-append-text-property start end 'face (eval (nth 1 highlight))))
  25.   ((eq override 'keep)
  26.    ;; Keep existing fontification.
  27.    (font-lock-fillin-text-property start end 'face (eval (nth 1 highlight)))))))
  28. (defsubst font-lock-fontify-anchored-keywords (keywords limit)
  29.   "Fontify according to KEYWORDS until LIMIT.
  30. KEYWORDS should be of the form MATCH-ANCHORED, see `font-lock-keywords',
  31. LIMIT can be modified by the value of its PRE-MATCH-FORM."
  32.   (let ((matcher (nth 0 keywords)) (lowdarks (nthcdr 3 keywords)) highlights
  33. (lead-start (match-beginning 0))
  34. ;; Evaluate PRE-MATCH-FORM.
  35. (pre-match-value (eval (nth 1 keywords))))
  36.     ;; Set LIMIT to value of PRE-MATCH-FORM or the end of line.
  37.     (if (not (and (numberp pre-match-value) (> pre-match-value (point))))
  38. (setq limit (line-end-position))
  39.       (setq limit pre-match-value)
  40.       (when (and font-lock-multiline (>= limit (line-beginning-position 2)))
  41. ;; this is a multiline anchored match
  42. ;; (setq font-lock-multiline t)
  43. (put-text-property (if (= limit (line-beginning-position 2))
  44.          (1- limit)
  45.        (min lead-start (point)))
  46.      limit
  47.      'font-lock-multiline t)))
  48.     (save-match-data
  49.       ;; Find an occurrence of `matcher' before `limit'.
  50.       (while (and (< (point) limit)
  51.    (if (stringp matcher)
  52.        (re-search-forward matcher limit t)
  53.      (funcall matcher limit)))
  54. ;; Apply each highlight to this instance of `matcher'.
  55. (setq highlights lowdarks)
  56. (while highlights
  57.   (font-lock-apply-highlight (car highlights))
  58.   (setq highlights (cdr highlights)))))
  59.     ;; Evaluate POST-MATCH-FORM.
  60.     (eval (nth 2 keywords))))
  61. (defun font-lock-fontify-keywords-region (start end &optional loudly)
  62.   "Fontify according to `font-lock-keywords' between START and END.
  63. START should be at the beginning of a line."
  64.   (unless (eq (car font-lock-keywords) t)
  65.     (setq font-lock-keywords (font-lock-compile-keywords font-lock-keywords)))
  66.   (let ((case-fold-search font-lock-keywords-case-fold-search)
  67. (keywords (cdr font-lock-keywords))
  68. (bufname (buffer-name)) (count 0)
  69. keyword matcher highlights)
  70.     ;;
  71.     ;; Fontify each item in `font-lock-keywords' from `start' to `end'.
  72.     (while keywords
  73.       (if loudly (message "Fontifying %s... (regexps..%s)" bufname
  74.     (make-string (incf count) ?.)))
  75.       ;;
  76.       ;; Find an occurrence of `matcher' from `start' to `end'.
  77.       (setq keyword (car keywords) matcher (car keyword))
  78.       (goto-char start)
  79.       (while (and (< (point) end)
  80.    (if (stringp matcher)
  81.        (re-search-forward matcher end t)
  82.      (funcall matcher end)))
  83. (when (and font-lock-multiline
  84.     (>= (point)
  85.         (save-excursion (goto-char (match-beginning 0))
  86.           (forward-line 1) (point))))
  87.   ;; this is a multiline regexp match
  88.   ;; (setq font-lock-multiline t)
  89.   (put-text-property (if (= (point)
  90.        (save-excursion
  91.          (goto-char (match-beginning 0))
  92.          (forward-line 1) (point)))
  93.     (1- (point))
  94.          (match-beginning 0))
  95.        (point)
  96.        'font-lock-multiline t))
  97. ;; Apply each highlight to this instance of `matcher', which may be
  98. ;; specific highlights or more keywords anchored to `matcher'.
  99. (setq highlights (cdr keyword))
  100. (while highlights
  101.   (if (numberp (car (car highlights)))
  102.       (font-lock-apply-highlight (car highlights))
  103.     (font-lock-fontify-anchored-keywords (car highlights) end))
  104.   (setq highlights (cdr highlights))))
  105.       (setq keywords (cdr keywords)))))
  106. ;;; End of Keyword regexp fontification functions.


 
ca ressemble à ça le code de font-lock.el de emacs, si le coeur t'en dis :lol:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 07-08-2002 à 23:41:59    

blague a part... z'avez pas des pties réponses pour mes deux questions ?

Reply

Marsh Posté le 07-08-2002 à 23:48:14    

farib a écrit a écrit :

bah moi j'ai jamais utilisé emacs, et je connais que le gras des mots clefs, les commentaires, et les strings....




pauvre de toi ... ;)
 
allez, je te file un exemple : de ce que ca peut donner :  
http://perso.wanadoo.fr/vieuxbenou/divers/emacs_cc.jpg

Reply

Marsh Posté le 07-08-2002 à 23:51:41    

farib a écrit a écrit :

blague a part... z'avez pas des pties réponses pour mes deux questions ?




eh, ca vous intéresse des fois :D  
 
(ps : je vois pas ce ke le vert et le caca d'oie apportent au niveau lisibilité...)

Reply

Marsh Posté le 07-08-2002 à 23:53:46    

farib a écrit a écrit :

 
eh, ca vous intéresse des fois :D  
 
(ps : je vois pas ce ke le vert et le caca d'oie apportent au niveau lisibilité...)




pfff les couleurs ca se configure. elle est vraiment conne ta remarque ...  
 
L'intérêt me paraît pourtant évident : tu vois immédiatement les déclarations de variables, de méthodes, les types, etc ...

Reply

Marsh Posté le 07-08-2002 à 23:53:46   

Reply

Marsh Posté le 08-08-2002 à 00:11:02    

farib a écrit a écrit :

blague a part... z'avez pas des pties réponses pour mes deux questions ?




 
et ca :cry: :cry: :cry:

Reply

Marsh Posté le 08-08-2002 à 10:25:04    

Pour faire un truc de ce genre qui tienne la route, personnelement j'utiliserais Lex&Yacc (sutout Lex en fait)
 
Lex permet de créer facilement un programme d'analyse syntaxique en donnant des mots clef et une syntaxe

Reply

Marsh Posté le 08-08-2002 à 10:30:41    

oui, masi moi je veux fair eun truc simple, et en c++ :d
 
mots clef en gras, strings, commentaires....

Reply

Marsh Posté le 08-08-2002 à 11:20:44    

bon ben c'est tout con à faire. C'est quoi ta question exactement ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed