многоязычный преобразователь исходного кода/улучшитель/симпатичный принтер

Я ищу многоязычный редактор исходного кода/улучшитель/симпатичный принтер. Установка и управление отдельным инструментом для каждого языка требует много времени.

Он должен поддерживать

  • С/С++
  • Ява
  • JavaScript
  • HTML
  • PHP
  • Питон
  • Луа
  • и, надеюсь, некоторые другие языки, которые мне понадобятся в будущем

Он должен работать в Linux, и я хотел бы избежать онлайн-решений и программного обеспечения с закрытым исходным кодом.

Наиболее независимое от языка решение, которое я нашел до сих пор, — это clang-format, который поддерживает C/C++, Java, JavaScript, Objective-C и Protobuf .

В качестве альтернативы, GNU source-highlight и Pygments утверждают, что поддерживают множество языков, но мне не ясно, могут ли они также переформатировать исходный код, который они обрабатывают, и распечатать его в формате stdout.

Например, я пробовал:

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

и он просто выводит исходный файл, окруженный некоторыми тегами HTML.

clang-format не поддерживает HTML, PHP, Python, Lua и, возможно, другие языки, которые мне нужны. Установка и управление отдельным инструментом для каждого из них занимает довольно много времени.
Подумайте об этом наоборот: зачем кому-то изобретать такой инструмент? В проекте 2 или 3 языка программирования. Обычно разработчик изобретает такой инструмент, потому что он в нем нуждается. Зачем ему разрабатывать инструмент для 30 языков программирования, если он хорошо знает только 3 из них? Поэтому я сомневаюсь, что такой инструмент доступен. То же самое относится и к метрикам: вы вряд ли найдете инструмент, поддерживающий множество языков одновременно. Обычно вам нужны плагины.
@ThomasWeller: согласен, ни один программист, которому поручено выполнение стандартных задач программирования, не изобрел бы такой инструмент. Вы должны найти кого-то, кто занимается обработкой языка, и тогда вы получите это как побочный эффект от создания инструментов обработки языка. Смотрите мой ответ. (не знаю, как вы приплели метрики в разговор, но на самом деле аналогичный эффект есть и у инструментов метрик).
Я должен добавить, что макет кода должен быть правильно отформатирован для вашей организации в исходных файлах, а не только тогда, когда вы показываете его кому-то.

Ответы (3)

Вы можете взглянуть на CodeMirror 2 , который соответствует 90%-95% ваших требований и может быть расширен, чтобы соответствовать остальным :

  • Открытый исходный код и бесплатно — Да , коммерческая поддержка доступна от автора.
  • Переформатирование кода - Да
  • Подсветка синтаксиса — Да
  • Linux — да Кроссплатформенное решение для браузера на основе JavaScript
  • Автономное использование — Да , либо загрузите последнюю версию , либо клонируйте репозиторий git и запустите его.
  • Поддержка следующих языков:
    • С/С++ Да
    • Java Да
    • JavaScript Да
    • Objective-C Не специально, но режим C должен более или менее охватывать это и даже в примерах
    • Protobuf Не упоминается на веб-странице, но присутствует в репозитории git.
    • HTML Да
    • PHP Да
    • Питон Да
    • Луа Да
    • и, надеюсь, какие-то другие языки, которые мне понадобятся в будущем. В настоящее время поддерживаются 50 языков, и вы можете добавить свои собственные .

Надеюсь, если вы добавите дополнительные языки, вы вернете их обратно в проект.

Демонстрация: перед автоформатированием

введите описание изображения здесь

Демо После автоформатирования всего

введите описание изображения здесь

это кажется хорошей альтернативой, есть ли интерфейс командной строки, который я мог бы использовать с Geany?

Обратите внимание, что pygments — это средство подсветки кода, а не инструмент переформатирования, он не предназначен для этого.

Пакет python pygments при установке с:

pip install -U pygments

или в Linux:

sudo pip install -U pygments

Добавляет команду pygmentize, которая может выводить в html или на терминал с поддержкой цвета , тестируя файл python, со стилем вывода по умолчанию и автоопределением:

Скриншот

Python и пигменты:

  • Бесплатно, бесплатно и с открытым исходным кодом
  • Кроссплатформенный
  • pygments в настоящее время поддерживает ряд выходных форматов, HTML, LaTeX, RTF, SVG, все форматы изображений, которые поддерживает PIL, и последовательности ANSI.

Проверка моей установленной версии на наличие поддерживаемых лексеров дает более 300 поддерживаемых языков и/или вариантов, которых должно быть достаточно для большинства людей:

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

Лексеры:

  • abap: ABAP (имена файлов *.abap, *.ABAP)
  • abnf: ABNF (имена файлов *.abnf)
  • ada, ada95, ada2005: Ada (имена файлов *.adb, *.ads, *.ada)
  • adl: ADL (имена файлов *.adl, *.adls, *.adlf, *.adlx)
  • agda: Agda (имена файлов *.agda)
  • ahk, autohotkey: autohotkey (имена файлов *.ahk, *.ahkl)
  • сплав: сплав (имена файлов *.als)
  • antlr-as, antlr-actionscript: ANTLR с целью ActionScript (имена файлов *.G, *.g)
  • antlr-cpp: ANTLR с целью CPP (имена файлов *.G, *.g)
  • antlr-csharp, antlr-c#: ANTLR с целью C# (имена файлов *.G, *.g)
  • antlr-java: ANTLR с целью Java (имена файлов *.G, *.g)
  • antlr-objc: ANTLR с целью ObjectiveC (имена файлов *.G, *.g)
  • antlr-perl: ANTLR с Perl Target (имена файлов *.G, *.g)
  • antlr-python: ANTLR с целью Python (имена файлов *.G, *.g)
  • antlr-ruby, antlr-rb: ANTLR с Ruby Target (имена файлов *.G, *.g)
  • рог: ANTLR
  • apacheconf, aconf, apache: ApacheConf (имена файлов .htaccess, apache.conf, apache2.conf)
  • apl: APL (имена файлов *.apl)
  • applescript: AppleScript (имена файлов *.applescript)
  • arduino: Arduino (имена файлов *.ino)
  • as, actionscript: ActionScript (имена файлов *.as)
  • as3, actionscript3: ActionScript 3 (имена файлов *.as)
  • аспектj: AspectJ (имена файлов *.aj)
  • aspx-cs: aspx-cs (имена файлов *.aspx, *.asax, *.ascx, *.ashx, *.asmx, *.axd)
  • aspx-vb: aspx-vb (имена файлов *.aspx, *.asax, *.ascx, *.ashx, *.asmx, *.axd)
  • asy, асимптота: асимптота (имена файлов *.asy)
  • at, ambienttalk, ambienttalk/2: AmbientTalk (имена файлов *.at)
  • autoit: AutoIt (имена файлов *.au3)
  • awk, gawk, mawk, nawk: Awk (имена файлов *.awk)
  • basemake: Базовый Makefile
  • bash, sh, ksh, shell: Bash (имена файлов *.sh, *.ksh, *.bash, *.ebuild, *.eclass, *.exheres-0, .exlib, .bashrc, bashrc, .bash_ , bash_* , ПКГБИЛД)
  • bat, batch, dosbatch, winbatch: пакетный файл (имена файлов *.bat, *.cmd)
  • bbcode: BBCode
  • до н.э.: BC (имена файлов *.bc)
  • befunge: Befunge (имена файлов *.befunge)
  • blitzbasic, b3d, bplus: BlitzBasic (имена файлов *.bb, *.decls)
  • blitzmax, bmax: BlitzMax (имена файлов *.bmx)
  • bnf: BNF (имена файлов *.bnf)
  • бу: Бу (имена файлов *.boo)
  • буги-вуги: буги-вуги (имена файлов *.bpl)
  • brainfuck, bf: Brainfuck (имена файлов *.bf, *.b)
  • бро: Братан (имена файлов *.bro)
  • bugs, winbugs, openbugs: ОШИБКИ (имена файлов *.bug)
  • c-objdump: c-objdump (имена файлов *.c-objdump)
  • c: C (имена файлов *.c, *.h, *.idc)
  • ca65: ассемблер ca65 (имена файлов *.s)
  • cadl: cADL (имена файлов *.cadl)
  • camkes, idl4: CAmkES (имена файлов *.camkes, *.idl4)
  • cbmbas: CBM BASIC V2 (имена файлов *.bas)
  • ceylon: Цейлон (имена файлов *.ceylon)
  • cfc: Coldfusion CFC (имена файлов *.cfc)
  • cfengine3, cf3: CFEngine3 (имена файлов *.cf)
  • cfm: Coldfusion HTML (имена файлов *.cfm, *.cfml)
  • cfs: cfstatement
  • chai, chaiscript: ChaiScript (имена файлов *.chai)
  • часовня, chpl: Часовня (имена файлов *.chpl)
  • cheetah, spitfire: Cheetah (имена файлов *.tmpl, *.spt)
  • cirru: Cirru (имена файлов *.cirru)
  • глина: Clay (имена файлов *.clay)
  • clojure, clj: Clojure (имена файлов *.clj)
  • clojurescript, cljs: ClojureScript (имена файлов *.cljs)
  • cmake: CMake (имена файлов *.cmake, CMakeLists.txt)
  • cobol: COBOL (имена файлов *.cob, *.COB, *.cpy, *.CPY)
  • cobolfree: COBOLFree (имена файлов *.cbl, *.CBL)
  • coffee-script, coffeescript, coffee: CoffeeScript (имена файлов *.coffee)
  • common-lisp, cl, lisp: Common Lisp (имена файлов *.cl, *.lisp)
  • componentpascal, cp: Компонентный Паскаль (имена файлов *.cp, *.cps)
  • консоль, сеанс оболочки: сеанс Bash (имена файлов *.sh-session, *.shell-session)
  • control, debcontrol: файл управления Debian (управление именами файлов)
  • coq: Coq (имена файлов *.v)
  • cpp, c++: C++ (имена файлов *.cpp, *.hpp, *.c++, *.h++, *.cc, *.hh, *.cxx, *.hxx, *.C, *.H, *.cp , *.CPP)
  • cpp-objdump, c++-objdumb, cxx-objdump: cpp-objdump (имена файлов *.cpp-objdump, *.c++-objdump, *.cxx-objdump)
  • cpsa: CPSA (имена файлов *.cpsa)
  • crmsh, pcmk: Crmsh (имена файлов *.crmsh, *.pcmk)
  • croc: Croc (имена файлов *.croc)
  • cryptol, cry: Cryptol (имена файлов *.cry)
  • csharp, c#: C# (имена файлов *.cs)
  • csound, csound-orc: Csound Orchestra (имена файлов *.orc)
  • csound-document, csound-csd: документ Csound (имена файлов *.csd)
  • csound-score, csound-sco: Csound Score (имена файлов *.sco)
  • css+django, css+jinja: CSS+Django/Jinja
  • css+erb, css+ruby: CSS+Ruby
  • css+genshitext, css+genshi: Текст CSS+Genshi
  • css+лассо: CSS+лассо
  • css+мако: CSS+мако
  • css+мако: CSS+мако
  • css+mozpreproc: CSS+mozpreproc (имена файлов *.css.in)
  • css+мити: CSS+мити
  • css+php: CSS+PHP
  • css+умный: CSS+умный
  • css: CSS (имена файлов *.css)
  • огурец, корнишон: корнишон (имена файлов *.feature)
  • cuda, cu: CUDA (имена файлов *.cu, *.cuh)
  • шифр: Cypher (имена файлов *.cyp, *.cypher)
  • cython, pyx, pyrex: Cython (имена файлов *.pyx, *.pxd, *.pxi)
  • d-objdump: d-objdump (имена файлов *.d-objdump)
  • d:D (имена файлов *.d, *.di)
  • дротик: дротик (имена файлов *.dart)
  • delphi, pas, pascal, objectpascal: Delphi (имена файлов *.pas)
  • dg: dg (имена файлов *.dg)
  • diff, udiff: Diff (имена файлов *.diff, *.patch)
  • Джанго, Джинджа: Джанго/Джинджа
  • docker, dockerfile: Docker (имена файлов Dockerfile, *.docker)
  • doscon: Сеанс MSDOS
  • dpatch: Darcs Patch (имена файлов *.dpatch, *.darcspatch)
  • dtd: DTD (имена файлов *.dtd)
  • дуэль, jbst, jsonml+bst: Дуэль (имена файлов *.duel, *.jbst)
  • dylan-console, dylan-repl: сеанс Dylan (имена файлов *.dylan-console)
  • dylan-lid, крышка: DylanLID (имена файлов *.lid, *.hdp)
  • Дилан: Дилан (имена файлов *.dylan, *.dyl, *.intr)
  • Эрл-Грей, ЭрлГрей, например: Эрл Грей (имена файлов *.eg)
  • easytrieve: Easytrieve (имена файлов *.ezt, *.mac)
  • ebnf: EBNF (имена файлов *.ebnf)
  • ec: eC (имена файлов *.ec, *.eh)
  • ecl: ECL (имена файлов *.ecl)
  • eiffel: Eiffel (имена файлов *.e)
  • elixir, ex, exs: Эликсир (имена файлов *.ex, *.exs)
  • elm: Elm (имена файлов *.elm)
  • emacs, elisp, emacs-lisp: EmacsLisp (имена файлов *.el)
  • эрб: ЕРБ
  • erl: сеанс Erlang erl (имена файлов *.erl-sh)
  • erlang: Erlang (имена файлов *.erl, *.hrl, *.es, *.escript)
  • evoque: Evoque (имена файлов *.evoque)
  • ezhil: Эжил (имена файлов *.n)
  • factor: Factor (имена файлов *.factor)
  • fan: Fantom (имена файлов *.fan)
  • fancy, fy: Fancy (имена файлов *.fy, *.fancypack)
  • felix, flx: Felix (имена файлов *.flx, *.flxh)
  • fish, fishshell: Fish (имена файлов *.fish, *.load)
  • фортран: Фортран (имена файлов *.f03, *.f90, *.F03, *.F90)
  • fortranfixed: FortranFixed (имена файлов *.f, *.F)
  • foxpro, vfp, clipper, xbase: FoxPro (имена файлов *.PRG, *.prg)
  • fsharp: FSharp (имена файлов *.fs, *.fsi)
  • разрыв: GAP (имена файлов *.g, *.gd, *.gi, *.gap)
  • газ, asm: ГАЗ (имена файлов *.s, *.S)
  • genshi, kid, xml+genshi, xml+kid: Genshi (имена файлов *.kid)
  • genshitext: Текст Генши
  • glsl: GLSL (имена файлов *.vert, *.frag, *.geo)
  • gnuplot: Gnuplot (имена файлов *.plot, *.plt)
  • go: Go (имена файлов *.go)
  • golo: Golo (имена файлов *.golo)
  • gooddata-cl: GoodData-CL (имена файлов *.gdc)
  • gosu: Gosu (имена файлов *.gs, *.gsx, *.gsp, *.vark)
  • groff, nroff, man: Groff (имена файлов *.[1234567], *.man)
  • groovy: Groovy (имена файлов *.groovy, *.gradle)
  • gst: Шаблон Госу (имена файлов *.gst)
  • haml: Haml (имена файлов *.haml)
  • руль: руль
  • haskell, hs: Haskell (имена файлов *.hs)
  • haxeml, hxml: Hxml (имена файлов *.hxml)
  • шестнадцатеричный дамп: шестнадцатеричный дамп
  • html+гепард, html+спитфайр, htmlcheetah: HTML+гепард
  • html+django, html+jinja, htmldjango: HTML+Django/Jinja
  • html+evoque: HTML+Evoque (имена файлов *.html)
  • html+genshi, html+ребенок: HTML+Genshi
  • html+handlebars: HTML+Handlebars (имена файлов *.handlebars, *.hbs)
  • html+лассо: HTML+лассо
  • html+мако: HTML+мако
  • html+мако: HTML+мако
  • html+мойти: HTML+мойти
  • html+php: HTML+PHP (имена файлов *.phtml)
  • html+умный: HTML+умный
  • html+twig: HTML+Twig (имена файлов *.twig)
  • html+скорость: HTML+скорость
  • html: HTML (имена файлов *.html, *.htm, *.xhtml, *.xslt)
  • HTTP: HTTP
  • hx, haxe, hxsl: Haxe (имена файлов *.hx, *.hxsl)
  • hybris, hy: Hybris (имена файлов *.hy, *.hyb)
  • hylang: Hy (имена файлов *.hy)
  • i6t: шаблон Inform 6 (имена файлов *.i6t)
  • idl: IDL (имена файлов *.pro)
  • idris, idr: Idris (имена файлов *.idr)
  • iex: сессия Elixir iex
  • igor, igorpro: Игорь (имена файлов *.ipf)
  • inform6, i6: Inform 6 (имена файлов *.inf)
  • inform7, i7: Inform 7 (имена файлов *.ni, *.i7x)
  • ini, cfg, dosini: INI (имена файлов *.ini, *.cfg, *.inf)
  • io: io (имена файлов *.io)
  • ioke, ik: Ioke (имена файлов *.ik)
  • ipython2, ipython: IPython
  • ipython3: IPython3
  • ipythonconsole: сеанс консоли IPython
  • irc: журналы IRC (имена файлов *.weechatlog)
  • isabelle: Изабель (имена файлов *.thy)
  • j: J (имена файлов *.ijs)
  • jade: Jade (имена файлов *.jade)
  • jags: JAGS (имена файлов *.jag, *.bug)
  • jasmin, jasminxt: Jasmin (имена файлов *.j)
  • Java: Java (имена файлов *.java)
  • javascript+mozpreproc: Javascript+mozpreproc (имена файлов *.js.in)
  • jcl: JCL (имена файлов *.jcl)
  • jlcon: консоль Юлии
  • js+гепард, javascript+гепард, js+спитфайр, javascript+спитфайр: JavaScript+гепард
  • 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+лассо, javascript+лассо: JavaScript+лассо
  • js+мако, javascript+мако: JavaScript+мако
  • js+мако, javascript+мако: JavaScript+мако
  • js+myghty, javascript+myghty: JavaScript+myghty
  • js+php, javascript+php: JavaScript+PHP
  • js+умный, javascript+умный: JavaScript+умный
  • js, javascript: JavaScript (имена файлов *.js, *.jsm)
  • json: JSON (имена файлов *.json)
  • jsonld, json-ld: JSON-LD (имена файлов *.jsonld)
  • jsp: Страница сервера Java (имена файлов *.jsp)
  • julia, jl: Юлия (имена файлов *.jl)
  • kal: Kal (имена файлов *.kal)
  • kconfig, menuconfig, linux-config, kernel-config: Kconfig (имена файлов Kconfig, Config.in , external.in*, standard-modules.in)
  • кока: Кока (имена файлов *.kk, *.kki)
  • kotlin: Kotlin (имена файлов *.kt)
  • lagda,literate-agda: грамотная агда (имена файлов *.lagda)
  • лассо, лассо-скрипт: лассо (имена файлов *.lasso, *.lasso[89])
  • lcry, Literate-cryptol, lcryptol: Literate Cryptol (имена файлов *.lcry)
  • бережливый: бережливый (имена файлов *.lean)
  • меньше: LessCss (имена файлов *.less)
  • lhs, Literate-Haskell, lhaskell: Грамотный Haskell (имена файлов *.lhs)
  • лидр, грамотный-идрис, лидрис: Грамотный Идрис (имена файлов *.lidr)
  • lighty, lighttpd: конфигурационный файл Lighttpd
  • лимбо: Лимбо (имена файлов *.b)
  • жидкость: жидкость (имена файлов *.liquid)
  • live-script, livescript: LiveScript (имена файлов *.ls)
  • llvm: LLVM (имена файлов *.ll)
  • logos: Логотипы (имена файлов *.x, *.xi, *.xm, *.xmi)
  • logtalk: Logtalk (имена файлов *.lgt, *.logtalk)
  • lsl: LSL (имена файлов *.lsl)
  • lua: Lua (имена файлов *.lua, *.wlua)
  • make, makefile, mf, bsdmake: Makefile (имена файлов *.mak, .mk, Makefile, makefile, Makefile. , GNUmakefile)
  • мако: Мако (имена файлов *.mao)
  • мако: Мако (имена файлов *.mao)
  • maql: MAQL (имена файлов *.maql)
  • маска: Маска (имена файлов *.mask)
  • mason: Mason (имена файлов *.m, *.mhtml, *.mc, *.mi, autohandler, dhandler)
  • mathematica, mma, nb: Mathematica (имена файлов *.nb, *.cdf, *.nbp, *.ma)
  • Matlab: Matlab (имена файлов *.m)
  • matlabsession: сеанс Matlab
  • Минид: МиниД
  • modelica: Modelica (имена файлов *.mo)
  • modula2, m2: Modula-2 (имена файлов *.def, *.mod)
  • обезьяна: Обезьяна (имена файлов *.monkey)
  • moocode, moo: MOOCode (имена файлов *.moo)
  • луна, лунный скрипт: MoonScript (имена файлов *.moon)
  • можашпрепрок: можашпрепрок
  • мозперцентпрепрок: мозперцентпрепрок
  • mql, mq4, mq5, mql4, mql5: MQL (имена файлов *.mq4, *.mq5, *.mqh)
  • mscgen, msc: Mscgen (имена файлов *.msc)
  • mupad: MuPAD (имена файлов *.mu)
  • mxml: MXML (имена файлов *.mxml)
  • myghty: Myghty (имена файлов *.myt, автоделегирование)
  • MySQL: MySQL
  • nasm: NASM (имена файлов *.asm, *.ASM)
  • nemerle: Nemerle (имена файлов *.n)
  • nesc: nesC (имена файлов *.nc)
  • newlisp: NewLisp (имена файлов *.lsp, *.nl)
  • новояз: новояз (имена файлов *.ns2)
  • nginx: файл конфигурации Nginx
  • нимрод, ним: Нимрод (имена файлов *.nim, *.nimrod)
  • nit: нит (имена файлов *.nit)
  • nixos, nix: Nix (имена файлов *.nix)
  • nsis, nsi, nsh: NSIS (имена файлов *.nsi, *.nsh)
  • числовой: NumPy
  • objdump-nasm: objdump-nasm (имена файлов *.objdump-intel)
  • objdump: objdump (имена файлов *.objdump)
  • Objective-C++, ObjectiveC++, obj-C++, objC++: Objective-C++ (имена файлов *.mm, *.hh)
  • target-c, Objectivec, obj-c, objc: Objective-C (имена файлов *.m, *.h)
  • target-j, targetj, obj-j, objj: Objective-J (имена файлов *.j)
  • ocaml: OCaml (имена файлов *.ml, *.mli, *.mll, *.mly)
  • octave: Octave (имена файлов *.m)
  • odin: ODIN (имена файлов *.odin)
  • ooc: Ooc (имена файлов *.ooc)
  • opa: Opa (имена файлов *.opa)
  • openge, abl, progress: OpenEdge ABL (имена файлов *.p, *.cls)
  • pacmanconf: PacmanConf (имена файлов pacman.conf)
  • pan: Pan (имена файлов *.pan)
  • parasail: ParaSail (имена файлов *.psi, *.psl)
  • пешка: пешка (имена файлов *.p, *.pwn, *.inc)
  • perl, pl: Perl (имена файлов *.pl, *.pm, *.t)
  • perl6, pl6: Perl6 (имена файлов *.pl, *.pm, *.nqp, *.p6, *.6pl, *.p6l, *.pl6, *.6pm, *.p6m, *.pm6, *.t )
  • php, php3, php4, php5: PHP (имена файлов *.php, *.php[345], *.inc)
  • свинья: свинья (имена файлов *.pig)
  • щука: щука (имена файлов *.pike, *.pmod)
  • pkgconfig: PkgConfig (имена файлов *.pc)
  • plpgsql: PL/pgSQL
  • postgresql, postgres: диалект PostgreSQL SQL
  • postscript, postscr: PostScript (имена файлов *.ps, *.eps)
  • pot, po: Каталог Gettext (имена файлов *.pot, *.po)
  • pov: POVRay (имена файлов *.pov, *.inc)
  • powershell, posh, ps1, psm1: PowerShell (имена файлов *.ps1, *.psm1)
  • praat: Praat (имена файлов *.praat, *.proc, *.psc)
  • пролог: Пролог (имена файлов *.ecl, *.prolog, *.pro, *.pl)
  • properties, jproperties: Свойства (имена файлов *.properties)
  • protobuf, proto: буфер протокола (имена файлов *.proto)
  • ps1con: сеанс PowerShell
  • psql, postgresql-console, postgres-console: консоль PostgreSQL (psql)
  • puppet: Puppet (имена файлов *.pp)
  • py3tb: трассировка Python 3.0 (имена файлов *.py3tb)
  • pycon: сеанс консоли Python
  • pypylog, pypy: журнал PyPy (имена файлов *.pypylog)
  • pytb: Python Traceback (имена файлов *.pytb)
  • python, py, sage: Python (имена файлов *.py, *.pyw, *.sc, SConstruct, SConscript, *.tac, *.sage)
  • питон3, ру3: питон 3
  • qbasic, базовый: QBasic (имена файлов *.BAS, *.bas)
  • qml, qbs: QML (имена файлов *.qml, *.qbs)
  • qvto, qvt: QVTO (имена файлов *.qvto)
  • racket, rkt: Racket (имена файлов *.rkt, *.rktd, *.rktl)
  • ragel-c: Ragel в хосте C (имена файлов *.rl)
  • ragel-cpp: Ragel в хосте CPP (имена файлов *.rl)
  • ragel-d: Ragel на хосте D (имена файлов *.rl)
  • ragel-em: встроенный Ragel (имена файлов *.rl)
  • ragel-java: Ragel в хосте Java (имена файлов *.rl)
  • ragel-objc: Ragel в хосте Objective C (имена файлов *.rl)
  • ragel-ruby, ragel-rb: Ragel в Ruby Host (имена файлов *.rl)
  • Рагель: Рагель
  • raw: необработанные данные токена
  • rb, ruby, duby: Ruby (имена файлов *.rb, *.rbw, Rakefile, *.rake, *.gemspec, *.rbx, *.duby, Gemfile)
  • rbcon, irb: сессия Ruby irb
  • rconsole, rout: RConsole (имена файлов *.Rout)
  • rd: Rd (имена файлов *.Rd)
  • rebol: REBOL (имена файлов *.r, *.r3, *.reb)
  • красный, красный/система: красный (имена файлов *.red, *.reds)
  • redcode: Redcode (имена файлов *.cw)
  • реестр: reg (имена файлов *.reg)
  • ресурс, пакет ресурсов: ResourceBundle (имена файлов *.txt)
  • rexx, arexx: Rexx (имена файлов *.rexx, *.rex, *.rx, *.arexx)
  • rhtml, html+erb, html+ruby: RHTML (имена файлов *.rhtml)
  • roboconf-graph: Roboconf Graph (имена файлов *.graph)
  • roboconf-instances: экземпляры Roboconf (имена файлов *.instances)
  • robotframework: RobotFramework (имена файлов *.txt, *.robot)
  • rql: RQL (имена файлов *.rql)
  • rsl: RSL (имена файлов *.rsl)
  • rst, rest, restructuredtext: reStructuredText (имена файлов *.rst, *.rest)
  • rts, trafficscript: TrafficScript (имена файлов *.rts)
  • ржавчина: Rust (имена файлов *.rs, *.rs.in)
  • sass: Sass (имена файлов *.sass)
  • sc, суперколлайдер: SuperCollider (имена файлов *.sc, *.scd)
  • scala: Scala (имена файлов *.scala)
  • scaml: Мошенничество (имена файлов *.scaml)
  • схема, scm: Схема (имена файлов *.scm, *.ss)
  • scilab: Scilab (имена файлов *.sci, *.sce, *.tst)
  • scss: SCSS (имена файлов *.scss)
  • shen: Shen (имена файлов *.shen)
  • slim: Slim (имена файлов *.slim)
  • smali: smali (имена файлов *.smali)
  • smalltalk, squeak, st: Smalltalk (имена файлов *.st)
  • smarty: Smarty (имена файлов *.tpl)
  • sml: Стандартный ML (имена файлов *.sml, *.sig, *.fun)
  • snobol: Snobol (имена файлов *.snobol)
  • sourceslist, sources.list, debsources: Debian Sourcelist (имена файлов sources.list)
  • sp: SourcePawn (имена файлов *.sp)
  • sparql: SPARQL (имена файлов *.rq, *.sparql)
  • спецификация: RPMSpec (имена файлов *.spec)
  • splus, s, r: S (имена файлов *.S, *.R, .Rhistory, .Rprofile, .Renviron)
  • sql: SQL (имена файлов *.sql)
  • sqlite3: sqlite3con (имена файлов *.sqlite3-консоль)
  • squidconf, squid.conf, squid: SquidConf (имена файлов squid.conf)
  • ssp: масштабирование страницы сервера (имена файлов *.ssp)
  • stan: Стэн (имена файлов *.stan)
  • swift: Swift (имена файлов *.swift)
  • swig: SWIG (имена файлов *.swg, *.i)
  • systemverilog, sv: systemverilog (имена файлов *.sv, *.svh)
  • tads3: TADS 3 (имена файлов *.t)
  • tap: TAP (имена файлов *.tap)
  • tcl: Tcl (имена файлов *.tcl, *.rvt)
  • tcsh, csh: Tcsh (имена файлов *.tcsh, *.csh)
  • tcshcon: сеанс Tcsh
  • чай: Чай (имена файлов *.tea)
  • termcap: Termcap (имена файлов termcap, termcap.src)
  • terminfo: Terminfo (имена файлов terminfo, terminfo.src)
  • terraform, tf: Terraform (имена файлов *.tf)
  • tex, латекс: TeX (имена файлов *.tex, *.aux, *.toc)
  • текст: только текст (имена файлов *.txt)
  • бережливость: бережливость (имена файлов *.thrift)
  • todotxt: Todotxt (имена файлов todo.txt, *.todotxt)
  • trac-wiki, moin: Разметка МойнМойн/Trac Wiki
  • верхушка дерева: Верхушка дерева (имена файлов *.treetop, *.tt)
  • ts, typescript: TypeScript (имена файлов *.ts)
  • черепаха: Черепаха (имена файлов *.ttl)
  • ветка: ветка
  • urbiscript: UrbiScript (имена файлов *.u)
  • vala, vapi: Vala (имена файлов *.vala, *.vapi)
  • vb.net, vbnet: VB.net (имена файлов *.vb, *.bas)
  • vctreestatus: VCTreeStatus
  • скорость: скорость (имена файлов *.vm, *.fhtml)
  • verilog, v: verilog (имена файлов *.v)
  • vgl: VGL (имена файлов *.rpf)
  • vhdl: vhdl (имена файлов *.vhdl, *.vhd)
  • vim: VimL (имена файлов *.vim, .vimrc, .exrc, .gvimrc, _vimrc, _exrc, _gvimrc, vimrc, gvimrc)
  • x10, xten: X10 (имена файлов *.x10)
  • xml+гепард, xml+спитфайр: XML+гепард
  • xml+django, xml+jinja: XML+Django/Jinja
  • xml+erb, xml+ruby: XML+Ruby
  • xml+evoque: XML+Evoque (имена файлов *.xml)
  • xml+лассо: XML+лассо
  • xml+мако: XML+мако
  • xml+мако: XML+мако
  • xml+mythy: XML+мойти
  • xml+php: XML+PHP
  • xml+умный: XML+умный
  • xml+скорость: XML+скорость
  • xml: XML (имена файлов *.xml, *.xsl, *.rss, *.xslt, *.xsd, *.wsdl, *.wsf)
  • xquery, xqy, xq, xql, xqm: XQuery (имена файлов *.xqy, *.xquery, *.xq, *.xql, *.xqm)
  • xslt: XSLT (имена файлов *.xsl, *.xslt, *.xpl)
  • xtend: Xtend (имена файлов *.xtend)
  • xul+mozpreproc: XUL+mozpreproc (имена файлов *.xul.in)
  • yaml+jinja, соль, sls: YAML+Jinja (имена файлов *.sls)
  • yaml: YAML (имена файлов *.yaml, *.yml)
  • zephir: Zephir (имена файлов *.zep)
Python — плохой пример, так как Python использует отступы как часть синтаксиса. Может ли он действительно выполнить требование OP по форматированию кода Java, выровненного по левому краю, который имеет 10 операторов с точками с запятой ;в строке и фигурными скобками в неправильных местах?
@Thomas: где OP требовал форматирования «выровненной по левому краю Java ... и т. д.»? [Я согласен, что в целом это хорошо, но SR не заключается в том, чтобы изобретать требования других людей.]
@IraBaxter: в заголовке «украсить» и «красиво распечатать». Хорошо напечатанный XML, например, имеет разрывы строк и правильные отступы. Также «переформатировать исходный код». В Eclipse переформатирование делает именно это: помещает по одному оператору в строку, ставит фигурные скобки в нужном месте и делает отступ в коде. Если у вас нет кода Java с выравниванием по левому краю, вам не нужен такой инструмент ;-)
Я пробовал pygmentize, как было предложено, но, похоже source-highlight, код не переформатируется, а просто добавляется выделение цветом (пробовал с файлами исходного кода C и Python).

Наше семейство форматировщиков исходного кода охватывает широкий спектр языков. Они основаны на точном (специфическом для диалекта) анализе исходного языка в AST и регенерации кода из AST. Этот вид переформатирования никогда не нарушает переформатированный код с точки зрения компиляции или функциональности. (Существуют форматтеры для взлома строк, которые могут сломать ваш код; они выглядят великолепно, пока вы не обнаружите, что отлаживаете отформатированный код, который раньше работал).

Переформатирование обрабатывает «выровненную по левому краю Java с плохо размещенным {}» (и аналоги для других языков), как это предлагается в качестве разумного требования в комментарии к одному из других ответов.

Они обязательно строятся как отдельные объекты, потому что

  • их много, и это делает обслуживание нашей командой практичным
  • языки, которые они обрабатывают, развиваются с разной скоростью
  • они требуют разных возможностей синтаксического анализа (например, C и C++ требуют некоторой необычной поддержки для обработки директив препроцессора, COBOL имеет ограничения по площади, Python использует забавные отступы,...)

Как это отвечает «требованиям» OP:

  • Охватить множество языков (все конкретные списки OP, за исключением ProtoBuf, может быть, когда-нибудь)
  • Необходимо установить их отдельно; однако все они имеют одинаковые стили и интерфейсы, поэтому это не то же самое, что установка N разных форматировщиков от N разных поставщиков, каждый со своими собственными вариантами установки/конфигурации/командной строки.
  • Они запускаются согласованным образом и поддерживают сценарии. Оператор может форматировать из файла в другой, или из файла в стандартный выход, или можно форматировать сразу большой набор файлов.
  • Работает в Windows изначально и в Linux под Wine. В последнем случае сценарии запуска представляют собой команды sh, и вызывающая сторона не замечает наличия Wine.
  • Закрытый исходный код (при приобретении форматтеров; можно получить исходный код каждого форматтера, приобретя наш общий продукт для преобразования программ)
  • Не обязательно, но чрезвычайно полезно: эти средства форматирования понимают широкий спектр кодировок символов и могут даже переключаться с кодировки чтения на другую кодировку при выводе.

Поскольку эти средства форматирования являются продуктами моей компании, не воспринимайте мой ответ как рекомендацию. Я просто документирую их существование.

это похоже на коммерческие продукты Windows, я попросил бесплатные альтернативы, совместимые с Linux.
Вы сказали, что предпочитаете избегать закрытого исходного кода. И программное обеспечение работает под Linux, даже если вам это не нравится. И я считаю, что решения такого рода довольно трудно найти.