diff --git a/CHANGELOG.md b/CHANGELOG.md index bebce81..a4f84f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,11 @@ - Add [clang-format](http://clang.llvm.org/docs/ClangFormat.html) beautifier for C/C++/Obj-C languages. - Add [yapf](http://github.com/google/yapf) beautifier for Python. - Closes [#776] (https://github.com/Glavin001/atom-beautify/issues/776) Add support for `collapse-preserve-inline` brace_style for javascript. +- Closes [#786](https://github.com/Glavin001/atom-beautify/issues/786) YAPF configuration files are ignored. # v0.29.0 - Closes [#447](https://github.com/Glavin001/atom-beautify/issues/447). Improved Handlebars language support +- Closes [#384](https://github.com/Glavin001/atom-beautify/issues/384). Add [latexindent.pl](https://github.com/cmhughes/latexindent.pl) beautifier for LaTeX language # v0.26.0 (2015-05-03) - Closes [#176](https://github.com/Glavin001/atom-beautify/issues/176). Add [gofmt](http://golang.org/cmd/gofmt/) beautifier for Go language diff --git a/docs/options.md b/docs/options.md index 000fca9..e315e7e 100644 --- a/docs/options.md +++ b/docs/options.md @@ -4969,6 +4969,250 @@ Wrap lines at next opportunity after N characters (Supported by Pretty Diff) } ``` +#### [LaTeX](#latex) + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +Options for language LaTeX + +##### [Disable Beautifying Language](#disable-beautifying-language) + +**Important**: This option is only configurable from within Atom Beautify's setting panel. + +**Type**: `boolean` + +**Description**: + +Disable LaTeX Beautification + +**How to Configure** + +1. You can open the [Settings View](https://github.com/atom/settings-view) by navigating to +*Edit > Preferences (Linux)*, *Atom > Preferences (OS X)*, or *File > Preferences (Windows)*. +2. Go into *Packages* and search for "*Atom Beautify*" package. +3. Find the option "*Disable Beautifying Language*" and change it to your desired configuration. + +##### [Default Beautifier](#default-beautifier) + +**Important**: This option is only configurable from within Atom Beautify's setting panel. + +**Default**: `Latex Beautify` + +**Type**: `string` + +**Enum**: `Latex Beautify` + +**Description**: + +Default Beautifier to be used for LaTeX + +**How to Configure** + +1. You can open the [Settings View](https://github.com/atom/settings-view) by navigating to +*Edit > Preferences (Linux)*, *Atom > Preferences (OS X)*, or *File > Preferences (Windows)*. +2. Go into *Packages* and search for "*Atom Beautify*" package. +3. Find the option "*Default Beautifier*" and change it to your desired configuration. + +##### [Beautify On Save](#beautify-on-save) + +**Important**: This option is only configurable from within Atom Beautify's setting panel. + +**Type**: `boolean` + +**Description**: + +Automatically beautify LaTeX files on save + +**How to Configure** + +1. You can open the [Settings View](https://github.com/atom/settings-view) by navigating to +*Edit > Preferences (Linux)*, *Atom > Preferences (OS X)*, or *File > Preferences (Windows)*. +2. Go into *Packages* and search for "*Atom Beautify*" package. +3. Find the option "*Beautify On Save*" and change it to your desired configuration. + +##### [Align columns in environments](#align-columns-in-environments) + +**Namespace**: `latex` + +**Key**: `align_columns_in_environments` + +**Default**: `tabular,matrix,bmatrix,pmatrix` + +**Type**: `array` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +undefined (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "align_columns_in_environments": [ + "tabular", + "matrix", + "bmatrix", + "pmatrix" + ] + } +} +``` + +##### [Always look for split braces](#always-look-for-split-braces) + +**Namespace**: `latex` + +**Key**: `always_look_for_split_braces` + +**Default**: `true` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +If `latexindent` should look for commands that split braces across lines (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "always_look_for_split_braces": true + } +} +``` + +##### [Always look for split brackets](#always-look-for-split-brackets) + +**Namespace**: `latex` + +**Key**: `always_look_for_split_brackets` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +If `latexindent` should look for commands that split brackets across lines (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "always_look_for_split_brackets": false + } +} +``` + +##### [Indent char](#indent-char) + +**Namespace**: `latex` + +**Key**: `indent_char` + +**Default**: ` ` + +**Type**: `string` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +Indentation character (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "indent_char": " " + } +} +``` + +##### [Indent preamble](#indent-preamble) + +**Namespace**: `latex` + +**Key**: `indent_preamble` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +Indent the preable (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "indent_preamble": false + } +} +``` + +##### [Indent with tabs](#indent-with-tabs) + +**Namespace**: `latex` + +**Key**: `indent_with_tabs` + +**Default**: `true` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +Indentation uses tabs, overrides `Indent Size` and `Indent Char` (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "indent_with_tabs": true + } +} +``` + +##### [Remove trailing whitespace](#remove-trailing-whitespace) + +**Namespace**: `latex` + +**Key**: `remove_trailing_whitespace` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +Remove trailing whitespace (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "remove_trailing_whitespace": false + } +} +``` + #### [LESS](#less) **Supported Beautifiers**: [`CSScomb`](#csscomb) [`CSScomb`](#csscomb) [`Pretty Diff`](#pretty-diff) [`Pretty Diff`](#pretty-diff) [`Pretty Diff`](#pretty-diff) [`Pretty Diff`](#pretty-diff) [`Pretty Diff`](#pretty-diff) @@ -12152,6 +12396,190 @@ If a terminating comma should be inserted into arrays, object literals, and dest ``` +### Latex Beautify + +##### [Indent char](#indent-char) + +**Namespace**: `latex` + +**Key**: `indent_char` + +**Default**: ` ` + +**Type**: `string` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +Indentation character (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "indent_char": " " + } +} +``` + +##### [Indent with tabs](#indent-with-tabs) + +**Namespace**: `latex` + +**Key**: `indent_with_tabs` + +**Default**: `true` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +Indentation uses tabs, overrides `Indent Size` and `Indent Char` (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "indent_with_tabs": true + } +} +``` + +##### [Indent preamble](#indent-preamble) + +**Namespace**: `latex` + +**Key**: `indent_preamble` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +Indent the preable (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "indent_preamble": false + } +} +``` + +##### [Always look for split braces](#always-look-for-split-braces) + +**Namespace**: `latex` + +**Key**: `always_look_for_split_braces` + +**Default**: `true` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +If `latexindent` should look for commands that split braces across lines (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "always_look_for_split_braces": true + } +} +``` + +##### [Always look for split brackets](#always-look-for-split-brackets) + +**Namespace**: `latex` + +**Key**: `always_look_for_split_brackets` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +If `latexindent` should look for commands that split brackets across lines (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "always_look_for_split_brackets": false + } +} +``` + +##### [Remove trailing whitespace](#remove-trailing-whitespace) + +**Namespace**: `latex` + +**Key**: `remove_trailing_whitespace` + +**Type**: `boolean` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +Remove trailing whitespace (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "remove_trailing_whitespace": false + } +} +``` + +##### [Align columns in environments](#align-columns-in-environments) + +**Namespace**: `latex` + +**Key**: `align_columns_in_environments` + +**Default**: `tabular,matrix,bmatrix,pmatrix` + +**Type**: `array` + +**Supported Beautifiers**: [`Latex Beautify`](#latex-beautify) + +**Description**: + +undefined (Supported by Latex Beautify) + +**Example `.jsbeautifyrc` Configuration** + +```json +{ + "latex": { + "align_columns_in_environments": [ + "tabular", + "matrix", + "bmatrix", + "pmatrix" + ] + } +} +``` + + ### PHP-CS-Fixer ##### [PHP-CS-Fixer Path](#php-cs-fixer-path) diff --git a/examples/nested-jsbeautifyrc/latex/expected/test.tex b/examples/nested-jsbeautifyrc/latex/expected/test.tex new file mode 100644 index 0000000..f94ff9f --- /dev/null +++ b/examples/nested-jsbeautifyrc/latex/expected/test.tex @@ -0,0 +1,5 @@ +This is a sample. +\[ + \int_0^1f(x)\, dx +\] +The above should be indented. diff --git a/examples/nested-jsbeautifyrc/latex/original/test.tex b/examples/nested-jsbeautifyrc/latex/original/test.tex new file mode 100644 index 0000000..3252c8c --- /dev/null +++ b/examples/nested-jsbeautifyrc/latex/original/test.tex @@ -0,0 +1,5 @@ +This is a sample. +\[ +\int_0^1f(x)\, dx +\] +The above should be indented. diff --git a/examples/nested-jsbeautifyrc/opencl/expected/test.cl b/examples/nested-jsbeautifyrc/opencl/expected/test.cl new file mode 100644 index 0000000..546cf9a --- /dev/null +++ b/examples/nested-jsbeautifyrc/opencl/expected/test.cl @@ -0,0 +1,77 @@ +__kernel void reduce_min(__global const int* A, __global int* B, __local int* scratch) { + //Get local variable data + int id = get_global_id(0); + int lid = get_local_id(0); + int N = get_local_size(0); + + //Store valus of global memory into local memory + scratch[lid] = A[id]; + + //Wait for copying to complete + barrier(CLK_LOCAL_MEM_FENCE); + + for (int i = 1; i < N; i *= 2) { + if (!(lid % (i * 2)) && ((lid + i) < N)){ + if (scratch[lid] > scratch[lid + i]) + scratch[lid] = scratch[lid+i]; + } + + barrier(CLK_LOCAL_MEM_FENCE); + } + + //Store cache in output array + if (!lid) + atomic_min(&B[0], scratch[lid]); +} + + +__kernel void reduce_max(__global const int* A, __global int* B, __local int* scratch) { + //Get local variable data + int id = get_global_id(0); + int lid = get_local_id(0); + int N = get_local_size(0); + + //Store valus of global memory into local memory + scratch[lid] = A[id]; + + //Wait for copying to complete + barrier(CLK_LOCAL_MEM_FENCE); + + for (int i = 1; i < N; i *= 2) { + if (!(lid % (i * 2)) && ((lid + i) < N)){ + if (scratch[lid] < scratch[lid + i]) + scratch[lid] = scratch[lid+i]; + } + + barrier(CLK_LOCAL_MEM_FENCE); + } + + //Store cache in output array + if (!lid) + atomic_max(&B[0], scratch[lid]); +} + +__kernel void reduce_avg(__global const int* A, __global int* B, __local int* scratch) { + //Get local variable data + int id = get_global_id(0); + int lid = get_local_id(0); + int N = get_local_size(0); + + //Store valus of global memory into local memory + scratch[lid] = A[id]; + + //Wait for copying to complete + barrier(CLK_LOCAL_MEM_FENCE); + + for (int i = 1; i < N; i *= 2) { + if (!(lid % (i * 2)) && ((lid + i) < N)) + { + scratch[lid] += scratch[lid+i]; + } + barrier(CLK_LOCAL_MEM_FENCE); + } + + //Store cache in output array + if (!lid) + atomic_add(&B[0],scratch[lid]); +} diff --git a/examples/nested-jsbeautifyrc/opencl/original/test.cl b/examples/nested-jsbeautifyrc/opencl/original/test.cl new file mode 100644 index 0000000..546cf9a --- /dev/null +++ b/examples/nested-jsbeautifyrc/opencl/original/test.cl @@ -0,0 +1,77 @@ +__kernel void reduce_min(__global const int* A, __global int* B, __local int* scratch) { + //Get local variable data + int id = get_global_id(0); + int lid = get_local_id(0); + int N = get_local_size(0); + + //Store valus of global memory into local memory + scratch[lid] = A[id]; + + //Wait for copying to complete + barrier(CLK_LOCAL_MEM_FENCE); + + for (int i = 1; i < N; i *= 2) { + if (!(lid % (i * 2)) && ((lid + i) < N)){ + if (scratch[lid] > scratch[lid + i]) + scratch[lid] = scratch[lid+i]; + } + + barrier(CLK_LOCAL_MEM_FENCE); + } + + //Store cache in output array + if (!lid) + atomic_min(&B[0], scratch[lid]); +} + + +__kernel void reduce_max(__global const int* A, __global int* B, __local int* scratch) { + //Get local variable data + int id = get_global_id(0); + int lid = get_local_id(0); + int N = get_local_size(0); + + //Store valus of global memory into local memory + scratch[lid] = A[id]; + + //Wait for copying to complete + barrier(CLK_LOCAL_MEM_FENCE); + + for (int i = 1; i < N; i *= 2) { + if (!(lid % (i * 2)) && ((lid + i) < N)){ + if (scratch[lid] < scratch[lid + i]) + scratch[lid] = scratch[lid+i]; + } + + barrier(CLK_LOCAL_MEM_FENCE); + } + + //Store cache in output array + if (!lid) + atomic_max(&B[0], scratch[lid]); +} + +__kernel void reduce_avg(__global const int* A, __global int* B, __local int* scratch) { + //Get local variable data + int id = get_global_id(0); + int lid = get_local_id(0); + int N = get_local_size(0); + + //Store valus of global memory into local memory + scratch[lid] = A[id]; + + //Wait for copying to complete + barrier(CLK_LOCAL_MEM_FENCE); + + for (int i = 1; i < N; i *= 2) { + if (!(lid % (i * 2)) && ((lid + i) < N)) + { + scratch[lid] += scratch[lid+i]; + } + barrier(CLK_LOCAL_MEM_FENCE); + } + + //Store cache in output array + if (!lid) + atomic_add(&B[0],scratch[lid]); +} diff --git a/package.json b/package.json index 76bc875..f8feed8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom-beautify", "main": "./src/beautify", - "version": "0.28.26", + "version": "0.28.27", "private": true, "description": "Beautify HTML, CSS, JavaScript, PHP, Python, Ruby, Java, C, C++, C#, Objective-C, CoffeeScript, TypeScript, Coldfusion, and SQL in Atom", "repository": { @@ -66,6 +66,14 @@ { "name": "Luis Arias", "url": "https://github.com/kaaloo" + }, + { + "name": "Bati Sengul", + "url": "https://github.com/Focus" + }, + { + "name": "Dheepak Krishnamurthy", + "url": "https://github.com/kdheepak89" } ], "engines": { @@ -84,7 +92,7 @@ "diff": "^2.1.0", "editorconfig": "^0.12.2", "event-kit": "^1.4.1", - "expand-home-dir": "0.0.2", + "expand-home-dir": "0.0.3", "extend": "^3.0.0", "gherkin": "2.12.2", "handlebars": "^4.0.2", diff --git a/src/beautifiers/index.coffee b/src/beautifiers/index.coffee index 16b0e13..3981bad 100644 --- a/src/beautifiers/index.coffee +++ b/src/beautifiers/index.coffee @@ -44,6 +44,7 @@ module.exports = class Beautifiers extends EventEmitter 'csscomb' 'gherkin' 'gofmt' + 'latex-beautify' 'fortran-beautifier' 'js-beautify' 'jscs' diff --git a/src/beautifiers/latex-beautify.coffee b/src/beautifiers/latex-beautify.coffee new file mode 100644 index 0000000..9c4fd95 --- /dev/null +++ b/src/beautifiers/latex-beautify.coffee @@ -0,0 +1,72 @@ +"use strict" +Beautifier = require('./beautifier') +path = require('path') +fs = require("fs") +temp = require("temp").track() + + +module.exports = class LatexBeautify extends Beautifier + name: "Latex Beautify" + + options: { + LaTeX: true + } + + # There are too many options with latexmk, I have tried to slim this down to the most useful ones. + # This method creates a configuration file for latexindent. + buildConfigFile: (options) -> + indentChar = options.indent_char + if options.indent_with_tabs + indentChar = "\\t" + # +true = 1 and +false = 0 + config = """ + defaultIndent: \"#{indentChar}\" + alwaysLookforSplitBraces: #{+options.always_look_for_split_braces} + alwaysLookforSplitBrackets: #{+options.always_look_for_split_brackets} + indentPreamble: #{+options.indent_preamble} + removeTrailingWhitespace: #{+options.remove_trailing_whitespace} + lookForAlignDelims:\n + """ + for delim in options.align_columns_in_environments + config += "\t#{delim}: 1\n" + return config + + # Latexindent accepts configuration _files_ only. + # This file has to be named localSettings.yaml and be in the same folder as the tex file. + # It also insists on creating a log file somewhere. + # So we set up a directory with all the files in place. + setUpDir: (dirPath, text, config) -> + @texFile = path.join(dirPath, "latex.tex") + fs.writeFile @texFile, text, (err) -> + return reject(err) if err + @configFile = path.join(dirPath, "localSettings.yaml") + fs.writeFile @configFile, config, (err) -> + return reject(err) if err + @logFile = path.join(dirPath, "indent.log") + fs.writeFile @logFile, "", (err) -> + return reject(err) if err + + #Beautifier does not currently have a method for creating directories, so we call temp directly. + beautify: (text, language, options) -> + new @Promise((resolve, reject) -> + temp.mkdir("latex", (err, dirPath) -> + return reject(err) if err + resolve(dirPath) + ) + ) + .then((dirPath)=> + @setUpDir(dirPath, text, @buildConfigFile(options)) + run = @run "latexindent", [ + "-o" #Output to the same location as file, -w creates a backup file, whereas this does not + "-s" #Silent mode + "-l" #Tell latexindent we have a local configuration file + "-c=" + dirPath #Tell latexindent to place the log file in this directory + @texFile + @texFile + ], help: { + link: "https://github.com/cmhughes/latexindent.pl" + } + ) + .then( => + @readFile(@texFile) + ) diff --git a/src/beautifiers/yapf.coffee b/src/beautifiers/yapf.coffee index b82bc8d..9e44982 100644 --- a/src/beautifiers/yapf.coffee +++ b/src/beautifiers/yapf.coffee @@ -16,7 +16,6 @@ module.exports = class Yapf extends Beautifier beautify: (text, language, options) -> @run("yapf", [ "-i" - ["--style=pep8"] tempFile = @tempFile("input", text) ], help: { link: "https://github.com/google/yapf" diff --git a/src/languages/c.coffee b/src/languages/c.coffee index a2b3296..8afd969 100644 --- a/src/languages/c.coffee +++ b/src/languages/c.coffee @@ -8,6 +8,7 @@ module.exports = { ### grammars: [ "C" + "opencl" ] ### @@ -15,6 +16,7 @@ module.exports = { ### extensions: [ "c" + "cl" ] options: diff --git a/src/languages/index.coffee b/src/languages/index.coffee index f376d7c..8ad80e2 100644 --- a/src/languages/index.coffee +++ b/src/languages/index.coffee @@ -36,6 +36,7 @@ module.exports = class Languages "javascript" "json" "jsx" + "latex" "less" "markdown" 'marko' diff --git a/src/languages/latex.coffee b/src/languages/latex.coffee new file mode 100644 index 0000000..112f090 --- /dev/null +++ b/src/languages/latex.coffee @@ -0,0 +1,62 @@ +# Get Atom defaults +scope = ['source.js'] +tabLength = atom?.config.get('editor.tabLength', scope: scope) ? 4 +softTabs = atom?.config.get('editor.softTabs', scope: scope) ? true +defaultIndentSize = (if softTabs then tabLength else 1) +defaultIndentChar = (if softTabs then " " else "\t") +defaultIndentWithTabs = not softTabs + +module.exports = { + + name: "LaTeX" + namespace: "latex" + + ### + Supported Grammars + ### + grammars: [ + "LaTeX" + ] + + ### + Supported extensions + ### + extensions: [ + "tex" + ] + + defaultBeautifier: "Latex Beautify" + + ### + + ### + options: + indent_char: + type: 'string' + default: defaultIndentChar + description: "Indentation character" + indent_with_tabs: + type: 'boolean' + default: true + description: "Indentation uses tabs, overrides `Indent Size` and `Indent Char`" + indent_preamble: + type: 'boolean' + default: false + description: "Indent the preable" + always_look_for_split_braces: + type: 'boolean' + default: true + description: "If `latexindent` should look for commands that split braces across lines" + always_look_for_split_brackets: + type: 'boolean' + default: false + description: "If `latexindent` should look for commands that split brackets across lines" + remove_trailing_whitespace: + type: 'boolean' + default: false + description: "Remove trailing whitespace" + align_columns_in_environments: + type: 'array' + default:["tabular", "matrix", "bmatrix", "pmatrix"] + decription: "Aligns columns by the alignment tabs for environments specified" +}