reformatage / embellissement de code source multilingue

eadmaster

reformatage / embellissement de code source multilingue


Je suis à la recherche d’un reformateur / embellisseur / jolie-imprimante de code source multilingue. L’installation et la gestion d’un outil séparé pour chaque langue est une perte de temps considérable.

Il doit soutenir

  • C / C ++
  • Java
  • Javascript
  • HTML
  • PHP
  • Python
  • Lua
  • et j’espère que d’autres langues dont j’ai besoin à l’avenir

Il doit fonctionner sous Linux et j’aimerais éviter les solutions en ligne et les logiciels de source fermée.

La solution la plus indépendante du langage que j’ai trouvée jusqu’à présent est le format clang, qui prend en charge C / C ++, Java, JavaScript, Objective-C et Protobuf .

Alternativement, GNU source-highlight et Pygments prétendent prendre en charge un grand nombre de langues, mais il n’est pas clair pour moi s’ils peuvent également reformater le code source qu’ils traitent et l’imprimer sur stdout .

Par exemple, j’ai essayé:

 source-highlight --lang-def=nohilite.lang --output=STDOUT -i test.c 

et il sort simplement le fichier source entouré de quelques balises HTML.

Thomas Weller

Pourquoi avez-vous besoin d’une solution unique pour toutes les langues? De quelles langues avez-vous besoin? Fortran, LISP, ABAP, Jelly, ASM, Brainfuck, C #, Whitespace?

eadmaster

clang-format ne prend pas en charge HTML, PHP, Python, Lua et peut-être d’autres langues dont j’ai besoin. L’installation et la gestion d’un outil séparé pour chacun d’entre eux est une perte de temps considérable.

Thomas Weller

Pensez-y à l’envers: pourquoi quelqu’un devrait-il inventer un tel outil? Un projet a 2 ou 3 langages de programmation. En règle générale, un développeur invente un tel outil parce qu’il en a besoin. Pourquoi développer un outil pour 30 langages de programmation s’il n’a une connaissance approfondie que dans 3 d’entre eux? Je doute donc qu’un tel outil soit disponible. Il en va de même pour les métriques: vous trouverez difficilement un outil qui prend en charge plusieurs langues en même temps. Habituellement, vous avez besoin de plugins.

Ira Baxter

@ThomasWeller: Aucun programmeur chargé de faire des tâches de programmation standard n’inventerait un tel outil, a convenu. Vous devez trouver quelqu’un qui travaille dans le domaine du traitement linguistique, puis vous obtenez cela comme un effet secondaire de la création d’outils de traitement linguistique. Voir ma réponse. (Je ne sais pas comment vous avez fait glisser les mesures dans la conversation, mais en fait, il existe un effet similaire pour les outils de mesure).

Steve Barnes

Je dois ajouter que la disposition du code doit être correctement formatée, pour la définition correcte de votre organisation, dans les fichiers source, pas seulement lorsque vous le montrez à quelqu’un.

Réponses


 Steve Barnes

Vous pouvez regarder CodeMirror 2 qui correspond à 90% à 95% de vos besoins et peut être étendu pour s’adapter au reste :

  • Open Source & Gratis – Oui, le support commercial est disponible auprès de l’auteur.
  • Reformatage du code – Oui
  • Mise en évidence de la syntaxe – Oui
  • Linux – Oui Plate-forme croisée basée sur JavaScript, solution de navigateur
  • Utilisation hors ligne – Oui, téléchargez la dernière version ou clonez le référentiel git et exécutez-le à partir de cela.
  • Prend en charge les langues suivantes:
    • C / C ++ Oui
    • Java Oui
    • JavaScript Oui
    • Objective-C Pas spécifiquement mais le mode C devrait plus ou moins couvrir cela et est même dans les exemples
    • Protobuf Non mentionné sur la page Web mais présent dans le dépôt git
    • HTML Oui
    • PHP Oui
    • Python Oui
    • Lua Oui
    • et j’espère que d’autres langues dont j’ai besoin à l’avenir 50 langues actuellement prises en charge et vous pouvez ajouter la vôtre

J’espère que si vous ajoutez des langues supplémentaires, vous les contribuerez au projet

Démo: avant la mise en forme automatique

entrez la description de l'image ici

Démo après mise en forme automatique

entrez la description de l'image ici

eadmaster

cela semble une bonne alternative, existe-t-il une interface de ligne de commande que je pourrais utiliser avec Geany?


 Steve Barnes

Notez que les pygments sont un surligneur de code, pas un outil de reformatage, il n’est pas conçu comme tel.

Le package python pygments , lorsqu’il est installé avec:

 pip install -U pygments 

ou sous Linux:

 sudo pip install -U pygments 

Ajoute la commande que pygmentize peut sortir en html ou sur un terminal prenant en charge les couleurs , en testant sur un fichier python, avec le style de sortie par défaut et la détection automatique:

capture d'écran

Python et pygments sont:

  • Gratuit, gratuit et open source
  • Plateforme croisée
  • pygments prend actuellement en charge un certain nombre de formats de sortie, HTML, LaTeX, RTF, SVG, tous les formats d’image pris en charge par PIL et les séquences ANSI

Vérifier ma version installée pour les lexers pris en charge donne bien plus de 300 langues et / ou variantes prises en charge qui devraient être pleasty pour la plupart des gens:

 Pygments version 2.1.3, (c) 2006-2015 by Georg Brandl. 

Lexers:

  • abap: ABAP (noms de fichiers * .abap, * .ABAP)
  • abnf: ABNF (noms de fichiers * .abnf)
  • ada, ada95, ada2005: Ada (noms de fichiers * .adb, * .ads, * .ada)
  • adl: ADL (noms de fichiers * .adl, * .adls, * .adlf, * .adlx)
  • agda: Agda (noms de fichiers * .agda)
  • ahk, autohotkey: autohotkey (noms de fichiers * .ahk, * .ahkl)
  • alliage: alliage (noms de fichiers * .als)
  • antlr-as, antlr-actionscript: ANTLR avec cible ActionScript (noms de fichiers * .G, * .g)
  • antlr-cpp: ANTLR avec cible CPP (noms de fichiers * .G, * .g)
  • antlr-csharp, antlr-c #: ANTLR avec cible C # (noms de fichiers * .G, * .g)
  • antlr-java: ANTLR avec cible Java (noms de fichiers * .G, * .g)
  • antlr-objc: ANTLR avec cible ObjectiveC (noms de fichiers * .G, * .g)
  • antlr-perl: ANTLR avec cible Perl (noms de fichiers * .G, * .g)
  • antlr-python: ANTLR avec cible Python (noms de fichiers * .G, * .g)
  • antlr-ruby, antlr-rb: ANTLR avec Ruby Target (noms de fichiers * .G, * .g)
  • antlr: ANTLR
  • apacheconf, aconf, apache: ApacheConf (noms de fichiers .htaccess, apache.conf, apache2.conf)
  • apl: APL (noms de fichiers * .apl)
  • applescript: AppleScript (noms de fichiers * .applescript)
  • arduino: Arduino (noms de fichiers * .ino)
  • as, actionscript: ActionScript (noms de fichiers * .as)
  • as3, actionscript3: ActionScript 3 (noms de fichiers * .as)
  • aspectj: AspectJ (noms de fichiers * .aj)
  • aspx-cs: aspx-cs (noms de fichiers * .aspx, * .asax, * .ascx, * .ashx, * .asmx, * .axd)
  • aspx-vb: aspx-vb (noms de fichiers * .aspx, * .asax, * .ascx, * .ashx, * .asmx, * .axd)
  • asy, asymptote: Asymptote (noms de fichiers * .asy)
  • at, ambienttalk, ambienttalk / 2: AmbientTalk (noms de fichiers * .at)
  • autoit: AutoIt (noms de fichiers * .au3)
  • awk, gawk, mawk, nawk: Awk (noms de fichiers * .awk)
  • basemake: Base Makefile
  • bash, sh, ksh, shell: Bash (noms de fichiers * .sh, * .ksh, * .bash, * .ebuild, * .eclass, * .exheres-0, .exlib, .bashrc, bashrc, .bash_ , bash_ * , PKGBUILD)
  • bat, batch, dosbatch, winbatch: Batchfile (noms de fichiers * .bat, * .cmd)
  • bbcode: BBCode
  • bc: BC (noms de fichiers * .bc)
  • befunge: Befunge (noms de fichiers * .befunge)
  • blitzbasic, b3d, bplus: BlitzBasic (noms de fichiers * .bb, * .decls)
  • blitzmax, bmax: BlitzMax (noms de fichiers * .bmx)
  • bnf: BNF (noms de fichiers * .bnf)
  • boo: Boo (noms de fichiers * .boo)
  • boogie: Boogie (noms de fichiers * .bpl)
  • brainfuck, bf: Brainfuck (noms de fichiers * .bf, * .b)
  • bro: Bro (noms de fichiers * .bro)
  • bugs, winbugs, openbugs: BUGS (noms de fichiers * .bug)
  • c-objdump: c-objdump (noms de fichiers * .c-objdump)
  • c: C (noms de fichiers * .c, * .h, * .idc)
  • ca65: assembleur ca65 (noms de fichiers * .s)
  • cadl: cADL (noms de fichiers * .cadl)
  • camkes, idl4: CAmkES (noms de fichiers * .camkes, * .idl4)
  • cbmbas: CBM BASIC V2 (noms de fichiers * .bas)
  • ceylon: Ceylan (noms de fichiers * .ceylon)
  • cfc: Coldfusion CFC (noms de fichiers * .cfc)
  • cfengine3, cf3: CFEngine3 (noms de fichiers * .cf)
  • cfm: Coldfusion HTML (noms de fichiers * .cfm, * .cfml)
  • cfs: cfstatement
  • chai, chaiscript: ChaiScript (noms de fichiers * .chai)
  • chapel, chpl: Chapelle (noms de fichiers * .chpl)
  • guépard, spitfire: guépard (noms de fichiers * .tmpl, * .spt)
  • cirru: Cirru (noms de fichiers * .cirru)
  • clay: Clay (noms de fichiers * .clay)
  • clojure, clj: Clojure (noms de fichiers * .clj)
  • clojurescript, cljs: ClojureScript (noms de fichiers * .cljs)
  • cmake: CMake (noms de fichiers * .cmake, CMakeLists.txt)
  • cobol: COBOL (noms de fichiers * .cob, * .COB, * .cpy, * .CPY)
  • cobolfree: COBOLFree (noms de fichiers * .cbl, * .CBL)
  • coffee-script, coffeescript, coffee: CoffeeScript (noms de fichiers * .coffee)
  • common-lisp, cl, lisp: Common Lisp (noms de fichiers * .cl, * .lisp)
  • componentpascal, cp: Component Pascal (noms de fichiers * .cp, * .cps)
  • console, shell-session: Bash Session (noms de fichiers * .sh-session, * .shell-session)
  • control, debcontrol: fichier de contrôle Debian (contrôle des noms de fichiers)
  • coq: Coq (noms de fichiers * .v)
  • cpp, c ++: C ++ (noms de fichiers * .cpp, * .hpp, * .c ++, * .h ++, * .cc, * .hh, * .cxx, * .hxx, * .C, * .H, * .cp , * .CPP)
  • cpp-objdump, c ++ – objdumb, cxx-objdump: cpp-objdump (noms de fichiers * .cpp-objdump, * .c ++ – objdump, * .cxx-objdump)
  • cpsa: CPSA (noms de fichiers * .cpsa)
  • crmsh, pcmk: Crmsh (noms de fichiers * .crmsh, * .pcmk)
  • croc: Croc (noms de fichiers * .croc)
  • cryptol, cry: Cryptol (noms de fichiers * .cry)
  • csharp, c #: C # (noms de fichiers * .cs)
  • csound, csound-orc: Csound Orchestra (noms de fichiers * .orc)
  • csound-document, csound-csd: Document Csound (noms de fichiers * .csd)
  • csound-score, csound-sco: Score Csound (noms de fichiers * .sco)
  • css + django, css + jinja: CSS + Django / Jinja
  • css + erb, css + ruby: CSS + Ruby
  • css + genshitext, css + genshi: CSS + texte Genshi
  • css + lasso: CSS + Lasso
  • css + mako: CSS + Mako
  • css + mako: CSS + Mako
  • css + mozpreproc: CSS + mozpreproc (noms de fichiers * .css.in)
  • css + myghty: CSS + Myghty
  • css + php: CSS + PHP
  • css + smarty: CSS + Smarty
  • css: CSS (noms de fichiers * .css)
  • concombre, cornichon: cornichon (noms de fichiers * .feature)
  • cuda, cu: CUDA (noms de fichiers * .cu, * .cuh)
  • cypher: Cypher (noms de fichiers * .cyp, * .cypher)
  • cython, pyx, pyrex: Cython (noms de fichiers * .pyx, * .pxd, * .pxi)
  • d-objdump: d-objdump (noms de fichiers * .d-objdump)
  • d: D (noms de fichiers * .d, * .di)
  • dart: Dart (noms de fichiers * .dart)
  • delphi, pas, pascal, objectpascal: Delphi (noms de fichiers * .pas)
  • dg: dg (noms de fichiers * .dg)
  • diff, udiff: Diff (noms de fichiers * .diff, * .patch)
  • Django, Jinja: Django / Jinja
  • docker, dockerfile: Docker (noms de fichiers Dockerfile, * .docker)
  • doscon: Session MSDOS
  • dpatch: Darcs Patch (noms de fichiers * .dpatch, * .darcspatch)
  • dtd: DTD (noms de fichiers * .dtd)
  • duel, jbst, jsonml + bst: Duel (noms de fichiers * .duel, * .jbst)
  • dylan-console, dylan-repl: session Dylan (noms de fichiers * .dylan-console)
  • dylan-lid, couvercle: DylanLID (noms de fichiers * .lid, * .hdp)
  • dylan: Dylan (noms de fichiers * .dylan, * .dyl, * .intr)
  • earl-grey, earlgrey, par exemple: Earl Grey (noms de fichiers * .eg)
  • easytrieve: Easytrieve (noms de fichiers * .ezt, * .mac)
  • ebnf: EBNF (noms de fichiers * .ebnf)
  • ec: eC (noms de fichiers * .ec, * .eh)
  • ecl: ECL (noms de fichiers * .ecl)
  • eiffel: Eiffel (noms de fichiers * .e)
  • elixir, ex, exs: Elixir (noms de fichiers * .ex, * .exs)
  • orme: orme (noms de fichiers * .elm)
  • emacs, elisp, emacs-lisp: EmacsLisp (noms de fichiers * .el)
  • erb: ERB
  • erl: session Erlang erl (noms de fichiers * .erl-sh)
  • erlang: Erlang (noms de fichiers * .erl, * .hrl, * .es, * .escript)
  • evoque: Evoque (noms de fichiers * .evoque)
  • ezhil: Ezhil (noms de fichiers * .n)
  • factor: Factor (noms de fichiers * .factor)
  • fan: Fantom (noms de fichiers * .fan)
  • fantaisie, fy: fantaisie (noms de fichiers * .fy, * .fancypack)
  • felix, flx: Felix (noms de fichiers * .flx, * .flxh)
  • poisson, coquille de poisson: poisson (noms de fichiers * .fish, * .load)
  • fortran: Fortran (noms de fichiers * .f03, * .f90, * .F03, * .F90)
  • fortranfixed: FortranFixed (noms de fichiers * .f, * .F)
  • foxpro, vfp, clipper, xbase: FoxPro (noms de fichiers * .PRG, * .prg)
  • fsharp: FSharp (noms de fichiers * .fs, * .fsi)
  • gap: GAP (noms de fichiers * .g, * .gd, * .gi, * .gap)
  • gaz, asm: GAS (noms de fichiers * .s, * .S)
  • genshi, kid, xml + genshi, xml + kid: Genshi (noms de fichiers * .kid)
  • genshitext: Genshi Text
  • glsl: GLSL (noms de fichiers * .vert, * .frag, * .geo)
  • gnuplot: Gnuplot (noms de fichiers * .plot, * .plt)
  • go: Go (noms de fichiers * .go)
  • golo: Golo (noms de fichiers * .golo)
  • gooddata-cl: GoodData-CL (noms de fichiers * .gdc)
  • gosu: Gosu (noms de fichiers * .gs, * .gsx, * .gsp, * .vark)
  • groff, nroff, man: Groff (noms de fichiers *. [1234567], * .man)
  • groovy: Groovy (noms de fichiers * .groovy, * .gradle)
  • gst: modèle Gosu (noms de fichiers * .gst)
  • haml: Haml (noms de fichiers * .haml)
  • guidon: Guidon
  • haskell, hs: Haskell (noms de fichiers * .hs)
  • haxeml, hxml: Hxml (noms de fichiers * .hxml)
  • hexdump: Hexdump
  • html + guépard, html + spitfire, htmlcheetah: HTML + Cheetah
  • html + django, html + jinja, htmldjango: HTML + Django / Jinja
  • html + evoque: HTML + Evoque (noms de fichiers * .html)
  • html + genshi, html + kid: HTML + Genshi
  • html + guidon: HTML + guidon (noms de fichiers * .handlebars, * .hbs)
  • html + lasso: HTML + Lasso
  • html + mako: HTML + Mako
  • html + mako: HTML + Mako
  • html + myghty: HTML + Myghty
  • html + php: HTML + PHP (noms de fichiers * .phtml)
  • html + smarty: HTML + Smarty
  • html + twig: HTML + Twig (noms de fichiers * .twig)
  • html + velocity: HTML + Velocity
  • html: HTML (noms de fichiers * .html, * .htm, * .xhtml, * .xslt)
  • http: HTTP
  • hx, haxe, hxsl: Haxe (noms de fichiers * .hx, * .hxsl)
  • hybris, hy: Hybris (noms de fichiers * .hy, * .hyb)
  • hylang: Hy (noms de fichiers * .hy)
  • i6t: modèle Inform 6 (noms de fichiers * .i6t)
  • idl: IDL (noms de fichiers * .pro)
  • idris, idr: Idris (noms de fichiers * .idr)
  • iex: session Elixir iex
  • igor, igorpro: Igor (noms de fichiers * .ipf)
  • inform6, i6: Inform 6 (noms de fichiers * .inf)
  • inform7, i7: Inform 7 (noms de fichiers * .ni, * .i7x)
  • ini, cfg, dosini: INI (noms de fichiers * .ini, * .cfg, * .inf)
  • io: Io (noms de fichiers * .io)
  • ioke, ik: Ioke (noms de fichiers * .ik)
  • ipython2, ipython: IPython
  • ipython3: IPython3
  • ipythonconsole: session de console IPython
  • irc: journaux IRC (noms de fichiers * .weechatlog)
  • isabelle: Isabelle (noms de fichiers * .thy)
  • j: J (noms de fichiers * .ijs)
  • jade: Jade (noms de fichiers * .jade)
  • jags: JAGS (noms de fichiers * .jag, * .bug)
  • jasmin, jasminxt: Jasmin (noms de fichiers * .j)
  • java: Java (noms de fichiers * .java)
  • javascript + mozpreproc: Javascript + mozpreproc (noms de fichiers * .js.in)
  • jcl: JCL (noms de fichiers * .jcl)
  • jlcon: console Julia
  • js + guépard, javascript + guépard, js + spitfire, javascript + spitfire: JavaScript + Cheetah
  • js + django, javascript + django, js + jinja, javascript + jinja: JavaScript + Django / Jinja
  • js + erb, javascript + erb, js + ruby, javascript + ruby: JavaScript + Ruby
  • js + genshitext, js + genshi, javascript + genshitext, javascript + genshi: JavaScript + Genshi Text
  • js + lasso, javascript + lasso: JavaScript + Lasso
  • js + mako, javascript + mako: JavaScript + Mako
  • js + mako, javascript + mako: JavaScript + Mako
  • js + myghty, javascript + myghty: JavaScript + Myghty
  • js + php, javascript + php: JavaScript + PHP
  • js + smarty, javascript + smarty: JavaScript + Smarty
  • js, javascript: JavaScript (noms de fichiers * .js, * .jsm)
  • json: JSON (noms de fichiers * .json)
  • jsonld, json-ld: JSON-LD (noms de fichiers * .jsonld)
  • jsp: page Java Server (noms de fichiers * .jsp)
  • julia, jl: Julia (noms de fichiers * .jl)
  • kal: Kal (noms de fichiers * .kal)
  • kconfig, menuconfig, linux-config, kernel-config: Kconfig (noms de fichiers Kconfig , Config.in , external.in *, standard-modules.in)
  • koka: Koka (noms de fichiers * .kk, * .kki)
  • kotlin: Kotlin (noms de fichiers * .kt)
  • lagda, literate-agda: Literate Agda (noms de fichiers * .lagda)
  • lasso, lassoscript: Lasso (noms de fichiers * .lasso, * .lasso [89])
  • lcry, literate-cryptol, lcryptol: Literate Cryptol (noms de fichiers * .lcry)
  • lean: Lean (noms de fichiers * .lean)
  • less: LessCss (noms de fichiers * .less)
  • lhs, literate-haskell, lhaskell: Literate Haskell (noms de fichiers * .lhs)
  • lidr, literate-idris, lidris: Literate Idris (noms de fichiers * .lidr)
  • lighty, lighttpd: fichier de configuration Lighttpd
  • limbo: Limbo (noms de fichiers * .b)
  • liquide: liquide (noms de fichiers * .liquid)
  • live-script, livescript: LiveScript (noms de fichiers * .ls)
  • llvm: LLVM (noms de fichiers * .ll)
  • logos: Logos (noms de fichiers * .x, * .xi, * .xm, * .xmi)
  • logtalk: Logtalk (noms de fichiers * .lgt, * .logtalk)
  • lsl: LSL (noms de fichiers * .lsl)
  • lua: Lua (noms de fichiers * .lua, * .wlua)
  • make, makefile, mf, bsdmake: Makefile (noms de fichiers * .mak, .mk, Makefile, makefile, Makefile. , GNUmakefile)
  • mako: Mako (noms de fichiers * .mao)
  • mako: Mako (noms de fichiers * .mao)
  • maql: MAQL (noms de fichiers * .maql)
  • mask: Mask (noms de fichiers * .mask)
  • maçon: Mason (noms de fichiers * .m, * .mhtml, * .mc, * .mi, gestionnaire automatique, gestionnaire)
  • mathématique, mma, nb: Mathématique (noms de fichiers * .nb, * .cdf, * .nbp, * .ma)
  • matlab: Matlab (noms de fichiers * .m)
  • matlabsession: session Matlab
  • minid: MiniD
  • modelica: Modelica (noms de fichiers * .mo)
  • modula2, m2: Modula-2 (noms de fichiers * .def, * .mod)
  • singe: singe (noms de fichiers * .monkey)
  • moocode, moo: MOOCode (noms de fichiers * .moo)
  • moon, moonscript: MoonScript (noms de fichiers * .moon)
  • mozhashpreproc: mozhashpreproc
  • mozpercentpreproc: mozpercentpreproc
  • mql, mq4, mq5, mql4, mql5: MQL (noms de fichiers * .mq4, * .mq5, * .mqh)
  • mscgen, msc: Mscgen (noms de fichiers * .msc)
  • mupad: MuPAD (noms de fichiers * .mu)
  • mxml: MXML (noms de fichiers * .mxml)
  • myghty: Myghty (noms de fichiers * .myt, autodelegate)
  • mysql: MySQL
  • nasm: NASM (noms de fichiers * .asm, * .ASM)
  • nemerle: Nemerle (noms de fichiers * .n)
  • nesc: nesC (noms de fichiers * .nc)
  • newlisp: NewLisp (noms de fichiers * .lsp, * .nl)
  • newspeak: Newspeak (noms de fichiers * .ns2)
  • nginx: fichier de configuration Nginx
  • nimrod, nim: Nimrod (noms de fichiers * .nim, * .nimrod)
  • nit: Nit (noms de fichiers * .nit)
  • nixos, nix: Nix (noms de fichiers * .nix)
  • nsis, nsi, nsh: NSIS (noms de fichiers * .nsi, * .nsh)
  • numpy: NumPy
  • objdump-nasm: objdump-nasm (noms de fichiers * .objdump-intel)
  • objdump: objdump (noms de fichiers * .objdump)
  • objective-c ++, objectivec ++, obj-c ++, objc ++: Objective-C ++ (noms de fichiers * .mm, * .hh)
  • objective-c, objectivec, obj-c, objc: Objective-C (noms de fichiers * .m, * .h)
  • objective-j, objectivej, obj-j, objj: Objective-J (noms de fichiers * .j)
  • ocaml: OCaml (noms de fichiers * .ml, * .mli, * .mll, * .mly)
  • octave: Octave (noms de fichiers * .m)
  • odin: ODIN (noms de fichiers * .odin)
  • ooc: Ooc (noms de fichiers * .ooc)
  • opa: Opa (noms de fichiers * .opa)
  • openge, abl, progress: OpenEdge ABL (noms de fichiers * .p, * .cls)
  • pacmanconf: PacmanConf (noms de fichiers pacman.conf)
  • pan: Pan (noms de fichiers * .pan)
  • parachute ascensionnel: ParaSail (noms de fichiers * .psi, * .psl)
  • pion: Pion (noms de fichiers * .p, * .pwn, * .inc)
  • perl, pl: Perl (noms de fichiers * .pl, * .pm, * .t)
  • perl6, pl6: Perl6 (noms de fichiers * .pl, * .pm, * .nqp, * .p6, * .6pl, * .p6l, * .pl6, * .6pm, * .p6m, * .pm6, * .t )
  • php, php3, php4, php5: PHP (noms de fichiers * .php, * .php [345], * .inc)
  • pig: Pig (noms de fichiers * .pig)
  • brochet: brochet (noms de fichiers * .pike, * .pmod)
  • pkgconfig: PkgConfig (noms de fichiers * .pc)
  • plpgsql: PL / pgSQL
  • postgresql, postgres: dialecte SQL PostgreSQL
  • postscript, postscr: PostScript (noms de fichiers * .ps, * .eps)
  • pot, po: Catalogue Gettext (noms de fichiers * .pot, * .po)
  • pov: POVRay (noms de fichiers * .pov, * .inc)
  • PowerShell, Posh, PS1, PSM1: PowerShell (noms de fichiers * .ps1, * .psm1)
  • praat: Praat (noms de fichiers * .praat, * .proc, * .psc)
  • prolog: Prolog (noms de fichiers * .ecl, * .prolog, * .pro, * .pl)
  • propriétés, jproperties: Propriétés (noms de fichiers * .properties)
  • protobuf, proto: Protocol Buffer (noms de fichiers * .proto)
  • ps1con: session PowerShell
  • psql, postgresql-console, postgres-console: console PostgreSQL (psql)
  • puppet: Puppet (noms de fichiers * .pp)
  • py3tb: Traceback Python 3.0 (noms de fichiers * .py3tb)
  • pycon: session de console Python
  • pypylog, pypy: PyPy Log (noms de fichiers * .pypylog)
  • pytb: Python Traceback (noms de fichiers * .pytb)
  • python, py, sage: Python (noms de fichiers * .py, * .pyw, * .sc, SConstruct, SConscript, * .tac, * .sage)
  • python3, py3: Python 3
  • qbasic, basic: QBasic (noms de fichiers * .BAS, * .bas)
  • qml, qbs: QML (noms de fichiers * .qml, * .qbs)
  • qvto, qvt: QVTO (noms de fichiers * .qvto)
  • racket, rkt: Racket (noms de fichiers * .rkt, * .rktd, * .rktl)
  • ragel-c: Ragel dans l’hôte C (noms de fichiers * .rl)
  • ragel-cpp: Ragel dans l’hôte CPP (noms de fichiers * .rl)
  • ragel-d: Ragel dans l’hôte D (noms de fichiers * .rl)
  • ragel-em: Embedded Ragel (noms de fichiers * .rl)
  • ragel-java: Ragel dans l’hôte Java (noms de fichiers * .rl)
  • ragel-objc: Ragel dans l’hôte Objective C (noms de fichiers * .rl)
  • ragel-ruby, ragel-rb: Ragel dans Ruby Host (noms de fichiers * .rl)
  • ragel: Ragel
  • raw: données de jeton brutes
  • rb, ruby, duby: Ruby (noms de fichiers * .rb, * .rbw, Rakefile, * .rake, * .gemspec, * .rbx, * .duby, Gemfile)
  • rbcon, irb: session Ruby irb
  • rconsole, rout: RConsole (noms de fichiers * .Rout)
  • rd: Rd (noms de fichiers * .Rd)
  • rebol: REBOL (noms de fichiers * .r, * .r3, * .reb)
  • rouge, rouge / système: Rouge (noms de fichiers * .red, * .reds)
  • redcode: Redcode (noms de fichiers * .cw)
  • registre: reg (noms de fichiers * .reg)
  • resource, resourcebundle: ResourceBundle (noms de fichiers * .txt)
  • rexx, arexx: Rexx (noms de fichiers * .rexx, * .rex, * .rx, * .arexx)
  • rhtml, html + erb, html + ruby: RHTML (noms de fichiers * .rhtml)
  • roboconf-graph: Roboconf Graph (noms de fichiers * .graph)
  • roboconf-instances: Instances Roboconf (noms de fichiers * .instances)
  • robotframework: RobotFramework (noms de fichiers * .txt, * .robot)
  • rql: RQL (noms de fichiers * .rql)
  • rsl: RSL (noms de fichiers * .rsl)
  • premier, reste, texte restructuré: reStructuredText (noms de fichiers * .rst, * .rest)
  • rts, trafficscript: TrafficScript (noms de fichiers * .rts)
  • rouille: rouille (noms de fichiers * .rs, * .rs.in)
  • sass: Sass (noms de fichiers * .sass)
  • sc, supercollider: SuperCollider (noms de fichiers * .sc, * .scd)
  • scala: Scala (noms de fichiers * .scala)
  • scaml: Scaml (noms de fichiers * .scaml)
  • schéma, scm: schéma (noms de fichiers * .scm, * .ss)
  • scilab: Scilab (noms de fichiers * .sci, * .sce, * .tst)
  • scss: SCSS (noms de fichiers * .scss)
  • shen: Shen (noms de fichiers * .shen)
  • slim: Slim (noms de fichiers * .slim)
  • smali: Smali (noms de fichiers * .smali)
  • smalltalk, squeak, st: Smalltalk (noms de fichiers * .st)
  • smarty: Smarty (noms de fichiers * .tpl)
  • sml: ML standard (noms de fichiers * .sml, * .sig, * .fun)
  • snobol: Snobol (noms de fichiers * .snobol)
  • sourceslist, sources.list, debsources: Debian Sourcelist (noms de fichiers sources.list)
  • sp: SourcePawn (noms de fichiers * .sp)
  • sparql: SPARQL (noms de fichiers * .rq, * .sparql)
  • spec: RPMSpec (noms de fichiers * .spec)
  • splus, s, r: S (noms de fichiers * .S, * .R, .Rhistory, .Rprofile, .Renviron)
  • sql: SQL (noms de fichiers * .sql)
  • sqlite3: sqlite3con (noms de fichiers * .sqlite3-console)
  • squidconf, squid.conf, squid: SquidConf (noms de fichiers squid.conf)
  • ssp: Page Scalate Server (noms de fichiers * .ssp)
  • Stan: Stan (noms de fichiers * .stan)
  • swift: Swift (noms de fichiers * .swift)
  • swig: SWIG (noms de fichiers * .swg, * .i)
  • systemverilog, sv: systemverilog (noms de fichiers * .sv, * .svh)
  • tads3: TADS 3 (noms de fichiers * .t)
  • appuyez sur: TAP (noms de fichiers * .tap)
  • tcl: Tcl (noms de fichiers * .tcl, * .rvt)
  • tcsh, csh: Tcsh (noms de fichiers * .tcsh, * .csh)
  • tcshcon: Session Tcsh
  • thé: Thé (noms de fichiers * .tea)
  • termcap: Termcap (noms de fichiers termcap, termcap.src)
  • terminfo: Terminfo (noms de fichiers terminfo, terminfo.src)
  • terraform, tf: Terraform (noms de fichiers * .tf)
  • tex, latex: TeX (noms de fichiers * .tex, * .aux, * .toc)
  • text: texte uniquement (noms de fichiers * .txt)
  • Thrift: Thrift (noms de fichiers * .thrift)
  • todotxt: Todotxt (noms de fichiers todo.txt, * .todotxt)
  • trac-wiki, moin: balisage MoinMoin / Trac Wiki
  • cime des arbres: cime des arbres (noms de fichiers * .treetop, * .tt)
  • ts, typescript: TypeScript (noms de fichiers * .ts)
  • tortue: tortue (noms de fichiers * .ttl)
  • brindille: Brindille
  • urbiscript: UrbiScript (noms de fichiers * .u)
  • vala, vapi: Vala (noms de fichiers * .vala, * .vapi)
  • vb.net, vbnet: VB.net (noms de fichiers * .vb, * .bas)
  • vctreestatus: VCTreeStatus
  • vélocité: vélocité (noms de fichiers * .vm, * .fhtml)
  • verilog, v: verilog (noms de fichiers * .v)
  • vgl: VGL (noms de fichiers * .rpf)
  • vhdl: vhdl (noms de fichiers * .vhdl, * .vhd)
  • vim: VimL (noms de fichiers * .vim, .vimrc, .exrc, .gvimrc, _vimrc, _exrc, _gvimrc, vimrc, gvimrc)
  • x10, xten: X10 (noms de fichiers * .x10)
  • xml + guépard, xml + spitfire: XML + Cheetah
  • xml + django, xml + jinja: XML + Django / Jinja
  • xml + erb, xml + ruby: XML + Ruby
  • xml + evoque: XML + Evoque (noms de fichiers * .xml)
  • xml + lasso: XML + Lasso
  • xml + mako: XML + Mako
  • xml + mako: XML + Mako
  • xml + myghty: XML + Myghty
  • xml + php: XML + PHP
  • xml + smarty: XML + Smarty
  • xml + vélocité: XML + vélocité
  • xml: XML (noms de fichiers * .xml, * .xsl, * .rss, * .xslt, * .xsd, * .wsdl, * .wsf)
  • xquery, xqy, xq, xql, xqm: XQuery (noms de fichiers * .xqy, * .xquery, * .xq, * .xql, * .xqm)
  • xslt: XSLT (noms de fichiers * .xsl, * .xslt, * .xpl)
  • xtend: Xtend (noms de fichiers * .xtend)
  • xul + mozpreproc: XUL + mozpreproc (noms de fichiers * .xul.in)
  • yaml + jinja, sel, sls: YAML + Jinja (noms de fichiers * .sls)
  • yaml: YAML (noms de fichiers * .yaml, * .yml)
  • zephir: Zephir (noms de fichiers * .zep)
Thomas Weller

Python est un mauvais exemple ici, car Python s’appuie sur l’indentation dans le cadre de la syntaxe. Peut-il vraiment répondre à l’exigence OP de formater un code Java aligné à gauche qui a 10 instructions avec des points-virgules ; par ligne et accolades aux mauvais endroits?

Ira Baxter

@Thomas: où OP nécessitait-il un formatage « Java aligné à gauche … etc. »? [Je suis d’accord que c’est une bonne chose en général, mais SR ne consiste pas à inventer les exigences des autres.]

Thomas Weller

@IraBaxter: dans le titre « embellir » et « jolie impression ». XML assez imprimé, par exemple avec des sauts de ligne et une indentation appropriée. Également « reformater le code source ». Dans Eclipse, un reformatage fait exactement cela: mettre une instruction par ligne, mettre des accolades au bon endroit et mettre en retrait le code. Si vous n’avez pas de code Java aligné à gauche, vous n’avez pas besoin d’un tel outil 😉

eadmaster

J’ai essayé pygmentize comme suggéré, mais comme source-highlight il ne reformate pas le code, il ajoute juste une surbrillance de couleur (essayé avec les fichiers de code source C et Python) ..


 Ira Baxter

Notre famille Source Code Formatter couvre un large éventail de langues. Ils sont basés sur une analyse précise (spécifique au dialecte) du langage source vers les AST et la régénération du code à partir des AST. Ce type de reformatage ne casse jamais le code reformaté en ce qui concerne la compilabilité ou la fonctionnalité. (Il existe des formateurs de piratage de chaînes qui peuvent casser votre code; ils sont superbes jusqu’à ce que vous vous retrouviez à déboguer du code formaté qui fonctionnait auparavant).

Le reformatage gère « Java aligné à gauche avec {} » mal placé (et les analogues pour d’autres langues) comme suggéré comme une exigence raisonnable dans un commentaire à l’une des autres réponses.

Ils sont nécessairement construits comme des entités distinctes car

  • il y en a beaucoup, et cela rend la maintenance par notre équipe pratique
  • les langues qu’ils traitent évoluent à des rythmes différents
  • ils nécessitent des capacités d’analyse différentes (par exemple, C et C ++ nécessitent un support inhabituel pour gérer les directives de préprocesseur, COBOL a des contraintes de zone, Python utilise une indentation amusante, …)

Comment cela répond aux «exigences» du PO:

  • Couvrir de nombreuses langues (Toute la liste spécifique d’OP à l’exception de ProtoBuf, peut-être un jour)
  • Doit les installer séparément; cependant, ils ont tous des styles et des interfaces cohérents, donc ce n’est pas la même expérience que d’installer N différents formateurs de N fournisseurs différents, chacun avec ses propres variations d’installation / configuration / ligne de commande.
  • Ils sont exécutés de manière cohérente et sont scriptables. L’opérateur peut formater d’un fichier à un autre, ou d’un fichier à la sortie standard, ou on peut formater un grand ensemble de fichiers à la fois.
  • Fonctionne sous Windows nativement et sous Linux sous Wine. Dans cette dernière cause, les scripts de lancement sont des commandes sh et la présence de Wine n’est pas remarquée par l’appelant
  • Source fermée (si acquis en tant que formateurs; on peut obtenir la source de chaque formateur en acquérant notre produit de transformation de programme général)
  • Pas demandé mais extrêmement utile: ces formateurs comprennent une grande variété d’encodages de caractères et peuvent même passer de l’encodage en lecture à un autre encodage tel qu’imprimé.

Étant donné que ces formateurs sont les produits de mon entreprise, ne prenez pas ma réponse ici comme une recommandation. Je documente simplement leur existence.

eadmaster

cela ressemble à des produits commerciaux Windows, j’ai demandé des alternatives gratuites compatibles avec Linux.

Ira Baxter

Ce que vous avez dit, c’est que vous préféreriez éviter la source fermée. Et le logiciel fonctionne sous Linux, même si vous n’aimez pas comment. Et je pense que des solutions de ce type sont assez difficiles à trouver.

 

/, #de, code, embellissement, multilingue, Reformatage, source

 

wiki

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *