Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Editeur avec marquage syntaxique | |
|
+8Minibug Froggy One Jack jean_debord Yannick Jicehel JL35 Klaus 12 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 18:51 | |
| J'ai encore en mémoire que Jack envisageait à un moment de ne pas faire évoluer l'éditeur Panoramic, à partir d'un moment à définir. Personnellement, cela m'a inquiété, et j'ai cherché depuis longtemps un moyen "simple" d'avoir un éditeur multi-tab ou multi-fenêtre, au moins aussi performant que l'éditeur de Panoramic. Et j'ai trouvé !En fait, l'éditeur de Panoramic utilise, de façon interne, un objet nommé Synedit. C'est un objet en freeware, disponible sur SourceForge, ce qui en général est gage de qualité. Et il y a d'autres éditeur qui sont basés sur ce même objet. Et en particulier, je suis tombé sur un éditeur qui, comme par hasard, se nomme Synedit.exe. Editeur multi-fenêtre (chaque module source est ouvert dans une vraie fenêtre, pas dans un onglet), multi-langages (une vingtaine fournies à l'installation) et un moyen, finalement très simple, de définir son propre langage. J'ai donc pris mon courage à 2 mains (je n'en ai pas plus, malheureusement...) et j'ai fait la définition pour Panoramic. Et après installation dans Synedit, je me retrouve avec un éditeur puissant, souple, comprenant Panoramic et pouvant exécuter le code d'une fenêtre comme l'éditeur de Panoramic le fait ! C'est pas beau, ça ? Et la cerise sur le gâteau, c'est que cet éditeur sait exporter le source formaté en format RTF qui peut ainsi être collé dans une page Web, dans un RichEdit, imprimé joliment etc. Allez sur mon WebDav, dossier Synedit. Vous y trouverez un fichier texte avec les infos d'installation et deux liens pour télécharger, et le fichier contenant le profile Panoramic, à copier dans le dossier approprié après installation. Tout est documenté dans le petit fichier texte. Voici une capture écran de l'éditeur: et voici le fichier RTF généré: | |
| | | Invité Invité
| Sujet: Re: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 19:45 | |
| Bravo Klaus! Je ne télécharge pas maintenant car je suis loin de chez moi, mais la recherche avance en France. Je plaisante évidemment. Chapeau. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 20:13 | |
| Tout ça m'a l'air bien alléchant ! je vais regarder ça de plus près. Ca marche ! par contre le coloriage des mots-clés est un peu déroutant, bleu ou cyan et j'ai tout un morceau du programme qui n'est pas colorié, je ne vois pas pourquoi. Je n'ai pas vu non plus la possibilité d'afficher les numéros de lignes, ce qui est bien gênant. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 22:26 | |
| J'ai mis les commandes avec une couleur, les fonctions avec une autre, et les directives (une seule pour le moment) avec une troisième. Un choix personnel, mais modifiable. Voici ce que j'ai paramétré, avec dans l'ordre: commandes, fonctions et directives: C'est un choix personnel.Il suffit de placer tous les mots-clé de la deuxième et 3ème liste dans la première, et tout sera colorié de la même manière. Si un mot-clé n'est pas colorié, cela ne peut venir que du fait qu'il manque dans la liste. De quel mot s'agit-t-il ? Je vais le corriger si tu me l'indiques. EDIT Désolé pour la première version du post - je me suis trompé de capture ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 22:46 | |
| D'accord pour les couleurs. Pour ce qui n'est pas coloré, ce n'est pas un mot donné mais toute une zone d'une trentaine de lignes 75 lignes, et puis ça revient: et ça repart plus loin (au milieu d'une ligne) on ne voit pas bien pourquoi: Et pour afficher les numéros de lignes, c'est possible ? je n'ai pas trouvé. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 23:06 | |
| Qu'est-ce qui se passe si, dans la sub DIR, 4ème ligne après la commande SUB, tu enlèves les guillemets en fin de ligne ?
Je n'ai pas non plus trouvé le moyen de mettre les numéros de ligne Je cherche... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 23:17 | |
| En bas à droite, il y a une case indiquant le numéro de la ligne actuelle et le nombre total de lignes: et dans la barre d'outils, il y a une icône avec un doigt qui pointe dans une page: On demande alors un numéro de ligne et on y saute. Le raccourci ctrl/L fait la même chose. C'est ce qui a le plus proche à l'heure actuelle. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 23:20 | |
| Eh tu as l'oeil Klaus, je ne les avais pas vus ces guillements intempestifs. Et effectivement, une fois ôtés tout rentre dans l'ordre. C'était dans un commentaire, je ne sais pas si c'est normal mais bon...
PS oui mais ce serait quand même mieux d'avoir l'affichage de tous les numéros de lignes... Je n'ai rien trouvé dans les Editor Preferences... C'est d'autant plus regrettable que cette notion de numéros de lignes est bien présente et exploitée comme tu l'as montré.
Dernière édition par JL35 le Dim 17 Aoû 2014 - 23:28, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 23:27 | |
| Certes, JL35. J'ai mis dans un premier temps un outil gratuit en route que j'ai trouvé sur le net. Eh oui, je suis un googliste acharné ! Ce programme a le mérite de marcher et d'être configurable, pour Panoramic (la preuve), pour Delphi, mais aussi plein d'autres langages. Même les fichiers batch de MS-DOS ou WBScript...
Maintenant, je travaille actuellement sur le composant qui est à la base de cet éditeur, et qui est également utilisé par l'éditeur de Panoramic. Je commence à savoir le faire marcher, par un programme Delphi. Prochaine étape: le faire marcher à partir de Panoramic pour l'injecter dans une form Panoramic, à l'image d'un RichEdit. Et avec ce composant, on a les numéros de ligne, les marquages en cliquant dans la marge gauche et les favoris 0 à 9 positionnés par ctrl/shift/x et rejoints par ctrl/x, comme dans l'éditeur de Panoramic. Tu pourrais ainsi te faire ton propre éditeur en Panoramic si je réussis l'injection... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur avec marquage syntaxique Dim 17 Aoû 2014 - 23:29 | |
| Merci pour ces précisions Klaus, alors... wait and see. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Lun 18 Aoû 2014 - 10:36 | |
| Je viens de lire ce post. Bravo Klaus et bon courage pour l'adaption du composant en Panoramic, cela promet un nouvel éditeur digne d'intéret. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Lun 18 Aoû 2014 - 12:44 | |
| Ca commence à marcher. Je peux ouvrir, en Panoramic, plusieurs exemplaires de Synedit, dans des fenêtres indépendantes. Pour chacune, je peux la cacher/rappeler, changer certains attributs (police, présence/absence de numéros de ligne ...).
Ca progresse... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Lun 18 Aoû 2014 - 12:49 | |
| Ouahou !!!
Superbe Klaus !!!
Je vais suivre avec très grande attention toutes ces avancées. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Lun 18 Aoû 2014 - 12:55 | |
| Klaus, tant qu'à remanier, tu pourras voir pour que le chemin "source" du fichier sur lequel ont travail soit bien systématiquement mis à jour quand on change de fenêtre ?
Petite question subsidiaire: Penses-tu qu'avec cette objet, on pourrait "nativement" pouvoir plier / déplier le contenu de procédures ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Lun 18 Aoû 2014 - 12:59 | |
| Je n'en suis pas encore à charger un fichier source. Pour le moment, je saisis manuellement. Mais oui, le chemin et le nom du fichier source sera préservé pour chaque "instance" - pas de problème.
Malheureusement, Synedit n'a pas la fonctionnalité de plier du code. Désole. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Lun 18 Aoû 2014 - 14:07 | |
| Pas de problème, ce n'est pas une priorité, c'est juste bien pratique. Si tout le reste marche bien et si on en a le source, les possibilités de modifications et d'améliorations sont déjà énormes. Ajouts d'outils etc... comme ce qu'avait fait Ygeronimi il n'y a pas si longtemps ... | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Editeur avec marquage syntaxique Mar 19 Aoû 2014 - 9:58 | |
| - Jicehel a écrit:
- Petite question subsidiaire: Penses-tu qu'avec cette objet, on pourrait "nativement" pouvoir plier / déplier le contenu de procédures ?
L'éditeur Geany ( http://www.geany.org/) peut plier du code. Il fonctionne très bien avec FreeBASIC. Je ne sais pas si on peut l'adapter à Panoramic. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Mar 19 Aoû 2014 - 10:43 | |
| J'ai regardé cet outil, jean_debord. C'est intéressant, assez complet et en constante évolution, portable sur de multiples systèmes etc. D'après ce que j'ai vu, c'est facilement adaptable à Panoramic - la coloration de syntaxe peut être définie et il n'y a rien d'impossible à ce niveau. Dont acte.
C'est écrit en C/C++, et c'est écrit en tant qu'éditeur indépendant, non pas en tant que composant réutilisable. Donc, certainement une bonne alternative à Panoramic_Editor, ainsi qu'à Synedit version stand-alone. Mais cela ne remplace pas le contrôle Delphi utilisable dans une DLL en Delphi. Dommage. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Mar 19 Aoû 2014 - 12:45 | |
| Peut-être à voir avec les auteurs en les contactant directement ?
Enfin, je ne sais pas si tu en as envie, mais c'est vrai qu'au niveau de la lecture pour des gros programmes, c'est génial pour la lisibilité de pouvoir replier les procédures et ça évite la gestion des lignes fastidieuse avec les includes.
Je regarderais ce weekend, l'éditeur Geany. Si ça peut facilement être mis en place pour remplacer l'éditeur natif, ça m’intéresse. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Mar 19 Aoû 2014 - 13:45 | |
| D'après ce que j'ai vu, il de devrait pas y avoir de problème pour ajouter la coloration syntaxique de Panoramic à Geany.
Ce sur quoi je travaille, c'est un peu différent: un objet "éditeur" à injecter dans une form Panoramic. Et avec la coloration syntaxique paramétrable. Pour cela, il faut avoir un "contrôle", c'est-à-dire un composant Delphi, en freeware, que je puisse utiliser dans la DLL. Et pour le moment, je n'ai trouvé que Synedit pour cela. L'éditeur Synedit.exe que j'ai indiqué, n'est qu'un outil basé sur me même composant, tout comme l'éditeur de Panormic.
Evidemment, si Jack donne accès à ce superbe composant sous forme d'un objet Panoramic, du genre SOURCE_EDITOR N ou similaire, mon idée deviendra caduque. En attendant, je poursuis... | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Editeur avec marquage syntaxique Mer 20 Aoû 2014 - 21:36 | |
| C'est une discussion que je suis avec intérêt. Tout d'abord, je confirme que l'éditeur de PANORAMIC (et aussi l'IDE) utilise SynEdit version1.1, version qui est assez ancienne. Ce composant permet l'affichage des numéros de ligne, mais pas le pliage du code. Par contre, il permet des fonctions que je n'ai pas implantées dans l'éditeur, comme proposer un mot-clé lorsqu'on tape ses premières lettres (autocompletion). Il permet bien évidemment de colorer suivant le contexte : entre deux symboles ", c'est un texte, après ' c'est un commentaire, etc. Mais la définition des mots-clés à colorer, des commentaires et des textes est une véritable usine à gaz, et il y a un outil, livré avec ce composant (SynGen.exe) qui, à partir d'un source décrivant les mots-clés, les commentaires et les textes, génère un autre source en pascal qui doit être joint aux sources de l'éditeur lorsque je le compile. De plus, le code pascal généré par SynGen ne compile pas directement car il comporte des erreurs que je dois corriger manuellement. Pour le fun, le voici pour la version 0.9.25 : - Source pour générer un source Pascal:
TSynPanoramicSyn {first Identifier is considered to be the Class Name } tk {second Identifier is considered to be the Identifier Prefix } IdentStart '_', '0'..'9','a'..'z', 'A'..'Z', '$', '%' :: '_', '0'..'9', 'a'..'z', 'A'..'Z, '$' , '%' ::
TOKENTYPES Identifier Comment Foreground=RGB(255,0,255) Space String Foreground=RGB(130,130,130) Key Foreground=RGB(0,0,255)
|><|
KEYS { all between KEYS and |><| is considered to be a keyword } {version 0 9 25 du 19/04/2014} {#INCLUDE ne fonctionne pas même avec # dans IdentStart, alors on met INCLUDE} INCLUDE 2D_CIRCLE 2D_CLEAR 2D_FILL_COLOR 2D_FILL_CROSS 2D_FILL_DIAGONAL_CROSS 2D_FILL_DIAGONAL_DOWN 2D_FILL_DIAGONAL_UP 2D_FILL_HORIZONTAL 2D_FILL_SOLID 2D_FILL_VERTICAL 2D_FLOOD 2D_IMAGE_COPY 2D_IMAGE_PASTE 2D_LINE 2D_PEN_COLOR 2D_PEN_DASH 2D_PEN_DASH_DOT 2D_PEN_DASH_DOT_DOT 2D_PEN_DOT 2D_PEN_SOLID 2D_PEN_WIDTH 2D_POINT 2D_POLY_FROM 2D_POLY_TO 2D_RECTANGLE 2D_TARGET_IS 3D_ACTOR 3D_BOX 3D_CHAIN 3D_CHAIN_BREAK 3D_COLLISION_AS_CUBE 3D_COLLISION_AS_ELLIPSOID 3D_COLLISION_AS_FACES 3D_COLLISION_AS_POINT 3D_COLLISION_AS_SPHERE 3D_COLOR 3D_CONE 3D_CUBE 3D_CYLINDER 3D_DELETE 3D_DELETE_ALL 3D_DODECAHEDRON 3D_HIDE 3D_IMAGE_TEXTURE 3D_LINE 3D_LINE_WIDTH 3D_LOAD_OBJECT 3D_LOAD_TEXTURE 3D_LOAD_TEXTURE_BACK 3D_LOAD_TEXTURE_BOTTOM 3D_LOAD_TEXTURE_FRONT 3D_LOAD_TEXTURE_LEFT 3D_LOAD_TEXTURE_RIGHT 3D_LOAD_TEXTURE_TOP 3D_MESH 3D_MOVE 3D_PLANE 3D_POINT_OBJECT 3D_POSITION 3D_ROTATE 3D_SCALE 3D_SHOW 3D_SKYBOX 3D_SPHERE 3D_TARGET_IS 3D_TEAPOT 3D_TEXT 3D_TEXT_CHANGE 3D_TORUS 3D_TRANSPARENT 3D_U_TILE 3D_V_TILE 3D_X_POSITION 3D_X_ROTATE 3D_X_SCALE 3D_Y_POSITION 3D_Y_ROTATE 3D_Y_SCALE 3D_Z_POSITION 3D_Z_ROTATE 3D_Z_SCALE ABS ACOS ACTIVE ADR ALPHA AND APPLICATION_TITLE ASC ASIN ATN AXES_HIDE AXES_SHOW BAR_BOTH BAR_HORIZONTAL BAR_NONE BAR_VERTICAL BEEP BEEP_ERROR BEEP_EXCLAMATION BEEP_INFORMATION BEEP_QUESTION BIN_AND BIN_OR BIN_XOR BORDER_HIDE BORDER_NORMAL BORDER_SMALL BRIGHTNESS BUTTON CAM_MOVE CAM_POSITION CAM_PITCH CAM_ROLL CAM_TURN CAM_X_POSITION CAM_Y_POSITION CAM_Z_POSITION CAPTION CAPTION$ CARET_POSITION CASE CHAIN CHECK CHECKED CHR$ CLEAR CLICKED CLIPBOARD_COPY CLIPBOARD_CUT CLIPBOARD_PASTE CLIPBOARD_STRING_COPY CLIPBOARD_STRING_PASTE$ CLS COLOR COLOR_PIXEL_BLUE COLOR_PIXEL_GREEN COLOR_PIXEL_RED COMBO COMMAND_TARGET_IS CONTAINER CONTAINER_OPTION CONTRAST COS COUNT CURSOR_ARROW CURSOR_BEAM CURSOR_CROSS CURSOR_DEFAULT CURSOR_HELP CURSOR_HIDE CURSOR_HOURGLASS CURSOR_NOPARKING CURSOR_POINT DATA DATE$ DELETE DIM DIM_LOCAL DIR_CHANGE DIR_CURRENT$ DIR_DIALOG DIR_EXISTS DIR_MAKE DIR_REMOVE DISK_EXISTS DISK_KILO_FREE DISK_KILO_SIZE DISPLAY DLIST DLL_CALL0 DLL_CALL1 DLL_CALL2 DLL_CALL3 DLL_CALL4 DLL_CALL5 DLL_CALL6 DLL_OFF DLL_ON DOUBLE_CLICKED EDIT ELSE END END_IF END_SELECT END_SUB END_WHILE ERROR_ENGLISH ERROR_FRENCH ERROR_LINE ERROR_NUMBER ERROR_TYPE$ EVEN EXCEL_FILE_CLOSE EXCEL_FILE_NEW EXCEL_FILE_OPEN EXCEL_READ$ EXCEL_START EXCEL_STOP EXCEL_WRITE EXECUTE EXECUTE_WAIT EXIT_FOR EXIT_REPEAT EXIT_SUB EXIT_WHILE EXP FILE_ADD FILE_ARCHIVE FILE_ARCHIVE_OFF FILE_CLOSE FILE_COPY FILE_DELETE FILE_EOF FILE_EXISTS FILE_EXTRACT_DISK$ FILE_EXTRACT_EXTENSION$ FILE_EXTRACT_NAME$ FILE_EXTRACT_PATH$ FILE_FIND_CLOSE FILE_FIND_FIRST$ FILE_FIND_NEXT$ FILE_HIDE FILE_HIDE_OFF FILE_LOAD FILE_MOVE FILE_NAME$ FILE_OPEN_APPEND FILE_OPEN_READ FILE_OPEN_WRITE FILE_READ FILE_READ_ONLY FILE_READ_ONLY_OFF FILE_READBUF FILE_READLN FILE_READLN$ FILE_RENAME FILE_SAVE FILE_SYSTEM FILE_SYSTEM_OFF FILE_WRITE FILE_WRITEBUF FILE_WRITELN FILEBIN_BLOCK_READ FILEBIN_BLOCK_WRITE FILEBIN_CLOSE FILEBIN_HEXA_READ FILEBIN_HEXA_READ$ FILEBIN_HEXA_WRITE FILEBIN_OPEN_READ FILEBIN_OPEN_WRITE FILEBIN_POS FILEBIN_POSITION FILEBIN_READ FILEBIN_SIZE FILEBIN_WRITE FILTER FOG_COLOR FOG_DISTANCE_MAX FOG_DISTANCE_MIN FOG_OFF FOG_ON FONT_BOLD FONT_BOLD_OFF FONT_COLOR FONT_ITALIC FONT_ITALIC_OFF FONT_NAME FONT_NAMES_ADD FONT_NAMES_LOAD FONT_SIZE FONT_STRIKE FONT_STRIKE_OFF FONT_UNDERLINE FONT_UNDERLINE_OFF FOR FORM FRAC FREE FULL_SPACE GAMMA GOSUB GOTO GRID GRID_CLEAR GRID_COLUMN GRID_COLUMN_DELETE GRID_COLUMN_FIXED GRID_COLUMN_INSERT GRID_COLUMN_SIZING_OFF GRID_COLUMN_SIZING_ON GRID_COLUMN_WIDTH GRID_FIXED_COLOR GRID_LOAD GRID_ONE_COLUMN_WIDTH GRID_ONE_ROW_HEIGHT GRID_READ$ GRID_ROW GRID_ROW_DELETE GRID_ROW_FIXED GRID_ROW_HEIGHT GRID_ROW_INSERT GRID_ROW_SIZING_OFF GRID_ROW_SIZING_ON GRID_SAVE GRID_WRITE GRID_X_TO_COLUMN GRID_Y_TO_ROW HANDLE HANDLE_CANVAS HANDLE_FORM HCOS HEIGHT HEX$ HEX HIDE HINT HINT_HIDE HORIZONTAL HSIN HTAN HVIEWER IF IMAGE INACTIVE INKEY$ INPUT INPUT_MARK_OFF INPUT_MARK_ON INPUT_REDO_OFF INPUT_REDO_ON INPUT_SOURCE_IS INPUT_VISIBLE_OFF INPUT_VISIBLE_ON INSERT$ INSTR INSTR_POS INT ITEM_ADD ITEM_DELETE ITEM_INDEX$ ITEM_INDEX ITEM_INSERT ITEM_READ$ KEY_DOWN_CODE KEY_DOWN_SPECIAL KEY_UP_CODE KEY_UP_SPECIAL LABEL LEFT LEFT$ LEN LIGHT_POSITION LIGHT_X_POSITION LIGHT_Y_POSITION LIGHT_Z_POSITION LIST LOG LOG10 LOG2 LOWER$ LTRIM$ MAIN_MENU MARK_OFF MARK_ON MAX MAXIMIZE MEMO MESSAGE MESSAGE_CONFIRMATION_OK MESSAGE_CONFIRMATION_YES_NO MESSAGE_ERROR_OK MESSAGE_ERROR_YES_NO MESSAGE_INFORMATION_OK MESSAGE_INFORMATION_YES_NO MESSAGE_INPUT$ MESSAGE_INPUT MESSAGE_TEXT$ MESSAGE_WARNING_OK MESSAGE_WARNING_YES_NO MID$ MIDI_INSTRUMENT MIDI_OFF MIDI_ON MIDI_PLAY MIDI_VOLUME MIN MINIMIZE MOD MOUSE_LEFT_DOWN MOUSE_LEFT_UP MOUSE_RIGHT_DOWN MOUSE_RIGHT_UP MOUSE_X_LEFT_DOWN MOUSE_X_LEFT_UP MOUSE_X_POSITION MOUSE_X_RIGHT_DOWN MOUSE_X_RIGHT_UP MOUSE_Y_LEFT_DOWN MOUSE_Y_LEFT_UP MOUSE_Y_POSITION MOUSE_Y_RIGHT_DOWN MOUSE_Y_RIGHT_UP MOVIE NEXT NORMAL NOT NUMBER_2D_TARGET NUMBER_3D_OBJECTS NUMBER_3D_TARGET NUMBER_CHANGE NUMBER_CLICK NUMBER_COMMAND_TARGET NUMBER_CURRENT_LINE NUMBER_DOUBLE_CLICK NUMBER_EVENTS NUMBER_INPUT_SOURCE NUMBER_KEY_DOWN NUMBER_KEY_UP NUMBER_OBJECTS NUMBER_PRINT_TARGET NUMBER_SPRITE_TARGET NUMBER_SPRITES NUMBER_VARIABLES NUMERIC O3D_COLLISION O3D_OBJECT_EXISTS O3D_OBJECT_TYPE O3D_X_POSITION O3D_X_ROTATE O3D_X_SCALE O3D_Y_POSITION O3D_Y_ROTATE O3D_Y_SCALE O3D_Z_POSITION O3D_Z_ROTATE O3D_Z_SCALE OBJECT_EXISTS OBJECT_PARENT OBJECT_TYPE ODD OFF_CHANGE OFF_CLICK OFF_CLOSE OFF_DOUBLE_CLICK OFF_ERROR_GOTO OFF_KEY_DOWN OFF_KEY_UP ON_CHANGE ON_CLICK ON_CLOSE ON_DOUBLE_CLICK ON_ERROR_GOTO ON_KEY_DOWN ON_KEY_UP ON_TIMER OPEN_DIALOG OPTION OR PANEL PARALLEL_INP PARALLEL_OFF PARALLEL_ON PARALLEL_OUT PARAM_NUMBER PARAM_VALUE$ PARENT PAUSE PEEK PICTURE PLAY PLAY_WAIT POINT_OBJECT POINT_POSITION POINT_X_POSITION POINT_Y_POSITION POINT_Z_POSITION POKE POSITION POWER PRINT PRINT_LOCATE PRINT_TARGET_IS PRINT_X_LOCATE PRINT_Y_LOCATE PROGRESS_BAR READ REM REPEAT RESTORE RETURN REVERSE$ RIGHT$ RIGHT_POS$ RMDIR RND RTRIM$ SAVE_DIALOG SCANCODE SCENE2D SCENE3D SCREEN_X SCREEN_Y SCROLL_BAR SECRET_OFF SECRET_ON SELECT SELECT_READ$ SELECT_TEXT SET_FOCUS SGN SHOW SIN SORT SORT_OFF SORT_ON SOUND SPIN SPRITE SPRITE_DELETE SPRITE_DELETE_ALL SPRITE_EXISTS SPRITE_FILE_LOAD SPRITE_HIDE SPRITE_HIDE_ALL SPRITE_IMAGE_LOAD SPRITE_POSITION SPRITE_SCALE SPRITE_SHOW SPRITE_SHOW_ALL SPRITE_TARGET_IS SPRITE_X_POSITION SPRITE_X_POSITION SPRITE_X_SCALE SPRITE_Y_POSITION SPRITE_Y_POSITION SPRITE_Y_SCALE SQR STEP STOP STR$ STRETCH_OFF STRETCH_ON STRING$ SUB SUB_MENU TAN TERMINATE TEXT TEXT$ TEXT_HEIGHT TEXT_WIDTH THEN TIME$ TIMER TIMER_INTERVAL TIMER_OFF TIMER_OFF_ALL TIMER_ON TO TO_BACKGROUND TO_FOREGROUND TOP TRACE_OFF TRACE_ON TRACK_BAR TRIM$ UNTIL UPPER$ VAL VARIABLE VERTICAL WAIT WHILE WIDTH WRAP_VALUE |><|
CHARS
'A'..'Z' , 'a'..'z' , '0'..'9' , '_':: Ident BeginProc fTokenID := IdentKind((fLine + Run)); inc(Run, fStringLen); while Identifiers[fLine[Run]] do Inc(Run); EndProc
|><|
ENCLOSEDBY
Comment,PanoComment,{,} String,String,","
|><|
Mettre un nouvel objet "SOURCE_EDITOR" dans Panoramic, comme le suggère Klaus, n'est pas difficile en soi, mais je ne vois pas comment on pourrait facilement lui indiquer les mots à colorer, sans passer par une compilation d'un source en Pascal. Ce qui me tente, c'est d'utiliser un éditeur comme Scite ou autre, qui lancerait Panoramic pour exécuter un source ou un "binder" pour lier ce source à un interpréteur et en faire un exécutable. Et cela pour une raison bien simple : ne plus avoir à gérer l'éditeur et à passer le temps gagné sur Panoramic et ses dérivés (compilateur, versions spécialisées, version 64 bits, version Android, etc). Je ne connais pas Geany mais je vais l'étudier. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Jeu 21 Aoû 2014 - 0:11 | |
| Merci, Jack pour ces informations ! Tu confirmes ce que j'avais constaté. Pour ma part, j'utilise la version 2.0.8 (Unicode) de Synedit, soit la dernière version stable. Je pense que la définition "dynamique" d'une syntaxe est possible, c'est-à dire en cours d'exécution, par l'utilisation de propriétés et méthodes de Synedit. En effet, du moins dans la version 2.0?8, il y a un profil "Général" qui permet cela. Et la démonstration est faite de façon parfaite par l'éditeur "stand-alone" qui s'appelle également Synedit, mais en EXE. Je l'ai signalé sur le forum, et j'ai tout mis sur mon WebDav, dossier Synedit. On peut, en effet, définir 3 listes de mots-clé, et la coloration qui va avec, ainsi que plusieurs paires de délimiteurs et la coloration qui va avec. Et on peut sauvegarder tout cela sous forme d'un "profil" qui est directement utilisable, sans passer par une compilation Pascal ou Delphi. C'est comme ça que j'ai établi le profil Panoramic pour cet éditeur, et c'est comme ça que je compte procéder pour l'objet Synedit à injecter dans une form Panoramic. Actuellement, j'ai résolu tous les problèmes d'ouverture, chargement et sauvegarde des fichiers, gestion des profiles propres à chaque page d'édition, ainsi, et ce n'est pas encore en ligne, on profil "par défaut" donnant toutes les valeurs initiales pour le profil lors de la création d'une nouvelle page d'édition. Tout ceci est modifiable dynamiquement, bien sûr. Le profil par défaut est mémorisé dans un fichier INI. J'ai ajouté dans le profil la notion de "syntaxe" qui correspond à un des analyseurs syntaxiques disponibles avec Synedit, sous forme de Combo. Et une ligne dans cette liste s'appelle Panoramic. Voici la liste complète: - Citation :
- (none)
68HC11_Assembler ADSP21xx AWK Baan_4GL BorlandForms CacheObjectScript CA-Clipper CandCPlusPlus CascadingStyleSheet COAS_Product_Manager_Report CORBA_IDL Fortran Foxpro Galaxy Gembase General GW-TEL HP48 HTML INI InnoSetupScript Java JavaScript KiXtart Modelica Modula3 MS-DOS_Batch MS-VBScript ObjectPascal Panoramic Perl PHP Progress Python SemantaDataDictionary SQL StandardML StructuredText SynGen_Msg TclTk Unreal VisualBasic x86Assembly XML
Je suis en train de coder l'application d'un analyseur de syntaxe sur une page, avec bien sûr la possibilité de changer d'analyseur dynamiquement, à tout moment. Tout comme le fait l'éditeur Synedit.exe indiqué dans mon WebDav. D'ailleurs, si tu t'intéresses à un freeware pouvant éventuellement remplacer l'éditeur de Panoramic, je te suggère de jeter un regard sur cet outil. Ce qui est certain, c'est qu'à l'intérieur d'une page, l'expérience d'édition est identique par rapport à l'éditeur Panoramic. Et il y a la possibilité de paramétrer des compilateurs, des outils, ... Le produit est très complet. Et c'est ce qui m'a vraiment donné envie de réaliser quelque chose de similaire, à intégrer dans Panoramic. En tout cas, Synedit.exe ne nécessite aucun effort d'adaptation pour son utilisation, tant qu'on n'a pas besoin de rentrer dans le paramétrage proprement-dit de la syntaxe d'un langage. C'est pourquoi j'ai mis le profil Panoramic pour cet éditeur sur mon WebDav. EDIT Dans ce profil Panoramic pour Synedit.exe, j'ai d'ailleurs réparti les mots-clé en 3 listes: les commandes, les fonctions et les directives, avec des colorations différentes pour chacun de ces groupes... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Jeu 21 Aoû 2014 - 1:29 | |
| La nouvelle version V3.22 du 21/08/2014 de KGF.dll permet d'aller plus loin avec mon Synedit_Editor dont voici la dernière version: - Code:
-
' Synedit_Editor.bas
' Options générales ' ================= ' Les options générales sont accessibles à tout moment. ' Elles sont mémorisées dans le fichier suivant: ' (chemin)\Synedit_Editor.ini ' où "chemin" représente le chemin vers Synedit.exe. ' Ces options s'imposent à toutes les pages. ' Leur modification prend effet immédiatement, ' mais leur action n'est visible dans les pages existantes ' que lors de la consultation suivante du paralètre. Par ' exemple, la police par défaut sera utilisée pour créer ' une page vide ou charger un fichier, mais ne modifiera ' pas les polices déjà configurées pour des pages affichées.
label close0, close3000, close3200 label nouveau, ouvrir, copier, fermer, sauver, sauverdans, sortir label lignes, options, optionsgen, tick, fenetre label aide, apropos label options_abandon, options_valider label optionsgen_abandon, optionsgen_valider label apropos_fermer, outilsconfig, outilsexec
' ===== variables pour gérer les pages d'édition dim OptGen$ : ' options générales dim SE%(100) : ' les objets Synedit dim hndSE%(100) : ' les handles des fenêtres dim ln%(100) : ' flags "numéros de lignes affichés" dim capt$(100) : ' titre des fenetres dim OSE$(100) : ' les options des objets dim FSE$(100) : ' les noms des fichiers dim nsyn% : ' plus grand numéro de page d'édition (0...100) dim act% : ' page d'édition actuellement active (0...100)
' ===== variables internes dim res%, d%, nf%, t%, l%, i%, optvalid%, opt$, f$, org%
' ===== constantes dim M1% : M1% = 0 - 1 dim version$ : version$ = "Alpha 0.1" dim verdat$ : verdat$ = "21/08/2014" dim KGF$ : KGF$ = "KGF.dll" dim ini$ : ini$ = file_extract_path$(param_value$(0))+"Synedit_editor.ini"
' configurer la form 0 (uniquement le menu) width 0,800 : height 0,60 : border_small 0
' ===== création de tous les menus main_menu 10 sub_menu 11 : parent 11,10 : caption 11,"Fichier" sub_menu 12 : parent 12,11 : caption 12,"Nouveau" : on_click 12,nouveau sub_menu 13 : parent 13,11 : caption 13,"Ouvrir..." : on_click 13,ouvrir sub_menu 14 : parent 14,11 : caption 14,"Copier" : on_click 14,copier sub_menu 15 : parent 15,11 : caption 15,"Fermer" : on_click 15,fermer sub_menu 16 : parent 16,11 : caption 16,"Sauver" : on_click 16,sauver sub_menu 17 : parent 17,11 : caption 17,"Sauver dans..." : on_click 17,sauverdans sub_menu 18 : parent 18,11 : caption 18,"-" sub_menu 19 : parent 19,11 : caption 19,"Sortir" : on_click 19,sortir sub_menu 21 : parent 21,10 : caption 21,"Options" sub_menu 22 : parent 22,21 : caption 22,"N° de ligne" : on_click 22,lignes sub_menu 23 : parent 23,21 : caption 23,"Options de la page" : on_click 23,options sub_menu 24 : parent 24,21 : caption 24,"Options générales" : on_click 24,optionsgen sub_menu 400 : parent 400,10 : caption 400,"Edition" sub_menu 401 : parent 401,400 : caption 401,"pas encore implémenté" : ' on_click 401,??? sub_menu 430 : parent 430,10 : caption 430,"Outils" sub_menu 431 : parent 431,430 : caption 431,"Configuration" : on_click 431,outilsconfig sub_menu 432 : parent 432,430 : caption 432,"Exécution" : on_click 432,outilsexec sub_menu 300 : parent 300,10 : caption 300,"Fenêtres" ' sub_menu 301 : parent 301,300 : caption 301,"Fenêtre" : on_click 301,fenetre sub_menu 420 : parent 420,10 : caption 420,"Aide" sub_menu 421 : parent 421,420 : caption 421,"Aide" : on_click 421,aide sub_menu 422 : parent 422,420 : caption 422,"A-propos" : on_click 422,apropos
' ===== création de la fenêtre des options de la page actuelle form 3000 : hide 3000 : caption 3000,"Options" : command_target_is 3000 top 3000,100 : left 3000,200 width 3000,550 :height 3000,400 : on_close 3000,close3000 check 3001 : top 3001,10 : left 3001,10 : width 3001,150 caption 3001,"Numéros de de ligne" container 3002 : caption 3002,"Format par défaut" top 3002,40 : left 3002,10 : width 3002,250 : height 3002,110 combo 3003 : parent 3003,3002 : top 3003,20 : left 3003,10 : width 3003,170 font_names_load 3003 : text 3003,"Courier" alpha 3004 : parent 3004,3002 : top 3004,50 : left 3004,10 : caption 3004,"Taille:" combo 3005 : parent 3005,3002 : top 3005,50 : left 3005,60 : width 3005,40 item_add 3005,"8" item_add 3005,"9" item_add 3005,"10" item_add 3005,"11" item_add 3005,"12" item_add 3005,"14" item_add 3005,"16" item_add 3005,"18" text 3005,"10" check 3006 : parent 3006,3002 : top 3006,80 : left 3006,10 : caption 3006,"Gras" font_bold 3006 check 3007 : parent 3007,3002 : top 3007,80 : left 3007,60 : caption 3007,"Italique" font_italic 3007 check 3008 : parent 3008,3002 : top 3008,80 : left 3008,120 : caption 3008,"Sousligné" font_underline 3008 check 3009 : parent 3009,3002 : top 3009,80 : left 3009,190 : caption 3009,"Barré" : width 3009,40 font_strike 3009 alpha 3010 : top 3010,160 : left 3010,10 : caption 3010,"Syntaxe:" combo 3011 : top 3011,160 : left 3011,80 : width 3011,150 button 3098 : top 3098,300 : left 3098,10 : caption 3098,"Abandon" on_click 3098,options_abandon button 3099 : top 3099,300 : left 3099,210 : caption 3099,"Valider" on_click 3099,options_valider
' ===== création de la fenêtre des options générales form 3200 : hide 3200 : caption 3200,"Options" : command_target_is 3200 top 3200,100 : left 3200,200 width 3200,550 :height 3200,400 : on_close 3200,close3200 check 3201 : top 3201,10 : left 3201,10 : width 3201,150 caption 3201,"Numéros de de ligne" container 3202 : caption 3202,"Format par défaut" top 3202,40 : left 3202,10 : width 3202,250 : height 3202,110 combo 3203 : parent 3203,3202 : top 3203,20 : left 3203,10 : width 3203,170 font_names_load 3203 : text 3203,"Courier" alpha 3204 : parent 3204,3202 : top 3204,50 : left 3204,10 : caption 3204,"Taille:" combo 3205 : parent 3205,3202 : top 3205,50 : left 3205,60 : width 3205,40 item_add 3205,"8" item_add 3205,"9" item_add 3205,"10" item_add 3205,"11" item_add 3205,"12" item_add 3205,"14" item_add 3205,"16" item_add 3205,"18" text 3205,"10" check 3206 : parent 3206,3202 : top 3206,80 : left 3206,10 : caption 3206,"Gras" font_bold 3206 check 3207 : parent 3207,3202 : top 3207,80 : left 3207,60 : caption 3207,"Italique" font_italic 3207 check 3208 : parent 3208,3202 : top 3208,80 : left 3208,120 : caption 3208,"Sousligné" font_underline 3208 check 3209 : parent 3209,3202 : top 3209,80 : left 3209,190 : caption 3209,"Barré" : width 3209,40 font_strike 3209 alpha 3210 : top 3210,160 : left 3210,10 : caption 3210,"Syntaxe:" combo 3211 : top 3211,160 : left 3211,80 : width 3211,150
button 3298 : top 3298,300 : left 3298,10 : caption 3298,"Abandon" on_click 3298,optionsgen_abandon button 3299 : top 3299,300 : left 3299,210 : caption 3299,"Valider" on_click 3299,optionsgen_valider
' ===== création de la fenêtre A-propos form 3100 : hide 3100 : top 3100,100 : left 3100,300 : command_target_is 3100 width 3100,400 : height 3100,200 : on_close 3100,apropos_fermer picture 3101 : full_space 3101 : print_target_is 3101 font_name 3101,"Courier" : font_size 3101,10 : font_bold 3101 print_locate 40,20 : print "Programme: "+"Synedit_Editor" print_locate 40,40 : print "Version: "+version$ print_locate 40,60 : print "Date: "+verdat$ print_locate 40,80 : print "Auteur: "+"Klaus"
' ===== quelques objets invisbles command_target_is 0 memo 96 :hide 96 save_dialog 97 open_dialog 98 timer 99 : timer_off 99 : timer_interval 99,300 : on_timer 99,tick ' ===== activer la DLL dll_on KGF$
' === faire quelques initialialisations res% = DLL_call2("SetCloseBox",handle(0),0) : ' désactiver la croix rouge ! res% = dll_call3("SyneditMode",0,4,0) : ' récupérer la liste des définitions de syntaxe clipboard_paste 96 : ' la charger dans un mémo for i%=1 to count(96) : ' et recopier dans la combo item_add 3011,item_read$(96,i%) : ' options de la page item_add 3211,item_read$(96,i%) : ' options générales next i% res% = dll_call2("SelectComboBoxItem",handle(3011),1) : ' sélectionner (aucune) res% = dll_call2("SelectComboBoxItem",handle(3211),1) : ' sélectionner (aucune) OptGen$ = "0100000Courier\(aucune)" if file_exists(ini$)=1 file_open_read 1,ini$ file_readln 1,OptGen$ file_close 1 else file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 end_if end
' ===== à la fin, on supprime toutes les fenêtres ouvertes close0: while nsyn%>0 res% = dll_call1("SyneditDelete",SE%(nsyn%)) pause 500 : ' ce délai pourra éventuellement être réduit... delete 100+nsyn% nsyn% = nsyn% - 1 end_while return
' ===== fermeture de la fenêtre des paramètres de la page close3000: if optvalid%=0 hide 3000 show 0 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if end_if return ' ===== fermeture de la fenêtre des paramètres généraux close3200: if optvalid%=0 hide 3200 show 0 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if end_if return
' ===== mode d'emploi aide: message "L'aide n'est pas encore implémentée." return ' ===== montrer la fenêtre A-propos apropos: show 3100 inactive 0 return ' ===== fermer la fenêtre A-propos et restaurer la fenêtre active apropos_fermer: hide 3100 active 0 if act%=0 to_foreground 0 else to_foreground 100+act% end_if return ' ===== sortir du programme sortir: gosub close0 res% = dll_call1("KillProcessByHandle",handle(0)) ' *** on ne passera jamais ici !
' ===== choisir une fenêtre par le menu "Fenêtres" fenetre: mark_off 300+act% act% = number_click-300 mark_on 300+act% show 100 + act% to_foreground 100 + act% return
' ======================== fonctions du menu "Fichiers"
' ===== créer une nouvelle fenêtre d'édition vide nouveau: if nsyn%=100 then return if nsyn%>0 t% = top(100+nsyn%) l% = left(100+nsyn%) else t% = top(0) + 50 l% = left(0) + 50 end_if nsyn% = nsyn% + 1 if act%>0 then mark_off 300+act% act% = nsyn% d% = 20 nf% = 100 + nsyn% capt$(nsyn%) = "<nouveau "+str$(nsyn%)+">" form nf% : top nf%,t%+d% : left nf%,l%+d% : width nf%,600 : height nf%,400 caption nf%,capt$(nsyn%) hndSE%(nsyn%) = handle(nf%) opt$ = OptGen$ : ' par défaut, prendre les options générales OSE$(nsyn%) = opt$ FSE$(nsyn%) = "_" sub_menu 300+nsyn% : parent 300+nsyn%,300 : caption 300+nsyn%,capt$(nsyn%) : on_click 300+nsyn%,fenetre mark_on 300+act% SE%(nsyn%) = dll_call1("SyneditCreate",handle(nf%)) res% = dll_call3("SyneditMode",SE%(nsyn%),3,adr(opt$)) res% = dll_call5("SyneditGeometry",SE%(nsyn%),M1%,M1%,M1%,M1%) if nsyn%=1 then timer_on 99 return ' ===== créer une nouvelle fenêtre d'édition et y charger un fichier ouvrir: f$ = file_name$(98) if f$="_" then return if file_exists(f$)=0 message "Ouverture impossible" return end_if gosub nouveau res% = dll_call2("SyneditOpen",SE%(act%),adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) capt$(act%) = f$ caption 100+act%,f$ caption 300+act%,f$ end_if return ' ===== créer une nouvelle fenêtre d'édition et y charger une copie de la fenêtre active copier: if act%=0 then return org% = act% gosub nouveau if res%=0 res% = dll_call2("SyneditCopyObject",org%,act%) capt$(nsyn%) = "(copie) "+capt$(org%) caption 100+nsyn%,capt$(nsyn%) caption 300+nsyn%,capt$(nsyn%) FSE$(nsyn%) = "_" OSE$(nsyn%) = OSE$(org%) end_if return ' ===== fermer la fenêtre active fermer: if act%=0 then return res% = dll_call1("SyneditDelete",SE%(act%)) pause 500 delete 100+act% inactive 300+act% caption 300+act%,"<supprimé>" SE%(act%) = 0 while SE%(nsyn%)=0 delete 300+nsyn% nsyn% = nsyn% - 1 if nsyn%=0 then exit_while end_while return ' =====enregistrer la fenêtre active dans son fichier associé sauver: if act%=0 then return if FSE$(act%)="_" then goto sauverdans f$ = FSE$(act%) res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) return
' ===== enregistrer la fenêtre active dans un fichier choisi par dialogue sauverdans: if act%=0 then return f$ = file_name$(97) if f$="_" then return if file_exists(f$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Voulez-vous le remplacer ?")<>1 then return end_if res% = dll_call2("SyneditSaveToFile",act%,adr(f$)) if res%=0 FSE$(act%) = f$ f$ = file_extract_name$(f$) caption 100+act%,f$ caption 300+act%,f$ capt$(act%) = f$ end_if return ' ======================== fonctions du menu "Outils"
' ===== configuration des outils outilsconfig: message "pas encore implémenté." return ' ===== exécution des outils outilsexec: message "pas encore implémenté." return
' ======================== fonctions du menu "Options"
' ===== inverser l'indicateur de présence des numéros de ligne dans la fenêtre active lignes: ln%(act%) = 1 - ln%(act%) : ' basculer 0<-->1 res% = dll_call3("SyneditMode",SE%(act%),1,ln%(act%)) : ' signaler à Synedit res% = dll_call3("SyneditMode",SE%(act%),2,0) : ' redonner le focus à Synedit OSE$(act%) = str$(ln%(act%)) + mid$(OSE$(act%),2,20) : ' mémoriser dans les param_tres return ' ===== charger la fenêtre des options avec les valeurs de la fenêtre active, puis afficher options: if act%=0 then return optvalid% = 0 opt$ = OSE$(act%) if left$(opt$,1)="1" mark_on 3001 else mark_off 3001 end_if text 3005,mid$(opt$,2,2) if mid$(opt$,4,1)="1" mark_on 3006 else mark_off 3006 end_if if mid$(opt$,5,1)="1" mark_on 3007 else mark_off 3007 end_if if mid$(opt$,6,1)="1" mark_on 3008 else mark_off 3008 end_if if mid$(opt$,7,1)="1" mark_on 3009 else mark_off 3009 end_if i% = instr(opt$,"") text 3003,mid$(opt$,8,i%-8) opt$ = mid$(opt$,i%+1,len(opt$)) for i%=1 to count(3011) if opt$=item_read$(3011,i%) res% = dll_call2("SelectComboBoxItem",handle(3011),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3000 inactive 0 return ' ===== charger la fenêtre des options générales, puis afficher optionsgen: if left$(OptGen$,1)="1" mark_on 3201 else mark_off 3201 end_if text 3205,mid$(OptGen$,2,2) if mid$(OptGen$,4,1)="1" mark_on 3206 else mark_off 3206 end_if if mid$(OptGen$,5,1)="1" mark_on 3207 else mark_off 3207 end_if if mid$(OptGen$,6,1)="1" mark_on 3208 else mark_off 3208 end_if if mid$(OptGen$,7,1)="1" mark_on 3209 else mark_off 3209 end_if i% = instr(OptGen$,"") text 3203,mid$(OptGen$,8,i%-8) opt$ = mid$(OptGen$,i%+1,len(OptGen$)) for i%=1 to count(3211) if opt$=item_read$(3211,i%) res% = dll_call2("SelectComboBoxItem",handle(3211),i%) : ' restaurer la syntaxe exit_for end_if next i% show 3200 inactive 0 return ' ===== sortie de la fenêtre des options de la page par "Abandon" options_abandon: hide 3000 show 0 active 0 to_foreground 0 return
' ===== sortie de la fenêtre des options générales par "Abandon" optionsgen_abandon: hide 3200 show 0 active 0 to_foreground 0 return
' =====sortie de la fenêtre des options de la page par "Valider" options_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3001))+right$("0"+text$(3005),2)+str$(checked(3006)) opt$ = opt$ + str$(checked(3007))+str$(checked(3008))+str$(checked(3009)) opt$ = opt$ + text$(3003) + "" + text$(3011) OSE$(act%) = opt$ ln%(act%) = checked(3001) res% = dll_call3("SyneditMode",SE%(act%),3,adr(opt$)) : ' activer les nouvelles options hide 3000 show 0 active 0 to_foreground 0 return ' =====sortie de la fenêtre des options générales par "Valider" optionsgen_valider: ' construire le paramètre: ' xttgisbp\S ' x=numéros de ligne tt=taille g=gras i=italique s=souslgné b=barré ' p=police S=syntaxe optvalid% = 1 opt$ = str$(checked(3201))+right$("0"+text$(3205),2)+str$(checked(3206)) opt$ = opt$ + str$(checked(3207))+str$(checked(3208))+str$(checked(3209)) opt$ = opt$ + text$(3203) + "" + text$(3211) OptGen$ = opt$ : ' mémoriser les options générales file_open_write 1,ini$ file_writeln 1,OptGen$ file_close 1 hide 3200 show 0 active 0 to_foreground 0 return
' ======================== fonctions indépendantes
' ===== ce timer surveille la fenêtre active et ses dimensions tick: timer_off 99 res% = dll_call0("GetActiveWindow") : ' récupérer le handle de la fenêtre active for i%=1 to nsyn% : ' chercher dans la table des fenêtres d"édition if res%=hndSE%(i%) : ' est-ce qu'on a trouvé la fenêtre if i%<>act% : ' est-elle différente de la fenêtre active précédente ? mark_off 300+act% : ' alors changer le marquade du menu mark_on 300+i% end_if act% = i% : ' mémoriser le numéro de la fenêtre active res% = dll_call5("SyneditGeometry",SE%(act%),M1%,M1%,M1%,M1%) : ' ajuster la taille de Synedit à celle de la fenêtre exit_for end_if next i% timer_on 99 return
Gestion automatique d'un fichier INI (placé dans le dossier où se trouve l'exécutable) avec le profile par défaut, ajout du choix de la syntaxe dans le profile, et le début d'un menu d'outils... Ca prend forme, lentement. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Editeur avec marquage syntaxique Jeu 21 Aoû 2014 - 10:07 | |
| Question d'un néophyte: On se dirige vers un éditeur de sources et un comilateur Panoramic et des DLL externes avec principalement KGF dont Klaus partage le source. Klaus dans TA version de l'éditeur, ne pourrais tu pas gérer une option spécifique pour compiler directement le .exe avec les fonctions de la DLL ? Je dérive l'égèrement du sujet de l'éditeur, mais c'est lié quand même car il y aurait sans doute des choses à ajouter dans la gerstion du code source. A première vu ça me parait techniquement possible, mais je ne maitrise pas assez ces techniques pour dire si je ne délire pas complétement ...
En tout cas, ce sera bien en effet d'avoir un éditeur indépendant que l'utilisateur pourra choisir et paramétrer en fonction de ses préférences. Jack y gagnera du temps, les version de Panoramic seront encore plus "légères" et l'utilisateur y gagnera en liberté.
Merci à vous | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur avec marquage syntaxique Jeu 21 Aoû 2014 - 10:48 | |
| @Jicehel: ce n'est pas compliqué, en fait. Bon, je ne suis pas vraiment à jour quant aux spécifications du compilateur. Mais la DLL est attachée dynamiquement par la commande DLL_ON, et ce n'est pas à préciser au moment de la génération de l'exécutable. Ce serait différent si'il s'agissait d'une bibliothèque "linkable" du genre *.LIB. Mais ce n'est pas le cas. Donc, à priori, je pense qu'il n'y aura pas de problèmes. | |
| | | Contenu sponsorisé
| Sujet: Re: Editeur avec marquage syntaxique | |
| |
| | | | Editeur avec marquage syntaxique | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |