From 1ed6c2f9418dec56ec19d61d3cabaf6b292414ad Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 30 Jun 2021 20:49:10 +0100 Subject: [PATCH 01/62] Updated CHANGELOG for v2.2.2 --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39f295b5..bb927dd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,24 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Added syntax highlight support for OpenACC ([224](https://github.com/krvajal/vscode-fortran-support/pull/224)) +## [2.2.2] - 2020-12-11 + +### Fixed + +- Fixed fixed-form tab character at start syntax highlighting + ([#191](https://github.com/krvajal/vscode-fortran-support/pull/191)) +- Fixed `class` paranthesis erroneous syntax highlighting + ([#196](https://github.com/krvajal/vscode-fortran-support/issues/196)) +- Fixed multiline block interface syntax highlighting + ([#202](https://github.com/krvajal/vscode-fortran-support/issues/202)) + +### Changed + +- Updated `package.json` + ([#192](https://github.com/krvajal/vscode-fortran-support/pull/192)) +- Rewrote solution for `select` in variable name + ([#203](https://github.com/krvajal/vscode-fortran-support/pull/203)) + ## [2.2.1] - 2020-04-11 ### Fixed From 10d0cd332537983e3c789f40b11db8358fa61000 Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 30 Jun 2021 20:49:10 +0100 Subject: [PATCH 02/62] Incremented package version to 2.2.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 10f426ee..c49bfab4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "linter-gfortran", - "version": "2.2.1", + "version": "2.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2a89fdf1..c0679f9a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "linter-gfortran", "displayName": "Modern Fortran", "description": "Modern Fortran language support, including syntax highlighting and error detection.", - "version": "2.2.1", + "version": "2.2.2", "publisher": "krvajalm", "engines": { "vscode": "^1.30.x" From 56f0072db9beafc00a810af0e64bd856ad5b95a6 Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 30 Jun 2021 20:52:16 +0100 Subject: [PATCH 03/62] Minor aesthetic improvements to CHANGELOG --- CHANGELOG.md | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb927dd8..b698ee58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added - Added syntax highlight support for OpenACC - ([224](https://github.com/krvajal/vscode-fortran-support/pull/224)) + ([#224](https://github.com/krvajal/vscode-fortran-support/pull/224)) ## [2.2.2] - 2020-12-11 @@ -110,7 +110,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Changed default configuration of LanguageServer to `false` -- Update vscode minimal engine +- Update vscode minimal engine ## [2.0.0] - 2018-10-14 @@ -230,10 +230,29 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added - Show docs for intrinsic functions on hover - ### Changed + +### Changed + - Updated icon for the extension - Fix bug on linter not working -## [Unreleased] +## [0.1.0] - Initial release + +[unreleased]: https://github.com/krvajal/vscode-fortran-support/compare/v2.2.2...HEAD +[2.2.2]: https://github.com/krvajal/vscode-fortran-support/compare/2.2.1...v2.2.1 +[2.2.1]: https://github.com/krvajal/vscode-fortran-support/compare/2.2.0...v2.2.1 +[2.2.0]: https://github.com/krvajal/vscode-fortran-support/compare/2.1.0...v2.2.0 +[2.1.0]: https://github.com/krvajal/vscode-fortran-support/compare/2.0.2...2.1.0 +[2.0.2]: https://github.com/krvajal/vscode-fortran-support/compare/2.0.0...2.0.2 +[2.0.0]: https://github.com/krvajal/vscode-fortran-support/compare/v1.3.0...v2.0.0 +[1.3.0]: https://github.com/krvajal/vscode-fortran-support/compare/v1.2.0...v1.3.0 +[1.2.0]: https://github.com/krvajal/vscode-fortran-support/compare/v1.1.0...v1.2.0 +[1.1.0]: https://github.com/krvajal/vscode-fortran-support/compare/v1.0.0...v1.1.0 +[1.0.0]: https://github.com/krvajal/vscode-fortran-support/compare/v0.6.3...v1.0.0 +[0.6.3]: https://github.com/krvajal/vscode-fortran-support/compare/v0.6.1...v0.6.3 +[0.6.1]: https://github.com/krvajal/vscode-fortran-support/compare/v0.6.0...v0.6.1 +[0.6.0]: https://github.com/krvajal/vscode-fortran-support/compare/v0.4.5...v0.6.0 +[0.4.5]: https://github.com/krvajal/vscode-fortran-support/compare/v0.4.4...v0.4.5 +[0.4.4]: https://github.com/krvajal/vscode-fortran-support/compare/tag/v0.4.4 From 04a317bc6db89b391f182c288635c158b6506f37 Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 30 Jun 2021 22:12:05 +0100 Subject: [PATCH 04/62] Adds OpenACC unit test --- test/resources/openacc_support.f90.snap | 213 ++++++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 test/resources/openacc_support.f90.snap diff --git a/test/resources/openacc_support.f90.snap b/test/resources/openacc_support.f90.snap new file mode 100644 index 00000000..2ac25511 --- /dev/null +++ b/test/resources/openacc_support.f90.snap @@ -0,0 +1,213 @@ +>!Made-up directives to test OpenACC support +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>program main +#^^^^^^^ source.fortran.free meta.program.fortran keyword.control.program.fortran +# ^ source.fortran.free meta.program.fortran +# ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran +> implicit none +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.none.fortran +> +> !The highlighting should continue on the second line +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc data copy(A) copyin(B(:)) copyout(C(1:N)) present(D) & +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc& no_create(E) deviceptr(F) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc parallel loop private(foo) firstprivate(bar) tile(32,32) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc parallel +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc loop collapse(2) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc end parallel +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc end data +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc kernels default(present) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc loop independent +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc loop reduction(+:sum) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc loop reduction(max:the_max) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc loop gang worker vector +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc loop gang(128) worker(4) vector(128) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc loop seq +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc end kernels +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc parallel loop num_gangs(1) num_workers(1) vector_length(1) default(none) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc enter data create(A(1:N)) attach(B) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc update device(A) async +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc update host(A(1:N)) async(1) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc update self(A(:)) async(2) wait(1) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc wait(1) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc wait +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc exit data delete(A) detach(B) finalize +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc serial self(.TRUE.) if(.FALSE.) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc host_data use_device(A) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc end host_data +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc declare device_resident(A) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc init device_type(foo) device_num(bar) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc shutdown device_type(foo) device_num(bar) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc set default_async(1) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !$acc cache(A(:)) +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> ! Test all four forms of atomic +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc atomic capture +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc end atomic +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc atomic update +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc end atomic +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc atomic read +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc end atomic +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc atomic write +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc end atomic +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +> !The "do" should not highlight, if it does it's coming from OpenMP +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$acc parallel do +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !The "do" here still should, since it is OpenMP +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> !$omp parallel do +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +>end program main +#^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran +# ^ source.fortran.free meta.program.fortran +# ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran \ No newline at end of file From 9aaadd10c1bfdc3b62089d9fae3ebb916e5f03dc Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 30 Jun 2021 22:44:52 +0100 Subject: [PATCH 05/62] Updated tasks and launch files - The file structures have been updated to abide with the latest config syntax - Updated build commands in package.json - Deleted tasks.json.old --- .vscode/launch.json | 21 +++++++++------------ .vscode/tasks.json | 32 ++++++++++++++++++-------------- .vscode/tasks.json.old | 30 ------------------------------ package.json | 5 +++-- 4 files changed, 30 insertions(+), 58 deletions(-) delete mode 100644 .vscode/tasks.json.old diff --git a/.vscode/launch.json b/.vscode/launch.json index cb6ce3ea..dcdcdebf 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,41 +1,38 @@ -// A launch configuration that compiles the extension and then opens it inside a new window { - "version": "0.1.0", + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", "configurations": [ { "name": "Launch Extension", "type": "extensionHost", "request": "launch", - "runtimeExecutable": "${execPath}", "args": [ "--extensionDevelopmentPath=${workspaceFolder}" ], - "stopOnEntry": false, - "sourceMaps": true, "outFiles": [ "${workspaceFolder}/out/src/**/*.js" ], - "preLaunchTask": "npm" + "preLaunchTask": "npm: watch", }, { "name": "Launch Tests", "type": "extensionHost", "request": "launch", - "runtimeExecutable": "${execPath}", "env": { "CODE_TESTS_WORKSPACE": "./" }, "args": [ - "test/resources/sample.f90", + "${workspaceFolder}/test/resources/sample.f90", "--disable-extensions", "--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=${workspaceFolder}/out/test" ], - "stopOnEntry": false, - "sourceMaps": true, "outFiles": [ "${workspaceFolder}/out/test/**/*.js" - ] - } + ], + "preLaunchTask": "npm: compile", + }, ] } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index ceba28fb..ccdeccb0 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -5,25 +5,29 @@ // ${fileDirname}: the current opened file's dirname // ${fileExtname}: the current opened file's extension // ${cwd}: the current working directory of the spawned process - // A task runner that calls a custom npm script that compiles the extension. { "version": "2.0.0", - - // we want to run npm - "command": "npm", - - // we run the custom script "compile" as defined in package.json - "args": ["run", "compile", "--loglevel", "silent"], - - // The tsc compiler is started in watching mode - "isBackground": true, - - // use the standard tsc in watch mode problem matcher to find compile problems in the output. - "problemMatcher": "$tsc-watch", "tasks": [ { - "label": "npm", + "label": "npm: watch", + "type": "shell", + "command": "npm", + "args": [ + "run", + "watch", + "--loglevel", + "silent" + ], + "isBackground": true, + "problemMatcher": "$tsc-watch", + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "npm: compile", "type": "shell", "command": "npm", "args": [ diff --git a/.vscode/tasks.json.old b/.vscode/tasks.json.old deleted file mode 100644 index 1e37eb7b..00000000 --- a/.vscode/tasks.json.old +++ /dev/null @@ -1,30 +0,0 @@ -// Available variables which can be used inside of strings. -// ${workspaceRoot}: the root folder of the team -// ${file}: the current opened file -// ${fileBasename}: the current opened file's basename -// ${fileDirname}: the current opened file's dirname -// ${fileExtname}: the current opened file's extension -// ${cwd}: the current working directory of the spawned process - -// A task runner that calls a custom npm script that compiles the extension. -{ - "version": "0.1.0", - - // we want to run npm - "command": "npm", - - // the command is a shell script - "isShellCommand": true, - - // show the output window only if unrecognized errors occur. - "showOutput": "silent", - - // we run the custom script "compile" as defined in package.json - "args": ["run", "compile", "--loglevel", "silent"], - - // The tsc compiler is started in watching mode - "isBackground": true, - - // use the standard tsc in watch mode problem matcher to find compile problems in the output. - "problemMatcher": "$tsc-watch" -} \ No newline at end of file diff --git a/package.json b/package.json index c0679f9a..19574de9 100644 --- a/package.json +++ b/package.json @@ -182,8 +182,9 @@ ] }, "scripts": { - "vscode:prepublish": "tsc -p ./", - "compile": "tsc -watch -p ./", + "vscode:prepublish": "npm run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./", "postinstall": "node ./node_modules/vscode/bin/install", "test": "CODE_TESTS_WORKSPACE='./' node ./node_modules/vscode/bin/test", "test:grammar": "vscode-tmgrammar-snap -s source.fortran.free -g ./syntaxes/fortran_free-form.tmLanguage.json -t \"./test/resources/*.f90\"", From b7296b31a1437175d174137d75ed372a55fb4b41 Mon Sep 17 00:00:00 2001 From: gnikit Date: Thu, 1 Jul 2021 16:52:45 +0100 Subject: [PATCH 06/62] Fixes Remove unused packages #243 Regenerated npm and yarn .json files --- package-lock.json | 2419 ++++++++++++++++----------------------------- package.json | 11 +- yarn.lock | 1739 +++++++++----------------------- 3 files changed, 1316 insertions(+), 2853 deletions(-) diff --git a/package-lock.json b/package-lock.json index c49bfab4..59074c87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,51 +4,88 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@samverschueren/stream-to-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", - "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "any-observable": "^0.3.0" + "@babel/highlight": "^7.14.5" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/events": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz", - "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==", + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "dev": true }, - "@types/fs-extra": { - "version": "0.0.35", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-0.0.35.tgz", - "integrity": "sha1-PtQAwBIvsWHbUdoj2WulBAy5x9k=", + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@types/node": "*" + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "@types/glob": { - "version": "5.0.34", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.34.tgz", - "integrity": "sha512-sUvpieq+HsWTLdkeOI8Mi8u22Ag3AoGuM3sv+XMP1bKtbaIAHpEA2f52K2mz6vK5PVhTa3bFyRZLZMqTxOo2Cw==", + "@samverschueren/stream-to-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", + "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", "dev": true, "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" + "any-observable": "^0.3.0" } }, - "@types/minimatch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.2.tgz", - "integrity": "sha512-tctoxbfuMCxeI2CAsnwoZQfaBA+T7gPzDzDuiiFnyCSSyGYEB92cmRTh6E3tdR1hWsprbJ9IdbvX3PzLmJU/GA==", + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "@types/mocha": { @@ -61,15 +98,15 @@ } }, "@types/node": { - "version": "6.0.95", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.95.tgz", - "integrity": "sha512-d1Twx1NM49dQ7jbNZfaHTQWuYL9cFVrGxYpbc3BvMf4626lOJOZnp2aJQNB9vP/WX3UOe1TrTUMABrGRu6FZhg==", + "version": "15.12.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz", + "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==", "dev": true }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, "agent-base": { @@ -98,36 +135,18 @@ } } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -140,18 +159,22 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, "any-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "dev": true }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -179,24 +202,6 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -209,29 +214,12 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -299,76 +287,12 @@ } } }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", @@ -461,40 +385,16 @@ "caller-callsite": "^2.0.0" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "chalk": { @@ -518,6 +418,66 @@ } } }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -547,12 +507,6 @@ } } }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -594,17 +548,85 @@ } } }, - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } }, "code-point-at": { "version": "1.1.0", @@ -637,22 +659,10 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "component-emitter": { @@ -667,32 +677,12 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "configstore": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", - "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, "cosmiconfig": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", @@ -717,15 +707,6 @@ } } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -749,37 +730,12 @@ } } }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, "date-fns": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -797,19 +753,10 @@ } } }, - "decache": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.3.0.tgz", - "integrity": "sha1-o5XkBwlWmKyKbe8B8qaky3Y49jU=", - "dev": true, - "requires": { - "callsite": "^1.0.0" - } - }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "decode-uri-component": { @@ -824,18 +771,6 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -876,41 +811,17 @@ } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true } } }, "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "elegant-spinner": { @@ -919,6 +830,12 @@ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", "dev": true }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -952,58 +869,18 @@ "es6-promise": "^4.0.3" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", "dev": true }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -1146,23 +1023,6 @@ } } }, - "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "time-stamp": "^1.0.0" - } - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -1217,39 +1077,50 @@ "dev": true }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "glob": "~5.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" } } } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -1265,35 +1136,37 @@ "map-cache": "^0.2.2" } }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "get-own-enumerable-property-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", "dev": true }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -1320,123 +1193,39 @@ "path-is-absolute": "^1.0.0" } }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, - "gulp-util": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", - "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^1.0.11", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" + "is-glob": "^4.0.1" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } } } }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -1449,20 +1238,11 @@ } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -1677,27 +1457,6 @@ "resolve-from": "^3.0.0" } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1714,12 +1473,6 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -1735,6 +1488,15 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -1759,6 +1521,15 @@ "ci-info": "^2.0.0" } }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -1805,15 +1576,6 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -1829,22 +1591,6 @@ "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -1869,14 +1615,11 @@ "symbol-observable": "^1.1.0" } }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true }, "is-plain-object": { "version": "2.0.4", @@ -1893,34 +1636,22 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, "is-windows": { @@ -1929,12 +1660,6 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1947,67 +1672,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "dev": true, - "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "dev": true - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "dev": true - } - } - }, "jest-get-type": { "version": "22.4.3", "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", @@ -2070,9 +1734,9 @@ } }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { @@ -2099,15 +1763,6 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -2117,40 +1772,12 @@ "is-buffer": "^1.1.5" } }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", "dev": true }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, "lint-staged": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.3.0.tgz", @@ -2394,19 +2021,6 @@ } } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -2431,125 +2045,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" - } - }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -2613,57 +2108,12 @@ "wrap-ansi": "^3.0.1" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -2673,38 +2123,6 @@ "object-visit": "^1.0.0" } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } - } - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -2727,9 +2145,9 @@ }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true } } @@ -2750,9 +2168,9 @@ } }, "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "mixin-deep": { @@ -2777,91 +2195,182 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "minimist": "^1.2.5" } }, "mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", - "dev": true, - "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", - "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.1.tgz", + "integrity": "sha512-9zwsavlRO+5csZu6iRtl3GHImAbhERoDsZwdRkdJ/bE+eVplmoxNKE901ZJ9LdSchYBjSCPbjKc5XvcAri2ylw==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.23", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.4", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", "inherits": "2", - "minimatch": "0.3" + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" + "argparse": "^2.0.1" } }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", - "dev": true + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true }, "nanomatch": { "version": "1.2.13", @@ -2883,34 +2392,19 @@ }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true } } }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -2923,6 +2417,12 @@ "validate-npm-package-license": "^3.0.1" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "npm-path": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", @@ -2966,12 +2466,6 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -3030,38 +2524,6 @@ "mimic-fn": "^1.0.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -3098,27 +2560,6 @@ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -3126,13 +2567,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -3152,38 +2590,18 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -3219,18 +2637,6 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, "pretty-format": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", @@ -3258,12 +2664,6 @@ } } }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -3280,67 +2680,22 @@ "once": "^1.3.1" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "safe-buffer": "^5.1.0" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "picomatch": "^2.2.1" } }, "regex-not": { @@ -3353,46 +2708,6 @@ "safe-regex": "^1.1.0" } }, - "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "remap-istanbul": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.8.4.tgz", - "integrity": "sha1-tL/f28kO+mNemiix9KEW4iyMJpc=", - "dev": true, - "requires": { - "amdefine": "^1.0.0", - "gulp-util": "3.0.7", - "istanbul": "0.4.5", - "source-map": ">=0.5.6", - "through2": "2.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", @@ -3405,26 +2720,21 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } }, "resolve-from": { "version": "3.0.0", @@ -3470,9 +2780,9 @@ } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "safe-regex": { @@ -3496,19 +2806,19 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { - "semver": "^5.0.3" + "randombytes": "^2.1.0" } }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -3543,12 +2853,6 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -3675,16 +2979,6 @@ "kind-of": "^3.2.0" } }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", @@ -3722,12 +3016,6 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", @@ -3824,12 +3112,6 @@ } } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -3850,43 +3132,25 @@ "ansi-regex": "^2.0.0" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^4.0.0" } }, "symbol-observable": { @@ -3895,65 +3159,6 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "through2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", - "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", - "dev": true, - "requires": { - "readable-stream": "~2.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - } - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", - "dev": true - }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -3985,12 +3190,6 @@ "repeat-string": "^1.6.1" } }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -3998,43 +3197,82 @@ "dev": true }, "tslint": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-4.5.1.tgz", - "integrity": "sha1-BTVocb7yOkNJBnNABvwYgza6gks=", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "requires": { - "babel-code-frame": "^6.20.0", - "colors": "^1.1.2", - "diff": "^3.0.1", - "findup-sync": "~0.3.0", + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", "glob": "^7.1.1", - "optimist": "~0.6.0", - "resolve": "^1.1.7", - "tsutils": "^1.1.0", - "update-notifier": "^2.0.0" + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "diff": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", - "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "tsutils": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz", - "integrity": "sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "tslib": "^1.8.1" } }, "typescript": { @@ -4043,55 +3281,16 @@ "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", "dev": true }, - "uglify-js": { - "version": "3.13.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.9.tgz", - "integrity": "sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g==", - "dev": true, - "optional": true - }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" + "set-value": "^2.0.1" } }, "unset-value": { @@ -4140,99 +3339,18 @@ } } }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "update-notifier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", - "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", @@ -4243,17 +3361,6 @@ "spdx-expression-parse": "~1.0.0" } }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - }, "vscode": { "version": "1.1.37", "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.37.tgz", @@ -4308,6 +3415,21 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, "mocha": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", @@ -4379,6 +3501,12 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz", "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==" }, + "vscode-oniguruma": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.5.1.tgz", + "integrity": "sha512-JrBZH8DCC262TEYcYdeyZusiETu0Vli0xFgdRwNJjDcObcRjbmJP+IFcA3ScBwIXwgFHYKbAgfxtM/Cl+3Spjw==", + "dev": true + }, "vscode-test": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", @@ -4435,6 +3563,95 @@ } } }, + "vscode-textmate": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.4.0.tgz", + "integrity": "sha512-c0Q4zYZkcLizeYJ3hNyaVUM2AA8KDhNCA3JvXY8CeZSJuBdAy3bAvSbv46RClC4P3dSO9BdwhnKEx2zOo6vP/w==", + "dev": true + }, + "vscode-tmgrammar-test": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/vscode-tmgrammar-test/-/vscode-tmgrammar-test-0.0.11.tgz", + "integrity": "sha512-Bd60x/OeBLAQnIxiR2GhUic1CQZOFfWM8Pd43HjdEUBf/0vcvYAlFQikOXvv+zkItHLznjKaDX7VWKPVYUF9ug==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "commander": "^2.20.3", + "diff": "^4.0.2", + "glob": "^7.1.6", + "vscode-oniguruma": "^1.5.1", + "vscode-textmate": "^5.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", @@ -4444,19 +3661,19 @@ "isexe": "^2.0.0" } }, - "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "string-width": "^2.1.1" + "string-width": "^1.0.2 || 2" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "workerpool": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.4.tgz", + "integrity": "sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g==", "dev": true }, "wrap-ansi": { @@ -4492,33 +3709,89 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } diff --git a/package.json b/package.json index 19574de9..abd8ca74 100644 --- a/package.json +++ b/package.json @@ -191,19 +191,12 @@ "lint": "node ./node_modules/tslint/bin/tslint ./src/**/*.ts " }, "devDependencies": { - "@types/fs-extra": "0.0.35", - "@types/glob": "^5.0.30", "@types/mocha": "^2.2.32", "@types/node": "^15.12.1", - "decache": "^4.1.0", - "fs-extra": "^1.0.0", - "glob": "^7.1.1", "husky": "^1.1.2", - "istanbul": "^0.4.5", "lint-staged": "^7.3.0", - "mocha": "^2.3.3", - "remap-istanbul": "^0.8.4", - "tslint": "^4.0.2", + "mocha": "^9.0.1", + "tslint": "^5.20.1", "typescript": "^3.5.1", "vscode": "^1.1.37", "vscode-tmgrammar-test": "^0.0.11" diff --git a/yarn.lock b/yarn.lock index 23db03ed..73723c5e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,27 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/helper-validator-identifier@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" + integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== + +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" @@ -14,51 +35,20 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/fs-extra@0.0.35": - version "0.0.35" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-0.0.35.tgz#3ed400c0122fb161db51da23d96ba5040cb9c7d9" - integrity sha1-PtQAwBIvsWHbUdoj2WulBAy5x9k= - dependencies: - "@types/node" "*" - -"@types/glob@^5.0.30": - version "5.0.36" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.36.tgz#0c80a9c8664fc7d19781de229f287077fd622cb2" - integrity sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== - "@types/mocha@^2.2.32": version "2.2.48" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.48.tgz#3523b126a0b049482e1c3c11877460f76622ffab" integrity sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw== -"@types/node@*", "@types/node@^15.12.1": - version "15.12.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2" - integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +"@types/node@^15.12.1": + version "15.12.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.5.tgz#9a78318a45d75c9523d2396131bd3cca54b2d185" + integrity sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg== -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== agent-base@4, agent-base@^4.3.0: version "4.3.0" @@ -74,30 +64,16 @@ agent-base@6: dependencies: debug "4" -amdefine@>=0.0.4, amdefine@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= - dependencies: - ansi-wrap "0.1.0" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -108,6 +84,11 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -120,16 +101,26 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-wrap@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -137,6 +128,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -152,21 +148,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -177,25 +158,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -async@1.x: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -babel-code-frame@^6.20.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -214,23 +181,10 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -beeper@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" - integrity sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak= - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== brace-expansion@^1.1.7: version "1.1.11" @@ -256,6 +210,13 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -266,6 +227,11 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -295,38 +261,15 @@ caller-path@^2.0.0: dependencies: caller-callsite "^2.0.0" -callsite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= - callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" @@ -339,7 +282,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -348,10 +291,28 @@ chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== +chalk@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" ci-info@^2.0.0: version "2.0.0" @@ -368,11 +329,6 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -388,15 +344,14 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - integrity sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE= - -clone@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" code-point-at@^1.0.0: version "1.1.0" @@ -418,37 +373,29 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -commander@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" - integrity sha1-+mihT2qUXVTbvlDYzbMyDp47GgY= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== commander@2.15.1: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== -commander@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" - integrity sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM= - -commander@^2.14.1, commander@^2.20.3, commander@^2.9.0: +commander@^2.12.1, commander@^2.14.1, commander@^2.20.3, commander@^2.9.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -463,28 +410,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -configstore@^3.0.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" - integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== - dependencies: - dot-prop "^4.2.1" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - cosmiconfig@^5.0.2, cosmiconfig@^5.0.7: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -495,13 +425,6 @@ cosmiconfig@^5.0.2, cosmiconfig@^5.0.7: js-yaml "^3.13.1" parse-json "^4.0.0" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -522,38 +445,11 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - date-fns@^1.27.2: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -dateformat@^1.0.11: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - -debug@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo= - dependencies: - ms "0.7.1" - debug@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -561,7 +457,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4: +debug@4, debug@4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -582,17 +478,10 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -decache@^4.1.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/decache/-/decache-4.6.0.tgz#87026bc6e696759e82d57a3841c4e251a30356e8" - integrity sha512-PppOuLiz+DFeaUvFXEYZjLxAkKiMYH/do/b/MxpDe/8AgKBi5GhZxridoVIbBq72GDbL36e4p0Ce2jTGUwwU+w== - dependencies: - callsite "^1.0.0" - -decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== decode-uri-component@^0.2.0: version "0.2.0" @@ -604,16 +493,6 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -636,45 +515,31 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -diff@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" - integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= - -diff@3.5.0, diff@^3.0.1: +diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== -diff@^4.0.2: +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1, diff@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dot-prop@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" - integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== - dependencies: - is-obj "^1.0.0" - -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - integrity sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds= - dependencies: - readable-stream "~1.1.9" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -682,7 +547,7 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -701,61 +566,26 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -escape-string-regexp@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" - integrity sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE= +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" @@ -824,21 +654,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -fancy-log@^1.1.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -864,18 +679,25 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + find-parent-dir@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.1.tgz#c5c385b96858c3351f95d446cab866cbf9f11125" integrity sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A== -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" + locate-path "^6.0.0" + path-exists "^4.0.0" find-up@^3.0.0: version "3.0.0" @@ -884,12 +706,10 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -findup-sync@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" - integrity sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY= - dependencies: - glob "~5.0.0" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== for-in@^1.0.2: version "1.0.2" @@ -903,35 +723,31 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -954,13 +770,12 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -glob@3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" - integrity sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0= +glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: - inherits "2" - minimatch "0.3" + is-glob "^4.0.1" glob@7.1.2: version "7.1.2" @@ -974,18 +789,7 @@ glob@7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^5.0.15, glob@~5.0.0: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.6: +glob@7.1.7, glob@^7.1.1, glob@^7.1.2, glob@^7.1.6: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -997,95 +801,11 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -glogg@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" - integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== - dependencies: - sparkles "^1.0.0" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" - integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= - -gulp-util@3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" - integrity sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs= - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^1.0.11" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U= - dependencies: - glogg "^1.0.0" - -handlebars@^4.0.1: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -1093,22 +813,15 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-gulplog@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" - integrity sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4= - dependencies: - sparkles "^1.0.0" +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-value@^0.3.1: version "0.3.1" @@ -1153,6 +866,11 @@ he@1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -1215,23 +933,6 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" @@ -1245,16 +946,11 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.1, inherits@~2.0.3: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -1274,18 +970,18 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -1354,11 +1050,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -1371,26 +1062,18 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-glob@^4.0.0: +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -1398,7 +1081,12 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-obj@^1.0.0, is-obj@^1.0.1: +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= @@ -1410,12 +1098,10 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" @@ -1429,42 +1115,27 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -1486,34 +1157,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -istanbul@0.4.5, istanbul@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -jade@0.26.3: - version "0.26.3" - resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" - integrity sha1-jxDXl32NefL2/4YqgbBRPMslaGw= - dependencies: - commander "0.6.1" - mkdirp "0.3.0" - jest-get-type@^22.1.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" @@ -1529,12 +1172,19 @@ jest-validate@^23.5.0: leven "^2.1.0" pretty-format "^23.6.0" -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" -js-yaml@3.x, js-yaml@^3.13.1: +js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -1547,13 +1197,6 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -1578,33 +1221,11 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - lint-staged@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.3.0.tgz#90ff33e5ca61ed3dbac35b6f6502dbefdc0db58d" @@ -1677,17 +1298,6 @@ listr@^0.14.1: p-map "^2.0.0" rxjs "^6.3.3" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -1696,110 +1306,26 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= - -lodash._basetostring@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" - integrity sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U= - -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - integrity sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc= - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= - -lodash._reescape@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" - integrity sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo= - -lodash._reevaluate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" - integrity sha1-WLx0xAZklTrgsSTYBpltrKQx4u0= - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= - -lodash.escape@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" - integrity sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg= - dependencies: - lodash._root "^3.0.0" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= - -lodash.template@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" - integrity sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8= - dependencies: - lodash._basecopy "^3.0.0" - lodash._basetostring "^3.0.0" - lodash._basevalues "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.keys "^3.0.0" - lodash.restparam "^3.0.0" - lodash.templatesettings "^3.0.0" - -lodash.templatesettings@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" - integrity sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU= +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" + p-locate "^5.0.0" lodash@^4.17.5: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -1823,24 +1349,6 @@ log-update@^2.3.0: cli-cursor "^2.0.0" wrap-ansi "^3.0.1" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= - lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -1849,23 +1357,11 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -1873,22 +1369,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -1913,15 +1393,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -minimatch@0.3: - version "0.3.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" - integrity sha1-J12O2qxPG7MyZHIInnlJyDlGmd0= - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -1933,16 +1405,11 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -1951,11 +1418,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4= - mkdirp@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -1963,29 +1425,13 @@ mkdirp@0.5.1: dependencies: minimist "0.0.8" -mkdirp@0.5.x: +mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mocha@^2.3.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" - integrity sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg= - dependencies: - commander "2.3.0" - debug "2.2.0" - diff "1.4.0" - escape-string-regexp "1.0.2" - glob "3.2.11" - growl "1.9.2" - jade "0.26.3" - mkdirp "0.5.1" - supports-color "1.2.0" - to-iso-string "0.0.2" - mocha@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" @@ -2003,10 +1449,36 @@ mocha@^5.2.0: mkdirp "0.5.1" supports-color "5.4.0" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg= +mocha@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.0.1.tgz#01e66b7af0012330c0a38c4b6eaa6d92b8a81bf9" + integrity sha512-9zwsavlRO+5csZu6iRtl3GHImAbhERoDsZwdRkdJ/bE+eVplmoxNKE901ZJ9LdSchYBjSCPbjKc5XvcAri2ylw== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.7" + growl "1.10.5" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.23" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.1.4" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" ms@2.0.0: version "2.0.0" @@ -2018,17 +1490,15 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multipipe@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" - integrity sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s= - dependencies: - duplexer2 "0.0.2" +nanoid@3.1.23: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== nanomatch@^1.2.9: version "1.2.13" @@ -2047,24 +1517,12 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -2074,6 +1532,11 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + npm-path@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" @@ -2102,12 +1565,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - integrity sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I= - -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -2135,7 +1593,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -2149,26 +1607,6 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -optimist@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -2181,6 +1619,13 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -2188,6 +1633,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -2203,23 +1655,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -2228,34 +1663,27 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -2270,37 +1698,16 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -pify@^2.0.0: +picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -2320,16 +1727,6 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - pretty-format@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" @@ -2338,16 +1735,6 @@ pretty-format@^23.6.0: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -2361,32 +1748,12 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -rc@^1.0.1, rc@^1.1.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + safe-buffer "^5.1.0" read-pkg@^4.0.1: version "4.0.1" @@ -2397,48 +1764,12 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" + picomatch "^2.2.1" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -2448,32 +1779,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - -remap-istanbul@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.8.4.tgz#b4bfdfdbc90efa635e9a28b1f4a116e22c8c2697" - integrity sha1-tL/f28kO+mNemiix9KEW4iyMJpc= - dependencies: - amdefine "^1.0.0" - gulp-util "3.0.7" - istanbul "0.4.5" - source-map ">=0.5.6" - through2 "2.0.1" - repeat-element@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" @@ -2484,17 +1789,10 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= resolve-from@^3.0.0: version "3.0.0" @@ -2506,12 +1804,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@^1.1.7, resolve@^1.10.0: +resolve@^1.10.0, resolve@^1.3.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -2544,16 +1837,11 @@ rxjs@^6.3.3: dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1: +safe-buffer@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -2566,18 +1854,18 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -2600,11 +1888,6 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -2674,33 +1957,16 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@>=0.5.6: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1: +source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= - dependencies: - amdefine ">=0.0.4" - -sparkles@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" - integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== - spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -2766,7 +2032,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -2774,17 +2040,14 @@ string-width@^2.0.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: - safe-buffer "~5.1.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" stringify-object@^3.2.2: version "3.3.0" @@ -2809,34 +2072,22 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: - is-utf8 "^0.2.0" + ansi-regex "^5.0.0" strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -supports-color@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" - integrity sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4= +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@5.4.0: version "5.4.0" @@ -2845,18 +2096,18 @@ supports-color@5.4.0: dependencies: has-flag "^3.0.0" +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2864,49 +2115,18 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - -through2@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" - integrity sha1-OE51MU1J8y3hLuu4E2uOtrXVnak= - dependencies: - readable-stream "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= - -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - -to-iso-string@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" - integrity sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE= - to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -2922,6 +2142,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -2932,52 +2159,41 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -tslib@^1.9.0: +tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslint@^4.0.2: - version "4.5.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.5.1.tgz#05356871bef23a434906734006fc188336ba824b" - integrity sha1-BTVocb7yOkNJBnNABvwYgza6gks= +tslint@^5.20.1: + version "5.20.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" + integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== dependencies: - babel-code-frame "^6.20.0" - colors "^1.1.2" - diff "^3.0.1" - findup-sync "~0.3.0" + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" glob "^7.1.1" - optimist "~0.6.0" - resolve "^1.1.7" - tsutils "^1.1.0" - update-notifier "^2.0.0" - -tsutils@^1.1.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0" - integrity sha1-ufmrROVa+WgYMdXyjQrur1x1DLA= + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.29.0" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== dependencies: - prelude-ls "~1.1.2" + tslib "^1.8.1" typescript@^3.5.1: - version "3.9.9" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" - integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== - -uglify-js@^3.1.4: - version "3.13.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.9.tgz#4d8d21dcd497f29cfd8e9378b9df123ad025999b" - integrity sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g== + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== union-value@^1.0.0: version "1.0.1" @@ -2989,13 +2205,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -3004,49 +2213,16 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -update-notifier@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -3055,15 +2231,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -vinyl@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" - integrity sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4= - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" - vscode-jsonrpc@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9" @@ -3133,34 +2300,31 @@ vscode@^1.1.37: source-map-support "^0.5.0" vscode-test "^0.4.1" -which@^1.1.1, which@^1.2.10, which@^1.2.9: +which@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^1.2.10, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: - string-width "^2.1.1" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + string-width "^1.0.2 || 2" -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +workerpool@6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.4.tgz#6a972b6df82e38d50248ee2820aa98e2d0ad3090" + integrity sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g== wrap-ansi@^3.0.1: version "3.0.1" @@ -3170,31 +2334,64 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - -xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From d448d107126c7077552099f0c69c30d6d8d0c1ef Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 2 Jul 2021 13:00:49 +0100 Subject: [PATCH 07/62] Updated README badges --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0b561f16..bfd49c70 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ # Modern Fortran language support for VSCode -[![Build Status](https://travis-ci.org/krvajal/vscode-fortran-support.svg?branch=master)](https://travis-ci.org/krvajal/vscode-fortran-support) -[![codecov](https://codecov.io/gh/krvajal/vscode-fortran-support/branch/master/graph/badge.svg)](https://codecov.io/gh/krvajal/vscode-fortran-support) -[![MIT License](https://img.shields.io/npm/l/stack-overflow-copy-paste.svg?style=flat-square)](http://opensource.org/licenses/MIT) +[![GitHub Actions](https://github.com/krvajal/vscode-fortran-support/actions/workflows/main.yaml/badge.svg)](https://github.com/krvajal/vscode-fortran-support/actions) +[![Downloads](https://vsmarketplacebadge.apphb.com/downloads-short/krvajalm.linter-gfortran.svg)](https://marketplace.visualstudio.com/items?itemName=krvajalm.linter-gfortran) [![Installs](https://vsmarketplacebadge.apphb.com/installs/krvajalm.linter-gfortran.svg)](https://marketplace.visualstudio.com/items?itemName=krvajalm.linter-gfortran) -[![GitHub release](https://img.shields.io/github/release/krvajal/vscode-fortran-support.svg)](https://GitHub.com/krvajal/vscode-fortran-support/releases/) +[![VS Marketplace](https://vsmarketplacebadge.apphb.com/version-short/krvajalm.linter-gfortran.svg)](https://marketplace.visualstudio.com/items?itemName=krvajalm.linter-gfortran) > This extension provides support for the Fortran programming language. It includes syntax highlighting, debugging, code snippets and a linting based on `gfortran`. You can download the Visual Studio Code editor from [here](https://code.visualstudio.com/download). From 75a7ba40f0c7475fa9978fbd5f9fcc90c85b78d0 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 2 Jul 2021 13:01:21 +0100 Subject: [PATCH 08/62] Updated workflows to run on Ubuntu latest --- .github/workflows/main.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 3e53ae86..9a667c7c 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -1,7 +1,8 @@ +name: Build and Test syntax on: [push] jobs: grammar: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest strategy: matrix: node-version: [12.x] From 4cd833b4efecb73ea5a6d210ff8d42e8aae7f67e Mon Sep 17 00:00:00 2001 From: gnikit Date: Thu, 16 Sep 2021 07:53:19 +0100 Subject: [PATCH 09/62] Fix overzealous OpenMP regex. The OpenMP regex did not allow for the OpenACC syntax scope to trigger. This has now been fixed and both should be displayed correctly. The only outstanding problem is that the unittest (.snap) does not trigger the right scopes, which means open acc/openmp are not tested thoroughly. I look into it --- CHANGELOG.md | 4 ++++ syntaxes/openmp_lang.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b698ee58..dd9f3ca1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Fixed + +- Fixes OpenACC syntax highlighting not triggering + ### Added - Adds support for .f18 and .F18 file extensions diff --git a/syntaxes/openmp_lang.json b/syntaxes/openmp_lang.json index c53b0916..e0227f41 100644 --- a/syntaxes/openmp_lang.json +++ b/syntaxes/openmp_lang.json @@ -29,7 +29,7 @@ "patterns": [ { "name": "meta.openmp.directive", - "begin": "(?i)\\G(\\$(omp\\b)?&?)", + "begin": "(?i)\\G(\\$(omp\\b)&?)", "beginCaptures": { "1": { "name": "comment.directive.openmp" } }, "end": "(?=[\\n])", "patterns": [ From 24ba48c86e28246ed84b81d5249e88e5ac32cf44 Mon Sep 17 00:00:00 2001 From: gnikit Date: Thu, 16 Sep 2021 09:54:58 +0100 Subject: [PATCH 10/62] Updating changelog.md --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd9f3ca1..dd6f5600 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [2.3.1] + ### Fixed - Fixes OpenACC syntax highlighting not triggering @@ -244,7 +246,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Initial release -[unreleased]: https://github.com/krvajal/vscode-fortran-support/compare/v2.2.2...HEAD +[unreleased]: https://github.com/krvajal/vscode-fortran-support/compare/v2.3.1...HEAD +[2.3.1]: https://github.com/krvajal/vscode-fortran-support/compare/v2.3.0...v2.3.1 +[2.3.0]: https://github.com/krvajal/vscode-fortran-support/compare/v2.2.2...v2.3.0 [2.2.2]: https://github.com/krvajal/vscode-fortran-support/compare/2.2.1...v2.2.1 [2.2.1]: https://github.com/krvajal/vscode-fortran-support/compare/2.2.0...v2.2.1 [2.2.0]: https://github.com/krvajal/vscode-fortran-support/compare/2.1.0...v2.2.0 From aa8ade47766afa33645bdb60a60d245a142b3b1f Mon Sep 17 00:00:00 2001 From: gnikit Date: Thu, 16 Sep 2021 09:55:01 +0100 Subject: [PATCH 11/62] New minor release --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59074c87..981b8ed9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "linter-gfortran", - "version": "2.2.2", + "version": "2.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index abd8ca74..9eb59af2 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "linter-gfortran", "displayName": "Modern Fortran", "description": "Modern Fortran language support, including syntax highlighting and error detection.", - "version": "2.2.2", + "version": "2.3.1", "publisher": "krvajalm", "engines": { "vscode": "^1.30.x" From b64402a4ef738a38f63041a23188a732e870e94c Mon Sep 17 00:00:00 2001 From: gnikit Date: Sun, 19 Sep 2021 12:40:01 +0100 Subject: [PATCH 12/62] Housekeeping Changes all fortls instances with global variable and makes pip install user based with upgrade. --- src/lang-server.ts | 4 ++-- src/lib/helper.ts | 2 +- src/lib/tools.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lang-server.ts b/src/lang-server.ts index 18d8935d..d9613d9f 100644 --- a/src/lang-server.ts +++ b/src/lang-server.ts @@ -28,7 +28,7 @@ export class FortranLangServer { } this.c = new LanguageClient( - 'fortran-langserver', + LANG_SERVER_TOOL_ID, serverOptions, clientOptions ) @@ -58,7 +58,7 @@ export function checkForLangServer(config) { ) return false } - let langServerAvailable = getBinPath('fortran-langserver') + let langServerAvailable = getBinPath(LANG_SERVER_TOOL_ID) if (!langServerAvailable) { promptForMissingTool(LANG_SERVER_TOOL_ID) vscode.window.showInformationMessage( diff --git a/src/lib/helper.ts b/src/lib/helper.ts index 824b1fcb..72f87a16 100644 --- a/src/lib/helper.ts +++ b/src/lib/helper.ts @@ -1,7 +1,7 @@ import * as fs from 'fs'; import * as vscode from 'vscode'; import intrinsics from './fortran-intrinsics'; -import { installTool } from './tools'; +import { installTool, LANG_SERVER_TOOL_ID } from './tools'; // IMPORTANT: this should match the value // on the package.json otherwise the extension won't diff --git a/src/lib/tools.ts b/src/lib/tools.ts index a4e838ec..45e071f5 100644 --- a/src/lib/tools.ts +++ b/src/lib/tools.ts @@ -9,7 +9,7 @@ export function installTool(toolname) { if (toolname === LANG_SERVER_TOOL_ID) { const installProcess = cp.spawn( 'pip', - 'install fortran-language-server'.split(' ') + 'install --user --upgrade fortran-language-server'.split(' ') ); installProcess.on('exit', (code, signal) => { if (code !== 0) { From 2b11a66a7aafb6497a08e55bd3f92117e0ba4461 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 19:07:37 +0100 Subject: [PATCH 13/62] Added info to package.json --- package.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/package.json b/package.json index 9eb59af2..a55d9c5c 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,34 @@ "description": "Modern Fortran language support, including syntax highlighting and error detection.", "version": "2.3.1", "publisher": "krvajalm", + "license": "MIT", + "author": { + "email": "krvajal.miguelangel@gmail.com", + "name": "Miguel Carvajal" + }, + "maintainers": [ + { + "email": "giannis.nikiteas@gmail.com", + "name": "Giannis Nikiteas" + } + ], "engines": { "vscode": "^1.30.x" }, "icon": "images/icon.png", + "homepage": "https://github.com/krvajalmiguelangel/vscode-fortran-support", + "qna": "https://github.com/krvajalmiguelangel/vscode-fortran-support/issues", "repository": { "type": "git", "url": "https://github.com/krvajalmiguelangel/vscode-fortran-support.git" }, + "keywords": [ + "Fortran", + "Free Form fortran", + "Fixed Form fortran", + "IntelliSense", + "IDE" + ], "categories": [ "Programming Languages", "Snippets", From 38caef90891643583987fc38a5c787bbcc79df5b Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 19:34:06 +0100 Subject: [PATCH 14/62] Fixes in-house documentaiton hover Fixes #250 --- tsconfig.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tsconfig.json b/tsconfig.json index 43882369..750e86bd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,11 @@ "rootDir": ".", "resolveJsonModule": true }, + "include": [ + "src/**/*.ts", + "src/docs/**/*.json", + "test/**/*.ts" + ], "exclude": [ "node_modules", ".vscode-test" From bc7a38d984be6b23c2f551e1293ef987d614d6ad Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 19:58:28 +0100 Subject: [PATCH 15/62] Now the deocumentation displays correctly Having preceding characters to ``` caused a problem in the hover result --- src/docs/ABORT.json | 2 +- src/docs/ABS.json | 2 +- src/docs/ACCESS.json | 2 +- src/docs/ACHAR.json | 2 +- src/docs/ACOS.json | 2 +- src/docs/ACOSH.json | 2 +- src/docs/ADJUSTL.json | 2 +- src/docs/ADJUSTR.json | 2 +- src/docs/AIMAG.json | 2 +- src/docs/AINT.json | 2 +- src/docs/ALARM.json | 2 +- src/docs/ALL.json | 2 +- src/docs/ALLOCATED.json | 2 +- src/docs/AND.json | 2 +- src/docs/ANINT.json | 2 +- src/docs/ANY.json | 2 +- src/docs/ASIN.json | 2 +- src/docs/ASINH.json | 2 +- src/docs/ASSOCIATED.json | 2 +- src/docs/ATAN.json | 2 +- src/docs/ATAN2.json | 2 +- src/docs/ATANH.json | 2 +- src/docs/ATOMIC_ADD.json | 2 +- src/docs/ATOMIC_AND.json | 2 +- src/docs/ATOMIC_CAS.json | 2 +- src/docs/ATOMIC_DEFINE.json | 2 +- src/docs/ATOMIC_FETCH_ADD.json | 2 +- src/docs/ATOMIC_FETCH_AND.json | 2 +- src/docs/ATOMIC_FETCH_OR.json | 2 +- src/docs/ATOMIC_FETCH_XOR.json | 2 +- src/docs/ATOMIC_OR.json | 2 +- src/docs/ATOMIC_REF.json | 2 +- src/docs/ATOMIC_XOR.json | 2 +- src/docs/BESSEL_J0.json | 2 +- src/docs/BESSEL_J1.json | 2 +- src/docs/BESSEL_JN.json | 2 +- src/docs/BESSEL_Y0.json | 2 +- src/docs/BESSEL_Y1.json | 2 +- src/docs/BESSEL_YN.json | 2 +- src/docs/BIT_SIZE.json | 2 +- src/docs/BTEST.json | 2 +- src/docs/CEILING.json | 2 +- src/docs/CHAR.json | 2 +- src/docs/CHDIR.json | 2 +- src/docs/CMPLX.json | 2 +- src/docs/COMMAND_ARGUMENT_COUNT.json | 2 +- src/docs/COMPILER_OPTIONS.json | 2 +- src/docs/COMPILER_VERSION.json | 2 +- src/docs/COMPLEX.json | 2 +- src/docs/CONJG.json | 2 +- src/docs/COS.json | 2 +- src/docs/COSH.json | 2 +- src/docs/COUNT.json | 2 +- src/docs/CO_BROADCAST.json | 2 +- src/docs/CO_MAX.json | 2 +- src/docs/CO_MIN.json | 2 +- src/docs/CO_REDUCE.json | 2 +- src/docs/CO_SUM.json | 2 +- src/docs/CPU_TIME.json | 2 +- src/docs/CSHIFT.json | 2 +- src/docs/CTIME.json | 2 +- src/docs/C_ASSOCIATED.json | 2 +- src/docs/C_FUNLOC.json | 2 +- src/docs/C_F_POINTER.json | 2 +- src/docs/C_F_PROCPOINTER.json | 2 +- src/docs/C_LOC.json | 2 +- src/docs/C_SIZEOF.json | 2 +- src/docs/DATE_AND_TIME.json | 2 +- src/docs/DBLE.json | 2 +- src/docs/DCMPLX.json | 2 +- src/docs/DIGITS.json | 2 +- src/docs/DIM.json | 2 +- src/docs/DOT_PRODUCT.json | 2 +- src/docs/DPROD.json | 2 +- src/docs/DREAL.json | 2 +- src/docs/DTIME.json | 2 +- src/docs/EOSHIFT.json | 2 +- src/docs/EPSILON.json | 2 +- src/docs/ERF.json | 2 +- src/docs/ERFC.json | 2 +- src/docs/ERFC_SCALED.json | 2 +- src/docs/ETIME.json | 2 +- src/docs/EVENT_QUERY.json | 2 +- src/docs/EXECUTE_COMMAND_LINE.json | 2 +- src/docs/EXIT.json | 2 +- src/docs/EXP.json | 2 +- src/docs/EXPONENT.json | 2 +- src/docs/FDATE.json | 2 +- src/docs/FGET.json | 2 +- src/docs/FGETC.json | 2 +- src/docs/FLOOR.json | 2 +- src/docs/FNUM.json | 2 +- src/docs/FPUT.json | 2 +- src/docs/FPUTC.json | 2 +- src/docs/FRACTION.json | 2 +- src/docs/FSEEK.json | 2 +- src/docs/FTELL.json | 2 +- src/docs/GAMMA.json | 2 +- src/docs/GERROR.json | 2 +- src/docs/GETARG.json | 2 +- src/docs/GETCWD.json | 2 +- src/docs/GETENV.json | 2 +- src/docs/GETLOG.json | 2 +- src/docs/GETPID.json | 2 +- src/docs/GET_COMMAND.json | 2 +- src/docs/GET_COMMAND_ARGUMENT.json | 2 +- src/docs/GET_ENVIRONMENT_VARIABLE.json | 2 +- src/docs/HUGE.json | 2 +- src/docs/HYPOT.json | 2 +- src/docs/IACHAR.json | 2 +- src/docs/IALL.json | 2 +- src/docs/IAND.json | 2 +- src/docs/IANY.json | 2 +- src/docs/ICHAR.json | 2 +- src/docs/IDATE.json | 2 +- src/docs/IMAGE_INDEX.json | 2 +- src/docs/INT.json | 2 +- src/docs/IPARITY.json | 2 +- src/docs/IRAND.json | 2 +- src/docs/ISATTY.json | 2 +- src/docs/ISNAN.json | 2 +- src/docs/IS_IOSTAT_END.json | 2 +- src/docs/IS_IOSTAT_EOR.json | 2 +- src/docs/ITIME.json | 2 +- src/docs/KIND.json | 2 +- src/docs/LEADZ.json | 2 +- src/docs/LOC.json | 2 +- src/docs/LOG.json | 2 +- src/docs/LOG10.json | 2 +- src/docs/LOG_GAMMA.json | 2 +- src/docs/MAXEXPONENT.json | 2 +- src/docs/MOD.json | 2 +- src/docs/MODULO.json | 2 +- src/docs/MOVE_ALLOC.json | 2 +- src/docs/NEAREST.json | 2 +- src/docs/NEW_LINE.json | 2 +- src/docs/NINT.json | 2 +- src/docs/NORM2.json | 2 +- src/docs/NULL.json | 2 +- src/docs/NUM_IMAGES.json | 2 +- src/docs/OR.json | 2 +- src/docs/PARITY.json | 2 +- src/docs/POPCNT.json | 2 +- src/docs/POPPAR.json | 2 +- src/docs/PRECISION.json | 2 +- src/docs/PRESENT.json | 2 +- src/docs/PRODUCT.json | 2 +- src/docs/RADIX.json | 2 +- src/docs/RAND.json | 2 +- src/docs/RANDOM_NUMBER.json | 2 +- src/docs/RANDOM_SEED.json | 2 +- src/docs/RANK.json | 2 +- src/docs/REAL.json | 2 +- src/docs/REPEAT.json | 2 +- src/docs/RESHAPE.json | 2 +- src/docs/SCALE.json | 2 +- src/docs/SCAN.json | 2 +- src/docs/SECNDS.json | 2 +- src/docs/SELECTED_CHAR_KIND.json | 2 +- src/docs/SELECTED_INT_KIND.json | 2 +- src/docs/SELECTED_REAL_KIND.json | 2 +- src/docs/SET_EXPONENT.json | 2 +- src/docs/SHAPE.json | 2 +- src/docs/SIGN.json | 2 +- src/docs/SIGNAL.json | 2 +- src/docs/SIN.json | 2 +- src/docs/SINH.json | 2 +- src/docs/SIZE.json | 2 +- src/docs/SIZEOF.json | 2 +- src/docs/SLEEP.json | 2 +- src/docs/SPACING.json | 2 +- src/docs/SPREAD.json | 2 +- src/docs/SQRT.json | 2 +- src/docs/STAT.json | 2 +- src/docs/SUM.json | 2 +- src/docs/SYSTEM_CLOCK.json | 2 +- src/docs/TAN.json | 2 +- src/docs/TANH.json | 2 +- src/docs/THIS_IMAGE.json | 2 +- src/docs/TRAILZ.json | 2 +- src/docs/TRANSFER.json | 2 +- src/docs/TRIM.json | 2 +- src/docs/TTYNAM.json | 2 +- src/docs/UNPACK.json | 2 +- src/docs/VERIFY.json | 2 +- src/docs/XOR.json | 2 +- 186 files changed, 186 insertions(+), 186 deletions(-) diff --git a/src/docs/ABORT.json b/src/docs/ABORT.json index d1782d7d..8f47a894 100644 --- a/src/docs/ABORT.json +++ b/src/docs/ABORT.json @@ -1,4 +1,4 @@ { "keyword":"ABORT", - "docstr":"`ABORT` — Abort the program\n\n### Description\n`ABORT` causes immediate termination of the program. On operating\nsystems that support a core dump, `ABORT` will produce a core dump. \nIt will also print a backtrace, unless `-fno-backtrace` is given.\n\n\n\n### Syntax\n`CALL ABORT`\n\n\n### Return value\nDoes not return.\n\n\n\n### Example\n\n ```\n\n\nprogram test_abort\n\n  integer :: i = 1, j = 2\n\n  if (i /= j) call abort\n\nend program test_abort\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nEXIT, KILL, BACKTRACE\n\n " + "docstr":"`ABORT` — Abort the program\n\n### Description\n`ABORT` causes immediate termination of the program. On operating\nsystems that support a core dump, `ABORT` will produce a core dump. \nIt will also print a backtrace, unless `-fno-backtrace` is given.\n\n\n\n### Syntax\n`CALL ABORT`\n\n\n### Return value\nDoes not return.\n\n\n\n### Example\n```\n\n\nprogram test_abort\n\n  integer :: i = 1, j = 2\n\n  if (i /= j) call abort\n\nend program test_abort\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nEXIT, KILL, BACKTRACE\n\n " } \ No newline at end of file diff --git a/src/docs/ABS.json b/src/docs/ABS.json index dec1dfbb..584b48b0 100644 --- a/src/docs/ABS.json +++ b/src/docs/ABS.json @@ -1,4 +1,4 @@ { "keyword":"ABS", - "docstr":"`ABS` — Absolute value\n\n### Description\n`ABS(A)` computes the absolute value of `A`.\n\n\n\n### Syntax\n`RESULT = ABS(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and\nkind as the argument except the return value is `REAL` for a\n`COMPLEX` argument.\n\n\n\n### Example\n\n ```\n\n\nprogram test_abs\n\n  integer :: i = -1\n\n  real :: x = -1.e0\n\n  complex :: z = (-1.e0,0.e0)\n\n  i = abs(i)\n\n  x = abs(x)\n\n  x = abs(z)\n\nend program test_abs\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ABS(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `CABS(A)` | `COMPLEX(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DABS(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n | `IABS(A)` | `INTEGER(4) A` | `INTEGER(4)` | Fortran 77 and later\n\n | `ZABS(A)` | `COMPLEX(8) A` | `COMPLEX(8)` | GNU extension\n\n | `CDABS(A)` | `COMPLEX(8) A` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`ABS` — Absolute value\n\n### Description\n`ABS(A)` computes the absolute value of `A`.\n\n\n\n### Syntax\n`RESULT = ABS(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and\nkind as the argument except the return value is `REAL` for a\n`COMPLEX` argument.\n\n\n\n### Example\n```\n\n\nprogram test_abs\n\n  integer :: i = -1\n\n  real :: x = -1.e0\n\n  complex :: z = (-1.e0,0.e0)\n\n  i = abs(i)\n\n  x = abs(x)\n\n  x = abs(z)\n\nend program test_abs\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ABS(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `CABS(A)` | `COMPLEX(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DABS(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n | `IABS(A)` | `INTEGER(4) A` | `INTEGER(4)` | Fortran 77 and later\n\n | `ZABS(A)` | `COMPLEX(8) A` | `COMPLEX(8)` | GNU extension\n\n | `CDABS(A)` | `COMPLEX(8) A` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ACCESS.json b/src/docs/ACCESS.json index a4c8c053..bc8ea466 100644 --- a/src/docs/ACCESS.json +++ b/src/docs/ACCESS.json @@ -1,4 +1,4 @@ { "keyword":"ACCESS", - "docstr":"`ACCESS` — Checks file access modes\n\n### Description\n`ACCESS(NAME, MODE)` checks whether the file `NAME`\nexists, is readable, writable or executable. Except for the\nexecutable check, `ACCESS` can be replaced by\nFortran 95's `INQUIRE`.\n\n\n\n### Syntax\n`RESULT = ACCESS(NAME, MODE)`\n\n\n### Arguments\n\n \n of default kind with the\nfile name. Tailing blank are ignored unless the character `achar(0)`is present, then all characters up to and excluding `achar(0)` are\nused as file name. \n\n | `MODE` | Scalar `CHARACTER` of default kind with the\nfile access mode, may be any concatenation of `\"r\"` (readable),\n`\"w\"` (writable) and `\"x\"` (executable), or `\" \"` to check\nfor existence.\n\n\n\n\n\n\n### Return value\nReturns a scalar `INTEGER`, which is `0` if the file is\naccessible in the given mode; otherwise or if an invalid argument\nhas been given for `MODE` the value `1` is returned.\n\n\n\n### Example\n\n ```\n\n\nprogram access_test\n\n  implicit none\n\n  character(len=*), parameter :: file = 'test.dat'\n\n  character(len=*), parameter :: file2 = 'test.dat '//achar(0)\n\n  if(access(file,' ') == 0) print *, trim(file),' is exists'\n\n  if(access(file,'r') == 0) print *, trim(file),' is readable'\n\n  if(access(file,'w') == 0) print *, trim(file),' is writable'\n\n  if(access(file,'x') == 0) print *, trim(file),' is executable'\n\n  if(access(file2,'rwx') == 0) &\n\n    print *, trim(file2),' is readable, writable and executable'\n\nend program access_test\n\n```\n\n\n\n### Specific names\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\n\n" + "docstr":"`ACCESS` — Checks file access modes\n\n### Description\n`ACCESS(NAME, MODE)` checks whether the file `NAME`\nexists, is readable, writable or executable. Except for the\nexecutable check, `ACCESS` can be replaced by\nFortran 95's `INQUIRE`.\n\n\n\n### Syntax\n`RESULT = ACCESS(NAME, MODE)`\n\n\n### Arguments\n\n \n of default kind with the\nfile name. Tailing blank are ignored unless the character `achar(0)`is present, then all characters up to and excluding `achar(0)` are\nused as file name. \n\n | `MODE` | Scalar `CHARACTER` of default kind with the\nfile access mode, may be any concatenation of `\"r\"` (readable),\n`\"w\"` (writable) and `\"x\"` (executable), or `\" \"` to check\nfor existence.\n\n\n\n\n\n\n### Return value\nReturns a scalar `INTEGER`, which is `0` if the file is\naccessible in the given mode; otherwise or if an invalid argument\nhas been given for `MODE` the value `1` is returned.\n\n\n\n### Example\n```\n\n\nprogram access_test\n\n  implicit none\n\n  character(len=*), parameter :: file = 'test.dat'\n\n  character(len=*), parameter :: file2 = 'test.dat '//achar(0)\n\n  if(access(file,' ') == 0) print *, trim(file),' is exists'\n\n  if(access(file,'r') == 0) print *, trim(file),' is readable'\n\n  if(access(file,'w') == 0) print *, trim(file),' is writable'\n\n  if(access(file,'x') == 0) print *, trim(file),' is executable'\n\n  if(access(file2,'rwx') == 0) &\n\n    print *, trim(file2),' is readable, writable and executable'\n\nend program access_test\n\n```\n\n\n\n### Specific names\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\n\n" } \ No newline at end of file diff --git a/src/docs/ACHAR.json b/src/docs/ACHAR.json index 4597279e..7a98c92c 100644 --- a/src/docs/ACHAR.json +++ b/src/docs/ACHAR.json @@ -1,4 +1,4 @@ { "keyword":"ACHAR", - "docstr":"`ACHAR` — Character in ASCII collating sequence\n\n### Description\n`ACHAR(I)` returns the character located at position `I`in the ASCII collating sequence.\n\n\n\n### Syntax\n`RESULT = ACHAR(I [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` with a length of one. \nIf the `KIND` argument is present, the return value is of the\nspecified kind and of the default kind otherwise.\n\n\n\n### Example\n\n ```\n\n\nprogram test_achar\n\n  character c\n\n  c = achar(32)\n\nend program test_achar\n\n```\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCHAR, IACHAR, ICHAR\n\n " + "docstr":"`ACHAR` — Character in ASCII collating sequence\n\n### Description\n`ACHAR(I)` returns the character located at position `I`in the ASCII collating sequence.\n\n\n\n### Syntax\n`RESULT = ACHAR(I [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` with a length of one. \nIf the `KIND` argument is present, the return value is of the\nspecified kind and of the default kind otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_achar\n\n  character c\n\n  c = achar(32)\n\nend program test_achar\n\n```\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCHAR, IACHAR, ICHAR\n\n " } \ No newline at end of file diff --git a/src/docs/ACOS.json b/src/docs/ACOS.json index 34c7a9c3..cac3b3fb 100644 --- a/src/docs/ACOS.json +++ b/src/docs/ACOS.json @@ -1,4 +1,4 @@ { "keyword":"ACOS", - "docstr":"`ACOS` — Arccosine function\n\n### Description\n`ACOS(X)` computes the arccosine of `X` (inverse of `COS(X)`).\n\n\n\n### Syntax\n`RESULT = ACOS(X)`\n\n\n### Arguments\n\n \n with a magnitude that is\nless than or equal to one - or the type shall be `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real part of the result is in radians and lies in the range\n0 \\leq \\Re \\acos(x) \\leq \\pi.\n\n\n\n### Example\n\n ```\n\n\nprogram test_acos\n\n  real(8) :: x = 0.866_8\n\n  x = acos(x)\n\nend program test_acos\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ACOS(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DACOS(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: COS\n\n " + "docstr":"`ACOS` — Arccosine function\n\n### Description\n`ACOS(X)` computes the arccosine of `X` (inverse of `COS(X)`).\n\n\n\n### Syntax\n`RESULT = ACOS(X)`\n\n\n### Arguments\n\n \n with a magnitude that is\nless than or equal to one - or the type shall be `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real part of the result is in radians and lies in the range\n0 \\leq \\Re \\acos(x) \\leq \\pi.\n\n\n\n### Example\n```\n\n\nprogram test_acos\n\n  real(8) :: x = 0.866_8\n\n  x = acos(x)\n\nend program test_acos\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ACOS(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DACOS(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: COS\n\n " } \ No newline at end of file diff --git a/src/docs/ACOSH.json b/src/docs/ACOSH.json index 526e1c5f..ea922d1d 100644 --- a/src/docs/ACOSH.json +++ b/src/docs/ACOSH.json @@ -1,4 +1,4 @@ { "keyword":"ACOSH", - "docstr":"`ACOSH` — Inverse hyperbolic cosine function\n\n### Description\n`ACOSH(X)` computes the inverse hyperbolic cosine of `X`.\n\n\n\n### Syntax\n`RESULT = ACOSH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n 0 \\leq \\Im \\acosh(x) \\leq \\pi.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_acosh\n\n  REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)\n\n  WRITE (*,*) ACOSH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DACOSH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: COSH\n" + "docstr":"`ACOSH` — Inverse hyperbolic cosine function\n\n### Description\n`ACOSH(X)` computes the inverse hyperbolic cosine of `X`.\n\n\n\n### Syntax\n`RESULT = ACOSH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n 0 \\leq \\Im \\acosh(x) \\leq \\pi.\n\n\n\n### Example\n```\n\n\nPROGRAM test_acosh\n\n  REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)\n\n  WRITE (*,*) ACOSH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DACOSH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: COSH\n" } \ No newline at end of file diff --git a/src/docs/ADJUSTL.json b/src/docs/ADJUSTL.json index fd8242c8..1aad5d41 100644 --- a/src/docs/ADJUSTL.json +++ b/src/docs/ADJUSTL.json @@ -1,4 +1,4 @@ { "keyword":"ADJUSTL", - "docstr":"`ADJUSTL` — Left adjust a string\n\n### Description\n`ADJUSTL(STRING)` will left adjust a string by removing leading spaces. \nSpaces are inserted at the end of the string as needed.\n\n\n\n### Syntax\n`RESULT = ADJUSTL(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` and of the same kind as\n`STRING` where leading spaces are removed and the same number of\nspaces are inserted on the end of `STRING`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_adjustl\n\n  character(len=20) :: str = ' gfortran'\n\n  str = adjustl(str)\n\n  print *, str\n\nend program test_adjustl\n\n```\n\n\n\n### Standard\nFortran 90 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nADJUSTR, TRIM\n" + "docstr":"`ADJUSTL` — Left adjust a string\n\n### Description\n`ADJUSTL(STRING)` will left adjust a string by removing leading spaces. \nSpaces are inserted at the end of the string as needed.\n\n\n\n### Syntax\n`RESULT = ADJUSTL(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` and of the same kind as\n`STRING` where leading spaces are removed and the same number of\nspaces are inserted on the end of `STRING`.\n\n\n\n### Example\n```\n\n\nprogram test_adjustl\n\n  character(len=20) :: str = ' gfortran'\n\n  str = adjustl(str)\n\n  print *, str\n\nend program test_adjustl\n\n```\n\n\n\n### Standard\nFortran 90 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nADJUSTR, TRIM\n" } \ No newline at end of file diff --git a/src/docs/ADJUSTR.json b/src/docs/ADJUSTR.json index f4d167eb..117f88f1 100644 --- a/src/docs/ADJUSTR.json +++ b/src/docs/ADJUSTR.json @@ -1,4 +1,4 @@ { "keyword":"ADJUSTR", - "docstr":"`ADJUSTR` — Right adjust a string\n\n### Description\n`ADJUSTR(STRING)` will right adjust a string by removing trailing spaces. \nSpaces are inserted at the start of the string as needed.\n\n\n\n### Syntax\n`RESULT = ADJUSTR(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` and of the same kind as\n`STRING` where trailing spaces are removed and the same number of\nspaces are inserted at the start of `STRING`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_adjustr\n\n  character(len=20) :: str = 'gfortran'\n\n  str = adjustr(str)\n\n  print *, str\n\nend program test_adjustr\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nADJUSTL, TRIM\n" + "docstr":"`ADJUSTR` — Right adjust a string\n\n### Description\n`ADJUSTR(STRING)` will right adjust a string by removing trailing spaces. \nSpaces are inserted at the start of the string as needed.\n\n\n\n### Syntax\n`RESULT = ADJUSTR(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` and of the same kind as\n`STRING` where trailing spaces are removed and the same number of\nspaces are inserted at the start of `STRING`.\n\n\n\n### Example\n```\n\n\nprogram test_adjustr\n\n  character(len=20) :: str = 'gfortran'\n\n  str = adjustr(str)\n\n  print *, str\n\nend program test_adjustr\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nADJUSTL, TRIM\n" } \ No newline at end of file diff --git a/src/docs/AIMAG.json b/src/docs/AIMAG.json index fcc79a92..23c93914 100644 --- a/src/docs/AIMAG.json +++ b/src/docs/AIMAG.json @@ -1,4 +1,4 @@ { "keyword":"AIMAG", - "docstr":"`AIMAG` — Imaginary part of complex number\n\n### Description\n`AIMAG(Z)` yields the imaginary part of complex argument `Z`. \nThe `IMAG(Z)` and `IMAGPART(Z)` intrinsic functions are provided\nfor compatibility with *g77*, and their use in new code is\nstrongly discouraged.\n\n\n\n### Syntax\n`RESULT = AIMAG(Z)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` with the\nkind type parameter of the argument.\n\n\n\n### Example\n\n ```\n\n\nprogram test_aimag\n\n  complex(4) z4\n\n  complex(8) z8\n\n  z4 = cmplx(1.e0_4, 0.e0_4)\n\n  z8 = cmplx(0.e0_8, 1.e0_8)\n\n  print *, aimag(z4), dimag(z8)\n\nend program test_aimag\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AIMAG(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n | `DIMAG(Z)` | `COMPLEX(8) Z` | `REAL(8)` | GNU extension\n\n | `IMAG(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n | `IMAGPART(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`AIMAG` — Imaginary part of complex number\n\n### Description\n`AIMAG(Z)` yields the imaginary part of complex argument `Z`. \nThe `IMAG(Z)` and `IMAGPART(Z)` intrinsic functions are provided\nfor compatibility with *g77*, and their use in new code is\nstrongly discouraged.\n\n\n\n### Syntax\n`RESULT = AIMAG(Z)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` with the\nkind type parameter of the argument.\n\n\n\n### Example\n```\n\n\nprogram test_aimag\n\n  complex(4) z4\n\n  complex(8) z8\n\n  z4 = cmplx(1.e0_4, 0.e0_4)\n\n  z8 = cmplx(0.e0_8, 1.e0_8)\n\n  print *, aimag(z4), dimag(z8)\n\nend program test_aimag\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AIMAG(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n | `DIMAG(Z)` | `COMPLEX(8) Z` | `REAL(8)` | GNU extension\n\n | `IMAG(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n | `IMAGPART(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/AINT.json b/src/docs/AINT.json index 438fafdb..88eb8a01 100644 --- a/src/docs/AINT.json +++ b/src/docs/AINT.json @@ -1,4 +1,4 @@ { "keyword":"AINT", - "docstr":"`AINT` — Truncate to a whole number\n\n### Description\n`AINT(A [, KIND])` truncates its argument to a whole number.\n\n\n\n### Syntax\n`RESULT = AINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` with the kind type parameter of the\nargument if the optional `KIND` is absent; otherwise, the kind\ntype parameter will be given by `KIND`. If the magnitude of\n`X` is less than one, `AINT(X)` returns zero. If the\nmagnitude is equal to or greater than one then it returns the largest\nwhole number that does not exceed its magnitude. The sign is the same\nas the sign of `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_aint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, aint(x4), dint(x8)\n\n  x8 = aint(x4,8)\n\nend program test_aint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AINT(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DINT(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`AINT` — Truncate to a whole number\n\n### Description\n`AINT(A [, KIND])` truncates its argument to a whole number.\n\n\n\n### Syntax\n`RESULT = AINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` with the kind type parameter of the\nargument if the optional `KIND` is absent; otherwise, the kind\ntype parameter will be given by `KIND`. If the magnitude of\n`X` is less than one, `AINT(X)` returns zero. If the\nmagnitude is equal to or greater than one then it returns the largest\nwhole number that does not exceed its magnitude. The sign is the same\nas the sign of `X`.\n\n\n\n### Example\n```\n\n\nprogram test_aint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, aint(x4), dint(x8)\n\n  x8 = aint(x4,8)\n\nend program test_aint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AINT(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DINT(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ALARM.json b/src/docs/ALARM.json index fc4b64fa..c84c4c33 100644 --- a/src/docs/ALARM.json +++ b/src/docs/ALARM.json @@ -1,4 +1,4 @@ { "keyword":"ALARM", - "docstr":"`ALARM` — Execute a routine after a given delay\n\n### Description\n`ALARM(SECONDS, HANDLER [, STATUS])` causes external subroutine `HANDLER`\nto be executed after a delay of `SECONDS` by using `alarm(2)` to\nset up a signal and `signal(2)` to catch it. If `STATUS` is\nsupplied, it will be returned with the number of seconds remaining until\nany previously scheduled alarm was due to be delivered, or zero if there\nwas no previously scheduled alarm.\n\n\n\n### Syntax\n`CALL ALARM(SECONDS, HANDLER [, STATUS])`\n\n\n### Arguments\n\n \n | `SECONDS` | The type of the argument shall be a scalar\n`INTEGER`. It is `INTENT(IN)`. \n\n | `HANDLER` | Signal handler (`INTEGER FUNCTION` or\n`SUBROUTINE`) or dummy/global `INTEGER` scalar. The scalar\nvalues may be either `SIG_IGN=1` to ignore the alarm generated\nor `SIG_DFL=0` to set the default action. It is `INTENT(IN)`. \n\n | `STATUS` | (Optional) `STATUS` shall be a scalar\nvariable of the default `INTEGER` kind. It is `INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram test_alarm\n\n  external handler_print\n\n  integer i\n\n  call alarm (3, handler_print, i)\n\n  print *, i\n\n  call sleep(10)\n\nend program test_alarm\n\n```\n\n \nThis will cause the external routine `handler_print` to be called\nafter 3 seconds. \n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" + "docstr":"`ALARM` — Execute a routine after a given delay\n\n### Description\n`ALARM(SECONDS, HANDLER [, STATUS])` causes external subroutine `HANDLER`\nto be executed after a delay of `SECONDS` by using `alarm(2)` to\nset up a signal and `signal(2)` to catch it. If `STATUS` is\nsupplied, it will be returned with the number of seconds remaining until\nany previously scheduled alarm was due to be delivered, or zero if there\nwas no previously scheduled alarm.\n\n\n\n### Syntax\n`CALL ALARM(SECONDS, HANDLER [, STATUS])`\n\n\n### Arguments\n\n \n | `SECONDS` | The type of the argument shall be a scalar\n`INTEGER`. It is `INTENT(IN)`. \n\n | `HANDLER` | Signal handler (`INTEGER FUNCTION` or\n`SUBROUTINE`) or dummy/global `INTEGER` scalar. The scalar\nvalues may be either `SIG_IGN=1` to ignore the alarm generated\nor `SIG_DFL=0` to set the default action. It is `INTENT(IN)`. \n\n | `STATUS` | (Optional) `STATUS` shall be a scalar\nvariable of the default `INTEGER` kind. It is `INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_alarm\n\n  external handler_print\n\n  integer i\n\n  call alarm (3, handler_print, i)\n\n  print *, i\n\n  call sleep(10)\n\nend program test_alarm\n\n```\n\n \nThis will cause the external routine `handler_print` to be called\nafter 3 seconds. \n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" } \ No newline at end of file diff --git a/src/docs/ALL.json b/src/docs/ALL.json index b6ae21a1..1defb7f1 100644 --- a/src/docs/ALL.json +++ b/src/docs/ALL.json @@ -1,4 +1,4 @@ { "keyword":"ALL", - "docstr":"`ALL` — All values in `MASK` along `DIM` are true\n\n### Description\n`ALL(MASK [, DIM])` determines if all the values are true in `MASK`\nin the array along dimension `DIM`.\n\n\n\n### Syntax\n`RESULT = ALL(MASK [, DIM])`\n\n\n### Arguments\n\n \n and\nit shall not be scalar. \n\n | `DIM` | (Optional) `DIM` shall be a scalar integer\nwith a value that lies between one and the rank of `MASK`.\n\n\n\n\n\n\n### Return value\n`ALL(MASK)` returns a scalar value of type `LOGICAL` where\nthe kind type parameter is the same as the kind type parameter of\n`MASK`. If `DIM` is present, then `ALL(MASK, DIM)` returns\nan array with the rank of `MASK` minus 1. The shape is determined from\nthe shape of `MASK` where the `DIM` dimension is elided.\n\n
\n**(A)** `ALL(MASK)` is true if all elements of `MASK` are true. \nIt also is true if `MASK` has zero size; otherwise, it is false. \n\n**(B)** If the rank of `MASK` is one, then `ALL(MASK,DIM)` is equivalent\nto `ALL(MASK)`. If the rank is greater than one, then `ALL(MASK,DIM)`is determined by applying `ALL` to the array sections. \n\n
\n\n\n\n### Example\n\n ```\n\n\nprogram test_all\n\n  logical l\n\n  l = all((/.true., .true., .true./))\n\n  print *, l\n\n  call section\n\n  contains\n\n    subroutine section\n\n      integer a(2,3), b(2,3)\n\n      a = 1\n\n      b = 1\n\n      b(2,2) = 2\n\n      print *, all(a .eq. b, 1)\n\n      print *, all(a .eq. b, 2)\n\n    end subroutine section\n\nend program test_all\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`ALL` — All values in `MASK` along `DIM` are true\n\n### Description\n`ALL(MASK [, DIM])` determines if all the values are true in `MASK`\nin the array along dimension `DIM`.\n\n\n\n### Syntax\n`RESULT = ALL(MASK [, DIM])`\n\n\n### Arguments\n\n \n and\nit shall not be scalar. \n\n | `DIM` | (Optional) `DIM` shall be a scalar integer\nwith a value that lies between one and the rank of `MASK`.\n\n\n\n\n\n\n### Return value\n`ALL(MASK)` returns a scalar value of type `LOGICAL` where\nthe kind type parameter is the same as the kind type parameter of\n`MASK`. If `DIM` is present, then `ALL(MASK, DIM)` returns\nan array with the rank of `MASK` minus 1. The shape is determined from\nthe shape of `MASK` where the `DIM` dimension is elided.\n\n
\n**(A)** `ALL(MASK)` is true if all elements of `MASK` are true. \nIt also is true if `MASK` has zero size; otherwise, it is false. \n\n**(B)** If the rank of `MASK` is one, then `ALL(MASK,DIM)` is equivalent\nto `ALL(MASK)`. If the rank is greater than one, then `ALL(MASK,DIM)`is determined by applying `ALL` to the array sections. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_all\n\n  logical l\n\n  l = all((/.true., .true., .true./))\n\n  print *, l\n\n  call section\n\n  contains\n\n    subroutine section\n\n      integer a(2,3), b(2,3)\n\n      a = 1\n\n      b = 1\n\n      b(2,2) = 2\n\n      print *, all(a .eq. b, 1)\n\n      print *, all(a .eq. b, 2)\n\n    end subroutine section\n\nend program test_all\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ALLOCATED.json b/src/docs/ALLOCATED.json index 920c4924..9e0a0617 100644 --- a/src/docs/ALLOCATED.json +++ b/src/docs/ALLOCATED.json @@ -1,4 +1,4 @@ { "keyword":"ALLOCATED", - "docstr":"`ALLOCATED` — Status of an allocatable entity\n\n### Description\n`ALLOCATED(ARRAY)` and `ALLOCATED(SCALAR)` check the allocation\nstatus of `ARRAY` and `SCALAR`, respectively.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = ALLOCATED(SCALAR)`
\n\n\n\n\n\n### Arguments\n\n \n array. \n\n | `SCALAR` | The argument shall be an `ALLOCATABLE` scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar `LOGICAL` with the default logical\nkind type parameter. If the argument is allocated, then the result is\n`.TRUE.`; otherwise, it returns `.FALSE.`\n\n\n### Example\n\n ```\n\n\nprogram test_allocated\n\n  integer :: i = 4\n\n  real(4), allocatable :: x(:)\n\n  if (.not. allocated(x)) allocate(x(i))\n\nend program test_allocated\n\n```\n\n \n\n### Standard\nFortran 95 and later. Note, the `SCALAR=` keyword and allocatable\nscalar entities are available in Fortran 2003 and later.\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`ALLOCATED` — Status of an allocatable entity\n\n### Description\n`ALLOCATED(ARRAY)` and `ALLOCATED(SCALAR)` check the allocation\nstatus of `ARRAY` and `SCALAR`, respectively.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = ALLOCATED(SCALAR)`
\n\n\n\n\n\n### Arguments\n\n \n array. \n\n | `SCALAR` | The argument shall be an `ALLOCATABLE` scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar `LOGICAL` with the default logical\nkind type parameter. If the argument is allocated, then the result is\n`.TRUE.`; otherwise, it returns `.FALSE.`\n\n\n### Example\n```\n\n\nprogram test_allocated\n\n  integer :: i = 4\n\n  real(4), allocatable :: x(:)\n\n  if (.not. allocated(x)) allocate(x(i))\n\nend program test_allocated\n\n```\n\n \n\n### Standard\nFortran 95 and later. Note, the `SCALAR=` keyword and allocatable\nscalar entities are available in Fortran 2003 and later.\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/AND.json b/src/docs/AND.json index b1f3eeab..2717683a 100644 --- a/src/docs/AND.json +++ b/src/docs/AND.json @@ -1,4 +1,4 @@ { "keyword":"AND", - "docstr":"`AND` — Bitwise logical AND\n\n### Description\nBitwise logical `AND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IAND intrinsic defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = AND(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `I`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_and\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F)\n\n  WRITE (*,*) AND(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IAND\n" + "docstr":"`AND` — Bitwise logical AND\n\n### Description\nBitwise logical `AND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IAND intrinsic defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = AND(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `I`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_and\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F)\n\n  WRITE (*,*) AND(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IAND\n" } \ No newline at end of file diff --git a/src/docs/ANINT.json b/src/docs/ANINT.json index af73b5b1..049ee2f6 100644 --- a/src/docs/ANINT.json +++ b/src/docs/ANINT.json @@ -1,4 +1,4 @@ { "keyword":"ANINT", - "docstr":"`ANINT` — Nearest whole number\n\n### Description\n`ANINT(A [, KIND])` rounds its argument to the nearest whole number.\n\n\n\n### Syntax\n`RESULT = ANINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type real with the kind type parameter of the\nargument if the optional `KIND` is absent; otherwise, the kind\ntype parameter will be given by `KIND`. If `A` is greater than\nzero, `ANINT(A)` returns `AINT(X+0.5)`. If `A` is\nless than or equal to zero then it returns `AINT(X-0.5)`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_anint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, anint(x4), dnint(x8)\n\n  x8 = anint(x4,8)\n\nend program test_anint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AINT(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DNINT(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`ANINT` — Nearest whole number\n\n### Description\n`ANINT(A [, KIND])` rounds its argument to the nearest whole number.\n\n\n\n### Syntax\n`RESULT = ANINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type real with the kind type parameter of the\nargument if the optional `KIND` is absent; otherwise, the kind\ntype parameter will be given by `KIND`. If `A` is greater than\nzero, `ANINT(A)` returns `AINT(X+0.5)`. If `A` is\nless than or equal to zero then it returns `AINT(X-0.5)`.\n\n\n\n### Example\n```\n\n\nprogram test_anint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, anint(x4), dnint(x8)\n\n  x8 = anint(x4,8)\n\nend program test_anint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AINT(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DNINT(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ANY.json b/src/docs/ANY.json index 8709a969..2ead6f7e 100644 --- a/src/docs/ANY.json +++ b/src/docs/ANY.json @@ -1,4 +1,4 @@ { "keyword":"ANY", - "docstr":"`ANY` — Any value in `MASK` along `DIM` is true\n\n### Description\n`ANY(MASK [, DIM])` determines if any of the values in the logical array\n`MASK` along dimension `DIM` are `.TRUE.`.\n\n\n\n### Syntax\n`RESULT = ANY(MASK [, DIM])`\n\n\n### Arguments\n\n \n and\nit shall not be scalar. \n\n | `DIM` | (Optional) `DIM` shall be a scalar integer\nwith a value that lies between one and the rank of `MASK`.\n\n\n\n\n\n\n### Return value\n`ANY(MASK)` returns a scalar value of type `LOGICAL` where\nthe kind type parameter is the same as the kind type parameter of\n`MASK`. If `DIM` is present, then `ANY(MASK, DIM)` returns\nan array with the rank of `MASK` minus 1. The shape is determined from\nthe shape of `MASK` where the `DIM` dimension is elided.\n\n
\n**(A)** `ANY(MASK)` is true if any element of `MASK` is true;\notherwise, it is false. It also is false if `MASK` has zero size. \n\n**(B)** If the rank of `MASK` is one, then `ANY(MASK,DIM)` is equivalent\nto `ANY(MASK)`. If the rank is greater than one, then `ANY(MASK,DIM)`is determined by applying `ANY` to the array sections. \n\n
\n\n\n\n### Example\n\n ```\n\n\nprogram test_any\n\n  logical l\n\n  l = any((/.true., .true., .true./))\n\n  print *, l\n\n  call section\n\n  contains\n\n    subroutine section\n\n      integer a(2,3), b(2,3)\n\n      a = 1\n\n      b = 1\n\n      b(2,2) = 2\n\n      print *, any(a .eq. b, 1)\n\n      print *, any(a .eq. b, 2)\n\n    end subroutine section\n\nend program test_any\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`ANY` — Any value in `MASK` along `DIM` is true\n\n### Description\n`ANY(MASK [, DIM])` determines if any of the values in the logical array\n`MASK` along dimension `DIM` are `.TRUE.`.\n\n\n\n### Syntax\n`RESULT = ANY(MASK [, DIM])`\n\n\n### Arguments\n\n \n and\nit shall not be scalar. \n\n | `DIM` | (Optional) `DIM` shall be a scalar integer\nwith a value that lies between one and the rank of `MASK`.\n\n\n\n\n\n\n### Return value\n`ANY(MASK)` returns a scalar value of type `LOGICAL` where\nthe kind type parameter is the same as the kind type parameter of\n`MASK`. If `DIM` is present, then `ANY(MASK, DIM)` returns\nan array with the rank of `MASK` minus 1. The shape is determined from\nthe shape of `MASK` where the `DIM` dimension is elided.\n\n
\n**(A)** `ANY(MASK)` is true if any element of `MASK` is true;\notherwise, it is false. It also is false if `MASK` has zero size. \n\n**(B)** If the rank of `MASK` is one, then `ANY(MASK,DIM)` is equivalent\nto `ANY(MASK)`. If the rank is greater than one, then `ANY(MASK,DIM)`is determined by applying `ANY` to the array sections. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_any\n\n  logical l\n\n  l = any((/.true., .true., .true./))\n\n  print *, l\n\n  call section\n\n  contains\n\n    subroutine section\n\n      integer a(2,3), b(2,3)\n\n      a = 1\n\n      b = 1\n\n      b(2,2) = 2\n\n      print *, any(a .eq. b, 1)\n\n      print *, any(a .eq. b, 2)\n\n    end subroutine section\n\nend program test_any\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ASIN.json b/src/docs/ASIN.json index a8a3c8fe..53ac5be5 100644 --- a/src/docs/ASIN.json +++ b/src/docs/ASIN.json @@ -1,4 +1,4 @@ { "keyword":"ASIN", - "docstr":"`ASIN` — Arcsine function\n\n### Description\n`ASIN(X)` computes the arcsine of its `X` (inverse of `SIN(X)`).\n\n\n\n### Syntax\n`RESULT = ASIN(X)`\n\n\n### Arguments\n\n \n and a magnitude that is\nless than or equal to one - or be `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real part of the result is in radians and lies in the range\n-\\pi/2 \\leq \\Re \\asin(x) \\leq \\pi/2.\n\n\n\n### Example\n\n ```\n\n\nprogram test_asin\n\n  real(8) :: x = 0.866_8\n\n  x = asin(x)\n\nend program test_asin\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ASIN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DASIN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: SIN\n\n " + "docstr":"`ASIN` — Arcsine function\n\n### Description\n`ASIN(X)` computes the arcsine of its `X` (inverse of `SIN(X)`).\n\n\n\n### Syntax\n`RESULT = ASIN(X)`\n\n\n### Arguments\n\n \n and a magnitude that is\nless than or equal to one - or be `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real part of the result is in radians and lies in the range\n-\\pi/2 \\leq \\Re \\asin(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nprogram test_asin\n\n  real(8) :: x = 0.866_8\n\n  x = asin(x)\n\nend program test_asin\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ASIN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DASIN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: SIN\n\n " } \ No newline at end of file diff --git a/src/docs/ASINH.json b/src/docs/ASINH.json index aebe7aca..ae86671e 100644 --- a/src/docs/ASINH.json +++ b/src/docs/ASINH.json @@ -1,4 +1,4 @@ { "keyword":"ASINH", - "docstr":"`ASINH` — Inverse hyperbolic sine function\n\n### Description\n`ASINH(X)` computes the inverse hyperbolic sine of `X`.\n\n\n\n### Syntax\n`RESULT = ASINH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n-\\pi/2 \\leq \\Im \\asinh(x) \\leq \\pi/2.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_asinh\n\n  REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)\n\n  WRITE (*,*) ASINH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DASINH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension.\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: SINH\n" + "docstr":"`ASINH` — Inverse hyperbolic sine function\n\n### Description\n`ASINH(X)` computes the inverse hyperbolic sine of `X`.\n\n\n\n### Syntax\n`RESULT = ASINH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n-\\pi/2 \\leq \\Im \\asinh(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nPROGRAM test_asinh\n\n  REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)\n\n  WRITE (*,*) ASINH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DASINH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension.\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: SINH\n" } \ No newline at end of file diff --git a/src/docs/ASSOCIATED.json b/src/docs/ASSOCIATED.json index 32b1648e..bd90d829 100644 --- a/src/docs/ASSOCIATED.json +++ b/src/docs/ASSOCIATED.json @@ -1,4 +1,4 @@ { "keyword":"ASSOCIATED", - "docstr":"`ASSOCIATED` — Status of a pointer or pointer/target pair\n\n### Description\n`ASSOCIATED(POINTER [, TARGET])` determines the status of the pointer\n`POINTER` or if `POINTER` is associated with the target `TARGET`.\n\n\n\n### Syntax\n`RESULT = ASSOCIATED(POINTER [, TARGET])`\n\n\n### Arguments\n\n \n attribute\nand it can be of any type. \n\n | `TARGET` | (Optional) `TARGET` shall be a pointer or\na target. It must have the same type, kind type parameter, and\narray rank as `POINTER`.\n\n\nThe association status of neither `POINTER` nor `TARGET` shall be\nundefined.\n\n\n\n\n### Return value\n`ASSOCIATED(POINTER)` returns a scalar value of type `LOGICAL(4)`. \nThere are several cases:\n
\n**(A) When the optional `TARGET` is not present then** `ASSOCIATED(POINTER)` is true if `POINTER` is associated with a target; otherwise, it returns false. \n\n**(B) If `TARGET` is present and a scalar target, the result is true if** `TARGET` is not a zero-sized storage sequence and the target associated with `POINTER` occupies the same storage units. If `POINTER` is\ndisassociated, the result is false. \n\n**(C) If `TARGET` is present and an array target, the result is true if** `TARGET` and `POINTER` have the same shape, are not zero-sized arrays,\nare arrays whose elements are not zero-sized storage sequences, and\n`TARGET` and `POINTER` occupy the same storage units in array element\norder. \nAs in case(B), the result is false, if `POINTER` is disassociated. \n\n**(D) If `TARGET` is present and an scalar pointer, the result is true** if `TARGET` is associated with `POINTER`, the target associated with\n`TARGET` are not zero-sized storage sequences and occupy the same storage\nunits. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n**(E) If `TARGET` is present and an array pointer, the result is true if** target associated with `POINTER` and the target associated with `TARGET`\nhave the same shape, are not zero-sized arrays, are arrays whose elements are\nnot zero-sized storage sequences, and `TARGET` and `POINTER` occupy\nthe same storage units in array element order. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n
\n\n\n\n### Example\n\n ```\n\n\nprogram test_associated\n\n   implicit none\n\n   real, target :: tgt(2) = (/1., 2./)\n\n   real, pointer :: ptr(:)\n\n   ptr => tgt\n\n   if (associated(ptr) .eqv. .false.) call abort\n\n   if (associated(ptr,tgt) .eqv. .false.) call abort\n\nend program test_associated\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nNULL\n" + "docstr":"`ASSOCIATED` — Status of a pointer or pointer/target pair\n\n### Description\n`ASSOCIATED(POINTER [, TARGET])` determines the status of the pointer\n`POINTER` or if `POINTER` is associated with the target `TARGET`.\n\n\n\n### Syntax\n`RESULT = ASSOCIATED(POINTER [, TARGET])`\n\n\n### Arguments\n\n \n attribute\nand it can be of any type. \n\n | `TARGET` | (Optional) `TARGET` shall be a pointer or\na target. It must have the same type, kind type parameter, and\narray rank as `POINTER`.\n\n\nThe association status of neither `POINTER` nor `TARGET` shall be\nundefined.\n\n\n\n\n### Return value\n`ASSOCIATED(POINTER)` returns a scalar value of type `LOGICAL(4)`. \nThere are several cases:\n
\n**(A) When the optional `TARGET` is not present then** `ASSOCIATED(POINTER)` is true if `POINTER` is associated with a target; otherwise, it returns false. \n\n**(B) If `TARGET` is present and a scalar target, the result is true if** `TARGET` is not a zero-sized storage sequence and the target associated with `POINTER` occupies the same storage units. If `POINTER` is\ndisassociated, the result is false. \n\n**(C) If `TARGET` is present and an array target, the result is true if** `TARGET` and `POINTER` have the same shape, are not zero-sized arrays,\nare arrays whose elements are not zero-sized storage sequences, and\n`TARGET` and `POINTER` occupy the same storage units in array element\norder. \nAs in case(B), the result is false, if `POINTER` is disassociated. \n\n**(D) If `TARGET` is present and an scalar pointer, the result is true** if `TARGET` is associated with `POINTER`, the target associated with\n`TARGET` are not zero-sized storage sequences and occupy the same storage\nunits. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n**(E) If `TARGET` is present and an array pointer, the result is true if** target associated with `POINTER` and the target associated with `TARGET`\nhave the same shape, are not zero-sized arrays, are arrays whose elements are\nnot zero-sized storage sequences, and `TARGET` and `POINTER` occupy\nthe same storage units in array element order. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_associated\n\n   implicit none\n\n   real, target :: tgt(2) = (/1., 2./)\n\n   real, pointer :: ptr(:)\n\n   ptr => tgt\n\n   if (associated(ptr) .eqv. .false.) call abort\n\n   if (associated(ptr,tgt) .eqv. .false.) call abort\n\nend program test_associated\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nNULL\n" } \ No newline at end of file diff --git a/src/docs/ATAN.json b/src/docs/ATAN.json index 79551eda..06144e6a 100644 --- a/src/docs/ATAN.json +++ b/src/docs/ATAN.json @@ -1,4 +1,4 @@ { "keyword":"ATAN", - "docstr":"`ATAN` — Arctangent function\n\n### Description\n`ATAN(X)` computes the arctangent of `X`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = ATAN(Y, X)`
\n\n\n\n\n\n### Arguments\n\n \n;\nif `Y` is present, `X` shall be REAL. \n\n | `Y` shall be of the same type and kind as `X`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nIf `Y` is present, the result is identical to `ATAN2(Y,X)`. \nOtherwise, it the arcus tangent of `X`, where the real part of\nthe result is in radians and lies in the range\n-\\pi/2 \\leq \\Re \\atan(x) \\leq \\pi/2.\n\n\n\n### Example\n\n ```\n\n\nprogram test_atan\n\n  real(8) :: x = 2.866_8\n\n  x = atan(x)\n\nend program test_atan\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ATAN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DATAN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument and for two arguments\nFortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: TAN\n\n " + "docstr":"`ATAN` — Arctangent function\n\n### Description\n`ATAN(X)` computes the arctangent of `X`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = ATAN(Y, X)`
\n\n\n\n\n\n### Arguments\n\n \n;\nif `Y` is present, `X` shall be REAL. \n\n | `Y` shall be of the same type and kind as `X`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nIf `Y` is present, the result is identical to `ATAN2(Y,X)`. \nOtherwise, it the arcus tangent of `X`, where the real part of\nthe result is in radians and lies in the range\n-\\pi/2 \\leq \\Re \\atan(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nprogram test_atan\n\n  real(8) :: x = 2.866_8\n\n  x = atan(x)\n\nend program test_atan\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ATAN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DATAN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument and for two arguments\nFortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: TAN\n\n " } \ No newline at end of file diff --git a/src/docs/ATAN2.json b/src/docs/ATAN2.json index 1971744c..ecf8e496 100644 --- a/src/docs/ATAN2.json +++ b/src/docs/ATAN2.json @@ -1,4 +1,4 @@ { "keyword":"ATAN2", - "docstr":"`ATAN2` — Arctangent function\n\n### Description\n`ATAN2(Y, X)` computes the principal value of the argument\nfunction of the complex number X + i Y. This function can\nbe used to transform from Cartesian into polar coordinates and\nallows to determine the angle in the correct quadrant.\n\n\n\n### Syntax\n`RESULT = ATAN2(Y, X)`\n\n\n### Arguments\n\n \n. \n\n | `X` | The type and kind type parameter shall be the same as `Y`. \nIf `Y` is zero, then `X` must be nonzero.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind type parameter as `Y`. It\nis the principal value of the complex number X + i Y. If `X`\nis nonzero, then it lies in the range -\\pi \\le \\atan (x) \\leq \\pi. \nThe sign is positive if `Y` is positive. If `Y` is zero, then\nthe return value is zero if `X` is strictly positive, \\pi if\n`X` is negative and `Y` is positive zero (or the processor does\nnot handle signed zeros), and -\\pi if `X` is negative and\n`Y` is negative zero. Finally, if `X` is zero, then the\nmagnitude of the result is \\pi/2.\n\n\n\n### Example\n\n ```\n\n\nprogram test_atan2\n\n  real(4) :: x = 1.e0_4, y = 0.5e0_4\n\n  x = atan2(y,x)\n\nend program test_atan2\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ATAN2(X, Y)` | `REAL(4) X, Y` | `REAL(4)` | Fortran 77 and later\n\n | `DATAN2(X, Y)` | `REAL(8) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`ATAN2` — Arctangent function\n\n### Description\n`ATAN2(Y, X)` computes the principal value of the argument\nfunction of the complex number X + i Y. This function can\nbe used to transform from Cartesian into polar coordinates and\nallows to determine the angle in the correct quadrant.\n\n\n\n### Syntax\n`RESULT = ATAN2(Y, X)`\n\n\n### Arguments\n\n \n. \n\n | `X` | The type and kind type parameter shall be the same as `Y`. \nIf `Y` is zero, then `X` must be nonzero.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind type parameter as `Y`. It\nis the principal value of the complex number X + i Y. If `X`\nis nonzero, then it lies in the range -\\pi \\le \\atan (x) \\leq \\pi. \nThe sign is positive if `Y` is positive. If `Y` is zero, then\nthe return value is zero if `X` is strictly positive, \\pi if\n`X` is negative and `Y` is positive zero (or the processor does\nnot handle signed zeros), and -\\pi if `X` is negative and\n`Y` is negative zero. Finally, if `X` is zero, then the\nmagnitude of the result is \\pi/2.\n\n\n\n### Example\n```\n\n\nprogram test_atan2\n\n  real(4) :: x = 1.e0_4, y = 0.5e0_4\n\n  x = atan2(y,x)\n\nend program test_atan2\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ATAN2(X, Y)` | `REAL(4) X, Y` | `REAL(4)` | Fortran 77 and later\n\n | `DATAN2(X, Y)` | `REAL(8) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ATANH.json b/src/docs/ATANH.json index 897505d2..ef7018c5 100644 --- a/src/docs/ATANH.json +++ b/src/docs/ATANH.json @@ -1,4 +1,4 @@ { "keyword":"ATANH", - "docstr":"`ATANH` — Inverse hyperbolic tangent function\n\n### Description\n`ATANH(X)` computes the inverse hyperbolic tangent of `X`.\n\n\n\n### Syntax\n`RESULT = ATANH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n-\\pi/2 \\leq \\Im \\atanh(x) \\leq \\pi/2.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_atanh\n\n  REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)\n\n  WRITE (*,*) ATANH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DATANH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: TANH\n" + "docstr":"`ATANH` — Inverse hyperbolic tangent function\n\n### Description\n`ATANH(X)` computes the inverse hyperbolic tangent of `X`.\n\n\n\n### Syntax\n`RESULT = ATANH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n-\\pi/2 \\leq \\Im \\atanh(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nPROGRAM test_atanh\n\n  REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)\n\n  WRITE (*,*) ATANH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DATANH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: TANH\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_ADD.json b/src/docs/ATOMIC_ADD.json index 5b1b4b88..b6862074 100644 --- a/src/docs/ATOMIC_ADD.json +++ b/src/docs/ATOMIC_ADD.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_ADD", - "docstr":"`ATOMIC_ADD` — Atomic ADD operation\n\n### Description\n`ATOMIC_ADD(ATOM, VALUE)` atomically adds the value of `VAR` to the\nvariable `ATOM`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_ADD (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_add (atom[1], this_image())\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_ADD, ISO_FORTRAN_ENV,\nATOMIC_AND, ATOMIC_OR, ATOMIC_XOR\n" + "docstr":"`ATOMIC_ADD` — Atomic ADD operation\n\n### Description\n`ATOMIC_ADD(ATOM, VALUE)` atomically adds the value of `VAR` to the\nvariable `ATOM`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_ADD (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_add (atom[1], this_image())\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_ADD, ISO_FORTRAN_ENV,\nATOMIC_AND, ATOMIC_OR, ATOMIC_XOR\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_AND.json b/src/docs/ATOMIC_AND.json index 06d6cd77..60afed98 100644 --- a/src/docs/ATOMIC_AND.json +++ b/src/docs/ATOMIC_AND.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_AND", - "docstr":"`ATOMIC_AND` — Atomic bitwise AND operation\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nAND between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_AND (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_and (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_AND, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" + "docstr":"`ATOMIC_AND` — Atomic bitwise AND operation\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nAND between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_AND (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_and (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_AND, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_CAS.json b/src/docs/ATOMIC_CAS.json index ba116ae3..115260c1 100644 --- a/src/docs/ATOMIC_CAS.json +++ b/src/docs/ATOMIC_CAS.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_CAS", - "docstr":"`ATOMIC_CAS` — Atomic compare and swap\n\n### Description\n`ATOMIC_CAS` compares the variable `ATOM` with the value of\n`COMPARE`; if the value is the same, `ATOM` is set to the value\nof `NEW`. Additionally, `OLD` is set to the value of `ATOM`\nthat was used for the comparison. When `STAT` is present and the invokation\nwas successful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_CAS (ATOM, OLD, COMPARE, NEW [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `COMPARE` | Scalar variable of the same type and kind as\n`ATOM`. \n\n | `NEW` | Scalar variable of the same type as `ATOM`. If kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  logical(atomic_logical_kind) :: atom[*], prev\n\n  call atomic_cas (atom[1], prev, .false., .true.))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_REF, ISO_FORTRAN_ENV\n" + "docstr":"`ATOMIC_CAS` — Atomic compare and swap\n\n### Description\n`ATOMIC_CAS` compares the variable `ATOM` with the value of\n`COMPARE`; if the value is the same, `ATOM` is set to the value\nof `NEW`. Additionally, `OLD` is set to the value of `ATOM`\nthat was used for the comparison. When `STAT` is present and the invokation\nwas successful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_CAS (ATOM, OLD, COMPARE, NEW [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `COMPARE` | Scalar variable of the same type and kind as\n`ATOM`. \n\n | `NEW` | Scalar variable of the same type as `ATOM`. If kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  logical(atomic_logical_kind) :: atom[*], prev\n\n  call atomic_cas (atom[1], prev, .false., .true.))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_REF, ISO_FORTRAN_ENV\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_DEFINE.json b/src/docs/ATOMIC_DEFINE.json index 95d03021..e8aa30e7 100644 --- a/src/docs/ATOMIC_DEFINE.json +++ b/src/docs/ATOMIC_DEFINE.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_DEFINE", - "docstr":"`ATOMIC_DEFINE` — Setting a variable atomically\n\n### Description\n`ATOMIC_DEFINE(ATOM, VALUE)` defines the variable `ATOM` with the value\n`VALUE` atomically. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_DEFINE (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind.\n\n \n\n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_define (atom[1], this_image())\n\nend program atomic\n\n```\n\n\n\n### Standard\nFortran 2008 and later; with `STAT`, TS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_REF, ATOMIC_CAS, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_AND, ATOMIC_OR, ATOMIC_XOR\n" + "docstr":"`ATOMIC_DEFINE` — Setting a variable atomically\n\n### Description\n`ATOMIC_DEFINE(ATOM, VALUE)` defines the variable `ATOM` with the value\n`VALUE` atomically. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_DEFINE (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind.\n\n \n\n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_define (atom[1], this_image())\n\nend program atomic\n\n```\n\n\n\n### Standard\nFortran 2008 and later; with `STAT`, TS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_REF, ATOMIC_CAS, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_AND, ATOMIC_OR, ATOMIC_XOR\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_FETCH_ADD.json b/src/docs/ATOMIC_FETCH_ADD.json index 4d096970..438902ce 100644 --- a/src/docs/ATOMIC_FETCH_ADD.json +++ b/src/docs/ATOMIC_FETCH_ADD.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_FETCH_ADD", - "docstr":"`ATOMIC_FETCH_ADD` — Atomic ADD operation with prior fetch\n\n### Description\n`ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)` atomically stores the value of\n`ATOM` in `OLD` and adds the value of `VAR` to the\nvariable `ATOM`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_ADD (ATOM, VALUE, old [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n`ATOMIC_LOGICAL_KIND` kind.\n\n \n\n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_add (atom[1], this_image(), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_ADD, ISO_FORTRAN_ENV,\nATOMIC_FETCH_AND, ATOMIC_FETCH_OR, ATOMIC_FETCH_XOR\n" + "docstr":"`ATOMIC_FETCH_ADD` — Atomic ADD operation with prior fetch\n\n### Description\n`ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)` atomically stores the value of\n`ATOM` in `OLD` and adds the value of `VAR` to the\nvariable `ATOM`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_ADD (ATOM, VALUE, old [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n`ATOMIC_LOGICAL_KIND` kind.\n\n \n\n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_add (atom[1], this_image(), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_ADD, ISO_FORTRAN_ENV,\nATOMIC_FETCH_AND, ATOMIC_FETCH_OR, ATOMIC_FETCH_XOR\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_FETCH_AND.json b/src/docs/ATOMIC_FETCH_AND.json index 7f16964d..c3ffc366 100644 --- a/src/docs/ATOMIC_FETCH_AND.json +++ b/src/docs/ATOMIC_FETCH_AND.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_FETCH_AND", - "docstr":"`ATOMIC_FETCH_AND` — Atomic bitwise AND operation with prior fetch\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise AND between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_and (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_AND, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_OR, ATOMIC_FETCH_XOR\n" + "docstr":"`ATOMIC_FETCH_AND` — Atomic bitwise AND operation with prior fetch\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise AND between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_and (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_AND, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_OR, ATOMIC_FETCH_XOR\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_FETCH_OR.json b/src/docs/ATOMIC_FETCH_OR.json index d6095998..1976c554 100644 --- a/src/docs/ATOMIC_FETCH_OR.json +++ b/src/docs/ATOMIC_FETCH_OR.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_FETCH_OR", - "docstr":"`ATOMIC_FETCH_OR` — Atomic bitwise OR operation with prior fetch\n\n### Description\n`ATOMIC_OR(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise OR between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_OR (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_or (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_OR, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_XOR\n" + "docstr":"`ATOMIC_FETCH_OR` — Atomic bitwise OR operation with prior fetch\n\n### Description\n`ATOMIC_OR(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise OR between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_OR (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_or (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_OR, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_XOR\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_FETCH_XOR.json b/src/docs/ATOMIC_FETCH_XOR.json index c4d1e883..497706c7 100644 --- a/src/docs/ATOMIC_FETCH_XOR.json +++ b/src/docs/ATOMIC_FETCH_XOR.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_FETCH_XOR", - "docstr":"`ATOMIC_FETCH_XOR` — Atomic bitwise XOR operation with prior fetch\n\n### Description\n`ATOMIC_XOR(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise XOR between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_XOR (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_xor (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_XOR, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_OR\n" + "docstr":"`ATOMIC_FETCH_XOR` — Atomic bitwise XOR operation with prior fetch\n\n### Description\n`ATOMIC_XOR(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise XOR between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_XOR (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_xor (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_XOR, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_OR\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_OR.json b/src/docs/ATOMIC_OR.json index 46006aef..118a1fdf 100644 --- a/src/docs/ATOMIC_OR.json +++ b/src/docs/ATOMIC_OR.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_OR", - "docstr":"`ATOMIC_OR` — Atomic bitwise OR operation\n\n### Description\n`ATOMIC_OR(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nAND between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_OR (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_or (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_OR, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" + "docstr":"`ATOMIC_OR` — Atomic bitwise OR operation\n\n### Description\n`ATOMIC_OR(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nAND between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_OR (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_or (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_OR, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_REF.json b/src/docs/ATOMIC_REF.json index 41aa2941..101fdbe0 100644 --- a/src/docs/ATOMIC_REF.json +++ b/src/docs/ATOMIC_REF.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_REF", - "docstr":"`ATOMIC_REF` — Obtaining the value of a variable atomically\n\n### Description\n`ATOMIC_DEFINE(ATOM, VALUE)` atomically assigns the value of the\nvariable `ATOM` to `VALUE`. When `STAT` is present and the\ninvokation was successful, it is assigned the value 0. If it is present and the\ninvokation has failed, it is assigned a positive value; in particular, for a\ncoindexed `ATOM`, if the remote image has stopped, it is assigned the value\nof `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image\nhas failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_REF(VALUE, ATOM [, STAT])`\n\n\n### Arguments\n\n \n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  logical(atomic_logical_kind) :: atom[*]\n\n  logical :: val\n\n  call atomic_ref (atom, .false.)\n\n  ! ...\n\n  call atomic_ref (atom, val)\n\n  if (val) then\n\n    print *, \"Obtained\"\n\n  end if\n\nend program atomic\n\n```\n\n\n\n### Standard\nFortran 2008 and later; with `STAT`, TS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_CAS, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_OR,\nATOMIC_FETCH_XOR\n" + "docstr":"`ATOMIC_REF` — Obtaining the value of a variable atomically\n\n### Description\n`ATOMIC_DEFINE(ATOM, VALUE)` atomically assigns the value of the\nvariable `ATOM` to `VALUE`. When `STAT` is present and the\ninvokation was successful, it is assigned the value 0. If it is present and the\ninvokation has failed, it is assigned a positive value; in particular, for a\ncoindexed `ATOM`, if the remote image has stopped, it is assigned the value\nof `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image\nhas failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_REF(VALUE, ATOM [, STAT])`\n\n\n### Arguments\n\n \n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  logical(atomic_logical_kind) :: atom[*]\n\n  logical :: val\n\n  call atomic_ref (atom, .false.)\n\n  ! ...\n\n  call atomic_ref (atom, val)\n\n  if (val) then\n\n    print *, \"Obtained\"\n\n  end if\n\nend program atomic\n\n```\n\n\n\n### Standard\nFortran 2008 and later; with `STAT`, TS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_CAS, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_OR,\nATOMIC_FETCH_XOR\n" } \ No newline at end of file diff --git a/src/docs/ATOMIC_XOR.json b/src/docs/ATOMIC_XOR.json index f0134a96..c20dd171 100644 --- a/src/docs/ATOMIC_XOR.json +++ b/src/docs/ATOMIC_XOR.json @@ -1,4 +1,4 @@ { "keyword":"ATOMIC_XOR", - "docstr":"`ATOMIC_XOR` — Atomic bitwise OR operation\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nXOR between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_XOR (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_xor (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_XOR, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" + "docstr":"`ATOMIC_XOR` — Atomic bitwise OR operation\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nXOR between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_XOR (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_xor (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_XOR, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" } \ No newline at end of file diff --git a/src/docs/BESSEL_J0.json b/src/docs/BESSEL_J0.json index 48471d26..5dc8502c 100644 --- a/src/docs/BESSEL_J0.json +++ b/src/docs/BESSEL_J0.json @@ -1,4 +1,4 @@ { "keyword":"BESSEL_J0", - "docstr":"`BESSEL_J0` — Bessel function of the first kind of order 0\n\n### Description\n`BESSEL_J0(X)` computes the Bessel function of the first kind of\norder 0 of `X`. This function is available under the name\n`BESJ0` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_J0(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and lies in the\nrange - 0.4027... \\leq Bessel (0,x) \\leq 1. It has the same\nkind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_besj0\n\n  real(8) :: x = 0.0_8\n\n  x = bessel_j0(x)\n\nend program test_besj0\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJ0(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`BESSEL_J0` — Bessel function of the first kind of order 0\n\n### Description\n`BESSEL_J0(X)` computes the Bessel function of the first kind of\norder 0 of `X`. This function is available under the name\n`BESJ0` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_J0(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and lies in the\nrange - 0.4027... \\leq Bessel (0,x) \\leq 1. It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besj0\n\n  real(8) :: x = 0.0_8\n\n  x = bessel_j0(x)\n\nend program test_besj0\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJ0(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/BESSEL_J1.json b/src/docs/BESSEL_J1.json index d4242460..a9ebdf5d 100644 --- a/src/docs/BESSEL_J1.json +++ b/src/docs/BESSEL_J1.json @@ -1,4 +1,4 @@ { "keyword":"BESSEL_J1", - "docstr":"`BESSEL_J1` — Bessel function of the first kind of order 1\n\n### Description\n`BESSEL_J1(X)` computes the Bessel function of the first kind of\norder 1 of `X`. This function is available under the name\n`BESJ1` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_J1(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and lies in the\nrange - 0.5818... \\leq Bessel (0,x) \\leq 0.5818 . It has the same\nkind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_besj1\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_j1(x)\n\nend program test_besj1\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJ1(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`BESSEL_J1` — Bessel function of the first kind of order 1\n\n### Description\n`BESSEL_J1(X)` computes the Bessel function of the first kind of\norder 1 of `X`. This function is available under the name\n`BESJ1` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_J1(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and lies in the\nrange - 0.5818... \\leq Bessel (0,x) \\leq 0.5818 . It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besj1\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_j1(x)\n\nend program test_besj1\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJ1(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/BESSEL_JN.json b/src/docs/BESSEL_JN.json index 26022f6c..d041f146 100644 --- a/src/docs/BESSEL_JN.json +++ b/src/docs/BESSEL_JN.json @@ -1,4 +1,4 @@ { "keyword":"BESSEL_JN", - "docstr":"`BESSEL_JN` — Bessel function of the first kind\n\n### Description\n`BESSEL_JN(N, X)` computes the Bessel function of the first kind of\norder `N` of `X`. This function is available under the name\n`BESJN` as a GNU extension. If `N` and `X` are arrays,\ntheir ranks and shapes shall conform.\n\n \n`BESSEL_JN(N1, N2, X)` returns an array with the Bessel functions\nof the first kind of the orders `N1` to `N2`.\n\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = BESSEL_JN(N1, N2, X)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `N1` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `N2` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `X` | Shall be a scalar or an array of type `REAL`;\nfor `BESSEL_JN(N1, N2, X)` it shall be scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `REAL`. It has the same\nkind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_besjn\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_jn(5,x)\n\nend program test_besjn\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJN(N, X)` | `INTEGER N` | `REAL(8)` | GNU extension\n\n | `REAL(8) X` | \n\n\n\n\n\n### Notes\nThe transformational function uses a recurrence algorithm which might,\nfor some values of `X`, lead to different results than calls to\nthe elemental function.\n\n\n\n### Standard\nFortran 2008 and later, negative `N` is allowed as GNU extension\n\n\n\n### Class\nElemental function, except for the transformational function\n`BESSEL_JN(N1, N2, X)`\n\n" + "docstr":"`BESSEL_JN` — Bessel function of the first kind\n\n### Description\n`BESSEL_JN(N, X)` computes the Bessel function of the first kind of\norder `N` of `X`. This function is available under the name\n`BESJN` as a GNU extension. If `N` and `X` are arrays,\ntheir ranks and shapes shall conform.\n\n \n`BESSEL_JN(N1, N2, X)` returns an array with the Bessel functions\nof the first kind of the orders `N1` to `N2`.\n\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = BESSEL_JN(N1, N2, X)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `N1` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `N2` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `X` | Shall be a scalar or an array of type `REAL`;\nfor `BESSEL_JN(N1, N2, X)` it shall be scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `REAL`. It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besjn\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_jn(5,x)\n\nend program test_besjn\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJN(N, X)` | `INTEGER N` | `REAL(8)` | GNU extension\n\n | `REAL(8) X` | \n\n\n\n\n\n### Notes\nThe transformational function uses a recurrence algorithm which might,\nfor some values of `X`, lead to different results than calls to\nthe elemental function.\n\n\n\n### Standard\nFortran 2008 and later, negative `N` is allowed as GNU extension\n\n\n\n### Class\nElemental function, except for the transformational function\n`BESSEL_JN(N1, N2, X)`\n\n" } \ No newline at end of file diff --git a/src/docs/BESSEL_Y0.json b/src/docs/BESSEL_Y0.json index 57c55c65..97bb9319 100644 --- a/src/docs/BESSEL_Y0.json +++ b/src/docs/BESSEL_Y0.json @@ -1,4 +1,4 @@ { "keyword":"BESSEL_Y0", - "docstr":"`BESSEL_Y0` — Bessel function of the second kind of order 0\n\n### Description\n`BESSEL_Y0(X)` computes the Bessel function of the second kind of\norder 0 of `X`. This function is available under the name\n`BESY0` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_Y0(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`. It has the same kind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_besy0\n\n  real(8) :: x = 0.0_8\n\n  x = bessel_y0(x)\n\nend program test_besy0\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESY0(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`BESSEL_Y0` — Bessel function of the second kind of order 0\n\n### Description\n`BESSEL_Y0(X)` computes the Bessel function of the second kind of\norder 0 of `X`. This function is available under the name\n`BESY0` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_Y0(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`. It has the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besy0\n\n  real(8) :: x = 0.0_8\n\n  x = bessel_y0(x)\n\nend program test_besy0\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESY0(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/BESSEL_Y1.json b/src/docs/BESSEL_Y1.json index 800dea3b..bc447bb0 100644 --- a/src/docs/BESSEL_Y1.json +++ b/src/docs/BESSEL_Y1.json @@ -1,4 +1,4 @@ { "keyword":"BESSEL_Y1", - "docstr":"`BESSEL_Y1` — Bessel function of the second kind of order 1\n\n### Description\n`BESSEL_Y1(X)` computes the Bessel function of the second kind of\norder 1 of `X`. This function is available under the name\n`BESY1` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_Y1(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`. It has the same kind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_besy1\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_y1(x)\n\nend program test_besy1\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESY1(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`BESSEL_Y1` — Bessel function of the second kind of order 1\n\n### Description\n`BESSEL_Y1(X)` computes the Bessel function of the second kind of\norder 1 of `X`. This function is available under the name\n`BESY1` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_Y1(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`. It has the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besy1\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_y1(x)\n\nend program test_besy1\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESY1(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/BESSEL_YN.json b/src/docs/BESSEL_YN.json index 86ad26ef..3ace911e 100644 --- a/src/docs/BESSEL_YN.json +++ b/src/docs/BESSEL_YN.json @@ -1,4 +1,4 @@ { "keyword":"BESSEL_YN", - "docstr":"`BESSEL_YN` — Bessel function of the second kind\n\n### Description\n`BESSEL_YN(N, X)` computes the Bessel function of the second kind of\norder `N` of `X`. This function is available under the name\n`BESYN` as a GNU extension. If `N` and `X` are arrays,\ntheir ranks and shapes shall conform.\n\n \n`BESSEL_YN(N1, N2, X)` returns an array with the Bessel functions\nof the first kind of the orders `N1` to `N2`.\n\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = BESSEL_YN(N1, N2, X)`
\n\n\n\n\n\n### Arguments\n\n \n . \n\n | `N1` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `N2` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `X` | Shall be a scalar or an array of type `REAL`;\nfor `BESSEL_YN(N1, N2, X)` it shall be scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `REAL`. It has the same\nkind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_besyn\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_yn(5,x)\n\nend program test_besyn\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESYN(N,X)` | `INTEGER N` | `REAL(8)` | GNU extension\n\n | `REAL(8) X` | \n\n\n\n\n\n### Notes\nThe transformational function uses a recurrence algorithm which might,\nfor some values of `X`, lead to different results than calls to\nthe elemental function.\n\n\n\n### Standard\nFortran 2008 and later, negative `N` is allowed as GNU extension\n\n\n\n### Class\nElemental function, except for the transformational function\n`BESSEL_YN(N1, N2, X)`\n\n" + "docstr":"`BESSEL_YN` — Bessel function of the second kind\n\n### Description\n`BESSEL_YN(N, X)` computes the Bessel function of the second kind of\norder `N` of `X`. This function is available under the name\n`BESYN` as a GNU extension. If `N` and `X` are arrays,\ntheir ranks and shapes shall conform.\n\n \n`BESSEL_YN(N1, N2, X)` returns an array with the Bessel functions\nof the first kind of the orders `N1` to `N2`.\n\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = BESSEL_YN(N1, N2, X)`
\n\n\n\n\n\n### Arguments\n\n \n . \n\n | `N1` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `N2` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `X` | Shall be a scalar or an array of type `REAL`;\nfor `BESSEL_YN(N1, N2, X)` it shall be scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `REAL`. It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besyn\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_yn(5,x)\n\nend program test_besyn\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESYN(N,X)` | `INTEGER N` | `REAL(8)` | GNU extension\n\n | `REAL(8) X` | \n\n\n\n\n\n### Notes\nThe transformational function uses a recurrence algorithm which might,\nfor some values of `X`, lead to different results than calls to\nthe elemental function.\n\n\n\n### Standard\nFortran 2008 and later, negative `N` is allowed as GNU extension\n\n\n\n### Class\nElemental function, except for the transformational function\n`BESSEL_YN(N1, N2, X)`\n\n" } \ No newline at end of file diff --git a/src/docs/BIT_SIZE.json b/src/docs/BIT_SIZE.json index 1d84ce33..8e2f6e98 100644 --- a/src/docs/BIT_SIZE.json +++ b/src/docs/BIT_SIZE.json @@ -1,4 +1,4 @@ { "keyword":"BIT_SIZE", - "docstr":"`BIT_SIZE` — Bit size inquiry function\n\n### Description\n`BIT_SIZE(I)` returns the number of bits (integer precision plus sign bit)\nrepresented by the type of `I`. The result of `BIT_SIZE(I)` is\nindependent of the actual value of `I`.\n\n\n\n### Syntax\n`RESULT = BIT_SIZE(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`\n\n\n### Example\n\n ```\n\n\nprogram test_bit_size\n\n    integer :: i = 123\n\n    integer :: size\n\n    size = bit_size(i)\n\n    print *, size\n\nend program test_bit_size\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`BIT_SIZE` — Bit size inquiry function\n\n### Description\n`BIT_SIZE(I)` returns the number of bits (integer precision plus sign bit)\nrepresented by the type of `I`. The result of `BIT_SIZE(I)` is\nindependent of the actual value of `I`.\n\n\n\n### Syntax\n`RESULT = BIT_SIZE(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`\n\n\n### Example\n```\n\n\nprogram test_bit_size\n\n    integer :: i = 123\n\n    integer :: size\n\n    size = bit_size(i)\n\n    print *, size\n\nend program test_bit_size\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/BTEST.json b/src/docs/BTEST.json index 0e77ec17..223333b2 100644 --- a/src/docs/BTEST.json +++ b/src/docs/BTEST.json @@ -1,4 +1,4 @@ { "keyword":"BTEST", - "docstr":"`BTEST` — Bit test function\n\n### Description\n`BTEST(I,POS)` returns logical `.TRUE.` if the bit at `POS`\nin `I` is set. The counting of the bits starts at 0.\n\n\n\n### Syntax\n`RESULT = BTEST(I, POS)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`\n\n\n### Example\n\n ```\n\n\nprogram test_btest\n\n    integer :: i = 32768 + 1024 + 64\n\n    integer :: pos\n\n    logical :: bool\n\n    do pos=0,16\n\n        bool = btest(i, pos)\n\n        print *, pos, bool\n\n    end do\n\nend program test_btest\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`BTEST` — Bit test function\n\n### Description\n`BTEST(I,POS)` returns logical `.TRUE.` if the bit at `POS`\nin `I` is set. The counting of the bits starts at 0.\n\n\n\n### Syntax\n`RESULT = BTEST(I, POS)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`\n\n\n### Example\n```\n\n\nprogram test_btest\n\n    integer :: i = 32768 + 1024 + 64\n\n    integer :: pos\n\n    logical :: bool\n\n    do pos=0,16\n\n        bool = btest(i, pos)\n\n        print *, pos, bool\n\n    end do\n\nend program test_btest\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/CEILING.json b/src/docs/CEILING.json index ea9774cc..16bf8418 100644 --- a/src/docs/CEILING.json +++ b/src/docs/CEILING.json @@ -1,4 +1,4 @@ { "keyword":"CEILING", - "docstr":"`CEILING` — Integer ceiling function\n\n### Description\n`CEILING(A)` returns the least integer greater than or equal to `A`.\n\n\n\n### Syntax\n`RESULT = CEILING(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(KIND)` if `KIND` is present\nand a default-kind `INTEGER` otherwise.\n\n\n\n### Example\n\n ```\n\n\nprogram test_ceiling\n\n    real :: x = 63.29\n\n    real :: y = -63.59\n\n    print *, ceiling(x) ! returns 64\n\n    print *, ceiling(y) ! returns -63\n\nend program test_ceiling\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nFLOOR, NINT\n\n " + "docstr":"`CEILING` — Integer ceiling function\n\n### Description\n`CEILING(A)` returns the least integer greater than or equal to `A`.\n\n\n\n### Syntax\n`RESULT = CEILING(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(KIND)` if `KIND` is present\nand a default-kind `INTEGER` otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_ceiling\n\n    real :: x = 63.29\n\n    real :: y = -63.59\n\n    print *, ceiling(x) ! returns 64\n\n    print *, ceiling(y) ! returns -63\n\nend program test_ceiling\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nFLOOR, NINT\n\n " } \ No newline at end of file diff --git a/src/docs/CHAR.json b/src/docs/CHAR.json index ec836cc1..e857c8ed 100644 --- a/src/docs/CHAR.json +++ b/src/docs/CHAR.json @@ -1,4 +1,4 @@ { "keyword":"CHAR", - "docstr":"`CHAR` — Character conversion function\n\n### Description\n`CHAR(I [, KIND])` returns the character represented by the integer `I`.\n\n\n\n### Syntax\n`RESULT = CHAR(I [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER(1)`\n\n\n### Example\n\n ```\n\n\nprogram test_char\n\n    integer :: i = 74\n\n    character(1) :: c\n\n    c = char(i)\n\n    print *, i, c ! returns 'J'\n\nend program test_char\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `CHAR(I)` | `INTEGER I` | `CHARACTER(LEN=1)` | F77 and later\n\n\n\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, IACHAR, ICHAR\n\n " + "docstr":"`CHAR` — Character conversion function\n\n### Description\n`CHAR(I [, KIND])` returns the character represented by the integer `I`.\n\n\n\n### Syntax\n`RESULT = CHAR(I [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER(1)`\n\n\n### Example\n```\n\n\nprogram test_char\n\n    integer :: i = 74\n\n    character(1) :: c\n\n    c = char(i)\n\n    print *, i, c ! returns 'J'\n\nend program test_char\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `CHAR(I)` | `INTEGER I` | `CHARACTER(LEN=1)` | F77 and later\n\n\n\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, IACHAR, ICHAR\n\n " } \ No newline at end of file diff --git a/src/docs/CHDIR.json b/src/docs/CHDIR.json index 19b8cf75..47e23772 100644 --- a/src/docs/CHDIR.json +++ b/src/docs/CHDIR.json @@ -1,4 +1,4 @@ { "keyword":"CHDIR", - "docstr":"`CHDIR` — Change working directory\n\n### Description\nChange current working directory to a specified path.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = CHDIR(NAME)`
\n\n\n\n\n\n### Arguments\n\n \n of default\nkind and shall specify a valid path within the file system. \n\n | `STATUS` | (Optional) `INTEGER` status flag of the default\nkind. Returns 0 on success, and a system specific and nonzero error code\notherwise.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_chdir\n\n  CHARACTER(len=255) :: path\n\n  CALL getcwd(path)\n\n  WRITE(*,*) TRIM(path)\n\n  CALL chdir(\"/tmp\")\n\n  CALL getcwd(path)\n\n  WRITE(*,*) TRIM(path)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nGETCWD\n" + "docstr":"`CHDIR` — Change working directory\n\n### Description\nChange current working directory to a specified path.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = CHDIR(NAME)`
\n\n\n\n\n\n### Arguments\n\n \n of default\nkind and shall specify a valid path within the file system. \n\n | `STATUS` | (Optional) `INTEGER` status flag of the default\nkind. Returns 0 on success, and a system specific and nonzero error code\notherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_chdir\n\n  CHARACTER(len=255) :: path\n\n  CALL getcwd(path)\n\n  WRITE(*,*) TRIM(path)\n\n  CALL chdir(\"/tmp\")\n\n  CALL getcwd(path)\n\n  WRITE(*,*) TRIM(path)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nGETCWD\n" } \ No newline at end of file diff --git a/src/docs/CMPLX.json b/src/docs/CMPLX.json index 3a0755fa..e90d8684 100644 --- a/src/docs/CMPLX.json +++ b/src/docs/CMPLX.json @@ -1,4 +1,4 @@ { "keyword":"CMPLX", - "docstr":"`CMPLX` — Complex conversion function\n\n### Description\n`CMPLX(X [, Y [, KIND]])` returns a complex number where `X` is converted to\nthe real component. If `Y` is present it is converted to the imaginary\ncomponent. If `Y` is not present then the imaginary component is set to\n0.0. If `X` is complex then `Y` must not be present.\n\n\n\n### Syntax\n`RESULT = CMPLX(X [, Y [, KIND]])`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`. \n\n | `Y` | (Optional; only allowed if `X` is not\n`COMPLEX`.) May be `INTEGER` or `REAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of `COMPLEX` type, with a kind equal to\n`KIND` if it is specified. If `KIND` is not specified, the\nresult is of the default `COMPLEX` kind, regardless of the kinds of\n`X` and `Y`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_cmplx\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    complex :: z\n\n    z = cmplx(i, x)\n\n    print *, z, cmplx(x)\n\nend program test_cmplx\n\n```\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCOMPLEX\n" + "docstr":"`CMPLX` — Complex conversion function\n\n### Description\n`CMPLX(X [, Y [, KIND]])` returns a complex number where `X` is converted to\nthe real component. If `Y` is present it is converted to the imaginary\ncomponent. If `Y` is not present then the imaginary component is set to\n0.0. If `X` is complex then `Y` must not be present.\n\n\n\n### Syntax\n`RESULT = CMPLX(X [, Y [, KIND]])`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`. \n\n | `Y` | (Optional; only allowed if `X` is not\n`COMPLEX`.) May be `INTEGER` or `REAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of `COMPLEX` type, with a kind equal to\n`KIND` if it is specified. If `KIND` is not specified, the\nresult is of the default `COMPLEX` kind, regardless of the kinds of\n`X` and `Y`.\n\n\n\n### Example\n```\n\n\nprogram test_cmplx\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    complex :: z\n\n    z = cmplx(i, x)\n\n    print *, z, cmplx(x)\n\nend program test_cmplx\n\n```\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCOMPLEX\n" } \ No newline at end of file diff --git a/src/docs/COMMAND_ARGUMENT_COUNT.json b/src/docs/COMMAND_ARGUMENT_COUNT.json index acfb9aec..cc154095 100644 --- a/src/docs/COMMAND_ARGUMENT_COUNT.json +++ b/src/docs/COMMAND_ARGUMENT_COUNT.json @@ -1,4 +1,4 @@ { "keyword":"COMMAND_ARGUMENT_COUNT", - "docstr":"`COMMAND_ARGUMENT_COUNT` — Get number of command line arguments\n\n### Description\n`COMMAND_ARGUMENT_COUNT` returns the number of arguments passed on the\ncommand line when the containing program was invoked.\n\n\n\n### Syntax\n`RESULT = COMMAND_ARGUMENT_COUNT()`\n\n\n### Arguments\n\n \n | None\n\n\n\n\n\n\n### Return value\nThe return value is an `INTEGER` of default kind.\n\n\n\n### Example\n\n ```\n\n\nprogram test_command_argument_count\n\n    integer :: count\n\n    count = command_argument_count()\n\n    print *, count\n\nend program test_command_argument_count\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nGET_COMMAND, GET_COMMAND_ARGUMENT\n" + "docstr":"`COMMAND_ARGUMENT_COUNT` — Get number of command line arguments\n\n### Description\n`COMMAND_ARGUMENT_COUNT` returns the number of arguments passed on the\ncommand line when the containing program was invoked.\n\n\n\n### Syntax\n`RESULT = COMMAND_ARGUMENT_COUNT()`\n\n\n### Arguments\n\n \n | None\n\n\n\n\n\n\n### Return value\nThe return value is an `INTEGER` of default kind.\n\n\n\n### Example\n```\n\n\nprogram test_command_argument_count\n\n    integer :: count\n\n    count = command_argument_count()\n\n    print *, count\n\nend program test_command_argument_count\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nGET_COMMAND, GET_COMMAND_ARGUMENT\n" } \ No newline at end of file diff --git a/src/docs/COMPILER_OPTIONS.json b/src/docs/COMPILER_OPTIONS.json index f242a2f3..8c0d0d9a 100644 --- a/src/docs/COMPILER_OPTIONS.json +++ b/src/docs/COMPILER_OPTIONS.json @@ -1,4 +1,4 @@ { "keyword":"COMPILER_OPTIONS", - "docstr":"`COMPILER_OPTIONS` — Options passed to the compiler\n\n### Description\n`COMPILER_OPTIONS` returns a string with the options used for\ncompiling.\n\n\n\n### Syntax\n`STR = COMPILER_OPTIONS()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the compiler flags used to compile the file, which called\nthe `COMPILER_OPTIONS` intrinsic.\n\n\n\n### Example\n\n ```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_VERSION, ISO_FORTRAN_ENV\n" + "docstr":"`COMPILER_OPTIONS` — Options passed to the compiler\n\n### Description\n`COMPILER_OPTIONS` returns a string with the options used for\ncompiling.\n\n\n\n### Syntax\n`STR = COMPILER_OPTIONS()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the compiler flags used to compile the file, which called\nthe `COMPILER_OPTIONS` intrinsic.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_VERSION, ISO_FORTRAN_ENV\n" } \ No newline at end of file diff --git a/src/docs/COMPILER_VERSION.json b/src/docs/COMPILER_VERSION.json index fd56d943..70b1c6fb 100644 --- a/src/docs/COMPILER_VERSION.json +++ b/src/docs/COMPILER_VERSION.json @@ -1,4 +1,4 @@ { "keyword":"COMPILER_VERSION", - "docstr":"`COMPILER_VERSION` — Compiler version string\n\n### Description\n`COMPILER_VERSION` returns a string with the name and the\nversion of the compiler.\n\n\n\n### Syntax\n`STR = COMPILER_VERSION()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the name of the compiler and its version number.\n\n\n\n### Example\n\n ```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_OPTIONS, ISO_FORTRAN_ENV\n" + "docstr":"`COMPILER_VERSION` — Compiler version string\n\n### Description\n`COMPILER_VERSION` returns a string with the name and the\nversion of the compiler.\n\n\n\n### Syntax\n`STR = COMPILER_VERSION()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the name of the compiler and its version number.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_OPTIONS, ISO_FORTRAN_ENV\n" } \ No newline at end of file diff --git a/src/docs/COMPLEX.json b/src/docs/COMPLEX.json index 851f88a2..37c3517d 100644 --- a/src/docs/COMPLEX.json +++ b/src/docs/COMPLEX.json @@ -1,4 +1,4 @@ { "keyword":"COMPLEX", - "docstr":"`COMPLEX` — Complex conversion function\n\n### Description\n`COMPLEX(X, Y)` returns a complex number where `X` is converted\nto the real component and `Y` is converted to the imaginary\ncomponent.\n\n\n\n### Syntax\n`RESULT = COMPLEX(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type may be `INTEGER` or `REAL`.\n\n\n\n\n\n\n### Return value\nIf `X` and `Y` are both of `INTEGER` type, then the return\nvalue is of default `COMPLEX` type.\n\n \nIf `X` and `Y` are of `REAL` type, or one is of `REAL`type and one is of `INTEGER` type, then the return value is of\n`COMPLEX` type with a kind equal to that of the `REAL`argument with the highest precision.\n\n\n\n\n### Example\n\n ```\n\n\nprogram test_complex\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    print *, complex(i, x)\n\nend program test_complex\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCMPLX\n" + "docstr":"`COMPLEX` — Complex conversion function\n\n### Description\n`COMPLEX(X, Y)` returns a complex number where `X` is converted\nto the real component and `Y` is converted to the imaginary\ncomponent.\n\n\n\n### Syntax\n`RESULT = COMPLEX(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type may be `INTEGER` or `REAL`.\n\n\n\n\n\n\n### Return value\nIf `X` and `Y` are both of `INTEGER` type, then the return\nvalue is of default `COMPLEX` type.\n\n \nIf `X` and `Y` are of `REAL` type, or one is of `REAL`type and one is of `INTEGER` type, then the return value is of\n`COMPLEX` type with a kind equal to that of the `REAL`argument with the highest precision.\n\n\n\n\n### Example\n```\n\n\nprogram test_complex\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    print *, complex(i, x)\n\nend program test_complex\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCMPLX\n" } \ No newline at end of file diff --git a/src/docs/CONJG.json b/src/docs/CONJG.json index 83d1d596..331433cc 100644 --- a/src/docs/CONJG.json +++ b/src/docs/CONJG.json @@ -1,4 +1,4 @@ { "keyword":"CONJG", - "docstr":"`CONJG` — Complex conjugate function\n\n### Description\n`CONJG(Z)` returns the conjugate of `Z`. If `Z` is `(x, y)`then the result is `(x, -y)`\n\n\n### Syntax\n`Z = CONJG(Z)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `COMPLEX`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_conjg\n\n    complex :: z = (2.0, 3.0)\n\n    complex(8) :: dz = (2.71_8, -3.14_8)\n\n    z= conjg(z)\n\n    print *, z\n\n    dz = dconjg(dz)\n\n    print *, dz\n\nend program test_conjg\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `CONJG(Z)` | `COMPLEX Z` | `COMPLEX` | GNU extension\n\n | `DCONJG(Z)` | `COMPLEX(8) Z` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`CONJG` — Complex conjugate function\n\n### Description\n`CONJG(Z)` returns the conjugate of `Z`. If `Z` is `(x, y)`then the result is `(x, -y)`\n\n\n### Syntax\n`Z = CONJG(Z)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `COMPLEX`.\n\n\n\n### Example\n```\n\n\nprogram test_conjg\n\n    complex :: z = (2.0, 3.0)\n\n    complex(8) :: dz = (2.71_8, -3.14_8)\n\n    z= conjg(z)\n\n    print *, z\n\n    dz = dconjg(dz)\n\n    print *, dz\n\nend program test_conjg\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `CONJG(Z)` | `COMPLEX Z` | `COMPLEX` | GNU extension\n\n | `DCONJG(Z)` | `COMPLEX(8) Z` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/COS.json b/src/docs/COS.json index f2d13730..3dbda2d6 100644 --- a/src/docs/COS.json +++ b/src/docs/COS.json @@ -1,4 +1,4 @@ { "keyword":"COS", - "docstr":"`COS` — Cosine function\n\n### Description\n`COS(X)` computes the cosine of `X`.\n\n\n\n### Syntax\n`RESULT = COS(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. The real part\nof the result is in radians. If `X` is of the type `REAL`,\nthe return value lies in the range -1 \\leq \\cos (x) \\leq 1.\n\n\n\n### Example\n\n ```\n\n\nprogram test_cos\n\n  real :: x = 0.0\n\n  x = cos(x)\n\nend program test_cos\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `COS(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DCOS(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n | `CCOS(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 77 and later\n\n | `ZCOS(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDCOS(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: ACOS\n\n " + "docstr":"`COS` — Cosine function\n\n### Description\n`COS(X)` computes the cosine of `X`.\n\n\n\n### Syntax\n`RESULT = COS(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. The real part\nof the result is in radians. If `X` is of the type `REAL`,\nthe return value lies in the range -1 \\leq \\cos (x) \\leq 1.\n\n\n\n### Example\n```\n\n\nprogram test_cos\n\n  real :: x = 0.0\n\n  x = cos(x)\n\nend program test_cos\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `COS(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DCOS(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n | `CCOS(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 77 and later\n\n | `ZCOS(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDCOS(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: ACOS\n\n " } \ No newline at end of file diff --git a/src/docs/COSH.json b/src/docs/COSH.json index 8ed5b6f6..74963812 100644 --- a/src/docs/COSH.json +++ b/src/docs/COSH.json @@ -1,4 +1,4 @@ { "keyword":"COSH", - "docstr":"`COSH` — Hyperbolic cosine function\n\n### Description\n`COSH(X)` computes the hyperbolic cosine of `X`.\n\n\n\n### Syntax\n`X = COSH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians. If `X`\nis `REAL`, the return value has a lower bound of one,\n\\cosh (x) \\geq 1.\n\n\n\n### Example\n\n ```\n\n\nprogram test_cosh\n\n  real(8) :: x = 1.0_8\n\n  x = cosh(x)\n\nend program test_cosh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `COSH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DCOSH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: ACOSH\n\n " + "docstr":"`COSH` — Hyperbolic cosine function\n\n### Description\n`COSH(X)` computes the hyperbolic cosine of `X`.\n\n\n\n### Syntax\n`X = COSH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians. If `X`\nis `REAL`, the return value has a lower bound of one,\n\\cosh (x) \\geq 1.\n\n\n\n### Example\n```\n\n\nprogram test_cosh\n\n  real(8) :: x = 1.0_8\n\n  x = cosh(x)\n\nend program test_cosh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `COSH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DCOSH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: ACOSH\n\n " } \ No newline at end of file diff --git a/src/docs/COUNT.json b/src/docs/COUNT.json index 161d216e..b8149613 100644 --- a/src/docs/COUNT.json +++ b/src/docs/COUNT.json @@ -1,4 +1,4 @@ { "keyword":"COUNT", - "docstr":"`COUNT` — Count function\n\n### Description\n\nCounts the number of `.TRUE.` elements in a logical `MASK`,\nor, if the `DIM` argument is supplied, counts the number of\nelements along each row of the array in the `DIM` direction. \nIf the array has zero size, or all of the elements of `MASK` are\n`.FALSE.`, then the result is `0`.\n\n\n\n### Syntax\n`RESULT = COUNT(MASK [, DIM, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `DIM` | (Optional) The type shall be `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is present, the result is an array with a rank one less\nthan the rank of `ARRAY`, and a size corresponding to the shape\nof `ARRAY` with the `DIM` dimension removed.\n\n\n\n### Example\n\n ```\n\n\nprogram test_count\n\n    integer, dimension(2,3) :: a, b\n\n    logical, dimension(2,3) :: mask\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))\n\n    b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print *\n\n    print '(3i3)', b(1,:)\n\n    print '(3i3)', b(2,:)\n\n    print *\n\n    mask = a.ne.b\n\n    print '(3l3)', mask(1,:)\n\n    print '(3l3)', mask(2,:)\n\n    print *\n\n    print '(3i3)', count(mask)\n\n    print *\n\n    print '(3i3)', count(mask, 1)\n\n    print *\n\n    print '(3i3)', count(mask, 2)\n\nend program test_count\n\n```\n\n \n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`COUNT` — Count function\n\n### Description\n\nCounts the number of `.TRUE.` elements in a logical `MASK`,\nor, if the `DIM` argument is supplied, counts the number of\nelements along each row of the array in the `DIM` direction. \nIf the array has zero size, or all of the elements of `MASK` are\n`.FALSE.`, then the result is `0`.\n\n\n\n### Syntax\n`RESULT = COUNT(MASK [, DIM, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `DIM` | (Optional) The type shall be `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is present, the result is an array with a rank one less\nthan the rank of `ARRAY`, and a size corresponding to the shape\nof `ARRAY` with the `DIM` dimension removed.\n\n\n\n### Example\n```\n\n\nprogram test_count\n\n    integer, dimension(2,3) :: a, b\n\n    logical, dimension(2,3) :: mask\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))\n\n    b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print *\n\n    print '(3i3)', b(1,:)\n\n    print '(3i3)', b(2,:)\n\n    print *\n\n    mask = a.ne.b\n\n    print '(3l3)', mask(1,:)\n\n    print '(3l3)', mask(2,:)\n\n    print *\n\n    print '(3i3)', count(mask)\n\n    print *\n\n    print '(3i3)', count(mask, 1)\n\n    print *\n\n    print '(3i3)', count(mask, 2)\n\nend program test_count\n\n```\n\n \n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/CO_BROADCAST.json b/src/docs/CO_BROADCAST.json index b721bbfc..b20e14e7 100644 --- a/src/docs/CO_BROADCAST.json +++ b/src/docs/CO_BROADCAST.json @@ -1,4 +1,4 @@ { "keyword":"CO_BROADCAST", - "docstr":"`CO_BROADCAST` — Copy a value to all images the current set of images\n\n### Description\n`CO_BROADCAST` copies the value of argument `A` on the image with\nimage index `SOURCE_IMAGE` to all images in the current team. `A`\nbecomes defined as if by intrinsic assignment. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | INTENT(INOUT) argument; shall have the same\ndynamic type and type paramters on all images of the current team. If it\nis an array, it shall have the same shape on all images. \n\n | `SOURCE_IMAGE` | a scalar integer expression. \nIt shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram test\n\n  integer :: val(3)\n\n  if (this_image() == 1) then\n\n    val = [1, 5, 3]\n\n  end if\n\n  call co_broadcast (val, source_image=1)\n\n  print *, this_image, \":\", val\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_MIN, CO_SUM, CO_REDUCE\n" + "docstr":"`CO_BROADCAST` — Copy a value to all images the current set of images\n\n### Description\n`CO_BROADCAST` copies the value of argument `A` on the image with\nimage index `SOURCE_IMAGE` to all images in the current team. `A`\nbecomes defined as if by intrinsic assignment. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | INTENT(INOUT) argument; shall have the same\ndynamic type and type paramters on all images of the current team. If it\nis an array, it shall have the same shape on all images. \n\n | `SOURCE_IMAGE` | a scalar integer expression. \nIt shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val(3)\n\n  if (this_image() == 1) then\n\n    val = [1, 5, 3]\n\n  end if\n\n  call co_broadcast (val, source_image=1)\n\n  print *, this_image, \":\", val\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_MIN, CO_SUM, CO_REDUCE\n" } \ No newline at end of file diff --git a/src/docs/CO_MAX.json b/src/docs/CO_MAX.json index 0960e8a9..a779ca71 100644 --- a/src/docs/CO_MAX.json +++ b/src/docs/CO_MAX.json @@ -1,4 +1,4 @@ { "keyword":"CO_MAX", - "docstr":"`CO_MAX` — Maximal value on the current set of images\n\n### Description\n`CO_MAX` determines element-wise the maximal value of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the maximum\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or character variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_max (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Maximal value\", val ! prints num_images()\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MIN, CO_SUM, CO_REDUCE, CO_BROADCAST\n" + "docstr":"`CO_MAX` — Maximal value on the current set of images\n\n### Description\n`CO_MAX` determines element-wise the maximal value of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the maximum\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or character variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_max (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Maximal value\", val ! prints num_images()\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MIN, CO_SUM, CO_REDUCE, CO_BROADCAST\n" } \ No newline at end of file diff --git a/src/docs/CO_MIN.json b/src/docs/CO_MIN.json index e86de071..d2b70359 100644 --- a/src/docs/CO_MIN.json +++ b/src/docs/CO_MIN.json @@ -1,4 +1,4 @@ { "keyword":"CO_MIN", - "docstr":"`CO_MIN` — Minimal value on the current set of images\n\n### Description\n`CO_MIN` determines element-wise the minimal value of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the minimal\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or character variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_min (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Minimal value\", val ! prints 1\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_SUM, CO_REDUCE, CO_BROADCAST\n" + "docstr":"`CO_MIN` — Minimal value on the current set of images\n\n### Description\n`CO_MIN` determines element-wise the minimal value of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the minimal\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or character variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_min (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Minimal value\", val ! prints 1\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_SUM, CO_REDUCE, CO_BROADCAST\n" } \ No newline at end of file diff --git a/src/docs/CO_REDUCE.json b/src/docs/CO_REDUCE.json index 69931e6b..b9fc48bd 100644 --- a/src/docs/CO_REDUCE.json +++ b/src/docs/CO_REDUCE.json @@ -1,4 +1,4 @@ { "keyword":"CO_REDUCE", - "docstr":"`CO_REDUCE` — Reduction of values on the current set of images\n\n### Description\n`CO_REDUCE` determines element-wise the reduction of the value of `A`\non all images of the current team. The pure function passed as `OPERATOR`\nis used to pairwise reduce the values of `A` by passing either the value\nof `A` of different images or the result values of such a reduction as\nargument. If `A` is an array, the deduction is done element wise. If\n`RESULT_IMAGE` is present, the result values are returned in `A` on\nthe specified image only and the value of `A` on the other images become\nundefined. If `RESULT_IMAGE` is not present, the value is returned on all\nimages. If the execution was successful and `STAT` is present, it is\nassigned the value zero. If the execution failed, `STAT` gets assigned\na nonzero value and, if present, `ERRMSG` gets assigned a value describing\nthe occurred error.\n\n\n\n### Syntax\n`CALL CO_REDUCE(A, OPERATOR, [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n argument and shall be\nnonpolymorphic. If it is allocatable, it shall be allocated; if it is a pointer,\nit shall be associated. `A` shall have the same type and type parameters on\nall images of the team; if it is an array, it shall have the same shape on all\nimages. \n\n | `OPERATOR` | pure function with two scalar nonallocatable\narguments, which shall be nonpolymorphic and have the same type and type\nparameters as `A`. The function shall return a nonallocatable scalar of\nthe same type and type parameters as `A`. The function shall be the same on\nall images and with regards to the arguments mathematically commutative and\nassociative. Note that `OPERATOR` may not be an elemental function, unless\nit is an intrisic function. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_reduce (val, result_image=1, operator=myprod)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Product value\", val ! prints num_images() factorial\n\n  end if\n\ncontains\n\n  pure function myprod(a, b)\n\n    integer, value :: a, b\n\n    integer :: myprod\n\n    myprod = a * b\n\n  end function myprod\n\nend program test\n\n```\n\n\n\n### Notes\nWhile the rules permit in principle an intrinsic function, none of the\nintrinsics in the standard fulfill the criteria of having a specific\nfunction, which takes two arguments of the same type and returning that\ntype as result.\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MIN, CO_MAX, CO_SUM, CO_BROADCAST\n" + "docstr":"`CO_REDUCE` — Reduction of values on the current set of images\n\n### Description\n`CO_REDUCE` determines element-wise the reduction of the value of `A`\non all images of the current team. The pure function passed as `OPERATOR`\nis used to pairwise reduce the values of `A` by passing either the value\nof `A` of different images or the result values of such a reduction as\nargument. If `A` is an array, the deduction is done element wise. If\n`RESULT_IMAGE` is present, the result values are returned in `A` on\nthe specified image only and the value of `A` on the other images become\nundefined. If `RESULT_IMAGE` is not present, the value is returned on all\nimages. If the execution was successful and `STAT` is present, it is\nassigned the value zero. If the execution failed, `STAT` gets assigned\na nonzero value and, if present, `ERRMSG` gets assigned a value describing\nthe occurred error.\n\n\n\n### Syntax\n`CALL CO_REDUCE(A, OPERATOR, [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n argument and shall be\nnonpolymorphic. If it is allocatable, it shall be allocated; if it is a pointer,\nit shall be associated. `A` shall have the same type and type parameters on\nall images of the team; if it is an array, it shall have the same shape on all\nimages. \n\n | `OPERATOR` | pure function with two scalar nonallocatable\narguments, which shall be nonpolymorphic and have the same type and type\nparameters as `A`. The function shall return a nonallocatable scalar of\nthe same type and type parameters as `A`. The function shall be the same on\nall images and with regards to the arguments mathematically commutative and\nassociative. Note that `OPERATOR` may not be an elemental function, unless\nit is an intrisic function. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_reduce (val, result_image=1, operator=myprod)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Product value\", val ! prints num_images() factorial\n\n  end if\n\ncontains\n\n  pure function myprod(a, b)\n\n    integer, value :: a, b\n\n    integer :: myprod\n\n    myprod = a * b\n\n  end function myprod\n\nend program test\n\n```\n\n\n\n### Notes\nWhile the rules permit in principle an intrinsic function, none of the\nintrinsics in the standard fulfill the criteria of having a specific\nfunction, which takes two arguments of the same type and returning that\ntype as result.\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MIN, CO_MAX, CO_SUM, CO_BROADCAST\n" } \ No newline at end of file diff --git a/src/docs/CO_SUM.json b/src/docs/CO_SUM.json index 98429d8c..95c5411d 100644 --- a/src/docs/CO_SUM.json +++ b/src/docs/CO_SUM.json @@ -1,4 +1,4 @@ { "keyword":"CO_SUM", - "docstr":"`CO_SUM` — Sum of values on the current set of images\n\n### Description\n`CO_SUM` sums up the values of each element of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the summed-up\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or complex variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_sum (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"The sum is \", val ! prints (n**2 + n)/2, with n = num_images()\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_MIN, CO_REDUCE, CO_BROADCAST\n" + "docstr":"`CO_SUM` — Sum of values on the current set of images\n\n### Description\n`CO_SUM` sums up the values of each element of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the summed-up\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or complex variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_sum (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"The sum is \", val ! prints (n**2 + n)/2, with n = num_images()\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_MIN, CO_REDUCE, CO_BROADCAST\n" } \ No newline at end of file diff --git a/src/docs/CPU_TIME.json b/src/docs/CPU_TIME.json index 52b09d44..7bed8077 100644 --- a/src/docs/CPU_TIME.json +++ b/src/docs/CPU_TIME.json @@ -1,4 +1,4 @@ { "keyword":"CPU_TIME", - "docstr":"`CPU_TIME` — CPU elapsed time in seconds\n\n### Description\nReturns a `REAL` value representing the elapsed CPU time in\nseconds. This is useful for testing segments of code to determine\nexecution time.\n\n \nIf a time source is available, time will be reported with microsecond\nresolution. If no time source is available, `TIME` is set to\n`-1.0`.\n\n \n\nNote that `TIME` may contain a, system dependent, arbitrary offset\nand may not start with `0.0`. For `CPU_TIME`, the absolute\nvalue is meaningless, only differences between subsequent calls to\nthis subroutine, as shown in the example below, should be used.\n\n\n\n\n### Syntax\n`CALL CPU_TIME(TIME)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n\n ```\n\n\nprogram test_cpu_time\n\n    real :: start, finish\n\n    call cpu_time(start)\n\n        ! put code to test here\n\n    call cpu_time(finish)\n\n    print '(\"Time = \",f6.3,\" seconds.\")',finish-start\n\nend program test_cpu_time\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nSYSTEM_CLOCK, DATE_AND_TIME\n" + "docstr":"`CPU_TIME` — CPU elapsed time in seconds\n\n### Description\nReturns a `REAL` value representing the elapsed CPU time in\nseconds. This is useful for testing segments of code to determine\nexecution time.\n\n \nIf a time source is available, time will be reported with microsecond\nresolution. If no time source is available, `TIME` is set to\n`-1.0`.\n\n \n\nNote that `TIME` may contain a, system dependent, arbitrary offset\nand may not start with `0.0`. For `CPU_TIME`, the absolute\nvalue is meaningless, only differences between subsequent calls to\nthis subroutine, as shown in the example below, should be used.\n\n\n\n\n### Syntax\n`CALL CPU_TIME(TIME)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_cpu_time\n\n    real :: start, finish\n\n    call cpu_time(start)\n\n        ! put code to test here\n\n    call cpu_time(finish)\n\n    print '(\"Time = \",f6.3,\" seconds.\")',finish-start\n\nend program test_cpu_time\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nSYSTEM_CLOCK, DATE_AND_TIME\n" } \ No newline at end of file diff --git a/src/docs/CSHIFT.json b/src/docs/CSHIFT.json index a73fb4bc..191fd8ca 100644 --- a/src/docs/CSHIFT.json +++ b/src/docs/CSHIFT.json @@ -1,4 +1,4 @@ { "keyword":"CSHIFT", - "docstr":"`CSHIFT` — Circular shift elements of an array\n\n### Description\n`CSHIFT(ARRAY, SHIFT [, DIM])` performs a circular shift on elements of\n`ARRAY` along the dimension of `DIM`. If `DIM` is omitted it is\ntaken to be `1`. `DIM` is a scalar of type `INTEGER` in the\nrange of 1 \\leq DIM \\leq n) where n is the rank of `ARRAY`. \nIf the rank of `ARRAY` is one, then all elements of `ARRAY` are shifted\nby `SHIFT` places. If rank is greater than one, then all complete rank one\nsections of `ARRAY` along the given dimension are shifted. Elements\nshifted out one end of each rank one section are shifted back in the other end.\n\n\n\n### Syntax\n`RESULT = CSHIFT(ARRAY, SHIFT [, DIM])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `DIM` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nReturns an array of same type and rank as the `ARRAY` argument.\n\n\n\n### Example\n\n ```\n\n\nprogram test_cshift\n\n    integer, dimension(3,3) :: a\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\n    a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)\n\n    print *\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\nend program test_cshift\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`CSHIFT` — Circular shift elements of an array\n\n### Description\n`CSHIFT(ARRAY, SHIFT [, DIM])` performs a circular shift on elements of\n`ARRAY` along the dimension of `DIM`. If `DIM` is omitted it is\ntaken to be `1`. `DIM` is a scalar of type `INTEGER` in the\nrange of 1 \\leq DIM \\leq n) where n is the rank of `ARRAY`. \nIf the rank of `ARRAY` is one, then all elements of `ARRAY` are shifted\nby `SHIFT` places. If rank is greater than one, then all complete rank one\nsections of `ARRAY` along the given dimension are shifted. Elements\nshifted out one end of each rank one section are shifted back in the other end.\n\n\n\n### Syntax\n`RESULT = CSHIFT(ARRAY, SHIFT [, DIM])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `DIM` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nReturns an array of same type and rank as the `ARRAY` argument.\n\n\n\n### Example\n```\n\n\nprogram test_cshift\n\n    integer, dimension(3,3) :: a\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\n    a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)\n\n    print *\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\nend program test_cshift\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/CTIME.json b/src/docs/CTIME.json index a2a2a4fe..2b9b0301 100644 --- a/src/docs/CTIME.json +++ b/src/docs/CTIME.json @@ -1,4 +1,4 @@ { "keyword":"CTIME", - "docstr":"`CTIME` — Convert a time into a string\n\n### Description\n`CTIME` converts a system time value, such as returned by\n`TIME8`, to a string. The output will be of the form ‘Sat\nAug 19 18:13:14 1995’.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n. \n\n | `RESULT = CTIME(TIME)`.\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `RESULT` | The type shall be of type `CHARACTER` and\nof default kind. It is an `INTENT(OUT)` argument. If the length\nof this variable is too short for the time and date string to fit\ncompletely, it will be blank on procedure return.\n\n\n\n\n\n\n### Return value\nThe converted date and time as a string.\n\n\n\n### Example\n\n ```\n\n\nprogram test_ctime\n\n    integer(8) :: i\n\n    character(len=30) :: date\n\n    i = time8()\n\n\n    ! Do something, main part of the program\n\n\n    call ctime(i,date)\n\n    print *, 'Program was started on ', date\n\nend program test_ctime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nDATE_AND_TIME, GMTIME, LTIME, TIME, TIME8\n" + "docstr":"`CTIME` — Convert a time into a string\n\n### Description\n`CTIME` converts a system time value, such as returned by\n`TIME8`, to a string. The output will be of the form ‘Sat\nAug 19 18:13:14 1995’.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n. \n\n | `RESULT = CTIME(TIME)`.\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `RESULT` | The type shall be of type `CHARACTER` and\nof default kind. It is an `INTENT(OUT)` argument. If the length\nof this variable is too short for the time and date string to fit\ncompletely, it will be blank on procedure return.\n\n\n\n\n\n\n### Return value\nThe converted date and time as a string.\n\n\n\n### Example\n```\n\n\nprogram test_ctime\n\n    integer(8) :: i\n\n    character(len=30) :: date\n\n    i = time8()\n\n\n    ! Do something, main part of the program\n\n\n    call ctime(i,date)\n\n    print *, 'Program was started on ', date\n\nend program test_ctime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nDATE_AND_TIME, GMTIME, LTIME, TIME, TIME8\n" } \ No newline at end of file diff --git a/src/docs/C_ASSOCIATED.json b/src/docs/C_ASSOCIATED.json index ade57d99..55655850 100644 --- a/src/docs/C_ASSOCIATED.json +++ b/src/docs/C_ASSOCIATED.json @@ -1,4 +1,4 @@ { "keyword":"C_ASSOCIATED", - "docstr":"`C_ASSOCIATED` — Status of a C pointer\n\n### Description\n`C_ASSOCIATED(c_ptr_1[, c_ptr_2])` determines the status of the C pointer\n`c_ptr_1` or if `c_ptr_1` is associated with the target `c_ptr_2`.\n\n\n\n### Syntax\n`RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])`\n\n\n### Arguments\n\n \n. \n\n | `c_ptr_2` | (Optional) Scalar of the same type as `c_ptr_1`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`; it is `.false.` if either\n`c_ptr_1` is a C NULL pointer or if `c_ptr1` and `c_ptr_2`\npoint to different addresses.\n\n\n\n### Example\n\n ```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_LOC, C_FUNLOC\n" + "docstr":"`C_ASSOCIATED` — Status of a C pointer\n\n### Description\n`C_ASSOCIATED(c_ptr_1[, c_ptr_2])` determines the status of the C pointer\n`c_ptr_1` or if `c_ptr_1` is associated with the target `c_ptr_2`.\n\n\n\n### Syntax\n`RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])`\n\n\n### Arguments\n\n \n. \n\n | `c_ptr_2` | (Optional) Scalar of the same type as `c_ptr_1`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`; it is `.false.` if either\n`c_ptr_1` is a C NULL pointer or if `c_ptr1` and `c_ptr_2`\npoint to different addresses.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_LOC, C_FUNLOC\n" } \ No newline at end of file diff --git a/src/docs/C_FUNLOC.json b/src/docs/C_FUNLOC.json index b5c5b089..08c2b0ce 100644 --- a/src/docs/C_FUNLOC.json +++ b/src/docs/C_FUNLOC.json @@ -1,4 +1,4 @@ { "keyword":"C_FUNLOC", - "docstr":"`C_FUNLOC` — Obtain the C address of a procedure\n\n### Description\n`C_FUNLOC(x)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_FUNLOC(x)`\n\n\n### Arguments\n\n \n | `x` | Interoperable function or pointer to such function.\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_FUNPTR` and contains the C address\nof the argument.\n\n\n\n### Example\n\n ```\n\n\nmodule x\n\n  use iso_c_binding\n\n  implicit none\n\ncontains\n\n  subroutine sub(a) bind(c)\n\n    real(c_float) :: a\n\n    a = sqrt(a)+5.0\n\n  end subroutine sub\n\nend module x\n\nprogram main\n\n  use iso_c_binding\n\n  use x\n\n  implicit none\n\n  interface\n\n    subroutine my_routine(p) bind(c,name='myC_func')\n\n      import :: c_funptr\n\n      type(c_funptr), intent(in) :: p\n\n    end subroutine\n\n  end interface\n\n  call my_routine(c_funloc(sub))\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_LOC, C_F_POINTER, C_F_PROCPOINTER\n" + "docstr":"`C_FUNLOC` — Obtain the C address of a procedure\n\n### Description\n`C_FUNLOC(x)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_FUNLOC(x)`\n\n\n### Arguments\n\n \n | `x` | Interoperable function or pointer to such function.\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_FUNPTR` and contains the C address\nof the argument.\n\n\n\n### Example\n```\n\n\nmodule x\n\n  use iso_c_binding\n\n  implicit none\n\ncontains\n\n  subroutine sub(a) bind(c)\n\n    real(c_float) :: a\n\n    a = sqrt(a)+5.0\n\n  end subroutine sub\n\nend module x\n\nprogram main\n\n  use iso_c_binding\n\n  use x\n\n  implicit none\n\n  interface\n\n    subroutine my_routine(p) bind(c,name='myC_func')\n\n      import :: c_funptr\n\n      type(c_funptr), intent(in) :: p\n\n    end subroutine\n\n  end interface\n\n  call my_routine(c_funloc(sub))\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_LOC, C_F_POINTER, C_F_PROCPOINTER\n" } \ No newline at end of file diff --git a/src/docs/C_F_POINTER.json b/src/docs/C_F_POINTER.json index 5afb5765..53294854 100644 --- a/src/docs/C_F_POINTER.json +++ b/src/docs/C_F_POINTER.json @@ -1,4 +1,4 @@ { "keyword":"C_F_POINTER", - "docstr":"`C_F_POINTER` — Convert C into Fortran pointer\n\n### Description\n`C_F_POINTER(CPTR, FPTR[, SHAPE])` assigns the target of the C pointer\n`CPTR` to the Fortran pointer `FPTR` and specifies its shape.\n\n\n\n### Syntax\n`CALL C_F_POINTER(CPTR, FPTR[, SHAPE])`\n\n\n### Arguments\n\n \n. It is\n`INTENT(IN)`. \n\n | `FPTR` | pointer interoperable with `cptr`. It is\n`INTENT(OUT)`. \n\n | `SHAPE` | (Optional) Rank-one array of type `INTEGER`with `INTENT(IN)`. It shall be present\nif and only if `fptr` is an array. The size\nmust be equal to the rank of `fptr`.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram main\n\n  use iso_c_binding\n\n  implicit none\n\n  interface\n\n    subroutine my_routine(p) bind(c,name='myC_func')\n\n      import :: c_ptr\n\n      type(c_ptr), intent(out) :: p\n\n    end subroutine\n\n  end interface\n\n  type(c_ptr) :: cptr\n\n  real,pointer :: a(:)\n\n  call my_routine(cptr)\n\n  call c_f_pointer(cptr, a, [12])\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nC_LOC, C_F_PROCPOINTER\n" + "docstr":"`C_F_POINTER` — Convert C into Fortran pointer\n\n### Description\n`C_F_POINTER(CPTR, FPTR[, SHAPE])` assigns the target of the C pointer\n`CPTR` to the Fortran pointer `FPTR` and specifies its shape.\n\n\n\n### Syntax\n`CALL C_F_POINTER(CPTR, FPTR[, SHAPE])`\n\n\n### Arguments\n\n \n. It is\n`INTENT(IN)`. \n\n | `FPTR` | pointer interoperable with `cptr`. It is\n`INTENT(OUT)`. \n\n | `SHAPE` | (Optional) Rank-one array of type `INTEGER`with `INTENT(IN)`. It shall be present\nif and only if `fptr` is an array. The size\nmust be equal to the rank of `fptr`.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram main\n\n  use iso_c_binding\n\n  implicit none\n\n  interface\n\n    subroutine my_routine(p) bind(c,name='myC_func')\n\n      import :: c_ptr\n\n      type(c_ptr), intent(out) :: p\n\n    end subroutine\n\n  end interface\n\n  type(c_ptr) :: cptr\n\n  real,pointer :: a(:)\n\n  call my_routine(cptr)\n\n  call c_f_pointer(cptr, a, [12])\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nC_LOC, C_F_PROCPOINTER\n" } \ No newline at end of file diff --git a/src/docs/C_F_PROCPOINTER.json b/src/docs/C_F_PROCPOINTER.json index 1bcb55b9..1e7598c6 100644 --- a/src/docs/C_F_PROCPOINTER.json +++ b/src/docs/C_F_PROCPOINTER.json @@ -1,4 +1,4 @@ { "keyword":"C_F_PROCPOINTER", - "docstr":"`C_F_PROCPOINTER` — Convert C into Fortran procedure pointer\n\n### Description\n`C_F_PROCPOINTER(CPTR, FPTR)` Assign the target of the C function pointer\n`CPTR` to the Fortran procedure pointer `FPTR`.\n\n\n\n### Syntax\n`CALL C_F_PROCPOINTER(cptr, fptr)`\n\n\n### Arguments\n\n \n. It is\n`INTENT(IN)`. \n\n | `FPTR` | procedure pointer interoperable with `cptr`. It is\n`INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram main\n\n  use iso_c_binding\n\n  implicit none\n\n  abstract interface\n\n    function func(a)\n\n      import :: c_float\n\n      real(c_float), intent(in) :: a\n\n      real(c_float) :: func\n\n    end function\n\n  end interface\n\n  interface\n\n     function getIterFunc() bind(c,name=\"getIterFunc\")\n\n       import :: c_funptr\n\n       type(c_funptr) :: getIterFunc\n\n     end function\n\n  end interface\n\n  type(c_funptr) :: cfunptr\n\n  procedure(func), pointer :: myFunc\n\n  cfunptr = getIterFunc()\n\n  call c_f_procpointer(cfunptr, myFunc)\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nC_LOC, C_F_POINTER\n" + "docstr":"`C_F_PROCPOINTER` — Convert C into Fortran procedure pointer\n\n### Description\n`C_F_PROCPOINTER(CPTR, FPTR)` Assign the target of the C function pointer\n`CPTR` to the Fortran procedure pointer `FPTR`.\n\n\n\n### Syntax\n`CALL C_F_PROCPOINTER(cptr, fptr)`\n\n\n### Arguments\n\n \n. It is\n`INTENT(IN)`. \n\n | `FPTR` | procedure pointer interoperable with `cptr`. It is\n`INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram main\n\n  use iso_c_binding\n\n  implicit none\n\n  abstract interface\n\n    function func(a)\n\n      import :: c_float\n\n      real(c_float), intent(in) :: a\n\n      real(c_float) :: func\n\n    end function\n\n  end interface\n\n  interface\n\n     function getIterFunc() bind(c,name=\"getIterFunc\")\n\n       import :: c_funptr\n\n       type(c_funptr) :: getIterFunc\n\n     end function\n\n  end interface\n\n  type(c_funptr) :: cfunptr\n\n  procedure(func), pointer :: myFunc\n\n  cfunptr = getIterFunc()\n\n  call c_f_procpointer(cfunptr, myFunc)\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nC_LOC, C_F_POINTER\n" } \ No newline at end of file diff --git a/src/docs/C_LOC.json b/src/docs/C_LOC.json index e9f392ab..8d7dde17 100644 --- a/src/docs/C_LOC.json +++ b/src/docs/C_LOC.json @@ -1,4 +1,4 @@ { "keyword":"C_LOC", - "docstr":"`C_LOC` — Obtain the C address of an object\n\n### Description\n`C_LOC(X)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Shall have either the POINTER or TARGET attribute. It shall not be a coindexed object. It shall either be a variable with interoperable type and kind type parameters, or be a scalar, nonpolymorphic variable with no length type parameters.\n\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_PTR` and contains the C address\nof the argument.\n\n\n\n### Example\n\n ```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_FUNLOC, C_F_POINTER, C_F_PROCPOINTER\n" + "docstr":"`C_LOC` — Obtain the C address of an object\n\n### Description\n`C_LOC(X)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Shall have either the POINTER or TARGET attribute. It shall not be a coindexed object. It shall either be a variable with interoperable type and kind type parameters, or be a scalar, nonpolymorphic variable with no length type parameters.\n\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_PTR` and contains the C address\nof the argument.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_FUNLOC, C_F_POINTER, C_F_PROCPOINTER\n" } \ No newline at end of file diff --git a/src/docs/C_SIZEOF.json b/src/docs/C_SIZEOF.json index d33fd81e..983c79f7 100644 --- a/src/docs/C_SIZEOF.json +++ b/src/docs/C_SIZEOF.json @@ -1,4 +1,4 @@ { "keyword":"C_SIZEOF", - "docstr":"`C_SIZEOF` — Size in bytes of an expression\n\n### Description\n`C_SIZEOF(X)` calculates the number of bytes of storage the\nexpression `X` occupies.\n\n\n\n### Syntax\n`N = C_SIZEOF(X)`\n\n\n### Arguments\n\n \n | `X` | The argument shall be an interoperable data entity.\n\n\n\n\n\n\n### Return value\nThe return value is of type integer and of the system-dependent kind\n`C_SIZE_T` (from the `ISO_C_BINDING` module). Its value is the\nnumber of bytes occupied by the argument. If the argument has the\n`POINTER` attribute, the number of bytes of the storage area pointed\nto is returned. If the argument is of a derived type with `POINTER`or `ALLOCATABLE` components, the return value does not account for\nthe sizes of the data pointed to by these components.\n\n\n\n### Example\n\n ```\n\n\nuse iso_c_binding\n\ninteger(c_int) :: i\n\nreal(c_float) :: r, s(5)\n\nprint *, (c_sizeof(s)/c_sizeof(r) == 5)\n\nend\n\n```\n\n \nThe example will print `.TRUE.` unless you are using a platform\nwhere default `REAL` variables are unusually padded.\n\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_C_BINDING`\n\n\n### See also\nSIZEOF, STORAGE_SIZE\n" + "docstr":"`C_SIZEOF` — Size in bytes of an expression\n\n### Description\n`C_SIZEOF(X)` calculates the number of bytes of storage the\nexpression `X` occupies.\n\n\n\n### Syntax\n`N = C_SIZEOF(X)`\n\n\n### Arguments\n\n \n | `X` | The argument shall be an interoperable data entity.\n\n\n\n\n\n\n### Return value\nThe return value is of type integer and of the system-dependent kind\n`C_SIZE_T` (from the `ISO_C_BINDING` module). Its value is the\nnumber of bytes occupied by the argument. If the argument has the\n`POINTER` attribute, the number of bytes of the storage area pointed\nto is returned. If the argument is of a derived type with `POINTER`or `ALLOCATABLE` components, the return value does not account for\nthe sizes of the data pointed to by these components.\n\n\n\n### Example\n```\n\n\nuse iso_c_binding\n\ninteger(c_int) :: i\n\nreal(c_float) :: r, s(5)\n\nprint *, (c_sizeof(s)/c_sizeof(r) == 5)\n\nend\n\n```\n\n \nThe example will print `.TRUE.` unless you are using a platform\nwhere default `REAL` variables are unusually padded.\n\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_C_BINDING`\n\n\n### See also\nSIZEOF, STORAGE_SIZE\n" } \ No newline at end of file diff --git a/src/docs/DATE_AND_TIME.json b/src/docs/DATE_AND_TIME.json index 05922a5d..83da502f 100644 --- a/src/docs/DATE_AND_TIME.json +++ b/src/docs/DATE_AND_TIME.json @@ -1,4 +1,4 @@ { "keyword":"DATE_AND_TIME", - "docstr":"`DATE_AND_TIME` — Date and time subroutine\n\n### Description\n`DATE_AND_TIME(DATE, TIME, ZONE, VALUES)` gets the corresponding date and\ntime information from the real-time system clock. `DATE` is\n`INTENT(OUT)` and has form ccyymmdd. `TIME` is `INTENT(OUT)` and\nhas form hhmmss.sss. `ZONE` is `INTENT(OUT)` and has form (+-)hhmm,\nrepresenting the difference with respect to Coordinated Universal Time (UTC). \nUnavailable time and date parameters return blanks.\n\n \n`VALUES` is `INTENT(OUT)` and provides the following:\n\n \n\n: | The year\n\n | `VALUE(2)`: | The month\n\n | `VALUE(3)`: | The day of the month\n\n | `VALUE(4)`: | Time difference with UTC in minutes\n\n | `VALUE(5)`: | The hour of the day\n\n | `VALUE(6)`: | The minutes of the hour\n\n | `VALUE(7)`: | The seconds of the minute\n\n | `VALUE(8)`: | The milliseconds of the second\n\n\n\n\n\n\n### Syntax\n`CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])`\n\n\n### Arguments\n\n \n\nor larger, and of default kind. \n\n | `TIME` | (Optional) The type shall be `CHARACTER(LEN=10)`or larger, and of default kind. \n\n | `ZONE` | (Optional) The type shall be `CHARACTER(LEN=5)`or larger, and of default kind. \n\n | `VALUES` | (Optional) The type shall be `INTEGER(8)`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n\n ```\n\n\nprogram test_time_and_date\n\n    character(8) :: date\n\n    character(10) :: time\n\n    character(5) :: zone\n\n    integer,dimension(8) :: values\n\n    ! using keyword arguments\n\n    call date_and_time(date,time,zone,values)\n\n    call date_and_time(DATE=date,ZONE=zone)\n\n    call date_and_time(TIME=time)\n\n    call date_and_time(VALUES=values)\n\n    print '(a,2x,a,2x,a)', date, time, zone\n\n    print '(8i5)', values\n\nend program test_time_and_date\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nCPU_TIME, SYSTEM_CLOCK\n" + "docstr":"`DATE_AND_TIME` — Date and time subroutine\n\n### Description\n`DATE_AND_TIME(DATE, TIME, ZONE, VALUES)` gets the corresponding date and\ntime information from the real-time system clock. `DATE` is\n`INTENT(OUT)` and has form ccyymmdd. `TIME` is `INTENT(OUT)` and\nhas form hhmmss.sss. `ZONE` is `INTENT(OUT)` and has form (+-)hhmm,\nrepresenting the difference with respect to Coordinated Universal Time (UTC). \nUnavailable time and date parameters return blanks.\n\n \n`VALUES` is `INTENT(OUT)` and provides the following:\n\n \n\n: | The year\n\n | `VALUE(2)`: | The month\n\n | `VALUE(3)`: | The day of the month\n\n | `VALUE(4)`: | Time difference with UTC in minutes\n\n | `VALUE(5)`: | The hour of the day\n\n | `VALUE(6)`: | The minutes of the hour\n\n | `VALUE(7)`: | The seconds of the minute\n\n | `VALUE(8)`: | The milliseconds of the second\n\n\n\n\n\n\n### Syntax\n`CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])`\n\n\n### Arguments\n\n \n\nor larger, and of default kind. \n\n | `TIME` | (Optional) The type shall be `CHARACTER(LEN=10)`or larger, and of default kind. \n\n | `ZONE` | (Optional) The type shall be `CHARACTER(LEN=5)`or larger, and of default kind. \n\n | `VALUES` | (Optional) The type shall be `INTEGER(8)`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_time_and_date\n\n    character(8) :: date\n\n    character(10) :: time\n\n    character(5) :: zone\n\n    integer,dimension(8) :: values\n\n    ! using keyword arguments\n\n    call date_and_time(date,time,zone,values)\n\n    call date_and_time(DATE=date,ZONE=zone)\n\n    call date_and_time(TIME=time)\n\n    call date_and_time(VALUES=values)\n\n    print '(a,2x,a,2x,a)', date, time, zone\n\n    print '(8i5)', values\n\nend program test_time_and_date\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nCPU_TIME, SYSTEM_CLOCK\n" } \ No newline at end of file diff --git a/src/docs/DBLE.json b/src/docs/DBLE.json index 3afa2cd8..9c8b88e4 100644 --- a/src/docs/DBLE.json +++ b/src/docs/DBLE.json @@ -1,4 +1,4 @@ { "keyword":"DBLE", - "docstr":"`DBLE` — Double conversion function\n\n### Description\n`DBLE(A)` Converts `A` to double precision real type.\n\n\n\n### Syntax\n`RESULT = DBLE(A)`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type double precision real.\n\n\n\n### Example\n\n ```\n\n\nprogram test_dble\n\n    real :: x = 2.18\n\n    integer :: i = 5\n\n    complex :: z = (2.3,1.14)\n\n    print *, dble(x), dble(i), dble(z)\n\nend program test_dble\n\n```\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nREAL\n" + "docstr":"`DBLE` — Double conversion function\n\n### Description\n`DBLE(A)` Converts `A` to double precision real type.\n\n\n\n### Syntax\n`RESULT = DBLE(A)`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type double precision real.\n\n\n\n### Example\n```\n\n\nprogram test_dble\n\n    real :: x = 2.18\n\n    integer :: i = 5\n\n    complex :: z = (2.3,1.14)\n\n    print *, dble(x), dble(i), dble(z)\n\nend program test_dble\n\n```\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nREAL\n" } \ No newline at end of file diff --git a/src/docs/DCMPLX.json b/src/docs/DCMPLX.json index 5b0375de..e7a9ab37 100644 --- a/src/docs/DCMPLX.json +++ b/src/docs/DCMPLX.json @@ -1,4 +1,4 @@ { "keyword":"DCMPLX", - "docstr":"`DCMPLX` — Double complex conversion function\n\n### Description\n`DCMPLX(X [,Y])` returns a double complex number where `X` is\nconverted to the real component. If `Y` is present it is converted to the\nimaginary component. If `Y` is not present then the imaginary component is\nset to 0.0. If `X` is complex then `Y` must not be present.\n\n\n\n### Syntax\n`RESULT = DCMPLX(X [, Y])`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`. \n\n | `Y` | (Optional if `X` is not `COMPLEX`.) May be\n`INTEGER` or `REAL`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `COMPLEX(8)`\n\n\n### Example\n\n ```\n\n\nprogram test_dcmplx\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    complex :: z\n\n    z = cmplx(i, x)\n\n    print *, dcmplx(i)\n\n    print *, dcmplx(x)\n\n    print *, dcmplx(z)\n\n    print *, dcmplx(x,i)\n\nend program test_dcmplx\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`DCMPLX` — Double complex conversion function\n\n### Description\n`DCMPLX(X [,Y])` returns a double complex number where `X` is\nconverted to the real component. If `Y` is present it is converted to the\nimaginary component. If `Y` is not present then the imaginary component is\nset to 0.0. If `X` is complex then `Y` must not be present.\n\n\n\n### Syntax\n`RESULT = DCMPLX(X [, Y])`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`. \n\n | `Y` | (Optional if `X` is not `COMPLEX`.) May be\n`INTEGER` or `REAL`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `COMPLEX(8)`\n\n\n### Example\n```\n\n\nprogram test_dcmplx\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    complex :: z\n\n    z = cmplx(i, x)\n\n    print *, dcmplx(i)\n\n    print *, dcmplx(x)\n\n    print *, dcmplx(z)\n\n    print *, dcmplx(x,i)\n\nend program test_dcmplx\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/DIGITS.json b/src/docs/DIGITS.json index 92a13bf3..58aa8220 100644 --- a/src/docs/DIGITS.json +++ b/src/docs/DIGITS.json @@ -1,4 +1,4 @@ { "keyword":"DIGITS", - "docstr":"`DIGITS` — Significant binary digits function\n\n### Description\n`DIGITS(X)` returns the number of significant binary digits of the internal\nmodel representation of `X`. For example, on a system using a 32-bit\nfloating point representation, a default real number would likely return 24.\n\n\n\n### Syntax\n`RESULT = DIGITS(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_digits\n\n    integer :: i = 12345\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, digits(i)\n\n    print *, digits(x)\n\n    print *, digits(y)\n\nend program test_digits\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`DIGITS` — Significant binary digits function\n\n### Description\n`DIGITS(X)` returns the number of significant binary digits of the internal\nmodel representation of `X`. For example, on a system using a 32-bit\nfloating point representation, a default real number would likely return 24.\n\n\n\n### Syntax\n`RESULT = DIGITS(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`.\n\n\n\n### Example\n```\n\n\nprogram test_digits\n\n    integer :: i = 12345\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, digits(i)\n\n    print *, digits(x)\n\n    print *, digits(y)\n\nend program test_digits\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/DIM.json b/src/docs/DIM.json index 0e9949fe..8e4926c4 100644 --- a/src/docs/DIM.json +++ b/src/docs/DIM.json @@ -1,4 +1,4 @@ { "keyword":"DIM", - "docstr":"`DIM` — Positive difference\n\n### Description\n`DIM(X,Y)` returns the difference `X-Y` if the result is positive;\notherwise returns zero.\n\n\n\n### Syntax\n`RESULT = DIM(X, Y)`\n\n\n### Arguments\n\n \n\n\n | `Y` | The type shall be the same type and kind as `X`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` or `REAL`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_dim\n\n    integer :: i\n\n    real(8) :: x\n\n    i = dim(4, 15)\n\n    x = dim(4.345_8, 2.111_8)\n\n    print *, i\n\n    print *, x\n\nend program test_dim\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DIM(X,Y)` | `REAL(4) X, Y` | `REAL(4)` | Fortran 77 and later\n\n | `IDIM(X,Y)` | `INTEGER(4) X, Y` | `INTEGER(4)` | Fortran 77 and later\n\n | `DDIM(X,Y)` | `REAL(8) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`DIM` — Positive difference\n\n### Description\n`DIM(X,Y)` returns the difference `X-Y` if the result is positive;\notherwise returns zero.\n\n\n\n### Syntax\n`RESULT = DIM(X, Y)`\n\n\n### Arguments\n\n \n\n\n | `Y` | The type shall be the same type and kind as `X`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` or `REAL`.\n\n\n\n### Example\n```\n\n\nprogram test_dim\n\n    integer :: i\n\n    real(8) :: x\n\n    i = dim(4, 15)\n\n    x = dim(4.345_8, 2.111_8)\n\n    print *, i\n\n    print *, x\n\nend program test_dim\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DIM(X,Y)` | `REAL(4) X, Y` | `REAL(4)` | Fortran 77 and later\n\n | `IDIM(X,Y)` | `INTEGER(4) X, Y` | `INTEGER(4)` | Fortran 77 and later\n\n | `DDIM(X,Y)` | `REAL(8) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/DOT_PRODUCT.json b/src/docs/DOT_PRODUCT.json index 1b626a7e..cbc4c72d 100644 --- a/src/docs/DOT_PRODUCT.json +++ b/src/docs/DOT_PRODUCT.json @@ -1,4 +1,4 @@ { "keyword":"DOT_PRODUCT", - "docstr":"`DOT_PRODUCT` — Dot product function\n\n### Description\n`DOT_PRODUCT(VECTOR_A, VECTOR_B)` computes the dot product multiplication\nof two vectors `VECTOR_A` and `VECTOR_B`. The two vectors may be\neither numeric or logical and must be arrays of rank one and of equal size. If\nthe vectors are `INTEGER` or `REAL`, the result is\n`SUM(VECTOR_A*VECTOR_B)`. If the vectors are `COMPLEX`, the result\nis `SUM(CONJG(VECTOR_A)*VECTOR_B)`. If the vectors are `LOGICAL`,\nthe result is `ANY(VECTOR_A .AND. VECTOR_B)`.\n\n\n\n### Syntax\n`RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)`\n\n\n### Arguments\n\n \n, rank 1. \n\n | `VECTOR_B` | The type shall be numeric if `VECTOR_A` is of numeric type or `LOGICAL` if `VECTOR_A` is of type `LOGICAL`. `VECTOR_B` shall be a rank-one array.\n\n\n\n\n\n\n### Return value\nIf the arguments are numeric, the return value is a scalar of numeric type,\n`INTEGER`, `REAL`, or `COMPLEX`. If the arguments are\n`LOGICAL`, the return value is `.TRUE.` or `.FALSE.`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_dot_prod\n\n    integer, dimension(3) :: a, b\n\n    a = (/ 1, 2, 3 /)\n\n    b = (/ 4, 5, 6 /)\n\n    print '(3i3)', a\n\n    print *\n\n    print '(3i3)', b\n\n    print *\n\n    print *, dot_product(a,b)\n\nend program test_dot_prod\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`DOT_PRODUCT` — Dot product function\n\n### Description\n`DOT_PRODUCT(VECTOR_A, VECTOR_B)` computes the dot product multiplication\nof two vectors `VECTOR_A` and `VECTOR_B`. The two vectors may be\neither numeric or logical and must be arrays of rank one and of equal size. If\nthe vectors are `INTEGER` or `REAL`, the result is\n`SUM(VECTOR_A*VECTOR_B)`. If the vectors are `COMPLEX`, the result\nis `SUM(CONJG(VECTOR_A)*VECTOR_B)`. If the vectors are `LOGICAL`,\nthe result is `ANY(VECTOR_A .AND. VECTOR_B)`.\n\n\n\n### Syntax\n`RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)`\n\n\n### Arguments\n\n \n, rank 1. \n\n | `VECTOR_B` | The type shall be numeric if `VECTOR_A` is of numeric type or `LOGICAL` if `VECTOR_A` is of type `LOGICAL`. `VECTOR_B` shall be a rank-one array.\n\n\n\n\n\n\n### Return value\nIf the arguments are numeric, the return value is a scalar of numeric type,\n`INTEGER`, `REAL`, or `COMPLEX`. If the arguments are\n`LOGICAL`, the return value is `.TRUE.` or `.FALSE.`.\n\n\n\n### Example\n```\n\n\nprogram test_dot_prod\n\n    integer, dimension(3) :: a, b\n\n    a = (/ 1, 2, 3 /)\n\n    b = (/ 4, 5, 6 /)\n\n    print '(3i3)', a\n\n    print *\n\n    print '(3i3)', b\n\n    print *\n\n    print *, dot_product(a,b)\n\nend program test_dot_prod\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/DPROD.json b/src/docs/DPROD.json index 4ac90c32..b2cb7db3 100644 --- a/src/docs/DPROD.json +++ b/src/docs/DPROD.json @@ -1,4 +1,4 @@ { "keyword":"DPROD", - "docstr":"`DPROD` — Double product function\n\n### Description\n`DPROD(X,Y)` returns the product `X*Y`.\n\n\n\n### Syntax\n`RESULT = DPROD(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type shall be `REAL`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL(8)`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_dprod\n\n    real :: x = 5.2\n\n    real :: y = 2.3\n\n    real(8) :: d\n\n    d = dprod(x,y)\n\n    print *, d\n\nend program test_dprod\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DPROD(X,Y)` | `REAL(4) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`DPROD` — Double product function\n\n### Description\n`DPROD(X,Y)` returns the product `X*Y`.\n\n\n\n### Syntax\n`RESULT = DPROD(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type shall be `REAL`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL(8)`.\n\n\n\n### Example\n```\n\n\nprogram test_dprod\n\n    real :: x = 5.2\n\n    real :: y = 2.3\n\n    real(8) :: d\n\n    d = dprod(x,y)\n\n    print *, d\n\nend program test_dprod\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DPROD(X,Y)` | `REAL(4) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/DREAL.json b/src/docs/DREAL.json index c8b2766d..3c3b7595 100644 --- a/src/docs/DREAL.json +++ b/src/docs/DREAL.json @@ -1,4 +1,4 @@ { "keyword":"DREAL", - "docstr":"`DREAL` — Double real part function\n\n### Description\n`DREAL(Z)` returns the real part of complex variable `Z`.\n\n\n\n### Syntax\n`RESULT = DREAL(A)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL(8)`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_dreal\n\n    complex(8) :: z = (1.3_8,7.2_8)\n\n    print *, dreal(z)\n\nend program test_dreal\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nAIMAG\n\n " + "docstr":"`DREAL` — Double real part function\n\n### Description\n`DREAL(Z)` returns the real part of complex variable `Z`.\n\n\n\n### Syntax\n`RESULT = DREAL(A)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL(8)`.\n\n\n\n### Example\n```\n\n\nprogram test_dreal\n\n    complex(8) :: z = (1.3_8,7.2_8)\n\n    print *, dreal(z)\n\nend program test_dreal\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nAIMAG\n\n " } \ No newline at end of file diff --git a/src/docs/DTIME.json b/src/docs/DTIME.json index 032085c5..7f276567 100644 --- a/src/docs/DTIME.json +++ b/src/docs/DTIME.json @@ -1,4 +1,4 @@ { "keyword":"DTIME", - "docstr":"`DTIME` — Execution time subroutine (or function)\n\n### Description\n`DTIME(VALUES, TIME)` initially returns the number of seconds of runtime\nsince the start of the process's execution in `TIME`. `VALUES`\nreturns the user and system components of this time in `VALUES(1)` and\n`VALUES(2)` respectively. `TIME` is equal to VALUES(1) +\nVALUES(2).\n\n \nSubsequent invocations of `DTIME` return values accumulated since the\nprevious invocation.\n\n \n\nOn some systems, the underlying timings are represented using types with\nsufficiently small limits that overflows (wrap around) are possible, such as\n32-bit types. Therefore, the values returned by this intrinsic might be, or\nbecome, negative, or numerically less than previous values, during a single\nrun of the compiled program.\n\n \n\nPlease note, that this implementation is thread safe if used within OpenMP\ndirectives, i.e., its state will be consistent while called from multiple\nthreads. However, if `DTIME` is called from multiple threads, the result\nis still the time since the last invocation. This may not give the intended\nresults. If possible, use `CPU_TIME` instead.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\n`VALUES` and `TIME` are `INTENT(OUT)` and provide the following:\n\n \n\n: | User time in seconds. \n\n | `VALUES(2)`: | System time in seconds. \n\n | `TIME`: | Run time since start in seconds.\n\n\n\n\n\n\n### Syntax\n\n \n. \n\n | `TIME = DTIME(VALUES)`, (not recommended).\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `TIME` | The type shall be `REAL(4)`.\n\n\n\n\n\n\n### Return value\nElapsed time in seconds since the last invocation or since the start of program\nexecution if not called before.\n\n\n\n### Example\n\n ```\n\n\nprogram test_dtime\n\n    integer(8) :: i, j\n\n    real, dimension(2) :: tarray\n\n    real :: result\n\n    call dtime(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\n    do i=1,100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call dtime(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\nend program test_dtime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " + "docstr":"`DTIME` — Execution time subroutine (or function)\n\n### Description\n`DTIME(VALUES, TIME)` initially returns the number of seconds of runtime\nsince the start of the process's execution in `TIME`. `VALUES`\nreturns the user and system components of this time in `VALUES(1)` and\n`VALUES(2)` respectively. `TIME` is equal to VALUES(1) +\nVALUES(2).\n\n \nSubsequent invocations of `DTIME` return values accumulated since the\nprevious invocation.\n\n \n\nOn some systems, the underlying timings are represented using types with\nsufficiently small limits that overflows (wrap around) are possible, such as\n32-bit types. Therefore, the values returned by this intrinsic might be, or\nbecome, negative, or numerically less than previous values, during a single\nrun of the compiled program.\n\n \n\nPlease note, that this implementation is thread safe if used within OpenMP\ndirectives, i.e., its state will be consistent while called from multiple\nthreads. However, if `DTIME` is called from multiple threads, the result\nis still the time since the last invocation. This may not give the intended\nresults. If possible, use `CPU_TIME` instead.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\n`VALUES` and `TIME` are `INTENT(OUT)` and provide the following:\n\n \n\n: | User time in seconds. \n\n | `VALUES(2)`: | System time in seconds. \n\n | `TIME`: | Run time since start in seconds.\n\n\n\n\n\n\n### Syntax\n\n \n. \n\n | `TIME = DTIME(VALUES)`, (not recommended).\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `TIME` | The type shall be `REAL(4)`.\n\n\n\n\n\n\n### Return value\nElapsed time in seconds since the last invocation or since the start of program\nexecution if not called before.\n\n\n\n### Example\n```\n\n\nprogram test_dtime\n\n    integer(8) :: i, j\n\n    real, dimension(2) :: tarray\n\n    real :: result\n\n    call dtime(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\n    do i=1,100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call dtime(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\nend program test_dtime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " } \ No newline at end of file diff --git a/src/docs/EOSHIFT.json b/src/docs/EOSHIFT.json index 148dbf54..9dbfaeb0 100644 --- a/src/docs/EOSHIFT.json +++ b/src/docs/EOSHIFT.json @@ -1,4 +1,4 @@ { "keyword":"EOSHIFT", - "docstr":"`EOSHIFT` — End-off shift elements of an array\n\n### Description\n`EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])` performs an end-off shift on\nelements of `ARRAY` along the dimension of `DIM`. If `DIM` is\nomitted it is taken to be `1`. `DIM` is a scalar of type\n`INTEGER` in the range of 1 \\leq DIM \\leq n) where n is the\nrank of `ARRAY`. If the rank of `ARRAY` is one, then all elements of\n`ARRAY` are shifted by `SHIFT` places. If rank is greater than one,\nthen all complete rank one sections of `ARRAY` along the given dimension are\nshifted. Elements shifted out one end of each rank one section are dropped. If\n`BOUNDARY` is present then the corresponding value of from `BOUNDARY`\nis copied back in the other end. If `BOUNDARY` is not present then the\nfollowing are copied in depending on the type of `ARRAY`.\n\n \n\n\n | Numeric | 0 of the type and kind of `ARRAY`. \n\n | Logical | `.FALSE.`. \n\n | Character(`len`) | `len` blanks.\n\n\n\n\n\n\n### Syntax\n`RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])`\n\n\n### Arguments\n\n \n | `ARRAY` | May be any type, not scalar. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `BOUNDARY` | Same type as `ARRAY`. \n\n | `DIM` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nReturns an array of same type and rank as the `ARRAY` argument.\n\n\n\n### Example\n\n ```\n\n\nprogram test_eoshift\n\n    integer, dimension(3,3) :: a\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\n    a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)\n\n    print *\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\nend program test_eoshift\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`EOSHIFT` — End-off shift elements of an array\n\n### Description\n`EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])` performs an end-off shift on\nelements of `ARRAY` along the dimension of `DIM`. If `DIM` is\nomitted it is taken to be `1`. `DIM` is a scalar of type\n`INTEGER` in the range of 1 \\leq DIM \\leq n) where n is the\nrank of `ARRAY`. If the rank of `ARRAY` is one, then all elements of\n`ARRAY` are shifted by `SHIFT` places. If rank is greater than one,\nthen all complete rank one sections of `ARRAY` along the given dimension are\nshifted. Elements shifted out one end of each rank one section are dropped. If\n`BOUNDARY` is present then the corresponding value of from `BOUNDARY`\nis copied back in the other end. If `BOUNDARY` is not present then the\nfollowing are copied in depending on the type of `ARRAY`.\n\n \n\n\n | Numeric | 0 of the type and kind of `ARRAY`. \n\n | Logical | `.FALSE.`. \n\n | Character(`len`) | `len` blanks.\n\n\n\n\n\n\n### Syntax\n`RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])`\n\n\n### Arguments\n\n \n | `ARRAY` | May be any type, not scalar. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `BOUNDARY` | Same type as `ARRAY`. \n\n | `DIM` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nReturns an array of same type and rank as the `ARRAY` argument.\n\n\n\n### Example\n```\n\n\nprogram test_eoshift\n\n    integer, dimension(3,3) :: a\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\n    a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)\n\n    print *\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\nend program test_eoshift\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/EPSILON.json b/src/docs/EPSILON.json index 9413c593..38da9ba8 100644 --- a/src/docs/EPSILON.json +++ b/src/docs/EPSILON.json @@ -1,4 +1,4 @@ { "keyword":"EPSILON", - "docstr":"`EPSILON` — Epsilon function\n\n### Description\n`EPSILON(X)` returns the smallest number `E` of the same kind\nas `X` such that 1 + E > 1.\n\n\n\n### Syntax\n`RESULT = EPSILON(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of same type as the argument.\n\n\n\n### Example\n\n ```\n\n\nprogram test_epsilon\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, EPSILON(x)\n\n    print *, EPSILON(y)\n\nend program test_epsilon\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`EPSILON` — Epsilon function\n\n### Description\n`EPSILON(X)` returns the smallest number `E` of the same kind\nas `X` such that 1 + E > 1.\n\n\n\n### Syntax\n`RESULT = EPSILON(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of same type as the argument.\n\n\n\n### Example\n```\n\n\nprogram test_epsilon\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, EPSILON(x)\n\n    print *, EPSILON(y)\n\nend program test_epsilon\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ERF.json b/src/docs/ERF.json index 9c5853a3..84b48614 100644 --- a/src/docs/ERF.json +++ b/src/docs/ERF.json @@ -1,4 +1,4 @@ { "keyword":"ERF", - "docstr":"`ERF` — Error function\n\n### Description\n`ERF(X)` computes the error function of `X`.\n\n\n\n### Syntax\n`RESULT = ERF(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`, of the same kind as\n`X` and lies in the range -1 \\leq erf (x) \\leq 1 .\n\n\n\n### Example\n\n ```\n\n\nprogram test_erf\n\n  real(8) :: x = 0.17_8\n\n  x = erf(x)\n\nend program test_erf\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DERF(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`ERF` — Error function\n\n### Description\n`ERF(X)` computes the error function of `X`.\n\n\n\n### Syntax\n`RESULT = ERF(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`, of the same kind as\n`X` and lies in the range -1 \\leq erf (x) \\leq 1 .\n\n\n\n### Example\n```\n\n\nprogram test_erf\n\n  real(8) :: x = 0.17_8\n\n  x = erf(x)\n\nend program test_erf\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DERF(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ERFC.json b/src/docs/ERFC.json index cdd67633..60fc7327 100644 --- a/src/docs/ERFC.json +++ b/src/docs/ERFC.json @@ -1,4 +1,4 @@ { "keyword":"ERFC", - "docstr":"`ERFC` — Error function\n\n### Description\n`ERFC(X)` computes the complementary error function of `X`.\n\n\n\n### Syntax\n`RESULT = ERFC(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and of the same kind as `X`. \nIt lies in the range 0 \\leq erfc (x) \\leq 2 .\n\n\n\n### Example\n\n ```\n\n\nprogram test_erfc\n\n  real(8) :: x = 0.17_8\n\n  x = erfc(x)\n\nend program test_erfc\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DERFC(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`ERFC` — Error function\n\n### Description\n`ERFC(X)` computes the complementary error function of `X`.\n\n\n\n### Syntax\n`RESULT = ERFC(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and of the same kind as `X`. \nIt lies in the range 0 \\leq erfc (x) \\leq 2 .\n\n\n\n### Example\n```\n\n\nprogram test_erfc\n\n  real(8) :: x = 0.17_8\n\n  x = erfc(x)\n\nend program test_erfc\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DERFC(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ERFC_SCALED.json b/src/docs/ERFC_SCALED.json index 512e692f..6e60d878 100644 --- a/src/docs/ERFC_SCALED.json +++ b/src/docs/ERFC_SCALED.json @@ -1,4 +1,4 @@ { "keyword":"ERFC_SCALED", - "docstr":"`ERFC_SCALED` — Error function\n\n### Description\n`ERFC_SCALED(X)` computes the exponentially-scaled complementary\nerror function of `X`.\n\n\n\n### Syntax\n`RESULT = ERFC_SCALED(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and of the same kind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_erfc_scaled\n\n  real(8) :: x = 0.17_8\n\n  x = erfc_scaled(x)\n\nend program test_erfc_scaled\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`ERFC_SCALED` — Error function\n\n### Description\n`ERFC_SCALED(X)` computes the exponentially-scaled complementary\nerror function of `X`.\n\n\n\n### Syntax\n`RESULT = ERFC_SCALED(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and of the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_erfc_scaled\n\n  real(8) :: x = 0.17_8\n\n  x = erfc_scaled(x)\n\nend program test_erfc_scaled\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ETIME.json b/src/docs/ETIME.json index d6e78dda..8b598a07 100644 --- a/src/docs/ETIME.json +++ b/src/docs/ETIME.json @@ -1,4 +1,4 @@ { "keyword":"ETIME", - "docstr":"`ETIME` — Execution time subroutine (or function)\n\n### Description\n`ETIME(VALUES, TIME)` returns the number of seconds of runtime\nsince the start of the process's execution in `TIME`. `VALUES`\nreturns the user and system components of this time in `VALUES(1)` and\n`VALUES(2)` respectively. `TIME` is equal to `VALUES(1) + VALUES(2)`.\n\n \nOn some systems, the underlying timings are represented using types with\nsufficiently small limits that overflows (wrap around) are possible, such as\n32-bit types. Therefore, the values returned by this intrinsic might be, or\nbecome, negative, or numerically less than previous values, during a single\nrun of the compiled program.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\n`VALUES` and `TIME` are `INTENT(OUT)` and provide the following:\n\n \n\n: | User time in seconds. \n\n | `VALUES(2)`: | System time in seconds. \n\n | `TIME`: | Run time since start in seconds.\n\n\n\n\n\n\n### Syntax\n\n \n. \n\n | `TIME = ETIME(VALUES)`, (not recommended).\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `TIME` | The type shall be `REAL(4)`.\n\n\n\n\n\n\n### Return value\nElapsed time in seconds since the start of program execution.\n\n\n\n### Example\n\n ```\n\n\nprogram test_etime\n\n    integer(8) :: i, j\n\n    real, dimension(2) :: tarray\n\n    real :: result\n\n    call ETIME(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\n    do i=1,100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call ETIME(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\nend program test_etime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " + "docstr":"`ETIME` — Execution time subroutine (or function)\n\n### Description\n`ETIME(VALUES, TIME)` returns the number of seconds of runtime\nsince the start of the process's execution in `TIME`. `VALUES`\nreturns the user and system components of this time in `VALUES(1)` and\n`VALUES(2)` respectively. `TIME` is equal to `VALUES(1) + VALUES(2)`.\n\n \nOn some systems, the underlying timings are represented using types with\nsufficiently small limits that overflows (wrap around) are possible, such as\n32-bit types. Therefore, the values returned by this intrinsic might be, or\nbecome, negative, or numerically less than previous values, during a single\nrun of the compiled program.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\n`VALUES` and `TIME` are `INTENT(OUT)` and provide the following:\n\n \n\n: | User time in seconds. \n\n | `VALUES(2)`: | System time in seconds. \n\n | `TIME`: | Run time since start in seconds.\n\n\n\n\n\n\n### Syntax\n\n \n. \n\n | `TIME = ETIME(VALUES)`, (not recommended).\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `TIME` | The type shall be `REAL(4)`.\n\n\n\n\n\n\n### Return value\nElapsed time in seconds since the start of program execution.\n\n\n\n### Example\n```\n\n\nprogram test_etime\n\n    integer(8) :: i, j\n\n    real, dimension(2) :: tarray\n\n    real :: result\n\n    call ETIME(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\n    do i=1,100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call ETIME(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\nend program test_etime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " } \ No newline at end of file diff --git a/src/docs/EVENT_QUERY.json b/src/docs/EVENT_QUERY.json index 1d550304..a3c1755c 100644 --- a/src/docs/EVENT_QUERY.json +++ b/src/docs/EVENT_QUERY.json @@ -1,4 +1,4 @@ { "keyword":"EVENT_QUERY", - "docstr":"`EVENT_QUERY` — Query whether a coarray event has occurred\n\n### Description\n`EVENT_QUERY` assignes the number of events to `COUNT` which have been\nposted to the `EVENT` variable and not yet been removed by calling\n`EVENT WAIT`. When `STAT` is present and the invokation was successful,\nit is assigned the value 0. If it is present and the invokation has failed,\nit is assigned a positive value and `COUNT` is assigned the value -1.\n\n\n\n### Syntax\n`CALL EVENT_QUERY (EVENT, COUNT [, STAT])`\n\n\n### Arguments\n\n \n,\ndefined in `ISO_FORTRAN_ENV`; shall not be coindexed. \n\n | `COUNT` | (intent(out))Scalar integer with at least the\nprecision of default integer. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  implicit none\n\n  type(event_type) :: event_value_has_been_set[*]\n\n  integer :: cnt\n\n  if (this_image() == 1) then\n\n    call event_query (event_value_has_been_set, cnt)\n\n    if (cnt > 0) write(*,*) \"Value has been set\"\n\n  elseif (this_image() == 2) then\n\n    event post (event_value_has_been_set[1])\n\n  end if\n\nend program atomic\n\n```\n\n \n\n### Standard\nTS 18508 or later\n\n\n\n### Class\n subroutine\n\n\n" + "docstr":"`EVENT_QUERY` — Query whether a coarray event has occurred\n\n### Description\n`EVENT_QUERY` assignes the number of events to `COUNT` which have been\nposted to the `EVENT` variable and not yet been removed by calling\n`EVENT WAIT`. When `STAT` is present and the invokation was successful,\nit is assigned the value 0. If it is present and the invokation has failed,\nit is assigned a positive value and `COUNT` is assigned the value -1.\n\n\n\n### Syntax\n`CALL EVENT_QUERY (EVENT, COUNT [, STAT])`\n\n\n### Arguments\n\n \n,\ndefined in `ISO_FORTRAN_ENV`; shall not be coindexed. \n\n | `COUNT` | (intent(out))Scalar integer with at least the\nprecision of default integer. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  implicit none\n\n  type(event_type) :: event_value_has_been_set[*]\n\n  integer :: cnt\n\n  if (this_image() == 1) then\n\n    call event_query (event_value_has_been_set, cnt)\n\n    if (cnt > 0) write(*,*) \"Value has been set\"\n\n  elseif (this_image() == 2) then\n\n    event post (event_value_has_been_set[1])\n\n  end if\n\nend program atomic\n\n```\n\n \n\n### Standard\nTS 18508 or later\n\n\n\n### Class\n subroutine\n\n\n" } \ No newline at end of file diff --git a/src/docs/EXECUTE_COMMAND_LINE.json b/src/docs/EXECUTE_COMMAND_LINE.json index 61b1e341..8dca4669 100644 --- a/src/docs/EXECUTE_COMMAND_LINE.json +++ b/src/docs/EXECUTE_COMMAND_LINE.json @@ -1,4 +1,4 @@ { "keyword":"EXECUTE_COMMAND_LINE", - "docstr":"`EXECUTE_COMMAND_LINE` — Execute a shell command\n\n### Description\n`EXECUTE_COMMAND_LINE` runs a shell command, synchronously or\nasynchronously.\n\n \nThe `COMMAND` argument is passed to the shell and executed, using\nthe C library's `system` call. (The shell is `sh` on Unix\nsystems, and `cmd.exe` on Windows.) If `WAIT` is present\nand has the value false, the execution of the command is asynchronous\nif the system supports it; otherwise, the command is executed\nsynchronously.\n\n \n\nThe three last arguments allow the user to get status information. After\nsynchronous execution, `EXITSTAT` contains the integer exit code of\nthe command, as returned by `system`. `CMDSTAT` is set to zero\nif the command line was executed (whatever its exit status was). \n`CMDMSG` is assigned an error message if an error has occurred.\n\n \n\nNote that the `system` function need not be thread-safe. It is\nthe responsibility of the user to ensure that `system` is not\ncalled concurrently.\n\n\n\n\n### Syntax\n`CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])`\n\n\n### Arguments\n\n \n scalar. \n\n | `WAIT` | (Optional) Shall be a default `LOGICAL` scalar. \n\n | `EXITSTAT` | (Optional) Shall be an `INTEGER` of the\ndefault kind. \n\n | `CMDSTAT` | (Optional) Shall be an `INTEGER` of the\ndefault kind. \n\n | `CMDMSG` | (Optional) Shall be an `CHARACTER` scalar of the\ndefault kind.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram test_exec\n\n  integer :: i\n\n\n  call execute_command_line (\"external_prog.exe\", exitstat=i)\n\n  print *, \"Exit status of external_prog.exe was \", i\n\n\n  call execute_command_line (\"reindex_files.exe\", wait=.false.)\n\n  print *, \"Now reindexing files in the background\"\n\n\nend program test_exec\n\n```\n\n\n\n### Notes\n\nBecause this intrinsic is implemented in terms of the `system`function call, its behavior with respect to signaling is processor\ndependent. In particular, on POSIX-compliant systems, the SIGINT and\nSIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As\nsuch, if the parent process is terminated, the child process might not be\nterminated alongside.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nSYSTEM\n" + "docstr":"`EXECUTE_COMMAND_LINE` — Execute a shell command\n\n### Description\n`EXECUTE_COMMAND_LINE` runs a shell command, synchronously or\nasynchronously.\n\n \nThe `COMMAND` argument is passed to the shell and executed, using\nthe C library's `system` call. (The shell is `sh` on Unix\nsystems, and `cmd.exe` on Windows.) If `WAIT` is present\nand has the value false, the execution of the command is asynchronous\nif the system supports it; otherwise, the command is executed\nsynchronously.\n\n \n\nThe three last arguments allow the user to get status information. After\nsynchronous execution, `EXITSTAT` contains the integer exit code of\nthe command, as returned by `system`. `CMDSTAT` is set to zero\nif the command line was executed (whatever its exit status was). \n`CMDMSG` is assigned an error message if an error has occurred.\n\n \n\nNote that the `system` function need not be thread-safe. It is\nthe responsibility of the user to ensure that `system` is not\ncalled concurrently.\n\n\n\n\n### Syntax\n`CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])`\n\n\n### Arguments\n\n \n scalar. \n\n | `WAIT` | (Optional) Shall be a default `LOGICAL` scalar. \n\n | `EXITSTAT` | (Optional) Shall be an `INTEGER` of the\ndefault kind. \n\n | `CMDSTAT` | (Optional) Shall be an `INTEGER` of the\ndefault kind. \n\n | `CMDMSG` | (Optional) Shall be an `CHARACTER` scalar of the\ndefault kind.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_exec\n\n  integer :: i\n\n\n  call execute_command_line (\"external_prog.exe\", exitstat=i)\n\n  print *, \"Exit status of external_prog.exe was \", i\n\n\n  call execute_command_line (\"reindex_files.exe\", wait=.false.)\n\n  print *, \"Now reindexing files in the background\"\n\n\nend program test_exec\n\n```\n\n\n\n### Notes\n\nBecause this intrinsic is implemented in terms of the `system`function call, its behavior with respect to signaling is processor\ndependent. In particular, on POSIX-compliant systems, the SIGINT and\nSIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As\nsuch, if the parent process is terminated, the child process might not be\nterminated alongside.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nSYSTEM\n" } \ No newline at end of file diff --git a/src/docs/EXIT.json b/src/docs/EXIT.json index b2491e13..c37296a9 100644 --- a/src/docs/EXIT.json +++ b/src/docs/EXIT.json @@ -1,4 +1,4 @@ { "keyword":"EXIT", - "docstr":"`EXIT` — Exit the program with status.\n\n### Description\n`EXIT` causes immediate termination of the program with status. If status\nis omitted it returns the canonical success for the system. All Fortran\nI/O units are closed.\n\n\n\n### Syntax\n`CALL EXIT([STATUS])`\n\n\n### Arguments\n\n \n of the default kind.\n\n\n\n\n\n\n### Return value\n`STATUS` is passed to the parent process on exit.\n\n\n\n### Example\n\n ```\n\n\nprogram test_exit\n\n  integer :: STATUS = 0\n\n  print *, 'This program is going to exit.'\n\n  call EXIT(STATUS)\n\nend program test_exit\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nABORT, KILL\n" + "docstr":"`EXIT` — Exit the program with status.\n\n### Description\n`EXIT` causes immediate termination of the program with status. If status\nis omitted it returns the canonical success for the system. All Fortran\nI/O units are closed.\n\n\n\n### Syntax\n`CALL EXIT([STATUS])`\n\n\n### Arguments\n\n \n of the default kind.\n\n\n\n\n\n\n### Return value\n`STATUS` is passed to the parent process on exit.\n\n\n\n### Example\n```\n\n\nprogram test_exit\n\n  integer :: STATUS = 0\n\n  print *, 'This program is going to exit.'\n\n  call EXIT(STATUS)\n\nend program test_exit\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nABORT, KILL\n" } \ No newline at end of file diff --git a/src/docs/EXP.json b/src/docs/EXP.json index c48b9352..873a29ff 100644 --- a/src/docs/EXP.json +++ b/src/docs/EXP.json @@ -1,4 +1,4 @@ { "keyword":"EXP", - "docstr":"`EXP` — Exponential function\n\n### Description\n`EXP(X)` computes the base e exponential of `X`.\n\n\n\n### Syntax\n`RESULT = EXP(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_exp\n\n  real :: x = 1.0\n\n  x = exp(x)\n\nend program test_exp\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `EXP(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DEXP(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n | `CEXP(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 77 and later\n\n | `ZEXP(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDEXP(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`EXP` — Exponential function\n\n### Description\n`EXP(X)` computes the base e exponential of `X`.\n\n\n\n### Syntax\n`RESULT = EXP(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_exp\n\n  real :: x = 1.0\n\n  x = exp(x)\n\nend program test_exp\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `EXP(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DEXP(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n | `CEXP(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 77 and later\n\n | `ZEXP(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDEXP(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/EXPONENT.json b/src/docs/EXPONENT.json index 5f379dfc..2e89a328 100644 --- a/src/docs/EXPONENT.json +++ b/src/docs/EXPONENT.json @@ -1,4 +1,4 @@ { "keyword":"EXPONENT", - "docstr":"`EXPONENT` — Exponent function\n\n### Description\n`EXPONENT(X)` returns the value of the exponent part of `X`. If `X`\nis zero the value returned is zero.\n\n\n\n### Syntax\n`RESULT = EXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type default `INTEGER`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_exponent\n\n  real :: x = 1.0\n\n  integer :: i\n\n  i = exponent(x)\n\n  print *, i\n\n  print *, exponent(0.0)\n\nend program test_exponent\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`EXPONENT` — Exponent function\n\n### Description\n`EXPONENT(X)` returns the value of the exponent part of `X`. If `X`\nis zero the value returned is zero.\n\n\n\n### Syntax\n`RESULT = EXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type default `INTEGER`.\n\n\n\n### Example\n```\n\n\nprogram test_exponent\n\n  real :: x = 1.0\n\n  integer :: i\n\n  i = exponent(x)\n\n  print *, i\n\n  print *, exponent(0.0)\n\nend program test_exponent\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/FDATE.json b/src/docs/FDATE.json index 8678aa74..09267a7f 100644 --- a/src/docs/FDATE.json +++ b/src/docs/FDATE.json @@ -1,4 +1,4 @@ { "keyword":"FDATE", - "docstr":"`FDATE` — Get the current time as a string\n\n### Description\n`FDATE(DATE)` returns the current date (using the same format as\n`CTIME`) in `DATE`. It is equivalent to CALL CTIME(DATE,\nTIME()).\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n. \n\n | `DATE = FDATE()`.\n\n\n\n\n\n\n### Arguments\n\n \n of the\ndefault kind. It is an `INTENT(OUT)` argument. If the length of\nthis variable is too short for the date and time string to fit\ncompletely, it will be blank on procedure return.\n\n\n\n\n\n\n### Return value\nThe current date and time as a string.\n\n\n\n### Example\n\n ```\n\n\nprogram test_fdate\n\n    integer(8) :: i, j\n\n    character(len=30) :: date\n\n    call fdate(date)\n\n    print *, 'Program started on ', date\n\n    do i = 1, 100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call fdate(date)\n\n    print *, 'Program ended on ', date\n\nend program test_fdate\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nDATE_AND_TIME, CTIME\n" + "docstr":"`FDATE` — Get the current time as a string\n\n### Description\n`FDATE(DATE)` returns the current date (using the same format as\n`CTIME`) in `DATE`. It is equivalent to CALL CTIME(DATE,\nTIME()).\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n. \n\n | `DATE = FDATE()`.\n\n\n\n\n\n\n### Arguments\n\n \n of the\ndefault kind. It is an `INTENT(OUT)` argument. If the length of\nthis variable is too short for the date and time string to fit\ncompletely, it will be blank on procedure return.\n\n\n\n\n\n\n### Return value\nThe current date and time as a string.\n\n\n\n### Example\n```\n\n\nprogram test_fdate\n\n    integer(8) :: i, j\n\n    character(len=30) :: date\n\n    call fdate(date)\n\n    print *, 'Program started on ', date\n\n    do i = 1, 100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call fdate(date)\n\n    print *, 'Program ended on ', date\n\nend program test_fdate\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nDATE_AND_TIME, CTIME\n" } \ No newline at end of file diff --git a/src/docs/FGET.json b/src/docs/FGET.json index 8896d7b1..031d789d 100644 --- a/src/docs/FGET.json +++ b/src/docs/FGET.json @@ -1,4 +1,4 @@ { "keyword":"FGET", - "docstr":"`FGET` — Read a single character in stream mode from stdin\n\n### Description\nRead a single character in stream mode from stdin by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGET(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file, and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_fget\n\n  INTEGER, PARAMETER :: strlen = 100\n\n  INTEGER :: status, i = 1\n\n  CHARACTER(len=strlen) :: str = \"\"\n\n\n  WRITE (*,*) 'Enter text:'\n\n  DO\n\n    CALL fget(str(i:i), status)\n\n    if (status /= 0 .OR. i > strlen) exit\n\n    i = i + 1\n\n  END DO\n\n  WRITE (*,*) TRIM(str)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGETC, FPUT, FPUTC\n" + "docstr":"`FGET` — Read a single character in stream mode from stdin\n\n### Description\nRead a single character in stream mode from stdin by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGET(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file, and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fget\n\n  INTEGER, PARAMETER :: strlen = 100\n\n  INTEGER :: status, i = 1\n\n  CHARACTER(len=strlen) :: str = \"\"\n\n\n  WRITE (*,*) 'Enter text:'\n\n  DO\n\n    CALL fget(str(i:i), status)\n\n    if (status /= 0 .OR. i > strlen) exit\n\n    i = i + 1\n\n  END DO\n\n  WRITE (*,*) TRIM(str)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGETC, FPUT, FPUTC\n" } \ No newline at end of file diff --git a/src/docs/FGETC.json b/src/docs/FGETC.json index c375f6dc..a7a356e8 100644 --- a/src/docs/FGETC.json +++ b/src/docs/FGETC.json @@ -1,4 +1,4 @@ { "keyword":"FGETC", - "docstr":"`FGETC` — Read a single character in stream mode\n\n### Description\nRead a single character in stream mode by bypassing normal formatted output. \nStream I/O should not be mixed with normal record-oriented (formatted or\nunformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility\nwith *g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGETC(UNIT, C)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `C` | The type shall be `CHARACTER` and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_fgetc\n\n  INTEGER :: fd = 42, status\n\n  CHARACTER :: c\n\n\n  OPEN(UNIT=fd, FILE=\"/etc/passwd\", ACTION=\"READ\", STATUS = \"OLD\")\n\n  DO\n\n    CALL fgetc(fd, c, status)\n\n    IF (status /= 0) EXIT\n\n    call fput(c)\n\n  END DO\n\n  CLOSE(UNIT=fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGET, FPUT, FPUTC\n" + "docstr":"`FGETC` — Read a single character in stream mode\n\n### Description\nRead a single character in stream mode by bypassing normal formatted output. \nStream I/O should not be mixed with normal record-oriented (formatted or\nunformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility\nwith *g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGETC(UNIT, C)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `C` | The type shall be `CHARACTER` and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fgetc\n\n  INTEGER :: fd = 42, status\n\n  CHARACTER :: c\n\n\n  OPEN(UNIT=fd, FILE=\"/etc/passwd\", ACTION=\"READ\", STATUS = \"OLD\")\n\n  DO\n\n    CALL fgetc(fd, c, status)\n\n    IF (status /= 0) EXIT\n\n    call fput(c)\n\n  END DO\n\n  CLOSE(UNIT=fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGET, FPUT, FPUTC\n" } \ No newline at end of file diff --git a/src/docs/FLOOR.json b/src/docs/FLOOR.json index 8ce1ff94..46445fd1 100644 --- a/src/docs/FLOOR.json +++ b/src/docs/FLOOR.json @@ -1,4 +1,4 @@ { "keyword":"FLOOR", - "docstr":"`FLOOR` — Integer floor function\n\n### Description\n`FLOOR(A)` returns the greatest integer less than or equal to `X`.\n\n\n\n### Syntax\n`RESULT = FLOOR(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(KIND)` if `KIND` is present\nand of default-kind `INTEGER` otherwise.\n\n\n\n### Example\n\n ```\n\n\nprogram test_floor\n\n    real :: x = 63.29\n\n    real :: y = -63.59\n\n    print *, floor(x) ! returns 63\n\n    print *, floor(y) ! returns -64\n\nend program test_floor\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCEILING, NINT\n\n " + "docstr":"`FLOOR` — Integer floor function\n\n### Description\n`FLOOR(A)` returns the greatest integer less than or equal to `X`.\n\n\n\n### Syntax\n`RESULT = FLOOR(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(KIND)` if `KIND` is present\nand of default-kind `INTEGER` otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_floor\n\n    real :: x = 63.29\n\n    real :: y = -63.59\n\n    print *, floor(x) ! returns 63\n\n    print *, floor(y) ! returns -64\n\nend program test_floor\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCEILING, NINT\n\n " } \ No newline at end of file diff --git a/src/docs/FNUM.json b/src/docs/FNUM.json index f0670c29..d5358743 100644 --- a/src/docs/FNUM.json +++ b/src/docs/FNUM.json @@ -1,4 +1,4 @@ { "keyword":"FNUM", - "docstr":"`FNUM` — File number function\n\n### Description\n`FNUM(UNIT)` returns the POSIX file descriptor number corresponding to the\nopen Fortran I/O unit `UNIT`.\n\n\n\n### Syntax\n`RESULT = FNUM(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`\n\n\n### Example\n\n ```\n\n\nprogram test_fnum\n\n  integer :: i\n\n  open (unit=10, status = \"scratch\")\n\n  i = fnum(10)\n\n  print *, i\n\n  close (10)\n\nend program test_fnum\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" + "docstr":"`FNUM` — File number function\n\n### Description\n`FNUM(UNIT)` returns the POSIX file descriptor number corresponding to the\nopen Fortran I/O unit `UNIT`.\n\n\n\n### Syntax\n`RESULT = FNUM(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`\n\n\n### Example\n```\n\n\nprogram test_fnum\n\n  integer :: i\n\n  open (unit=10, status = \"scratch\")\n\n  i = fnum(10)\n\n  print *, i\n\n  close (10)\n\nend program test_fnum\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" } \ No newline at end of file diff --git a/src/docs/FPUT.json b/src/docs/FPUT.json index 7bd9abd3..7e14603d 100644 --- a/src/docs/FPUT.json +++ b/src/docs/FPUT.json @@ -1,4 +1,4 @@ { "keyword":"FPUT", - "docstr":"`FPUT` — Write a single character in stream mode to stdout\n\n### Description\nWrite a single character in stream mode to stdout by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FPUT(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_fput\n\n  CHARACTER(len=10) :: str = \"gfortran\"\n\n  INTEGER :: i\n\n  DO i = 1, len_trim(str)\n\n    CALL fput(str(i:i))\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFPUTC, FGET, FGETC\n" + "docstr":"`FPUT` — Write a single character in stream mode to stdout\n\n### Description\nWrite a single character in stream mode to stdout by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FPUT(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fput\n\n  CHARACTER(len=10) :: str = \"gfortran\"\n\n  INTEGER :: i\n\n  DO i = 1, len_trim(str)\n\n    CALL fput(str(i:i))\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFPUTC, FGET, FGETC\n" } \ No newline at end of file diff --git a/src/docs/FPUTC.json b/src/docs/FPUTC.json index 30355d06..fefbfdb5 100644 --- a/src/docs/FPUTC.json +++ b/src/docs/FPUTC.json @@ -1,4 +1,4 @@ { "keyword":"FPUTC", - "docstr":"`FPUTC` — Write a single character in stream mode\n\n### Description\nWrite a single character in stream mode by bypassing normal formatted\noutput. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FPUTC(UNIT, C)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `C` | The type shall be `CHARACTER` and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_fputc\n\n  CHARACTER(len=10) :: str = \"gfortran\"\n\n  INTEGER :: fd = 42, i\n\n\n  OPEN(UNIT = fd, FILE = \"out\", ACTION = \"WRITE\", STATUS=\"NEW\")\n\n  DO i = 1, len_trim(str)\n\n    CALL fputc(fd, str(i:i))\n\n  END DO\n\n  CLOSE(fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFPUT, FGET, FGETC\n" + "docstr":"`FPUTC` — Write a single character in stream mode\n\n### Description\nWrite a single character in stream mode by bypassing normal formatted\noutput. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FPUTC(UNIT, C)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `C` | The type shall be `CHARACTER` and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fputc\n\n  CHARACTER(len=10) :: str = \"gfortran\"\n\n  INTEGER :: fd = 42, i\n\n\n  OPEN(UNIT = fd, FILE = \"out\", ACTION = \"WRITE\", STATUS=\"NEW\")\n\n  DO i = 1, len_trim(str)\n\n    CALL fputc(fd, str(i:i))\n\n  END DO\n\n  CLOSE(fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFPUT, FGET, FGETC\n" } \ No newline at end of file diff --git a/src/docs/FRACTION.json b/src/docs/FRACTION.json index 22f6d02a..5e865809 100644 --- a/src/docs/FRACTION.json +++ b/src/docs/FRACTION.json @@ -1,4 +1,4 @@ { "keyword":"FRACTION", - "docstr":"`FRACTION` — Fractional part of the model representation\n\n### Description\n`FRACTION(X)` returns the fractional part of the model\nrepresentation of `X`.\n\n\n\n### Syntax\n`Y = FRACTION(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as the argument. \nThe fractional part of the model representation of `X` is returned;\nit is `X * RADIX(X)**(-EXPONENT(X))`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_fraction\n\n  real :: x\n\n  x = 178.1387e-4\n\n  print *, fraction(x), x * radix(x)**(-exponent(x))\n\nend program test_fraction\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`FRACTION` — Fractional part of the model representation\n\n### Description\n`FRACTION(X)` returns the fractional part of the model\nrepresentation of `X`.\n\n\n\n### Syntax\n`Y = FRACTION(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as the argument. \nThe fractional part of the model representation of `X` is returned;\nit is `X * RADIX(X)**(-EXPONENT(X))`.\n\n\n\n### Example\n```\n\n\nprogram test_fraction\n\n  real :: x\n\n  x = 178.1387e-4\n\n  print *, fraction(x), x * radix(x)**(-exponent(x))\n\nend program test_fraction\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/FSEEK.json b/src/docs/FSEEK.json index 71e7dff5..f9714dbb 100644 --- a/src/docs/FSEEK.json +++ b/src/docs/FSEEK.json @@ -1,4 +1,4 @@ { "keyword":"FSEEK", - "docstr":"`FSEEK` — Low level file positioning subroutine\n\n### Description\nMoves `UNIT` to the specified `OFFSET`. If `WHENCE`\nis set to 0, the `OFFSET` is taken as an absolute value `SEEK_SET`,\nif set to 1, `OFFSET` is taken to be relative to the current position\n`SEEK_CUR`, and if set to 2 relative to the end of the file `SEEK_END`. \nOn error, `STATUS` is set to a nonzero value. If `STATUS` the seek\nfails silently.\n\n \nThis intrinsic routine is not fully backwards compatible with *g77*. \nIn *g77*, the `FSEEK` takes a statement label instead of a\n`STATUS` variable. If FSEEK is used in old code, change\n \n
            CALL FSEEK(UNIT, OFFSET, WHENCE, *label)\n
\n \nto\n \n
            INTEGER :: status\n            CALL FSEEK(UNIT, OFFSET, WHENCE, status)\n            IF (status /= 0) GOTO label\n
\n \nPlease note that GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n`CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])`\n\n\n### Arguments\n\n \n. \n\n | `OFFSET` | Shall be a scalar of type `INTEGER`. \n\n | `WHENCE` | Shall be a scalar of type `INTEGER`. \nIts value shall be either 0, 1 or 2. \n\n | `STATUS` | (Optional) shall be a scalar of type\n`INTEGER(4)`.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_fseek\n\n  INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2\n\n  INTEGER :: fd, offset, ierr\n\n\n  ierr = 0\n\n  offset = 5\n\n  fd = 10\n\n\n  OPEN(UNIT=fd, FILE=\"fseek.test\")\n\n  CALL FSEEK(fd, offset, SEEK_SET, ierr) ! move to OFFSET\n\n  print *, FTELL(fd), ierr\n\n\n  CALL FSEEK(fd, 0, SEEK_END, ierr) ! move to end\n\n  print *, FTELL(fd), ierr\n\n\n  CALL FSEEK(fd, 0, SEEK_SET, ierr) ! move to beginning\n\n  print *, FTELL(fd), ierr\n\n\n  CLOSE(UNIT=fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nFTELL\n" + "docstr":"`FSEEK` — Low level file positioning subroutine\n\n### Description\nMoves `UNIT` to the specified `OFFSET`. If `WHENCE`\nis set to 0, the `OFFSET` is taken as an absolute value `SEEK_SET`,\nif set to 1, `OFFSET` is taken to be relative to the current position\n`SEEK_CUR`, and if set to 2 relative to the end of the file `SEEK_END`. \nOn error, `STATUS` is set to a nonzero value. If `STATUS` the seek\nfails silently.\n\n \nThis intrinsic routine is not fully backwards compatible with *g77*. \nIn *g77*, the `FSEEK` takes a statement label instead of a\n`STATUS` variable. If FSEEK is used in old code, change\n \n
            CALL FSEEK(UNIT, OFFSET, WHENCE, *label)\n
\n \nto\n \n
            INTEGER :: status\n            CALL FSEEK(UNIT, OFFSET, WHENCE, status)\n            IF (status /= 0) GOTO label\n
\n \nPlease note that GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n`CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])`\n\n\n### Arguments\n\n \n. \n\n | `OFFSET` | Shall be a scalar of type `INTEGER`. \n\n | `WHENCE` | Shall be a scalar of type `INTEGER`. \nIts value shall be either 0, 1 or 2. \n\n | `STATUS` | (Optional) shall be a scalar of type\n`INTEGER(4)`.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fseek\n\n  INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2\n\n  INTEGER :: fd, offset, ierr\n\n\n  ierr = 0\n\n  offset = 5\n\n  fd = 10\n\n\n  OPEN(UNIT=fd, FILE=\"fseek.test\")\n\n  CALL FSEEK(fd, offset, SEEK_SET, ierr) ! move to OFFSET\n\n  print *, FTELL(fd), ierr\n\n\n  CALL FSEEK(fd, 0, SEEK_END, ierr) ! move to end\n\n  print *, FTELL(fd), ierr\n\n\n  CALL FSEEK(fd, 0, SEEK_SET, ierr) ! move to beginning\n\n  print *, FTELL(fd), ierr\n\n\n  CLOSE(UNIT=fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nFTELL\n" } \ No newline at end of file diff --git a/src/docs/FTELL.json b/src/docs/FTELL.json index 402117de..e412b12d 100644 --- a/src/docs/FTELL.json +++ b/src/docs/FTELL.json @@ -1,4 +1,4 @@ { "keyword":"FTELL", - "docstr":"`FTELL` — Current stream position\n\n### Description\nRetrieves the current position within an open file.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `OFFSET = FTELL(UNIT)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `UNIT` | Shall of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nIn either syntax, `OFFSET` is set to the current offset of unit\nnumber `UNIT`, or to -1 if the unit is not currently open.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_ftell\n\n  INTEGER :: i\n\n  OPEN(10, FILE=\"temp.dat\")\n\n  CALL ftell(10,i)\n\n  WRITE(*,*) i\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFSEEK\n" + "docstr":"`FTELL` — Current stream position\n\n### Description\nRetrieves the current position within an open file.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `OFFSET = FTELL(UNIT)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `UNIT` | Shall of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nIn either syntax, `OFFSET` is set to the current offset of unit\nnumber `UNIT`, or to -1 if the unit is not currently open.\n\n\n\n### Example\n```\n\n\nPROGRAM test_ftell\n\n  INTEGER :: i\n\n  OPEN(10, FILE=\"temp.dat\")\n\n  CALL ftell(10,i)\n\n  WRITE(*,*) i\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFSEEK\n" } \ No newline at end of file diff --git a/src/docs/GAMMA.json b/src/docs/GAMMA.json index a993ee5c..58a92ae5 100644 --- a/src/docs/GAMMA.json +++ b/src/docs/GAMMA.json @@ -1,4 +1,4 @@ { "keyword":"GAMMA", - "docstr":"`GAMMA` — Gamma function\n\n### Description\n`GAMMA(X)` computes Gamma (\\Gamma) of `X`. For positive,\ninteger values of `X` the Gamma function simplifies to the factorial\nfunction \\Gamma(x)=(x-1)!.\n\n\n\n### Syntax\n`X = GAMMA(X)`\n\n\n### Arguments\n\n \n and neither zero\nnor a negative integer.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` of the same kind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_gamma\n\n  real :: x = 1.0\n\n  x = gamma(x) ! returns 1.0\n\nend program test_gamma\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `GAMMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `DGAMMA(X)` | `REAL(8) X` | `REAL(8)` | GNU Extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLogarithm of the Gamma function: LOG_GAMMA\n\n " + "docstr":"`GAMMA` — Gamma function\n\n### Description\n`GAMMA(X)` computes Gamma (\\Gamma) of `X`. For positive,\ninteger values of `X` the Gamma function simplifies to the factorial\nfunction \\Gamma(x)=(x-1)!.\n\n\n\n### Syntax\n`X = GAMMA(X)`\n\n\n### Arguments\n\n \n and neither zero\nnor a negative integer.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` of the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_gamma\n\n  real :: x = 1.0\n\n  x = gamma(x) ! returns 1.0\n\nend program test_gamma\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `GAMMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `DGAMMA(X)` | `REAL(8) X` | `REAL(8)` | GNU Extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLogarithm of the Gamma function: LOG_GAMMA\n\n " } \ No newline at end of file diff --git a/src/docs/GERROR.json b/src/docs/GERROR.json index 07c4a5aa..fb597e0d 100644 --- a/src/docs/GERROR.json +++ b/src/docs/GERROR.json @@ -1,4 +1,4 @@ { "keyword":"GERROR", - "docstr":"`GERROR` — Get last system error message\n\n### Description\nReturns the system error message corresponding to the last system error. \nThis resembles the functionality of `strerror(3)` in C.\n\n\n\n### Syntax\n`CALL GERROR(RESULT)`\n\n\n### Arguments\n\n \n and of default\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_gerror\n\n  CHARACTER(len=100) :: msg\n\n  CALL gerror(msg)\n\n  WRITE(*,*) msg\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nIERRNO, PERROR\n" + "docstr":"`GERROR` — Get last system error message\n\n### Description\nReturns the system error message corresponding to the last system error. \nThis resembles the functionality of `strerror(3)` in C.\n\n\n\n### Syntax\n`CALL GERROR(RESULT)`\n\n\n### Arguments\n\n \n and of default\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_gerror\n\n  CHARACTER(len=100) :: msg\n\n  CALL gerror(msg)\n\n  WRITE(*,*) msg\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nIERRNO, PERROR\n" } \ No newline at end of file diff --git a/src/docs/GETARG.json b/src/docs/GETARG.json index 64121560..d6d9c25d 100644 --- a/src/docs/GETARG.json +++ b/src/docs/GETARG.json @@ -1,4 +1,4 @@ { "keyword":"GETARG", - "docstr":"`GETARG` — Get command line arguments\n\n### Description\nRetrieve the `POS`-th argument that was passed on the\ncommand line when the containing program was invoked.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe GET_COMMAND_ARGUMENT intrinsic defined by the Fortran 2003\nstandard.\n\n\n\n\n### Syntax\n`CALL GETARG(POS, VALUE)`\n\n\n### Arguments\n\n \n and not wider than\nthe default integer kind; `POS` \\geq 0\n\n | `VALUE` | Shall be of type `CHARACTER` and of default\nkind. \n\n | `VALUE` | Shall be of type `CHARACTER`.\n\n\n\n\n\n\n### Return value\nAfter `GETARG` returns, the `VALUE` argument holds the\n`POS`th command line argument. If `VALUE` can not hold the\nargument, it is truncated to fit the length of `VALUE`. If there are\nless than `POS` arguments specified at the command line, `VALUE`\nwill be filled with blanks. If `POS` = 0, `VALUE` is set\nto the name of the program (on systems that support this feature).\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_getarg\n\n  INTEGER :: i\n\n  CHARACTER(len=32) :: arg\n\n\n  DO i = 1, iargc()\n\n    CALL getarg(i, arg)\n\n    WRITE (*,*) arg\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGNU Fortran 77 compatibility function: IARGC\n\n \nFortran 2003 functions and subroutines: GET_COMMAND,\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n\n" + "docstr":"`GETARG` — Get command line arguments\n\n### Description\nRetrieve the `POS`-th argument that was passed on the\ncommand line when the containing program was invoked.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe GET_COMMAND_ARGUMENT intrinsic defined by the Fortran 2003\nstandard.\n\n\n\n\n### Syntax\n`CALL GETARG(POS, VALUE)`\n\n\n### Arguments\n\n \n and not wider than\nthe default integer kind; `POS` \\geq 0\n\n | `VALUE` | Shall be of type `CHARACTER` and of default\nkind. \n\n | `VALUE` | Shall be of type `CHARACTER`.\n\n\n\n\n\n\n### Return value\nAfter `GETARG` returns, the `VALUE` argument holds the\n`POS`th command line argument. If `VALUE` can not hold the\nargument, it is truncated to fit the length of `VALUE`. If there are\nless than `POS` arguments specified at the command line, `VALUE`\nwill be filled with blanks. If `POS` = 0, `VALUE` is set\nto the name of the program (on systems that support this feature).\n\n\n\n### Example\n```\n\n\nPROGRAM test_getarg\n\n  INTEGER :: i\n\n  CHARACTER(len=32) :: arg\n\n\n  DO i = 1, iargc()\n\n    CALL getarg(i, arg)\n\n    WRITE (*,*) arg\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGNU Fortran 77 compatibility function: IARGC\n\n \nFortran 2003 functions and subroutines: GET_COMMAND,\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n\n" } \ No newline at end of file diff --git a/src/docs/GETCWD.json b/src/docs/GETCWD.json index 44caa889..71854def 100644 --- a/src/docs/GETCWD.json +++ b/src/docs/GETCWD.json @@ -1,4 +1,4 @@ { "keyword":"GETCWD", - "docstr":"`GETCWD` — Get current working directory\n\n### Description\nGet current working directory.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = GETCWD(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default kind. \n\n | `STATUS` | (Optional) status flag. Returns 0 on success,\na system specific and nonzero error code otherwise.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_getcwd\n\n  CHARACTER(len=255) :: cwd\n\n  CALL getcwd(cwd)\n\n  WRITE(*,*) TRIM(cwd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCHDIR\n" + "docstr":"`GETCWD` — Get current working directory\n\n### Description\nGet current working directory.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = GETCWD(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default kind. \n\n | `STATUS` | (Optional) status flag. Returns 0 on success,\na system specific and nonzero error code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_getcwd\n\n  CHARACTER(len=255) :: cwd\n\n  CALL getcwd(cwd)\n\n  WRITE(*,*) TRIM(cwd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCHDIR\n" } \ No newline at end of file diff --git a/src/docs/GETENV.json b/src/docs/GETENV.json index 0e071448..827db938 100644 --- a/src/docs/GETENV.json +++ b/src/docs/GETENV.json @@ -1,4 +1,4 @@ { "keyword":"GETENV", - "docstr":"`GETENV` — Get an environmental variable\n\n### Description\nGet the `VALUE` of the environmental variable `NAME`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe GET_ENVIRONMENT_VARIABLE intrinsic defined by the Fortran\n2003 standard.\n\n \n\nNote that `GETENV` need not be thread-safe. It is the\nresponsibility of the user to ensure that the environment is not being\nupdated concurrently with a call to the `GETENV` intrinsic.\n\n\n\n\n### Syntax\n`CALL GETENV(NAME, VALUE)`\n\n\n### Arguments\n\n \n and of default kind. \n\n | `VALUE` | Shall be of type `CHARACTER` and of default kind.\n\n\n\n\n\n\n### Return value\nStores the value of `NAME` in `VALUE`. If `VALUE` is\nnot large enough to hold the data, it is truncated. If `NAME`\nis not set, `VALUE` will be filled with blanks.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_getenv\n\n  CHARACTER(len=255) :: homedir\n\n  CALL getenv(\"HOME\", homedir)\n\n  WRITE (*,*) TRIM(homedir)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_ENVIRONMENT_VARIABLE\n" + "docstr":"`GETENV` — Get an environmental variable\n\n### Description\nGet the `VALUE` of the environmental variable `NAME`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe GET_ENVIRONMENT_VARIABLE intrinsic defined by the Fortran\n2003 standard.\n\n \n\nNote that `GETENV` need not be thread-safe. It is the\nresponsibility of the user to ensure that the environment is not being\nupdated concurrently with a call to the `GETENV` intrinsic.\n\n\n\n\n### Syntax\n`CALL GETENV(NAME, VALUE)`\n\n\n### Arguments\n\n \n and of default kind. \n\n | `VALUE` | Shall be of type `CHARACTER` and of default kind.\n\n\n\n\n\n\n### Return value\nStores the value of `NAME` in `VALUE`. If `VALUE` is\nnot large enough to hold the data, it is truncated. If `NAME`\nis not set, `VALUE` will be filled with blanks.\n\n\n\n### Example\n```\n\n\nPROGRAM test_getenv\n\n  CHARACTER(len=255) :: homedir\n\n  CALL getenv(\"HOME\", homedir)\n\n  WRITE (*,*) TRIM(homedir)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_ENVIRONMENT_VARIABLE\n" } \ No newline at end of file diff --git a/src/docs/GETLOG.json b/src/docs/GETLOG.json index b4da628e..827fe28a 100644 --- a/src/docs/GETLOG.json +++ b/src/docs/GETLOG.json @@ -1,4 +1,4 @@ { "keyword":"GETLOG", - "docstr":"`GETLOG` — Get login name\n\n### Description\nGets the username under which the program is running.\n\n\n\n### Syntax\n`CALL GETLOG(C)`\n\n\n### Arguments\n\n \n and of default kind.\n\n\n\n\n\n\n### Return value\nStores the current user name in `LOGIN`. (On systems where POSIX\nfunctions `geteuid` and `getpwuid` are not available, and\nthe `getlogin` function is not implemented either, this will\nreturn a blank string.)\n\n\n\n### Example\n\n ```\n\n\nPROGRAM TEST_GETLOG\n\n  CHARACTER(32) :: login\n\n  CALL GETLOG(login)\n\n  WRITE(*,*) login\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGETUID\n" + "docstr":"`GETLOG` — Get login name\n\n### Description\nGets the username under which the program is running.\n\n\n\n### Syntax\n`CALL GETLOG(C)`\n\n\n### Arguments\n\n \n and of default kind.\n\n\n\n\n\n\n### Return value\nStores the current user name in `LOGIN`. (On systems where POSIX\nfunctions `geteuid` and `getpwuid` are not available, and\nthe `getlogin` function is not implemented either, this will\nreturn a blank string.)\n\n\n\n### Example\n```\n\n\nPROGRAM TEST_GETLOG\n\n  CHARACTER(32) :: login\n\n  CALL GETLOG(login)\n\n  WRITE(*,*) login\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGETUID\n" } \ No newline at end of file diff --git a/src/docs/GETPID.json b/src/docs/GETPID.json index fbcb33ad..03a0824f 100644 --- a/src/docs/GETPID.json +++ b/src/docs/GETPID.json @@ -1,4 +1,4 @@ { "keyword":"GETPID", - "docstr":"`GETPID` — Process ID function\n\n### Description\nReturns the numerical process identifier of the current process.\n\n\n\n### Syntax\n`RESULT = GETPID()`\n\n\n### Return value\nThe return value of `GETPID` is an `INTEGER` of the default\nkind.\n\n\n\n### Example\n\n ```\n\n\nprogram info\n\n  print *, \"The current process ID is \", getpid()\n\n  print *, \"Your numerical user ID is \", getuid()\n\n  print *, \"Your numerical group ID is \", getgid()\n\nend program info\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGETGID, GETUID\n" + "docstr":"`GETPID` — Process ID function\n\n### Description\nReturns the numerical process identifier of the current process.\n\n\n\n### Syntax\n`RESULT = GETPID()`\n\n\n### Return value\nThe return value of `GETPID` is an `INTEGER` of the default\nkind.\n\n\n\n### Example\n```\n\n\nprogram info\n\n  print *, \"The current process ID is \", getpid()\n\n  print *, \"Your numerical user ID is \", getuid()\n\n  print *, \"Your numerical group ID is \", getgid()\n\nend program info\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGETGID, GETUID\n" } \ No newline at end of file diff --git a/src/docs/GET_COMMAND.json b/src/docs/GET_COMMAND.json index 588d80f3..43606031 100644 --- a/src/docs/GET_COMMAND.json +++ b/src/docs/GET_COMMAND.json @@ -1,4 +1,4 @@ { "keyword":"GET_COMMAND", - "docstr":"`GET_COMMAND` — Get the entire command line\n\n### Description\nRetrieve the entire command line that was used to invoke the program.\n\n\n\n### Syntax\n`CALL GET_COMMAND([COMMAND, LENGTH, STATUS])`\n\n\n### Arguments\n\n \n and\nof default kind. \n\n | `LENGTH` | (Optional) Shall be of type `INTEGER` and of\ndefault kind. \n\n | `STATUS` | (Optional) Shall be of type `INTEGER` and of\ndefault kind.\n\n\n\n\n\n\n### Return value\nIf `COMMAND` is present, stores the entire command line that was used\nto invoke the program in `COMMAND`. If `LENGTH` is present, it is\nassigned the length of the command line. If `STATUS` is present, it\nis assigned 0 upon success of the command, -1 if `COMMAND` is too\nshort to store the command line, or a positive value in case of an error.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_get_command\n\n  CHARACTER(len=255) :: cmd\n\n  CALL get_command(cmd)\n\n  WRITE (*,*) TRIM(cmd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n" + "docstr":"`GET_COMMAND` — Get the entire command line\n\n### Description\nRetrieve the entire command line that was used to invoke the program.\n\n\n\n### Syntax\n`CALL GET_COMMAND([COMMAND, LENGTH, STATUS])`\n\n\n### Arguments\n\n \n and\nof default kind. \n\n | `LENGTH` | (Optional) Shall be of type `INTEGER` and of\ndefault kind. \n\n | `STATUS` | (Optional) Shall be of type `INTEGER` and of\ndefault kind.\n\n\n\n\n\n\n### Return value\nIf `COMMAND` is present, stores the entire command line that was used\nto invoke the program in `COMMAND`. If `LENGTH` is present, it is\nassigned the length of the command line. If `STATUS` is present, it\nis assigned 0 upon success of the command, -1 if `COMMAND` is too\nshort to store the command line, or a positive value in case of an error.\n\n\n\n### Example\n```\n\n\nPROGRAM test_get_command\n\n  CHARACTER(len=255) :: cmd\n\n  CALL get_command(cmd)\n\n  WRITE (*,*) TRIM(cmd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n" } \ No newline at end of file diff --git a/src/docs/GET_COMMAND_ARGUMENT.json b/src/docs/GET_COMMAND_ARGUMENT.json index 3e146517..0fe904fe 100644 --- a/src/docs/GET_COMMAND_ARGUMENT.json +++ b/src/docs/GET_COMMAND_ARGUMENT.json @@ -1,4 +1,4 @@ { "keyword":"GET_COMMAND_ARGUMENT", - "docstr":"`GET_COMMAND_ARGUMENT` — Get command line arguments\n\n### Description\nRetrieve the `NUMBER`-th argument that was passed on the\ncommand line when the containing program was invoked.\n\n\n\n### Syntax\n`CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])`\n\n\n### Arguments\n\n \n and of\ndefault kind, `NUMBER` \\geq 0\n\n | `VALUE` | (Optional) Shall be a scalar of type `CHARACTER`and of default kind. \n\n | `LENGTH` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `STATUS` | (Optional) Shall be a scalar of type `INTEGER`and of default kind.\n\n\n\n\n\n\n### Return value\nAfter `GET_COMMAND_ARGUMENT` returns, the `VALUE` argument holds the\n`NUMBER`-th command line argument. If `VALUE` can not hold the argument, it is\ntruncated to fit the length of `VALUE`. If there are less than `NUMBER`\narguments specified at the command line, `VALUE` will be filled with blanks. \nIf `NUMBER` = 0, `VALUE` is set to the name of the program (on\nsystems that support this feature). The `LENGTH` argument contains the\nlength of the `NUMBER`-th command line argument. If the argument retrieval\nfails, `STATUS` is a positive number; if `VALUE` contains a truncated\ncommand line argument, `STATUS` is -1; and otherwise the `STATUS` is\nzero.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_get_command_argument\n\n  INTEGER :: i\n\n  CHARACTER(len=32) :: arg\n\n\n  i = 0\n\n  DO\n\n    CALL get_command_argument(i, arg)\n\n    IF (LEN_TRIM(arg) == 0) EXIT\n\n\n    WRITE (*,*) TRIM(arg)\n\n    i = i+1\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_COMMAND, COMMAND_ARGUMENT_COUNT\n" + "docstr":"`GET_COMMAND_ARGUMENT` — Get command line arguments\n\n### Description\nRetrieve the `NUMBER`-th argument that was passed on the\ncommand line when the containing program was invoked.\n\n\n\n### Syntax\n`CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])`\n\n\n### Arguments\n\n \n and of\ndefault kind, `NUMBER` \\geq 0\n\n | `VALUE` | (Optional) Shall be a scalar of type `CHARACTER`and of default kind. \n\n | `LENGTH` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `STATUS` | (Optional) Shall be a scalar of type `INTEGER`and of default kind.\n\n\n\n\n\n\n### Return value\nAfter `GET_COMMAND_ARGUMENT` returns, the `VALUE` argument holds the\n`NUMBER`-th command line argument. If `VALUE` can not hold the argument, it is\ntruncated to fit the length of `VALUE`. If there are less than `NUMBER`\narguments specified at the command line, `VALUE` will be filled with blanks. \nIf `NUMBER` = 0, `VALUE` is set to the name of the program (on\nsystems that support this feature). The `LENGTH` argument contains the\nlength of the `NUMBER`-th command line argument. If the argument retrieval\nfails, `STATUS` is a positive number; if `VALUE` contains a truncated\ncommand line argument, `STATUS` is -1; and otherwise the `STATUS` is\nzero.\n\n\n\n### Example\n```\n\n\nPROGRAM test_get_command_argument\n\n  INTEGER :: i\n\n  CHARACTER(len=32) :: arg\n\n\n  i = 0\n\n  DO\n\n    CALL get_command_argument(i, arg)\n\n    IF (LEN_TRIM(arg) == 0) EXIT\n\n\n    WRITE (*,*) TRIM(arg)\n\n    i = i+1\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_COMMAND, COMMAND_ARGUMENT_COUNT\n" } \ No newline at end of file diff --git a/src/docs/GET_ENVIRONMENT_VARIABLE.json b/src/docs/GET_ENVIRONMENT_VARIABLE.json index 63c0e767..1de9f87d 100644 --- a/src/docs/GET_ENVIRONMENT_VARIABLE.json +++ b/src/docs/GET_ENVIRONMENT_VARIABLE.json @@ -1,4 +1,4 @@ { "keyword":"GET_ENVIRONMENT_VARIABLE", - "docstr":"`GET_ENVIRONMENT_VARIABLE` — Get an environmental variable\n\n### Description\nGet the `VALUE` of the environmental variable `NAME`.\n\n \nNote that `GET_ENVIRONMENT_VARIABLE` need not be thread-safe. It\nis the responsibility of the user to ensure that the environment is\nnot being updated concurrently with a call to the\n`GET_ENVIRONMENT_VARIABLE` intrinsic.\n\n\n\n\n### Syntax\n`CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)`\n\n\n### Arguments\n\n \n\nand of default kind. \n\n | `VALUE` | (Optional) Shall be a scalar of type `CHARACTER`and of default kind. \n\n | `LENGTH` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `STATUS` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `TRIM_NAME` | (Optional) Shall be a scalar of type `LOGICAL`and of default kind.\n\n\n\n\n\n\n### Return value\nStores the value of `NAME` in `VALUE`. If `VALUE` is\nnot large enough to hold the data, it is truncated. If `NAME`\nis not set, `VALUE` will be filled with blanks. Argument `LENGTH`\ncontains the length needed for storing the environment variable `NAME`\nor zero if it is not present. `STATUS` is -1 if `VALUE` is present\nbut too short for the environment variable; it is 1 if the environment\nvariable does not exist and 2 if the processor does not support environment\nvariables; in all other cases `STATUS` is zero. If `TRIM_NAME` is\npresent with the value `.FALSE.`, the trailing blanks in `NAME`\nare significant; otherwise they are not part of the environment variable\nname.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_getenv\n\n  CHARACTER(len=255) :: homedir\n\n  CALL get_environment_variable(\"HOME\", homedir)\n\n  WRITE (*,*) TRIM(homedir)\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n" + "docstr":"`GET_ENVIRONMENT_VARIABLE` — Get an environmental variable\n\n### Description\nGet the `VALUE` of the environmental variable `NAME`.\n\n \nNote that `GET_ENVIRONMENT_VARIABLE` need not be thread-safe. It\nis the responsibility of the user to ensure that the environment is\nnot being updated concurrently with a call to the\n`GET_ENVIRONMENT_VARIABLE` intrinsic.\n\n\n\n\n### Syntax\n`CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)`\n\n\n### Arguments\n\n \n\nand of default kind. \n\n | `VALUE` | (Optional) Shall be a scalar of type `CHARACTER`and of default kind. \n\n | `LENGTH` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `STATUS` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `TRIM_NAME` | (Optional) Shall be a scalar of type `LOGICAL`and of default kind.\n\n\n\n\n\n\n### Return value\nStores the value of `NAME` in `VALUE`. If `VALUE` is\nnot large enough to hold the data, it is truncated. If `NAME`\nis not set, `VALUE` will be filled with blanks. Argument `LENGTH`\ncontains the length needed for storing the environment variable `NAME`\nor zero if it is not present. `STATUS` is -1 if `VALUE` is present\nbut too short for the environment variable; it is 1 if the environment\nvariable does not exist and 2 if the processor does not support environment\nvariables; in all other cases `STATUS` is zero. If `TRIM_NAME` is\npresent with the value `.FALSE.`, the trailing blanks in `NAME`\nare significant; otherwise they are not part of the environment variable\nname.\n\n\n\n### Example\n```\n\n\nPROGRAM test_getenv\n\n  CHARACTER(len=255) :: homedir\n\n  CALL get_environment_variable(\"HOME\", homedir)\n\n  WRITE (*,*) TRIM(homedir)\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n" } \ No newline at end of file diff --git a/src/docs/HUGE.json b/src/docs/HUGE.json index 9f4e109a..07805da8 100644 --- a/src/docs/HUGE.json +++ b/src/docs/HUGE.json @@ -1,4 +1,4 @@ { "keyword":"HUGE", - "docstr":"`HUGE` — Largest number of a kind\n\n### Description\n`HUGE(X)` returns the largest number that is not an infinity in\nthe model of the type of `X`.\n\n\n\n### Syntax\n`RESULT = HUGE(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`\n\n\n\n### Example\n\n ```\n\n\nprogram test_huge_tiny\n\n  print *, huge(0), huge(0.0), huge(0.0d0)\n\n  print *, tiny(0.0), tiny(0.0d0)\n\nend program test_huge_tiny\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`HUGE` — Largest number of a kind\n\n### Description\n`HUGE(X)` returns the largest number that is not an infinity in\nthe model of the type of `X`.\n\n\n\n### Syntax\n`RESULT = HUGE(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`\n\n\n\n### Example\n```\n\n\nprogram test_huge_tiny\n\n  print *, huge(0), huge(0.0), huge(0.0d0)\n\n  print *, tiny(0.0), tiny(0.0d0)\n\nend program test_huge_tiny\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/HYPOT.json b/src/docs/HYPOT.json index d42b298c..d2668915 100644 --- a/src/docs/HYPOT.json +++ b/src/docs/HYPOT.json @@ -1,4 +1,4 @@ { "keyword":"HYPOT", - "docstr":"`HYPOT` — Euclidean distance function\n\n### Description\n`HYPOT(X,Y)` is the Euclidean distance function. It is equal to\n\\sqrtX^2 + Y^2, without undue underflow or overflow.\n\n\n\n### Syntax\n`RESULT = HYPOT(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type and kind type parameter shall be the same as\n`X`.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind type parameter as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_hypot\n\n  real(4) :: x = 1.e0_4, y = 0.5e0_4\n\n  x = hypot(x,y)\n\nend program test_hypot\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`HYPOT` — Euclidean distance function\n\n### Description\n`HYPOT(X,Y)` is the Euclidean distance function. It is equal to\n\\sqrtX^2 + Y^2, without undue underflow or overflow.\n\n\n\n### Syntax\n`RESULT = HYPOT(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type and kind type parameter shall be the same as\n`X`.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind type parameter as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_hypot\n\n  real(4) :: x = 1.e0_4, y = 0.5e0_4\n\n  x = hypot(x,y)\n\nend program test_hypot\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/IACHAR.json b/src/docs/IACHAR.json index c1199a1d..4f770d11 100644 --- a/src/docs/IACHAR.json +++ b/src/docs/IACHAR.json @@ -1,4 +1,4 @@ { "keyword":"IACHAR", - "docstr":"`IACHAR` — Code in ASCII collating sequence\n\n### Description\n`IACHAR(C)` returns the code for the ASCII character\nin the first character position of `C`.\n\n\n\n### Syntax\n`RESULT = IACHAR(C [, KIND])`\n\n\n### Arguments\n\n \n\n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n\n ```\n\n\nprogram test_iachar\n\n  integer i\n\n  i = iachar(' ')\n\nend program test_iachar\n\n```\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, CHAR, ICHAR\n\n " + "docstr":"`IACHAR` — Code in ASCII collating sequence\n\n### Description\n`IACHAR(C)` returns the code for the ASCII character\nin the first character position of `C`.\n\n\n\n### Syntax\n`RESULT = IACHAR(C [, KIND])`\n\n\n### Arguments\n\n \n\n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nprogram test_iachar\n\n  integer i\n\n  i = iachar(' ')\n\nend program test_iachar\n\n```\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, CHAR, ICHAR\n\n " } \ No newline at end of file diff --git a/src/docs/IALL.json b/src/docs/IALL.json index e6ef0057..9a467314 100644 --- a/src/docs/IALL.json +++ b/src/docs/IALL.json @@ -1,4 +1,4 @@ { "keyword":"IALL", - "docstr":"`IALL` — Bitwise AND of array elements\n\n### Description\nReduces with bitwise AND the elements of `ARRAY` along dimension `DIM`\nif the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IALL(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise ALL of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_iall\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 00100000\n\n  PRINT '(b8.8)', IALL(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIANY, IPARITY, IAND\n" + "docstr":"`IALL` — Bitwise AND of array elements\n\n### Description\nReduces with bitwise AND the elements of `ARRAY` along dimension `DIM`\nif the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IALL(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise ALL of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_iall\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 00100000\n\n  PRINT '(b8.8)', IALL(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIANY, IPARITY, IAND\n" } \ No newline at end of file diff --git a/src/docs/IAND.json b/src/docs/IAND.json index b8c0a0d7..9b2e7193 100644 --- a/src/docs/IAND.json +++ b/src/docs/IAND.json @@ -1,4 +1,4 @@ { "keyword":"IAND", - "docstr":"`IAND` — Bitwise logical and\n\n### Description\nBitwise logical `AND`.\n\n\n\n### Syntax\n`RESULT = IAND(I, J)`\n\n\n### Arguments\n\n \n. \n\n | `J` | The type shall be `INTEGER`, of the same\nkind as `I`. (As a GNU extension, different kinds are also\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\narguments. (If the argument kinds differ, it is of the same kind as\nthe larger argument.)\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_iand\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n  WRITE (*,*) IAND(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIOR, IEOR, IBITS, IBSET, IBCLR, NOT\n\n " + "docstr":"`IAND` — Bitwise logical and\n\n### Description\nBitwise logical `AND`.\n\n\n\n### Syntax\n`RESULT = IAND(I, J)`\n\n\n### Arguments\n\n \n. \n\n | `J` | The type shall be `INTEGER`, of the same\nkind as `I`. (As a GNU extension, different kinds are also\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\narguments. (If the argument kinds differ, it is of the same kind as\nthe larger argument.)\n\n\n\n### Example\n```\n\n\nPROGRAM test_iand\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n  WRITE (*,*) IAND(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIOR, IEOR, IBITS, IBSET, IBCLR, NOT\n\n " } \ No newline at end of file diff --git a/src/docs/IANY.json b/src/docs/IANY.json index 0f0c57e7..768740d0 100644 --- a/src/docs/IANY.json +++ b/src/docs/IANY.json @@ -1,4 +1,4 @@ { "keyword":"IANY", - "docstr":"`IANY` — Bitwise OR of array elements\n\n### Description\nReduces with bitwise OR (inclusive or) the elements of `ARRAY` along\ndimension `DIM` if the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IANY(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise OR of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_iany\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 01101110\n\n  PRINT '(b8.8)', IANY(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIPARITY, IALL, IOR\n" + "docstr":"`IANY` — Bitwise OR of array elements\n\n### Description\nReduces with bitwise OR (inclusive or) the elements of `ARRAY` along\ndimension `DIM` if the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IANY(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise OR of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_iany\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 01101110\n\n  PRINT '(b8.8)', IANY(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIPARITY, IALL, IOR\n" } \ No newline at end of file diff --git a/src/docs/ICHAR.json b/src/docs/ICHAR.json index 075786b2..22bf2e64 100644 --- a/src/docs/ICHAR.json +++ b/src/docs/ICHAR.json @@ -1,4 +1,4 @@ { "keyword":"ICHAR", - "docstr":"`ICHAR` — Character-to-integer conversion function\n\n### Description\n`ICHAR(C)` returns the code for the character in the first character\nposition of `C` in the system's native character set. \nThe correspondence between characters and their codes is not necessarily\nthe same across different GNU Fortran implementations.\n\n\n\n### Syntax\n`RESULT = ICHAR(C [, KIND])`\n\n\n### Arguments\n\n \n\n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n\n ```\n\n\nprogram test_ichar\n\n  integer i\n\n  i = ichar(' ')\n\nend program test_ichar\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ICHAR(C)` | `CHARACTER C` | `INTEGER(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Notes\nNo intrinsic exists to convert between a numeric value and a formatted\ncharacter string representation – for instance, given the\n`CHARACTER` value `'154'`, obtaining an `INTEGER` or\n`REAL` value with the value 154, or vice versa. Instead, this\nfunctionality is provided by internal-file I/O, as in the following\nexample:\n
          program read_val\n            integer value\n            character(len=10) string, string2\n            string = '154'\n          \n            ! Convert a string to a numeric value\n            read (string,'(I10)') value\n            print *, value\n          \n            ! Convert a value to a formatted string\n            write (string2,'(I10)') value\n            print *, string2\n          end program read_val\n
\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, CHAR, IACHAR\n\n " + "docstr":"`ICHAR` — Character-to-integer conversion function\n\n### Description\n`ICHAR(C)` returns the code for the character in the first character\nposition of `C` in the system's native character set. \nThe correspondence between characters and their codes is not necessarily\nthe same across different GNU Fortran implementations.\n\n\n\n### Syntax\n`RESULT = ICHAR(C [, KIND])`\n\n\n### Arguments\n\n \n\n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nprogram test_ichar\n\n  integer i\n\n  i = ichar(' ')\n\nend program test_ichar\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ICHAR(C)` | `CHARACTER C` | `INTEGER(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Notes\nNo intrinsic exists to convert between a numeric value and a formatted\ncharacter string representation – for instance, given the\n`CHARACTER` value `'154'`, obtaining an `INTEGER` or\n`REAL` value with the value 154, or vice versa. Instead, this\nfunctionality is provided by internal-file I/O, as in the following\nexample:\n
          program read_val\n            integer value\n            character(len=10) string, string2\n            string = '154'\n          \n            ! Convert a string to a numeric value\n            read (string,'(I10)') value\n            print *, value\n          \n            ! Convert a value to a formatted string\n            write (string2,'(I10)') value\n            print *, string2\n          end program read_val\n
\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, CHAR, IACHAR\n\n " } \ No newline at end of file diff --git a/src/docs/IDATE.json b/src/docs/IDATE.json index 389ae849..8dff7722 100644 --- a/src/docs/IDATE.json +++ b/src/docs/IDATE.json @@ -1,4 +1,4 @@ { "keyword":"IDATE", - "docstr":"`IDATE` — Get current local time subroutine (day/month/year)\n\n### Description\n`IDATE(VALUES)` Fills `VALUES` with the numerical values at the\ncurrent local time. The day (in the range 1-31), month (in the range 1-12),\nand year appear in elements 1, 2, and 3 of `VALUES`, respectively. \nThe year has four significant digits.\n\n\n\n### Syntax\n`CALL IDATE(VALUES)`\n\n\n### Arguments\n\n \n and\nthe kind shall be the default integer kind.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\n\n ```\n\n\nprogram test_idate\n\n  integer, dimension(3) :: tarray\n\n  call idate(tarray)\n\n  print *, tarray(1)\n\n  print *, tarray(2)\n\n  print *, tarray(3)\n\nend program test_idate\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" + "docstr":"`IDATE` — Get current local time subroutine (day/month/year)\n\n### Description\n`IDATE(VALUES)` Fills `VALUES` with the numerical values at the\ncurrent local time. The day (in the range 1-31), month (in the range 1-12),\nand year appear in elements 1, 2, and 3 of `VALUES`, respectively. \nThe year has four significant digits.\n\n\n\n### Syntax\n`CALL IDATE(VALUES)`\n\n\n### Arguments\n\n \n and\nthe kind shall be the default integer kind.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\n```\n\n\nprogram test_idate\n\n  integer, dimension(3) :: tarray\n\n  call idate(tarray)\n\n  print *, tarray(1)\n\n  print *, tarray(2)\n\n  print *, tarray(3)\n\nend program test_idate\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" } \ No newline at end of file diff --git a/src/docs/IMAGE_INDEX.json b/src/docs/IMAGE_INDEX.json index f93e5731..ee31d82f 100644 --- a/src/docs/IMAGE_INDEX.json +++ b/src/docs/IMAGE_INDEX.json @@ -1,4 +1,4 @@ { "keyword":"IMAGE_INDEX", - "docstr":"`IMAGE_INDEX` — Function that converts a cosubscript to an image index\n\n### Description\nReturns the image index belonging to a cosubscript.\n\n\n\n### Syntax\n`RESULT = IMAGE_INDEX(COARRAY, SUB)`\n\n\n### Return value\nScalar default integer with the value of the image index which corresponds\nto the cosubscripts. For invalid cosubscripts the result is zero.\n\n\n\n### Example\n\n ```\n\n\nINTEGER :: array[2,-1:4,8,*]\n\n! Writes 28 (or 0 if there are fewer than 28 images)\n\nWRITE (*,*) IMAGE_INDEX (array, [2,0,3,1])\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nInquiry function.\n\n\n\n### See also\nTHIS_IMAGE, NUM_IMAGES\n" + "docstr":"`IMAGE_INDEX` — Function that converts a cosubscript to an image index\n\n### Description\nReturns the image index belonging to a cosubscript.\n\n\n\n### Syntax\n`RESULT = IMAGE_INDEX(COARRAY, SUB)`\n\n\n### Return value\nScalar default integer with the value of the image index which corresponds\nto the cosubscripts. For invalid cosubscripts the result is zero.\n\n\n\n### Example\n```\n\n\nINTEGER :: array[2,-1:4,8,*]\n\n! Writes 28 (or 0 if there are fewer than 28 images)\n\nWRITE (*,*) IMAGE_INDEX (array, [2,0,3,1])\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nInquiry function.\n\n\n\n### See also\nTHIS_IMAGE, NUM_IMAGES\n" } \ No newline at end of file diff --git a/src/docs/INT.json b/src/docs/INT.json index 91c36ea0..26432ada 100644 --- a/src/docs/INT.json +++ b/src/docs/INT.json @@ -1,4 +1,4 @@ { "keyword":"INT", - "docstr":"`INT` — Convert to integer type\n\n### Description\nConvert to integer type\n\n\n\n### Syntax\n`RESULT = INT(A [, KIND))`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `INTEGER` variable or array under\nthe following rules:\n\n
\n**(A)** If `A` is of type `INTEGER`, `INT(A) = A`\n**(B)** If `A` is of type `REAL` and |A| < 1, `INT(A)`equals `0`. If |A| \\geq 1, then `INT(A)` is the integer\nwhose magnitude is the largest integer that does not exceed the magnitude\nof `A` and whose sign is the same as the sign of `A`. \n\n**(C)** If `A` is of type `COMPLEX`, rule B is applied to the real part of `A`. \n\n
\n\n\n\n### Example\n\n ```\n\n\nprogram test_int\n\n  integer :: i = 42\n\n  complex :: z = (-3.7, 1.0)\n\n  print *, int(i)\n\n  print *, int(z), int(z,8)\n\nend program\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `INT(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IFIX(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IDINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`INT` — Convert to integer type\n\n### Description\nConvert to integer type\n\n\n\n### Syntax\n`RESULT = INT(A [, KIND))`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `INTEGER` variable or array under\nthe following rules:\n\n
\n**(A)** If `A` is of type `INTEGER`, `INT(A) = A`\n**(B)** If `A` is of type `REAL` and |A| < 1, `INT(A)`equals `0`. If |A| \\geq 1, then `INT(A)` is the integer\nwhose magnitude is the largest integer that does not exceed the magnitude\nof `A` and whose sign is the same as the sign of `A`. \n\n**(C)** If `A` is of type `COMPLEX`, rule B is applied to the real part of `A`. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_int\n\n  integer :: i = 42\n\n  complex :: z = (-3.7, 1.0)\n\n  print *, int(i)\n\n  print *, int(z), int(z,8)\n\nend program\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `INT(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IFIX(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IDINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/IPARITY.json b/src/docs/IPARITY.json index 64696cc6..89d0fda9 100644 --- a/src/docs/IPARITY.json +++ b/src/docs/IPARITY.json @@ -1,4 +1,4 @@ { "keyword":"IPARITY", - "docstr":"`IPARITY` — Bitwise XOR of array elements\n\n### Description\nReduces with bitwise XOR (exclusive or) the elements of `ARRAY` along\ndimension `DIM` if the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IPARITY(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise XOR of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_iparity\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 01001110\n\n  PRINT '(b8.8)', IPARITY(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIANY, IALL, IEOR, PARITY\n" + "docstr":"`IPARITY` — Bitwise XOR of array elements\n\n### Description\nReduces with bitwise XOR (exclusive or) the elements of `ARRAY` along\ndimension `DIM` if the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IPARITY(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise XOR of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_iparity\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 01001110\n\n  PRINT '(b8.8)', IPARITY(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIANY, IALL, IEOR, PARITY\n" } \ No newline at end of file diff --git a/src/docs/IRAND.json b/src/docs/IRAND.json index 6a86af51..eb1151ea 100644 --- a/src/docs/IRAND.json +++ b/src/docs/IRAND.json @@ -1,4 +1,4 @@ { "keyword":"IRAND", - "docstr":"`IRAND` — Integer pseudo-random number\n\n### Description\n`IRAND(FLAG)` returns a pseudo-random number from a uniform\ndistribution between 0 and a system-dependent limit (which is in most\ncases 2147483647). If `FLAG` is 0, the next number\nin the current sequence is returned; if `FLAG` is 1, the generator\nis restarted by `CALL SRAND(0)`; if `FLAG` has any other value,\nit is used as a new seed with `SRAND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. It implements a simple modulo generator as provided\nby *g77*. For new code, one should consider the use of\nRANDOM_NUMBER as it implements a superior algorithm.\n\n\n\n\n### Syntax\n`RESULT = IRAND(I)`\n\n\n### Arguments\n\n \n of kind 4.\n\n\n\n\n\n\n### Return value\nThe return value is of `INTEGER(kind=4)` type.\n\n\n\n### Example\n\n ```\n\n\nprogram test_irand\n\n  integer,parameter :: seed = 86456\n\n\n  call srand(seed)\n\n  print *, irand(), irand(), irand(), irand()\n\n  print *, irand(seed), irand(), irand(), irand()\n\nend program test_irand\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" + "docstr":"`IRAND` — Integer pseudo-random number\n\n### Description\n`IRAND(FLAG)` returns a pseudo-random number from a uniform\ndistribution between 0 and a system-dependent limit (which is in most\ncases 2147483647). If `FLAG` is 0, the next number\nin the current sequence is returned; if `FLAG` is 1, the generator\nis restarted by `CALL SRAND(0)`; if `FLAG` has any other value,\nit is used as a new seed with `SRAND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. It implements a simple modulo generator as provided\nby *g77*. For new code, one should consider the use of\nRANDOM_NUMBER as it implements a superior algorithm.\n\n\n\n\n### Syntax\n`RESULT = IRAND(I)`\n\n\n### Arguments\n\n \n of kind 4.\n\n\n\n\n\n\n### Return value\nThe return value is of `INTEGER(kind=4)` type.\n\n\n\n### Example\n```\n\n\nprogram test_irand\n\n  integer,parameter :: seed = 86456\n\n\n  call srand(seed)\n\n  print *, irand(), irand(), irand(), irand()\n\n  print *, irand(seed), irand(), irand(), irand()\n\nend program test_irand\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" } \ No newline at end of file diff --git a/src/docs/ISATTY.json b/src/docs/ISATTY.json index d71e8c3b..7dfee4de 100644 --- a/src/docs/ISATTY.json +++ b/src/docs/ISATTY.json @@ -1,4 +1,4 @@ { "keyword":"ISATTY", - "docstr":"`ISATTY` — Whether a unit is a terminal device.\n\n### Description\nDetermine whether a unit is connected to a terminal device.\n\n\n\n### Syntax\n`RESULT = ISATTY(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if the `UNIT` is connected to a terminal\ndevice, `.FALSE.` otherwise.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_isatty\n\n  INTEGER(kind=1) :: unit\n\n  DO unit = 1, 10\n\n    write(*,*) isatty(unit=unit)\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nTTYNAM\n" + "docstr":"`ISATTY` — Whether a unit is a terminal device.\n\n### Description\nDetermine whether a unit is connected to a terminal device.\n\n\n\n### Syntax\n`RESULT = ISATTY(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if the `UNIT` is connected to a terminal\ndevice, `.FALSE.` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM test_isatty\n\n  INTEGER(kind=1) :: unit\n\n  DO unit = 1, 10\n\n    write(*,*) isatty(unit=unit)\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nTTYNAM\n" } \ No newline at end of file diff --git a/src/docs/ISNAN.json b/src/docs/ISNAN.json index b6c6ac0a..8675df51 100644 --- a/src/docs/ISNAN.json +++ b/src/docs/ISNAN.json @@ -1,4 +1,4 @@ { "keyword":"ISNAN", - "docstr":"`ISNAN` — Test for a NaN\n\n### Description\n`ISNAN` tests whether a floating-point value is an IEEE\nNot-a-Number (NaN). \n\n\n### Syntax\n`ISNAN(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n\n### Return value\nReturns a default-kind `LOGICAL`. The returned value is `TRUE`if `X` is a NaN and `FALSE` otherwise.\n\n\n\n### Example\n\n ```\n\n\nprogram test_nan\n\n  implicit none\n\n  real :: x\n\n  x = -1.0\n\n  x = sqrt(x)\n\n  if (isnan(x)) stop '\"x\" is a NaN'\n\nend program test_nan\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`ISNAN` — Test for a NaN\n\n### Description\n`ISNAN` tests whether a floating-point value is an IEEE\nNot-a-Number (NaN). \n\n\n### Syntax\n`ISNAN(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n\n### Return value\nReturns a default-kind `LOGICAL`. The returned value is `TRUE`if `X` is a NaN and `FALSE` otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_nan\n\n  implicit none\n\n  real :: x\n\n  x = -1.0\n\n  x = sqrt(x)\n\n  if (isnan(x)) stop '\"x\" is a NaN'\n\nend program test_nan\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/IS_IOSTAT_END.json b/src/docs/IS_IOSTAT_END.json index 457b97b6..5fb63139 100644 --- a/src/docs/IS_IOSTAT_END.json +++ b/src/docs/IS_IOSTAT_END.json @@ -1,4 +1,4 @@ { "keyword":"IS_IOSTAT_END", - "docstr":"`IS_IOSTAT_END` — Test for end-of-file value\n\n### Description\n`IS_IOSTAT_END` tests whether an variable has the value of the I/O\nstatus “end of file”. The function is equivalent to comparing the variable\nwith the `IOSTAT_END` parameter of the intrinsic module\n`ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`RESULT = IS_IOSTAT_END(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns a `LOGICAL` of the default kind, which `.TRUE.` if\n`I` has the value which indicates an end of file condition for\n`IOSTAT=` specifiers, and is `.FALSE.` otherwise.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM iostat\n\n  IMPLICIT NONE\n\n  INTEGER :: stat, i\n\n  OPEN(88, FILE='test.dat')\n\n  READ(88, *, IOSTAT=stat) i\n\n  IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE'\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`IS_IOSTAT_END` — Test for end-of-file value\n\n### Description\n`IS_IOSTAT_END` tests whether an variable has the value of the I/O\nstatus “end of file”. The function is equivalent to comparing the variable\nwith the `IOSTAT_END` parameter of the intrinsic module\n`ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`RESULT = IS_IOSTAT_END(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns a `LOGICAL` of the default kind, which `.TRUE.` if\n`I` has the value which indicates an end of file condition for\n`IOSTAT=` specifiers, and is `.FALSE.` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM iostat\n\n  IMPLICIT NONE\n\n  INTEGER :: stat, i\n\n  OPEN(88, FILE='test.dat')\n\n  READ(88, *, IOSTAT=stat) i\n\n  IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE'\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/IS_IOSTAT_EOR.json b/src/docs/IS_IOSTAT_EOR.json index 0497f8ac..415c68e6 100644 --- a/src/docs/IS_IOSTAT_EOR.json +++ b/src/docs/IS_IOSTAT_EOR.json @@ -1,4 +1,4 @@ { "keyword":"IS_IOSTAT_EOR", - "docstr":"`IS_IOSTAT_EOR` — Test for end-of-record value\n\n### Description\n`IS_IOSTAT_EOR` tests whether an variable has the value of the I/O\nstatus “end of record”. The function is equivalent to comparing the\nvariable with the `IOSTAT_EOR` parameter of the intrinsic module\n`ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`RESULT = IS_IOSTAT_EOR(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns a `LOGICAL` of the default kind, which `.TRUE.` if\n`I` has the value which indicates an end of file condition for\n`IOSTAT=` specifiers, and is `.FALSE.` otherwise.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM iostat\n\n  IMPLICIT NONE\n\n  INTEGER :: stat, i(50)\n\n  OPEN(88, FILE='test.dat', FORM='UNFORMATTED')\n\n  READ(88, IOSTAT=stat) i\n\n  IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD'\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`IS_IOSTAT_EOR` — Test for end-of-record value\n\n### Description\n`IS_IOSTAT_EOR` tests whether an variable has the value of the I/O\nstatus “end of record”. The function is equivalent to comparing the\nvariable with the `IOSTAT_EOR` parameter of the intrinsic module\n`ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`RESULT = IS_IOSTAT_EOR(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns a `LOGICAL` of the default kind, which `.TRUE.` if\n`I` has the value which indicates an end of file condition for\n`IOSTAT=` specifiers, and is `.FALSE.` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM iostat\n\n  IMPLICIT NONE\n\n  INTEGER :: stat, i(50)\n\n  OPEN(88, FILE='test.dat', FORM='UNFORMATTED')\n\n  READ(88, IOSTAT=stat) i\n\n  IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD'\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/ITIME.json b/src/docs/ITIME.json index 000cc96f..0508b494 100644 --- a/src/docs/ITIME.json +++ b/src/docs/ITIME.json @@ -1,4 +1,4 @@ { "keyword":"ITIME", - "docstr":"`ITIME` — Get current local time subroutine (hour/minutes/seconds)\n\n### Description\n`IDATE(VALUES)` Fills `VALUES` with the numerical values at the\ncurrent local time. The hour (in the range 1-24), minute (in the range 1-60),\nand seconds (in the range 1-60) appear in elements 1, 2, and 3 of `VALUES`,\nrespectively.\n\n\n\n### Syntax\n`CALL ITIME(VALUES)`\n\n\n### Arguments\n\n \n\nand the kind shall be the default integer kind.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\n\n ```\n\n\nprogram test_itime\n\n  integer, dimension(3) :: tarray\n\n  call itime(tarray)\n\n  print *, tarray(1)\n\n  print *, tarray(2)\n\n  print *, tarray(3)\n\nend program test_itime\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" + "docstr":"`ITIME` — Get current local time subroutine (hour/minutes/seconds)\n\n### Description\n`IDATE(VALUES)` Fills `VALUES` with the numerical values at the\ncurrent local time. The hour (in the range 1-24), minute (in the range 1-60),\nand seconds (in the range 1-60) appear in elements 1, 2, and 3 of `VALUES`,\nrespectively.\n\n\n\n### Syntax\n`CALL ITIME(VALUES)`\n\n\n### Arguments\n\n \n\nand the kind shall be the default integer kind.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\n```\n\n\nprogram test_itime\n\n  integer, dimension(3) :: tarray\n\n  call itime(tarray)\n\n  print *, tarray(1)\n\n  print *, tarray(2)\n\n  print *, tarray(3)\n\nend program test_itime\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" } \ No newline at end of file diff --git a/src/docs/KIND.json b/src/docs/KIND.json index 23298543..6449d517 100644 --- a/src/docs/KIND.json +++ b/src/docs/KIND.json @@ -1,4 +1,4 @@ { "keyword":"KIND", - "docstr":"`KIND` — Kind of an entity\n\n### Description\n`KIND(X)` returns the kind value of the entity `X`.\n\n\n\n### Syntax\n`K = KIND(X)`\n\n\n### Arguments\n\n \n,\n`REAL`, `COMPLEX` or `CHARACTER`.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `INTEGER` and of the default\ninteger kind.\n\n\n\n### Example\n\n ```\n\n\nprogram test_kind\n\n  integer,parameter :: kc = kind(' ')\n\n  integer,parameter :: kl = kind(.true.)\n\n\n  print *, \"The default character kind is \", kc\n\n  print *, \"The default logical kind is \", kl\n\nend program test_kind\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`KIND` — Kind of an entity\n\n### Description\n`KIND(X)` returns the kind value of the entity `X`.\n\n\n\n### Syntax\n`K = KIND(X)`\n\n\n### Arguments\n\n \n,\n`REAL`, `COMPLEX` or `CHARACTER`.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `INTEGER` and of the default\ninteger kind.\n\n\n\n### Example\n```\n\n\nprogram test_kind\n\n  integer,parameter :: kc = kind(' ')\n\n  integer,parameter :: kl = kind(.true.)\n\n\n  print *, \"The default character kind is \", kc\n\n  print *, \"The default logical kind is \", kl\n\nend program test_kind\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/LEADZ.json b/src/docs/LEADZ.json index a37ea31e..870799b9 100644 --- a/src/docs/LEADZ.json +++ b/src/docs/LEADZ.json @@ -1,4 +1,4 @@ { "keyword":"LEADZ", - "docstr":"`LEADZ` — Number of leading zero bits of an integer\n\n### Description\n`LEADZ` returns the number of leading zero bits of an integer.\n\n\n\n### Syntax\n`RESULT = LEADZ(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe type of the return value is the default `INTEGER`. \nIf all the bits of `I` are zero, the result value is `BIT_SIZE(I)`.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_leadz\n\n  WRITE (*,*) BIT_SIZE(1) ! prints 32\n\n  WRITE (*,*) LEADZ(1) ! prints 31\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, TRAILZ, POPCNT, POPPAR\n" + "docstr":"`LEADZ` — Number of leading zero bits of an integer\n\n### Description\n`LEADZ` returns the number of leading zero bits of an integer.\n\n\n\n### Syntax\n`RESULT = LEADZ(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe type of the return value is the default `INTEGER`. \nIf all the bits of `I` are zero, the result value is `BIT_SIZE(I)`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_leadz\n\n  WRITE (*,*) BIT_SIZE(1) ! prints 32\n\n  WRITE (*,*) LEADZ(1) ! prints 31\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, TRAILZ, POPCNT, POPPAR\n" } \ No newline at end of file diff --git a/src/docs/LOC.json b/src/docs/LOC.json index bf349a43..52182449 100644 --- a/src/docs/LOC.json +++ b/src/docs/LOC.json @@ -1,4 +1,4 @@ { "keyword":"LOC", - "docstr":"`LOC` — Returns the address of a variable\n\n### Description\n`LOC(X)` returns the address of `X` as an integer.\n\n\n\n### Syntax\n`RESULT = LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Variable of any type.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`, with a `KIND`corresponding to the size (in bytes) of a memory address on the target\nmachine.\n\n\n\n### Example\n\n ```\n\n\nprogram test_loc\n\n  integer :: i\n\n  real :: r\n\n  i = loc(r)\n\n  print *, i\n\nend program test_loc\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`LOC` — Returns the address of a variable\n\n### Description\n`LOC(X)` returns the address of `X` as an integer.\n\n\n\n### Syntax\n`RESULT = LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Variable of any type.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`, with a `KIND`corresponding to the size (in bytes) of a memory address on the target\nmachine.\n\n\n\n### Example\n```\n\n\nprogram test_loc\n\n  integer :: i\n\n  real :: r\n\n  i = loc(r)\n\n  print *, i\n\nend program test_loc\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/LOG.json b/src/docs/LOG.json index 87833051..0455a6a9 100644 --- a/src/docs/LOG.json +++ b/src/docs/LOG.json @@ -1,4 +1,4 @@ { "keyword":"LOG", - "docstr":"`LOG` — Natural logarithm function\n\n### Description\n`LOG(X)` computes the natural logarithm of `X`, i.e. the\nlogarithm to the base e.\n\n\n\n### Syntax\n`RESULT = LOG(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`. \nIf `X` is `COMPLEX`, the imaginary part \\omega is in the range\n-\\pi < \\omega \\leq \\pi.\n\n\n\n### Example\n\n ```\n\n\nprogram test_log\n\n  real(8) :: x = 2.7182818284590451_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = log(x) ! will yield (approximately) 1\n\n  z = log(z)\n\nend program test_log\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG(X)` | `REAL(4) X` | `REAL(4)` | f95, gnu\n\n | `DLOG(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CLOG(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`LOG` — Natural logarithm function\n\n### Description\n`LOG(X)` computes the natural logarithm of `X`, i.e. the\nlogarithm to the base e.\n\n\n\n### Syntax\n`RESULT = LOG(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`. \nIf `X` is `COMPLEX`, the imaginary part \\omega is in the range\n-\\pi < \\omega \\leq \\pi.\n\n\n\n### Example\n```\n\n\nprogram test_log\n\n  real(8) :: x = 2.7182818284590451_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = log(x) ! will yield (approximately) 1\n\n  z = log(z)\n\nend program test_log\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG(X)` | `REAL(4) X` | `REAL(4)` | f95, gnu\n\n | `DLOG(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CLOG(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/LOG10.json b/src/docs/LOG10.json index d71d45a3..6c1dbc9d 100644 --- a/src/docs/LOG10.json +++ b/src/docs/LOG10.json @@ -1,4 +1,4 @@ { "keyword":"LOG10", - "docstr":"`LOG10` — Base 10 logarithm function\n\n### Description\n`LOG10(X)` computes the base 10 logarithm of `X`.\n\n\n\n### Syntax\n`RESULT = LOG10(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_log10\n\n  real(8) :: x = 10.0_8\n\n  x = log10(x)\n\nend program test_log10\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG10(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DLOG10(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`LOG10` — Base 10 logarithm function\n\n### Description\n`LOG10(X)` computes the base 10 logarithm of `X`.\n\n\n\n### Syntax\n`RESULT = LOG10(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_log10\n\n  real(8) :: x = 10.0_8\n\n  x = log10(x)\n\nend program test_log10\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG10(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DLOG10(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/LOG_GAMMA.json b/src/docs/LOG_GAMMA.json index 58444746..64802e72 100644 --- a/src/docs/LOG_GAMMA.json +++ b/src/docs/LOG_GAMMA.json @@ -1,4 +1,4 @@ { "keyword":"LOG_GAMMA", - "docstr":"`LOG_GAMMA` — Logarithm of the Gamma function\n\n### Description\n`LOG_GAMMA(X)` computes the natural logarithm of the absolute value\nof the Gamma (\\Gamma) function.\n\n\n\n### Syntax\n`X = LOG_GAMMA(X)`\n\n\n### Arguments\n\n \n and neither zero\nnor a negative integer.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` of the same kind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_log_gamma\n\n  real :: x = 1.0\n\n  x = lgamma(x) ! returns 0.0\n\nend program test_log_gamma\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGAMMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `ALGAMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `DLGAMA(X)` | `REAL(8) X` | `REAL(8)` | GNU Extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nGamma function: GAMMA\n\n " + "docstr":"`LOG_GAMMA` — Logarithm of the Gamma function\n\n### Description\n`LOG_GAMMA(X)` computes the natural logarithm of the absolute value\nof the Gamma (\\Gamma) function.\n\n\n\n### Syntax\n`X = LOG_GAMMA(X)`\n\n\n### Arguments\n\n \n and neither zero\nnor a negative integer.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` of the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_log_gamma\n\n  real :: x = 1.0\n\n  x = lgamma(x) ! returns 0.0\n\nend program test_log_gamma\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGAMMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `ALGAMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `DLGAMA(X)` | `REAL(8) X` | `REAL(8)` | GNU Extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nGamma function: GAMMA\n\n " } \ No newline at end of file diff --git a/src/docs/MAXEXPONENT.json b/src/docs/MAXEXPONENT.json index a171fe61..195923a8 100644 --- a/src/docs/MAXEXPONENT.json +++ b/src/docs/MAXEXPONENT.json @@ -1,4 +1,4 @@ { "keyword":"MAXEXPONENT", - "docstr":"`MAXEXPONENT` — Maximum exponent of a real kind\n\n### Description\n`MAXEXPONENT(X)` returns the maximum exponent in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = MAXEXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n\n ```\n\n\nprogram exponents\n\n  real(kind=4) :: x\n\n  real(kind=8) :: y\n\n\n  print *, minexponent(x), maxexponent(x)\n\n  print *, minexponent(y), maxexponent(y)\n\nend program exponents\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`MAXEXPONENT` — Maximum exponent of a real kind\n\n### Description\n`MAXEXPONENT(X)` returns the maximum exponent in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = MAXEXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram exponents\n\n  real(kind=4) :: x\n\n  real(kind=8) :: y\n\n\n  print *, minexponent(x), maxexponent(x)\n\n  print *, minexponent(y), maxexponent(y)\n\nend program exponents\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/MOD.json b/src/docs/MOD.json index 16cacc33..3680e687 100644 --- a/src/docs/MOD.json +++ b/src/docs/MOD.json @@ -1,4 +1,4 @@ { "keyword":"MOD", - "docstr":"`MOD` — Remainder function\n\n### Description\n`MOD(A,P)` computes the remainder of the division of A by P.\n\n\n\n### Syntax\n`RESULT = MOD(A, P)`\n\n\n### Arguments\n\n \n. \n\n | `P` | Shall be a scalar of the same type and kind as `A`\nand not equal to zero.\n\n\n\n\n\n\n### Return value\nThe return value is the result of `A - (INT(A/P) * P)`. The type\nand kind of the return value is the same as that of the arguments. The\nreturned value has the same sign as A and a magnitude less than the\nmagnitude of P.\n\n\n\n### Example\n\n ```\n\n\nprogram test_mod\n\n  print *, mod(17,3)\n\n  print *, mod(17.5,5.5)\n\n  print *, mod(17.5d0,5.5)\n\n  print *, mod(17.5,5.5d0)\n\n\n  print *, mod(-17,3)\n\n  print *, mod(-17.5,5.5)\n\n  print *, mod(-17.5d0,5.5)\n\n  print *, mod(-17.5,5.5d0)\n\n\n  print *, mod(17,-3)\n\n  print *, mod(17.5,-5.5)\n\n  print *, mod(17.5d0,-5.5)\n\n  print *, mod(17.5,-5.5d0)\n\nend program test_mod\n\n```\n\n\n\n### Specific names\n\n \n | Name | Arguments | Return type | Standard\n\n | `MOD(A,P)` | `INTEGER A,P` | `INTEGER` | Fortran 95 and later\n\n | `AMOD(A,P)` | `REAL(4) A,P` | `REAL(4)` | Fortran 95 and later\n\n | `DMOD(A,P)` | `REAL(8) A,P` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMODULO\n\n " + "docstr":"`MOD` — Remainder function\n\n### Description\n`MOD(A,P)` computes the remainder of the division of A by P.\n\n\n\n### Syntax\n`RESULT = MOD(A, P)`\n\n\n### Arguments\n\n \n. \n\n | `P` | Shall be a scalar of the same type and kind as `A`\nand not equal to zero.\n\n\n\n\n\n\n### Return value\nThe return value is the result of `A - (INT(A/P) * P)`. The type\nand kind of the return value is the same as that of the arguments. The\nreturned value has the same sign as A and a magnitude less than the\nmagnitude of P.\n\n\n\n### Example\n```\n\n\nprogram test_mod\n\n  print *, mod(17,3)\n\n  print *, mod(17.5,5.5)\n\n  print *, mod(17.5d0,5.5)\n\n  print *, mod(17.5,5.5d0)\n\n\n  print *, mod(-17,3)\n\n  print *, mod(-17.5,5.5)\n\n  print *, mod(-17.5d0,5.5)\n\n  print *, mod(-17.5,5.5d0)\n\n\n  print *, mod(17,-3)\n\n  print *, mod(17.5,-5.5)\n\n  print *, mod(17.5d0,-5.5)\n\n  print *, mod(17.5,-5.5d0)\n\nend program test_mod\n\n```\n\n\n\n### Specific names\n\n \n | Name | Arguments | Return type | Standard\n\n | `MOD(A,P)` | `INTEGER A,P` | `INTEGER` | Fortran 95 and later\n\n | `AMOD(A,P)` | `REAL(4) A,P` | `REAL(4)` | Fortran 95 and later\n\n | `DMOD(A,P)` | `REAL(8) A,P` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMODULO\n\n " } \ No newline at end of file diff --git a/src/docs/MODULO.json b/src/docs/MODULO.json index 06c58ed9..10f13a05 100644 --- a/src/docs/MODULO.json +++ b/src/docs/MODULO.json @@ -1,4 +1,4 @@ { "keyword":"MODULO", - "docstr":"`MODULO` — Modulo function\n\n### Description\n`MODULO(A,P)` computes the `A` modulo `P`.\n\n\n\n### Syntax\n`RESULT = MODULO(A, P)`\n\n\n### Arguments\n\n \n. \n\n | `P` | Shall be a scalar of the same type and kind as `A`. \nIt shall not be zero.\n\n\n\n\n\n\n### Return value\nThe type and kind of the result are those of the arguments.\n
\n**If `A` and `P` are of type `INTEGER`:** `MODULO(A,P)` has the value `R` such that `A=Q*P+R`, where\n`Q` is an integer and `R` is between 0 (inclusive) and `P`\n(exclusive). \n\n**If `A` and `P` are of type `REAL`:** `MODULO(A,P)` has the value of `A - FLOOR (A / P) * P`. \n\n
\n The returned value has the same sign as P and a magnitude less than\nthe magnitude of P.\n\n\n\n### Example\n\n ```\n\n\nprogram test_modulo\n\n  print *, modulo(17,3)\n\n  print *, modulo(17.5,5.5)\n\n\n  print *, modulo(-17,3)\n\n  print *, modulo(-17.5,5.5)\n\n\n  print *, modulo(17,-3)\n\n  print *, modulo(17.5,-5.5)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMOD\n\n " + "docstr":"`MODULO` — Modulo function\n\n### Description\n`MODULO(A,P)` computes the `A` modulo `P`.\n\n\n\n### Syntax\n`RESULT = MODULO(A, P)`\n\n\n### Arguments\n\n \n. \n\n | `P` | Shall be a scalar of the same type and kind as `A`. \nIt shall not be zero.\n\n\n\n\n\n\n### Return value\nThe type and kind of the result are those of the arguments.\n
\n**If `A` and `P` are of type `INTEGER`:** `MODULO(A,P)` has the value `R` such that `A=Q*P+R`, where\n`Q` is an integer and `R` is between 0 (inclusive) and `P`\n(exclusive). \n\n**If `A` and `P` are of type `REAL`:** `MODULO(A,P)` has the value of `A - FLOOR (A / P) * P`. \n\n
\n The returned value has the same sign as P and a magnitude less than\nthe magnitude of P.\n\n\n\n### Example\n```\n\n\nprogram test_modulo\n\n  print *, modulo(17,3)\n\n  print *, modulo(17.5,5.5)\n\n\n  print *, modulo(-17,3)\n\n  print *, modulo(-17.5,5.5)\n\n\n  print *, modulo(17,-3)\n\n  print *, modulo(17.5,-5.5)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMOD\n\n " } \ No newline at end of file diff --git a/src/docs/MOVE_ALLOC.json b/src/docs/MOVE_ALLOC.json index ed844c3a..aaeb902a 100644 --- a/src/docs/MOVE_ALLOC.json +++ b/src/docs/MOVE_ALLOC.json @@ -1,4 +1,4 @@ { "keyword":"MOVE_ALLOC", - "docstr":"`MOVE_ALLOC` — Move allocation from one object to another\n\n### Description\n`MOVE_ALLOC(FROM, TO)` moves the allocation from `FROM` to\n`TO`. `FROM` will become deallocated in the process.\n\n\n\n### Syntax\n`CALL MOVE_ALLOC(FROM, TO)`\n\n\n### Arguments\n\n \n, may be\nof any type and kind. \n\n | `TO` | `ALLOCATABLE`, `INTENT(OUT)`, shall be\nof the same type, kind and rank as `FROM`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n\n ```\n\n\nprogram test_move_alloc\n\n    integer, allocatable :: a(:), b(:)\n\n\n    allocate(a(3))\n\n    a = [ 1, 2, 3 ]\n\n    call move_alloc(a, b)\n\n    print *, allocated(a), allocated(b)\n\n    print *, b\n\nend program test_move_alloc\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nPure subroutine\n\n\n" + "docstr":"`MOVE_ALLOC` — Move allocation from one object to another\n\n### Description\n`MOVE_ALLOC(FROM, TO)` moves the allocation from `FROM` to\n`TO`. `FROM` will become deallocated in the process.\n\n\n\n### Syntax\n`CALL MOVE_ALLOC(FROM, TO)`\n\n\n### Arguments\n\n \n, may be\nof any type and kind. \n\n | `TO` | `ALLOCATABLE`, `INTENT(OUT)`, shall be\nof the same type, kind and rank as `FROM`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_move_alloc\n\n    integer, allocatable :: a(:), b(:)\n\n\n    allocate(a(3))\n\n    a = [ 1, 2, 3 ]\n\n    call move_alloc(a, b)\n\n    print *, allocated(a), allocated(b)\n\n    print *, b\n\nend program test_move_alloc\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nPure subroutine\n\n\n" } \ No newline at end of file diff --git a/src/docs/NEAREST.json b/src/docs/NEAREST.json index 6c69ed78..38f992d4 100644 --- a/src/docs/NEAREST.json +++ b/src/docs/NEAREST.json @@ -1,4 +1,4 @@ { "keyword":"NEAREST", - "docstr":"`NEAREST` — Nearest representable number\n\n### Description\n`NEAREST(X, S)` returns the processor-representable number nearest\nto `X` in the direction indicated by the sign of `S`.\n\n\n\n### Syntax\n`RESULT = NEAREST(X, S)`\n\n\n### Arguments\n\n \n. \n\n | `S` | Shall be of type `REAL` and\nnot equal to zero.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type as `X`. If `S` is\npositive, `NEAREST` returns the processor-representable number\ngreater than `X` and nearest to it. If `S` is negative,\n`NEAREST` returns the processor-representable number smaller than\n`X` and nearest to it.\n\n\n\n### Example\n\n ```\n\n\nprogram test_nearest\n\n  real :: x, y\n\n  x = nearest(42.0, 1.0)\n\n  y = nearest(42.0, -1.0)\n\n  write (*,\"(3(G20.15))\") x, y, x - y\n\nend program test_nearest\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`NEAREST` — Nearest representable number\n\n### Description\n`NEAREST(X, S)` returns the processor-representable number nearest\nto `X` in the direction indicated by the sign of `S`.\n\n\n\n### Syntax\n`RESULT = NEAREST(X, S)`\n\n\n### Arguments\n\n \n. \n\n | `S` | Shall be of type `REAL` and\nnot equal to zero.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type as `X`. If `S` is\npositive, `NEAREST` returns the processor-representable number\ngreater than `X` and nearest to it. If `S` is negative,\n`NEAREST` returns the processor-representable number smaller than\n`X` and nearest to it.\n\n\n\n### Example\n```\n\n\nprogram test_nearest\n\n  real :: x, y\n\n  x = nearest(42.0, 1.0)\n\n  y = nearest(42.0, -1.0)\n\n  write (*,\"(3(G20.15))\") x, y, x - y\n\nend program test_nearest\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/NEW_LINE.json b/src/docs/NEW_LINE.json index 4227e663..b8982ecc 100644 --- a/src/docs/NEW_LINE.json +++ b/src/docs/NEW_LINE.json @@ -1,4 +1,4 @@ { "keyword":"NEW_LINE", - "docstr":"`NEW_LINE` — New line character\n\n### Description\n`NEW_LINE(C)` returns the new-line character.\n\n\n\n### Syntax\n`RESULT = NEW_LINE(C)`\n\n\n### Arguments\n\n \n | `C` | The argument shall be a scalar or array of the\ntype `CHARACTER`.\n\n\n\n\n\n\n### Return value\nReturns a `CHARACTER` scalar of length one with the new-line character of\nthe same kind as parameter `C`.\n\n\n\n### Example\n\n ```\n\n\nprogram newline\n\n  implicit none\n\n  write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.'\n\nend program newline\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`NEW_LINE` — New line character\n\n### Description\n`NEW_LINE(C)` returns the new-line character.\n\n\n\n### Syntax\n`RESULT = NEW_LINE(C)`\n\n\n### Arguments\n\n \n | `C` | The argument shall be a scalar or array of the\ntype `CHARACTER`.\n\n\n\n\n\n\n### Return value\nReturns a `CHARACTER` scalar of length one with the new-line character of\nthe same kind as parameter `C`.\n\n\n\n### Example\n```\n\n\nprogram newline\n\n  implicit none\n\n  write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.'\n\nend program newline\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/NINT.json b/src/docs/NINT.json index aa1afbef..69999986 100644 --- a/src/docs/NINT.json +++ b/src/docs/NINT.json @@ -1,4 +1,4 @@ { "keyword":"NINT", - "docstr":"`NINT` — Nearest whole number\n\n### Description\n`NINT(A)` rounds its argument to the nearest whole number.\n\n\n\n### Syntax\n`RESULT = NINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nReturns `A` with the fractional portion of its magnitude eliminated by\nrounding to the nearest whole number and with its sign preserved,\nconverted to an `INTEGER` of the default kind.\n\n\n\n### Example\n\n ```\n\n\nprogram test_nint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, nint(x4), idnint(x8)\n\nend program test_nint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return Type | Standard\n\n | `NINT(A)` | `REAL(4) A` | `INTEGER` | Fortran 95 and later\n\n | `IDNINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 90 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCEILING, FLOOR\n\n " + "docstr":"`NINT` — Nearest whole number\n\n### Description\n`NINT(A)` rounds its argument to the nearest whole number.\n\n\n\n### Syntax\n`RESULT = NINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nReturns `A` with the fractional portion of its magnitude eliminated by\nrounding to the nearest whole number and with its sign preserved,\nconverted to an `INTEGER` of the default kind.\n\n\n\n### Example\n```\n\n\nprogram test_nint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, nint(x4), idnint(x8)\n\nend program test_nint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return Type | Standard\n\n | `NINT(A)` | `REAL(4) A` | `INTEGER` | Fortran 95 and later\n\n | `IDNINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 90 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCEILING, FLOOR\n\n " } \ No newline at end of file diff --git a/src/docs/NORM2.json b/src/docs/NORM2.json index 92ff50d8..48e536b5 100644 --- a/src/docs/NORM2.json +++ b/src/docs/NORM2.json @@ -1,4 +1,4 @@ { "keyword":"NORM2", - "docstr":"`NORM2` — Euclidean vector norms\n\n### Description\nCalculates the Euclidean vector norm (L_2 norm) of\nof `ARRAY` along dimension `DIM`.\n\n\n\n### Syntax\n\n \n\n\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the square root of the sum of all\nelements in `ARRAY` squared is returned. Otherwise, an array of\nrank n-1, where n equals the rank of `ARRAY`, and a\nshape similar to that of `ARRAY` with dimension `DIM` dropped\nis returned.\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_sum\n\n  REAL :: x(5) = [ real :: 1, 2, 3, 4, 5 ]\n\n  print *, NORM2(x) ! = sqrt(55.) ~ 7.416\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`NORM2` — Euclidean vector norms\n\n### Description\nCalculates the Euclidean vector norm (L_2 norm) of\nof `ARRAY` along dimension `DIM`.\n\n\n\n### Syntax\n\n \n\n\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the square root of the sum of all\nelements in `ARRAY` squared is returned. Otherwise, an array of\nrank n-1, where n equals the rank of `ARRAY`, and a\nshape similar to that of `ARRAY` with dimension `DIM` dropped\nis returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_sum\n\n  REAL :: x(5) = [ real :: 1, 2, 3, 4, 5 ]\n\n  print *, NORM2(x) ! = sqrt(55.) ~ 7.416\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/NULL.json b/src/docs/NULL.json index 1fa315a0..83ef2170 100644 --- a/src/docs/NULL.json +++ b/src/docs/NULL.json @@ -1,4 +1,4 @@ { "keyword":"NULL", - "docstr":"`NULL` — Function that returns an disassociated pointer\n\n### Description\nReturns a disassociated pointer.\n\n \nIf `MOLD` is present, a disassociated pointer of the same type is\nreturned, otherwise the type is determined by context.\n\n \n\nIn Fortran 95, `MOLD` is optional. Please note that Fortran 2003\nincludes cases where it is required.\n\n\n\n\n### Syntax\n`PTR => NULL([MOLD])`\n\n\n### Arguments\n\n \n | `MOLD` | (Optional) shall be a pointer of any association\nstatus and of any type.\n\n\n\n\n\n\n### Return value\nA disassociated pointer.\n\n\n\n### Example\n\n ```\n\n\nREAL, POINTER, DIMENSION(:) :: VEC => NULL ()\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nASSOCIATED\n" + "docstr":"`NULL` — Function that returns an disassociated pointer\n\n### Description\nReturns a disassociated pointer.\n\n \nIf `MOLD` is present, a disassociated pointer of the same type is\nreturned, otherwise the type is determined by context.\n\n \n\nIn Fortran 95, `MOLD` is optional. Please note that Fortran 2003\nincludes cases where it is required.\n\n\n\n\n### Syntax\n`PTR => NULL([MOLD])`\n\n\n### Arguments\n\n \n | `MOLD` | (Optional) shall be a pointer of any association\nstatus and of any type.\n\n\n\n\n\n\n### Return value\nA disassociated pointer.\n\n\n\n### Example\n```\n\n\nREAL, POINTER, DIMENSION(:) :: VEC => NULL ()\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nASSOCIATED\n" } \ No newline at end of file diff --git a/src/docs/NUM_IMAGES.json b/src/docs/NUM_IMAGES.json index bc9a5ef5..689f2af7 100644 --- a/src/docs/NUM_IMAGES.json +++ b/src/docs/NUM_IMAGES.json @@ -1,4 +1,4 @@ { "keyword":"NUM_IMAGES", - "docstr":"`NUM_IMAGES` — Function that returns the number of images\n\n### Description\nReturns the number of images.\n\n\n\n### Syntax\n`RESULT = NUM_IMAGES(DISTANCE, FAILED)`\n\n\n### Arguments\n\n \n | `DISTANCE` | (optional, intent(in)) Nonnegative scalar integer\n\n | `FAILED` | (optional, intent(in)) Scalar logical expression\n\n\n\n\n\n\n### Return value\nScalar default-kind integer. If `DISTANCE` is not present or has value 0,\nthe number of images in the current team is returned. For values smaller or\nequal distance to the initial team, it returns the number of images index\non the ancestor team which has a distance of `DISTANCE` from the invoking\nteam. If `DISTANCE` is larger than the distance to the initial team, the\nnumber of images of the initial team is returned. If `FAILED` is not present\nthe total number of images is returned; if it has the value `.TRUE.`,\nthe number of failed images is returned, otherwise, the number of images which\ndo have not the failed status.\n\n\n\n### Example\n\n ```\n\n\nINTEGER :: value[*]\n\nINTEGER :: i\n\nvalue = THIS_IMAGE()\n\nSYNC ALL\n\nIF (THIS_IMAGE() == 1) THEN\n\n  DO i = 1, NUM_IMAGES()\n\n    WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]\n\n  END DO\n\nEND IF\n\n```\n\n\n\n### Standard\nFortran 2008 and later. With `DISTANCE` or `FAILED` argument,\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nTHIS_IMAGE, IMAGE_INDEX\n" + "docstr":"`NUM_IMAGES` — Function that returns the number of images\n\n### Description\nReturns the number of images.\n\n\n\n### Syntax\n`RESULT = NUM_IMAGES(DISTANCE, FAILED)`\n\n\n### Arguments\n\n \n | `DISTANCE` | (optional, intent(in)) Nonnegative scalar integer\n\n | `FAILED` | (optional, intent(in)) Scalar logical expression\n\n\n\n\n\n\n### Return value\nScalar default-kind integer. If `DISTANCE` is not present or has value 0,\nthe number of images in the current team is returned. For values smaller or\nequal distance to the initial team, it returns the number of images index\non the ancestor team which has a distance of `DISTANCE` from the invoking\nteam. If `DISTANCE` is larger than the distance to the initial team, the\nnumber of images of the initial team is returned. If `FAILED` is not present\nthe total number of images is returned; if it has the value `.TRUE.`,\nthe number of failed images is returned, otherwise, the number of images which\ndo have not the failed status.\n\n\n\n### Example\n```\n\n\nINTEGER :: value[*]\n\nINTEGER :: i\n\nvalue = THIS_IMAGE()\n\nSYNC ALL\n\nIF (THIS_IMAGE() == 1) THEN\n\n  DO i = 1, NUM_IMAGES()\n\n    WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]\n\n  END DO\n\nEND IF\n\n```\n\n\n\n### Standard\nFortran 2008 and later. With `DISTANCE` or `FAILED` argument,\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nTHIS_IMAGE, IMAGE_INDEX\n" } \ No newline at end of file diff --git a/src/docs/OR.json b/src/docs/OR.json index f186d2ab..e71b8370 100644 --- a/src/docs/OR.json +++ b/src/docs/OR.json @@ -1,4 +1,4 @@ { "keyword":"OR", - "docstr":"`OR` — Bitwise logical OR\n\n### Description\nBitwise logical `OR`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IOR intrinsic defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = OR(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `J`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_or\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F)\n\n  WRITE (*,*) OR(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IOR\n" + "docstr":"`OR` — Bitwise logical OR\n\n### Description\nBitwise logical `OR`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IOR intrinsic defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = OR(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `J`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_or\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F)\n\n  WRITE (*,*) OR(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IOR\n" } \ No newline at end of file diff --git a/src/docs/PARITY.json b/src/docs/PARITY.json index 797ebdff..e4d8ede0 100644 --- a/src/docs/PARITY.json +++ b/src/docs/PARITY.json @@ -1,4 +1,4 @@ { "keyword":"PARITY", - "docstr":"`PARITY` — Reduction with exclusive OR\n\n### Description\nCalculates the parity, i.e. the reduction using `.XOR.`,\nof `MASK` along dimension `DIM`.\n\n\n\n### Syntax\n\n \n\n\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `MASK`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `MASK`.\n\n \nIf `DIM` is absent, a scalar with the parity of all elements in\n`MASK` is returned, i.e. true if an odd number of elements is\n`.true.` and false otherwise. If `DIM` is present, an array\nof rank n-1, where n equals the rank of `ARRAY`,\nand a shape similar to that of `MASK` with dimension `DIM`\ndropped is returned.\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_sum\n\n  LOGICAL :: x(2) = [ .true., .false. ]\n\n  print *, PARITY(x) ! prints \"T\" (true).\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`PARITY` — Reduction with exclusive OR\n\n### Description\nCalculates the parity, i.e. the reduction using `.XOR.`,\nof `MASK` along dimension `DIM`.\n\n\n\n### Syntax\n\n \n\n\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `MASK`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `MASK`.\n\n \nIf `DIM` is absent, a scalar with the parity of all elements in\n`MASK` is returned, i.e. true if an odd number of elements is\n`.true.` and false otherwise. If `DIM` is present, an array\nof rank n-1, where n equals the rank of `ARRAY`,\nand a shape similar to that of `MASK` with dimension `DIM`\ndropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_sum\n\n  LOGICAL :: x(2) = [ .true., .false. ]\n\n  print *, PARITY(x) ! prints \"T\" (true).\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/POPCNT.json b/src/docs/POPCNT.json index e2ff3c71..a3932c36 100644 --- a/src/docs/POPCNT.json +++ b/src/docs/POPCNT.json @@ -1,4 +1,4 @@ { "keyword":"POPCNT", - "docstr":"`POPCNT` — Number of bits set\n\n### Description\n`POPCNT(I)` returns the number of bits set ('1' bits) in the binary\nrepresentation of `I`.\n\n\n\n### Syntax\n`RESULT = POPCNT(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n\n ```\n\n\nprogram test_population\n\n  print *, popcnt(127), poppar(127)\n\n  print *, popcnt(huge(0_4)), poppar(huge(0_4))\n\n  print *, popcnt(huge(0_8)), poppar(huge(0_8))\n\nend program test_population\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nPOPPAR, LEADZ, TRAILZ\n\n\n" + "docstr":"`POPCNT` — Number of bits set\n\n### Description\n`POPCNT(I)` returns the number of bits set ('1' bits) in the binary\nrepresentation of `I`.\n\n\n\n### Syntax\n`RESULT = POPCNT(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram test_population\n\n  print *, popcnt(127), poppar(127)\n\n  print *, popcnt(huge(0_4)), poppar(huge(0_4))\n\n  print *, popcnt(huge(0_8)), poppar(huge(0_8))\n\nend program test_population\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nPOPPAR, LEADZ, TRAILZ\n\n\n" } \ No newline at end of file diff --git a/src/docs/POPPAR.json b/src/docs/POPPAR.json index d0fa7ded..d81c501c 100644 --- a/src/docs/POPPAR.json +++ b/src/docs/POPPAR.json @@ -1,4 +1,4 @@ { "keyword":"POPPAR", - "docstr":"`POPPAR` — Parity of the number of bits set\n\n### Description\n`POPPAR(I)` returns parity of the integer `I`, i.e. the parity\nof the number of bits set ('1' bits) in the binary representation of\n`I`. It is equal to 0 if `I` has an even number of bits set,\nand 1 for an odd number of '1' bits.\n\n\n\n### Syntax\n`RESULT = POPPAR(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n\n ```\n\n\nprogram test_population\n\n  print *, popcnt(127), poppar(127)\n\n  print *, popcnt(huge(0_4)), poppar(huge(0_4))\n\n  print *, popcnt(huge(0_8)), poppar(huge(0_8))\n\nend program test_population\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nPOPCNT, LEADZ, TRAILZ\n\n\n" + "docstr":"`POPPAR` — Parity of the number of bits set\n\n### Description\n`POPPAR(I)` returns parity of the integer `I`, i.e. the parity\nof the number of bits set ('1' bits) in the binary representation of\n`I`. It is equal to 0 if `I` has an even number of bits set,\nand 1 for an odd number of '1' bits.\n\n\n\n### Syntax\n`RESULT = POPPAR(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram test_population\n\n  print *, popcnt(127), poppar(127)\n\n  print *, popcnt(huge(0_4)), poppar(huge(0_4))\n\n  print *, popcnt(huge(0_8)), poppar(huge(0_8))\n\nend program test_population\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nPOPCNT, LEADZ, TRAILZ\n\n\n" } \ No newline at end of file diff --git a/src/docs/PRECISION.json b/src/docs/PRECISION.json index 502248ae..307b018f 100644 --- a/src/docs/PRECISION.json +++ b/src/docs/PRECISION.json @@ -1,4 +1,4 @@ { "keyword":"PRECISION", - "docstr":"`PRECISION` — Decimal precision of a real kind\n\n### Description\n`PRECISION(X)` returns the decimal precision in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = PRECISION(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n\n ```\n\n\nprogram prec_and_range\n\n  real(kind=4) :: x(2)\n\n  complex(kind=8) :: y\n\n\n  print *, precision(x), range(x)\n\n  print *, precision(y), range(y)\n\nend program prec_and_range\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND, RANGE\n\n\n" + "docstr":"`PRECISION` — Decimal precision of a real kind\n\n### Description\n`PRECISION(X)` returns the decimal precision in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = PRECISION(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram prec_and_range\n\n  real(kind=4) :: x(2)\n\n  complex(kind=8) :: y\n\n\n  print *, precision(x), range(x)\n\n  print *, precision(y), range(y)\n\nend program prec_and_range\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND, RANGE\n\n\n" } \ No newline at end of file diff --git a/src/docs/PRESENT.json b/src/docs/PRESENT.json index 77c3426d..79c83715 100644 --- a/src/docs/PRESENT.json +++ b/src/docs/PRESENT.json @@ -1,4 +1,4 @@ { "keyword":"PRESENT", - "docstr":"`PRESENT` — Determine whether an optional dummy argument is specified\n\n### Description\nDetermines whether an optional dummy argument is present.\n\n\n\n### Syntax\n`RESULT = PRESENT(A)`\n\n\n### Arguments\n\n \n | `A` | May be of any type and may be a pointer, scalar or array\nvalue, or a dummy procedure. It shall be the name of an optional dummy argument\naccessible within the current subroutine or function.\n\n\n\n\n\n\n### Return value\nReturns either `TRUE` if the optional argument `A` is present, or\n`FALSE` otherwise.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_present\n\n  WRITE(*,*) f(), f(42) ! \"F T\"\n\nCONTAINS\n\n  LOGICAL FUNCTION f(x)\n\n    INTEGER, INTENT(IN), OPTIONAL :: x\n\n    f = PRESENT(x)\n\n  END FUNCTION\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`PRESENT` — Determine whether an optional dummy argument is specified\n\n### Description\nDetermines whether an optional dummy argument is present.\n\n\n\n### Syntax\n`RESULT = PRESENT(A)`\n\n\n### Arguments\n\n \n | `A` | May be of any type and may be a pointer, scalar or array\nvalue, or a dummy procedure. It shall be the name of an optional dummy argument\naccessible within the current subroutine or function.\n\n\n\n\n\n\n### Return value\nReturns either `TRUE` if the optional argument `A` is present, or\n`FALSE` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM test_present\n\n  WRITE(*,*) f(), f(42) ! \"F T\"\n\nCONTAINS\n\n  LOGICAL FUNCTION f(x)\n\n    INTEGER, INTENT(IN), OPTIONAL :: x\n\n    f = PRESENT(x)\n\n  END FUNCTION\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/PRODUCT.json b/src/docs/PRODUCT.json index a41e9b3b..8867b2af 100644 --- a/src/docs/PRODUCT.json +++ b/src/docs/PRODUCT.json @@ -1,4 +1,4 @@ { "keyword":"PRODUCT", - "docstr":"`PRODUCT` — Product of array elements\n\n### Description\nMultiplies the elements of `ARRAY` along dimension `DIM` if\nthe corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = PRODUCT(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n,\n`REAL` or `COMPLEX`. \n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the product of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_product\n\n  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)\n\n  print *, PRODUCT(x) ! all elements, product = 120\n\n  print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nSUM\n" + "docstr":"`PRODUCT` — Product of array elements\n\n### Description\nMultiplies the elements of `ARRAY` along dimension `DIM` if\nthe corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = PRODUCT(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n,\n`REAL` or `COMPLEX`. \n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the product of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_product\n\n  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)\n\n  print *, PRODUCT(x) ! all elements, product = 120\n\n  print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nSUM\n" } \ No newline at end of file diff --git a/src/docs/RADIX.json b/src/docs/RADIX.json index 8c50ce96..0d5811a7 100644 --- a/src/docs/RADIX.json +++ b/src/docs/RADIX.json @@ -1,4 +1,4 @@ { "keyword":"RADIX", - "docstr":"`RADIX` — Base of a model number\n\n### Description\n`RADIX(X)` returns the base of the model representing the entity `X`.\n\n\n\n### Syntax\n`RESULT = RADIX(X)`\n\n\n### Arguments\n\n \n\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `INTEGER` and of the default\ninteger kind.\n\n\n\n### Example\n\n ```\n\n\nprogram test_radix\n\n  print *, \"The radix for the default integer kind is\", radix(0)\n\n  print *, \"The radix for the default real kind is\", radix(0.0)\n\nend program test_radix\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND\n\n\n" + "docstr":"`RADIX` — Base of a model number\n\n### Description\n`RADIX(X)` returns the base of the model representing the entity `X`.\n\n\n\n### Syntax\n`RESULT = RADIX(X)`\n\n\n### Arguments\n\n \n\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `INTEGER` and of the default\ninteger kind.\n\n\n\n### Example\n```\n\n\nprogram test_radix\n\n  print *, \"The radix for the default integer kind is\", radix(0)\n\n  print *, \"The radix for the default real kind is\", radix(0.0)\n\nend program test_radix\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND\n\n\n" } \ No newline at end of file diff --git a/src/docs/RAND.json b/src/docs/RAND.json index ea191416..0bccb4d2 100644 --- a/src/docs/RAND.json +++ b/src/docs/RAND.json @@ -1,4 +1,4 @@ { "keyword":"RAND", - "docstr":"`RAND` — Real pseudo-random number\n\n### Description\n`RAND(FLAG)` returns a pseudo-random number from a uniform\ndistribution between 0 and 1. If `FLAG` is 0, the next number\nin the current sequence is returned; if `FLAG` is 1, the generator\nis restarted by `CALL SRAND(0)`; if `FLAG` has any other value,\nit is used as a new seed with `SRAND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. It implements a simple modulo generator as provided\nby *g77*. For new code, one should consider the use of\nRANDOM_NUMBER as it implements a superior algorithm.\n\n\n\n\n### Syntax\n`RESULT = RAND(I)`\n\n\n### Arguments\n\n \n of kind 4.\n\n\n\n\n\n\n### Return value\nThe return value is of `REAL` type and the default kind.\n\n\n\n### Example\n\n ```\n\n\nprogram test_rand\n\n  integer,parameter :: seed = 86456\n\n\n  call srand(seed)\n\n  print *, rand(), rand(), rand(), rand()\n\n  print *, rand(seed), rand(), rand(), rand()\n\nend program test_rand\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nSRAND, RANDOM_NUMBER\n\n " + "docstr":"`RAND` — Real pseudo-random number\n\n### Description\n`RAND(FLAG)` returns a pseudo-random number from a uniform\ndistribution between 0 and 1. If `FLAG` is 0, the next number\nin the current sequence is returned; if `FLAG` is 1, the generator\nis restarted by `CALL SRAND(0)`; if `FLAG` has any other value,\nit is used as a new seed with `SRAND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. It implements a simple modulo generator as provided\nby *g77*. For new code, one should consider the use of\nRANDOM_NUMBER as it implements a superior algorithm.\n\n\n\n\n### Syntax\n`RESULT = RAND(I)`\n\n\n### Arguments\n\n \n of kind 4.\n\n\n\n\n\n\n### Return value\nThe return value is of `REAL` type and the default kind.\n\n\n\n### Example\n```\n\n\nprogram test_rand\n\n  integer,parameter :: seed = 86456\n\n\n  call srand(seed)\n\n  print *, rand(), rand(), rand(), rand()\n\n  print *, rand(seed), rand(), rand(), rand()\n\nend program test_rand\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nSRAND, RANDOM_NUMBER\n\n " } \ No newline at end of file diff --git a/src/docs/RANDOM_NUMBER.json b/src/docs/RANDOM_NUMBER.json index ce4c2c2e..817da88a 100644 --- a/src/docs/RANDOM_NUMBER.json +++ b/src/docs/RANDOM_NUMBER.json @@ -1,4 +1,4 @@ { "keyword":"RANDOM_NUMBER", - "docstr":"`RANDOM_NUMBER` — Pseudo-random number\n\n### Description\nReturns a single pseudorandom number or an array of pseudorandom numbers\nfrom the uniform distribution over the range 0 \\leq x < 1.\n\n \nThe runtime-library implements George Marsaglia's KISS (Keep It Simple\nStupid) random number generator (RNG). This RNG combines:\n \n
    \n
  1. The congruential generator x(n) = 69069 \\cdot x(n-1) + 1327217885\nwith a period of 2^32,\n
  2. A 3-shift shift-register generator with a period of 2^32 - 1,\n
  3. Two 16-bit multiply-with-carry generators with a period of\n597273182964842497 > 2^59.\n
\nThe overall period exceeds 2^123.\n\n \nPlease note, this RNG is thread safe if used within OpenMP directives,\ni.e., its state will be consistent while called from multiple threads. \nHowever, the KISS generator does not create random numbers in parallel\nfrom multiple sources, but in sequence from a single source. If an\nOpenMP-enabled application heavily relies on random numbers, one should\nconsider employing a dedicated parallel random number generator instead.\n\n\n\n\n### Syntax\n`RANDOM_NUMBER(HARVEST)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram test_random_number\n\n  REAL :: r(5,5)\n\n  CALL init_random_seed() ! see example of RANDOM_SEED\n\n  CALL RANDOM_NUMBER(r)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_SEED\n" + "docstr":"`RANDOM_NUMBER` — Pseudo-random number\n\n### Description\nReturns a single pseudorandom number or an array of pseudorandom numbers\nfrom the uniform distribution over the range 0 \\leq x < 1.\n\n \nThe runtime-library implements George Marsaglia's KISS (Keep It Simple\nStupid) random number generator (RNG). This RNG combines:\n \n
    \n
  1. The congruential generator x(n) = 69069 \\cdot x(n-1) + 1327217885\nwith a period of 2^32,\n
  2. A 3-shift shift-register generator with a period of 2^32 - 1,\n
  3. Two 16-bit multiply-with-carry generators with a period of\n597273182964842497 > 2^59.\n
\nThe overall period exceeds 2^123.\n\n \nPlease note, this RNG is thread safe if used within OpenMP directives,\ni.e., its state will be consistent while called from multiple threads. \nHowever, the KISS generator does not create random numbers in parallel\nfrom multiple sources, but in sequence from a single source. If an\nOpenMP-enabled application heavily relies on random numbers, one should\nconsider employing a dedicated parallel random number generator instead.\n\n\n\n\n### Syntax\n`RANDOM_NUMBER(HARVEST)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_random_number\n\n  REAL :: r(5,5)\n\n  CALL init_random_seed() ! see example of RANDOM_SEED\n\n  CALL RANDOM_NUMBER(r)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_SEED\n" } \ No newline at end of file diff --git a/src/docs/RANDOM_SEED.json b/src/docs/RANDOM_SEED.json index 6ba5ee97..2d37df0e 100644 --- a/src/docs/RANDOM_SEED.json +++ b/src/docs/RANDOM_SEED.json @@ -1,4 +1,4 @@ { "keyword":"RANDOM_SEED", - "docstr":"`RANDOM_SEED` — Initialize a pseudo-random number sequence\n\n### Description\nRestarts or queries the state of the pseudorandom number generator used by\n`RANDOM_NUMBER`.\n\n \nIf `RANDOM_SEED` is called without arguments, it is initialized\nto a default state. The example below shows how to initialize the\nrandom seed with a varying seed in order to ensure a different random\nnumber sequence for each invocation of the program. Note that setting\nany of the seed values to zero should be avoided as it can result in\npoor quality random numbers being generated.\n\n\n\n\n### Syntax\n`CALL RANDOM_SEED([SIZE, PUT, GET])`\n\n\n### Arguments\n\n \n | `SIZE` | (Optional) Shall be a scalar and of type default\n`INTEGER`, with `INTENT(OUT)`. It specifies the minimum size\nof the arrays used with the `PUT` and `GET` arguments. \n\n | `PUT` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(IN)` and the size of\nthe array must be larger than or equal to the number returned by the\n`SIZE` argument. \n\n | `GET` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(OUT)` and the size\nof the array must be larger than or equal to the number returned by\nthe `SIZE` argument.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nsubroutine init_random_seed()\n\n  use iso_fortran_env, only: int64\n\n  implicit none\n\n  integer, allocatable :: seed(:)\n\n  integer :: i, n, un, istat, dt(8), pid\n\n  integer(int64) :: t\n\n\n  call random_seed(size = n)\n\n  allocate(seed(n))\n\n  ! First try if the OS provides a random number generator\n\n  open(newunit=un, file=\"/dev/urandom\", access=\"stream\", &\n\n       form=\"unformatted\", action=\"read\", status=\"old\", iostat=istat)\n\n  if (istat == 0) then\n\n     read(un) seed\n\n     close(un)\n\n  else\n\n     ! Fallback to XOR:ing the current time and pid. The PID is\n\n     ! useful in case one launches multiple instances of the same\n\n     ! program in parallel.\n\n     call system_clock(t)\n\n     if (t == 0) then\n\n        call date_and_time(values=dt)\n\n        t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(3) * 24_int64 * 60 * 60 * 1000 &\n\n             + dt(5) * 60 * 60 * 1000 &\n\n             + dt(6) * 60 * 1000 + dt(7) * 1000 &\n\n             + dt(8)\n\n     end if\n\n     pid = getpid()\n\n     t = ieor(t, int(pid, kind(t)))\n\n     do i = 1, n\n\n        seed(i) = lcg(t)\n\n     end do\n\n  end if\n\n  call random_seed(put=seed)\n\ncontains\n\n  ! This simple PRNG might not be good enough for real work, but is\n\n  ! sufficient for seeding a better PRNG.\n\n  function lcg(s)\n\n    integer :: lcg\n\n    integer(int64) :: s\n\n    if (s == 0) then\n\n       s = 104729\n\n    else\n\n       s = mod(s, 4294967296_int64)\n\n    end if\n\n    s = mod(s * 279470273_int64, 4294967291_int64)\n\n    lcg = int(mod(s, int(huge(0), int64)), kind(0))\n\n  end function lcg\n\nend subroutine init_random_seed\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_NUMBER\n" + "docstr":"`RANDOM_SEED` — Initialize a pseudo-random number sequence\n\n### Description\nRestarts or queries the state of the pseudorandom number generator used by\n`RANDOM_NUMBER`.\n\n \nIf `RANDOM_SEED` is called without arguments, it is initialized\nto a default state. The example below shows how to initialize the\nrandom seed with a varying seed in order to ensure a different random\nnumber sequence for each invocation of the program. Note that setting\nany of the seed values to zero should be avoided as it can result in\npoor quality random numbers being generated.\n\n\n\n\n### Syntax\n`CALL RANDOM_SEED([SIZE, PUT, GET])`\n\n\n### Arguments\n\n \n | `SIZE` | (Optional) Shall be a scalar and of type default\n`INTEGER`, with `INTENT(OUT)`. It specifies the minimum size\nof the arrays used with the `PUT` and `GET` arguments. \n\n | `PUT` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(IN)` and the size of\nthe array must be larger than or equal to the number returned by the\n`SIZE` argument. \n\n | `GET` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(OUT)` and the size\nof the array must be larger than or equal to the number returned by\nthe `SIZE` argument.\n\n\n\n\n\n\n### Example\n```\n\n\nsubroutine init_random_seed()\n\n  use iso_fortran_env, only: int64\n\n  implicit none\n\n  integer, allocatable :: seed(:)\n\n  integer :: i, n, un, istat, dt(8), pid\n\n  integer(int64) :: t\n\n\n  call random_seed(size = n)\n\n  allocate(seed(n))\n\n  ! First try if the OS provides a random number generator\n\n  open(newunit=un, file=\"/dev/urandom\", access=\"stream\", &\n\n       form=\"unformatted\", action=\"read\", status=\"old\", iostat=istat)\n\n  if (istat == 0) then\n\n     read(un) seed\n\n     close(un)\n\n  else\n\n     ! Fallback to XOR:ing the current time and pid. The PID is\n\n     ! useful in case one launches multiple instances of the same\n\n     ! program in parallel.\n\n     call system_clock(t)\n\n     if (t == 0) then\n\n        call date_and_time(values=dt)\n\n        t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(3) * 24_int64 * 60 * 60 * 1000 &\n\n             + dt(5) * 60 * 60 * 1000 &\n\n             + dt(6) * 60 * 1000 + dt(7) * 1000 &\n\n             + dt(8)\n\n     end if\n\n     pid = getpid()\n\n     t = ieor(t, int(pid, kind(t)))\n\n     do i = 1, n\n\n        seed(i) = lcg(t)\n\n     end do\n\n  end if\n\n  call random_seed(put=seed)\n\ncontains\n\n  ! This simple PRNG might not be good enough for real work, but is\n\n  ! sufficient for seeding a better PRNG.\n\n  function lcg(s)\n\n    integer :: lcg\n\n    integer(int64) :: s\n\n    if (s == 0) then\n\n       s = 104729\n\n    else\n\n       s = mod(s, 4294967296_int64)\n\n    end if\n\n    s = mod(s * 279470273_int64, 4294967291_int64)\n\n    lcg = int(mod(s, int(huge(0), int64)), kind(0))\n\n  end function lcg\n\nend subroutine init_random_seed\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_NUMBER\n" } \ No newline at end of file diff --git a/src/docs/RANK.json b/src/docs/RANK.json index 03051b72..3e170161 100644 --- a/src/docs/RANK.json +++ b/src/docs/RANK.json @@ -1,4 +1,4 @@ { "keyword":"RANK", - "docstr":"`RANK` — Rank of a data object\n\n### Description\n`RANK(A)` returns the rank of a scalar or array data object.\n\n\n\n### Syntax\n`RESULT = RANK(A)`\n\n\n### Arguments\n\n \n | `A` | can be of any type\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind. For arrays, their rank is returned; for scalars zero is returned.\n\n\n\n### Example\n\n ```\n\n\nprogram test_rank\n\n  integer :: a\n\n  real, allocatable :: b(:,:)\n\n\n  print *, rank(a), rank(b) ! Prints: 0 2\n\nend program test_rank\n\n```\n\n \n\n### Standard\nTechnical Specification (TS) 29113\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr":"`RANK` — Rank of a data object\n\n### Description\n`RANK(A)` returns the rank of a scalar or array data object.\n\n\n\n### Syntax\n`RESULT = RANK(A)`\n\n\n### Arguments\n\n \n | `A` | can be of any type\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind. For arrays, their rank is returned; for scalars zero is returned.\n\n\n\n### Example\n```\n\n\nprogram test_rank\n\n  integer :: a\n\n  real, allocatable :: b(:,:)\n\n\n  print *, rank(a), rank(b) ! Prints: 0 2\n\nend program test_rank\n\n```\n\n \n\n### Standard\nTechnical Specification (TS) 29113\n\n\n\n### Class\nInquiry function\n\n\n" } \ No newline at end of file diff --git a/src/docs/REAL.json b/src/docs/REAL.json index 06e4d3a6..be6f8678 100644 --- a/src/docs/REAL.json +++ b/src/docs/REAL.json @@ -1,4 +1,4 @@ { "keyword":"REAL", - "docstr":"`REAL` — Convert to real type\n\n### Description\n`REAL(A [, KIND])` converts its argument `A` to a real type. The\n`REALPART` function is provided for compatibility with *g77*,\nand its use is strongly discouraged.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = REALPART(Z)`
\n\n\n\n\n\n### Arguments\n\n \n, or\n`COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `REAL` variable or array under\nthe following rules:\n\n
\n**(A)** `REAL(A)` is converted to a default real type if `A` is an\ninteger or real variable. \n\n**(B)** `REAL(A)` is converted to a real type with the kind type parameter\nof `A` if `A` is a complex variable. \n\n**(C)** `REAL(A, KIND)` is converted to a real type with kind type\nparameter `KIND` if `A` is a complex, integer, or real\nvariable. \n\n
\n\n\n\n### Example\n\n ```\n\n\nprogram test_real\n\n  complex :: x = (1.0, 2.0)\n\n  print *, real(x), real(x,8), realpart(x)\n\nend program test_real\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `FLOAT(A)` | `INTEGER(4)` | `REAL(4)` | Fortran 77 and later\n\n | `DFLOAT(A)` | `INTEGER(4)` | `REAL(8)` | GNU extension\n\n | `SNGL(A)` | `INTEGER(8)` | `REAL(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nDBLE\n\n " + "docstr":"`REAL` — Convert to real type\n\n### Description\n`REAL(A [, KIND])` converts its argument `A` to a real type. The\n`REALPART` function is provided for compatibility with *g77*,\nand its use is strongly discouraged.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = REALPART(Z)`
\n\n\n\n\n\n### Arguments\n\n \n, or\n`COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `REAL` variable or array under\nthe following rules:\n\n
\n**(A)** `REAL(A)` is converted to a default real type if `A` is an\ninteger or real variable. \n\n**(B)** `REAL(A)` is converted to a real type with the kind type parameter\nof `A` if `A` is a complex variable. \n\n**(C)** `REAL(A, KIND)` is converted to a real type with kind type\nparameter `KIND` if `A` is a complex, integer, or real\nvariable. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_real\n\n  complex :: x = (1.0, 2.0)\n\n  print *, real(x), real(x,8), realpart(x)\n\nend program test_real\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `FLOAT(A)` | `INTEGER(4)` | `REAL(4)` | Fortran 77 and later\n\n | `DFLOAT(A)` | `INTEGER(4)` | `REAL(8)` | GNU extension\n\n | `SNGL(A)` | `INTEGER(8)` | `REAL(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nDBLE\n\n " } \ No newline at end of file diff --git a/src/docs/REPEAT.json b/src/docs/REPEAT.json index 5a574520..5419280a 100644 --- a/src/docs/REPEAT.json +++ b/src/docs/REPEAT.json @@ -1,4 +1,4 @@ { "keyword":"REPEAT", - "docstr":"`REPEAT` — Repeated string concatenation\n\n### Description\nConcatenates `NCOPIES` copies of a string.\n\n\n\n### Syntax\n`RESULT = REPEAT(STRING, NCOPIES)`\n\n\n### Arguments\n\n \n. \n\n | `NCOPIES` | Shall be scalar and of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nA new scalar of type `CHARACTER` built up from `NCOPIES` copies\nof `STRING`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_repeat\n\n  write(*,*) repeat(\"x\", 5) ! \"xxxxx\"\n\nend program\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`REPEAT` — Repeated string concatenation\n\n### Description\nConcatenates `NCOPIES` copies of a string.\n\n\n\n### Syntax\n`RESULT = REPEAT(STRING, NCOPIES)`\n\n\n### Arguments\n\n \n. \n\n | `NCOPIES` | Shall be scalar and of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nA new scalar of type `CHARACTER` built up from `NCOPIES` copies\nof `STRING`.\n\n\n\n### Example\n```\n\n\nprogram test_repeat\n\n  write(*,*) repeat(\"x\", 5) ! \"xxxxx\"\n\nend program\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/RESHAPE.json b/src/docs/RESHAPE.json index 9e05ea53..42a443e9 100644 --- a/src/docs/RESHAPE.json +++ b/src/docs/RESHAPE.json @@ -1,4 +1,4 @@ { "keyword":"RESHAPE", - "docstr":"`RESHAPE` — Function to reshape an array\n\n### Description\nReshapes `SOURCE` to correspond to `SHAPE`. If necessary,\nthe new array may be padded with elements from `PAD` or permuted\nas defined by `ORDER`.\n\n\n\n### Syntax\n`RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be an array of any type. \n\n | `SHAPE` | Shall be of type `INTEGER` and an\narray of rank one. Its values must be positive or zero. \n\n | `PAD` | (Optional) shall be an array of the same\ntype as `SOURCE`. \n\n | `ORDER` | (Optional) shall be of type `INTEGER`and an array of the same shape as `SHAPE`. Its values shall\nbe a permutation of the numbers from 1 to n, where n is the size of\n`SHAPE`. If `ORDER` is absent, the natural ordering shall\nbe assumed.\n\n\n\n\n\n\n### Return value\nThe result is an array of shape `SHAPE` with the same type as\n`SOURCE`.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_reshape\n\n  INTEGER, DIMENSION(4) :: x\n\n  WRITE(*,*) SHAPE(x) ! prints \"4\"\n\n  WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/))) ! prints \"2 2\"\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nSHAPE\n" + "docstr":"`RESHAPE` — Function to reshape an array\n\n### Description\nReshapes `SOURCE` to correspond to `SHAPE`. If necessary,\nthe new array may be padded with elements from `PAD` or permuted\nas defined by `ORDER`.\n\n\n\n### Syntax\n`RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be an array of any type. \n\n | `SHAPE` | Shall be of type `INTEGER` and an\narray of rank one. Its values must be positive or zero. \n\n | `PAD` | (Optional) shall be an array of the same\ntype as `SOURCE`. \n\n | `ORDER` | (Optional) shall be of type `INTEGER`and an array of the same shape as `SHAPE`. Its values shall\nbe a permutation of the numbers from 1 to n, where n is the size of\n`SHAPE`. If `ORDER` is absent, the natural ordering shall\nbe assumed.\n\n\n\n\n\n\n### Return value\nThe result is an array of shape `SHAPE` with the same type as\n`SOURCE`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_reshape\n\n  INTEGER, DIMENSION(4) :: x\n\n  WRITE(*,*) SHAPE(x) ! prints \"4\"\n\n  WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/))) ! prints \"2 2\"\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nSHAPE\n" } \ No newline at end of file diff --git a/src/docs/SCALE.json b/src/docs/SCALE.json index a812a5a3..05b10d6c 100644 --- a/src/docs/SCALE.json +++ b/src/docs/SCALE.json @@ -1,4 +1,4 @@ { "keyword":"SCALE", - "docstr":"`SCALE` — Scale a real value\n\n### Description\n`SCALE(X,I)` returns `X * RADIX(X)**I`.\n\n\n\n### Syntax\n`RESULT = SCALE(X, I)`\n\n\n### Arguments\n\n \n. \n\n | `I` | The type of the argument shall be a `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nIts value is `X * RADIX(X)**I`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_scale\n\n  real :: x = 178.1387e-4\n\n  integer :: i = 5\n\n  print *, scale(x,i), x*radix(x)**i\n\nend program test_scale\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`SCALE` — Scale a real value\n\n### Description\n`SCALE(X,I)` returns `X * RADIX(X)**I`.\n\n\n\n### Syntax\n`RESULT = SCALE(X, I)`\n\n\n### Arguments\n\n \n. \n\n | `I` | The type of the argument shall be a `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nIts value is `X * RADIX(X)**I`.\n\n\n\n### Example\n```\n\n\nprogram test_scale\n\n  real :: x = 178.1387e-4\n\n  integer :: i = 5\n\n  print *, scale(x,i), x*radix(x)**i\n\nend program test_scale\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/SCAN.json b/src/docs/SCAN.json index 4bff5404..95ef48c4 100644 --- a/src/docs/SCAN.json +++ b/src/docs/SCAN.json @@ -1,4 +1,4 @@ { "keyword":"SCAN", - "docstr":"`SCAN` — Scan a string for the presence of a set of characters\n\n### Description\nScans a `STRING` for any of the characters in a `SET`\nof characters.\n\n \nIf `BACK` is either absent or equals `FALSE`, this function\nreturns the position of the leftmost character of `STRING` that is\nin `SET`. If `BACK` equals `TRUE`, the rightmost position\nis returned. If no character of `SET` is found in `STRING`, the\nresult is zero.\n\n\n\n\n### Syntax\n`RESULT = SCAN(STRING, SET[, BACK [, KIND]])`\n\n\n### Arguments\n\n \n. \n\n | `SET` | Shall be of type `CHARACTER`. \n\n | `BACK` | (Optional) shall be of type `LOGICAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_scan\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"AO\") ! 2, found 'O'\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"AO\", .TRUE.) ! 6, found 'A'\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"C++\") ! 0, found none\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINDEX intrinsic, VERIFY\n" + "docstr":"`SCAN` — Scan a string for the presence of a set of characters\n\n### Description\nScans a `STRING` for any of the characters in a `SET`\nof characters.\n\n \nIf `BACK` is either absent or equals `FALSE`, this function\nreturns the position of the leftmost character of `STRING` that is\nin `SET`. If `BACK` equals `TRUE`, the rightmost position\nis returned. If no character of `SET` is found in `STRING`, the\nresult is zero.\n\n\n\n\n### Syntax\n`RESULT = SCAN(STRING, SET[, BACK [, KIND]])`\n\n\n### Arguments\n\n \n. \n\n | `SET` | Shall be of type `CHARACTER`. \n\n | `BACK` | (Optional) shall be of type `LOGICAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_scan\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"AO\") ! 2, found 'O'\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"AO\", .TRUE.) ! 6, found 'A'\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"C++\") ! 0, found none\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINDEX intrinsic, VERIFY\n" } \ No newline at end of file diff --git a/src/docs/SECNDS.json b/src/docs/SECNDS.json index 45369ef4..0972d391 100644 --- a/src/docs/SECNDS.json +++ b/src/docs/SECNDS.json @@ -1,4 +1,4 @@ { "keyword":"SECNDS", - "docstr":"`SECNDS` — Time function\n\n### Description\n`SECNDS(X)` gets the time in seconds from the real-time system clock. \n`X` is a reference time, also in seconds. If this is zero, the time in\nseconds from midnight is returned. This function is non-standard and its\nuse is discouraged.\n\n\n\n### Syntax\n`RESULT = SECNDS (X)`\n\n\n### Arguments\n\n \n. \n\n | `X` | Shall be of type `REAL(4)`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n\n ```\n\n\nprogram test_secnds\n\n    integer :: i\n\n    real(4) :: t1, t2\n\n    print *, secnds (0.0) ! seconds since midnight\n\n    t1 = secnds (0.0) ! reference time\n\n    do i = 1, 10000000 ! do something\n\n    end do\n\n    t2 = secnds (t1) ! elapsed time\n\n    print *, \"Something took \", t2, \" seconds.\"\n\nend program test_secnds\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" + "docstr":"`SECNDS` — Time function\n\n### Description\n`SECNDS(X)` gets the time in seconds from the real-time system clock. \n`X` is a reference time, also in seconds. If this is zero, the time in\nseconds from midnight is returned. This function is non-standard and its\nuse is discouraged.\n\n\n\n### Syntax\n`RESULT = SECNDS (X)`\n\n\n### Arguments\n\n \n. \n\n | `X` | Shall be of type `REAL(4)`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_secnds\n\n    integer :: i\n\n    real(4) :: t1, t2\n\n    print *, secnds (0.0) ! seconds since midnight\n\n    t1 = secnds (0.0) ! reference time\n\n    do i = 1, 10000000 ! do something\n\n    end do\n\n    t2 = secnds (t1) ! elapsed time\n\n    print *, \"Something took \", t2, \" seconds.\"\n\nend program test_secnds\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" } \ No newline at end of file diff --git a/src/docs/SELECTED_CHAR_KIND.json b/src/docs/SELECTED_CHAR_KIND.json index 03916f86..b2fc6aa9 100644 --- a/src/docs/SELECTED_CHAR_KIND.json +++ b/src/docs/SELECTED_CHAR_KIND.json @@ -1,4 +1,4 @@ { "keyword":"SELECTED_CHAR_KIND", - "docstr":"`SELECTED_CHAR_KIND` — Choose character kind\n\n### Description\n\n`SELECTED_CHAR_KIND(NAME)` returns the kind value for the character\nset named `NAME`, if a character set with such a name is supported,\nor -1 otherwise. Currently, supported character sets include\n“ASCII” and “DEFAULT”, which are equivalent, and “ISO_10646”\n(Universal Character Set, UCS-4) which is commonly known as Unicode.\n\n\n\n### Syntax\n`RESULT = SELECTED_CHAR_KIND(NAME)`\n\n\n### Arguments\n\n \n | `NAME` | Shall be a scalar and of the default character type.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram character_kind\n\n  use iso_fortran_env\n\n  implicit none\n\n  integer, parameter :: ascii = selected_char_kind (\"ascii\")\n\n  integer, parameter :: ucs4 = selected_char_kind ('ISO_10646')\n\n\n  character(kind=ascii, len=26) :: alphabet\n\n  character(kind=ucs4, len=30) :: hello_world\n\n\n  alphabet = ascii_\"abcdefghijklmnopqrstuvwxyz\"\n\n  hello_world = ucs4_'Hello World and Ni Hao -- ' &\n\n                // char (int (z'4F60'), ucs4) &\n\n                // char (int (z'597D'), ucs4)\n\n\n  write (*,*) alphabet\n\n\n  open (output_unit, encoding='UTF-8')\n\n  write (*,*) trim (hello_world)\n\nend program character_kind\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`SELECTED_CHAR_KIND` — Choose character kind\n\n### Description\n\n`SELECTED_CHAR_KIND(NAME)` returns the kind value for the character\nset named `NAME`, if a character set with such a name is supported,\nor -1 otherwise. Currently, supported character sets include\n“ASCII” and “DEFAULT”, which are equivalent, and “ISO_10646”\n(Universal Character Set, UCS-4) which is commonly known as Unicode.\n\n\n\n### Syntax\n`RESULT = SELECTED_CHAR_KIND(NAME)`\n\n\n### Arguments\n\n \n | `NAME` | Shall be a scalar and of the default character type.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram character_kind\n\n  use iso_fortran_env\n\n  implicit none\n\n  integer, parameter :: ascii = selected_char_kind (\"ascii\")\n\n  integer, parameter :: ucs4 = selected_char_kind ('ISO_10646')\n\n\n  character(kind=ascii, len=26) :: alphabet\n\n  character(kind=ucs4, len=30) :: hello_world\n\n\n  alphabet = ascii_\"abcdefghijklmnopqrstuvwxyz\"\n\n  hello_world = ucs4_'Hello World and Ni Hao -- ' &\n\n                // char (int (z'4F60'), ucs4) &\n\n                // char (int (z'597D'), ucs4)\n\n\n  write (*,*) alphabet\n\n\n  open (output_unit, encoding='UTF-8')\n\n  write (*,*) trim (hello_world)\n\nend program character_kind\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/SELECTED_INT_KIND.json b/src/docs/SELECTED_INT_KIND.json index 9b27d5ba..7cc79cce 100644 --- a/src/docs/SELECTED_INT_KIND.json +++ b/src/docs/SELECTED_INT_KIND.json @@ -1,4 +1,4 @@ { "keyword":"SELECTED_INT_KIND", - "docstr":"`SELECTED_INT_KIND` — Choose integer kind\n\n### Description\n`SELECTED_INT_KIND(R)` return the kind value of the smallest integer\ntype that can represent all values ranging from -10^R (exclusive)\nto 10^R (exclusive). If there is no integer kind that accommodates\nthis range, `SELECTED_INT_KIND` returns -1.\n\n\n\n### Syntax\n`RESULT = SELECTED_INT_KIND(R)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram large_integers\n\n  integer,parameter :: k5 = selected_int_kind(5)\n\n  integer,parameter :: k15 = selected_int_kind(15)\n\n  integer(kind=k5) :: i5\n\n  integer(kind=k15) :: i15\n\n\n  print *, huge(i5), huge(i15)\n\n\n  ! The following inequalities are always true\n\n  print *, huge(i5) >= 10_k5**5-1\n\n  print *, huge(i15) >= 10_k15**15-1\n\nend program large_integers\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`SELECTED_INT_KIND` — Choose integer kind\n\n### Description\n`SELECTED_INT_KIND(R)` return the kind value of the smallest integer\ntype that can represent all values ranging from -10^R (exclusive)\nto 10^R (exclusive). If there is no integer kind that accommodates\nthis range, `SELECTED_INT_KIND` returns -1.\n\n\n\n### Syntax\n`RESULT = SELECTED_INT_KIND(R)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram large_integers\n\n  integer,parameter :: k5 = selected_int_kind(5)\n\n  integer,parameter :: k15 = selected_int_kind(15)\n\n  integer(kind=k5) :: i5\n\n  integer(kind=k15) :: i15\n\n\n  print *, huge(i5), huge(i15)\n\n\n  ! The following inequalities are always true\n\n  print *, huge(i5) >= 10_k5**5-1\n\n  print *, huge(i15) >= 10_k15**15-1\n\nend program large_integers\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/SELECTED_REAL_KIND.json b/src/docs/SELECTED_REAL_KIND.json index 5178d7a4..a024340b 100644 --- a/src/docs/SELECTED_REAL_KIND.json +++ b/src/docs/SELECTED_REAL_KIND.json @@ -1,4 +1,4 @@ { "keyword":"SELECTED_REAL_KIND", - "docstr":"`SELECTED_REAL_KIND` — Choose real kind\n\n### Description\n`SELECTED_REAL_KIND(P,R)` returns the kind value of a real data type\nwith decimal precision of at least `P` digits, exponent range of\nat least `R`, and with a radix of `RADIX`.\n\n\n\n### Syntax\n`RESULT = SELECTED_REAL_KIND([P, R, RADIX])`\n\n\n### Arguments\n\n \n. \n\n | `R` | (Optional) shall be a scalar and of type `INTEGER`. \n\n | `RADIX` | (Optional) shall be a scalar and of type `INTEGER`.\n\n\nBefore Fortran 2008, at least one of the arguments `R` or `P` shall\nbe present; since Fortran 2008, they are assumed to be zero if absent.\n\n\n\n\n### Return value\n\n`SELECTED_REAL_KIND` returns the value of the kind type parameter of\na real data type with decimal precision of at least `P` digits, a\ndecimal exponent range of at least `R`, and with the requested\n`RADIX`. If the `RADIX` parameter is absent, real kinds with\nany radix can be returned. If more than one real data type meet the\ncriteria, the kind of the data type with the smallest decimal precision\nis returned. If no real data type matches the criteria, the result is\n
\n**-1 if the processor does not support a real data type with a** precision greater than or equal to `P`, but the `R` and\n`RADIX` requirements can be fulfilled\n\n**-2 if the processor does not support a real type with an exponent** range greater than or equal to `R`, but `P` and `RADIX`are fulfillable\n\n**-3 if `RADIX` but not `P` and `R` requirements** are fulfillable\n\n**-4 if `RADIX` and either `P` or `R` requirements** are fulfillable\n\n
-5 if there is no real type with the given `RADIX`
\n\n\n\n### Example\n\n ```\n\n\nprogram real_kinds\n\n  integer,parameter :: p6 = selected_real_kind(6)\n\n  integer,parameter :: p10r100 = selected_real_kind(10,100)\n\n  integer,parameter :: r400 = selected_real_kind(r=400)\n\n  real(kind=p6) :: x\n\n  real(kind=p10r100) :: y\n\n  real(kind=r400) :: z\n\n\n  print *, precision(x), range(x)\n\n  print *, precision(y), range(y)\n\n  print *, precision(z), range(z)\n\nend program real_kinds\n\n```\n\n \n\n### Standard\nFortran 95 and later, with `RADIX` Fortran 2008 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPRECISION, RANGE, RADIX\n\n\n" + "docstr":"`SELECTED_REAL_KIND` — Choose real kind\n\n### Description\n`SELECTED_REAL_KIND(P,R)` returns the kind value of a real data type\nwith decimal precision of at least `P` digits, exponent range of\nat least `R`, and with a radix of `RADIX`.\n\n\n\n### Syntax\n`RESULT = SELECTED_REAL_KIND([P, R, RADIX])`\n\n\n### Arguments\n\n \n. \n\n | `R` | (Optional) shall be a scalar and of type `INTEGER`. \n\n | `RADIX` | (Optional) shall be a scalar and of type `INTEGER`.\n\n\nBefore Fortran 2008, at least one of the arguments `R` or `P` shall\nbe present; since Fortran 2008, they are assumed to be zero if absent.\n\n\n\n\n### Return value\n\n`SELECTED_REAL_KIND` returns the value of the kind type parameter of\na real data type with decimal precision of at least `P` digits, a\ndecimal exponent range of at least `R`, and with the requested\n`RADIX`. If the `RADIX` parameter is absent, real kinds with\nany radix can be returned. If more than one real data type meet the\ncriteria, the kind of the data type with the smallest decimal precision\nis returned. If no real data type matches the criteria, the result is\n
\n**-1 if the processor does not support a real data type with a** precision greater than or equal to `P`, but the `R` and\n`RADIX` requirements can be fulfilled\n\n**-2 if the processor does not support a real type with an exponent** range greater than or equal to `R`, but `P` and `RADIX`are fulfillable\n\n**-3 if `RADIX` but not `P` and `R` requirements** are fulfillable\n\n**-4 if `RADIX` and either `P` or `R` requirements** are fulfillable\n\n
-5 if there is no real type with the given `RADIX`
\n\n\n\n### Example\n```\n\n\nprogram real_kinds\n\n  integer,parameter :: p6 = selected_real_kind(6)\n\n  integer,parameter :: p10r100 = selected_real_kind(10,100)\n\n  integer,parameter :: r400 = selected_real_kind(r=400)\n\n  real(kind=p6) :: x\n\n  real(kind=p10r100) :: y\n\n  real(kind=r400) :: z\n\n\n  print *, precision(x), range(x)\n\n  print *, precision(y), range(y)\n\n  print *, precision(z), range(z)\n\nend program real_kinds\n\n```\n\n \n\n### Standard\nFortran 95 and later, with `RADIX` Fortran 2008 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPRECISION, RANGE, RADIX\n\n\n" } \ No newline at end of file diff --git a/src/docs/SET_EXPONENT.json b/src/docs/SET_EXPONENT.json index 06b4458c..e86f54f1 100644 --- a/src/docs/SET_EXPONENT.json +++ b/src/docs/SET_EXPONENT.json @@ -1,4 +1,4 @@ { "keyword":"SET_EXPONENT", - "docstr":"`SET_EXPONENT` — Set the exponent of the model\n\n### Description\n`SET_EXPONENT(X, I)` returns the real number whose fractional part\nis that that of `X` and whose exponent part is `I`.\n\n\n\n### Syntax\n`RESULT = SET_EXPONENT(X, I)`\n\n\n### Arguments\n\n \n. \n\n | `I` | Shall be of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real number whose fractional part\nis that that of `X` and whose exponent part if `I` is returned;\nit is `FRACTION(X) * RADIX(X)**I`.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_setexp\n\n  REAL :: x = 178.1387e-4\n\n  INTEGER :: i = 17\n\n  PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`SET_EXPONENT` — Set the exponent of the model\n\n### Description\n`SET_EXPONENT(X, I)` returns the real number whose fractional part\nis that that of `X` and whose exponent part is `I`.\n\n\n\n### Syntax\n`RESULT = SET_EXPONENT(X, I)`\n\n\n### Arguments\n\n \n. \n\n | `I` | Shall be of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real number whose fractional part\nis that that of `X` and whose exponent part if `I` is returned;\nit is `FRACTION(X) * RADIX(X)**I`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_setexp\n\n  REAL :: x = 178.1387e-4\n\n  INTEGER :: i = 17\n\n  PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/SHAPE.json b/src/docs/SHAPE.json index 923d37cc..5ea58d24 100644 --- a/src/docs/SHAPE.json +++ b/src/docs/SHAPE.json @@ -1,4 +1,4 @@ { "keyword":"SHAPE", - "docstr":"`SHAPE` — Determine the shape of an array\n\n### Description\nDetermines the shape of an array.\n\n\n\n### Syntax\n`RESULT = SHAPE(SOURCE [, KIND])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be an array or scalar of any type. \nIf `SOURCE` is a pointer it must be associated and allocatable\narrays must be allocated. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nAn `INTEGER` array of rank one with as many elements as `SOURCE`\nhas dimensions. The elements of the resulting array correspond to the extend\nof `SOURCE` along the respective dimensions. If `SOURCE` is a scalar,\nthe result is the rank one array of size zero. If `KIND` is absent, the\nreturn value has the default integer kind otherwise the specified kind.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_shape\n\n  INTEGER, DIMENSION(-1:1, -1:2) :: A\n\n  WRITE(*,*) SHAPE(A) ! (/ 3, 4 /)\n\n  WRITE(*,*) SIZE(SHAPE(42)) ! (/ /)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nRESHAPE, SIZE\n" + "docstr":"`SHAPE` — Determine the shape of an array\n\n### Description\nDetermines the shape of an array.\n\n\n\n### Syntax\n`RESULT = SHAPE(SOURCE [, KIND])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be an array or scalar of any type. \nIf `SOURCE` is a pointer it must be associated and allocatable\narrays must be allocated. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nAn `INTEGER` array of rank one with as many elements as `SOURCE`\nhas dimensions. The elements of the resulting array correspond to the extend\nof `SOURCE` along the respective dimensions. If `SOURCE` is a scalar,\nthe result is the rank one array of size zero. If `KIND` is absent, the\nreturn value has the default integer kind otherwise the specified kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_shape\n\n  INTEGER, DIMENSION(-1:1, -1:2) :: A\n\n  WRITE(*,*) SHAPE(A) ! (/ 3, 4 /)\n\n  WRITE(*,*) SIZE(SHAPE(42)) ! (/ /)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nRESHAPE, SIZE\n" } \ No newline at end of file diff --git a/src/docs/SIGN.json b/src/docs/SIGN.json index ae678a85..796b9398 100644 --- a/src/docs/SIGN.json +++ b/src/docs/SIGN.json @@ -1,4 +1,4 @@ { "keyword":"SIGN", - "docstr":"`SIGN` — Sign copying function\n\n### Description\n`SIGN(A,B)` returns the value of `A` with the sign of `B`.\n\n\n\n### Syntax\n`RESULT = SIGN(A, B)`\n\n\n### Arguments\n\n \n\n\n | `B` | Shall be of the same type and kind as `A`\n\n\n\n\n\n\n### Return value\nThe kind of the return value is that of `A` and `B`. \nIf B\\ge 0 then the result is `ABS(A)`, else\nit is `-ABS(A)`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_sign\n\n  print *, sign(-12,1)\n\n  print *, sign(-12,0)\n\n  print *, sign(-12,-1)\n\n\n  print *, sign(-12.,1.)\n\n  print *, sign(-12.,0.)\n\n  print *, sign(-12.,-1.)\n\nend program test_sign\n\n```\n\n\n\n### Specific names\n\n \n | Name | Arguments | Return type | Standard\n\n | `SIGN(A,B)` | `REAL(4) A, B` | `REAL(4)` | f77, gnu\n\n | `ISIGN(A,B)` | `INTEGER(4) A, B` | `INTEGER(4)` | f77, gnu\n\n | `DSIGN(A,B)` | `REAL(8) A, B` | `REAL(8)` | f77, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`SIGN` — Sign copying function\n\n### Description\n`SIGN(A,B)` returns the value of `A` with the sign of `B`.\n\n\n\n### Syntax\n`RESULT = SIGN(A, B)`\n\n\n### Arguments\n\n \n\n\n | `B` | Shall be of the same type and kind as `A`\n\n\n\n\n\n\n### Return value\nThe kind of the return value is that of `A` and `B`. \nIf B\\ge 0 then the result is `ABS(A)`, else\nit is `-ABS(A)`.\n\n\n\n### Example\n```\n\n\nprogram test_sign\n\n  print *, sign(-12,1)\n\n  print *, sign(-12,0)\n\n  print *, sign(-12,-1)\n\n\n  print *, sign(-12.,1.)\n\n  print *, sign(-12.,0.)\n\n  print *, sign(-12.,-1.)\n\nend program test_sign\n\n```\n\n\n\n### Specific names\n\n \n | Name | Arguments | Return type | Standard\n\n | `SIGN(A,B)` | `REAL(4) A, B` | `REAL(4)` | f77, gnu\n\n | `ISIGN(A,B)` | `INTEGER(4) A, B` | `INTEGER(4)` | f77, gnu\n\n | `DSIGN(A,B)` | `REAL(8) A, B` | `REAL(8)` | f77, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/SIGNAL.json b/src/docs/SIGNAL.json index 685c8083..ef60fde8 100644 --- a/src/docs/SIGNAL.json +++ b/src/docs/SIGNAL.json @@ -1,4 +1,4 @@ { "keyword":"SIGNAL", - "docstr":"`SIGNAL` — Signal handling subroutine (or function)\n\n### Description\n`SIGNAL(NUMBER, HANDLER [, STATUS])` causes external subroutine\n`HANDLER` to be executed with a single integer argument when signal\n`NUMBER` occurs. If `HANDLER` is an integer, it can be used to\nturn off handling of signal `NUMBER` or revert to its default\naction. See `signal(2)`.\n\n \nIf `SIGNAL` is called as a subroutine and the `STATUS` argument\nis supplied, it is set to the value returned by `signal(2)`.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = SIGNAL(NUMBER, HANDLER)`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `HANDLER` | Signal handler (`INTEGER FUNCTION` or\n`SUBROUTINE`) or dummy/global `INTEGER` scalar. \n`INTEGER`. It is `INTENT(IN)`. \n\n | `STATUS` | (Optional) `STATUS` shall be a scalar\ninteger. It has `INTENT(OUT)`.\n\n\n\n\n\n\n\n### Return value\nThe `SIGNAL` function returns the value returned by `signal(2)`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_signal\n\n  intrinsic signal\n\n  external handler_print\n\n\n  call signal (12, handler_print)\n\n  call signal (10, 1)\n\n\n  call sleep (30)\n\nend program test_signal\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" + "docstr":"`SIGNAL` — Signal handling subroutine (or function)\n\n### Description\n`SIGNAL(NUMBER, HANDLER [, STATUS])` causes external subroutine\n`HANDLER` to be executed with a single integer argument when signal\n`NUMBER` occurs. If `HANDLER` is an integer, it can be used to\nturn off handling of signal `NUMBER` or revert to its default\naction. See `signal(2)`.\n\n \nIf `SIGNAL` is called as a subroutine and the `STATUS` argument\nis supplied, it is set to the value returned by `signal(2)`.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = SIGNAL(NUMBER, HANDLER)`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `HANDLER` | Signal handler (`INTEGER FUNCTION` or\n`SUBROUTINE`) or dummy/global `INTEGER` scalar. \n`INTEGER`. It is `INTENT(IN)`. \n\n | `STATUS` | (Optional) `STATUS` shall be a scalar\ninteger. It has `INTENT(OUT)`.\n\n\n\n\n\n\n\n### Return value\nThe `SIGNAL` function returns the value returned by `signal(2)`.\n\n\n\n### Example\n```\n\n\nprogram test_signal\n\n  intrinsic signal\n\n  external handler_print\n\n\n  call signal (12, handler_print)\n\n  call signal (10, 1)\n\n\n  call sleep (30)\n\nend program test_signal\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" } \ No newline at end of file diff --git a/src/docs/SIN.json b/src/docs/SIN.json index cf6542cb..d0ea836f 100644 --- a/src/docs/SIN.json +++ b/src/docs/SIN.json @@ -1,4 +1,4 @@ { "keyword":"SIN", - "docstr":"`SIN` — Sine function\n\n### Description\n`SIN(X)` computes the sine of `X`.\n\n\n\n### Syntax\n`RESULT = SIN(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_sin\n\n  real :: x = 0.0\n\n  x = sin(x)\n\nend program test_sin\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SIN(X)` | `REAL(4) X` | `REAL(4)` | f77, gnu\n\n | `DSIN(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CSIN(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZSIN(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDSIN(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nASIN\n" + "docstr":"`SIN` — Sine function\n\n### Description\n`SIN(X)` computes the sine of `X`.\n\n\n\n### Syntax\n`RESULT = SIN(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_sin\n\n  real :: x = 0.0\n\n  x = sin(x)\n\nend program test_sin\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SIN(X)` | `REAL(4) X` | `REAL(4)` | f77, gnu\n\n | `DSIN(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CSIN(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZSIN(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDSIN(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nASIN\n" } \ No newline at end of file diff --git a/src/docs/SINH.json b/src/docs/SINH.json index 39bfeeab..ea33c44e 100644 --- a/src/docs/SINH.json +++ b/src/docs/SINH.json @@ -1,4 +1,4 @@ { "keyword":"SINH", - "docstr":"`SINH` — Hyperbolic sine function\n\n### Description\n`SINH(X)` computes the hyperbolic sine of `X`.\n\n\n\n### Syntax\n`RESULT = SINH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_sinh\n\n  real(8) :: x = - 1.0_8\n\n  x = sinh(x)\n\nend program test_sinh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SINH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DSINH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 95 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nASINH\n" + "docstr":"`SINH` — Hyperbolic sine function\n\n### Description\n`SINH(X)` computes the hyperbolic sine of `X`.\n\n\n\n### Syntax\n`RESULT = SINH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_sinh\n\n  real(8) :: x = - 1.0_8\n\n  x = sinh(x)\n\nend program test_sinh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SINH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DSINH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 95 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nASINH\n" } \ No newline at end of file diff --git a/src/docs/SIZE.json b/src/docs/SIZE.json index 7d888bfa..de8c17e2 100644 --- a/src/docs/SIZE.json +++ b/src/docs/SIZE.json @@ -1,4 +1,4 @@ { "keyword":"SIZE", - "docstr":"`SIZE` — Determine the size of an array\n\n### Description\nDetermine the extent of `ARRAY` along a specified dimension `DIM`,\nor the total number of elements in `ARRAY` if `DIM` is absent.\n\n\n\n### Syntax\n`RESULT = SIZE(ARRAY[, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. If `ARRAY` is\na pointer it must be associated and allocatable arrays must be allocated. \n\n | `DIM` | (Optional) shall be a scalar of type `INTEGER`and its value shall be in the range from 1 to n, where n equals the rank\nof `ARRAY`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_size\n\n  WRITE(*,*) SIZE((/ 1, 2 /)) ! 2\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSHAPE, RESHAPE\n" + "docstr":"`SIZE` — Determine the size of an array\n\n### Description\nDetermine the extent of `ARRAY` along a specified dimension `DIM`,\nor the total number of elements in `ARRAY` if `DIM` is absent.\n\n\n\n### Syntax\n`RESULT = SIZE(ARRAY[, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. If `ARRAY` is\na pointer it must be associated and allocatable arrays must be allocated. \n\n | `DIM` | (Optional) shall be a scalar of type `INTEGER`and its value shall be in the range from 1 to n, where n equals the rank\nof `ARRAY`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_size\n\n  WRITE(*,*) SIZE((/ 1, 2 /)) ! 2\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSHAPE, RESHAPE\n" } \ No newline at end of file diff --git a/src/docs/SIZEOF.json b/src/docs/SIZEOF.json index 4ceaabe1..f7882f84 100644 --- a/src/docs/SIZEOF.json +++ b/src/docs/SIZEOF.json @@ -1,4 +1,4 @@ { "keyword":"SIZEOF", - "docstr":"`SIZEOF` — Size in bytes of an expression\n\n### Description\n`SIZEOF(X)` calculates the number of bytes of storage the\nexpression `X` occupies.\n\n\n\n### Syntax\n`N = SIZEOF(X)`\n\n\n### Arguments\n\n \n | `X` | The argument shall be of any type, rank or shape.\n\n\n\n\n\n\n### Return value\nThe return value is of type integer and of the system-dependent kind\n`C_SIZE_T` (from the `ISO_C_BINDING` module). Its value is the\nnumber of bytes occupied by the argument. If the argument has the\n`POINTER` attribute, the number of bytes of the storage area pointed\nto is returned. If the argument is of a derived type with `POINTER`or `ALLOCATABLE` components, the return value does not account for\nthe sizes of the data pointed to by these components. If the argument is\npolymorphic, the size according to the dynamic type is returned. The argument\nmay not be a procedure or procedure pointer. Note that the code assumes for\narrays that those are contiguous; for contiguous arrays, it returns the\nstorage or an array element multiplied by the size of the array.\n\n\n\n### Example\n\n ```\n\n\ninteger :: i\n\nreal :: r, s(5)\n\nprint *, (sizeof(s)/sizeof(r) == 5)\n\nend\n\n```\n\n \nThe example will print `.TRUE.` unless you are using a platform\nwhere default `REAL` variables are unusually padded.\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_SIZEOF, STORAGE_SIZE\n" + "docstr":"`SIZEOF` — Size in bytes of an expression\n\n### Description\n`SIZEOF(X)` calculates the number of bytes of storage the\nexpression `X` occupies.\n\n\n\n### Syntax\n`N = SIZEOF(X)`\n\n\n### Arguments\n\n \n | `X` | The argument shall be of any type, rank or shape.\n\n\n\n\n\n\n### Return value\nThe return value is of type integer and of the system-dependent kind\n`C_SIZE_T` (from the `ISO_C_BINDING` module). Its value is the\nnumber of bytes occupied by the argument. If the argument has the\n`POINTER` attribute, the number of bytes of the storage area pointed\nto is returned. If the argument is of a derived type with `POINTER`or `ALLOCATABLE` components, the return value does not account for\nthe sizes of the data pointed to by these components. If the argument is\npolymorphic, the size according to the dynamic type is returned. The argument\nmay not be a procedure or procedure pointer. Note that the code assumes for\narrays that those are contiguous; for contiguous arrays, it returns the\nstorage or an array element multiplied by the size of the array.\n\n\n\n### Example\n```\n\n\ninteger :: i\n\nreal :: r, s(5)\n\nprint *, (sizeof(s)/sizeof(r) == 5)\n\nend\n\n```\n\n \nThe example will print `.TRUE.` unless you are using a platform\nwhere default `REAL` variables are unusually padded.\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_SIZEOF, STORAGE_SIZE\n" } \ No newline at end of file diff --git a/src/docs/SLEEP.json b/src/docs/SLEEP.json index 1c4fada4..1a23072a 100644 --- a/src/docs/SLEEP.json +++ b/src/docs/SLEEP.json @@ -1,4 +1,4 @@ { "keyword":"SLEEP", - "docstr":"`SLEEP` — Sleep for the specified number of seconds\n\n### Description\nCalling this subroutine causes the process to pause for `SECONDS` seconds.\n\n\n\n### Syntax\n`CALL SLEEP(SECONDS)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nprogram test_sleep\n\n  call sleep(5)\n\nend\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" + "docstr":"`SLEEP` — Sleep for the specified number of seconds\n\n### Description\nCalling this subroutine causes the process to pause for `SECONDS` seconds.\n\n\n\n### Syntax\n`CALL SLEEP(SECONDS)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_sleep\n\n  call sleep(5)\n\nend\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" } \ No newline at end of file diff --git a/src/docs/SPACING.json b/src/docs/SPACING.json index bbb7c45e..7e4ffb95 100644 --- a/src/docs/SPACING.json +++ b/src/docs/SPACING.json @@ -1,4 +1,4 @@ { "keyword":"SPACING", - "docstr":"`SPACING` — Smallest distance between two numbers of a given type\n\n### Description\nDetermines the distance between the argument `X` and the nearest\nadjacent number of the same type.\n\n\n\n### Syntax\n`RESULT = SPACING(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as the input argument `X`.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_spacing\n\n  INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37)\n\n  INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200)\n\n\n  WRITE(*,*) spacing(1.0_SGL) ! \"1.1920929E-07\" on i686\n\n  WRITE(*,*) spacing(1.0_DBL) ! \"2.220446049250313E-016\" on i686\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nRRSPACING\n" + "docstr":"`SPACING` — Smallest distance between two numbers of a given type\n\n### Description\nDetermines the distance between the argument `X` and the nearest\nadjacent number of the same type.\n\n\n\n### Syntax\n`RESULT = SPACING(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as the input argument `X`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_spacing\n\n  INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37)\n\n  INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200)\n\n\n  WRITE(*,*) spacing(1.0_SGL) ! \"1.1920929E-07\" on i686\n\n  WRITE(*,*) spacing(1.0_DBL) ! \"2.220446049250313E-016\" on i686\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nRRSPACING\n" } \ No newline at end of file diff --git a/src/docs/SPREAD.json b/src/docs/SPREAD.json index 81db1d48..512dcb73 100644 --- a/src/docs/SPREAD.json +++ b/src/docs/SPREAD.json @@ -1,4 +1,4 @@ { "keyword":"SPREAD", - "docstr":"`SPREAD` — Add a dimension to an array\n\n### Description\nReplicates a `SOURCE` array `NCOPIES` times along a specified\ndimension `DIM`.\n\n\n\n### Syntax\n`RESULT = SPREAD(SOURCE, DIM, NCOPIES)`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be a scalar or an array of any type and\na rank less than seven. \n\n | `DIM` | Shall be a scalar of type `INTEGER` with a\nvalue in the range from 1 to n+1, where n equals the rank of `SOURCE`. \n\n | `NCOPIES` | Shall be a scalar of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe result is an array of the same type as `SOURCE` and has rank n+1\nwhere n equals the rank of `SOURCE`.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_spread\n\n  INTEGER :: a = 1, b(2) = (/ 1, 2 /)\n\n  WRITE(*,*) SPREAD(A, 1, 2) ! \"1 1\"\n\n  WRITE(*,*) SPREAD(B, 1, 2) ! \"1 1 2 2\"\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nUNPACK\n" + "docstr":"`SPREAD` — Add a dimension to an array\n\n### Description\nReplicates a `SOURCE` array `NCOPIES` times along a specified\ndimension `DIM`.\n\n\n\n### Syntax\n`RESULT = SPREAD(SOURCE, DIM, NCOPIES)`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be a scalar or an array of any type and\na rank less than seven. \n\n | `DIM` | Shall be a scalar of type `INTEGER` with a\nvalue in the range from 1 to n+1, where n equals the rank of `SOURCE`. \n\n | `NCOPIES` | Shall be a scalar of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe result is an array of the same type as `SOURCE` and has rank n+1\nwhere n equals the rank of `SOURCE`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_spread\n\n  INTEGER :: a = 1, b(2) = (/ 1, 2 /)\n\n  WRITE(*,*) SPREAD(A, 1, 2) ! \"1 1\"\n\n  WRITE(*,*) SPREAD(B, 1, 2) ! \"1 1 2 2\"\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nUNPACK\n" } \ No newline at end of file diff --git a/src/docs/SQRT.json b/src/docs/SQRT.json index 48fc6fa5..b95e3c42 100644 --- a/src/docs/SQRT.json +++ b/src/docs/SQRT.json @@ -1,4 +1,4 @@ { "keyword":"SQRT", - "docstr":"`SQRT` — Square-root function\n\n### Description\n`SQRT(X)` computes the square root of `X`.\n\n\n\n### Syntax\n`RESULT = SQRT(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_sqrt\n\n  real(8) :: x = 2.0_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = sqrt(x)\n\n  z = sqrt(z)\n\nend program test_sqrt\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SQRT(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DSQRT(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n | `CSQRT(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 95 and later\n\n | `ZSQRT(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDSQRT(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr":"`SQRT` — Square-root function\n\n### Description\n`SQRT(X)` computes the square root of `X`.\n\n\n\n### Syntax\n`RESULT = SQRT(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_sqrt\n\n  real(8) :: x = 2.0_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = sqrt(x)\n\n  z = sqrt(z)\n\nend program test_sqrt\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SQRT(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DSQRT(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n | `CSQRT(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 95 and later\n\n | `ZSQRT(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDSQRT(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } \ No newline at end of file diff --git a/src/docs/STAT.json b/src/docs/STAT.json index 76cf637f..a93b2209 100644 --- a/src/docs/STAT.json +++ b/src/docs/STAT.json @@ -1,4 +1,4 @@ { "keyword":"STAT", - "docstr":"`STAT` — Get file status\n\n### Description\nThis function returns information about a file. No permissions are required on\nthe file itself, but execute (search) permission is required on all of the\ndirectories in path that lead to the file.\n\n \nThe elements that are obtained and stored in the array `VALUES`:\n \n\n | Device ID\n\n | `VALUES(2)` | Inode number\n\n | `VALUES(3)` | File mode\n\n | `VALUES(4)` | Number of links\n\n | `VALUES(5)` | Owner's uid\n\n | `VALUES(6)` | Owner's gid\n\n | `VALUES(7)` | ID of device containing directory entry for file (0 if not available)\n\n | `VALUES(8)` | File size (bytes)\n\n | `VALUES(9)` | Last access time\n\n | `VALUES(10)` | Last modification time\n\n | `VALUES(11)` | Last file status change time\n\n | `VALUES(12)` | Preferred I/O block size (-1 if not available)\n\n | `VALUES(13)` | Number of blocks allocated (-1 if not available)\n\n\n\n \n\nNot all these elements are relevant on all systems. \nIf an element is not relevant, it is returned as 0.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = STAT(NAME, VALUES)`
\n\n\n\n\n\n### Arguments\n\n \n, of the\ndefault kind and a valid path within the file system. \n\n | `VALUES` | The type shall be `INTEGER(4), DIMENSION(13)`. \n\n | `STATUS` | (Optional) status flag of type `INTEGER(4)`. Returns 0\non success and a system specific error code otherwise.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_stat\n\n  INTEGER, DIMENSION(13) :: buff\n\n  INTEGER :: status\n\n\n  CALL STAT(\"/etc/passwd\", buff, status)\n\n\n  IF (status == 0) THEN\n\n    WRITE (*, FMT=\"('Device ID:', T30, I19)\") buff(1)\n\n    WRITE (*, FMT=\"('Inode number:', T30, I19)\") buff(2)\n\n    WRITE (*, FMT=\"('File mode (octal):', T30, O19)\") buff(3)\n\n    WRITE (*, FMT=\"('Number of links:', T30, I19)\") buff(4)\n\n    WRITE (*, FMT=\"('Owner''s uid:', T30, I19)\") buff(5)\n\n    WRITE (*, FMT=\"('Owner''s gid:', T30, I19)\") buff(6)\n\n    WRITE (*, FMT=\"('Device where located:', T30, I19)\") buff(7)\n\n    WRITE (*, FMT=\"('File size:', T30, I19)\") buff(8)\n\n    WRITE (*, FMT=\"('Last access time:', T30, A19)\") CTIME(buff(9))\n\n    WRITE (*, FMT=\"('Last modification time', T30, A19)\") CTIME(buff(10))\n\n    WRITE (*, FMT=\"('Last status change time:', T30, A19)\") CTIME(buff(11))\n\n    WRITE (*, FMT=\"('Preferred block size:', T30, I19)\") buff(12)\n\n    WRITE (*, FMT=\"('No. of blocks allocated:', T30, I19)\") buff(13)\n\n  END IF\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nTo stat an open file: FSTAT, to stat a link: LSTAT\n" + "docstr":"`STAT` — Get file status\n\n### Description\nThis function returns information about a file. No permissions are required on\nthe file itself, but execute (search) permission is required on all of the\ndirectories in path that lead to the file.\n\n \nThe elements that are obtained and stored in the array `VALUES`:\n \n\n | Device ID\n\n | `VALUES(2)` | Inode number\n\n | `VALUES(3)` | File mode\n\n | `VALUES(4)` | Number of links\n\n | `VALUES(5)` | Owner's uid\n\n | `VALUES(6)` | Owner's gid\n\n | `VALUES(7)` | ID of device containing directory entry for file (0 if not available)\n\n | `VALUES(8)` | File size (bytes)\n\n | `VALUES(9)` | Last access time\n\n | `VALUES(10)` | Last modification time\n\n | `VALUES(11)` | Last file status change time\n\n | `VALUES(12)` | Preferred I/O block size (-1 if not available)\n\n | `VALUES(13)` | Number of blocks allocated (-1 if not available)\n\n\n\n \n\nNot all these elements are relevant on all systems. \nIf an element is not relevant, it is returned as 0.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = STAT(NAME, VALUES)`
\n\n\n\n\n\n### Arguments\n\n \n, of the\ndefault kind and a valid path within the file system. \n\n | `VALUES` | The type shall be `INTEGER(4), DIMENSION(13)`. \n\n | `STATUS` | (Optional) status flag of type `INTEGER(4)`. Returns 0\non success and a system specific error code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_stat\n\n  INTEGER, DIMENSION(13) :: buff\n\n  INTEGER :: status\n\n\n  CALL STAT(\"/etc/passwd\", buff, status)\n\n\n  IF (status == 0) THEN\n\n    WRITE (*, FMT=\"('Device ID:', T30, I19)\") buff(1)\n\n    WRITE (*, FMT=\"('Inode number:', T30, I19)\") buff(2)\n\n    WRITE (*, FMT=\"('File mode (octal):', T30, O19)\") buff(3)\n\n    WRITE (*, FMT=\"('Number of links:', T30, I19)\") buff(4)\n\n    WRITE (*, FMT=\"('Owner''s uid:', T30, I19)\") buff(5)\n\n    WRITE (*, FMT=\"('Owner''s gid:', T30, I19)\") buff(6)\n\n    WRITE (*, FMT=\"('Device where located:', T30, I19)\") buff(7)\n\n    WRITE (*, FMT=\"('File size:', T30, I19)\") buff(8)\n\n    WRITE (*, FMT=\"('Last access time:', T30, A19)\") CTIME(buff(9))\n\n    WRITE (*, FMT=\"('Last modification time', T30, A19)\") CTIME(buff(10))\n\n    WRITE (*, FMT=\"('Last status change time:', T30, A19)\") CTIME(buff(11))\n\n    WRITE (*, FMT=\"('Preferred block size:', T30, I19)\") buff(12)\n\n    WRITE (*, FMT=\"('No. of blocks allocated:', T30, I19)\") buff(13)\n\n  END IF\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nTo stat an open file: FSTAT, to stat a link: LSTAT\n" } \ No newline at end of file diff --git a/src/docs/SUM.json b/src/docs/SUM.json index b9e2dbc4..7c5658b8 100644 --- a/src/docs/SUM.json +++ b/src/docs/SUM.json @@ -1,4 +1,4 @@ { "keyword":"SUM", - "docstr":"`SUM` — Sum of array elements\n\n### Description\nAdds the elements of `ARRAY` along dimension `DIM` if\nthe corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = SUM(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n,\n`REAL` or `COMPLEX`. \n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the sum of all elements in `ARRAY`\nis returned. Otherwise, an array of rank n-1, where n equals the rank of\n`ARRAY`, and a shape similar to that of `ARRAY` with dimension `DIM`\ndropped is returned.\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_sum\n\n  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)\n\n  print *, SUM(x) ! all elements, sum = 15\n\n  print *, SUM(x, MASK=MOD(x, 2)==1) ! odd elements, sum = 9\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPRODUCT\n" + "docstr":"`SUM` — Sum of array elements\n\n### Description\nAdds the elements of `ARRAY` along dimension `DIM` if\nthe corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = SUM(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n,\n`REAL` or `COMPLEX`. \n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the sum of all elements in `ARRAY`\nis returned. Otherwise, an array of rank n-1, where n equals the rank of\n`ARRAY`, and a shape similar to that of `ARRAY` with dimension `DIM`\ndropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_sum\n\n  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)\n\n  print *, SUM(x) ! all elements, sum = 15\n\n  print *, SUM(x, MASK=MOD(x, 2)==1) ! odd elements, sum = 9\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPRODUCT\n" } \ No newline at end of file diff --git a/src/docs/SYSTEM_CLOCK.json b/src/docs/SYSTEM_CLOCK.json index 30f88c48..70532b37 100644 --- a/src/docs/SYSTEM_CLOCK.json +++ b/src/docs/SYSTEM_CLOCK.json @@ -1,4 +1,4 @@ { "keyword":"SYSTEM_CLOCK", - "docstr":"`SYSTEM_CLOCK` — Time function\n\n### Description\nDetermines the `COUNT` of a processor clock since an unspecified\ntime in the past modulo `COUNT_MAX`, `COUNT_RATE` determines\nthe number of clock ticks per second. If the platform supports a\nmonotonic clock, that clock is used and can, depending on the platform\nclock implementation, provide up to nanosecond resolution. If a\nmonotonic clock is not available, the implementation falls back to a\nrealtime clock.\n\n \n`COUNT_RATE` is system dependent and can vary depending on the kind of\nthe arguments. For `kind=4` arguments (and smaller integer kinds),\n`COUNT` represents milliseconds, while for `kind=8` arguments (and\nlarger integer kinds), `COUNT` typically represents micro- or\nnanoseconds depending on resolution of the underlying platform clock. \n`COUNT_MAX` usually equals `HUGE(COUNT_MAX)`. Note that the\nmillisecond resolution of the `kind=4` version implies that the\n`COUNT` will wrap around in roughly 25 days. In order to avoid issues\nwith the wrap around and for more precise timing, please use the\n`kind=8` version.\n\n \n\nIf there is no clock, or querying the clock fails, `COUNT` is set\nto `-HUGE(COUNT)`, and `COUNT_RATE` and `COUNT_MAX` are\nset to zero.\n\n \n\nWhen running on a platform using the GNU C library (glibc) version\n2.16 or older, or a derivative thereof, the high resolution monotonic\nclock is available only when linking with the `rt` library. This\ncan be done explicitly by adding the `-lrt` flag when linking the\napplication, but is also done implicitly when using OpenMP.\n\n \n\nOn the Windows platform, the version with `kind=4` arguments uses\nthe `GetTickCount` function, whereas the `kind=8` version\nuses `QueryPerformanceCounter` and\n`QueryPerformanceCounterFrequency`. For more information, and\npotential caveats, please see the platform documentation.\n\n\n\n\n### Syntax\n`CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])`\n\n\n### Arguments\n\n \n | `COUNT` | (Optional) shall be a scalar of type\n`INTEGER` with `INTENT(OUT)`. \n\n | `COUNT_RATE` | (Optional) shall be a scalar of type\n`INTEGER` or `REAL`, with `INTENT(OUT)`. \n\n | `COUNT_MAX` | (Optional) shall be a scalar of type\n`INTEGER` with `INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_system_clock\n\n  INTEGER :: count, count_rate, count_max\n\n  CALL SYSTEM_CLOCK(count, count_rate, count_max)\n\n  WRITE(*,*) count, count_rate, count_max\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nDATE_AND_TIME, CPU_TIME\n" + "docstr":"`SYSTEM_CLOCK` — Time function\n\n### Description\nDetermines the `COUNT` of a processor clock since an unspecified\ntime in the past modulo `COUNT_MAX`, `COUNT_RATE` determines\nthe number of clock ticks per second. If the platform supports a\nmonotonic clock, that clock is used and can, depending on the platform\nclock implementation, provide up to nanosecond resolution. If a\nmonotonic clock is not available, the implementation falls back to a\nrealtime clock.\n\n \n`COUNT_RATE` is system dependent and can vary depending on the kind of\nthe arguments. For `kind=4` arguments (and smaller integer kinds),\n`COUNT` represents milliseconds, while for `kind=8` arguments (and\nlarger integer kinds), `COUNT` typically represents micro- or\nnanoseconds depending on resolution of the underlying platform clock. \n`COUNT_MAX` usually equals `HUGE(COUNT_MAX)`. Note that the\nmillisecond resolution of the `kind=4` version implies that the\n`COUNT` will wrap around in roughly 25 days. In order to avoid issues\nwith the wrap around and for more precise timing, please use the\n`kind=8` version.\n\n \n\nIf there is no clock, or querying the clock fails, `COUNT` is set\nto `-HUGE(COUNT)`, and `COUNT_RATE` and `COUNT_MAX` are\nset to zero.\n\n \n\nWhen running on a platform using the GNU C library (glibc) version\n2.16 or older, or a derivative thereof, the high resolution monotonic\nclock is available only when linking with the `rt` library. This\ncan be done explicitly by adding the `-lrt` flag when linking the\napplication, but is also done implicitly when using OpenMP.\n\n \n\nOn the Windows platform, the version with `kind=4` arguments uses\nthe `GetTickCount` function, whereas the `kind=8` version\nuses `QueryPerformanceCounter` and\n`QueryPerformanceCounterFrequency`. For more information, and\npotential caveats, please see the platform documentation.\n\n\n\n\n### Syntax\n`CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])`\n\n\n### Arguments\n\n \n | `COUNT` | (Optional) shall be a scalar of type\n`INTEGER` with `INTENT(OUT)`. \n\n | `COUNT_RATE` | (Optional) shall be a scalar of type\n`INTEGER` or `REAL`, with `INTENT(OUT)`. \n\n | `COUNT_MAX` | (Optional) shall be a scalar of type\n`INTEGER` with `INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_system_clock\n\n  INTEGER :: count, count_rate, count_max\n\n  CALL SYSTEM_CLOCK(count, count_rate, count_max)\n\n  WRITE(*,*) count, count_rate, count_max\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nDATE_AND_TIME, CPU_TIME\n" } \ No newline at end of file diff --git a/src/docs/TAN.json b/src/docs/TAN.json index 64ca3136..f1d0968b 100644 --- a/src/docs/TAN.json +++ b/src/docs/TAN.json @@ -1,4 +1,4 @@ { "keyword":"TAN", - "docstr":"`TAN` — Tangent function\n\n### Description\n`TAN(X)` computes the tangent of `X`.\n\n\n\n### Syntax\n`RESULT = TAN(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n\n ```\n\n\nprogram test_tan\n\n  real(8) :: x = 0.165_8\n\n  x = tan(x)\n\nend program test_tan\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `TAN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DTAN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nATAN\n" + "docstr":"`TAN` — Tangent function\n\n### Description\n`TAN(X)` computes the tangent of `X`.\n\n\n\n### Syntax\n`RESULT = TAN(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_tan\n\n  real(8) :: x = 0.165_8\n\n  x = tan(x)\n\nend program test_tan\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `TAN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DTAN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nATAN\n" } \ No newline at end of file diff --git a/src/docs/TANH.json b/src/docs/TANH.json index 5ac4ebef..87945e82 100644 --- a/src/docs/TANH.json +++ b/src/docs/TANH.json @@ -1,4 +1,4 @@ { "keyword":"TANH", - "docstr":"`TANH` — Hyperbolic tangent function\n\n### Description\n`TANH(X)` computes the hyperbolic tangent of `X`.\n\n\n\n### Syntax\n`X = TANH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians. If `X`\nis `REAL`, the return value lies in the range\n - 1 \\leq tanh(x) \\leq 1 .\n\n\n\n### Example\n\n ```\n\n\nprogram test_tanh\n\n  real(8) :: x = 2.1_8\n\n  x = tanh(x)\n\nend program test_tanh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `TANH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DTANH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nATANH\n" + "docstr":"`TANH` — Hyperbolic tangent function\n\n### Description\n`TANH(X)` computes the hyperbolic tangent of `X`.\n\n\n\n### Syntax\n`X = TANH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians. If `X`\nis `REAL`, the return value lies in the range\n - 1 \\leq tanh(x) \\leq 1 .\n\n\n\n### Example\n```\n\n\nprogram test_tanh\n\n  real(8) :: x = 2.1_8\n\n  x = tanh(x)\n\nend program test_tanh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `TANH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DTANH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nATANH\n" } \ No newline at end of file diff --git a/src/docs/THIS_IMAGE.json b/src/docs/THIS_IMAGE.json index ebe367b3..86fb6b70 100644 --- a/src/docs/THIS_IMAGE.json +++ b/src/docs/THIS_IMAGE.json @@ -1,4 +1,4 @@ { "keyword":"THIS_IMAGE", - "docstr":"`THIS_IMAGE` — Function that returns the cosubscript index of this image\n\n### Description\nReturns the cosubscript for this image.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = THIS_IMAGE(DISTANCE)`
\n | `RESULT = THIS_IMAGE(COARRAY [, DIM])`
\n\n\n\n\n\n### Arguments\n\n \n | `DISTANCE` | (optional, intent(in)) Nonnegative scalar integer\n(not permitted together with `COARRAY`). \n\n | `COARRAY` | Coarray of any type (optional; if `DIM`\npresent, required). \n\n | `DIM` | default integer scalar (optional). If present,\n`DIM` shall be between one and the corank of `COARRAY`.\n\n\n\n\n\n\n### Return value\nDefault integer. If `COARRAY` is not present, it is scalar; if\n`DISTANCE` is not present or has value 0, its value is the image index on\nthe invoking image for the current team, for values smaller or equal\ndistance to the initial team, it returns the image index on the ancestor team\nwhich has a distance of `DISTANCE` from the invoking team. If\n`DISTANCE` is larger than the distance to the initial team, the image\nindex of the initial team is returned. Otherwise when the `COARRAY` is\npresent, if `DIM` is not present, a rank-1 array with corank elements is\nreturned, containing the cosubscripts for `COARRAY` specifying the invoking\nimage. If `DIM` is present, a scalar is returned, with the value of\nthe `DIM` element of `THIS_IMAGE(COARRAY)`.\n\n\n\n### Example\n\n ```\n\n\nINTEGER :: value[*]\n\nINTEGER :: i\n\nvalue = THIS_IMAGE()\n\nSYNC ALL\n\nIF (THIS_IMAGE() == 1) THEN\n\n  DO i = 1, NUM_IMAGES()\n\n    WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]\n\n  END DO\n\nEND IF\n\n\n! Check whether the current image is the initial image\n\nIF (THIS_IMAGE(HUGE(1)) /= THIS_IMAGE())\n\n  error stop \"something is rotten here\"\n\n```\n\n\n\n### Standard\nFortran 2008 and later. With `DISTANCE` argument,\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nNUM_IMAGES, IMAGE_INDEX\n" + "docstr":"`THIS_IMAGE` — Function that returns the cosubscript index of this image\n\n### Description\nReturns the cosubscript for this image.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = THIS_IMAGE(DISTANCE)`
\n | `RESULT = THIS_IMAGE(COARRAY [, DIM])`
\n\n\n\n\n\n### Arguments\n\n \n | `DISTANCE` | (optional, intent(in)) Nonnegative scalar integer\n(not permitted together with `COARRAY`). \n\n | `COARRAY` | Coarray of any type (optional; if `DIM`\npresent, required). \n\n | `DIM` | default integer scalar (optional). If present,\n`DIM` shall be between one and the corank of `COARRAY`.\n\n\n\n\n\n\n### Return value\nDefault integer. If `COARRAY` is not present, it is scalar; if\n`DISTANCE` is not present or has value 0, its value is the image index on\nthe invoking image for the current team, for values smaller or equal\ndistance to the initial team, it returns the image index on the ancestor team\nwhich has a distance of `DISTANCE` from the invoking team. If\n`DISTANCE` is larger than the distance to the initial team, the image\nindex of the initial team is returned. Otherwise when the `COARRAY` is\npresent, if `DIM` is not present, a rank-1 array with corank elements is\nreturned, containing the cosubscripts for `COARRAY` specifying the invoking\nimage. If `DIM` is present, a scalar is returned, with the value of\nthe `DIM` element of `THIS_IMAGE(COARRAY)`.\n\n\n\n### Example\n```\n\n\nINTEGER :: value[*]\n\nINTEGER :: i\n\nvalue = THIS_IMAGE()\n\nSYNC ALL\n\nIF (THIS_IMAGE() == 1) THEN\n\n  DO i = 1, NUM_IMAGES()\n\n    WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]\n\n  END DO\n\nEND IF\n\n\n! Check whether the current image is the initial image\n\nIF (THIS_IMAGE(HUGE(1)) /= THIS_IMAGE())\n\n  error stop \"something is rotten here\"\n\n```\n\n\n\n### Standard\nFortran 2008 and later. With `DISTANCE` argument,\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nNUM_IMAGES, IMAGE_INDEX\n" } \ No newline at end of file diff --git a/src/docs/TRAILZ.json b/src/docs/TRAILZ.json index 77dc2676..424cb6d0 100644 --- a/src/docs/TRAILZ.json +++ b/src/docs/TRAILZ.json @@ -1,4 +1,4 @@ { "keyword":"TRAILZ", - "docstr":"`TRAILZ` — Number of trailing zero bits of an integer\n\n### Description\n`TRAILZ` returns the number of trailing zero bits of an integer.\n\n\n\n### Syntax\n`RESULT = TRAILZ(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe type of the return value is the default `INTEGER`. \nIf all the bits of `I` are zero, the result value is `BIT_SIZE(I)`.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_trailz\n\n  WRITE (*,*) TRAILZ(8) ! prints 3\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, LEADZ, POPPAR, POPCNT\n" + "docstr":"`TRAILZ` — Number of trailing zero bits of an integer\n\n### Description\n`TRAILZ` returns the number of trailing zero bits of an integer.\n\n\n\n### Syntax\n`RESULT = TRAILZ(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe type of the return value is the default `INTEGER`. \nIf all the bits of `I` are zero, the result value is `BIT_SIZE(I)`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_trailz\n\n  WRITE (*,*) TRAILZ(8) ! prints 3\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, LEADZ, POPPAR, POPCNT\n" } \ No newline at end of file diff --git a/src/docs/TRANSFER.json b/src/docs/TRANSFER.json index 8c4e5a5b..9095835d 100644 --- a/src/docs/TRANSFER.json +++ b/src/docs/TRANSFER.json @@ -1,4 +1,4 @@ { "keyword":"TRANSFER", - "docstr":"`TRANSFER` — Transfer bit patterns\n\n### Description\nInterprets the bitwise representation of `SOURCE` in memory as if it\nis the representation of a variable or array of the same type and type\nparameters as `MOLD`.\n\n \nThis is approximately equivalent to the C concept of casting one\ntype to another.\n\n\n\n\n### Syntax\n`RESULT = TRANSFER(SOURCE, MOLD[, SIZE])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be a scalar or an array of any type. \n\n | `MOLD` | Shall be a scalar or an array of any type. \n\n | `SIZE` | (Optional) shall be a scalar of type\n`INTEGER`.\n\n\n\n\n\n\n### Return value\nThe result has the same type as `MOLD`, with the bit level\nrepresentation of `SOURCE`. If `SIZE` is present, the result is\na one-dimensional array of length `SIZE`. If `SIZE` is absent\nbut `MOLD` is an array (of any size or shape), the result is a one-\ndimensional array of the minimum length needed to contain the entirety\nof the bitwise representation of `SOURCE`. If `SIZE` is absent\nand `MOLD` is a scalar, the result is a scalar.\n\n \nIf the bitwise representation of the result is longer than that of\n`SOURCE`, then the leading bits of the result correspond to those of\n`SOURCE` and any trailing bits are filled arbitrarily.\n\n \n\nWhen the resulting bit representation does not correspond to a valid\nrepresentation of a variable of the same type as `MOLD`, the results\nare undefined, and subsequent operations on the result cannot be\nguaranteed to produce sensible behavior. For example, it is possible to\ncreate `LOGICAL` variables for which `VAR` and\n`.NOT.``VAR` both appear to be true.\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_transfer\n\n  integer :: x = 2143289344\n\n  print *, transfer(x, 1.0) ! prints \"NaN\" on i686\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr":"`TRANSFER` — Transfer bit patterns\n\n### Description\nInterprets the bitwise representation of `SOURCE` in memory as if it\nis the representation of a variable or array of the same type and type\nparameters as `MOLD`.\n\n \nThis is approximately equivalent to the C concept of casting one\ntype to another.\n\n\n\n\n### Syntax\n`RESULT = TRANSFER(SOURCE, MOLD[, SIZE])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be a scalar or an array of any type. \n\n | `MOLD` | Shall be a scalar or an array of any type. \n\n | `SIZE` | (Optional) shall be a scalar of type\n`INTEGER`.\n\n\n\n\n\n\n### Return value\nThe result has the same type as `MOLD`, with the bit level\nrepresentation of `SOURCE`. If `SIZE` is present, the result is\na one-dimensional array of length `SIZE`. If `SIZE` is absent\nbut `MOLD` is an array (of any size or shape), the result is a one-\ndimensional array of the minimum length needed to contain the entirety\nof the bitwise representation of `SOURCE`. If `SIZE` is absent\nand `MOLD` is a scalar, the result is a scalar.\n\n \nIf the bitwise representation of the result is longer than that of\n`SOURCE`, then the leading bits of the result correspond to those of\n`SOURCE` and any trailing bits are filled arbitrarily.\n\n \n\nWhen the resulting bit representation does not correspond to a valid\nrepresentation of a variable of the same type as `MOLD`, the results\nare undefined, and subsequent operations on the result cannot be\nguaranteed to produce sensible behavior. For example, it is possible to\ncreate `LOGICAL` variables for which `VAR` and\n`.NOT.``VAR` both appear to be true.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_transfer\n\n  integer :: x = 2143289344\n\n  print *, transfer(x, 1.0) ! prints \"NaN\" on i686\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" } \ No newline at end of file diff --git a/src/docs/TRIM.json b/src/docs/TRIM.json index 239f5b41..acbf8242 100644 --- a/src/docs/TRIM.json +++ b/src/docs/TRIM.json @@ -1,4 +1,4 @@ { "keyword":"TRIM", - "docstr":"`TRIM` — Remove trailing blank characters of a string\n\n### Description\nRemoves trailing blank characters of a string.\n\n\n\n### Syntax\n`RESULT = TRIM(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nA scalar of type `CHARACTER` which length is that of `STRING`\nless the number of trailing blanks.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_trim\n\n  CHARACTER(len=10), PARAMETER :: s = \"GFORTRAN \"\n\n  WRITE(*,*) LEN(s), LEN(TRIM(s)) ! \"10 8\", with/without trailing blanks\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nADJUSTL, ADJUSTR\n" + "docstr":"`TRIM` — Remove trailing blank characters of a string\n\n### Description\nRemoves trailing blank characters of a string.\n\n\n\n### Syntax\n`RESULT = TRIM(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nA scalar of type `CHARACTER` which length is that of `STRING`\nless the number of trailing blanks.\n\n\n\n### Example\n```\n\n\nPROGRAM test_trim\n\n  CHARACTER(len=10), PARAMETER :: s = \"GFORTRAN \"\n\n  WRITE(*,*) LEN(s), LEN(TRIM(s)) ! \"10 8\", with/without trailing blanks\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nADJUSTL, ADJUSTR\n" } \ No newline at end of file diff --git a/src/docs/TTYNAM.json b/src/docs/TTYNAM.json index a0acec83..24245e39 100644 --- a/src/docs/TTYNAM.json +++ b/src/docs/TTYNAM.json @@ -1,4 +1,4 @@ { "keyword":"TTYNAM", - "docstr":"`TTYNAM` — Get the name of a terminal device.\n\n### Description\nGet the name of a terminal device. For more information,\nsee `ttyname(3)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `NAME = TTYNAM(UNIT)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `NAME` | Shall be of type `CHARACTER`.\n\n\n\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_ttynam\n\n  INTEGER :: unit\n\n  DO unit = 1, 10\n\n    IF (isatty(unit=unit)) write(*,*) ttynam(unit)\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nISATTY\n" + "docstr":"`TTYNAM` — Get the name of a terminal device.\n\n### Description\nGet the name of a terminal device. For more information,\nsee `ttyname(3)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `NAME = TTYNAM(UNIT)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `NAME` | Shall be of type `CHARACTER`.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_ttynam\n\n  INTEGER :: unit\n\n  DO unit = 1, 10\n\n    IF (isatty(unit=unit)) write(*,*) ttynam(unit)\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nISATTY\n" } \ No newline at end of file diff --git a/src/docs/UNPACK.json b/src/docs/UNPACK.json index 8bf44eff..43d192bb 100644 --- a/src/docs/UNPACK.json +++ b/src/docs/UNPACK.json @@ -1,4 +1,4 @@ { "keyword":"UNPACK", - "docstr":"`UNPACK` — Unpack an array of rank one into an array\n\n### Description\nStore the elements of `VECTOR` in an array of higher rank.\n\n\n\n### Syntax\n`RESULT = UNPACK(VECTOR, MASK, FIELD)`\n\n\n### Arguments\n\n \n | `VECTOR` | Shall be an array of any type and rank one. It\nshall have at least as many elements as `MASK` has `TRUE` values. \n\n | `MASK` | Shall be an array of type `LOGICAL`. \n\n | `FIELD` | Shall be of the same type as `VECTOR` and have\nthe same shape as `MASK`.\n\n\n\n\n\n\n### Return value\nThe resulting array corresponds to `FIELD` with `TRUE` elements\nof `MASK` replaced by values from `VECTOR` in array element order.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_unpack\n\n  integer :: vector(2) = (/1,1/)\n\n  logical :: mask(4) = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)\n\n  integer :: field(2,2) = 0, unity(2,2)\n\n\n  ! result: unity matrix\n\n  unity = unpack(vector, reshape(mask, (/2,2/)), field)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPACK, SPREAD\n" + "docstr":"`UNPACK` — Unpack an array of rank one into an array\n\n### Description\nStore the elements of `VECTOR` in an array of higher rank.\n\n\n\n### Syntax\n`RESULT = UNPACK(VECTOR, MASK, FIELD)`\n\n\n### Arguments\n\n \n | `VECTOR` | Shall be an array of any type and rank one. It\nshall have at least as many elements as `MASK` has `TRUE` values. \n\n | `MASK` | Shall be an array of type `LOGICAL`. \n\n | `FIELD` | Shall be of the same type as `VECTOR` and have\nthe same shape as `MASK`.\n\n\n\n\n\n\n### Return value\nThe resulting array corresponds to `FIELD` with `TRUE` elements\nof `MASK` replaced by values from `VECTOR` in array element order.\n\n\n\n### Example\n```\n\n\nPROGRAM test_unpack\n\n  integer :: vector(2) = (/1,1/)\n\n  logical :: mask(4) = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)\n\n  integer :: field(2,2) = 0, unity(2,2)\n\n\n  ! result: unity matrix\n\n  unity = unpack(vector, reshape(mask, (/2,2/)), field)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPACK, SPREAD\n" } \ No newline at end of file diff --git a/src/docs/VERIFY.json b/src/docs/VERIFY.json index 13df6084..8d4ba4e8 100644 --- a/src/docs/VERIFY.json +++ b/src/docs/VERIFY.json @@ -1,4 +1,4 @@ { "keyword":"VERIFY", - "docstr":"`VERIFY` — Scan a string for characters not a given set\n\n### Description\nVerifies that all the characters in `STRING` belong to the set of\ncharacters in `SET`.\n\n \nIf `BACK` is either absent or equals `FALSE`, this function\nreturns the position of the leftmost character of `STRING` that is\nnot in `SET`. If `BACK` equals `TRUE`, the rightmost\nposition is returned. If all characters of `STRING` are found in\n`SET`, the result is zero.\n\n\n\n\n### Syntax\n`RESULT = VERIFY(STRING, SET[, BACK [, KIND]])`\n\n\n### Arguments\n\n \n. \n\n | `SET` | Shall be of type `CHARACTER`. \n\n | `BACK` | (Optional) shall be of type `LOGICAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_verify\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"AO\") ! 1, found 'F'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"FOO\") ! 3, found 'R'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"C++\") ! 1, found 'F'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"C++\", .TRUE.) ! 7, found 'N'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"FORTRAN\") ! 0' found none\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSCAN, INDEX intrinsic\n" + "docstr":"`VERIFY` — Scan a string for characters not a given set\n\n### Description\nVerifies that all the characters in `STRING` belong to the set of\ncharacters in `SET`.\n\n \nIf `BACK` is either absent or equals `FALSE`, this function\nreturns the position of the leftmost character of `STRING` that is\nnot in `SET`. If `BACK` equals `TRUE`, the rightmost\nposition is returned. If all characters of `STRING` are found in\n`SET`, the result is zero.\n\n\n\n\n### Syntax\n`RESULT = VERIFY(STRING, SET[, BACK [, KIND]])`\n\n\n### Arguments\n\n \n. \n\n | `SET` | Shall be of type `CHARACTER`. \n\n | `BACK` | (Optional) shall be of type `LOGICAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_verify\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"AO\") ! 1, found 'F'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"FOO\") ! 3, found 'R'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"C++\") ! 1, found 'F'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"C++\", .TRUE.) ! 7, found 'N'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"FORTRAN\") ! 0' found none\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSCAN, INDEX intrinsic\n" } \ No newline at end of file diff --git a/src/docs/XOR.json b/src/docs/XOR.json index 030151bc..ead3820d 100644 --- a/src/docs/XOR.json +++ b/src/docs/XOR.json @@ -1,4 +1,4 @@ { "keyword":"XOR", - "docstr":"`XOR` — Bitwise logical exclusive OR\n\n### Description\nBitwise logical exclusive or.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IEOR intrinsic and for logical arguments the\n`.NEQV.` operator, which are both defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = XOR(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `I`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n\n ```\n\n\nPROGRAM test_xor\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F)\n\n  WRITE (*,*) XOR(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IEOR\n" + "docstr":"`XOR` — Bitwise logical exclusive OR\n\n### Description\nBitwise logical exclusive or.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IEOR intrinsic and for logical arguments the\n`.NEQV.` operator, which are both defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = XOR(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `I`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_xor\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F)\n\n  WRITE (*,*) XOR(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IEOR\n" } \ No newline at end of file From d4b6cad618914a9d1db9bf1df16c79f73d69c282 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 20:28:24 +0100 Subject: [PATCH 16/62] Formatting .json doc files with prettier --- src/docs/ABORT.json | 6 +++--- src/docs/ABS.json | 6 +++--- src/docs/ACCESS.json | 6 +++--- src/docs/ACHAR.json | 6 +++--- src/docs/ACOS.json | 6 +++--- src/docs/ACOSD.json | 4 ++-- src/docs/ACOSH.json | 6 +++--- src/docs/ADJUSTL.json | 6 +++--- src/docs/ADJUSTR.json | 6 +++--- src/docs/AIMAG.json | 6 +++--- src/docs/AINT.json | 6 +++--- src/docs/ALARM.json | 6 +++--- src/docs/ALL.json | 6 +++--- src/docs/ALLOCATED.json | 6 +++--- src/docs/AND.json | 6 +++--- src/docs/ANINT.json | 6 +++--- src/docs/ANY.json | 6 +++--- src/docs/ASIN.json | 6 +++--- src/docs/ASIND.json | 6 +++--- src/docs/ASINH.json | 6 +++--- src/docs/ASSOCIATED.json | 6 +++--- src/docs/ATAN.json | 6 +++--- src/docs/ATAN2.json | 6 +++--- src/docs/ATAN2D.json | 6 +++--- src/docs/ATAND.json | 6 +++--- src/docs/ATANH.json | 6 +++--- src/docs/ATOMIC_ADD.json | 6 +++--- src/docs/ATOMIC_AND.json | 6 +++--- src/docs/ATOMIC_CAS.json | 6 +++--- src/docs/ATOMIC_DEFINE.json | 6 +++--- src/docs/ATOMIC_FETCH_ADD.json | 6 +++--- src/docs/ATOMIC_FETCH_AND.json | 6 +++--- src/docs/ATOMIC_FETCH_OR.json | 6 +++--- src/docs/ATOMIC_FETCH_XOR.json | 6 +++--- src/docs/ATOMIC_OR.json | 6 +++--- src/docs/ATOMIC_REF.json | 6 +++--- src/docs/ATOMIC_XOR.json | 6 +++--- src/docs/BACKTRACE.json | 6 +++--- src/docs/BESSEL_J0.json | 6 +++--- src/docs/BESSEL_J1.json | 6 +++--- src/docs/BESSEL_JN.json | 6 +++--- src/docs/BESSEL_Y0.json | 6 +++--- src/docs/BESSEL_Y1.json | 6 +++--- src/docs/BESSEL_YN.json | 6 +++--- src/docs/BGE.json | 6 +++--- src/docs/BGT.json | 6 +++--- src/docs/BIT_SIZE.json | 6 +++--- src/docs/BLE.json | 6 +++--- src/docs/BLT.json | 6 +++--- src/docs/BTEST.json | 6 +++--- src/docs/CEILING.json | 6 +++--- src/docs/CHAR.json | 6 +++--- src/docs/CHDIR.json | 6 +++--- src/docs/CHMOD.json | 6 +++--- src/docs/CMPLX.json | 6 +++--- src/docs/COMMAND_ARGUMENT_COUNT.json | 6 +++--- src/docs/COMPILER_OPTIONS.json | 6 +++--- src/docs/COMPILER_VERSION.json | 6 +++--- src/docs/COMPLEX.json | 6 +++--- src/docs/CONJG.json | 6 +++--- src/docs/COS.json | 6 +++--- src/docs/COSD.json | 6 +++--- src/docs/COSH.json | 6 +++--- src/docs/COTAN.json | 6 +++--- src/docs/COTAND.json | 6 +++--- src/docs/COUNT.json | 6 +++--- src/docs/CO_BROADCAST.json | 6 +++--- src/docs/CO_MAX.json | 6 +++--- src/docs/CO_MIN.json | 6 +++--- src/docs/CO_REDUCE.json | 6 +++--- src/docs/CO_SUM.json | 6 +++--- src/docs/CPU_TIME.json | 6 +++--- src/docs/CSHIFT.json | 6 +++--- src/docs/CTIME.json | 6 +++--- src/docs/C_ASSOCIATED.json | 6 +++--- src/docs/C_FUNLOC.json | 6 +++--- src/docs/C_F_POINTER.json | 6 +++--- src/docs/C_F_PROCPOINTER.json | 6 +++--- src/docs/C_LOC.json | 6 +++--- src/docs/C_SIZEOF.json | 6 +++--- src/docs/DATE_AND_TIME.json | 6 +++--- src/docs/DBLE.json | 6 +++--- src/docs/DCMPLX.json | 6 +++--- src/docs/DIGITS.json | 6 +++--- src/docs/DIM.json | 6 +++--- src/docs/DOT_PRODUCT.json | 6 +++--- src/docs/DPROD.json | 6 +++--- src/docs/DREAL.json | 6 +++--- src/docs/DSHIFTL.json | 6 +++--- src/docs/DSHIFTR.json | 6 +++--- src/docs/DTIME.json | 6 +++--- src/docs/EOSHIFT.json | 6 +++--- src/docs/EPSILON.json | 6 +++--- src/docs/ERF.json | 6 +++--- src/docs/ERFC.json | 6 +++--- src/docs/ERFC_SCALED.json | 6 +++--- src/docs/ETIME.json | 6 +++--- src/docs/EVENT_QUERY.json | 6 +++--- src/docs/EXECUTE_COMMAND_LINE.json | 6 +++--- src/docs/EXIT.json | 6 +++--- src/docs/EXP.json | 6 +++--- src/docs/EXPONENT.json | 6 +++--- src/docs/EXTENDS_TYPE_OF.json | 6 +++--- src/docs/FDATE.json | 6 +++--- src/docs/FGET.json | 6 +++--- src/docs/FGETC.json | 6 +++--- src/docs/FINDLOC.json | 6 +++--- src/docs/FLOOR.json | 6 +++--- src/docs/FLUSH.json | 6 +++--- src/docs/FNUM.json | 6 +++--- src/docs/FPUT.json | 6 +++--- src/docs/FPUTC.json | 6 +++--- src/docs/FRACTION.json | 6 +++--- src/docs/FREE.json | 6 +++--- src/docs/FSEEK.json | 6 +++--- src/docs/FSTAT.json | 6 +++--- src/docs/FTELL.json | 6 +++--- src/docs/GAMMA.json | 6 +++--- src/docs/GERROR.json | 6 +++--- src/docs/GETARG.json | 6 +++--- src/docs/GETCWD.json | 6 +++--- src/docs/GETENV.json | 6 +++--- src/docs/GETGID.json | 6 +++--- src/docs/GETLOG.json | 6 +++--- src/docs/GETPID.json | 6 +++--- src/docs/GETUID.json | 6 +++--- src/docs/GET_COMMAND.json | 6 +++--- src/docs/GET_COMMAND_ARGUMENT.json | 6 +++--- src/docs/GET_ENVIRONMENT_VARIABLE.json | 6 +++--- src/docs/GMTIME.json | 6 +++--- src/docs/HOSTNM.json | 6 +++--- src/docs/HUGE.json | 6 +++--- src/docs/HYPOT.json | 6 +++--- src/docs/IACHAR.json | 6 +++--- src/docs/IALL.json | 6 +++--- src/docs/IAND.json | 6 +++--- src/docs/IANY.json | 6 +++--- src/docs/IARGC.json | 6 +++--- src/docs/IBCLR.json | 6 +++--- src/docs/IBITS.json | 6 +++--- src/docs/IBSET.json | 6 +++--- src/docs/ICHAR.json | 6 +++--- src/docs/IDATE.json | 6 +++--- src/docs/IEOR.json | 6 +++--- src/docs/IERRNO.json | 6 +++--- src/docs/IMAGE_INDEX.json | 6 +++--- src/docs/INDEX.json | 6 +++--- src/docs/INT.json | 6 +++--- src/docs/INT2.json | 6 +++--- src/docs/INT8.json | 6 +++--- src/docs/IOR.json | 6 +++--- src/docs/IPARITY.json | 6 +++--- src/docs/IRAND.json | 6 +++--- src/docs/ISATTY.json | 6 +++--- src/docs/ISHFT.json | 6 +++--- src/docs/ISHFTC.json | 6 +++--- src/docs/ISNAN.json | 6 +++--- src/docs/IS_CONTIGUOUS.json | 6 +++--- src/docs/IS_IOSTAT_END.json | 6 +++--- src/docs/IS_IOSTAT_EOR.json | 6 +++--- src/docs/ITIME.json | 6 +++--- src/docs/KILL.json | 6 +++--- src/docs/KIND.json | 6 +++--- src/docs/LBOUND.json | 6 +++--- src/docs/LCOBOUND.json | 6 +++--- src/docs/LEADZ.json | 6 +++--- src/docs/LEN.json | 6 +++--- src/docs/LEN_TRIM.json | 6 +++--- src/docs/LGE.json | 6 +++--- src/docs/LGT.json | 6 +++--- src/docs/LINK.json | 6 +++--- src/docs/LLE.json | 6 +++--- src/docs/LLT.json | 6 +++--- src/docs/LNBLNK.json | 6 +++--- src/docs/LOC.json | 6 +++--- src/docs/LOG.json | 6 +++--- src/docs/LOG10.json | 6 +++--- src/docs/LOGICAL.json | 6 +++--- src/docs/LOG_GAMMA.json | 6 +++--- src/docs/LONG.json | 6 +++--- src/docs/LSHIFT.json | 6 +++--- src/docs/LSTAT.json | 6 +++--- src/docs/LTIME.json | 6 +++--- src/docs/MALLOC.json | 6 +++--- src/docs/MASKL.json | 6 +++--- src/docs/MASKR.json | 6 +++--- src/docs/MATMUL.json | 6 +++--- src/docs/MAX.json | 6 +++--- src/docs/MAXEXPONENT.json | 6 +++--- src/docs/MAXLOC.json | 6 +++--- src/docs/MAXVAL.json | 6 +++--- src/docs/MCLOCK.json | 6 +++--- src/docs/MCLOCK8.json | 6 +++--- src/docs/MERGE.json | 6 +++--- src/docs/MERGE_BITS.json | 6 +++--- src/docs/MIN.json | 6 +++--- src/docs/MINEXPONENT.json | 6 +++--- src/docs/MINLOC.json | 6 +++--- src/docs/MINVAL.json | 6 +++--- src/docs/MOD.json | 6 +++--- src/docs/MODULO.json | 6 +++--- src/docs/MOVE_ALLOC.json | 6 +++--- src/docs/MVBITS.json | 6 +++--- src/docs/NEAREST.json | 6 +++--- src/docs/NEW_LINE.json | 6 +++--- src/docs/NINT.json | 6 +++--- src/docs/NORM2.json | 6 +++--- src/docs/NOT.json | 6 +++--- src/docs/NULL.json | 6 +++--- src/docs/NUM_IMAGES.json | 6 +++--- src/docs/OR.json | 6 +++--- src/docs/PACK.json | 6 +++--- src/docs/PARITY.json | 6 +++--- src/docs/PERROR.json | 6 +++--- src/docs/POPCNT.json | 6 +++--- src/docs/POPPAR.json | 6 +++--- src/docs/PRECISION.json | 6 +++--- src/docs/PRESENT.json | 6 +++--- src/docs/PRODUCT.json | 6 +++--- src/docs/RADIX.json | 6 +++--- src/docs/RAN.json | 6 +++--- src/docs/RAND.json | 6 +++--- src/docs/RANDOM_INIT.json | 6 +++--- src/docs/RANDOM_NUMBER.json | 6 +++--- src/docs/RANDOM_SEED.json | 6 +++--- src/docs/RANGE.json | 6 +++--- src/docs/RANK.json | 6 +++--- src/docs/REAL.json | 6 +++--- src/docs/RENAME.json | 6 +++--- src/docs/REPEAT.json | 6 +++--- src/docs/RESHAPE.json | 6 +++--- src/docs/RRSPACING.json | 6 +++--- src/docs/RSHIFT.json | 6 +++--- src/docs/SAME_TYPE_AS.json | 6 +++--- src/docs/SCALE.json | 6 +++--- src/docs/SCAN.json | 6 +++--- src/docs/SECNDS.json | 6 +++--- src/docs/SECOND.json | 6 +++--- src/docs/SELECTED_CHAR_KIND.json | 6 +++--- src/docs/SELECTED_INT_KIND.json | 6 +++--- src/docs/SELECTED_REAL_KIND.json | 6 +++--- src/docs/SET_EXPONENT.json | 6 +++--- src/docs/SHAPE.json | 6 +++--- src/docs/SHIFTA.json | 6 +++--- src/docs/SHIFTL.json | 6 +++--- src/docs/SHIFTR.json | 6 +++--- src/docs/SIGN.json | 6 +++--- src/docs/SIGNAL.json | 6 +++--- src/docs/SIN.json | 6 +++--- src/docs/SIND.json | 6 +++--- src/docs/SINH.json | 6 +++--- src/docs/SIZE.json | 6 +++--- src/docs/SIZEOF.json | 6 +++--- src/docs/SLEEP.json | 6 +++--- src/docs/SPACING.json | 6 +++--- src/docs/SPREAD.json | 6 +++--- src/docs/SQRT.json | 6 +++--- src/docs/SRAND.json | 6 +++--- src/docs/STAT.json | 6 +++--- src/docs/STORAGE_SIZE.json | 6 +++--- src/docs/SUM.json | 6 +++--- src/docs/SYMLNK.json | 6 +++--- src/docs/SYSTEM.json | 6 +++--- src/docs/SYSTEM_CLOCK.json | 6 +++--- src/docs/TAN.json | 6 +++--- src/docs/TAND.json | 6 +++--- src/docs/TANH.json | 6 +++--- src/docs/THIS_IMAGE.json | 6 +++--- src/docs/TIME.json | 6 +++--- src/docs/TIME8.json | 6 +++--- src/docs/TINY.json | 6 +++--- src/docs/TRAILZ.json | 6 +++--- src/docs/TRANSFER.json | 6 +++--- src/docs/TRANSPOSE.json | 6 +++--- src/docs/TRIM.json | 6 +++--- src/docs/TTYNAM.json | 6 +++--- src/docs/UBOUND.json | 6 +++--- src/docs/UCOBOUND.json | 6 +++--- src/docs/UMASK.json | 6 +++--- src/docs/UNLINK.json | 6 +++--- src/docs/UNPACK.json | 6 +++--- src/docs/VERIFY.json | 6 +++--- src/docs/XOR.json | 6 +++--- 283 files changed, 848 insertions(+), 848 deletions(-) diff --git a/src/docs/ABORT.json b/src/docs/ABORT.json index 8f47a894..b1f23751 100644 --- a/src/docs/ABORT.json +++ b/src/docs/ABORT.json @@ -1,4 +1,4 @@ { - "keyword":"ABORT", - "docstr":"`ABORT` — Abort the program\n\n### Description\n`ABORT` causes immediate termination of the program. On operating\nsystems that support a core dump, `ABORT` will produce a core dump. \nIt will also print a backtrace, unless `-fno-backtrace` is given.\n\n\n\n### Syntax\n`CALL ABORT`\n\n\n### Return value\nDoes not return.\n\n\n\n### Example\n```\n\n\nprogram test_abort\n\n  integer :: i = 1, j = 2\n\n  if (i /= j) call abort\n\nend program test_abort\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nEXIT, KILL, BACKTRACE\n\n " -} \ No newline at end of file + "keyword": "ABORT", + "docstr": "`ABORT` — Abort the program\n\n### Description\n`ABORT` causes immediate termination of the program. On operating\nsystems that support a core dump, `ABORT` will produce a core dump. \nIt will also print a backtrace, unless `-fno-backtrace` is given.\n\n\n\n### Syntax\n`CALL ABORT`\n\n\n### Return value\nDoes not return.\n\n\n\n### Example\n```\n\n\nprogram test_abort\n\n  integer :: i = 1, j = 2\n\n  if (i /= j) call abort\n\nend program test_abort\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nEXIT, KILL, BACKTRACE\n\n " +} diff --git a/src/docs/ABS.json b/src/docs/ABS.json index 584b48b0..2ed98b3b 100644 --- a/src/docs/ABS.json +++ b/src/docs/ABS.json @@ -1,4 +1,4 @@ { - "keyword":"ABS", - "docstr":"`ABS` — Absolute value\n\n### Description\n`ABS(A)` computes the absolute value of `A`.\n\n\n\n### Syntax\n`RESULT = ABS(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and\nkind as the argument except the return value is `REAL` for a\n`COMPLEX` argument.\n\n\n\n### Example\n```\n\n\nprogram test_abs\n\n  integer :: i = -1\n\n  real :: x = -1.e0\n\n  complex :: z = (-1.e0,0.e0)\n\n  i = abs(i)\n\n  x = abs(x)\n\n  x = abs(z)\n\nend program test_abs\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ABS(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `CABS(A)` | `COMPLEX(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DABS(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n | `IABS(A)` | `INTEGER(4) A` | `INTEGER(4)` | Fortran 77 and later\n\n | `ZABS(A)` | `COMPLEX(8) A` | `COMPLEX(8)` | GNU extension\n\n | `CDABS(A)` | `COMPLEX(8) A` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "ABS", + "docstr": "`ABS` — Absolute value\n\n### Description\n`ABS(A)` computes the absolute value of `A`.\n\n\n\n### Syntax\n`RESULT = ABS(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and\nkind as the argument except the return value is `REAL` for a\n`COMPLEX` argument.\n\n\n\n### Example\n```\n\n\nprogram test_abs\n\n  integer :: i = -1\n\n  real :: x = -1.e0\n\n  complex :: z = (-1.e0,0.e0)\n\n  i = abs(i)\n\n  x = abs(x)\n\n  x = abs(z)\n\nend program test_abs\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ABS(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `CABS(A)` | `COMPLEX(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DABS(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n | `IABS(A)` | `INTEGER(4) A` | `INTEGER(4)` | Fortran 77 and later\n\n | `ZABS(A)` | `COMPLEX(8) A` | `COMPLEX(8)` | GNU extension\n\n | `CDABS(A)` | `COMPLEX(8) A` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/ACCESS.json b/src/docs/ACCESS.json index bc8ea466..d9eb1c32 100644 --- a/src/docs/ACCESS.json +++ b/src/docs/ACCESS.json @@ -1,4 +1,4 @@ { - "keyword":"ACCESS", - "docstr":"`ACCESS` — Checks file access modes\n\n### Description\n`ACCESS(NAME, MODE)` checks whether the file `NAME`\nexists, is readable, writable or executable. Except for the\nexecutable check, `ACCESS` can be replaced by\nFortran 95's `INQUIRE`.\n\n\n\n### Syntax\n`RESULT = ACCESS(NAME, MODE)`\n\n\n### Arguments\n\n \n of default kind with the\nfile name. Tailing blank are ignored unless the character `achar(0)`is present, then all characters up to and excluding `achar(0)` are\nused as file name. \n\n | `MODE` | Scalar `CHARACTER` of default kind with the\nfile access mode, may be any concatenation of `\"r\"` (readable),\n`\"w\"` (writable) and `\"x\"` (executable), or `\" \"` to check\nfor existence.\n\n\n\n\n\n\n### Return value\nReturns a scalar `INTEGER`, which is `0` if the file is\naccessible in the given mode; otherwise or if an invalid argument\nhas been given for `MODE` the value `1` is returned.\n\n\n\n### Example\n```\n\n\nprogram access_test\n\n  implicit none\n\n  character(len=*), parameter :: file = 'test.dat'\n\n  character(len=*), parameter :: file2 = 'test.dat '//achar(0)\n\n  if(access(file,' ') == 0) print *, trim(file),' is exists'\n\n  if(access(file,'r') == 0) print *, trim(file),' is readable'\n\n  if(access(file,'w') == 0) print *, trim(file),' is writable'\n\n  if(access(file,'x') == 0) print *, trim(file),' is executable'\n\n  if(access(file2,'rwx') == 0) &\n\n    print *, trim(file2),' is readable, writable and executable'\n\nend program access_test\n\n```\n\n\n\n### Specific names\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\n\n" -} \ No newline at end of file + "keyword": "ACCESS", + "docstr": "`ACCESS` — Checks file access modes\n\n### Description\n`ACCESS(NAME, MODE)` checks whether the file `NAME`\nexists, is readable, writable or executable. Except for the\nexecutable check, `ACCESS` can be replaced by\nFortran 95's `INQUIRE`.\n\n\n\n### Syntax\n`RESULT = ACCESS(NAME, MODE)`\n\n\n### Arguments\n\n \n of default kind with the\nfile name. Tailing blank are ignored unless the character `achar(0)`is present, then all characters up to and excluding `achar(0)` are\nused as file name. \n\n | `MODE` | Scalar `CHARACTER` of default kind with the\nfile access mode, may be any concatenation of `\"r\"` (readable),\n`\"w\"` (writable) and `\"x\"` (executable), or `\" \"` to check\nfor existence.\n\n\n\n\n\n\n### Return value\nReturns a scalar `INTEGER`, which is `0` if the file is\naccessible in the given mode; otherwise or if an invalid argument\nhas been given for `MODE` the value `1` is returned.\n\n\n\n### Example\n```\n\n\nprogram access_test\n\n  implicit none\n\n  character(len=*), parameter :: file = 'test.dat'\n\n  character(len=*), parameter :: file2 = 'test.dat '//achar(0)\n\n  if(access(file,' ') == 0) print *, trim(file),' is exists'\n\n  if(access(file,'r') == 0) print *, trim(file),' is readable'\n\n  if(access(file,'w') == 0) print *, trim(file),' is writable'\n\n  if(access(file,'x') == 0) print *, trim(file),' is executable'\n\n  if(access(file2,'rwx') == 0) &\n\n    print *, trim(file2),' is readable, writable and executable'\n\nend program access_test\n\n```\n\n\n\n### Specific names\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\n\n" +} diff --git a/src/docs/ACHAR.json b/src/docs/ACHAR.json index 7a98c92c..977cab07 100644 --- a/src/docs/ACHAR.json +++ b/src/docs/ACHAR.json @@ -1,4 +1,4 @@ { - "keyword":"ACHAR", - "docstr":"`ACHAR` — Character in ASCII collating sequence\n\n### Description\n`ACHAR(I)` returns the character located at position `I`in the ASCII collating sequence.\n\n\n\n### Syntax\n`RESULT = ACHAR(I [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` with a length of one. \nIf the `KIND` argument is present, the return value is of the\nspecified kind and of the default kind otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_achar\n\n  character c\n\n  c = achar(32)\n\nend program test_achar\n\n```\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCHAR, IACHAR, ICHAR\n\n " -} \ No newline at end of file + "keyword": "ACHAR", + "docstr": "`ACHAR` — Character in ASCII collating sequence\n\n### Description\n`ACHAR(I)` returns the character located at position `I`in the ASCII collating sequence.\n\n\n\n### Syntax\n`RESULT = ACHAR(I [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` with a length of one. \nIf the `KIND` argument is present, the return value is of the\nspecified kind and of the default kind otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_achar\n\n  character c\n\n  c = achar(32)\n\nend program test_achar\n\n```\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCHAR, IACHAR, ICHAR\n\n " +} diff --git a/src/docs/ACOS.json b/src/docs/ACOS.json index cac3b3fb..8413c334 100644 --- a/src/docs/ACOS.json +++ b/src/docs/ACOS.json @@ -1,4 +1,4 @@ { - "keyword":"ACOS", - "docstr":"`ACOS` — Arccosine function\n\n### Description\n`ACOS(X)` computes the arccosine of `X` (inverse of `COS(X)`).\n\n\n\n### Syntax\n`RESULT = ACOS(X)`\n\n\n### Arguments\n\n \n with a magnitude that is\nless than or equal to one - or the type shall be `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real part of the result is in radians and lies in the range\n0 \\leq \\Re \\acos(x) \\leq \\pi.\n\n\n\n### Example\n```\n\n\nprogram test_acos\n\n  real(8) :: x = 0.866_8\n\n  x = acos(x)\n\nend program test_acos\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ACOS(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DACOS(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: COS\n\n " -} \ No newline at end of file + "keyword": "ACOS", + "docstr": "`ACOS` — Arccosine function\n\n### Description\n`ACOS(X)` computes the arccosine of `X` (inverse of `COS(X)`).\n\n\n\n### Syntax\n`RESULT = ACOS(X)`\n\n\n### Arguments\n\n \n with a magnitude that is\nless than or equal to one - or the type shall be `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real part of the result is in radians and lies in the range\n0 \\leq \\Re \\acos(x) \\leq \\pi.\n\n\n\n### Example\n```\n\n\nprogram test_acos\n\n  real(8) :: x = 0.866_8\n\n  x = acos(x)\n\nend program test_acos\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ACOS(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DACOS(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: COS\n\n " +} diff --git a/src/docs/ACOSD.json b/src/docs/ACOSD.json index 39c425e1..00b3a41c 100644 --- a/src/docs/ACOSD.json +++ b/src/docs/ACOSD.json @@ -1,4 +1,4 @@ { - "keyword":"ACOSD", - "docstr":"`ACOSD` — Arccosine function, degrees\n\n### Description\nACOSD(X) computes the arccosine of X in degrees (inverse of COSD(X)).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = ACOSD(X)\n### Arguments\n- X: The type shall either be REAL with a magnitude that is less than or equal to one - or the type shall be COMPLEX.\n### Return value\nThe return value is of the same type and kind as X. The real part of the result is in degrees and lies in the range 0 \\leq \\Re \\acos(x) \\leq 180.\n" + "keyword": "ACOSD", + "docstr": "`ACOSD` — Arccosine function, degrees\n\n### Description\nACOSD(X) computes the arccosine of X in degrees (inverse of COSD(X)).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = ACOSD(X)\n### Arguments\n- X: The type shall either be REAL with a magnitude that is less than or equal to one - or the type shall be COMPLEX.\n### Return value\nThe return value is of the same type and kind as X. The real part of the result is in degrees and lies in the range 0 \\leq \\Re \\acos(x) \\leq 180.\n" } diff --git a/src/docs/ACOSH.json b/src/docs/ACOSH.json index ea922d1d..164be3ca 100644 --- a/src/docs/ACOSH.json +++ b/src/docs/ACOSH.json @@ -1,4 +1,4 @@ { - "keyword":"ACOSH", - "docstr":"`ACOSH` — Inverse hyperbolic cosine function\n\n### Description\n`ACOSH(X)` computes the inverse hyperbolic cosine of `X`.\n\n\n\n### Syntax\n`RESULT = ACOSH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n 0 \\leq \\Im \\acosh(x) \\leq \\pi.\n\n\n\n### Example\n```\n\n\nPROGRAM test_acosh\n\n  REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)\n\n  WRITE (*,*) ACOSH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DACOSH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: COSH\n" -} \ No newline at end of file + "keyword": "ACOSH", + "docstr": "`ACOSH` — Inverse hyperbolic cosine function\n\n### Description\n`ACOSH(X)` computes the inverse hyperbolic cosine of `X`.\n\n\n\n### Syntax\n`RESULT = ACOSH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n 0 \\leq \\Im \\acosh(x) \\leq \\pi.\n\n\n\n### Example\n```\n\n\nPROGRAM test_acosh\n\n  REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /)\n\n  WRITE (*,*) ACOSH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DACOSH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: COSH\n" +} diff --git a/src/docs/ADJUSTL.json b/src/docs/ADJUSTL.json index 1aad5d41..07c42d99 100644 --- a/src/docs/ADJUSTL.json +++ b/src/docs/ADJUSTL.json @@ -1,4 +1,4 @@ { - "keyword":"ADJUSTL", - "docstr":"`ADJUSTL` — Left adjust a string\n\n### Description\n`ADJUSTL(STRING)` will left adjust a string by removing leading spaces. \nSpaces are inserted at the end of the string as needed.\n\n\n\n### Syntax\n`RESULT = ADJUSTL(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` and of the same kind as\n`STRING` where leading spaces are removed and the same number of\nspaces are inserted on the end of `STRING`.\n\n\n\n### Example\n```\n\n\nprogram test_adjustl\n\n  character(len=20) :: str = ' gfortran'\n\n  str = adjustl(str)\n\n  print *, str\n\nend program test_adjustl\n\n```\n\n\n\n### Standard\nFortran 90 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nADJUSTR, TRIM\n" -} \ No newline at end of file + "keyword": "ADJUSTL", + "docstr": "`ADJUSTL` — Left adjust a string\n\n### Description\n`ADJUSTL(STRING)` will left adjust a string by removing leading spaces. \nSpaces are inserted at the end of the string as needed.\n\n\n\n### Syntax\n`RESULT = ADJUSTL(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` and of the same kind as\n`STRING` where leading spaces are removed and the same number of\nspaces are inserted on the end of `STRING`.\n\n\n\n### Example\n```\n\n\nprogram test_adjustl\n\n  character(len=20) :: str = ' gfortran'\n\n  str = adjustl(str)\n\n  print *, str\n\nend program test_adjustl\n\n```\n\n\n\n### Standard\nFortran 90 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nADJUSTR, TRIM\n" +} diff --git a/src/docs/ADJUSTR.json b/src/docs/ADJUSTR.json index 117f88f1..37cc7710 100644 --- a/src/docs/ADJUSTR.json +++ b/src/docs/ADJUSTR.json @@ -1,4 +1,4 @@ { - "keyword":"ADJUSTR", - "docstr":"`ADJUSTR` — Right adjust a string\n\n### Description\n`ADJUSTR(STRING)` will right adjust a string by removing trailing spaces. \nSpaces are inserted at the start of the string as needed.\n\n\n\n### Syntax\n`RESULT = ADJUSTR(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` and of the same kind as\n`STRING` where trailing spaces are removed and the same number of\nspaces are inserted at the start of `STRING`.\n\n\n\n### Example\n```\n\n\nprogram test_adjustr\n\n  character(len=20) :: str = 'gfortran'\n\n  str = adjustr(str)\n\n  print *, str\n\nend program test_adjustr\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nADJUSTL, TRIM\n" -} \ No newline at end of file + "keyword": "ADJUSTR", + "docstr": "`ADJUSTR` — Right adjust a string\n\n### Description\n`ADJUSTR(STRING)` will right adjust a string by removing trailing spaces. \nSpaces are inserted at the start of the string as needed.\n\n\n\n### Syntax\n`RESULT = ADJUSTR(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER` and of the same kind as\n`STRING` where trailing spaces are removed and the same number of\nspaces are inserted at the start of `STRING`.\n\n\n\n### Example\n```\n\n\nprogram test_adjustr\n\n  character(len=20) :: str = 'gfortran'\n\n  str = adjustr(str)\n\n  print *, str\n\nend program test_adjustr\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nADJUSTL, TRIM\n" +} diff --git a/src/docs/AIMAG.json b/src/docs/AIMAG.json index 23c93914..0c2691bd 100644 --- a/src/docs/AIMAG.json +++ b/src/docs/AIMAG.json @@ -1,4 +1,4 @@ { - "keyword":"AIMAG", - "docstr":"`AIMAG` — Imaginary part of complex number\n\n### Description\n`AIMAG(Z)` yields the imaginary part of complex argument `Z`. \nThe `IMAG(Z)` and `IMAGPART(Z)` intrinsic functions are provided\nfor compatibility with *g77*, and their use in new code is\nstrongly discouraged.\n\n\n\n### Syntax\n`RESULT = AIMAG(Z)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` with the\nkind type parameter of the argument.\n\n\n\n### Example\n```\n\n\nprogram test_aimag\n\n  complex(4) z4\n\n  complex(8) z8\n\n  z4 = cmplx(1.e0_4, 0.e0_4)\n\n  z8 = cmplx(0.e0_8, 1.e0_8)\n\n  print *, aimag(z4), dimag(z8)\n\nend program test_aimag\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AIMAG(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n | `DIMAG(Z)` | `COMPLEX(8) Z` | `REAL(8)` | GNU extension\n\n | `IMAG(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n | `IMAGPART(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "AIMAG", + "docstr": "`AIMAG` — Imaginary part of complex number\n\n### Description\n`AIMAG(Z)` yields the imaginary part of complex argument `Z`. \nThe `IMAG(Z)` and `IMAGPART(Z)` intrinsic functions are provided\nfor compatibility with *g77*, and their use in new code is\nstrongly discouraged.\n\n\n\n### Syntax\n`RESULT = AIMAG(Z)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` with the\nkind type parameter of the argument.\n\n\n\n### Example\n```\n\n\nprogram test_aimag\n\n  complex(4) z4\n\n  complex(8) z8\n\n  z4 = cmplx(1.e0_4, 0.e0_4)\n\n  z8 = cmplx(0.e0_8, 1.e0_8)\n\n  print *, aimag(z4), dimag(z8)\n\nend program test_aimag\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AIMAG(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n | `DIMAG(Z)` | `COMPLEX(8) Z` | `REAL(8)` | GNU extension\n\n | `IMAG(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n | `IMAGPART(Z)` | `COMPLEX Z` | `REAL` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/AINT.json b/src/docs/AINT.json index 88eb8a01..79b71d74 100644 --- a/src/docs/AINT.json +++ b/src/docs/AINT.json @@ -1,4 +1,4 @@ { - "keyword":"AINT", - "docstr":"`AINT` — Truncate to a whole number\n\n### Description\n`AINT(A [, KIND])` truncates its argument to a whole number.\n\n\n\n### Syntax\n`RESULT = AINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` with the kind type parameter of the\nargument if the optional `KIND` is absent; otherwise, the kind\ntype parameter will be given by `KIND`. If the magnitude of\n`X` is less than one, `AINT(X)` returns zero. If the\nmagnitude is equal to or greater than one then it returns the largest\nwhole number that does not exceed its magnitude. The sign is the same\nas the sign of `X`.\n\n\n\n### Example\n```\n\n\nprogram test_aint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, aint(x4), dint(x8)\n\n  x8 = aint(x4,8)\n\nend program test_aint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AINT(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DINT(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "AINT", + "docstr": "`AINT` — Truncate to a whole number\n\n### Description\n`AINT(A [, KIND])` truncates its argument to a whole number.\n\n\n\n### Syntax\n`RESULT = AINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` with the kind type parameter of the\nargument if the optional `KIND` is absent; otherwise, the kind\ntype parameter will be given by `KIND`. If the magnitude of\n`X` is less than one, `AINT(X)` returns zero. If the\nmagnitude is equal to or greater than one then it returns the largest\nwhole number that does not exceed its magnitude. The sign is the same\nas the sign of `X`.\n\n\n\n### Example\n```\n\n\nprogram test_aint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, aint(x4), dint(x8)\n\n  x8 = aint(x4,8)\n\nend program test_aint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AINT(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DINT(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/ALARM.json b/src/docs/ALARM.json index c84c4c33..03e6e2cc 100644 --- a/src/docs/ALARM.json +++ b/src/docs/ALARM.json @@ -1,4 +1,4 @@ { - "keyword":"ALARM", - "docstr":"`ALARM` — Execute a routine after a given delay\n\n### Description\n`ALARM(SECONDS, HANDLER [, STATUS])` causes external subroutine `HANDLER`\nto be executed after a delay of `SECONDS` by using `alarm(2)` to\nset up a signal and `signal(2)` to catch it. If `STATUS` is\nsupplied, it will be returned with the number of seconds remaining until\nany previously scheduled alarm was due to be delivered, or zero if there\nwas no previously scheduled alarm.\n\n\n\n### Syntax\n`CALL ALARM(SECONDS, HANDLER [, STATUS])`\n\n\n### Arguments\n\n \n | `SECONDS` | The type of the argument shall be a scalar\n`INTEGER`. It is `INTENT(IN)`. \n\n | `HANDLER` | Signal handler (`INTEGER FUNCTION` or\n`SUBROUTINE`) or dummy/global `INTEGER` scalar. The scalar\nvalues may be either `SIG_IGN=1` to ignore the alarm generated\nor `SIG_DFL=0` to set the default action. It is `INTENT(IN)`. \n\n | `STATUS` | (Optional) `STATUS` shall be a scalar\nvariable of the default `INTEGER` kind. It is `INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_alarm\n\n  external handler_print\n\n  integer i\n\n  call alarm (3, handler_print, i)\n\n  print *, i\n\n  call sleep(10)\n\nend program test_alarm\n\n```\n\n \nThis will cause the external routine `handler_print` to be called\nafter 3 seconds. \n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" -} \ No newline at end of file + "keyword": "ALARM", + "docstr": "`ALARM` — Execute a routine after a given delay\n\n### Description\n`ALARM(SECONDS, HANDLER [, STATUS])` causes external subroutine `HANDLER`\nto be executed after a delay of `SECONDS` by using `alarm(2)` to\nset up a signal and `signal(2)` to catch it. If `STATUS` is\nsupplied, it will be returned with the number of seconds remaining until\nany previously scheduled alarm was due to be delivered, or zero if there\nwas no previously scheduled alarm.\n\n\n\n### Syntax\n`CALL ALARM(SECONDS, HANDLER [, STATUS])`\n\n\n### Arguments\n\n \n | `SECONDS` | The type of the argument shall be a scalar\n`INTEGER`. It is `INTENT(IN)`. \n\n | `HANDLER` | Signal handler (`INTEGER FUNCTION` or\n`SUBROUTINE`) or dummy/global `INTEGER` scalar. The scalar\nvalues may be either `SIG_IGN=1` to ignore the alarm generated\nor `SIG_DFL=0` to set the default action. It is `INTENT(IN)`. \n\n | `STATUS` | (Optional) `STATUS` shall be a scalar\nvariable of the default `INTEGER` kind. It is `INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_alarm\n\n  external handler_print\n\n  integer i\n\n  call alarm (3, handler_print, i)\n\n  print *, i\n\n  call sleep(10)\n\nend program test_alarm\n\n```\n\n \nThis will cause the external routine `handler_print` to be called\nafter 3 seconds. \n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" +} diff --git a/src/docs/ALL.json b/src/docs/ALL.json index 1defb7f1..0ecdaf45 100644 --- a/src/docs/ALL.json +++ b/src/docs/ALL.json @@ -1,4 +1,4 @@ { - "keyword":"ALL", - "docstr":"`ALL` — All values in `MASK` along `DIM` are true\n\n### Description\n`ALL(MASK [, DIM])` determines if all the values are true in `MASK`\nin the array along dimension `DIM`.\n\n\n\n### Syntax\n`RESULT = ALL(MASK [, DIM])`\n\n\n### Arguments\n\n \n and\nit shall not be scalar. \n\n | `DIM` | (Optional) `DIM` shall be a scalar integer\nwith a value that lies between one and the rank of `MASK`.\n\n\n\n\n\n\n### Return value\n`ALL(MASK)` returns a scalar value of type `LOGICAL` where\nthe kind type parameter is the same as the kind type parameter of\n`MASK`. If `DIM` is present, then `ALL(MASK, DIM)` returns\nan array with the rank of `MASK` minus 1. The shape is determined from\nthe shape of `MASK` where the `DIM` dimension is elided.\n\n
\n**(A)** `ALL(MASK)` is true if all elements of `MASK` are true. \nIt also is true if `MASK` has zero size; otherwise, it is false. \n\n**(B)** If the rank of `MASK` is one, then `ALL(MASK,DIM)` is equivalent\nto `ALL(MASK)`. If the rank is greater than one, then `ALL(MASK,DIM)`is determined by applying `ALL` to the array sections. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_all\n\n  logical l\n\n  l = all((/.true., .true., .true./))\n\n  print *, l\n\n  call section\n\n  contains\n\n    subroutine section\n\n      integer a(2,3), b(2,3)\n\n      a = 1\n\n      b = 1\n\n      b(2,2) = 2\n\n      print *, all(a .eq. b, 1)\n\n      print *, all(a .eq. b, 2)\n\n    end subroutine section\n\nend program test_all\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "ALL", + "docstr": "`ALL` — All values in `MASK` along `DIM` are true\n\n### Description\n`ALL(MASK [, DIM])` determines if all the values are true in `MASK`\nin the array along dimension `DIM`.\n\n\n\n### Syntax\n`RESULT = ALL(MASK [, DIM])`\n\n\n### Arguments\n\n \n and\nit shall not be scalar. \n\n | `DIM` | (Optional) `DIM` shall be a scalar integer\nwith a value that lies between one and the rank of `MASK`.\n\n\n\n\n\n\n### Return value\n`ALL(MASK)` returns a scalar value of type `LOGICAL` where\nthe kind type parameter is the same as the kind type parameter of\n`MASK`. If `DIM` is present, then `ALL(MASK, DIM)` returns\nan array with the rank of `MASK` minus 1. The shape is determined from\nthe shape of `MASK` where the `DIM` dimension is elided.\n\n
\n**(A)** `ALL(MASK)` is true if all elements of `MASK` are true. \nIt also is true if `MASK` has zero size; otherwise, it is false. \n\n**(B)** If the rank of `MASK` is one, then `ALL(MASK,DIM)` is equivalent\nto `ALL(MASK)`. If the rank is greater than one, then `ALL(MASK,DIM)`is determined by applying `ALL` to the array sections. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_all\n\n  logical l\n\n  l = all((/.true., .true., .true./))\n\n  print *, l\n\n  call section\n\n  contains\n\n    subroutine section\n\n      integer a(2,3), b(2,3)\n\n      a = 1\n\n      b = 1\n\n      b(2,2) = 2\n\n      print *, all(a .eq. b, 1)\n\n      print *, all(a .eq. b, 2)\n\n    end subroutine section\n\nend program test_all\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/ALLOCATED.json b/src/docs/ALLOCATED.json index 9e0a0617..892c76e5 100644 --- a/src/docs/ALLOCATED.json +++ b/src/docs/ALLOCATED.json @@ -1,4 +1,4 @@ { - "keyword":"ALLOCATED", - "docstr":"`ALLOCATED` — Status of an allocatable entity\n\n### Description\n`ALLOCATED(ARRAY)` and `ALLOCATED(SCALAR)` check the allocation\nstatus of `ARRAY` and `SCALAR`, respectively.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = ALLOCATED(SCALAR)`
\n\n\n\n\n\n### Arguments\n\n \n array. \n\n | `SCALAR` | The argument shall be an `ALLOCATABLE` scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar `LOGICAL` with the default logical\nkind type parameter. If the argument is allocated, then the result is\n`.TRUE.`; otherwise, it returns `.FALSE.`\n\n\n### Example\n```\n\n\nprogram test_allocated\n\n  integer :: i = 4\n\n  real(4), allocatable :: x(:)\n\n  if (.not. allocated(x)) allocate(x(i))\n\nend program test_allocated\n\n```\n\n \n\n### Standard\nFortran 95 and later. Note, the `SCALAR=` keyword and allocatable\nscalar entities are available in Fortran 2003 and later.\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "ALLOCATED", + "docstr": "`ALLOCATED` — Status of an allocatable entity\n\n### Description\n`ALLOCATED(ARRAY)` and `ALLOCATED(SCALAR)` check the allocation\nstatus of `ARRAY` and `SCALAR`, respectively.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = ALLOCATED(SCALAR)`
\n\n\n\n\n\n### Arguments\n\n \n array. \n\n | `SCALAR` | The argument shall be an `ALLOCATABLE` scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar `LOGICAL` with the default logical\nkind type parameter. If the argument is allocated, then the result is\n`.TRUE.`; otherwise, it returns `.FALSE.`\n\n\n### Example\n```\n\n\nprogram test_allocated\n\n  integer :: i = 4\n\n  real(4), allocatable :: x(:)\n\n  if (.not. allocated(x)) allocate(x(i))\n\nend program test_allocated\n\n```\n\n \n\n### Standard\nFortran 95 and later. Note, the `SCALAR=` keyword and allocatable\nscalar entities are available in Fortran 2003 and later.\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/AND.json b/src/docs/AND.json index 2717683a..d07dc646 100644 --- a/src/docs/AND.json +++ b/src/docs/AND.json @@ -1,4 +1,4 @@ { - "keyword":"AND", - "docstr":"`AND` — Bitwise logical AND\n\n### Description\nBitwise logical `AND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IAND intrinsic defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = AND(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `I`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_and\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F)\n\n  WRITE (*,*) AND(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IAND\n" -} \ No newline at end of file + "keyword": "AND", + "docstr": "`AND` — Bitwise logical AND\n\n### Description\nBitwise logical `AND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IAND intrinsic defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = AND(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `I`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_and\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F)\n\n  WRITE (*,*) AND(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IAND\n" +} diff --git a/src/docs/ANINT.json b/src/docs/ANINT.json index 049ee2f6..c12f1efc 100644 --- a/src/docs/ANINT.json +++ b/src/docs/ANINT.json @@ -1,4 +1,4 @@ { - "keyword":"ANINT", - "docstr":"`ANINT` — Nearest whole number\n\n### Description\n`ANINT(A [, KIND])` rounds its argument to the nearest whole number.\n\n\n\n### Syntax\n`RESULT = ANINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type real with the kind type parameter of the\nargument if the optional `KIND` is absent; otherwise, the kind\ntype parameter will be given by `KIND`. If `A` is greater than\nzero, `ANINT(A)` returns `AINT(X+0.5)`. If `A` is\nless than or equal to zero then it returns `AINT(X-0.5)`.\n\n\n\n### Example\n```\n\n\nprogram test_anint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, anint(x4), dnint(x8)\n\n  x8 = anint(x4,8)\n\nend program test_anint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AINT(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DNINT(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "ANINT", + "docstr": "`ANINT` — Nearest whole number\n\n### Description\n`ANINT(A [, KIND])` rounds its argument to the nearest whole number.\n\n\n\n### Syntax\n`RESULT = ANINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type real with the kind type parameter of the\nargument if the optional `KIND` is absent; otherwise, the kind\ntype parameter will be given by `KIND`. If `A` is greater than\nzero, `ANINT(A)` returns `AINT(X+0.5)`. If `A` is\nless than or equal to zero then it returns `AINT(X-0.5)`.\n\n\n\n### Example\n```\n\n\nprogram test_anint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, anint(x4), dnint(x8)\n\n  x8 = anint(x4,8)\n\nend program test_anint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `AINT(A)` | `REAL(4) A` | `REAL(4)` | Fortran 77 and later\n\n | `DNINT(A)` | `REAL(8) A` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/ANY.json b/src/docs/ANY.json index 2ead6f7e..136afca6 100644 --- a/src/docs/ANY.json +++ b/src/docs/ANY.json @@ -1,4 +1,4 @@ { - "keyword":"ANY", - "docstr":"`ANY` — Any value in `MASK` along `DIM` is true\n\n### Description\n`ANY(MASK [, DIM])` determines if any of the values in the logical array\n`MASK` along dimension `DIM` are `.TRUE.`.\n\n\n\n### Syntax\n`RESULT = ANY(MASK [, DIM])`\n\n\n### Arguments\n\n \n and\nit shall not be scalar. \n\n | `DIM` | (Optional) `DIM` shall be a scalar integer\nwith a value that lies between one and the rank of `MASK`.\n\n\n\n\n\n\n### Return value\n`ANY(MASK)` returns a scalar value of type `LOGICAL` where\nthe kind type parameter is the same as the kind type parameter of\n`MASK`. If `DIM` is present, then `ANY(MASK, DIM)` returns\nan array with the rank of `MASK` minus 1. The shape is determined from\nthe shape of `MASK` where the `DIM` dimension is elided.\n\n
\n**(A)** `ANY(MASK)` is true if any element of `MASK` is true;\notherwise, it is false. It also is false if `MASK` has zero size. \n\n**(B)** If the rank of `MASK` is one, then `ANY(MASK,DIM)` is equivalent\nto `ANY(MASK)`. If the rank is greater than one, then `ANY(MASK,DIM)`is determined by applying `ANY` to the array sections. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_any\n\n  logical l\n\n  l = any((/.true., .true., .true./))\n\n  print *, l\n\n  call section\n\n  contains\n\n    subroutine section\n\n      integer a(2,3), b(2,3)\n\n      a = 1\n\n      b = 1\n\n      b(2,2) = 2\n\n      print *, any(a .eq. b, 1)\n\n      print *, any(a .eq. b, 2)\n\n    end subroutine section\n\nend program test_any\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "ANY", + "docstr": "`ANY` — Any value in `MASK` along `DIM` is true\n\n### Description\n`ANY(MASK [, DIM])` determines if any of the values in the logical array\n`MASK` along dimension `DIM` are `.TRUE.`.\n\n\n\n### Syntax\n`RESULT = ANY(MASK [, DIM])`\n\n\n### Arguments\n\n \n and\nit shall not be scalar. \n\n | `DIM` | (Optional) `DIM` shall be a scalar integer\nwith a value that lies between one and the rank of `MASK`.\n\n\n\n\n\n\n### Return value\n`ANY(MASK)` returns a scalar value of type `LOGICAL` where\nthe kind type parameter is the same as the kind type parameter of\n`MASK`. If `DIM` is present, then `ANY(MASK, DIM)` returns\nan array with the rank of `MASK` minus 1. The shape is determined from\nthe shape of `MASK` where the `DIM` dimension is elided.\n\n
\n**(A)** `ANY(MASK)` is true if any element of `MASK` is true;\notherwise, it is false. It also is false if `MASK` has zero size. \n\n**(B)** If the rank of `MASK` is one, then `ANY(MASK,DIM)` is equivalent\nto `ANY(MASK)`. If the rank is greater than one, then `ANY(MASK,DIM)`is determined by applying `ANY` to the array sections. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_any\n\n  logical l\n\n  l = any((/.true., .true., .true./))\n\n  print *, l\n\n  call section\n\n  contains\n\n    subroutine section\n\n      integer a(2,3), b(2,3)\n\n      a = 1\n\n      b = 1\n\n      b(2,2) = 2\n\n      print *, any(a .eq. b, 1)\n\n      print *, any(a .eq. b, 2)\n\n    end subroutine section\n\nend program test_any\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/ASIN.json b/src/docs/ASIN.json index 53ac5be5..c5d7a7b3 100644 --- a/src/docs/ASIN.json +++ b/src/docs/ASIN.json @@ -1,4 +1,4 @@ { - "keyword":"ASIN", - "docstr":"`ASIN` — Arcsine function\n\n### Description\n`ASIN(X)` computes the arcsine of its `X` (inverse of `SIN(X)`).\n\n\n\n### Syntax\n`RESULT = ASIN(X)`\n\n\n### Arguments\n\n \n and a magnitude that is\nless than or equal to one - or be `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real part of the result is in radians and lies in the range\n-\\pi/2 \\leq \\Re \\asin(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nprogram test_asin\n\n  real(8) :: x = 0.866_8\n\n  x = asin(x)\n\nend program test_asin\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ASIN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DASIN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: SIN\n\n " -} \ No newline at end of file + "keyword": "ASIN", + "docstr": "`ASIN` — Arcsine function\n\n### Description\n`ASIN(X)` computes the arcsine of its `X` (inverse of `SIN(X)`).\n\n\n\n### Syntax\n`RESULT = ASIN(X)`\n\n\n### Arguments\n\n \n and a magnitude that is\nless than or equal to one - or be `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real part of the result is in radians and lies in the range\n-\\pi/2 \\leq \\Re \\asin(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nprogram test_asin\n\n  real(8) :: x = 0.866_8\n\n  x = asin(x)\n\nend program test_asin\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ASIN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DASIN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: SIN\n\n " +} diff --git a/src/docs/ASIND.json b/src/docs/ASIND.json index d09a7763..a7f39c9d 100644 --- a/src/docs/ASIND.json +++ b/src/docs/ASIND.json @@ -1,4 +1,4 @@ { - "keyword":"ASIND", - "docstr":"`ASIND` — Arcsine function, degrees\n\n### Description\nASIND(X) computes the arcsine of its X in degrees (inverse of SIND(X)).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = ASIND(X)\n### Arguments\n- X: The type shall be either REAL and a magnitude that is less than or equal to one - or be COMPLEX.\n### Return value\nThe return value is of the same type and kind as X. The real part of the result is in degrees and lies in the range -90 \\leq \\Re \\asin(x) \\leq 90.\n" -} \ No newline at end of file + "keyword": "ASIND", + "docstr": "`ASIND` — Arcsine function, degrees\n\n### Description\nASIND(X) computes the arcsine of its X in degrees (inverse of SIND(X)).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = ASIND(X)\n### Arguments\n- X: The type shall be either REAL and a magnitude that is less than or equal to one - or be COMPLEX.\n### Return value\nThe return value is of the same type and kind as X. The real part of the result is in degrees and lies in the range -90 \\leq \\Re \\asin(x) \\leq 90.\n" +} diff --git a/src/docs/ASINH.json b/src/docs/ASINH.json index ae86671e..45700d77 100644 --- a/src/docs/ASINH.json +++ b/src/docs/ASINH.json @@ -1,4 +1,4 @@ { - "keyword":"ASINH", - "docstr":"`ASINH` — Inverse hyperbolic sine function\n\n### Description\n`ASINH(X)` computes the inverse hyperbolic sine of `X`.\n\n\n\n### Syntax\n`RESULT = ASINH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n-\\pi/2 \\leq \\Im \\asinh(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nPROGRAM test_asinh\n\n  REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)\n\n  WRITE (*,*) ASINH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DASINH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension.\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: SINH\n" -} \ No newline at end of file + "keyword": "ASINH", + "docstr": "`ASINH` — Inverse hyperbolic sine function\n\n### Description\n`ASINH(X)` computes the inverse hyperbolic sine of `X`.\n\n\n\n### Syntax\n`RESULT = ASINH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n-\\pi/2 \\leq \\Im \\asinh(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nPROGRAM test_asinh\n\n  REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)\n\n  WRITE (*,*) ASINH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DASINH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension.\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: SINH\n" +} diff --git a/src/docs/ASSOCIATED.json b/src/docs/ASSOCIATED.json index bd90d829..c01345d1 100644 --- a/src/docs/ASSOCIATED.json +++ b/src/docs/ASSOCIATED.json @@ -1,4 +1,4 @@ { - "keyword":"ASSOCIATED", - "docstr":"`ASSOCIATED` — Status of a pointer or pointer/target pair\n\n### Description\n`ASSOCIATED(POINTER [, TARGET])` determines the status of the pointer\n`POINTER` or if `POINTER` is associated with the target `TARGET`.\n\n\n\n### Syntax\n`RESULT = ASSOCIATED(POINTER [, TARGET])`\n\n\n### Arguments\n\n \n attribute\nand it can be of any type. \n\n | `TARGET` | (Optional) `TARGET` shall be a pointer or\na target. It must have the same type, kind type parameter, and\narray rank as `POINTER`.\n\n\nThe association status of neither `POINTER` nor `TARGET` shall be\nundefined.\n\n\n\n\n### Return value\n`ASSOCIATED(POINTER)` returns a scalar value of type `LOGICAL(4)`. \nThere are several cases:\n
\n**(A) When the optional `TARGET` is not present then** `ASSOCIATED(POINTER)` is true if `POINTER` is associated with a target; otherwise, it returns false. \n\n**(B) If `TARGET` is present and a scalar target, the result is true if** `TARGET` is not a zero-sized storage sequence and the target associated with `POINTER` occupies the same storage units. If `POINTER` is\ndisassociated, the result is false. \n\n**(C) If `TARGET` is present and an array target, the result is true if** `TARGET` and `POINTER` have the same shape, are not zero-sized arrays,\nare arrays whose elements are not zero-sized storage sequences, and\n`TARGET` and `POINTER` occupy the same storage units in array element\norder. \nAs in case(B), the result is false, if `POINTER` is disassociated. \n\n**(D) If `TARGET` is present and an scalar pointer, the result is true** if `TARGET` is associated with `POINTER`, the target associated with\n`TARGET` are not zero-sized storage sequences and occupy the same storage\nunits. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n**(E) If `TARGET` is present and an array pointer, the result is true if** target associated with `POINTER` and the target associated with `TARGET`\nhave the same shape, are not zero-sized arrays, are arrays whose elements are\nnot zero-sized storage sequences, and `TARGET` and `POINTER` occupy\nthe same storage units in array element order. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_associated\n\n   implicit none\n\n   real, target :: tgt(2) = (/1., 2./)\n\n   real, pointer :: ptr(:)\n\n   ptr => tgt\n\n   if (associated(ptr) .eqv. .false.) call abort\n\n   if (associated(ptr,tgt) .eqv. .false.) call abort\n\nend program test_associated\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nNULL\n" -} \ No newline at end of file + "keyword": "ASSOCIATED", + "docstr": "`ASSOCIATED` — Status of a pointer or pointer/target pair\n\n### Description\n`ASSOCIATED(POINTER [, TARGET])` determines the status of the pointer\n`POINTER` or if `POINTER` is associated with the target `TARGET`.\n\n\n\n### Syntax\n`RESULT = ASSOCIATED(POINTER [, TARGET])`\n\n\n### Arguments\n\n \n attribute\nand it can be of any type. \n\n | `TARGET` | (Optional) `TARGET` shall be a pointer or\na target. It must have the same type, kind type parameter, and\narray rank as `POINTER`.\n\n\nThe association status of neither `POINTER` nor `TARGET` shall be\nundefined.\n\n\n\n\n### Return value\n`ASSOCIATED(POINTER)` returns a scalar value of type `LOGICAL(4)`. \nThere are several cases:\n
\n**(A) When the optional `TARGET` is not present then** `ASSOCIATED(POINTER)` is true if `POINTER` is associated with a target; otherwise, it returns false. \n\n**(B) If `TARGET` is present and a scalar target, the result is true if** `TARGET` is not a zero-sized storage sequence and the target associated with `POINTER` occupies the same storage units. If `POINTER` is\ndisassociated, the result is false. \n\n**(C) If `TARGET` is present and an array target, the result is true if** `TARGET` and `POINTER` have the same shape, are not zero-sized arrays,\nare arrays whose elements are not zero-sized storage sequences, and\n`TARGET` and `POINTER` occupy the same storage units in array element\norder. \nAs in case(B), the result is false, if `POINTER` is disassociated. \n\n**(D) If `TARGET` is present and an scalar pointer, the result is true** if `TARGET` is associated with `POINTER`, the target associated with\n`TARGET` are not zero-sized storage sequences and occupy the same storage\nunits. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n**(E) If `TARGET` is present and an array pointer, the result is true if** target associated with `POINTER` and the target associated with `TARGET`\nhave the same shape, are not zero-sized arrays, are arrays whose elements are\nnot zero-sized storage sequences, and `TARGET` and `POINTER` occupy\nthe same storage units in array element order. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_associated\n\n   implicit none\n\n   real, target :: tgt(2) = (/1., 2./)\n\n   real, pointer :: ptr(:)\n\n   ptr => tgt\n\n   if (associated(ptr) .eqv. .false.) call abort\n\n   if (associated(ptr,tgt) .eqv. .false.) call abort\n\nend program test_associated\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nNULL\n" +} diff --git a/src/docs/ATAN.json b/src/docs/ATAN.json index 06144e6a..0c42e003 100644 --- a/src/docs/ATAN.json +++ b/src/docs/ATAN.json @@ -1,4 +1,4 @@ { - "keyword":"ATAN", - "docstr":"`ATAN` — Arctangent function\n\n### Description\n`ATAN(X)` computes the arctangent of `X`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = ATAN(Y, X)`
\n\n\n\n\n\n### Arguments\n\n \n;\nif `Y` is present, `X` shall be REAL. \n\n | `Y` shall be of the same type and kind as `X`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nIf `Y` is present, the result is identical to `ATAN2(Y,X)`. \nOtherwise, it the arcus tangent of `X`, where the real part of\nthe result is in radians and lies in the range\n-\\pi/2 \\leq \\Re \\atan(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nprogram test_atan\n\n  real(8) :: x = 2.866_8\n\n  x = atan(x)\n\nend program test_atan\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ATAN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DATAN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument and for two arguments\nFortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: TAN\n\n " -} \ No newline at end of file + "keyword": "ATAN", + "docstr": "`ATAN` — Arctangent function\n\n### Description\n`ATAN(X)` computes the arctangent of `X`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = ATAN(Y, X)`
\n\n\n\n\n\n### Arguments\n\n \n;\nif `Y` is present, `X` shall be REAL. \n\n | `Y` shall be of the same type and kind as `X`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nIf `Y` is present, the result is identical to `ATAN2(Y,X)`. \nOtherwise, it the arcus tangent of `X`, where the real part of\nthe result is in radians and lies in the range\n-\\pi/2 \\leq \\Re \\atan(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nprogram test_atan\n\n  real(8) :: x = 2.866_8\n\n  x = atan(x)\n\nend program test_atan\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ATAN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DATAN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument and for two arguments\nFortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: TAN\n\n " +} diff --git a/src/docs/ATAN2.json b/src/docs/ATAN2.json index ecf8e496..2badc071 100644 --- a/src/docs/ATAN2.json +++ b/src/docs/ATAN2.json @@ -1,4 +1,4 @@ { - "keyword":"ATAN2", - "docstr":"`ATAN2` — Arctangent function\n\n### Description\n`ATAN2(Y, X)` computes the principal value of the argument\nfunction of the complex number X + i Y. This function can\nbe used to transform from Cartesian into polar coordinates and\nallows to determine the angle in the correct quadrant.\n\n\n\n### Syntax\n`RESULT = ATAN2(Y, X)`\n\n\n### Arguments\n\n \n. \n\n | `X` | The type and kind type parameter shall be the same as `Y`. \nIf `Y` is zero, then `X` must be nonzero.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind type parameter as `Y`. It\nis the principal value of the complex number X + i Y. If `X`\nis nonzero, then it lies in the range -\\pi \\le \\atan (x) \\leq \\pi. \nThe sign is positive if `Y` is positive. If `Y` is zero, then\nthe return value is zero if `X` is strictly positive, \\pi if\n`X` is negative and `Y` is positive zero (or the processor does\nnot handle signed zeros), and -\\pi if `X` is negative and\n`Y` is negative zero. Finally, if `X` is zero, then the\nmagnitude of the result is \\pi/2.\n\n\n\n### Example\n```\n\n\nprogram test_atan2\n\n  real(4) :: x = 1.e0_4, y = 0.5e0_4\n\n  x = atan2(y,x)\n\nend program test_atan2\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ATAN2(X, Y)` | `REAL(4) X, Y` | `REAL(4)` | Fortran 77 and later\n\n | `DATAN2(X, Y)` | `REAL(8) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "ATAN2", + "docstr": "`ATAN2` — Arctangent function\n\n### Description\n`ATAN2(Y, X)` computes the principal value of the argument\nfunction of the complex number X + i Y. This function can\nbe used to transform from Cartesian into polar coordinates and\nallows to determine the angle in the correct quadrant.\n\n\n\n### Syntax\n`RESULT = ATAN2(Y, X)`\n\n\n### Arguments\n\n \n. \n\n | `X` | The type and kind type parameter shall be the same as `Y`. \nIf `Y` is zero, then `X` must be nonzero.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind type parameter as `Y`. It\nis the principal value of the complex number X + i Y. If `X`\nis nonzero, then it lies in the range -\\pi \\le \\atan (x) \\leq \\pi. \nThe sign is positive if `Y` is positive. If `Y` is zero, then\nthe return value is zero if `X` is strictly positive, \\pi if\n`X` is negative and `Y` is positive zero (or the processor does\nnot handle signed zeros), and -\\pi if `X` is negative and\n`Y` is negative zero. Finally, if `X` is zero, then the\nmagnitude of the result is \\pi/2.\n\n\n\n### Example\n```\n\n\nprogram test_atan2\n\n  real(4) :: x = 1.e0_4, y = 0.5e0_4\n\n  x = atan2(y,x)\n\nend program test_atan2\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ATAN2(X, Y)` | `REAL(4) X, Y` | `REAL(4)` | Fortran 77 and later\n\n | `DATAN2(X, Y)` | `REAL(8) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/ATAN2D.json b/src/docs/ATAN2D.json index 84af43bc..4627ae8b 100644 --- a/src/docs/ATAN2D.json +++ b/src/docs/ATAN2D.json @@ -1,4 +1,4 @@ { - "keyword":"ATAN2D", - "docstr":"`ATAN2D` — Arctangent function, degrees\n\n### Description\nATAN2D(Y, X) computes the principal value of the argument function of the complex number X + i Y in degrees. This function can be used to transform from Cartesian into polar coordinates and allows to determine the angle in the correct quadrant.\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = ATAN2D(Y, X)\n### Arguments\n- Y: The type shall be REAL.\n- X: The type and kind type parameter shall be the same as Y. If Y is zero, then X must be nonzero.\n### Return value\nThe return value has the same type and kind type parameter as Y. It is the principal value of the complex number X + i Y. If X is nonzero, then it lies in the range -180 \\le \\atan (x) \\leq 180. The sign is positive if Y is positive. If Y is zero, then the return value is zero if X is strictly positive, 180 if X is negative and Y is positive zero (or the processor does not handle signed zeros), and -180 if X is negative and Y is negative zero. Finally, if X is zero, then the magnitude of the result is 90.\n" -} \ No newline at end of file + "keyword": "ATAN2D", + "docstr": "`ATAN2D` — Arctangent function, degrees\n\n### Description\nATAN2D(Y, X) computes the principal value of the argument function of the complex number X + i Y in degrees. This function can be used to transform from Cartesian into polar coordinates and allows to determine the angle in the correct quadrant.\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = ATAN2D(Y, X)\n### Arguments\n- Y: The type shall be REAL.\n- X: The type and kind type parameter shall be the same as Y. If Y is zero, then X must be nonzero.\n### Return value\nThe return value has the same type and kind type parameter as Y. It is the principal value of the complex number X + i Y. If X is nonzero, then it lies in the range -180 \\le \\atan (x) \\leq 180. The sign is positive if Y is positive. If Y is zero, then the return value is zero if X is strictly positive, 180 if X is negative and Y is positive zero (or the processor does not handle signed zeros), and -180 if X is negative and Y is negative zero. Finally, if X is zero, then the magnitude of the result is 90.\n" +} diff --git a/src/docs/ATAND.json b/src/docs/ATAND.json index 53c77426..b2e15f4b 100644 --- a/src/docs/ATAND.json +++ b/src/docs/ATAND.json @@ -1,4 +1,4 @@ { - "keyword":"ATAND", - "docstr":"`ATAND` — Arctangent function, degrees\n\n### Description\nATAND(X) computes the arctangent of X in degrees (inverse of TAND).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = ATAND(X)\nRESULT = ATAND(Y, X)\n### Arguments\n- X: The type shall be REAL or COMPLEX; if Y is present, X shall be REAL.- Y: Shall be of the same type and kind as X.\n### Return value\nThe return value is of the same type and kind as X. If Y is present, the result is identical to ATAND2(Y,X). Otherwise, it is the arcus tangent of X, where the real part of the result is in degrees and lies in the range -90 \\leq \\Re \\atand(x) \\leq 90." -} \ No newline at end of file + "keyword": "ATAND", + "docstr": "`ATAND` — Arctangent function, degrees\n\n### Description\nATAND(X) computes the arctangent of X in degrees (inverse of TAND).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = ATAND(X)\nRESULT = ATAND(Y, X)\n### Arguments\n- X: The type shall be REAL or COMPLEX; if Y is present, X shall be REAL.- Y: Shall be of the same type and kind as X.\n### Return value\nThe return value is of the same type and kind as X. If Y is present, the result is identical to ATAND2(Y,X). Otherwise, it is the arcus tangent of X, where the real part of the result is in degrees and lies in the range -90 \\leq \\Re \\atand(x) \\leq 90." +} diff --git a/src/docs/ATANH.json b/src/docs/ATANH.json index ef7018c5..da8c9c5e 100644 --- a/src/docs/ATANH.json +++ b/src/docs/ATANH.json @@ -1,4 +1,4 @@ { - "keyword":"ATANH", - "docstr":"`ATANH` — Inverse hyperbolic tangent function\n\n### Description\n`ATANH(X)` computes the inverse hyperbolic tangent of `X`.\n\n\n\n### Syntax\n`RESULT = ATANH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n-\\pi/2 \\leq \\Im \\atanh(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nPROGRAM test_atanh\n\n  REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)\n\n  WRITE (*,*) ATANH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DATANH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: TANH\n" -} \ No newline at end of file + "keyword": "ATANH", + "docstr": "`ATANH` — Inverse hyperbolic tangent function\n\n### Description\n`ATANH(X)` computes the inverse hyperbolic tangent of `X`.\n\n\n\n### Syntax\n`RESULT = ATANH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians and lies between\n-\\pi/2 \\leq \\Im \\atanh(x) \\leq \\pi/2.\n\n\n\n### Example\n```\n\n\nPROGRAM test_atanh\n\n  REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /)\n\n  WRITE (*,*) ATANH(x)\n\nEND PROGRAM\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DATANH(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: TANH\n" +} diff --git a/src/docs/ATOMIC_ADD.json b/src/docs/ATOMIC_ADD.json index b6862074..b8114daa 100644 --- a/src/docs/ATOMIC_ADD.json +++ b/src/docs/ATOMIC_ADD.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_ADD", - "docstr":"`ATOMIC_ADD` — Atomic ADD operation\n\n### Description\n`ATOMIC_ADD(ATOM, VALUE)` atomically adds the value of `VAR` to the\nvariable `ATOM`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_ADD (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_add (atom[1], this_image())\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_ADD, ISO_FORTRAN_ENV,\nATOMIC_AND, ATOMIC_OR, ATOMIC_XOR\n" -} \ No newline at end of file + "keyword": "ATOMIC_ADD", + "docstr": "`ATOMIC_ADD` — Atomic ADD operation\n\n### Description\n`ATOMIC_ADD(ATOM, VALUE)` atomically adds the value of `VAR` to the\nvariable `ATOM`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_ADD (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_add (atom[1], this_image())\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_ADD, ISO_FORTRAN_ENV,\nATOMIC_AND, ATOMIC_OR, ATOMIC_XOR\n" +} diff --git a/src/docs/ATOMIC_AND.json b/src/docs/ATOMIC_AND.json index 60afed98..c5873963 100644 --- a/src/docs/ATOMIC_AND.json +++ b/src/docs/ATOMIC_AND.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_AND", - "docstr":"`ATOMIC_AND` — Atomic bitwise AND operation\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nAND between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_AND (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_and (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_AND, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" -} \ No newline at end of file + "keyword": "ATOMIC_AND", + "docstr": "`ATOMIC_AND` — Atomic bitwise AND operation\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nAND between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_AND (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_and (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_AND, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" +} diff --git a/src/docs/ATOMIC_CAS.json b/src/docs/ATOMIC_CAS.json index 115260c1..2598f2dd 100644 --- a/src/docs/ATOMIC_CAS.json +++ b/src/docs/ATOMIC_CAS.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_CAS", - "docstr":"`ATOMIC_CAS` — Atomic compare and swap\n\n### Description\n`ATOMIC_CAS` compares the variable `ATOM` with the value of\n`COMPARE`; if the value is the same, `ATOM` is set to the value\nof `NEW`. Additionally, `OLD` is set to the value of `ATOM`\nthat was used for the comparison. When `STAT` is present and the invokation\nwas successful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_CAS (ATOM, OLD, COMPARE, NEW [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `COMPARE` | Scalar variable of the same type and kind as\n`ATOM`. \n\n | `NEW` | Scalar variable of the same type as `ATOM`. If kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  logical(atomic_logical_kind) :: atom[*], prev\n\n  call atomic_cas (atom[1], prev, .false., .true.))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_REF, ISO_FORTRAN_ENV\n" -} \ No newline at end of file + "keyword": "ATOMIC_CAS", + "docstr": "`ATOMIC_CAS` — Atomic compare and swap\n\n### Description\n`ATOMIC_CAS` compares the variable `ATOM` with the value of\n`COMPARE`; if the value is the same, `ATOM` is set to the value\nof `NEW`. Additionally, `OLD` is set to the value of `ATOM`\nthat was used for the comparison. When `STAT` is present and the invokation\nwas successful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_CAS (ATOM, OLD, COMPARE, NEW [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `COMPARE` | Scalar variable of the same type and kind as\n`ATOM`. \n\n | `NEW` | Scalar variable of the same type as `ATOM`. If kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  logical(atomic_logical_kind) :: atom[*], prev\n\n  call atomic_cas (atom[1], prev, .false., .true.))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_REF, ISO_FORTRAN_ENV\n" +} diff --git a/src/docs/ATOMIC_DEFINE.json b/src/docs/ATOMIC_DEFINE.json index e8aa30e7..aa074608 100644 --- a/src/docs/ATOMIC_DEFINE.json +++ b/src/docs/ATOMIC_DEFINE.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_DEFINE", - "docstr":"`ATOMIC_DEFINE` — Setting a variable atomically\n\n### Description\n`ATOMIC_DEFINE(ATOM, VALUE)` defines the variable `ATOM` with the value\n`VALUE` atomically. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_DEFINE (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind.\n\n \n\n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_define (atom[1], this_image())\n\nend program atomic\n\n```\n\n\n\n### Standard\nFortran 2008 and later; with `STAT`, TS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_REF, ATOMIC_CAS, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_AND, ATOMIC_OR, ATOMIC_XOR\n" -} \ No newline at end of file + "keyword": "ATOMIC_DEFINE", + "docstr": "`ATOMIC_DEFINE` — Setting a variable atomically\n\n### Description\n`ATOMIC_DEFINE(ATOM, VALUE)` defines the variable `ATOM` with the value\n`VALUE` atomically. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_DEFINE (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind.\n\n \n\n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_define (atom[1], this_image())\n\nend program atomic\n\n```\n\n\n\n### Standard\nFortran 2008 and later; with `STAT`, TS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_REF, ATOMIC_CAS, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_AND, ATOMIC_OR, ATOMIC_XOR\n" +} diff --git a/src/docs/ATOMIC_FETCH_ADD.json b/src/docs/ATOMIC_FETCH_ADD.json index 438902ce..6bb2da52 100644 --- a/src/docs/ATOMIC_FETCH_ADD.json +++ b/src/docs/ATOMIC_FETCH_ADD.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_FETCH_ADD", - "docstr":"`ATOMIC_FETCH_ADD` — Atomic ADD operation with prior fetch\n\n### Description\n`ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)` atomically stores the value of\n`ATOM` in `OLD` and adds the value of `VAR` to the\nvariable `ATOM`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_ADD (ATOM, VALUE, old [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n`ATOMIC_LOGICAL_KIND` kind.\n\n \n\n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_add (atom[1], this_image(), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_ADD, ISO_FORTRAN_ENV,\nATOMIC_FETCH_AND, ATOMIC_FETCH_OR, ATOMIC_FETCH_XOR\n" -} \ No newline at end of file + "keyword": "ATOMIC_FETCH_ADD", + "docstr": "`ATOMIC_FETCH_ADD` — Atomic ADD operation with prior fetch\n\n### Description\n`ATOMIC_FETCH_ADD(ATOM, VALUE, OLD)` atomically stores the value of\n`ATOM` in `OLD` and adds the value of `VAR` to the\nvariable `ATOM`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation\nhas failed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_ADD (ATOM, VALUE, old [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n`ATOMIC_LOGICAL_KIND` kind.\n\n \n\n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_add (atom[1], this_image(), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_ADD, ISO_FORTRAN_ENV,\nATOMIC_FETCH_AND, ATOMIC_FETCH_OR, ATOMIC_FETCH_XOR\n" +} diff --git a/src/docs/ATOMIC_FETCH_AND.json b/src/docs/ATOMIC_FETCH_AND.json index c3ffc366..eddac75d 100644 --- a/src/docs/ATOMIC_FETCH_AND.json +++ b/src/docs/ATOMIC_FETCH_AND.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_FETCH_AND", - "docstr":"`ATOMIC_FETCH_AND` — Atomic bitwise AND operation with prior fetch\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise AND between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_and (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_AND, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_OR, ATOMIC_FETCH_XOR\n" -} \ No newline at end of file + "keyword": "ATOMIC_FETCH_AND", + "docstr": "`ATOMIC_FETCH_AND` — Atomic bitwise AND operation with prior fetch\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise AND between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_AND (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_and (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_AND, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_OR, ATOMIC_FETCH_XOR\n" +} diff --git a/src/docs/ATOMIC_FETCH_OR.json b/src/docs/ATOMIC_FETCH_OR.json index 1976c554..74279036 100644 --- a/src/docs/ATOMIC_FETCH_OR.json +++ b/src/docs/ATOMIC_FETCH_OR.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_FETCH_OR", - "docstr":"`ATOMIC_FETCH_OR` — Atomic bitwise OR operation with prior fetch\n\n### Description\n`ATOMIC_OR(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise OR between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_OR (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_or (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_OR, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_XOR\n" -} \ No newline at end of file + "keyword": "ATOMIC_FETCH_OR", + "docstr": "`ATOMIC_FETCH_OR` — Atomic bitwise OR operation with prior fetch\n\n### Description\n`ATOMIC_OR(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise OR between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_OR (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_or (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_OR, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_XOR\n" +} diff --git a/src/docs/ATOMIC_FETCH_XOR.json b/src/docs/ATOMIC_FETCH_XOR.json index 497706c7..0e992125 100644 --- a/src/docs/ATOMIC_FETCH_XOR.json +++ b/src/docs/ATOMIC_FETCH_XOR.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_FETCH_XOR", - "docstr":"`ATOMIC_FETCH_XOR` — Atomic bitwise XOR operation with prior fetch\n\n### Description\n`ATOMIC_XOR(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise XOR between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_XOR (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_xor (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_XOR, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_OR\n" -} \ No newline at end of file + "keyword": "ATOMIC_FETCH_XOR", + "docstr": "`ATOMIC_FETCH_XOR` — Atomic bitwise XOR operation with prior fetch\n\n### Description\n`ATOMIC_XOR(ATOM, VALUE)` atomically stores the value of `ATOM` in\n`OLD` and defines `ATOM` with the bitwise XOR between the values of\n`ATOM` and `VALUE`. When `STAT` is present and the invokation was\nsuccessful, it is assigned the value 0. If it is present and the invokation has\nfailed, it is assigned a positive value; in particular, for a coindexed\n`ATOM`, if the remote image has stopped, it is assigned the value of\n`ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image has\nfailed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_FETCH_XOR (ATOM, VALUE, OLD [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `OLD` | Scalar of the same type and kind as `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*], old\n\n  call atomic_fetch_xor (atom[1], int(b'10100011101'), old)\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_XOR, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_OR\n" +} diff --git a/src/docs/ATOMIC_OR.json b/src/docs/ATOMIC_OR.json index 118a1fdf..5caad138 100644 --- a/src/docs/ATOMIC_OR.json +++ b/src/docs/ATOMIC_OR.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_OR", - "docstr":"`ATOMIC_OR` — Atomic bitwise OR operation\n\n### Description\n`ATOMIC_OR(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nAND between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_OR (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_or (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_OR, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" -} \ No newline at end of file + "keyword": "ATOMIC_OR", + "docstr": "`ATOMIC_OR` — Atomic bitwise OR operation\n\n### Description\n`ATOMIC_OR(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nAND between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_OR (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_or (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_OR, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" +} diff --git a/src/docs/ATOMIC_REF.json b/src/docs/ATOMIC_REF.json index 101fdbe0..013a3451 100644 --- a/src/docs/ATOMIC_REF.json +++ b/src/docs/ATOMIC_REF.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_REF", - "docstr":"`ATOMIC_REF` — Obtaining the value of a variable atomically\n\n### Description\n`ATOMIC_DEFINE(ATOM, VALUE)` atomically assigns the value of the\nvariable `ATOM` to `VALUE`. When `STAT` is present and the\ninvokation was successful, it is assigned the value 0. If it is present and the\ninvokation has failed, it is assigned a positive value; in particular, for a\ncoindexed `ATOM`, if the remote image has stopped, it is assigned the value\nof `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image\nhas failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_REF(VALUE, ATOM [, STAT])`\n\n\n### Arguments\n\n \n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  logical(atomic_logical_kind) :: atom[*]\n\n  logical :: val\n\n  call atomic_ref (atom, .false.)\n\n  ! ...\n\n  call atomic_ref (atom, val)\n\n  if (val) then\n\n    print *, \"Obtained\"\n\n  end if\n\nend program atomic\n\n```\n\n\n\n### Standard\nFortran 2008 and later; with `STAT`, TS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_CAS, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_OR,\nATOMIC_FETCH_XOR\n" -} \ No newline at end of file + "keyword": "ATOMIC_REF", + "docstr": "`ATOMIC_REF` — Obtaining the value of a variable atomically\n\n### Description\n`ATOMIC_DEFINE(ATOM, VALUE)` atomically assigns the value of the\nvariable `ATOM` to `VALUE`. When `STAT` is present and the\ninvokation was successful, it is assigned the value 0. If it is present and the\ninvokation has failed, it is assigned a positive value; in particular, for a\ncoindexed `ATOM`, if the remote image has stopped, it is assigned the value\nof `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote image\nhas failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_REF(VALUE, ATOM [, STAT])`\n\n\n### Arguments\n\n \n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `ATOM` | Scalar coarray or coindexed variable of either integer\ntype with `ATOMIC_INT_KIND` kind or logical type with\n`ATOMIC_LOGICAL_KIND` kind. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  logical(atomic_logical_kind) :: atom[*]\n\n  logical :: val\n\n  call atomic_ref (atom, .false.)\n\n  ! ...\n\n  call atomic_ref (atom, val)\n\n  if (val) then\n\n    print *, \"Obtained\"\n\n  end if\n\nend program atomic\n\n```\n\n\n\n### Standard\nFortran 2008 and later; with `STAT`, TS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_CAS, ISO_FORTRAN_ENV,\nATOMIC_FETCH_ADD, ATOMIC_FETCH_AND, ATOMIC_FETCH_OR,\nATOMIC_FETCH_XOR\n" +} diff --git a/src/docs/ATOMIC_XOR.json b/src/docs/ATOMIC_XOR.json index c20dd171..7ada3e9e 100644 --- a/src/docs/ATOMIC_XOR.json +++ b/src/docs/ATOMIC_XOR.json @@ -1,4 +1,4 @@ { - "keyword":"ATOMIC_XOR", - "docstr":"`ATOMIC_XOR` — Atomic bitwise OR operation\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nXOR between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_XOR (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_xor (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_XOR, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" -} \ No newline at end of file + "keyword": "ATOMIC_XOR", + "docstr": "`ATOMIC_XOR` — Atomic bitwise OR operation\n\n### Description\n`ATOMIC_AND(ATOM, VALUE)` atomically defines `ATOM` with the bitwise\nXOR between the values of `ATOM` and `VALUE`. When `STAT` is present\nand the invokation was successful, it is assigned the value 0. If it is present\nand the invokation has failed, it is assigned a positive value; in particular,\nfor a coindexed `ATOM`, if the remote image has stopped, it is assigned the\nvalue of `ISO_FORTRAN_ENV`'s `STAT_STOPPED_IMAGE` and if the remote\nimage has failed, the value `STAT_FAILED_IMAGE`.\n\n\n\n### Syntax\n`CALL ATOMIC_XOR (ATOM, VALUE [, STAT])`\n\n\n### Arguments\n\n \n | `ATOM` | Scalar coarray or coindexed variable of integer\ntype with `ATOMIC_INT_KIND` kind. \n\n | `VALUE` | Scalar of the same type as `ATOM`. If the kind\nis different, the value is converted to the kind of `ATOM`. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  integer(atomic_int_kind) :: atom[*]\n\n  call atomic_xor (atom[1], int(b'10100011101'))\n\nend program atomic\n\n```\n\n\n\n### Standard\nTS 18508 or later\n\n\n\n### Class\nAtomic subroutine\n\n\n\n### See also\nATOMIC_DEFINE, ATOMIC_FETCH_XOR, ISO_FORTRAN_ENV,\nATOMIC_ADD, ATOMIC_OR, ATOMIC_XOR\n" +} diff --git a/src/docs/BACKTRACE.json b/src/docs/BACKTRACE.json index cd68575f..c2112557 100644 --- a/src/docs/BACKTRACE.json +++ b/src/docs/BACKTRACE.json @@ -1,4 +1,4 @@ { - "keyword":"BACKTRACE", - "docstr":"`BACKTRACE` — Show a backtrace\n\n### Description\n`BACKTRACE` shows a backtrace at an arbitrary place in user code. Program\nexecution continues normally afterwards. The backtrace information is printed\nto the unit corresponding to `ERROR_UNIT` in `ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`CALL BACKTRACE`\n\n\n### Arguments\nNone\n\n\n\n### Standard\nGNU Extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nABORT\n" -} \ No newline at end of file + "keyword": "BACKTRACE", + "docstr": "`BACKTRACE` — Show a backtrace\n\n### Description\n`BACKTRACE` shows a backtrace at an arbitrary place in user code. Program\nexecution continues normally afterwards. The backtrace information is printed\nto the unit corresponding to `ERROR_UNIT` in `ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`CALL BACKTRACE`\n\n\n### Arguments\nNone\n\n\n\n### Standard\nGNU Extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nABORT\n" +} diff --git a/src/docs/BESSEL_J0.json b/src/docs/BESSEL_J0.json index 5dc8502c..717e1551 100644 --- a/src/docs/BESSEL_J0.json +++ b/src/docs/BESSEL_J0.json @@ -1,4 +1,4 @@ { - "keyword":"BESSEL_J0", - "docstr":"`BESSEL_J0` — Bessel function of the first kind of order 0\n\n### Description\n`BESSEL_J0(X)` computes the Bessel function of the first kind of\norder 0 of `X`. This function is available under the name\n`BESJ0` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_J0(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and lies in the\nrange - 0.4027... \\leq Bessel (0,x) \\leq 1. It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besj0\n\n  real(8) :: x = 0.0_8\n\n  x = bessel_j0(x)\n\nend program test_besj0\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJ0(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "BESSEL_J0", + "docstr": "`BESSEL_J0` — Bessel function of the first kind of order 0\n\n### Description\n`BESSEL_J0(X)` computes the Bessel function of the first kind of\norder 0 of `X`. This function is available under the name\n`BESJ0` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_J0(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and lies in the\nrange - 0.4027... \\leq Bessel (0,x) \\leq 1. It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besj0\n\n  real(8) :: x = 0.0_8\n\n  x = bessel_j0(x)\n\nend program test_besj0\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJ0(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/BESSEL_J1.json b/src/docs/BESSEL_J1.json index a9ebdf5d..86812b61 100644 --- a/src/docs/BESSEL_J1.json +++ b/src/docs/BESSEL_J1.json @@ -1,4 +1,4 @@ { - "keyword":"BESSEL_J1", - "docstr":"`BESSEL_J1` — Bessel function of the first kind of order 1\n\n### Description\n`BESSEL_J1(X)` computes the Bessel function of the first kind of\norder 1 of `X`. This function is available under the name\n`BESJ1` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_J1(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and lies in the\nrange - 0.5818... \\leq Bessel (0,x) \\leq 0.5818 . It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besj1\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_j1(x)\n\nend program test_besj1\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJ1(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "BESSEL_J1", + "docstr": "`BESSEL_J1` — Bessel function of the first kind of order 1\n\n### Description\n`BESSEL_J1(X)` computes the Bessel function of the first kind of\norder 1 of `X`. This function is available under the name\n`BESJ1` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_J1(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and lies in the\nrange - 0.5818... \\leq Bessel (0,x) \\leq 0.5818 . It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besj1\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_j1(x)\n\nend program test_besj1\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJ1(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/BESSEL_JN.json b/src/docs/BESSEL_JN.json index d041f146..d475df2b 100644 --- a/src/docs/BESSEL_JN.json +++ b/src/docs/BESSEL_JN.json @@ -1,4 +1,4 @@ { - "keyword":"BESSEL_JN", - "docstr":"`BESSEL_JN` — Bessel function of the first kind\n\n### Description\n`BESSEL_JN(N, X)` computes the Bessel function of the first kind of\norder `N` of `X`. This function is available under the name\n`BESJN` as a GNU extension. If `N` and `X` are arrays,\ntheir ranks and shapes shall conform.\n\n \n`BESSEL_JN(N1, N2, X)` returns an array with the Bessel functions\nof the first kind of the orders `N1` to `N2`.\n\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = BESSEL_JN(N1, N2, X)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `N1` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `N2` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `X` | Shall be a scalar or an array of type `REAL`;\nfor `BESSEL_JN(N1, N2, X)` it shall be scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `REAL`. It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besjn\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_jn(5,x)\n\nend program test_besjn\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJN(N, X)` | `INTEGER N` | `REAL(8)` | GNU extension\n\n | `REAL(8) X` | \n\n\n\n\n\n### Notes\nThe transformational function uses a recurrence algorithm which might,\nfor some values of `X`, lead to different results than calls to\nthe elemental function.\n\n\n\n### Standard\nFortran 2008 and later, negative `N` is allowed as GNU extension\n\n\n\n### Class\nElemental function, except for the transformational function\n`BESSEL_JN(N1, N2, X)`\n\n" -} \ No newline at end of file + "keyword": "BESSEL_JN", + "docstr": "`BESSEL_JN` — Bessel function of the first kind\n\n### Description\n`BESSEL_JN(N, X)` computes the Bessel function of the first kind of\norder `N` of `X`. This function is available under the name\n`BESJN` as a GNU extension. If `N` and `X` are arrays,\ntheir ranks and shapes shall conform.\n\n \n`BESSEL_JN(N1, N2, X)` returns an array with the Bessel functions\nof the first kind of the orders `N1` to `N2`.\n\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = BESSEL_JN(N1, N2, X)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `N1` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `N2` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `X` | Shall be a scalar or an array of type `REAL`;\nfor `BESSEL_JN(N1, N2, X)` it shall be scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `REAL`. It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besjn\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_jn(5,x)\n\nend program test_besjn\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESJN(N, X)` | `INTEGER N` | `REAL(8)` | GNU extension\n\n | `REAL(8) X` | \n\n\n\n\n\n### Notes\nThe transformational function uses a recurrence algorithm which might,\nfor some values of `X`, lead to different results than calls to\nthe elemental function.\n\n\n\n### Standard\nFortran 2008 and later, negative `N` is allowed as GNU extension\n\n\n\n### Class\nElemental function, except for the transformational function\n`BESSEL_JN(N1, N2, X)`\n\n" +} diff --git a/src/docs/BESSEL_Y0.json b/src/docs/BESSEL_Y0.json index 97bb9319..507b3340 100644 --- a/src/docs/BESSEL_Y0.json +++ b/src/docs/BESSEL_Y0.json @@ -1,4 +1,4 @@ { - "keyword":"BESSEL_Y0", - "docstr":"`BESSEL_Y0` — Bessel function of the second kind of order 0\n\n### Description\n`BESSEL_Y0(X)` computes the Bessel function of the second kind of\norder 0 of `X`. This function is available under the name\n`BESY0` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_Y0(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`. It has the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besy0\n\n  real(8) :: x = 0.0_8\n\n  x = bessel_y0(x)\n\nend program test_besy0\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESY0(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "BESSEL_Y0", + "docstr": "`BESSEL_Y0` — Bessel function of the second kind of order 0\n\n### Description\n`BESSEL_Y0(X)` computes the Bessel function of the second kind of\norder 0 of `X`. This function is available under the name\n`BESY0` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_Y0(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`. It has the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besy0\n\n  real(8) :: x = 0.0_8\n\n  x = bessel_y0(x)\n\nend program test_besy0\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESY0(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/BESSEL_Y1.json b/src/docs/BESSEL_Y1.json index bc447bb0..b7ac7622 100644 --- a/src/docs/BESSEL_Y1.json +++ b/src/docs/BESSEL_Y1.json @@ -1,4 +1,4 @@ { - "keyword":"BESSEL_Y1", - "docstr":"`BESSEL_Y1` — Bessel function of the second kind of order 1\n\n### Description\n`BESSEL_Y1(X)` computes the Bessel function of the second kind of\norder 1 of `X`. This function is available under the name\n`BESY1` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_Y1(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`. It has the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besy1\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_y1(x)\n\nend program test_besy1\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESY1(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "BESSEL_Y1", + "docstr": "`BESSEL_Y1` — Bessel function of the second kind of order 1\n\n### Description\n`BESSEL_Y1(X)` computes the Bessel function of the second kind of\norder 1 of `X`. This function is available under the name\n`BESY1` as a GNU extension.\n\n\n\n### Syntax\n`RESULT = BESSEL_Y1(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`. It has the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besy1\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_y1(x)\n\nend program test_besy1\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESY1(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/BESSEL_YN.json b/src/docs/BESSEL_YN.json index 3ace911e..91d9bd42 100644 --- a/src/docs/BESSEL_YN.json +++ b/src/docs/BESSEL_YN.json @@ -1,4 +1,4 @@ { - "keyword":"BESSEL_YN", - "docstr":"`BESSEL_YN` — Bessel function of the second kind\n\n### Description\n`BESSEL_YN(N, X)` computes the Bessel function of the second kind of\norder `N` of `X`. This function is available under the name\n`BESYN` as a GNU extension. If `N` and `X` are arrays,\ntheir ranks and shapes shall conform.\n\n \n`BESSEL_YN(N1, N2, X)` returns an array with the Bessel functions\nof the first kind of the orders `N1` to `N2`.\n\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = BESSEL_YN(N1, N2, X)`
\n\n\n\n\n\n### Arguments\n\n \n . \n\n | `N1` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `N2` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `X` | Shall be a scalar or an array of type `REAL`;\nfor `BESSEL_YN(N1, N2, X)` it shall be scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `REAL`. It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besyn\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_yn(5,x)\n\nend program test_besyn\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESYN(N,X)` | `INTEGER N` | `REAL(8)` | GNU extension\n\n | `REAL(8) X` | \n\n\n\n\n\n### Notes\nThe transformational function uses a recurrence algorithm which might,\nfor some values of `X`, lead to different results than calls to\nthe elemental function.\n\n\n\n### Standard\nFortran 2008 and later, negative `N` is allowed as GNU extension\n\n\n\n### Class\nElemental function, except for the transformational function\n`BESSEL_YN(N1, N2, X)`\n\n" -} \ No newline at end of file + "keyword": "BESSEL_YN", + "docstr": "`BESSEL_YN` — Bessel function of the second kind\n\n### Description\n`BESSEL_YN(N, X)` computes the Bessel function of the second kind of\norder `N` of `X`. This function is available under the name\n`BESYN` as a GNU extension. If `N` and `X` are arrays,\ntheir ranks and shapes shall conform.\n\n \n`BESSEL_YN(N1, N2, X)` returns an array with the Bessel functions\nof the first kind of the orders `N1` to `N2`.\n\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = BESSEL_YN(N1, N2, X)`
\n\n\n\n\n\n### Arguments\n\n \n . \n\n | `N1` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `N2` | Shall be a non-negative scalar of type `INTEGER`. \n\n | `X` | Shall be a scalar or an array of type `REAL`;\nfor `BESSEL_YN(N1, N2, X)` it shall be scalar.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `REAL`. It has the same\nkind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_besyn\n\n  real(8) :: x = 1.0_8\n\n  x = bessel_yn(5,x)\n\nend program test_besyn\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DBESYN(N,X)` | `INTEGER N` | `REAL(8)` | GNU extension\n\n | `REAL(8) X` | \n\n\n\n\n\n### Notes\nThe transformational function uses a recurrence algorithm which might,\nfor some values of `X`, lead to different results than calls to\nthe elemental function.\n\n\n\n### Standard\nFortran 2008 and later, negative `N` is allowed as GNU extension\n\n\n\n### Class\nElemental function, except for the transformational function\n`BESSEL_YN(N1, N2, X)`\n\n" +} diff --git a/src/docs/BGE.json b/src/docs/BGE.json index bab7aae7..eb31e632 100644 --- a/src/docs/BGE.json +++ b/src/docs/BGE.json @@ -1,4 +1,4 @@ { - "keyword":"BGE", - "docstr":"`BGE` — Bitwise greater than or equal to\n\n### Description\nDetermines whether an integral is a bitwise greater than or equal to\nanother.\n\n\n\n### Syntax\n`RESULT = BGE(I, J)`\n\n\n### Arguments\n\n \n type. \n\n | `J` | Shall be of `INTEGER` type, and of the same kind\nas `I`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL` and of the default kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBGT, BLE, BLT\n" -} \ No newline at end of file + "keyword": "BGE", + "docstr": "`BGE` — Bitwise greater than or equal to\n\n### Description\nDetermines whether an integral is a bitwise greater than or equal to\nanother.\n\n\n\n### Syntax\n`RESULT = BGE(I, J)`\n\n\n### Arguments\n\n \n type. \n\n | `J` | Shall be of `INTEGER` type, and of the same kind\nas `I`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL` and of the default kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBGT, BLE, BLT\n" +} diff --git a/src/docs/BGT.json b/src/docs/BGT.json index 86425d7a..156715e3 100644 --- a/src/docs/BGT.json +++ b/src/docs/BGT.json @@ -1,4 +1,4 @@ { - "keyword":"BGT", - "docstr":"`BGT` — Bitwise greater than\n\n### Description\nDetermines whether an integral is a bitwise greater than another.\n\n\n\n### Syntax\n`RESULT = BGT(I, J)`\n\n\n### Arguments\n\n \n type. \n\n | `J` | Shall be of `INTEGER` type, and of the same kind\nas `I`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL` and of the default kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBGE, BLE, BLT\n" -} \ No newline at end of file + "keyword": "BGT", + "docstr": "`BGT` — Bitwise greater than\n\n### Description\nDetermines whether an integral is a bitwise greater than another.\n\n\n\n### Syntax\n`RESULT = BGT(I, J)`\n\n\n### Arguments\n\n \n type. \n\n | `J` | Shall be of `INTEGER` type, and of the same kind\nas `I`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL` and of the default kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBGE, BLE, BLT\n" +} diff --git a/src/docs/BIT_SIZE.json b/src/docs/BIT_SIZE.json index 8e2f6e98..5a091632 100644 --- a/src/docs/BIT_SIZE.json +++ b/src/docs/BIT_SIZE.json @@ -1,4 +1,4 @@ { - "keyword":"BIT_SIZE", - "docstr":"`BIT_SIZE` — Bit size inquiry function\n\n### Description\n`BIT_SIZE(I)` returns the number of bits (integer precision plus sign bit)\nrepresented by the type of `I`. The result of `BIT_SIZE(I)` is\nindependent of the actual value of `I`.\n\n\n\n### Syntax\n`RESULT = BIT_SIZE(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`\n\n\n### Example\n```\n\n\nprogram test_bit_size\n\n    integer :: i = 123\n\n    integer :: size\n\n    size = bit_size(i)\n\n    print *, size\n\nend program test_bit_size\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "BIT_SIZE", + "docstr": "`BIT_SIZE` — Bit size inquiry function\n\n### Description\n`BIT_SIZE(I)` returns the number of bits (integer precision plus sign bit)\nrepresented by the type of `I`. The result of `BIT_SIZE(I)` is\nindependent of the actual value of `I`.\n\n\n\n### Syntax\n`RESULT = BIT_SIZE(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`\n\n\n### Example\n```\n\n\nprogram test_bit_size\n\n    integer :: i = 123\n\n    integer :: size\n\n    size = bit_size(i)\n\n    print *, size\n\nend program test_bit_size\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/BLE.json b/src/docs/BLE.json index 2ece0660..d85a67a7 100644 --- a/src/docs/BLE.json +++ b/src/docs/BLE.json @@ -1,4 +1,4 @@ { - "keyword":"BLE", - "docstr":"`BLE` — Bitwise less than or equal to\n\n### Description\nDetermines whether an integral is a bitwise less than or equal to\nanother.\n\n\n\n### Syntax\n`RESULT = BLE(I, J)`\n\n\n### Arguments\n\n \n type. \n\n | `J` | Shall be of `INTEGER` type, and of the same kind\nas `I`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL` and of the default kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBGT, BGE, BLT\n" -} \ No newline at end of file + "keyword": "BLE", + "docstr": "`BLE` — Bitwise less than or equal to\n\n### Description\nDetermines whether an integral is a bitwise less than or equal to\nanother.\n\n\n\n### Syntax\n`RESULT = BLE(I, J)`\n\n\n### Arguments\n\n \n type. \n\n | `J` | Shall be of `INTEGER` type, and of the same kind\nas `I`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL` and of the default kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBGT, BGE, BLT\n" +} diff --git a/src/docs/BLT.json b/src/docs/BLT.json index 526ca857..090c92d4 100644 --- a/src/docs/BLT.json +++ b/src/docs/BLT.json @@ -1,4 +1,4 @@ { - "keyword":"BLT", - "docstr":"`BLT` — Bitwise less than\n\n### Description\nDetermines whether an integral is a bitwise less than another.\n\n\n\n### Syntax\n`RESULT = BLT(I, J)`\n\n\n### Arguments\n\n \n type. \n\n | `J` | Shall be of `INTEGER` type, and of the same kind\nas `I`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL` and of the default kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBGE, BGT, BLE\n" -} \ No newline at end of file + "keyword": "BLT", + "docstr": "`BLT` — Bitwise less than\n\n### Description\nDetermines whether an integral is a bitwise less than another.\n\n\n\n### Syntax\n`RESULT = BLT(I, J)`\n\n\n### Arguments\n\n \n type. \n\n | `J` | Shall be of `INTEGER` type, and of the same kind\nas `I`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL` and of the default kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBGE, BGT, BLE\n" +} diff --git a/src/docs/BTEST.json b/src/docs/BTEST.json index 223333b2..5d3e2c8c 100644 --- a/src/docs/BTEST.json +++ b/src/docs/BTEST.json @@ -1,4 +1,4 @@ { - "keyword":"BTEST", - "docstr":"`BTEST` — Bit test function\n\n### Description\n`BTEST(I,POS)` returns logical `.TRUE.` if the bit at `POS`\nin `I` is set. The counting of the bits starts at 0.\n\n\n\n### Syntax\n`RESULT = BTEST(I, POS)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`\n\n\n### Example\n```\n\n\nprogram test_btest\n\n    integer :: i = 32768 + 1024 + 64\n\n    integer :: pos\n\n    logical :: bool\n\n    do pos=0,16\n\n        bool = btest(i, pos)\n\n        print *, pos, bool\n\n    end do\n\nend program test_btest\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "BTEST", + "docstr": "`BTEST` — Bit test function\n\n### Description\n`BTEST(I,POS)` returns logical `.TRUE.` if the bit at `POS`\nin `I` is set. The counting of the bits starts at 0.\n\n\n\n### Syntax\n`RESULT = BTEST(I, POS)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`\n\n\n### Example\n```\n\n\nprogram test_btest\n\n    integer :: i = 32768 + 1024 + 64\n\n    integer :: pos\n\n    logical :: bool\n\n    do pos=0,16\n\n        bool = btest(i, pos)\n\n        print *, pos, bool\n\n    end do\n\nend program test_btest\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/CEILING.json b/src/docs/CEILING.json index 16bf8418..43c41226 100644 --- a/src/docs/CEILING.json +++ b/src/docs/CEILING.json @@ -1,4 +1,4 @@ { - "keyword":"CEILING", - "docstr":"`CEILING` — Integer ceiling function\n\n### Description\n`CEILING(A)` returns the least integer greater than or equal to `A`.\n\n\n\n### Syntax\n`RESULT = CEILING(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(KIND)` if `KIND` is present\nand a default-kind `INTEGER` otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_ceiling\n\n    real :: x = 63.29\n\n    real :: y = -63.59\n\n    print *, ceiling(x) ! returns 64\n\n    print *, ceiling(y) ! returns -63\n\nend program test_ceiling\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nFLOOR, NINT\n\n " -} \ No newline at end of file + "keyword": "CEILING", + "docstr": "`CEILING` — Integer ceiling function\n\n### Description\n`CEILING(A)` returns the least integer greater than or equal to `A`.\n\n\n\n### Syntax\n`RESULT = CEILING(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(KIND)` if `KIND` is present\nand a default-kind `INTEGER` otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_ceiling\n\n    real :: x = 63.29\n\n    real :: y = -63.59\n\n    print *, ceiling(x) ! returns 64\n\n    print *, ceiling(y) ! returns -63\n\nend program test_ceiling\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nFLOOR, NINT\n\n " +} diff --git a/src/docs/CHAR.json b/src/docs/CHAR.json index e857c8ed..f68d4cde 100644 --- a/src/docs/CHAR.json +++ b/src/docs/CHAR.json @@ -1,4 +1,4 @@ { - "keyword":"CHAR", - "docstr":"`CHAR` — Character conversion function\n\n### Description\n`CHAR(I [, KIND])` returns the character represented by the integer `I`.\n\n\n\n### Syntax\n`RESULT = CHAR(I [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER(1)`\n\n\n### Example\n```\n\n\nprogram test_char\n\n    integer :: i = 74\n\n    character(1) :: c\n\n    c = char(i)\n\n    print *, i, c ! returns 'J'\n\nend program test_char\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `CHAR(I)` | `INTEGER I` | `CHARACTER(LEN=1)` | F77 and later\n\n\n\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, IACHAR, ICHAR\n\n " -} \ No newline at end of file + "keyword": "CHAR", + "docstr": "`CHAR` — Character conversion function\n\n### Description\n`CHAR(I [, KIND])` returns the character represented by the integer `I`.\n\n\n\n### Syntax\n`RESULT = CHAR(I [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `CHARACTER(1)`\n\n\n### Example\n```\n\n\nprogram test_char\n\n    integer :: i = 74\n\n    character(1) :: c\n\n    c = char(i)\n\n    print *, i, c ! returns 'J'\n\nend program test_char\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `CHAR(I)` | `INTEGER I` | `CHARACTER(LEN=1)` | F77 and later\n\n\n\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, IACHAR, ICHAR\n\n " +} diff --git a/src/docs/CHDIR.json b/src/docs/CHDIR.json index 47e23772..07d9cc4f 100644 --- a/src/docs/CHDIR.json +++ b/src/docs/CHDIR.json @@ -1,4 +1,4 @@ { - "keyword":"CHDIR", - "docstr":"`CHDIR` — Change working directory\n\n### Description\nChange current working directory to a specified path.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = CHDIR(NAME)`
\n\n\n\n\n\n### Arguments\n\n \n of default\nkind and shall specify a valid path within the file system. \n\n | `STATUS` | (Optional) `INTEGER` status flag of the default\nkind. Returns 0 on success, and a system specific and nonzero error code\notherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_chdir\n\n  CHARACTER(len=255) :: path\n\n  CALL getcwd(path)\n\n  WRITE(*,*) TRIM(path)\n\n  CALL chdir(\"/tmp\")\n\n  CALL getcwd(path)\n\n  WRITE(*,*) TRIM(path)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nGETCWD\n" -} \ No newline at end of file + "keyword": "CHDIR", + "docstr": "`CHDIR` — Change working directory\n\n### Description\nChange current working directory to a specified path.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = CHDIR(NAME)`
\n\n\n\n\n\n### Arguments\n\n \n of default\nkind and shall specify a valid path within the file system. \n\n | `STATUS` | (Optional) `INTEGER` status flag of the default\nkind. Returns 0 on success, and a system specific and nonzero error code\notherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_chdir\n\n  CHARACTER(len=255) :: path\n\n  CALL getcwd(path)\n\n  WRITE(*,*) TRIM(path)\n\n  CALL chdir(\"/tmp\")\n\n  CALL getcwd(path)\n\n  WRITE(*,*) TRIM(path)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nGETCWD\n" +} diff --git a/src/docs/CHMOD.json b/src/docs/CHMOD.json index bb8303a0..2c514643 100644 --- a/src/docs/CHMOD.json +++ b/src/docs/CHMOD.json @@ -1,4 +1,4 @@ { - "keyword":"CHMOD", - "docstr":"`CHMOD` — Change access permissions of files\n\n### Description\n`CHMOD` changes the permissions of a file.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = CHMOD(NAME, MODE)`
\n\n\n\n\n\n### Arguments\n\n \n\n | `NAME` | Scalar `CHARACTER` of default kind with the\nfile name. Trailing blanks are ignored unless the character\n`achar(0)` is present, then all characters up to and excluding\n`achar(0)` are used as the file name.\n\n \n\n\n | `MODE` | Scalar `CHARACTER` of default kind giving the\nfile permission. `MODE` uses the same syntax as the `chmod` utility\nas defined by the POSIX standard. The argument shall either be a string of\na nonnegative octal number or a symbolic mode.\n\n \n\n\n | `STATUS` | (optional) scalar `INTEGER`, which is\n`0` on success and nonzero otherwise.\n\n\n\n\n\n\n### Return value\nIn either syntax, `STATUS` is set to `0` on success and nonzero\notherwise.\n\n\n\n### Example\n`CHMOD` as subroutine\n ```\n\n\nprogram chmod_test\n\n  implicit none\n\n  integer :: status\n\n  call chmod('test.dat','u+x',status)\n\n  print *, 'Status: ', status\n\nend program chmod_test\n\n```\n\n \n`CHMOD` as function:\n \n
          program chmod_test\n            implicit none\n            integer :: status\n            status = chmod('test.dat','u+x')\n            print *, 'Status: ', status\n          end program chmod_test\n
\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" -} \ No newline at end of file + "keyword": "CHMOD", + "docstr": "`CHMOD` — Change access permissions of files\n\n### Description\n`CHMOD` changes the permissions of a file.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = CHMOD(NAME, MODE)`
\n\n\n\n\n\n### Arguments\n\n \n\n | `NAME` | Scalar `CHARACTER` of default kind with the\nfile name. Trailing blanks are ignored unless the character\n`achar(0)` is present, then all characters up to and excluding\n`achar(0)` are used as the file name.\n\n \n\n\n | `MODE` | Scalar `CHARACTER` of default kind giving the\nfile permission. `MODE` uses the same syntax as the `chmod` utility\nas defined by the POSIX standard. The argument shall either be a string of\na nonnegative octal number or a symbolic mode.\n\n \n\n\n | `STATUS` | (optional) scalar `INTEGER`, which is\n`0` on success and nonzero otherwise.\n\n\n\n\n\n\n### Return value\nIn either syntax, `STATUS` is set to `0` on success and nonzero\notherwise.\n\n\n\n### Example\n`CHMOD` as subroutine\n ```\n\n\nprogram chmod_test\n\n  implicit none\n\n  integer :: status\n\n  call chmod('test.dat','u+x',status)\n\n  print *, 'Status: ', status\n\nend program chmod_test\n\n```\n\n \n`CHMOD` as function:\n \n
          program chmod_test\n            implicit none\n            integer :: status\n            status = chmod('test.dat','u+x')\n            print *, 'Status: ', status\n          end program chmod_test\n
\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" +} diff --git a/src/docs/CMPLX.json b/src/docs/CMPLX.json index e90d8684..fd080701 100644 --- a/src/docs/CMPLX.json +++ b/src/docs/CMPLX.json @@ -1,4 +1,4 @@ { - "keyword":"CMPLX", - "docstr":"`CMPLX` — Complex conversion function\n\n### Description\n`CMPLX(X [, Y [, KIND]])` returns a complex number where `X` is converted to\nthe real component. If `Y` is present it is converted to the imaginary\ncomponent. If `Y` is not present then the imaginary component is set to\n0.0. If `X` is complex then `Y` must not be present.\n\n\n\n### Syntax\n`RESULT = CMPLX(X [, Y [, KIND]])`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`. \n\n | `Y` | (Optional; only allowed if `X` is not\n`COMPLEX`.) May be `INTEGER` or `REAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of `COMPLEX` type, with a kind equal to\n`KIND` if it is specified. If `KIND` is not specified, the\nresult is of the default `COMPLEX` kind, regardless of the kinds of\n`X` and `Y`.\n\n\n\n### Example\n```\n\n\nprogram test_cmplx\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    complex :: z\n\n    z = cmplx(i, x)\n\n    print *, z, cmplx(x)\n\nend program test_cmplx\n\n```\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCOMPLEX\n" -} \ No newline at end of file + "keyword": "CMPLX", + "docstr": "`CMPLX` — Complex conversion function\n\n### Description\n`CMPLX(X [, Y [, KIND]])` returns a complex number where `X` is converted to\nthe real component. If `Y` is present it is converted to the imaginary\ncomponent. If `Y` is not present then the imaginary component is set to\n0.0. If `X` is complex then `Y` must not be present.\n\n\n\n### Syntax\n`RESULT = CMPLX(X [, Y [, KIND]])`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`. \n\n | `Y` | (Optional; only allowed if `X` is not\n`COMPLEX`.) May be `INTEGER` or `REAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of `COMPLEX` type, with a kind equal to\n`KIND` if it is specified. If `KIND` is not specified, the\nresult is of the default `COMPLEX` kind, regardless of the kinds of\n`X` and `Y`.\n\n\n\n### Example\n```\n\n\nprogram test_cmplx\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    complex :: z\n\n    z = cmplx(i, x)\n\n    print *, z, cmplx(x)\n\nend program test_cmplx\n\n```\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCOMPLEX\n" +} diff --git a/src/docs/COMMAND_ARGUMENT_COUNT.json b/src/docs/COMMAND_ARGUMENT_COUNT.json index cc154095..c063e839 100644 --- a/src/docs/COMMAND_ARGUMENT_COUNT.json +++ b/src/docs/COMMAND_ARGUMENT_COUNT.json @@ -1,4 +1,4 @@ { - "keyword":"COMMAND_ARGUMENT_COUNT", - "docstr":"`COMMAND_ARGUMENT_COUNT` — Get number of command line arguments\n\n### Description\n`COMMAND_ARGUMENT_COUNT` returns the number of arguments passed on the\ncommand line when the containing program was invoked.\n\n\n\n### Syntax\n`RESULT = COMMAND_ARGUMENT_COUNT()`\n\n\n### Arguments\n\n \n | None\n\n\n\n\n\n\n### Return value\nThe return value is an `INTEGER` of default kind.\n\n\n\n### Example\n```\n\n\nprogram test_command_argument_count\n\n    integer :: count\n\n    count = command_argument_count()\n\n    print *, count\n\nend program test_command_argument_count\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nGET_COMMAND, GET_COMMAND_ARGUMENT\n" -} \ No newline at end of file + "keyword": "COMMAND_ARGUMENT_COUNT", + "docstr": "`COMMAND_ARGUMENT_COUNT` — Get number of command line arguments\n\n### Description\n`COMMAND_ARGUMENT_COUNT` returns the number of arguments passed on the\ncommand line when the containing program was invoked.\n\n\n\n### Syntax\n`RESULT = COMMAND_ARGUMENT_COUNT()`\n\n\n### Arguments\n\n \n | None\n\n\n\n\n\n\n### Return value\nThe return value is an `INTEGER` of default kind.\n\n\n\n### Example\n```\n\n\nprogram test_command_argument_count\n\n    integer :: count\n\n    count = command_argument_count()\n\n    print *, count\n\nend program test_command_argument_count\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nGET_COMMAND, GET_COMMAND_ARGUMENT\n" +} diff --git a/src/docs/COMPILER_OPTIONS.json b/src/docs/COMPILER_OPTIONS.json index 8c0d0d9a..e8ffe1f2 100644 --- a/src/docs/COMPILER_OPTIONS.json +++ b/src/docs/COMPILER_OPTIONS.json @@ -1,4 +1,4 @@ { - "keyword":"COMPILER_OPTIONS", - "docstr":"`COMPILER_OPTIONS` — Options passed to the compiler\n\n### Description\n`COMPILER_OPTIONS` returns a string with the options used for\ncompiling.\n\n\n\n### Syntax\n`STR = COMPILER_OPTIONS()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the compiler flags used to compile the file, which called\nthe `COMPILER_OPTIONS` intrinsic.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_VERSION, ISO_FORTRAN_ENV\n" -} \ No newline at end of file + "keyword": "COMPILER_OPTIONS", + "docstr": "`COMPILER_OPTIONS` — Options passed to the compiler\n\n### Description\n`COMPILER_OPTIONS` returns a string with the options used for\ncompiling.\n\n\n\n### Syntax\n`STR = COMPILER_OPTIONS()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the compiler flags used to compile the file, which called\nthe `COMPILER_OPTIONS` intrinsic.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_VERSION, ISO_FORTRAN_ENV\n" +} diff --git a/src/docs/COMPILER_VERSION.json b/src/docs/COMPILER_VERSION.json index 70b1c6fb..9d6a1ced 100644 --- a/src/docs/COMPILER_VERSION.json +++ b/src/docs/COMPILER_VERSION.json @@ -1,4 +1,4 @@ { - "keyword":"COMPILER_VERSION", - "docstr":"`COMPILER_VERSION` — Compiler version string\n\n### Description\n`COMPILER_VERSION` returns a string with the name and the\nversion of the compiler.\n\n\n\n### Syntax\n`STR = COMPILER_VERSION()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the name of the compiler and its version number.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_OPTIONS, ISO_FORTRAN_ENV\n" -} \ No newline at end of file + "keyword": "COMPILER_VERSION", + "docstr": "`COMPILER_VERSION` — Compiler version string\n\n### Description\n`COMPILER_VERSION` returns a string with the name and the\nversion of the compiler.\n\n\n\n### Syntax\n`STR = COMPILER_VERSION()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the name of the compiler and its version number.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_OPTIONS, ISO_FORTRAN_ENV\n" +} diff --git a/src/docs/COMPLEX.json b/src/docs/COMPLEX.json index 37c3517d..d2bf507b 100644 --- a/src/docs/COMPLEX.json +++ b/src/docs/COMPLEX.json @@ -1,4 +1,4 @@ { - "keyword":"COMPLEX", - "docstr":"`COMPLEX` — Complex conversion function\n\n### Description\n`COMPLEX(X, Y)` returns a complex number where `X` is converted\nto the real component and `Y` is converted to the imaginary\ncomponent.\n\n\n\n### Syntax\n`RESULT = COMPLEX(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type may be `INTEGER` or `REAL`.\n\n\n\n\n\n\n### Return value\nIf `X` and `Y` are both of `INTEGER` type, then the return\nvalue is of default `COMPLEX` type.\n\n \nIf `X` and `Y` are of `REAL` type, or one is of `REAL`type and one is of `INTEGER` type, then the return value is of\n`COMPLEX` type with a kind equal to that of the `REAL`argument with the highest precision.\n\n\n\n\n### Example\n```\n\n\nprogram test_complex\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    print *, complex(i, x)\n\nend program test_complex\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCMPLX\n" -} \ No newline at end of file + "keyword": "COMPLEX", + "docstr": "`COMPLEX` — Complex conversion function\n\n### Description\n`COMPLEX(X, Y)` returns a complex number where `X` is converted\nto the real component and `Y` is converted to the imaginary\ncomponent.\n\n\n\n### Syntax\n`RESULT = COMPLEX(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type may be `INTEGER` or `REAL`.\n\n\n\n\n\n\n### Return value\nIf `X` and `Y` are both of `INTEGER` type, then the return\nvalue is of default `COMPLEX` type.\n\n \nIf `X` and `Y` are of `REAL` type, or one is of `REAL`type and one is of `INTEGER` type, then the return value is of\n`COMPLEX` type with a kind equal to that of the `REAL`argument with the highest precision.\n\n\n\n\n### Example\n```\n\n\nprogram test_complex\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    print *, complex(i, x)\n\nend program test_complex\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCMPLX\n" +} diff --git a/src/docs/CONJG.json b/src/docs/CONJG.json index 331433cc..487d6384 100644 --- a/src/docs/CONJG.json +++ b/src/docs/CONJG.json @@ -1,4 +1,4 @@ { - "keyword":"CONJG", - "docstr":"`CONJG` — Complex conjugate function\n\n### Description\n`CONJG(Z)` returns the conjugate of `Z`. If `Z` is `(x, y)`then the result is `(x, -y)`\n\n\n### Syntax\n`Z = CONJG(Z)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `COMPLEX`.\n\n\n\n### Example\n```\n\n\nprogram test_conjg\n\n    complex :: z = (2.0, 3.0)\n\n    complex(8) :: dz = (2.71_8, -3.14_8)\n\n    z= conjg(z)\n\n    print *, z\n\n    dz = dconjg(dz)\n\n    print *, dz\n\nend program test_conjg\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `CONJG(Z)` | `COMPLEX Z` | `COMPLEX` | GNU extension\n\n | `DCONJG(Z)` | `COMPLEX(8) Z` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "CONJG", + "docstr": "`CONJG` — Complex conjugate function\n\n### Description\n`CONJG(Z)` returns the conjugate of `Z`. If `Z` is `(x, y)`then the result is `(x, -y)`\n\n\n### Syntax\n`Z = CONJG(Z)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `COMPLEX`.\n\n\n\n### Example\n```\n\n\nprogram test_conjg\n\n    complex :: z = (2.0, 3.0)\n\n    complex(8) :: dz = (2.71_8, -3.14_8)\n\n    z= conjg(z)\n\n    print *, z\n\n    dz = dconjg(dz)\n\n    print *, dz\n\nend program test_conjg\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `CONJG(Z)` | `COMPLEX Z` | `COMPLEX` | GNU extension\n\n | `DCONJG(Z)` | `COMPLEX(8) Z` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/COS.json b/src/docs/COS.json index 3dbda2d6..63b9acf4 100644 --- a/src/docs/COS.json +++ b/src/docs/COS.json @@ -1,4 +1,4 @@ { - "keyword":"COS", - "docstr":"`COS` — Cosine function\n\n### Description\n`COS(X)` computes the cosine of `X`.\n\n\n\n### Syntax\n`RESULT = COS(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. The real part\nof the result is in radians. If `X` is of the type `REAL`,\nthe return value lies in the range -1 \\leq \\cos (x) \\leq 1.\n\n\n\n### Example\n```\n\n\nprogram test_cos\n\n  real :: x = 0.0\n\n  x = cos(x)\n\nend program test_cos\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `COS(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DCOS(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n | `CCOS(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 77 and later\n\n | `ZCOS(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDCOS(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: ACOS\n\n " -} \ No newline at end of file + "keyword": "COS", + "docstr": "`COS` — Cosine function\n\n### Description\n`COS(X)` computes the cosine of `X`.\n\n\n\n### Syntax\n`RESULT = COS(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. The real part\nof the result is in radians. If `X` is of the type `REAL`,\nthe return value lies in the range -1 \\leq \\cos (x) \\leq 1.\n\n\n\n### Example\n```\n\n\nprogram test_cos\n\n  real :: x = 0.0\n\n  x = cos(x)\n\nend program test_cos\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `COS(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DCOS(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n | `CCOS(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 77 and later\n\n | `ZCOS(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDCOS(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: ACOS\n\n " +} diff --git a/src/docs/COSD.json b/src/docs/COSD.json index 6488dc07..43900d59 100644 --- a/src/docs/COSD.json +++ b/src/docs/COSD.json @@ -1,4 +1,4 @@ { - "keyword":"COSD", - "docstr":"`COSD` — Cosine function, degrees\n\n### Description\nCOSD(X) computes the cosine of X in degrees.\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = COSD(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n### Return value\nThe return value is of the same type and kind as X. The real part of the result is in degrees. If X is of the type REAL, the return value lies in the range -1 \\leq \\cosd (x) \\leq 1.\n" -} \ No newline at end of file + "keyword": "COSD", + "docstr": "`COSD` — Cosine function, degrees\n\n### Description\nCOSD(X) computes the cosine of X in degrees.\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = COSD(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n### Return value\nThe return value is of the same type and kind as X. The real part of the result is in degrees. If X is of the type REAL, the return value lies in the range -1 \\leq \\cosd (x) \\leq 1.\n" +} diff --git a/src/docs/COSH.json b/src/docs/COSH.json index 74963812..8832d7f6 100644 --- a/src/docs/COSH.json +++ b/src/docs/COSH.json @@ -1,4 +1,4 @@ { - "keyword":"COSH", - "docstr":"`COSH` — Hyperbolic cosine function\n\n### Description\n`COSH(X)` computes the hyperbolic cosine of `X`.\n\n\n\n### Syntax\n`X = COSH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians. If `X`\nis `REAL`, the return value has a lower bound of one,\n\\cosh (x) \\geq 1.\n\n\n\n### Example\n```\n\n\nprogram test_cosh\n\n  real(8) :: x = 1.0_8\n\n  x = cosh(x)\n\nend program test_cosh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `COSH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DCOSH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: ACOSH\n\n " -} \ No newline at end of file + "keyword": "COSH", + "docstr": "`COSH` — Hyperbolic cosine function\n\n### Description\n`COSH(X)` computes the hyperbolic cosine of `X`.\n\n\n\n### Syntax\n`X = COSH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians. If `X`\nis `REAL`, the return value has a lower bound of one,\n\\cosh (x) \\geq 1.\n\n\n\n### Example\n```\n\n\nprogram test_cosh\n\n  real(8) :: x = 1.0_8\n\n  x = cosh(x)\n\nend program test_cosh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `COSH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DCOSH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nInverse function: ACOSH\n\n " +} diff --git a/src/docs/COTAN.json b/src/docs/COTAN.json index 56520daf..469e5345 100644 --- a/src/docs/COTAN.json +++ b/src/docs/COTAN.json @@ -1,4 +1,4 @@ { - "keyword":"COTAN", - "docstr":"`COTAN` — Cotangent function\n\n### Description\nCOTAN(X) computes the cotangent of X. Equivalent to COS(x) divided by SIN(x), or 1 / TAN(x).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = COTAN(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n### Return value\nThe return value has same type and kind as X, and its value is in radians.\n" -} \ No newline at end of file + "keyword": "COTAN", + "docstr": "`COTAN` — Cotangent function\n\n### Description\nCOTAN(X) computes the cotangent of X. Equivalent to COS(x) divided by SIN(x), or 1 / TAN(x).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = COTAN(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n### Return value\nThe return value has same type and kind as X, and its value is in radians.\n" +} diff --git a/src/docs/COTAND.json b/src/docs/COTAND.json index 420dd97d..274bab6f 100644 --- a/src/docs/COTAND.json +++ b/src/docs/COTAND.json @@ -1,4 +1,4 @@ { - "keyword":"COTAND", - "docstr":"`COTAND` — Cotangent function, degrees\n\n### Description\nCOTAND(X) computes the cotangent of X in degrees. Equivalent to COSD(x) divided by SIND(x), or 1 / TAND(x).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = COTAND(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n### Return value\nThe return value has same type and kind as X, and its value is in degrees.\n" -} \ No newline at end of file + "keyword": "COTAND", + "docstr": "`COTAND` — Cotangent function, degrees\n\n### Description\nCOTAND(X) computes the cotangent of X in degrees. Equivalent to COSD(x) divided by SIND(x), or 1 / TAND(x).\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = COTAND(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n### Return value\nThe return value has same type and kind as X, and its value is in degrees.\n" +} diff --git a/src/docs/COUNT.json b/src/docs/COUNT.json index b8149613..0d76789b 100644 --- a/src/docs/COUNT.json +++ b/src/docs/COUNT.json @@ -1,4 +1,4 @@ { - "keyword":"COUNT", - "docstr":"`COUNT` — Count function\n\n### Description\n\nCounts the number of `.TRUE.` elements in a logical `MASK`,\nor, if the `DIM` argument is supplied, counts the number of\nelements along each row of the array in the `DIM` direction. \nIf the array has zero size, or all of the elements of `MASK` are\n`.FALSE.`, then the result is `0`.\n\n\n\n### Syntax\n`RESULT = COUNT(MASK [, DIM, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `DIM` | (Optional) The type shall be `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is present, the result is an array with a rank one less\nthan the rank of `ARRAY`, and a size corresponding to the shape\nof `ARRAY` with the `DIM` dimension removed.\n\n\n\n### Example\n```\n\n\nprogram test_count\n\n    integer, dimension(2,3) :: a, b\n\n    logical, dimension(2,3) :: mask\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))\n\n    b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print *\n\n    print '(3i3)', b(1,:)\n\n    print '(3i3)', b(2,:)\n\n    print *\n\n    mask = a.ne.b\n\n    print '(3l3)', mask(1,:)\n\n    print '(3l3)', mask(2,:)\n\n    print *\n\n    print '(3i3)', count(mask)\n\n    print *\n\n    print '(3i3)', count(mask, 1)\n\n    print *\n\n    print '(3i3)', count(mask, 2)\n\nend program test_count\n\n```\n\n \n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "COUNT", + "docstr": "`COUNT` — Count function\n\n### Description\n\nCounts the number of `.TRUE.` elements in a logical `MASK`,\nor, if the `DIM` argument is supplied, counts the number of\nelements along each row of the array in the `DIM` direction. \nIf the array has zero size, or all of the elements of `MASK` are\n`.FALSE.`, then the result is `0`.\n\n\n\n### Syntax\n`RESULT = COUNT(MASK [, DIM, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `DIM` | (Optional) The type shall be `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is present, the result is an array with a rank one less\nthan the rank of `ARRAY`, and a size corresponding to the shape\nof `ARRAY` with the `DIM` dimension removed.\n\n\n\n### Example\n```\n\n\nprogram test_count\n\n    integer, dimension(2,3) :: a, b\n\n    logical, dimension(2,3) :: mask\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))\n\n    b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print *\n\n    print '(3i3)', b(1,:)\n\n    print '(3i3)', b(2,:)\n\n    print *\n\n    mask = a.ne.b\n\n    print '(3l3)', mask(1,:)\n\n    print '(3l3)', mask(2,:)\n\n    print *\n\n    print '(3i3)', count(mask)\n\n    print *\n\n    print '(3i3)', count(mask, 1)\n\n    print *\n\n    print '(3i3)', count(mask, 2)\n\nend program test_count\n\n```\n\n \n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/CO_BROADCAST.json b/src/docs/CO_BROADCAST.json index b20e14e7..312a157a 100644 --- a/src/docs/CO_BROADCAST.json +++ b/src/docs/CO_BROADCAST.json @@ -1,4 +1,4 @@ { - "keyword":"CO_BROADCAST", - "docstr":"`CO_BROADCAST` — Copy a value to all images the current set of images\n\n### Description\n`CO_BROADCAST` copies the value of argument `A` on the image with\nimage index `SOURCE_IMAGE` to all images in the current team. `A`\nbecomes defined as if by intrinsic assignment. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | INTENT(INOUT) argument; shall have the same\ndynamic type and type paramters on all images of the current team. If it\nis an array, it shall have the same shape on all images. \n\n | `SOURCE_IMAGE` | a scalar integer expression. \nIt shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val(3)\n\n  if (this_image() == 1) then\n\n    val = [1, 5, 3]\n\n  end if\n\n  call co_broadcast (val, source_image=1)\n\n  print *, this_image, \":\", val\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_MIN, CO_SUM, CO_REDUCE\n" -} \ No newline at end of file + "keyword": "CO_BROADCAST", + "docstr": "`CO_BROADCAST` — Copy a value to all images the current set of images\n\n### Description\n`CO_BROADCAST` copies the value of argument `A` on the image with\nimage index `SOURCE_IMAGE` to all images in the current team. `A`\nbecomes defined as if by intrinsic assignment. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | INTENT(INOUT) argument; shall have the same\ndynamic type and type paramters on all images of the current team. If it\nis an array, it shall have the same shape on all images. \n\n | `SOURCE_IMAGE` | a scalar integer expression. \nIt shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val(3)\n\n  if (this_image() == 1) then\n\n    val = [1, 5, 3]\n\n  end if\n\n  call co_broadcast (val, source_image=1)\n\n  print *, this_image, \":\", val\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_MIN, CO_SUM, CO_REDUCE\n" +} diff --git a/src/docs/CO_MAX.json b/src/docs/CO_MAX.json index a779ca71..1028f873 100644 --- a/src/docs/CO_MAX.json +++ b/src/docs/CO_MAX.json @@ -1,4 +1,4 @@ { - "keyword":"CO_MAX", - "docstr":"`CO_MAX` — Maximal value on the current set of images\n\n### Description\n`CO_MAX` determines element-wise the maximal value of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the maximum\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or character variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_max (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Maximal value\", val ! prints num_images()\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MIN, CO_SUM, CO_REDUCE, CO_BROADCAST\n" -} \ No newline at end of file + "keyword": "CO_MAX", + "docstr": "`CO_MAX` — Maximal value on the current set of images\n\n### Description\n`CO_MAX` determines element-wise the maximal value of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the maximum\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or character variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_max (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Maximal value\", val ! prints num_images()\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MIN, CO_SUM, CO_REDUCE, CO_BROADCAST\n" +} diff --git a/src/docs/CO_MIN.json b/src/docs/CO_MIN.json index d2b70359..a4580767 100644 --- a/src/docs/CO_MIN.json +++ b/src/docs/CO_MIN.json @@ -1,4 +1,4 @@ { - "keyword":"CO_MIN", - "docstr":"`CO_MIN` — Minimal value on the current set of images\n\n### Description\n`CO_MIN` determines element-wise the minimal value of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the minimal\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or character variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_min (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Minimal value\", val ! prints 1\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_SUM, CO_REDUCE, CO_BROADCAST\n" -} \ No newline at end of file + "keyword": "CO_MIN", + "docstr": "`CO_MIN` — Minimal value on the current set of images\n\n### Description\n`CO_MIN` determines element-wise the minimal value of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the minimal\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or character variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_min (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Minimal value\", val ! prints 1\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_SUM, CO_REDUCE, CO_BROADCAST\n" +} diff --git a/src/docs/CO_REDUCE.json b/src/docs/CO_REDUCE.json index b9fc48bd..2fabb51c 100644 --- a/src/docs/CO_REDUCE.json +++ b/src/docs/CO_REDUCE.json @@ -1,4 +1,4 @@ { - "keyword":"CO_REDUCE", - "docstr":"`CO_REDUCE` — Reduction of values on the current set of images\n\n### Description\n`CO_REDUCE` determines element-wise the reduction of the value of `A`\non all images of the current team. The pure function passed as `OPERATOR`\nis used to pairwise reduce the values of `A` by passing either the value\nof `A` of different images or the result values of such a reduction as\nargument. If `A` is an array, the deduction is done element wise. If\n`RESULT_IMAGE` is present, the result values are returned in `A` on\nthe specified image only and the value of `A` on the other images become\nundefined. If `RESULT_IMAGE` is not present, the value is returned on all\nimages. If the execution was successful and `STAT` is present, it is\nassigned the value zero. If the execution failed, `STAT` gets assigned\na nonzero value and, if present, `ERRMSG` gets assigned a value describing\nthe occurred error.\n\n\n\n### Syntax\n`CALL CO_REDUCE(A, OPERATOR, [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n argument and shall be\nnonpolymorphic. If it is allocatable, it shall be allocated; if it is a pointer,\nit shall be associated. `A` shall have the same type and type parameters on\nall images of the team; if it is an array, it shall have the same shape on all\nimages. \n\n | `OPERATOR` | pure function with two scalar nonallocatable\narguments, which shall be nonpolymorphic and have the same type and type\nparameters as `A`. The function shall return a nonallocatable scalar of\nthe same type and type parameters as `A`. The function shall be the same on\nall images and with regards to the arguments mathematically commutative and\nassociative. Note that `OPERATOR` may not be an elemental function, unless\nit is an intrisic function. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_reduce (val, result_image=1, operator=myprod)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Product value\", val ! prints num_images() factorial\n\n  end if\n\ncontains\n\n  pure function myprod(a, b)\n\n    integer, value :: a, b\n\n    integer :: myprod\n\n    myprod = a * b\n\n  end function myprod\n\nend program test\n\n```\n\n\n\n### Notes\nWhile the rules permit in principle an intrinsic function, none of the\nintrinsics in the standard fulfill the criteria of having a specific\nfunction, which takes two arguments of the same type and returning that\ntype as result.\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MIN, CO_MAX, CO_SUM, CO_BROADCAST\n" -} \ No newline at end of file + "keyword": "CO_REDUCE", + "docstr": "`CO_REDUCE` — Reduction of values on the current set of images\n\n### Description\n`CO_REDUCE` determines element-wise the reduction of the value of `A`\non all images of the current team. The pure function passed as `OPERATOR`\nis used to pairwise reduce the values of `A` by passing either the value\nof `A` of different images or the result values of such a reduction as\nargument. If `A` is an array, the deduction is done element wise. If\n`RESULT_IMAGE` is present, the result values are returned in `A` on\nthe specified image only and the value of `A` on the other images become\nundefined. If `RESULT_IMAGE` is not present, the value is returned on all\nimages. If the execution was successful and `STAT` is present, it is\nassigned the value zero. If the execution failed, `STAT` gets assigned\na nonzero value and, if present, `ERRMSG` gets assigned a value describing\nthe occurred error.\n\n\n\n### Syntax\n`CALL CO_REDUCE(A, OPERATOR, [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n argument and shall be\nnonpolymorphic. If it is allocatable, it shall be allocated; if it is a pointer,\nit shall be associated. `A` shall have the same type and type parameters on\nall images of the team; if it is an array, it shall have the same shape on all\nimages. \n\n | `OPERATOR` | pure function with two scalar nonallocatable\narguments, which shall be nonpolymorphic and have the same type and type\nparameters as `A`. The function shall return a nonallocatable scalar of\nthe same type and type parameters as `A`. The function shall be the same on\nall images and with regards to the arguments mathematically commutative and\nassociative. Note that `OPERATOR` may not be an elemental function, unless\nit is an intrisic function. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_reduce (val, result_image=1, operator=myprod)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"Product value\", val ! prints num_images() factorial\n\n  end if\n\ncontains\n\n  pure function myprod(a, b)\n\n    integer, value :: a, b\n\n    integer :: myprod\n\n    myprod = a * b\n\n  end function myprod\n\nend program test\n\n```\n\n\n\n### Notes\nWhile the rules permit in principle an intrinsic function, none of the\nintrinsics in the standard fulfill the criteria of having a specific\nfunction, which takes two arguments of the same type and returning that\ntype as result.\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MIN, CO_MAX, CO_SUM, CO_BROADCAST\n" +} diff --git a/src/docs/CO_SUM.json b/src/docs/CO_SUM.json index 95c5411d..8b126fbf 100644 --- a/src/docs/CO_SUM.json +++ b/src/docs/CO_SUM.json @@ -1,4 +1,4 @@ { - "keyword":"CO_SUM", - "docstr":"`CO_SUM` — Sum of values on the current set of images\n\n### Description\n`CO_SUM` sums up the values of each element of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the summed-up\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or complex variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_sum (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"The sum is \", val ! prints (n**2 + n)/2, with n = num_images()\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_MIN, CO_REDUCE, CO_BROADCAST\n" -} \ No newline at end of file + "keyword": "CO_SUM", + "docstr": "`CO_SUM` — Sum of values on the current set of images\n\n### Description\n`CO_SUM` sums up the values of each element of `A` on all\nimages of the current team. If `RESULT_IMAGE` is present, the summed-up\nvalues are returned in `A` on the specified image only and the value\nof `A` on the other images become undefined. If `RESULT_IMAGE` is\nnot present, the value is returned on all images. If the execution was\nsuccessful and `STAT` is present, it is assigned the value zero. If the\nexecution failed, `STAT` gets assigned a nonzero value and, if present,\n`ERRMSG` gets assigned a value describing the occurred error.\n\n\n\n### Syntax\n`CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])`\n\n\n### Arguments\n\n \n | `A` | shall be an integer, real or complex variable,\nwhich has the same type and type parameters on all images of the team. \n\n | `RESULT_IMAGE` | (optional) a scalar integer expression; if\npresent, it shall have the same the same value on all images and refer to an\nimage of the current team. \n\n | `STAT` | (optional) a scalar integer variable\n\n | `ERRMSG` | (optional) a scalar character variable\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test\n\n  integer :: val\n\n  val = this_image ()\n\n  call co_sum (val, result_image=1)\n\n  if (this_image() == 1) then\n\n    write(*,*) \"The sum is \", val ! prints (n**2 + n)/2, with n = num_images()\n\n  end if\n\nend program test\n\n```\n\n\n\n### Standard\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nCollective subroutine\n\n\n\n### See also\nCO_MAX, CO_MIN, CO_REDUCE, CO_BROADCAST\n" +} diff --git a/src/docs/CPU_TIME.json b/src/docs/CPU_TIME.json index 7bed8077..ad81c171 100644 --- a/src/docs/CPU_TIME.json +++ b/src/docs/CPU_TIME.json @@ -1,4 +1,4 @@ { - "keyword":"CPU_TIME", - "docstr":"`CPU_TIME` — CPU elapsed time in seconds\n\n### Description\nReturns a `REAL` value representing the elapsed CPU time in\nseconds. This is useful for testing segments of code to determine\nexecution time.\n\n \nIf a time source is available, time will be reported with microsecond\nresolution. If no time source is available, `TIME` is set to\n`-1.0`.\n\n \n\nNote that `TIME` may contain a, system dependent, arbitrary offset\nand may not start with `0.0`. For `CPU_TIME`, the absolute\nvalue is meaningless, only differences between subsequent calls to\nthis subroutine, as shown in the example below, should be used.\n\n\n\n\n### Syntax\n`CALL CPU_TIME(TIME)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_cpu_time\n\n    real :: start, finish\n\n    call cpu_time(start)\n\n        ! put code to test here\n\n    call cpu_time(finish)\n\n    print '(\"Time = \",f6.3,\" seconds.\")',finish-start\n\nend program test_cpu_time\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nSYSTEM_CLOCK, DATE_AND_TIME\n" -} \ No newline at end of file + "keyword": "CPU_TIME", + "docstr": "`CPU_TIME` — CPU elapsed time in seconds\n\n### Description\nReturns a `REAL` value representing the elapsed CPU time in\nseconds. This is useful for testing segments of code to determine\nexecution time.\n\n \nIf a time source is available, time will be reported with microsecond\nresolution. If no time source is available, `TIME` is set to\n`-1.0`.\n\n \n\nNote that `TIME` may contain a, system dependent, arbitrary offset\nand may not start with `0.0`. For `CPU_TIME`, the absolute\nvalue is meaningless, only differences between subsequent calls to\nthis subroutine, as shown in the example below, should be used.\n\n\n\n\n### Syntax\n`CALL CPU_TIME(TIME)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_cpu_time\n\n    real :: start, finish\n\n    call cpu_time(start)\n\n        ! put code to test here\n\n    call cpu_time(finish)\n\n    print '(\"Time = \",f6.3,\" seconds.\")',finish-start\n\nend program test_cpu_time\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nSYSTEM_CLOCK, DATE_AND_TIME\n" +} diff --git a/src/docs/CSHIFT.json b/src/docs/CSHIFT.json index 191fd8ca..4444426c 100644 --- a/src/docs/CSHIFT.json +++ b/src/docs/CSHIFT.json @@ -1,4 +1,4 @@ { - "keyword":"CSHIFT", - "docstr":"`CSHIFT` — Circular shift elements of an array\n\n### Description\n`CSHIFT(ARRAY, SHIFT [, DIM])` performs a circular shift on elements of\n`ARRAY` along the dimension of `DIM`. If `DIM` is omitted it is\ntaken to be `1`. `DIM` is a scalar of type `INTEGER` in the\nrange of 1 \\leq DIM \\leq n) where n is the rank of `ARRAY`. \nIf the rank of `ARRAY` is one, then all elements of `ARRAY` are shifted\nby `SHIFT` places. If rank is greater than one, then all complete rank one\nsections of `ARRAY` along the given dimension are shifted. Elements\nshifted out one end of each rank one section are shifted back in the other end.\n\n\n\n### Syntax\n`RESULT = CSHIFT(ARRAY, SHIFT [, DIM])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `DIM` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nReturns an array of same type and rank as the `ARRAY` argument.\n\n\n\n### Example\n```\n\n\nprogram test_cshift\n\n    integer, dimension(3,3) :: a\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\n    a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)\n\n    print *\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\nend program test_cshift\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "CSHIFT", + "docstr": "`CSHIFT` — Circular shift elements of an array\n\n### Description\n`CSHIFT(ARRAY, SHIFT [, DIM])` performs a circular shift on elements of\n`ARRAY` along the dimension of `DIM`. If `DIM` is omitted it is\ntaken to be `1`. `DIM` is a scalar of type `INTEGER` in the\nrange of 1 \\leq DIM \\leq n) where n is the rank of `ARRAY`. \nIf the rank of `ARRAY` is one, then all elements of `ARRAY` are shifted\nby `SHIFT` places. If rank is greater than one, then all complete rank one\nsections of `ARRAY` along the given dimension are shifted. Elements\nshifted out one end of each rank one section are shifted back in the other end.\n\n\n\n### Syntax\n`RESULT = CSHIFT(ARRAY, SHIFT [, DIM])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `DIM` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nReturns an array of same type and rank as the `ARRAY` argument.\n\n\n\n### Example\n```\n\n\nprogram test_cshift\n\n    integer, dimension(3,3) :: a\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\n    a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2)\n\n    print *\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\nend program test_cshift\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/CTIME.json b/src/docs/CTIME.json index 2b9b0301..5401792e 100644 --- a/src/docs/CTIME.json +++ b/src/docs/CTIME.json @@ -1,4 +1,4 @@ { - "keyword":"CTIME", - "docstr":"`CTIME` — Convert a time into a string\n\n### Description\n`CTIME` converts a system time value, such as returned by\n`TIME8`, to a string. The output will be of the form ‘Sat\nAug 19 18:13:14 1995’.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n. \n\n | `RESULT = CTIME(TIME)`.\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `RESULT` | The type shall be of type `CHARACTER` and\nof default kind. It is an `INTENT(OUT)` argument. If the length\nof this variable is too short for the time and date string to fit\ncompletely, it will be blank on procedure return.\n\n\n\n\n\n\n### Return value\nThe converted date and time as a string.\n\n\n\n### Example\n```\n\n\nprogram test_ctime\n\n    integer(8) :: i\n\n    character(len=30) :: date\n\n    i = time8()\n\n\n    ! Do something, main part of the program\n\n\n    call ctime(i,date)\n\n    print *, 'Program was started on ', date\n\nend program test_ctime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nDATE_AND_TIME, GMTIME, LTIME, TIME, TIME8\n" -} \ No newline at end of file + "keyword": "CTIME", + "docstr": "`CTIME` — Convert a time into a string\n\n### Description\n`CTIME` converts a system time value, such as returned by\n`TIME8`, to a string. The output will be of the form ‘Sat\nAug 19 18:13:14 1995’.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n. \n\n | `RESULT = CTIME(TIME)`.\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `RESULT` | The type shall be of type `CHARACTER` and\nof default kind. It is an `INTENT(OUT)` argument. If the length\nof this variable is too short for the time and date string to fit\ncompletely, it will be blank on procedure return.\n\n\n\n\n\n\n### Return value\nThe converted date and time as a string.\n\n\n\n### Example\n```\n\n\nprogram test_ctime\n\n    integer(8) :: i\n\n    character(len=30) :: date\n\n    i = time8()\n\n\n    ! Do something, main part of the program\n\n\n    call ctime(i,date)\n\n    print *, 'Program was started on ', date\n\nend program test_ctime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nDATE_AND_TIME, GMTIME, LTIME, TIME, TIME8\n" +} diff --git a/src/docs/C_ASSOCIATED.json b/src/docs/C_ASSOCIATED.json index 55655850..ff9e998c 100644 --- a/src/docs/C_ASSOCIATED.json +++ b/src/docs/C_ASSOCIATED.json @@ -1,4 +1,4 @@ { - "keyword":"C_ASSOCIATED", - "docstr":"`C_ASSOCIATED` — Status of a C pointer\n\n### Description\n`C_ASSOCIATED(c_ptr_1[, c_ptr_2])` determines the status of the C pointer\n`c_ptr_1` or if `c_ptr_1` is associated with the target `c_ptr_2`.\n\n\n\n### Syntax\n`RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])`\n\n\n### Arguments\n\n \n. \n\n | `c_ptr_2` | (Optional) Scalar of the same type as `c_ptr_1`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`; it is `.false.` if either\n`c_ptr_1` is a C NULL pointer or if `c_ptr1` and `c_ptr_2`\npoint to different addresses.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_LOC, C_FUNLOC\n" -} \ No newline at end of file + "keyword": "C_ASSOCIATED", + "docstr": "`C_ASSOCIATED` — Status of a C pointer\n\n### Description\n`C_ASSOCIATED(c_ptr_1[, c_ptr_2])` determines the status of the C pointer\n`c_ptr_1` or if `c_ptr_1` is associated with the target `c_ptr_2`.\n\n\n\n### Syntax\n`RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])`\n\n\n### Arguments\n\n \n. \n\n | `c_ptr_2` | (Optional) Scalar of the same type as `c_ptr_1`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`; it is `.false.` if either\n`c_ptr_1` is a C NULL pointer or if `c_ptr1` and `c_ptr_2`\npoint to different addresses.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_LOC, C_FUNLOC\n" +} diff --git a/src/docs/C_FUNLOC.json b/src/docs/C_FUNLOC.json index 08c2b0ce..c471fb71 100644 --- a/src/docs/C_FUNLOC.json +++ b/src/docs/C_FUNLOC.json @@ -1,4 +1,4 @@ { - "keyword":"C_FUNLOC", - "docstr":"`C_FUNLOC` — Obtain the C address of a procedure\n\n### Description\n`C_FUNLOC(x)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_FUNLOC(x)`\n\n\n### Arguments\n\n \n | `x` | Interoperable function or pointer to such function.\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_FUNPTR` and contains the C address\nof the argument.\n\n\n\n### Example\n```\n\n\nmodule x\n\n  use iso_c_binding\n\n  implicit none\n\ncontains\n\n  subroutine sub(a) bind(c)\n\n    real(c_float) :: a\n\n    a = sqrt(a)+5.0\n\n  end subroutine sub\n\nend module x\n\nprogram main\n\n  use iso_c_binding\n\n  use x\n\n  implicit none\n\n  interface\n\n    subroutine my_routine(p) bind(c,name='myC_func')\n\n      import :: c_funptr\n\n      type(c_funptr), intent(in) :: p\n\n    end subroutine\n\n  end interface\n\n  call my_routine(c_funloc(sub))\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_LOC, C_F_POINTER, C_F_PROCPOINTER\n" -} \ No newline at end of file + "keyword": "C_FUNLOC", + "docstr": "`C_FUNLOC` — Obtain the C address of a procedure\n\n### Description\n`C_FUNLOC(x)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_FUNLOC(x)`\n\n\n### Arguments\n\n \n | `x` | Interoperable function or pointer to such function.\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_FUNPTR` and contains the C address\nof the argument.\n\n\n\n### Example\n```\n\n\nmodule x\n\n  use iso_c_binding\n\n  implicit none\n\ncontains\n\n  subroutine sub(a) bind(c)\n\n    real(c_float) :: a\n\n    a = sqrt(a)+5.0\n\n  end subroutine sub\n\nend module x\n\nprogram main\n\n  use iso_c_binding\n\n  use x\n\n  implicit none\n\n  interface\n\n    subroutine my_routine(p) bind(c,name='myC_func')\n\n      import :: c_funptr\n\n      type(c_funptr), intent(in) :: p\n\n    end subroutine\n\n  end interface\n\n  call my_routine(c_funloc(sub))\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_LOC, C_F_POINTER, C_F_PROCPOINTER\n" +} diff --git a/src/docs/C_F_POINTER.json b/src/docs/C_F_POINTER.json index 53294854..1079b4e3 100644 --- a/src/docs/C_F_POINTER.json +++ b/src/docs/C_F_POINTER.json @@ -1,4 +1,4 @@ { - "keyword":"C_F_POINTER", - "docstr":"`C_F_POINTER` — Convert C into Fortran pointer\n\n### Description\n`C_F_POINTER(CPTR, FPTR[, SHAPE])` assigns the target of the C pointer\n`CPTR` to the Fortran pointer `FPTR` and specifies its shape.\n\n\n\n### Syntax\n`CALL C_F_POINTER(CPTR, FPTR[, SHAPE])`\n\n\n### Arguments\n\n \n. It is\n`INTENT(IN)`. \n\n | `FPTR` | pointer interoperable with `cptr`. It is\n`INTENT(OUT)`. \n\n | `SHAPE` | (Optional) Rank-one array of type `INTEGER`with `INTENT(IN)`. It shall be present\nif and only if `fptr` is an array. The size\nmust be equal to the rank of `fptr`.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram main\n\n  use iso_c_binding\n\n  implicit none\n\n  interface\n\n    subroutine my_routine(p) bind(c,name='myC_func')\n\n      import :: c_ptr\n\n      type(c_ptr), intent(out) :: p\n\n    end subroutine\n\n  end interface\n\n  type(c_ptr) :: cptr\n\n  real,pointer :: a(:)\n\n  call my_routine(cptr)\n\n  call c_f_pointer(cptr, a, [12])\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nC_LOC, C_F_PROCPOINTER\n" -} \ No newline at end of file + "keyword": "C_F_POINTER", + "docstr": "`C_F_POINTER` — Convert C into Fortran pointer\n\n### Description\n`C_F_POINTER(CPTR, FPTR[, SHAPE])` assigns the target of the C pointer\n`CPTR` to the Fortran pointer `FPTR` and specifies its shape.\n\n\n\n### Syntax\n`CALL C_F_POINTER(CPTR, FPTR[, SHAPE])`\n\n\n### Arguments\n\n \n. It is\n`INTENT(IN)`. \n\n | `FPTR` | pointer interoperable with `cptr`. It is\n`INTENT(OUT)`. \n\n | `SHAPE` | (Optional) Rank-one array of type `INTEGER`with `INTENT(IN)`. It shall be present\nif and only if `fptr` is an array. The size\nmust be equal to the rank of `fptr`.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram main\n\n  use iso_c_binding\n\n  implicit none\n\n  interface\n\n    subroutine my_routine(p) bind(c,name='myC_func')\n\n      import :: c_ptr\n\n      type(c_ptr), intent(out) :: p\n\n    end subroutine\n\n  end interface\n\n  type(c_ptr) :: cptr\n\n  real,pointer :: a(:)\n\n  call my_routine(cptr)\n\n  call c_f_pointer(cptr, a, [12])\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nC_LOC, C_F_PROCPOINTER\n" +} diff --git a/src/docs/C_F_PROCPOINTER.json b/src/docs/C_F_PROCPOINTER.json index 1e7598c6..b466c937 100644 --- a/src/docs/C_F_PROCPOINTER.json +++ b/src/docs/C_F_PROCPOINTER.json @@ -1,4 +1,4 @@ { - "keyword":"C_F_PROCPOINTER", - "docstr":"`C_F_PROCPOINTER` — Convert C into Fortran procedure pointer\n\n### Description\n`C_F_PROCPOINTER(CPTR, FPTR)` Assign the target of the C function pointer\n`CPTR` to the Fortran procedure pointer `FPTR`.\n\n\n\n### Syntax\n`CALL C_F_PROCPOINTER(cptr, fptr)`\n\n\n### Arguments\n\n \n. It is\n`INTENT(IN)`. \n\n | `FPTR` | procedure pointer interoperable with `cptr`. It is\n`INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram main\n\n  use iso_c_binding\n\n  implicit none\n\n  abstract interface\n\n    function func(a)\n\n      import :: c_float\n\n      real(c_float), intent(in) :: a\n\n      real(c_float) :: func\n\n    end function\n\n  end interface\n\n  interface\n\n     function getIterFunc() bind(c,name=\"getIterFunc\")\n\n       import :: c_funptr\n\n       type(c_funptr) :: getIterFunc\n\n     end function\n\n  end interface\n\n  type(c_funptr) :: cfunptr\n\n  procedure(func), pointer :: myFunc\n\n  cfunptr = getIterFunc()\n\n  call c_f_procpointer(cfunptr, myFunc)\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nC_LOC, C_F_POINTER\n" -} \ No newline at end of file + "keyword": "C_F_PROCPOINTER", + "docstr": "`C_F_PROCPOINTER` — Convert C into Fortran procedure pointer\n\n### Description\n`C_F_PROCPOINTER(CPTR, FPTR)` Assign the target of the C function pointer\n`CPTR` to the Fortran procedure pointer `FPTR`.\n\n\n\n### Syntax\n`CALL C_F_PROCPOINTER(cptr, fptr)`\n\n\n### Arguments\n\n \n. It is\n`INTENT(IN)`. \n\n | `FPTR` | procedure pointer interoperable with `cptr`. It is\n`INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram main\n\n  use iso_c_binding\n\n  implicit none\n\n  abstract interface\n\n    function func(a)\n\n      import :: c_float\n\n      real(c_float), intent(in) :: a\n\n      real(c_float) :: func\n\n    end function\n\n  end interface\n\n  interface\n\n     function getIterFunc() bind(c,name=\"getIterFunc\")\n\n       import :: c_funptr\n\n       type(c_funptr) :: getIterFunc\n\n     end function\n\n  end interface\n\n  type(c_funptr) :: cfunptr\n\n  procedure(func), pointer :: myFunc\n\n  cfunptr = getIterFunc()\n\n  call c_f_procpointer(cfunptr, myFunc)\n\nend program main\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nC_LOC, C_F_POINTER\n" +} diff --git a/src/docs/C_LOC.json b/src/docs/C_LOC.json index 8d7dde17..a2baafaf 100644 --- a/src/docs/C_LOC.json +++ b/src/docs/C_LOC.json @@ -1,4 +1,4 @@ { - "keyword":"C_LOC", - "docstr":"`C_LOC` — Obtain the C address of an object\n\n### Description\n`C_LOC(X)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Shall have either the POINTER or TARGET attribute. It shall not be a coindexed object. It shall either be a variable with interoperable type and kind type parameters, or be a scalar, nonpolymorphic variable with no length type parameters.\n\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_PTR` and contains the C address\nof the argument.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_FUNLOC, C_F_POINTER, C_F_PROCPOINTER\n" -} \ No newline at end of file + "keyword": "C_LOC", + "docstr": "`C_LOC` — Obtain the C address of an object\n\n### Description\n`C_LOC(X)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Shall have either the POINTER or TARGET attribute. It shall not be a coindexed object. It shall either be a variable with interoperable type and kind type parameters, or be a scalar, nonpolymorphic variable with no length type parameters.\n\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_PTR` and contains the C address\nof the argument.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_FUNLOC, C_F_POINTER, C_F_PROCPOINTER\n" +} diff --git a/src/docs/C_SIZEOF.json b/src/docs/C_SIZEOF.json index 983c79f7..5bff0ced 100644 --- a/src/docs/C_SIZEOF.json +++ b/src/docs/C_SIZEOF.json @@ -1,4 +1,4 @@ { - "keyword":"C_SIZEOF", - "docstr":"`C_SIZEOF` — Size in bytes of an expression\n\n### Description\n`C_SIZEOF(X)` calculates the number of bytes of storage the\nexpression `X` occupies.\n\n\n\n### Syntax\n`N = C_SIZEOF(X)`\n\n\n### Arguments\n\n \n | `X` | The argument shall be an interoperable data entity.\n\n\n\n\n\n\n### Return value\nThe return value is of type integer and of the system-dependent kind\n`C_SIZE_T` (from the `ISO_C_BINDING` module). Its value is the\nnumber of bytes occupied by the argument. If the argument has the\n`POINTER` attribute, the number of bytes of the storage area pointed\nto is returned. If the argument is of a derived type with `POINTER`or `ALLOCATABLE` components, the return value does not account for\nthe sizes of the data pointed to by these components.\n\n\n\n### Example\n```\n\n\nuse iso_c_binding\n\ninteger(c_int) :: i\n\nreal(c_float) :: r, s(5)\n\nprint *, (c_sizeof(s)/c_sizeof(r) == 5)\n\nend\n\n```\n\n \nThe example will print `.TRUE.` unless you are using a platform\nwhere default `REAL` variables are unusually padded.\n\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_C_BINDING`\n\n\n### See also\nSIZEOF, STORAGE_SIZE\n" -} \ No newline at end of file + "keyword": "C_SIZEOF", + "docstr": "`C_SIZEOF` — Size in bytes of an expression\n\n### Description\n`C_SIZEOF(X)` calculates the number of bytes of storage the\nexpression `X` occupies.\n\n\n\n### Syntax\n`N = C_SIZEOF(X)`\n\n\n### Arguments\n\n \n | `X` | The argument shall be an interoperable data entity.\n\n\n\n\n\n\n### Return value\nThe return value is of type integer and of the system-dependent kind\n`C_SIZE_T` (from the `ISO_C_BINDING` module). Its value is the\nnumber of bytes occupied by the argument. If the argument has the\n`POINTER` attribute, the number of bytes of the storage area pointed\nto is returned. If the argument is of a derived type with `POINTER`or `ALLOCATABLE` components, the return value does not account for\nthe sizes of the data pointed to by these components.\n\n\n\n### Example\n```\n\n\nuse iso_c_binding\n\ninteger(c_int) :: i\n\nreal(c_float) :: r, s(5)\n\nprint *, (c_sizeof(s)/c_sizeof(r) == 5)\n\nend\n\n```\n\n \nThe example will print `.TRUE.` unless you are using a platform\nwhere default `REAL` variables are unusually padded.\n\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_C_BINDING`\n\n\n### See also\nSIZEOF, STORAGE_SIZE\n" +} diff --git a/src/docs/DATE_AND_TIME.json b/src/docs/DATE_AND_TIME.json index 83da502f..6300445f 100644 --- a/src/docs/DATE_AND_TIME.json +++ b/src/docs/DATE_AND_TIME.json @@ -1,4 +1,4 @@ { - "keyword":"DATE_AND_TIME", - "docstr":"`DATE_AND_TIME` — Date and time subroutine\n\n### Description\n`DATE_AND_TIME(DATE, TIME, ZONE, VALUES)` gets the corresponding date and\ntime information from the real-time system clock. `DATE` is\n`INTENT(OUT)` and has form ccyymmdd. `TIME` is `INTENT(OUT)` and\nhas form hhmmss.sss. `ZONE` is `INTENT(OUT)` and has form (+-)hhmm,\nrepresenting the difference with respect to Coordinated Universal Time (UTC). \nUnavailable time and date parameters return blanks.\n\n \n`VALUES` is `INTENT(OUT)` and provides the following:\n\n \n\n: | The year\n\n | `VALUE(2)`: | The month\n\n | `VALUE(3)`: | The day of the month\n\n | `VALUE(4)`: | Time difference with UTC in minutes\n\n | `VALUE(5)`: | The hour of the day\n\n | `VALUE(6)`: | The minutes of the hour\n\n | `VALUE(7)`: | The seconds of the minute\n\n | `VALUE(8)`: | The milliseconds of the second\n\n\n\n\n\n\n### Syntax\n`CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])`\n\n\n### Arguments\n\n \n\nor larger, and of default kind. \n\n | `TIME` | (Optional) The type shall be `CHARACTER(LEN=10)`or larger, and of default kind. \n\n | `ZONE` | (Optional) The type shall be `CHARACTER(LEN=5)`or larger, and of default kind. \n\n | `VALUES` | (Optional) The type shall be `INTEGER(8)`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_time_and_date\n\n    character(8) :: date\n\n    character(10) :: time\n\n    character(5) :: zone\n\n    integer,dimension(8) :: values\n\n    ! using keyword arguments\n\n    call date_and_time(date,time,zone,values)\n\n    call date_and_time(DATE=date,ZONE=zone)\n\n    call date_and_time(TIME=time)\n\n    call date_and_time(VALUES=values)\n\n    print '(a,2x,a,2x,a)', date, time, zone\n\n    print '(8i5)', values\n\nend program test_time_and_date\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nCPU_TIME, SYSTEM_CLOCK\n" -} \ No newline at end of file + "keyword": "DATE_AND_TIME", + "docstr": "`DATE_AND_TIME` — Date and time subroutine\n\n### Description\n`DATE_AND_TIME(DATE, TIME, ZONE, VALUES)` gets the corresponding date and\ntime information from the real-time system clock. `DATE` is\n`INTENT(OUT)` and has form ccyymmdd. `TIME` is `INTENT(OUT)` and\nhas form hhmmss.sss. `ZONE` is `INTENT(OUT)` and has form (+-)hhmm,\nrepresenting the difference with respect to Coordinated Universal Time (UTC). \nUnavailable time and date parameters return blanks.\n\n \n`VALUES` is `INTENT(OUT)` and provides the following:\n\n \n\n: | The year\n\n | `VALUE(2)`: | The month\n\n | `VALUE(3)`: | The day of the month\n\n | `VALUE(4)`: | Time difference with UTC in minutes\n\n | `VALUE(5)`: | The hour of the day\n\n | `VALUE(6)`: | The minutes of the hour\n\n | `VALUE(7)`: | The seconds of the minute\n\n | `VALUE(8)`: | The milliseconds of the second\n\n\n\n\n\n\n### Syntax\n`CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])`\n\n\n### Arguments\n\n \n\nor larger, and of default kind. \n\n | `TIME` | (Optional) The type shall be `CHARACTER(LEN=10)`or larger, and of default kind. \n\n | `ZONE` | (Optional) The type shall be `CHARACTER(LEN=5)`or larger, and of default kind. \n\n | `VALUES` | (Optional) The type shall be `INTEGER(8)`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_time_and_date\n\n    character(8) :: date\n\n    character(10) :: time\n\n    character(5) :: zone\n\n    integer,dimension(8) :: values\n\n    ! using keyword arguments\n\n    call date_and_time(date,time,zone,values)\n\n    call date_and_time(DATE=date,ZONE=zone)\n\n    call date_and_time(TIME=time)\n\n    call date_and_time(VALUES=values)\n\n    print '(a,2x,a,2x,a)', date, time, zone\n\n    print '(8i5)', values\n\nend program test_time_and_date\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nCPU_TIME, SYSTEM_CLOCK\n" +} diff --git a/src/docs/DBLE.json b/src/docs/DBLE.json index 9c8b88e4..eb95ac8c 100644 --- a/src/docs/DBLE.json +++ b/src/docs/DBLE.json @@ -1,4 +1,4 @@ { - "keyword":"DBLE", - "docstr":"`DBLE` — Double conversion function\n\n### Description\n`DBLE(A)` Converts `A` to double precision real type.\n\n\n\n### Syntax\n`RESULT = DBLE(A)`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type double precision real.\n\n\n\n### Example\n```\n\n\nprogram test_dble\n\n    real :: x = 2.18\n\n    integer :: i = 5\n\n    complex :: z = (2.3,1.14)\n\n    print *, dble(x), dble(i), dble(z)\n\nend program test_dble\n\n```\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nREAL\n" -} \ No newline at end of file + "keyword": "DBLE", + "docstr": "`DBLE` — Double conversion function\n\n### Description\n`DBLE(A)` Converts `A` to double precision real type.\n\n\n\n### Syntax\n`RESULT = DBLE(A)`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type double precision real.\n\n\n\n### Example\n```\n\n\nprogram test_dble\n\n    real :: x = 2.18\n\n    integer :: i = 5\n\n    complex :: z = (2.3,1.14)\n\n    print *, dble(x), dble(i), dble(z)\n\nend program test_dble\n\n```\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nREAL\n" +} diff --git a/src/docs/DCMPLX.json b/src/docs/DCMPLX.json index e7a9ab37..9734b100 100644 --- a/src/docs/DCMPLX.json +++ b/src/docs/DCMPLX.json @@ -1,4 +1,4 @@ { - "keyword":"DCMPLX", - "docstr":"`DCMPLX` — Double complex conversion function\n\n### Description\n`DCMPLX(X [,Y])` returns a double complex number where `X` is\nconverted to the real component. If `Y` is present it is converted to the\nimaginary component. If `Y` is not present then the imaginary component is\nset to 0.0. If `X` is complex then `Y` must not be present.\n\n\n\n### Syntax\n`RESULT = DCMPLX(X [, Y])`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`. \n\n | `Y` | (Optional if `X` is not `COMPLEX`.) May be\n`INTEGER` or `REAL`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `COMPLEX(8)`\n\n\n### Example\n```\n\n\nprogram test_dcmplx\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    complex :: z\n\n    z = cmplx(i, x)\n\n    print *, dcmplx(i)\n\n    print *, dcmplx(x)\n\n    print *, dcmplx(z)\n\n    print *, dcmplx(x,i)\n\nend program test_dcmplx\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "DCMPLX", + "docstr": "`DCMPLX` — Double complex conversion function\n\n### Description\n`DCMPLX(X [,Y])` returns a double complex number where `X` is\nconverted to the real component. If `Y` is present it is converted to the\nimaginary component. If `Y` is not present then the imaginary component is\nset to 0.0. If `X` is complex then `Y` must not be present.\n\n\n\n### Syntax\n`RESULT = DCMPLX(X [, Y])`\n\n\n### Arguments\n\n \n,\nor `COMPLEX`. \n\n | `Y` | (Optional if `X` is not `COMPLEX`.) May be\n`INTEGER` or `REAL`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `COMPLEX(8)`\n\n\n### Example\n```\n\n\nprogram test_dcmplx\n\n    integer :: i = 42\n\n    real :: x = 3.14\n\n    complex :: z\n\n    z = cmplx(i, x)\n\n    print *, dcmplx(i)\n\n    print *, dcmplx(x)\n\n    print *, dcmplx(z)\n\n    print *, dcmplx(x,i)\n\nend program test_dcmplx\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/DIGITS.json b/src/docs/DIGITS.json index 58aa8220..e5a6742c 100644 --- a/src/docs/DIGITS.json +++ b/src/docs/DIGITS.json @@ -1,4 +1,4 @@ { - "keyword":"DIGITS", - "docstr":"`DIGITS` — Significant binary digits function\n\n### Description\n`DIGITS(X)` returns the number of significant binary digits of the internal\nmodel representation of `X`. For example, on a system using a 32-bit\nfloating point representation, a default real number would likely return 24.\n\n\n\n### Syntax\n`RESULT = DIGITS(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`.\n\n\n\n### Example\n```\n\n\nprogram test_digits\n\n    integer :: i = 12345\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, digits(i)\n\n    print *, digits(x)\n\n    print *, digits(y)\n\nend program test_digits\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "DIGITS", + "docstr": "`DIGITS` — Significant binary digits function\n\n### Description\n`DIGITS(X)` returns the number of significant binary digits of the internal\nmodel representation of `X`. For example, on a system using a 32-bit\nfloating point representation, a default real number would likely return 24.\n\n\n\n### Syntax\n`RESULT = DIGITS(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`.\n\n\n\n### Example\n```\n\n\nprogram test_digits\n\n    integer :: i = 12345\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, digits(i)\n\n    print *, digits(x)\n\n    print *, digits(y)\n\nend program test_digits\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/DIM.json b/src/docs/DIM.json index 8e4926c4..3fcbfffb 100644 --- a/src/docs/DIM.json +++ b/src/docs/DIM.json @@ -1,4 +1,4 @@ { - "keyword":"DIM", - "docstr":"`DIM` — Positive difference\n\n### Description\n`DIM(X,Y)` returns the difference `X-Y` if the result is positive;\notherwise returns zero.\n\n\n\n### Syntax\n`RESULT = DIM(X, Y)`\n\n\n### Arguments\n\n \n\n\n | `Y` | The type shall be the same type and kind as `X`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` or `REAL`.\n\n\n\n### Example\n```\n\n\nprogram test_dim\n\n    integer :: i\n\n    real(8) :: x\n\n    i = dim(4, 15)\n\n    x = dim(4.345_8, 2.111_8)\n\n    print *, i\n\n    print *, x\n\nend program test_dim\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DIM(X,Y)` | `REAL(4) X, Y` | `REAL(4)` | Fortran 77 and later\n\n | `IDIM(X,Y)` | `INTEGER(4) X, Y` | `INTEGER(4)` | Fortran 77 and later\n\n | `DDIM(X,Y)` | `REAL(8) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "DIM", + "docstr": "`DIM` — Positive difference\n\n### Description\n`DIM(X,Y)` returns the difference `X-Y` if the result is positive;\notherwise returns zero.\n\n\n\n### Syntax\n`RESULT = DIM(X, Y)`\n\n\n### Arguments\n\n \n\n\n | `Y` | The type shall be the same type and kind as `X`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` or `REAL`.\n\n\n\n### Example\n```\n\n\nprogram test_dim\n\n    integer :: i\n\n    real(8) :: x\n\n    i = dim(4, 15)\n\n    x = dim(4.345_8, 2.111_8)\n\n    print *, i\n\n    print *, x\n\nend program test_dim\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DIM(X,Y)` | `REAL(4) X, Y` | `REAL(4)` | Fortran 77 and later\n\n | `IDIM(X,Y)` | `INTEGER(4) X, Y` | `INTEGER(4)` | Fortran 77 and later\n\n | `DDIM(X,Y)` | `REAL(8) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/DOT_PRODUCT.json b/src/docs/DOT_PRODUCT.json index cbc4c72d..d41c1c76 100644 --- a/src/docs/DOT_PRODUCT.json +++ b/src/docs/DOT_PRODUCT.json @@ -1,4 +1,4 @@ { - "keyword":"DOT_PRODUCT", - "docstr":"`DOT_PRODUCT` — Dot product function\n\n### Description\n`DOT_PRODUCT(VECTOR_A, VECTOR_B)` computes the dot product multiplication\nof two vectors `VECTOR_A` and `VECTOR_B`. The two vectors may be\neither numeric or logical and must be arrays of rank one and of equal size. If\nthe vectors are `INTEGER` or `REAL`, the result is\n`SUM(VECTOR_A*VECTOR_B)`. If the vectors are `COMPLEX`, the result\nis `SUM(CONJG(VECTOR_A)*VECTOR_B)`. If the vectors are `LOGICAL`,\nthe result is `ANY(VECTOR_A .AND. VECTOR_B)`.\n\n\n\n### Syntax\n`RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)`\n\n\n### Arguments\n\n \n, rank 1. \n\n | `VECTOR_B` | The type shall be numeric if `VECTOR_A` is of numeric type or `LOGICAL` if `VECTOR_A` is of type `LOGICAL`. `VECTOR_B` shall be a rank-one array.\n\n\n\n\n\n\n### Return value\nIf the arguments are numeric, the return value is a scalar of numeric type,\n`INTEGER`, `REAL`, or `COMPLEX`. If the arguments are\n`LOGICAL`, the return value is `.TRUE.` or `.FALSE.`.\n\n\n\n### Example\n```\n\n\nprogram test_dot_prod\n\n    integer, dimension(3) :: a, b\n\n    a = (/ 1, 2, 3 /)\n\n    b = (/ 4, 5, 6 /)\n\n    print '(3i3)', a\n\n    print *\n\n    print '(3i3)', b\n\n    print *\n\n    print *, dot_product(a,b)\n\nend program test_dot_prod\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "DOT_PRODUCT", + "docstr": "`DOT_PRODUCT` — Dot product function\n\n### Description\n`DOT_PRODUCT(VECTOR_A, VECTOR_B)` computes the dot product multiplication\nof two vectors `VECTOR_A` and `VECTOR_B`. The two vectors may be\neither numeric or logical and must be arrays of rank one and of equal size. If\nthe vectors are `INTEGER` or `REAL`, the result is\n`SUM(VECTOR_A*VECTOR_B)`. If the vectors are `COMPLEX`, the result\nis `SUM(CONJG(VECTOR_A)*VECTOR_B)`. If the vectors are `LOGICAL`,\nthe result is `ANY(VECTOR_A .AND. VECTOR_B)`.\n\n\n\n### Syntax\n`RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)`\n\n\n### Arguments\n\n \n, rank 1. \n\n | `VECTOR_B` | The type shall be numeric if `VECTOR_A` is of numeric type or `LOGICAL` if `VECTOR_A` is of type `LOGICAL`. `VECTOR_B` shall be a rank-one array.\n\n\n\n\n\n\n### Return value\nIf the arguments are numeric, the return value is a scalar of numeric type,\n`INTEGER`, `REAL`, or `COMPLEX`. If the arguments are\n`LOGICAL`, the return value is `.TRUE.` or `.FALSE.`.\n\n\n\n### Example\n```\n\n\nprogram test_dot_prod\n\n    integer, dimension(3) :: a, b\n\n    a = (/ 1, 2, 3 /)\n\n    b = (/ 4, 5, 6 /)\n\n    print '(3i3)', a\n\n    print *\n\n    print '(3i3)', b\n\n    print *\n\n    print *, dot_product(a,b)\n\nend program test_dot_prod\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/DPROD.json b/src/docs/DPROD.json index b2cb7db3..c7a2d9bf 100644 --- a/src/docs/DPROD.json +++ b/src/docs/DPROD.json @@ -1,4 +1,4 @@ { - "keyword":"DPROD", - "docstr":"`DPROD` — Double product function\n\n### Description\n`DPROD(X,Y)` returns the product `X*Y`.\n\n\n\n### Syntax\n`RESULT = DPROD(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type shall be `REAL`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL(8)`.\n\n\n\n### Example\n```\n\n\nprogram test_dprod\n\n    real :: x = 5.2\n\n    real :: y = 2.3\n\n    real(8) :: d\n\n    d = dprod(x,y)\n\n    print *, d\n\nend program test_dprod\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DPROD(X,Y)` | `REAL(4) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "DPROD", + "docstr": "`DPROD` — Double product function\n\n### Description\n`DPROD(X,Y)` returns the product `X*Y`.\n\n\n\n### Syntax\n`RESULT = DPROD(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type shall be `REAL`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL(8)`.\n\n\n\n### Example\n```\n\n\nprogram test_dprod\n\n    real :: x = 5.2\n\n    real :: y = 2.3\n\n    real(8) :: d\n\n    d = dprod(x,y)\n\n    print *, d\n\nend program test_dprod\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DPROD(X,Y)` | `REAL(4) X, Y` | `REAL(8)` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/DREAL.json b/src/docs/DREAL.json index 3c3b7595..74f2ecec 100644 --- a/src/docs/DREAL.json +++ b/src/docs/DREAL.json @@ -1,4 +1,4 @@ { - "keyword":"DREAL", - "docstr":"`DREAL` — Double real part function\n\n### Description\n`DREAL(Z)` returns the real part of complex variable `Z`.\n\n\n\n### Syntax\n`RESULT = DREAL(A)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL(8)`.\n\n\n\n### Example\n```\n\n\nprogram test_dreal\n\n    complex(8) :: z = (1.3_8,7.2_8)\n\n    print *, dreal(z)\n\nend program test_dreal\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nAIMAG\n\n " -} \ No newline at end of file + "keyword": "DREAL", + "docstr": "`DREAL` — Double real part function\n\n### Description\n`DREAL(Z)` returns the real part of complex variable `Z`.\n\n\n\n### Syntax\n`RESULT = DREAL(A)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL(8)`.\n\n\n\n### Example\n```\n\n\nprogram test_dreal\n\n    complex(8) :: z = (1.3_8,7.2_8)\n\n    print *, dreal(z)\n\nend program test_dreal\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nAIMAG\n\n " +} diff --git a/src/docs/DSHIFTL.json b/src/docs/DSHIFTL.json index 226d76ec..6ea5e634 100644 --- a/src/docs/DSHIFTL.json +++ b/src/docs/DSHIFTL.json @@ -1,4 +1,4 @@ { - "keyword":"DSHIFTL", - "docstr":"`DSHIFTL` — Combined left shift\n\n### Description\n`DSHIFTL(I, J, SHIFT)` combines bits of `I` and `J`. The\nrightmost `SHIFT` bits of the result are the leftmost `SHIFT`\nbits of `J`, and the remaining bits are the rightmost bits of\n`I`.\n\n\n\n### Syntax\n`RESULT = DSHIFTL(I, J, SHIFT)`\n\n\n### Arguments\n\n \n or a BOZ constant. \n\n | `J` | Shall be of type `INTEGER` or a BOZ constant. \nIf both `I` and `J` have integer type, then they shall have\nthe same kind type parameter. `I` and `J` shall not both be\nBOZ constants. \n\n | `SHIFT` | Shall be of type `INTEGER`. It shall\nbe nonnegative. If `I` is not a BOZ constant, then `SHIFT`\nshall be less than or equal to `BIT_SIZE(I)`; otherwise,\n`SHIFT` shall be less than or equal to `BIT_SIZE(J)`.\n\n\n\n\n\n\n### Return value\nIf either `I` or `J` is a BOZ constant, it is first converted\nas if by the intrinsic function `INT` to an integer type with the\nkind type parameter of the other.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nDSHIFTR\n" -} \ No newline at end of file + "keyword": "DSHIFTL", + "docstr": "`DSHIFTL` — Combined left shift\n\n### Description\n`DSHIFTL(I, J, SHIFT)` combines bits of `I` and `J`. The\nrightmost `SHIFT` bits of the result are the leftmost `SHIFT`\nbits of `J`, and the remaining bits are the rightmost bits of\n`I`.\n\n\n\n### Syntax\n`RESULT = DSHIFTL(I, J, SHIFT)`\n\n\n### Arguments\n\n \n or a BOZ constant. \n\n | `J` | Shall be of type `INTEGER` or a BOZ constant. \nIf both `I` and `J` have integer type, then they shall have\nthe same kind type parameter. `I` and `J` shall not both be\nBOZ constants. \n\n | `SHIFT` | Shall be of type `INTEGER`. It shall\nbe nonnegative. If `I` is not a BOZ constant, then `SHIFT`\nshall be less than or equal to `BIT_SIZE(I)`; otherwise,\n`SHIFT` shall be less than or equal to `BIT_SIZE(J)`.\n\n\n\n\n\n\n### Return value\nIf either `I` or `J` is a BOZ constant, it is first converted\nas if by the intrinsic function `INT` to an integer type with the\nkind type parameter of the other.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nDSHIFTR\n" +} diff --git a/src/docs/DSHIFTR.json b/src/docs/DSHIFTR.json index 3a36a623..477f972e 100644 --- a/src/docs/DSHIFTR.json +++ b/src/docs/DSHIFTR.json @@ -1,4 +1,4 @@ { - "keyword":"DSHIFTR", - "docstr":"`DSHIFTR` — Combined right shift\n\n### Description\n`DSHIFTR(I, J, SHIFT)` combines bits of `I` and `J`. The\nleftmost `SHIFT` bits of the result are the rightmost `SHIFT`\nbits of `I`, and the remaining bits are the leftmost bits of\n`J`.\n\n\n\n### Syntax\n`RESULT = DSHIFTR(I, J, SHIFT)`\n\n\n### Arguments\n\n \n or a BOZ constant. \n\n | `J` | Shall be of type `INTEGER` or a BOZ constant. \nIf both `I` and `J` have integer type, then they shall have\nthe same kind type parameter. `I` and `J` shall not both be\nBOZ constants. \n\n | `SHIFT` | Shall be of type `INTEGER`. It shall\nbe nonnegative. If `I` is not a BOZ constant, then `SHIFT`\nshall be less than or equal to `BIT_SIZE(I)`; otherwise,\n`SHIFT` shall be less than or equal to `BIT_SIZE(J)`.\n\n\n\n\n\n\n### Return value\nIf either `I` or `J` is a BOZ constant, it is first converted\nas if by the intrinsic function `INT` to an integer type with the\nkind type parameter of the other.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nDSHIFTL\n" -} \ No newline at end of file + "keyword": "DSHIFTR", + "docstr": "`DSHIFTR` — Combined right shift\n\n### Description\n`DSHIFTR(I, J, SHIFT)` combines bits of `I` and `J`. The\nleftmost `SHIFT` bits of the result are the rightmost `SHIFT`\nbits of `I`, and the remaining bits are the leftmost bits of\n`J`.\n\n\n\n### Syntax\n`RESULT = DSHIFTR(I, J, SHIFT)`\n\n\n### Arguments\n\n \n or a BOZ constant. \n\n | `J` | Shall be of type `INTEGER` or a BOZ constant. \nIf both `I` and `J` have integer type, then they shall have\nthe same kind type parameter. `I` and `J` shall not both be\nBOZ constants. \n\n | `SHIFT` | Shall be of type `INTEGER`. It shall\nbe nonnegative. If `I` is not a BOZ constant, then `SHIFT`\nshall be less than or equal to `BIT_SIZE(I)`; otherwise,\n`SHIFT` shall be less than or equal to `BIT_SIZE(J)`.\n\n\n\n\n\n\n### Return value\nIf either `I` or `J` is a BOZ constant, it is first converted\nas if by the intrinsic function `INT` to an integer type with the\nkind type parameter of the other.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nDSHIFTL\n" +} diff --git a/src/docs/DTIME.json b/src/docs/DTIME.json index 7f276567..4e3ef1b8 100644 --- a/src/docs/DTIME.json +++ b/src/docs/DTIME.json @@ -1,4 +1,4 @@ { - "keyword":"DTIME", - "docstr":"`DTIME` — Execution time subroutine (or function)\n\n### Description\n`DTIME(VALUES, TIME)` initially returns the number of seconds of runtime\nsince the start of the process's execution in `TIME`. `VALUES`\nreturns the user and system components of this time in `VALUES(1)` and\n`VALUES(2)` respectively. `TIME` is equal to VALUES(1) +\nVALUES(2).\n\n \nSubsequent invocations of `DTIME` return values accumulated since the\nprevious invocation.\n\n \n\nOn some systems, the underlying timings are represented using types with\nsufficiently small limits that overflows (wrap around) are possible, such as\n32-bit types. Therefore, the values returned by this intrinsic might be, or\nbecome, negative, or numerically less than previous values, during a single\nrun of the compiled program.\n\n \n\nPlease note, that this implementation is thread safe if used within OpenMP\ndirectives, i.e., its state will be consistent while called from multiple\nthreads. However, if `DTIME` is called from multiple threads, the result\nis still the time since the last invocation. This may not give the intended\nresults. If possible, use `CPU_TIME` instead.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\n`VALUES` and `TIME` are `INTENT(OUT)` and provide the following:\n\n \n\n: | User time in seconds. \n\n | `VALUES(2)`: | System time in seconds. \n\n | `TIME`: | Run time since start in seconds.\n\n\n\n\n\n\n### Syntax\n\n \n. \n\n | `TIME = DTIME(VALUES)`, (not recommended).\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `TIME` | The type shall be `REAL(4)`.\n\n\n\n\n\n\n### Return value\nElapsed time in seconds since the last invocation or since the start of program\nexecution if not called before.\n\n\n\n### Example\n```\n\n\nprogram test_dtime\n\n    integer(8) :: i, j\n\n    real, dimension(2) :: tarray\n\n    real :: result\n\n    call dtime(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\n    do i=1,100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call dtime(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\nend program test_dtime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " -} \ No newline at end of file + "keyword": "DTIME", + "docstr": "`DTIME` — Execution time subroutine (or function)\n\n### Description\n`DTIME(VALUES, TIME)` initially returns the number of seconds of runtime\nsince the start of the process's execution in `TIME`. `VALUES`\nreturns the user and system components of this time in `VALUES(1)` and\n`VALUES(2)` respectively. `TIME` is equal to VALUES(1) +\nVALUES(2).\n\n \nSubsequent invocations of `DTIME` return values accumulated since the\nprevious invocation.\n\n \n\nOn some systems, the underlying timings are represented using types with\nsufficiently small limits that overflows (wrap around) are possible, such as\n32-bit types. Therefore, the values returned by this intrinsic might be, or\nbecome, negative, or numerically less than previous values, during a single\nrun of the compiled program.\n\n \n\nPlease note, that this implementation is thread safe if used within OpenMP\ndirectives, i.e., its state will be consistent while called from multiple\nthreads. However, if `DTIME` is called from multiple threads, the result\nis still the time since the last invocation. This may not give the intended\nresults. If possible, use `CPU_TIME` instead.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\n`VALUES` and `TIME` are `INTENT(OUT)` and provide the following:\n\n \n\n: | User time in seconds. \n\n | `VALUES(2)`: | System time in seconds. \n\n | `TIME`: | Run time since start in seconds.\n\n\n\n\n\n\n### Syntax\n\n \n. \n\n | `TIME = DTIME(VALUES)`, (not recommended).\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `TIME` | The type shall be `REAL(4)`.\n\n\n\n\n\n\n### Return value\nElapsed time in seconds since the last invocation or since the start of program\nexecution if not called before.\n\n\n\n### Example\n```\n\n\nprogram test_dtime\n\n    integer(8) :: i, j\n\n    real, dimension(2) :: tarray\n\n    real :: result\n\n    call dtime(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\n    do i=1,100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call dtime(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\nend program test_dtime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " +} diff --git a/src/docs/EOSHIFT.json b/src/docs/EOSHIFT.json index 9dbfaeb0..ceb940b1 100644 --- a/src/docs/EOSHIFT.json +++ b/src/docs/EOSHIFT.json @@ -1,4 +1,4 @@ { - "keyword":"EOSHIFT", - "docstr":"`EOSHIFT` — End-off shift elements of an array\n\n### Description\n`EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])` performs an end-off shift on\nelements of `ARRAY` along the dimension of `DIM`. If `DIM` is\nomitted it is taken to be `1`. `DIM` is a scalar of type\n`INTEGER` in the range of 1 \\leq DIM \\leq n) where n is the\nrank of `ARRAY`. If the rank of `ARRAY` is one, then all elements of\n`ARRAY` are shifted by `SHIFT` places. If rank is greater than one,\nthen all complete rank one sections of `ARRAY` along the given dimension are\nshifted. Elements shifted out one end of each rank one section are dropped. If\n`BOUNDARY` is present then the corresponding value of from `BOUNDARY`\nis copied back in the other end. If `BOUNDARY` is not present then the\nfollowing are copied in depending on the type of `ARRAY`.\n\n \n\n\n | Numeric | 0 of the type and kind of `ARRAY`. \n\n | Logical | `.FALSE.`. \n\n | Character(`len`) | `len` blanks.\n\n\n\n\n\n\n### Syntax\n`RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])`\n\n\n### Arguments\n\n \n | `ARRAY` | May be any type, not scalar. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `BOUNDARY` | Same type as `ARRAY`. \n\n | `DIM` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nReturns an array of same type and rank as the `ARRAY` argument.\n\n\n\n### Example\n```\n\n\nprogram test_eoshift\n\n    integer, dimension(3,3) :: a\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\n    a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)\n\n    print *\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\nend program test_eoshift\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "EOSHIFT", + "docstr": "`EOSHIFT` — End-off shift elements of an array\n\n### Description\n`EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])` performs an end-off shift on\nelements of `ARRAY` along the dimension of `DIM`. If `DIM` is\nomitted it is taken to be `1`. `DIM` is a scalar of type\n`INTEGER` in the range of 1 \\leq DIM \\leq n) where n is the\nrank of `ARRAY`. If the rank of `ARRAY` is one, then all elements of\n`ARRAY` are shifted by `SHIFT` places. If rank is greater than one,\nthen all complete rank one sections of `ARRAY` along the given dimension are\nshifted. Elements shifted out one end of each rank one section are dropped. If\n`BOUNDARY` is present then the corresponding value of from `BOUNDARY`\nis copied back in the other end. If `BOUNDARY` is not present then the\nfollowing are copied in depending on the type of `ARRAY`.\n\n \n\n\n | Numeric | 0 of the type and kind of `ARRAY`. \n\n | Logical | `.FALSE.`. \n\n | Character(`len`) | `len` blanks.\n\n\n\n\n\n\n### Syntax\n`RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])`\n\n\n### Arguments\n\n \n | `ARRAY` | May be any type, not scalar. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `BOUNDARY` | Same type as `ARRAY`. \n\n | `DIM` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nReturns an array of same type and rank as the `ARRAY` argument.\n\n\n\n### Example\n```\n\n\nprogram test_eoshift\n\n    integer, dimension(3,3) :: a\n\n    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\n    a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)\n\n    print *\n\n    print '(3i3)', a(1,:)\n\n    print '(3i3)', a(2,:)\n\n    print '(3i3)', a(3,:)\n\nend program test_eoshift\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/EPSILON.json b/src/docs/EPSILON.json index 38da9ba8..17c5c4f5 100644 --- a/src/docs/EPSILON.json +++ b/src/docs/EPSILON.json @@ -1,4 +1,4 @@ { - "keyword":"EPSILON", - "docstr":"`EPSILON` — Epsilon function\n\n### Description\n`EPSILON(X)` returns the smallest number `E` of the same kind\nas `X` such that 1 + E > 1.\n\n\n\n### Syntax\n`RESULT = EPSILON(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of same type as the argument.\n\n\n\n### Example\n```\n\n\nprogram test_epsilon\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, EPSILON(x)\n\n    print *, EPSILON(y)\n\nend program test_epsilon\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "EPSILON", + "docstr": "`EPSILON` — Epsilon function\n\n### Description\n`EPSILON(X)` returns the smallest number `E` of the same kind\nas `X` such that 1 + E > 1.\n\n\n\n### Syntax\n`RESULT = EPSILON(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of same type as the argument.\n\n\n\n### Example\n```\n\n\nprogram test_epsilon\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, EPSILON(x)\n\n    print *, EPSILON(y)\n\nend program test_epsilon\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/ERF.json b/src/docs/ERF.json index 84b48614..d26f802e 100644 --- a/src/docs/ERF.json +++ b/src/docs/ERF.json @@ -1,4 +1,4 @@ { - "keyword":"ERF", - "docstr":"`ERF` — Error function\n\n### Description\n`ERF(X)` computes the error function of `X`.\n\n\n\n### Syntax\n`RESULT = ERF(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`, of the same kind as\n`X` and lies in the range -1 \\leq erf (x) \\leq 1 .\n\n\n\n### Example\n```\n\n\nprogram test_erf\n\n  real(8) :: x = 0.17_8\n\n  x = erf(x)\n\nend program test_erf\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DERF(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "ERF", + "docstr": "`ERF` — Error function\n\n### Description\n`ERF(X)` computes the error function of `X`.\n\n\n\n### Syntax\n`RESULT = ERF(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL`, of the same kind as\n`X` and lies in the range -1 \\leq erf (x) \\leq 1 .\n\n\n\n### Example\n```\n\n\nprogram test_erf\n\n  real(8) :: x = 0.17_8\n\n  x = erf(x)\n\nend program test_erf\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DERF(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/ERFC.json b/src/docs/ERFC.json index 60fc7327..bf24835e 100644 --- a/src/docs/ERFC.json +++ b/src/docs/ERFC.json @@ -1,4 +1,4 @@ { - "keyword":"ERFC", - "docstr":"`ERFC` — Error function\n\n### Description\n`ERFC(X)` computes the complementary error function of `X`.\n\n\n\n### Syntax\n`RESULT = ERFC(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and of the same kind as `X`. \nIt lies in the range 0 \\leq erfc (x) \\leq 2 .\n\n\n\n### Example\n```\n\n\nprogram test_erfc\n\n  real(8) :: x = 0.17_8\n\n  x = erfc(x)\n\nend program test_erfc\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DERFC(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "ERFC", + "docstr": "`ERFC` — Error function\n\n### Description\n`ERFC(X)` computes the complementary error function of `X`.\n\n\n\n### Syntax\n`RESULT = ERFC(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and of the same kind as `X`. \nIt lies in the range 0 \\leq erfc (x) \\leq 2 .\n\n\n\n### Example\n```\n\n\nprogram test_erfc\n\n  real(8) :: x = 0.17_8\n\n  x = erfc(x)\n\nend program test_erfc\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `DERFC(X)` | `REAL(8) X` | `REAL(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/ERFC_SCALED.json b/src/docs/ERFC_SCALED.json index 6e60d878..58884946 100644 --- a/src/docs/ERFC_SCALED.json +++ b/src/docs/ERFC_SCALED.json @@ -1,4 +1,4 @@ { - "keyword":"ERFC_SCALED", - "docstr":"`ERFC_SCALED` — Error function\n\n### Description\n`ERFC_SCALED(X)` computes the exponentially-scaled complementary\nerror function of `X`.\n\n\n\n### Syntax\n`RESULT = ERFC_SCALED(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and of the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_erfc_scaled\n\n  real(8) :: x = 0.17_8\n\n  x = erfc_scaled(x)\n\nend program test_erfc_scaled\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "ERFC_SCALED", + "docstr": "`ERFC_SCALED` — Error function\n\n### Description\n`ERFC_SCALED(X)` computes the exponentially-scaled complementary\nerror function of `X`.\n\n\n\n### Syntax\n`RESULT = ERFC_SCALED(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` and of the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_erfc_scaled\n\n  real(8) :: x = 0.17_8\n\n  x = erfc_scaled(x)\n\nend program test_erfc_scaled\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/ETIME.json b/src/docs/ETIME.json index 8b598a07..a5f64b63 100644 --- a/src/docs/ETIME.json +++ b/src/docs/ETIME.json @@ -1,4 +1,4 @@ { - "keyword":"ETIME", - "docstr":"`ETIME` — Execution time subroutine (or function)\n\n### Description\n`ETIME(VALUES, TIME)` returns the number of seconds of runtime\nsince the start of the process's execution in `TIME`. `VALUES`\nreturns the user and system components of this time in `VALUES(1)` and\n`VALUES(2)` respectively. `TIME` is equal to `VALUES(1) + VALUES(2)`.\n\n \nOn some systems, the underlying timings are represented using types with\nsufficiently small limits that overflows (wrap around) are possible, such as\n32-bit types. Therefore, the values returned by this intrinsic might be, or\nbecome, negative, or numerically less than previous values, during a single\nrun of the compiled program.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\n`VALUES` and `TIME` are `INTENT(OUT)` and provide the following:\n\n \n\n: | User time in seconds. \n\n | `VALUES(2)`: | System time in seconds. \n\n | `TIME`: | Run time since start in seconds.\n\n\n\n\n\n\n### Syntax\n\n \n. \n\n | `TIME = ETIME(VALUES)`, (not recommended).\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `TIME` | The type shall be `REAL(4)`.\n\n\n\n\n\n\n### Return value\nElapsed time in seconds since the start of program execution.\n\n\n\n### Example\n```\n\n\nprogram test_etime\n\n    integer(8) :: i, j\n\n    real, dimension(2) :: tarray\n\n    real :: result\n\n    call ETIME(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\n    do i=1,100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call ETIME(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\nend program test_etime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " -} \ No newline at end of file + "keyword": "ETIME", + "docstr": "`ETIME` — Execution time subroutine (or function)\n\n### Description\n`ETIME(VALUES, TIME)` returns the number of seconds of runtime\nsince the start of the process's execution in `TIME`. `VALUES`\nreturns the user and system components of this time in `VALUES(1)` and\n`VALUES(2)` respectively. `TIME` is equal to `VALUES(1) + VALUES(2)`.\n\n \nOn some systems, the underlying timings are represented using types with\nsufficiently small limits that overflows (wrap around) are possible, such as\n32-bit types. Therefore, the values returned by this intrinsic might be, or\nbecome, negative, or numerically less than previous values, during a single\nrun of the compiled program.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\n`VALUES` and `TIME` are `INTENT(OUT)` and provide the following:\n\n \n\n: | User time in seconds. \n\n | `VALUES(2)`: | System time in seconds. \n\n | `TIME`: | Run time since start in seconds.\n\n\n\n\n\n\n### Syntax\n\n \n. \n\n | `TIME = ETIME(VALUES)`, (not recommended).\n\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `TIME` | The type shall be `REAL(4)`.\n\n\n\n\n\n\n### Return value\nElapsed time in seconds since the start of program execution.\n\n\n\n### Example\n```\n\n\nprogram test_etime\n\n    integer(8) :: i, j\n\n    real, dimension(2) :: tarray\n\n    real :: result\n\n    call ETIME(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\n    do i=1,100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call ETIME(tarray, result)\n\n    print *, result\n\n    print *, tarray(1)\n\n    print *, tarray(2)\n\nend program test_etime\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " +} diff --git a/src/docs/EVENT_QUERY.json b/src/docs/EVENT_QUERY.json index a3c1755c..d76e9996 100644 --- a/src/docs/EVENT_QUERY.json +++ b/src/docs/EVENT_QUERY.json @@ -1,4 +1,4 @@ { - "keyword":"EVENT_QUERY", - "docstr":"`EVENT_QUERY` — Query whether a coarray event has occurred\n\n### Description\n`EVENT_QUERY` assignes the number of events to `COUNT` which have been\nposted to the `EVENT` variable and not yet been removed by calling\n`EVENT WAIT`. When `STAT` is present and the invokation was successful,\nit is assigned the value 0. If it is present and the invokation has failed,\nit is assigned a positive value and `COUNT` is assigned the value -1.\n\n\n\n### Syntax\n`CALL EVENT_QUERY (EVENT, COUNT [, STAT])`\n\n\n### Arguments\n\n \n,\ndefined in `ISO_FORTRAN_ENV`; shall not be coindexed. \n\n | `COUNT` | (intent(out))Scalar integer with at least the\nprecision of default integer. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  implicit none\n\n  type(event_type) :: event_value_has_been_set[*]\n\n  integer :: cnt\n\n  if (this_image() == 1) then\n\n    call event_query (event_value_has_been_set, cnt)\n\n    if (cnt > 0) write(*,*) \"Value has been set\"\n\n  elseif (this_image() == 2) then\n\n    event post (event_value_has_been_set[1])\n\n  end if\n\nend program atomic\n\n```\n\n \n\n### Standard\nTS 18508 or later\n\n\n\n### Class\n subroutine\n\n\n" -} \ No newline at end of file + "keyword": "EVENT_QUERY", + "docstr": "`EVENT_QUERY` — Query whether a coarray event has occurred\n\n### Description\n`EVENT_QUERY` assignes the number of events to `COUNT` which have been\nposted to the `EVENT` variable and not yet been removed by calling\n`EVENT WAIT`. When `STAT` is present and the invokation was successful,\nit is assigned the value 0. If it is present and the invokation has failed,\nit is assigned a positive value and `COUNT` is assigned the value -1.\n\n\n\n### Syntax\n`CALL EVENT_QUERY (EVENT, COUNT [, STAT])`\n\n\n### Arguments\n\n \n,\ndefined in `ISO_FORTRAN_ENV`; shall not be coindexed. \n\n | `COUNT` | (intent(out))Scalar integer with at least the\nprecision of default integer. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  implicit none\n\n  type(event_type) :: event_value_has_been_set[*]\n\n  integer :: cnt\n\n  if (this_image() == 1) then\n\n    call event_query (event_value_has_been_set, cnt)\n\n    if (cnt > 0) write(*,*) \"Value has been set\"\n\n  elseif (this_image() == 2) then\n\n    event post (event_value_has_been_set[1])\n\n  end if\n\nend program atomic\n\n```\n\n \n\n### Standard\nTS 18508 or later\n\n\n\n### Class\n subroutine\n\n\n" +} diff --git a/src/docs/EXECUTE_COMMAND_LINE.json b/src/docs/EXECUTE_COMMAND_LINE.json index 8dca4669..164a8d98 100644 --- a/src/docs/EXECUTE_COMMAND_LINE.json +++ b/src/docs/EXECUTE_COMMAND_LINE.json @@ -1,4 +1,4 @@ { - "keyword":"EXECUTE_COMMAND_LINE", - "docstr":"`EXECUTE_COMMAND_LINE` — Execute a shell command\n\n### Description\n`EXECUTE_COMMAND_LINE` runs a shell command, synchronously or\nasynchronously.\n\n \nThe `COMMAND` argument is passed to the shell and executed, using\nthe C library's `system` call. (The shell is `sh` on Unix\nsystems, and `cmd.exe` on Windows.) If `WAIT` is present\nand has the value false, the execution of the command is asynchronous\nif the system supports it; otherwise, the command is executed\nsynchronously.\n\n \n\nThe three last arguments allow the user to get status information. After\nsynchronous execution, `EXITSTAT` contains the integer exit code of\nthe command, as returned by `system`. `CMDSTAT` is set to zero\nif the command line was executed (whatever its exit status was). \n`CMDMSG` is assigned an error message if an error has occurred.\n\n \n\nNote that the `system` function need not be thread-safe. It is\nthe responsibility of the user to ensure that `system` is not\ncalled concurrently.\n\n\n\n\n### Syntax\n`CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])`\n\n\n### Arguments\n\n \n scalar. \n\n | `WAIT` | (Optional) Shall be a default `LOGICAL` scalar. \n\n | `EXITSTAT` | (Optional) Shall be an `INTEGER` of the\ndefault kind. \n\n | `CMDSTAT` | (Optional) Shall be an `INTEGER` of the\ndefault kind. \n\n | `CMDMSG` | (Optional) Shall be an `CHARACTER` scalar of the\ndefault kind.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_exec\n\n  integer :: i\n\n\n  call execute_command_line (\"external_prog.exe\", exitstat=i)\n\n  print *, \"Exit status of external_prog.exe was \", i\n\n\n  call execute_command_line (\"reindex_files.exe\", wait=.false.)\n\n  print *, \"Now reindexing files in the background\"\n\n\nend program test_exec\n\n```\n\n\n\n### Notes\n\nBecause this intrinsic is implemented in terms of the `system`function call, its behavior with respect to signaling is processor\ndependent. In particular, on POSIX-compliant systems, the SIGINT and\nSIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As\nsuch, if the parent process is terminated, the child process might not be\nterminated alongside.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nSYSTEM\n" -} \ No newline at end of file + "keyword": "EXECUTE_COMMAND_LINE", + "docstr": "`EXECUTE_COMMAND_LINE` — Execute a shell command\n\n### Description\n`EXECUTE_COMMAND_LINE` runs a shell command, synchronously or\nasynchronously.\n\n \nThe `COMMAND` argument is passed to the shell and executed, using\nthe C library's `system` call. (The shell is `sh` on Unix\nsystems, and `cmd.exe` on Windows.) If `WAIT` is present\nand has the value false, the execution of the command is asynchronous\nif the system supports it; otherwise, the command is executed\nsynchronously.\n\n \n\nThe three last arguments allow the user to get status information. After\nsynchronous execution, `EXITSTAT` contains the integer exit code of\nthe command, as returned by `system`. `CMDSTAT` is set to zero\nif the command line was executed (whatever its exit status was). \n`CMDMSG` is assigned an error message if an error has occurred.\n\n \n\nNote that the `system` function need not be thread-safe. It is\nthe responsibility of the user to ensure that `system` is not\ncalled concurrently.\n\n\n\n\n### Syntax\n`CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])`\n\n\n### Arguments\n\n \n scalar. \n\n | `WAIT` | (Optional) Shall be a default `LOGICAL` scalar. \n\n | `EXITSTAT` | (Optional) Shall be an `INTEGER` of the\ndefault kind. \n\n | `CMDSTAT` | (Optional) Shall be an `INTEGER` of the\ndefault kind. \n\n | `CMDMSG` | (Optional) Shall be an `CHARACTER` scalar of the\ndefault kind.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_exec\n\n  integer :: i\n\n\n  call execute_command_line (\"external_prog.exe\", exitstat=i)\n\n  print *, \"Exit status of external_prog.exe was \", i\n\n\n  call execute_command_line (\"reindex_files.exe\", wait=.false.)\n\n  print *, \"Now reindexing files in the background\"\n\n\nend program test_exec\n\n```\n\n\n\n### Notes\n\nBecause this intrinsic is implemented in terms of the `system`function call, its behavior with respect to signaling is processor\ndependent. In particular, on POSIX-compliant systems, the SIGINT and\nSIGQUIT signals will be ignored, and the SIGCHLD will be blocked. As\nsuch, if the parent process is terminated, the child process might not be\nterminated alongside.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nSYSTEM\n" +} diff --git a/src/docs/EXIT.json b/src/docs/EXIT.json index c37296a9..ca3711dc 100644 --- a/src/docs/EXIT.json +++ b/src/docs/EXIT.json @@ -1,4 +1,4 @@ { - "keyword":"EXIT", - "docstr":"`EXIT` — Exit the program with status.\n\n### Description\n`EXIT` causes immediate termination of the program with status. If status\nis omitted it returns the canonical success for the system. All Fortran\nI/O units are closed.\n\n\n\n### Syntax\n`CALL EXIT([STATUS])`\n\n\n### Arguments\n\n \n of the default kind.\n\n\n\n\n\n\n### Return value\n`STATUS` is passed to the parent process on exit.\n\n\n\n### Example\n```\n\n\nprogram test_exit\n\n  integer :: STATUS = 0\n\n  print *, 'This program is going to exit.'\n\n  call EXIT(STATUS)\n\nend program test_exit\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nABORT, KILL\n" -} \ No newline at end of file + "keyword": "EXIT", + "docstr": "`EXIT` — Exit the program with status.\n\n### Description\n`EXIT` causes immediate termination of the program with status. If status\nis omitted it returns the canonical success for the system. All Fortran\nI/O units are closed.\n\n\n\n### Syntax\n`CALL EXIT([STATUS])`\n\n\n### Arguments\n\n \n of the default kind.\n\n\n\n\n\n\n### Return value\n`STATUS` is passed to the parent process on exit.\n\n\n\n### Example\n```\n\n\nprogram test_exit\n\n  integer :: STATUS = 0\n\n  print *, 'This program is going to exit.'\n\n  call EXIT(STATUS)\n\nend program test_exit\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nABORT, KILL\n" +} diff --git a/src/docs/EXP.json b/src/docs/EXP.json index 873a29ff..3cd7506a 100644 --- a/src/docs/EXP.json +++ b/src/docs/EXP.json @@ -1,4 +1,4 @@ { - "keyword":"EXP", - "docstr":"`EXP` — Exponential function\n\n### Description\n`EXP(X)` computes the base e exponential of `X`.\n\n\n\n### Syntax\n`RESULT = EXP(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_exp\n\n  real :: x = 1.0\n\n  x = exp(x)\n\nend program test_exp\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `EXP(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DEXP(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n | `CEXP(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 77 and later\n\n | `ZEXP(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDEXP(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "EXP", + "docstr": "`EXP` — Exponential function\n\n### Description\n`EXP(X)` computes the base e exponential of `X`.\n\n\n\n### Syntax\n`RESULT = EXP(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_exp\n\n  real :: x = 1.0\n\n  x = exp(x)\n\nend program test_exp\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `EXP(X)` | `REAL(4) X` | `REAL(4)` | Fortran 77 and later\n\n | `DEXP(X)` | `REAL(8) X` | `REAL(8)` | Fortran 77 and later\n\n | `CEXP(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 77 and later\n\n | `ZEXP(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDEXP(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later, has overloads that are GNU extensions\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/EXPONENT.json b/src/docs/EXPONENT.json index 2e89a328..adb65340 100644 --- a/src/docs/EXPONENT.json +++ b/src/docs/EXPONENT.json @@ -1,4 +1,4 @@ { - "keyword":"EXPONENT", - "docstr":"`EXPONENT` — Exponent function\n\n### Description\n`EXPONENT(X)` returns the value of the exponent part of `X`. If `X`\nis zero the value returned is zero.\n\n\n\n### Syntax\n`RESULT = EXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type default `INTEGER`.\n\n\n\n### Example\n```\n\n\nprogram test_exponent\n\n  real :: x = 1.0\n\n  integer :: i\n\n  i = exponent(x)\n\n  print *, i\n\n  print *, exponent(0.0)\n\nend program test_exponent\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "EXPONENT", + "docstr": "`EXPONENT` — Exponent function\n\n### Description\n`EXPONENT(X)` returns the value of the exponent part of `X`. If `X`\nis zero the value returned is zero.\n\n\n\n### Syntax\n`RESULT = EXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type default `INTEGER`.\n\n\n\n### Example\n```\n\n\nprogram test_exponent\n\n  real :: x = 1.0\n\n  integer :: i\n\n  i = exponent(x)\n\n  print *, i\n\n  print *, exponent(0.0)\n\nend program test_exponent\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/EXTENDS_TYPE_OF.json b/src/docs/EXTENDS_TYPE_OF.json index b4d0fe5a..24f216ca 100644 --- a/src/docs/EXTENDS_TYPE_OF.json +++ b/src/docs/EXTENDS_TYPE_OF.json @@ -1,4 +1,4 @@ { - "keyword":"EXTENDS_TYPE_OF", - "docstr":"`EXTENDS_TYPE_OF` — Query dynamic type for extension\n\n### Description\nQuery dynamic type for extension.\n\n\n\n### Syntax\n`RESULT = EXTENDS_TYPE_OF(A, MOLD)`\n\n\n### Arguments\n\n \n | `A` | Shall be an object of extensible declared type or\nunlimited polymorphic. \n\n | `MOLD` | Shall be an object of extensible declared type or\nunlimited polymorphic.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type default logical. It is true if and only if\nthe dynamic type of A is an extension type of the dynamic type of MOLD.\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSAME_TYPE_AS\n" -} \ No newline at end of file + "keyword": "EXTENDS_TYPE_OF", + "docstr": "`EXTENDS_TYPE_OF` — Query dynamic type for extension\n\n### Description\nQuery dynamic type for extension.\n\n\n\n### Syntax\n`RESULT = EXTENDS_TYPE_OF(A, MOLD)`\n\n\n### Arguments\n\n \n | `A` | Shall be an object of extensible declared type or\nunlimited polymorphic. \n\n | `MOLD` | Shall be an object of extensible declared type or\nunlimited polymorphic.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type default logical. It is true if and only if\nthe dynamic type of A is an extension type of the dynamic type of MOLD.\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSAME_TYPE_AS\n" +} diff --git a/src/docs/FDATE.json b/src/docs/FDATE.json index 09267a7f..097f679a 100644 --- a/src/docs/FDATE.json +++ b/src/docs/FDATE.json @@ -1,4 +1,4 @@ { - "keyword":"FDATE", - "docstr":"`FDATE` — Get the current time as a string\n\n### Description\n`FDATE(DATE)` returns the current date (using the same format as\n`CTIME`) in `DATE`. It is equivalent to CALL CTIME(DATE,\nTIME()).\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n. \n\n | `DATE = FDATE()`.\n\n\n\n\n\n\n### Arguments\n\n \n of the\ndefault kind. It is an `INTENT(OUT)` argument. If the length of\nthis variable is too short for the date and time string to fit\ncompletely, it will be blank on procedure return.\n\n\n\n\n\n\n### Return value\nThe current date and time as a string.\n\n\n\n### Example\n```\n\n\nprogram test_fdate\n\n    integer(8) :: i, j\n\n    character(len=30) :: date\n\n    call fdate(date)\n\n    print *, 'Program started on ', date\n\n    do i = 1, 100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call fdate(date)\n\n    print *, 'Program ended on ', date\n\nend program test_fdate\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nDATE_AND_TIME, CTIME\n" -} \ No newline at end of file + "keyword": "FDATE", + "docstr": "`FDATE` — Get the current time as a string\n\n### Description\n`FDATE(DATE)` returns the current date (using the same format as\n`CTIME`) in `DATE`. It is equivalent to CALL CTIME(DATE,\nTIME()).\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n. \n\n | `DATE = FDATE()`.\n\n\n\n\n\n\n### Arguments\n\n \n of the\ndefault kind. It is an `INTENT(OUT)` argument. If the length of\nthis variable is too short for the date and time string to fit\ncompletely, it will be blank on procedure return.\n\n\n\n\n\n\n### Return value\nThe current date and time as a string.\n\n\n\n### Example\n```\n\n\nprogram test_fdate\n\n    integer(8) :: i, j\n\n    character(len=30) :: date\n\n    call fdate(date)\n\n    print *, 'Program started on ', date\n\n    do i = 1, 100000000 ! Just a delay\n\n        j = i * i - i\n\n    end do\n\n    call fdate(date)\n\n    print *, 'Program ended on ', date\n\nend program test_fdate\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nDATE_AND_TIME, CTIME\n" +} diff --git a/src/docs/FGET.json b/src/docs/FGET.json index 031d789d..68747407 100644 --- a/src/docs/FGET.json +++ b/src/docs/FGET.json @@ -1,4 +1,4 @@ { - "keyword":"FGET", - "docstr":"`FGET` — Read a single character in stream mode from stdin\n\n### Description\nRead a single character in stream mode from stdin by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGET(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file, and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fget\n\n  INTEGER, PARAMETER :: strlen = 100\n\n  INTEGER :: status, i = 1\n\n  CHARACTER(len=strlen) :: str = \"\"\n\n\n  WRITE (*,*) 'Enter text:'\n\n  DO\n\n    CALL fget(str(i:i), status)\n\n    if (status /= 0 .OR. i > strlen) exit\n\n    i = i + 1\n\n  END DO\n\n  WRITE (*,*) TRIM(str)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGETC, FPUT, FPUTC\n" -} \ No newline at end of file + "keyword": "FGET", + "docstr": "`FGET` — Read a single character in stream mode from stdin\n\n### Description\nRead a single character in stream mode from stdin by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGET(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file, and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fget\n\n  INTEGER, PARAMETER :: strlen = 100\n\n  INTEGER :: status, i = 1\n\n  CHARACTER(len=strlen) :: str = \"\"\n\n\n  WRITE (*,*) 'Enter text:'\n\n  DO\n\n    CALL fget(str(i:i), status)\n\n    if (status /= 0 .OR. i > strlen) exit\n\n    i = i + 1\n\n  END DO\n\n  WRITE (*,*) TRIM(str)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGETC, FPUT, FPUTC\n" +} diff --git a/src/docs/FGETC.json b/src/docs/FGETC.json index a7a356e8..3fd30125 100644 --- a/src/docs/FGETC.json +++ b/src/docs/FGETC.json @@ -1,4 +1,4 @@ { - "keyword":"FGETC", - "docstr":"`FGETC` — Read a single character in stream mode\n\n### Description\nRead a single character in stream mode by bypassing normal formatted output. \nStream I/O should not be mixed with normal record-oriented (formatted or\nunformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility\nwith *g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGETC(UNIT, C)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `C` | The type shall be `CHARACTER` and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fgetc\n\n  INTEGER :: fd = 42, status\n\n  CHARACTER :: c\n\n\n  OPEN(UNIT=fd, FILE=\"/etc/passwd\", ACTION=\"READ\", STATUS = \"OLD\")\n\n  DO\n\n    CALL fgetc(fd, c, status)\n\n    IF (status /= 0) EXIT\n\n    call fput(c)\n\n  END DO\n\n  CLOSE(UNIT=fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGET, FPUT, FPUTC\n" -} \ No newline at end of file + "keyword": "FGETC", + "docstr": "`FGETC` — Read a single character in stream mode\n\n### Description\nRead a single character in stream mode by bypassing normal formatted output. \nStream I/O should not be mixed with normal record-oriented (formatted or\nunformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility\nwith *g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGETC(UNIT, C)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `C` | The type shall be `CHARACTER` and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fgetc\n\n  INTEGER :: fd = 42, status\n\n  CHARACTER :: c\n\n\n  OPEN(UNIT=fd, FILE=\"/etc/passwd\", ACTION=\"READ\", STATUS = \"OLD\")\n\n  DO\n\n    CALL fgetc(fd, c, status)\n\n    IF (status /= 0) EXIT\n\n    call fput(c)\n\n  END DO\n\n  CLOSE(UNIT=fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGET, FPUT, FPUTC\n" +} diff --git a/src/docs/FINDLOC.json b/src/docs/FINDLOC.json index 0914b6f2..589659e4 100644 --- a/src/docs/FINDLOC.json +++ b/src/docs/FINDLOC.json @@ -1,4 +1,4 @@ { - "keyword":"FINDLOC", - "docstr":"`FINDLOC` — Search an array for a value\n\n### Description\nDetermines the location of the element in the array with the value given in the VALUE argument, or, if the DIM argument is supplied, determines the locations of the maximum element along each row of the array in the DIM direction. If MASK is present, only the elements for which MASK is .TRUE. are considered. If more than one element in the array has the value VALUE, the location returned is that of the first such element in array element order if the BACK is not present or if it is .FALSE.. If BACK is true, the location returned is that of the last such element. If the array has zero size, or all of the elements of MASK are .FALSE., then the result is an array of zeroes. Similarly, if DIM is supplied and all of the elements of MASK along a given row are zero, the result value for that row is zero.\n### Standard\nFortran 2008 and later.\n### Class\nTransformational function\n### Syntax\nRESULT = FINDLOC(ARRAY, VALUE, DIM [, MASK] [,KIND] [,BACK])\nRESULT = FINDLOC(ARRAY, VALUE, [, MASK] [,KIND] [,BACK])\n### Arguments\n- ARRAY: Shall be an array of intrinsic type.\n- VALUE: A scalar of intrinsic type which is in type conformance with ARRAY.\n- DIM: (Optional) Shall be a scalar of type INTEGER, with a value between one and the rank of ARRAY, inclusive. It may not be an optional dummy argument.\n- KIND: (Optional) An INTEGER initialization expression indicating the kind parameter of the result.\n- BACK: (Optional) A scalar of type LOGICAL.\n### Return value\nIf DIM is absent, the result is a rank-one array with a length equal to the rank of ARRAY. If DIM is present, the result is an array with a rank one less than the rank of ARRAY, and a size corresponding to the size of ARRAY with the DIM dimension removed. If DIM is present and ARRAY has a rank of one, the result is a scalar. If the optional argument KIND is present, the result is an integer of kind KIND, otherwise it is of default kind.\n" -} \ No newline at end of file + "keyword": "FINDLOC", + "docstr": "`FINDLOC` — Search an array for a value\n\n### Description\nDetermines the location of the element in the array with the value given in the VALUE argument, or, if the DIM argument is supplied, determines the locations of the maximum element along each row of the array in the DIM direction. If MASK is present, only the elements for which MASK is .TRUE. are considered. If more than one element in the array has the value VALUE, the location returned is that of the first such element in array element order if the BACK is not present or if it is .FALSE.. If BACK is true, the location returned is that of the last such element. If the array has zero size, or all of the elements of MASK are .FALSE., then the result is an array of zeroes. Similarly, if DIM is supplied and all of the elements of MASK along a given row are zero, the result value for that row is zero.\n### Standard\nFortran 2008 and later.\n### Class\nTransformational function\n### Syntax\nRESULT = FINDLOC(ARRAY, VALUE, DIM [, MASK] [,KIND] [,BACK])\nRESULT = FINDLOC(ARRAY, VALUE, [, MASK] [,KIND] [,BACK])\n### Arguments\n- ARRAY: Shall be an array of intrinsic type.\n- VALUE: A scalar of intrinsic type which is in type conformance with ARRAY.\n- DIM: (Optional) Shall be a scalar of type INTEGER, with a value between one and the rank of ARRAY, inclusive. It may not be an optional dummy argument.\n- KIND: (Optional) An INTEGER initialization expression indicating the kind parameter of the result.\n- BACK: (Optional) A scalar of type LOGICAL.\n### Return value\nIf DIM is absent, the result is a rank-one array with a length equal to the rank of ARRAY. If DIM is present, the result is an array with a rank one less than the rank of ARRAY, and a size corresponding to the size of ARRAY with the DIM dimension removed. If DIM is present and ARRAY has a rank of one, the result is a scalar. If the optional argument KIND is present, the result is an integer of kind KIND, otherwise it is of default kind.\n" +} diff --git a/src/docs/FLOOR.json b/src/docs/FLOOR.json index 46445fd1..61fcf940 100644 --- a/src/docs/FLOOR.json +++ b/src/docs/FLOOR.json @@ -1,4 +1,4 @@ { - "keyword":"FLOOR", - "docstr":"`FLOOR` — Integer floor function\n\n### Description\n`FLOOR(A)` returns the greatest integer less than or equal to `X`.\n\n\n\n### Syntax\n`RESULT = FLOOR(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(KIND)` if `KIND` is present\nand of default-kind `INTEGER` otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_floor\n\n    real :: x = 63.29\n\n    real :: y = -63.59\n\n    print *, floor(x) ! returns 63\n\n    print *, floor(y) ! returns -64\n\nend program test_floor\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCEILING, NINT\n\n " -} \ No newline at end of file + "keyword": "FLOOR", + "docstr": "`FLOOR` — Integer floor function\n\n### Description\n`FLOOR(A)` returns the greatest integer less than or equal to `X`.\n\n\n\n### Syntax\n`RESULT = FLOOR(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(KIND)` if `KIND` is present\nand of default-kind `INTEGER` otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_floor\n\n    real :: x = 63.29\n\n    real :: y = -63.59\n\n    print *, floor(x) ! returns 63\n\n    print *, floor(y) ! returns -64\n\nend program test_floor\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCEILING, NINT\n\n " +} diff --git a/src/docs/FLUSH.json b/src/docs/FLUSH.json index 6c57fbc1..32ba8e5d 100644 --- a/src/docs/FLUSH.json +++ b/src/docs/FLUSH.json @@ -1,4 +1,4 @@ { - "keyword":"FLUSH", - "docstr":"`FLUSH` — Flush I/O unit(s)\n\n### Description\nFlushes Fortran unit(s) currently open for output. Without the optional\nargument, all units are flushed, otherwise just the unit specified.\n\n\n\n### Syntax\n`CALL FLUSH(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Notes\nBeginning with the Fortran 2003 standard, there is a `FLUSH`statement that should be preferred over the `FLUSH` intrinsic.\n\n \nThe `FLUSH` intrinsic and the Fortran 2003 `FLUSH` statement\nhave identical effect: they flush the runtime library's I/O buffer so\nthat the data becomes visible to other processes. This does not guarantee\nthat the data is committed to disk.\n\n \n\nOn POSIX systems, you can request that all data is transferred to the\nstorage device by calling the `fsync` function, with the POSIX file\ndescriptor of the I/O unit as argument (retrieved with GNU intrinsic\n`FNUM`). The following example shows how:\n\n \n
            ! Declare the interface for POSIX fsync function\n            interface\n              function fsync (fd) bind(c,name=\"fsync\")\n              use iso_c_binding, only: c_int\n                integer(c_int), value :: fd\n                integer(c_int) :: fsync\n              end function fsync\n            end interface\n          \n            ! Variable declaration\n            integer :: ret\n          \n            ! Opening unit 10\n            open (10,file=\"foo\")\n          \n            ! ...\n            ! Perform I/O on unit 10\n            ! ...\n          \n            ! Flush and sync\n            flush(10)\n            ret = fsync(fnum(10))\n          \n            ! Handle possible error\n            if (ret /= 0) stop \"Error calling FSYNC\"\n
\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" -} \ No newline at end of file + "keyword": "FLUSH", + "docstr": "`FLUSH` — Flush I/O unit(s)\n\n### Description\nFlushes Fortran unit(s) currently open for output. Without the optional\nargument, all units are flushed, otherwise just the unit specified.\n\n\n\n### Syntax\n`CALL FLUSH(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Notes\nBeginning with the Fortran 2003 standard, there is a `FLUSH`statement that should be preferred over the `FLUSH` intrinsic.\n\n \nThe `FLUSH` intrinsic and the Fortran 2003 `FLUSH` statement\nhave identical effect: they flush the runtime library's I/O buffer so\nthat the data becomes visible to other processes. This does not guarantee\nthat the data is committed to disk.\n\n \n\nOn POSIX systems, you can request that all data is transferred to the\nstorage device by calling the `fsync` function, with the POSIX file\ndescriptor of the I/O unit as argument (retrieved with GNU intrinsic\n`FNUM`). The following example shows how:\n\n \n
            ! Declare the interface for POSIX fsync function\n            interface\n              function fsync (fd) bind(c,name=\"fsync\")\n              use iso_c_binding, only: c_int\n                integer(c_int), value :: fd\n                integer(c_int) :: fsync\n              end function fsync\n            end interface\n          \n            ! Variable declaration\n            integer :: ret\n          \n            ! Opening unit 10\n            open (10,file=\"foo\")\n          \n            ! ...\n            ! Perform I/O on unit 10\n            ! ...\n          \n            ! Flush and sync\n            flush(10)\n            ret = fsync(fnum(10))\n          \n            ! Handle possible error\n            if (ret /= 0) stop \"Error calling FSYNC\"\n
\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" +} diff --git a/src/docs/FNUM.json b/src/docs/FNUM.json index d5358743..ebaec3cf 100644 --- a/src/docs/FNUM.json +++ b/src/docs/FNUM.json @@ -1,4 +1,4 @@ { - "keyword":"FNUM", - "docstr":"`FNUM` — File number function\n\n### Description\n`FNUM(UNIT)` returns the POSIX file descriptor number corresponding to the\nopen Fortran I/O unit `UNIT`.\n\n\n\n### Syntax\n`RESULT = FNUM(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`\n\n\n### Example\n```\n\n\nprogram test_fnum\n\n  integer :: i\n\n  open (unit=10, status = \"scratch\")\n\n  i = fnum(10)\n\n  print *, i\n\n  close (10)\n\nend program test_fnum\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" -} \ No newline at end of file + "keyword": "FNUM", + "docstr": "`FNUM` — File number function\n\n### Description\n`FNUM(UNIT)` returns the POSIX file descriptor number corresponding to the\nopen Fortran I/O unit `UNIT`.\n\n\n\n### Syntax\n`RESULT = FNUM(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`\n\n\n### Example\n```\n\n\nprogram test_fnum\n\n  integer :: i\n\n  open (unit=10, status = \"scratch\")\n\n  i = fnum(10)\n\n  print *, i\n\n  close (10)\n\nend program test_fnum\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" +} diff --git a/src/docs/FPUT.json b/src/docs/FPUT.json index 7e14603d..831c66a2 100644 --- a/src/docs/FPUT.json +++ b/src/docs/FPUT.json @@ -1,4 +1,4 @@ { - "keyword":"FPUT", - "docstr":"`FPUT` — Write a single character in stream mode to stdout\n\n### Description\nWrite a single character in stream mode to stdout by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FPUT(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fput\n\n  CHARACTER(len=10) :: str = \"gfortran\"\n\n  INTEGER :: i\n\n  DO i = 1, len_trim(str)\n\n    CALL fput(str(i:i))\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFPUTC, FGET, FGETC\n" -} \ No newline at end of file + "keyword": "FPUT", + "docstr": "`FPUT` — Write a single character in stream mode to stdout\n\n### Description\nWrite a single character in stream mode to stdout by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FPUT(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fput\n\n  CHARACTER(len=10) :: str = \"gfortran\"\n\n  INTEGER :: i\n\n  DO i = 1, len_trim(str)\n\n    CALL fput(str(i:i))\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFPUTC, FGET, FGETC\n" +} diff --git a/src/docs/FPUTC.json b/src/docs/FPUTC.json index fefbfdb5..4c0a6cf4 100644 --- a/src/docs/FPUTC.json +++ b/src/docs/FPUTC.json @@ -1,4 +1,4 @@ { - "keyword":"FPUTC", - "docstr":"`FPUTC` — Write a single character in stream mode\n\n### Description\nWrite a single character in stream mode by bypassing normal formatted\noutput. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FPUTC(UNIT, C)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `C` | The type shall be `CHARACTER` and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fputc\n\n  CHARACTER(len=10) :: str = \"gfortran\"\n\n  INTEGER :: fd = 42, i\n\n\n  OPEN(UNIT = fd, FILE = \"out\", ACTION = \"WRITE\", STATUS=\"NEW\")\n\n  DO i = 1, len_trim(str)\n\n    CALL fputc(fd, str(i:i))\n\n  END DO\n\n  CLOSE(fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFPUT, FGET, FGETC\n" -} \ No newline at end of file + "keyword": "FPUTC", + "docstr": "`FPUTC` — Write a single character in stream mode\n\n### Description\nWrite a single character in stream mode by bypassing normal formatted\noutput. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FPUTC(UNIT, C)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `C` | The type shall be `CHARACTER` and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fputc\n\n  CHARACTER(len=10) :: str = \"gfortran\"\n\n  INTEGER :: fd = 42, i\n\n\n  OPEN(UNIT = fd, FILE = \"out\", ACTION = \"WRITE\", STATUS=\"NEW\")\n\n  DO i = 1, len_trim(str)\n\n    CALL fputc(fd, str(i:i))\n\n  END DO\n\n  CLOSE(fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFPUT, FGET, FGETC\n" +} diff --git a/src/docs/FRACTION.json b/src/docs/FRACTION.json index 5e865809..a1e4ee65 100644 --- a/src/docs/FRACTION.json +++ b/src/docs/FRACTION.json @@ -1,4 +1,4 @@ { - "keyword":"FRACTION", - "docstr":"`FRACTION` — Fractional part of the model representation\n\n### Description\n`FRACTION(X)` returns the fractional part of the model\nrepresentation of `X`.\n\n\n\n### Syntax\n`Y = FRACTION(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as the argument. \nThe fractional part of the model representation of `X` is returned;\nit is `X * RADIX(X)**(-EXPONENT(X))`.\n\n\n\n### Example\n```\n\n\nprogram test_fraction\n\n  real :: x\n\n  x = 178.1387e-4\n\n  print *, fraction(x), x * radix(x)**(-exponent(x))\n\nend program test_fraction\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "FRACTION", + "docstr": "`FRACTION` — Fractional part of the model representation\n\n### Description\n`FRACTION(X)` returns the fractional part of the model\nrepresentation of `X`.\n\n\n\n### Syntax\n`Y = FRACTION(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as the argument. \nThe fractional part of the model representation of `X` is returned;\nit is `X * RADIX(X)**(-EXPONENT(X))`.\n\n\n\n### Example\n```\n\n\nprogram test_fraction\n\n  real :: x\n\n  x = 178.1387e-4\n\n  print *, fraction(x), x * radix(x)**(-exponent(x))\n\nend program test_fraction\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/FREE.json b/src/docs/FREE.json index 76701d68..c7b3a7b8 100644 --- a/src/docs/FREE.json +++ b/src/docs/FREE.json @@ -1,4 +1,4 @@ { - "keyword":"FREE", - "docstr":"`FREE` — Frees memory\n\n### Description\nFrees memory previously allocated by `MALLOC`. The `FREE`intrinsic is an extension intended to be used with Cray pointers, and is\nprovided in GNU Fortran to allow user to compile legacy code. For\nnew code using Fortran 95 pointers, the memory de-allocation intrinsic is\n`DEALLOCATE`.\n\n\n\n### Syntax\n`CALL FREE(PTR)`\n\n\n### Arguments\n\n \n. It represents the\nlocation of the memory that should be de-allocated.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\nSee `MALLOC` for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nMALLOC\n" -} \ No newline at end of file + "keyword": "FREE", + "docstr": "`FREE` — Frees memory\n\n### Description\nFrees memory previously allocated by `MALLOC`. The `FREE`intrinsic is an extension intended to be used with Cray pointers, and is\nprovided in GNU Fortran to allow user to compile legacy code. For\nnew code using Fortran 95 pointers, the memory de-allocation intrinsic is\n`DEALLOCATE`.\n\n\n\n### Syntax\n`CALL FREE(PTR)`\n\n\n### Arguments\n\n \n. It represents the\nlocation of the memory that should be de-allocated.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\nSee `MALLOC` for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nMALLOC\n" +} diff --git a/src/docs/FSEEK.json b/src/docs/FSEEK.json index f9714dbb..b062c165 100644 --- a/src/docs/FSEEK.json +++ b/src/docs/FSEEK.json @@ -1,4 +1,4 @@ { - "keyword":"FSEEK", - "docstr":"`FSEEK` — Low level file positioning subroutine\n\n### Description\nMoves `UNIT` to the specified `OFFSET`. If `WHENCE`\nis set to 0, the `OFFSET` is taken as an absolute value `SEEK_SET`,\nif set to 1, `OFFSET` is taken to be relative to the current position\n`SEEK_CUR`, and if set to 2 relative to the end of the file `SEEK_END`. \nOn error, `STATUS` is set to a nonzero value. If `STATUS` the seek\nfails silently.\n\n \nThis intrinsic routine is not fully backwards compatible with *g77*. \nIn *g77*, the `FSEEK` takes a statement label instead of a\n`STATUS` variable. If FSEEK is used in old code, change\n \n
            CALL FSEEK(UNIT, OFFSET, WHENCE, *label)\n
\n \nto\n \n
            INTEGER :: status\n            CALL FSEEK(UNIT, OFFSET, WHENCE, status)\n            IF (status /= 0) GOTO label\n
\n \nPlease note that GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n`CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])`\n\n\n### Arguments\n\n \n. \n\n | `OFFSET` | Shall be a scalar of type `INTEGER`. \n\n | `WHENCE` | Shall be a scalar of type `INTEGER`. \nIts value shall be either 0, 1 or 2. \n\n | `STATUS` | (Optional) shall be a scalar of type\n`INTEGER(4)`.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fseek\n\n  INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2\n\n  INTEGER :: fd, offset, ierr\n\n\n  ierr = 0\n\n  offset = 5\n\n  fd = 10\n\n\n  OPEN(UNIT=fd, FILE=\"fseek.test\")\n\n  CALL FSEEK(fd, offset, SEEK_SET, ierr) ! move to OFFSET\n\n  print *, FTELL(fd), ierr\n\n\n  CALL FSEEK(fd, 0, SEEK_END, ierr) ! move to end\n\n  print *, FTELL(fd), ierr\n\n\n  CALL FSEEK(fd, 0, SEEK_SET, ierr) ! move to beginning\n\n  print *, FTELL(fd), ierr\n\n\n  CLOSE(UNIT=fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nFTELL\n" -} \ No newline at end of file + "keyword": "FSEEK", + "docstr": "`FSEEK` — Low level file positioning subroutine\n\n### Description\nMoves `UNIT` to the specified `OFFSET`. If `WHENCE`\nis set to 0, the `OFFSET` is taken as an absolute value `SEEK_SET`,\nif set to 1, `OFFSET` is taken to be relative to the current position\n`SEEK_CUR`, and if set to 2 relative to the end of the file `SEEK_END`. \nOn error, `STATUS` is set to a nonzero value. If `STATUS` the seek\nfails silently.\n\n \nThis intrinsic routine is not fully backwards compatible with *g77*. \nIn *g77*, the `FSEEK` takes a statement label instead of a\n`STATUS` variable. If FSEEK is used in old code, change\n \n
            CALL FSEEK(UNIT, OFFSET, WHENCE, *label)\n
\n \nto\n \n
            INTEGER :: status\n            CALL FSEEK(UNIT, OFFSET, WHENCE, status)\n            IF (status /= 0) GOTO label\n
\n \nPlease note that GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n`CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])`\n\n\n### Arguments\n\n \n. \n\n | `OFFSET` | Shall be a scalar of type `INTEGER`. \n\n | `WHENCE` | Shall be a scalar of type `INTEGER`. \nIts value shall be either 0, 1 or 2. \n\n | `STATUS` | (Optional) shall be a scalar of type\n`INTEGER(4)`.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fseek\n\n  INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2\n\n  INTEGER :: fd, offset, ierr\n\n\n  ierr = 0\n\n  offset = 5\n\n  fd = 10\n\n\n  OPEN(UNIT=fd, FILE=\"fseek.test\")\n\n  CALL FSEEK(fd, offset, SEEK_SET, ierr) ! move to OFFSET\n\n  print *, FTELL(fd), ierr\n\n\n  CALL FSEEK(fd, 0, SEEK_END, ierr) ! move to end\n\n  print *, FTELL(fd), ierr\n\n\n  CALL FSEEK(fd, 0, SEEK_SET, ierr) ! move to beginning\n\n  print *, FTELL(fd), ierr\n\n\n  CLOSE(UNIT=fd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nFTELL\n" +} diff --git a/src/docs/FSTAT.json b/src/docs/FSTAT.json index a06c0016..bb1aca9e 100644 --- a/src/docs/FSTAT.json +++ b/src/docs/FSTAT.json @@ -1,4 +1,4 @@ { - "keyword":"FSTAT", - "docstr":"`FSTAT` — Get file status\n\n### Description\n`FSTAT` is identical to STAT, except that information about an\nalready opened file is obtained.\n\n \nThe elements in `VALUES` are the same as described by STAT.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FSTAT(UNIT, VALUES)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `VALUES` | The type shall be `INTEGER(4), DIMENSION(13)`. \n\n | `STATUS` | (Optional) status flag of type `INTEGER(4)`. Returns 0\non success and a system specific error code otherwise.\n\n\n\n\n\n\n### Example\nSee STAT for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nTo stat a link: LSTAT, to stat a file: STAT\n" -} \ No newline at end of file + "keyword": "FSTAT", + "docstr": "`FSTAT` — Get file status\n\n### Description\n`FSTAT` is identical to STAT, except that information about an\nalready opened file is obtained.\n\n \nThe elements in `VALUES` are the same as described by STAT.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FSTAT(UNIT, VALUES)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `VALUES` | The type shall be `INTEGER(4), DIMENSION(13)`. \n\n | `STATUS` | (Optional) status flag of type `INTEGER(4)`. Returns 0\non success and a system specific error code otherwise.\n\n\n\n\n\n\n### Example\nSee STAT for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nTo stat a link: LSTAT, to stat a file: STAT\n" +} diff --git a/src/docs/FTELL.json b/src/docs/FTELL.json index e412b12d..c90c5811 100644 --- a/src/docs/FTELL.json +++ b/src/docs/FTELL.json @@ -1,4 +1,4 @@ { - "keyword":"FTELL", - "docstr":"`FTELL` — Current stream position\n\n### Description\nRetrieves the current position within an open file.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `OFFSET = FTELL(UNIT)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `UNIT` | Shall of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nIn either syntax, `OFFSET` is set to the current offset of unit\nnumber `UNIT`, or to -1 if the unit is not currently open.\n\n\n\n### Example\n```\n\n\nPROGRAM test_ftell\n\n  INTEGER :: i\n\n  OPEN(10, FILE=\"temp.dat\")\n\n  CALL ftell(10,i)\n\n  WRITE(*,*) i\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFSEEK\n" -} \ No newline at end of file + "keyword": "FTELL", + "docstr": "`FTELL` — Current stream position\n\n### Description\nRetrieves the current position within an open file.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `OFFSET = FTELL(UNIT)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `UNIT` | Shall of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nIn either syntax, `OFFSET` is set to the current offset of unit\nnumber `UNIT`, or to -1 if the unit is not currently open.\n\n\n\n### Example\n```\n\n\nPROGRAM test_ftell\n\n  INTEGER :: i\n\n  OPEN(10, FILE=\"temp.dat\")\n\n  CALL ftell(10,i)\n\n  WRITE(*,*) i\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFSEEK\n" +} diff --git a/src/docs/GAMMA.json b/src/docs/GAMMA.json index 58a92ae5..a38de730 100644 --- a/src/docs/GAMMA.json +++ b/src/docs/GAMMA.json @@ -1,4 +1,4 @@ { - "keyword":"GAMMA", - "docstr":"`GAMMA` — Gamma function\n\n### Description\n`GAMMA(X)` computes Gamma (\\Gamma) of `X`. For positive,\ninteger values of `X` the Gamma function simplifies to the factorial\nfunction \\Gamma(x)=(x-1)!.\n\n\n\n### Syntax\n`X = GAMMA(X)`\n\n\n### Arguments\n\n \n and neither zero\nnor a negative integer.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` of the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_gamma\n\n  real :: x = 1.0\n\n  x = gamma(x) ! returns 1.0\n\nend program test_gamma\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `GAMMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `DGAMMA(X)` | `REAL(8) X` | `REAL(8)` | GNU Extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLogarithm of the Gamma function: LOG_GAMMA\n\n " -} \ No newline at end of file + "keyword": "GAMMA", + "docstr": "`GAMMA` — Gamma function\n\n### Description\n`GAMMA(X)` computes Gamma (\\Gamma) of `X`. For positive,\ninteger values of `X` the Gamma function simplifies to the factorial\nfunction \\Gamma(x)=(x-1)!.\n\n\n\n### Syntax\n`X = GAMMA(X)`\n\n\n### Arguments\n\n \n and neither zero\nnor a negative integer.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` of the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_gamma\n\n  real :: x = 1.0\n\n  x = gamma(x) ! returns 1.0\n\nend program test_gamma\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `GAMMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `DGAMMA(X)` | `REAL(8) X` | `REAL(8)` | GNU Extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLogarithm of the Gamma function: LOG_GAMMA\n\n " +} diff --git a/src/docs/GERROR.json b/src/docs/GERROR.json index fb597e0d..9e428156 100644 --- a/src/docs/GERROR.json +++ b/src/docs/GERROR.json @@ -1,4 +1,4 @@ { - "keyword":"GERROR", - "docstr":"`GERROR` — Get last system error message\n\n### Description\nReturns the system error message corresponding to the last system error. \nThis resembles the functionality of `strerror(3)` in C.\n\n\n\n### Syntax\n`CALL GERROR(RESULT)`\n\n\n### Arguments\n\n \n and of default\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_gerror\n\n  CHARACTER(len=100) :: msg\n\n  CALL gerror(msg)\n\n  WRITE(*,*) msg\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nIERRNO, PERROR\n" -} \ No newline at end of file + "keyword": "GERROR", + "docstr": "`GERROR` — Get last system error message\n\n### Description\nReturns the system error message corresponding to the last system error. \nThis resembles the functionality of `strerror(3)` in C.\n\n\n\n### Syntax\n`CALL GERROR(RESULT)`\n\n\n### Arguments\n\n \n and of default\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_gerror\n\n  CHARACTER(len=100) :: msg\n\n  CALL gerror(msg)\n\n  WRITE(*,*) msg\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nIERRNO, PERROR\n" +} diff --git a/src/docs/GETARG.json b/src/docs/GETARG.json index d6d9c25d..f608035c 100644 --- a/src/docs/GETARG.json +++ b/src/docs/GETARG.json @@ -1,4 +1,4 @@ { - "keyword":"GETARG", - "docstr":"`GETARG` — Get command line arguments\n\n### Description\nRetrieve the `POS`-th argument that was passed on the\ncommand line when the containing program was invoked.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe GET_COMMAND_ARGUMENT intrinsic defined by the Fortran 2003\nstandard.\n\n\n\n\n### Syntax\n`CALL GETARG(POS, VALUE)`\n\n\n### Arguments\n\n \n and not wider than\nthe default integer kind; `POS` \\geq 0\n\n | `VALUE` | Shall be of type `CHARACTER` and of default\nkind. \n\n | `VALUE` | Shall be of type `CHARACTER`.\n\n\n\n\n\n\n### Return value\nAfter `GETARG` returns, the `VALUE` argument holds the\n`POS`th command line argument. If `VALUE` can not hold the\nargument, it is truncated to fit the length of `VALUE`. If there are\nless than `POS` arguments specified at the command line, `VALUE`\nwill be filled with blanks. If `POS` = 0, `VALUE` is set\nto the name of the program (on systems that support this feature).\n\n\n\n### Example\n```\n\n\nPROGRAM test_getarg\n\n  INTEGER :: i\n\n  CHARACTER(len=32) :: arg\n\n\n  DO i = 1, iargc()\n\n    CALL getarg(i, arg)\n\n    WRITE (*,*) arg\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGNU Fortran 77 compatibility function: IARGC\n\n \nFortran 2003 functions and subroutines: GET_COMMAND,\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n\n" -} \ No newline at end of file + "keyword": "GETARG", + "docstr": "`GETARG` — Get command line arguments\n\n### Description\nRetrieve the `POS`-th argument that was passed on the\ncommand line when the containing program was invoked.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe GET_COMMAND_ARGUMENT intrinsic defined by the Fortran 2003\nstandard.\n\n\n\n\n### Syntax\n`CALL GETARG(POS, VALUE)`\n\n\n### Arguments\n\n \n and not wider than\nthe default integer kind; `POS` \\geq 0\n\n | `VALUE` | Shall be of type `CHARACTER` and of default\nkind. \n\n | `VALUE` | Shall be of type `CHARACTER`.\n\n\n\n\n\n\n### Return value\nAfter `GETARG` returns, the `VALUE` argument holds the\n`POS`th command line argument. If `VALUE` can not hold the\nargument, it is truncated to fit the length of `VALUE`. If there are\nless than `POS` arguments specified at the command line, `VALUE`\nwill be filled with blanks. If `POS` = 0, `VALUE` is set\nto the name of the program (on systems that support this feature).\n\n\n\n### Example\n```\n\n\nPROGRAM test_getarg\n\n  INTEGER :: i\n\n  CHARACTER(len=32) :: arg\n\n\n  DO i = 1, iargc()\n\n    CALL getarg(i, arg)\n\n    WRITE (*,*) arg\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGNU Fortran 77 compatibility function: IARGC\n\n \nFortran 2003 functions and subroutines: GET_COMMAND,\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n\n" +} diff --git a/src/docs/GETCWD.json b/src/docs/GETCWD.json index 71854def..1565b4b2 100644 --- a/src/docs/GETCWD.json +++ b/src/docs/GETCWD.json @@ -1,4 +1,4 @@ { - "keyword":"GETCWD", - "docstr":"`GETCWD` — Get current working directory\n\n### Description\nGet current working directory.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = GETCWD(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default kind. \n\n | `STATUS` | (Optional) status flag. Returns 0 on success,\na system specific and nonzero error code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_getcwd\n\n  CHARACTER(len=255) :: cwd\n\n  CALL getcwd(cwd)\n\n  WRITE(*,*) TRIM(cwd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCHDIR\n" -} \ No newline at end of file + "keyword": "GETCWD", + "docstr": "`GETCWD` — Get current working directory\n\n### Description\nGet current working directory.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = GETCWD(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default kind. \n\n | `STATUS` | (Optional) status flag. Returns 0 on success,\na system specific and nonzero error code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_getcwd\n\n  CHARACTER(len=255) :: cwd\n\n  CALL getcwd(cwd)\n\n  WRITE(*,*) TRIM(cwd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCHDIR\n" +} diff --git a/src/docs/GETENV.json b/src/docs/GETENV.json index 827db938..f373bce1 100644 --- a/src/docs/GETENV.json +++ b/src/docs/GETENV.json @@ -1,4 +1,4 @@ { - "keyword":"GETENV", - "docstr":"`GETENV` — Get an environmental variable\n\n### Description\nGet the `VALUE` of the environmental variable `NAME`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe GET_ENVIRONMENT_VARIABLE intrinsic defined by the Fortran\n2003 standard.\n\n \n\nNote that `GETENV` need not be thread-safe. It is the\nresponsibility of the user to ensure that the environment is not being\nupdated concurrently with a call to the `GETENV` intrinsic.\n\n\n\n\n### Syntax\n`CALL GETENV(NAME, VALUE)`\n\n\n### Arguments\n\n \n and of default kind. \n\n | `VALUE` | Shall be of type `CHARACTER` and of default kind.\n\n\n\n\n\n\n### Return value\nStores the value of `NAME` in `VALUE`. If `VALUE` is\nnot large enough to hold the data, it is truncated. If `NAME`\nis not set, `VALUE` will be filled with blanks.\n\n\n\n### Example\n```\n\n\nPROGRAM test_getenv\n\n  CHARACTER(len=255) :: homedir\n\n  CALL getenv(\"HOME\", homedir)\n\n  WRITE (*,*) TRIM(homedir)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_ENVIRONMENT_VARIABLE\n" -} \ No newline at end of file + "keyword": "GETENV", + "docstr": "`GETENV` — Get an environmental variable\n\n### Description\nGet the `VALUE` of the environmental variable `NAME`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe GET_ENVIRONMENT_VARIABLE intrinsic defined by the Fortran\n2003 standard.\n\n \n\nNote that `GETENV` need not be thread-safe. It is the\nresponsibility of the user to ensure that the environment is not being\nupdated concurrently with a call to the `GETENV` intrinsic.\n\n\n\n\n### Syntax\n`CALL GETENV(NAME, VALUE)`\n\n\n### Arguments\n\n \n and of default kind. \n\n | `VALUE` | Shall be of type `CHARACTER` and of default kind.\n\n\n\n\n\n\n### Return value\nStores the value of `NAME` in `VALUE`. If `VALUE` is\nnot large enough to hold the data, it is truncated. If `NAME`\nis not set, `VALUE` will be filled with blanks.\n\n\n\n### Example\n```\n\n\nPROGRAM test_getenv\n\n  CHARACTER(len=255) :: homedir\n\n  CALL getenv(\"HOME\", homedir)\n\n  WRITE (*,*) TRIM(homedir)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_ENVIRONMENT_VARIABLE\n" +} diff --git a/src/docs/GETGID.json b/src/docs/GETGID.json index a28debb6..acdd9ffa 100644 --- a/src/docs/GETGID.json +++ b/src/docs/GETGID.json @@ -1,4 +1,4 @@ { - "keyword":"GETGID", - "docstr":"`GETGID` — Group ID function\n\n### Description\nReturns the numerical group ID of the current process.\n\n\n\n### Syntax\n`RESULT = GETGID()`\n\n\n### Return value\nThe return value of `GETGID` is an `INTEGER` of the default\nkind.\n\n\n\n### Example\nSee `GETPID` for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGETPID, GETUID\n" -} \ No newline at end of file + "keyword": "GETGID", + "docstr": "`GETGID` — Group ID function\n\n### Description\nReturns the numerical group ID of the current process.\n\n\n\n### Syntax\n`RESULT = GETGID()`\n\n\n### Return value\nThe return value of `GETGID` is an `INTEGER` of the default\nkind.\n\n\n\n### Example\nSee `GETPID` for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGETPID, GETUID\n" +} diff --git a/src/docs/GETLOG.json b/src/docs/GETLOG.json index 827fe28a..51843360 100644 --- a/src/docs/GETLOG.json +++ b/src/docs/GETLOG.json @@ -1,4 +1,4 @@ { - "keyword":"GETLOG", - "docstr":"`GETLOG` — Get login name\n\n### Description\nGets the username under which the program is running.\n\n\n\n### Syntax\n`CALL GETLOG(C)`\n\n\n### Arguments\n\n \n and of default kind.\n\n\n\n\n\n\n### Return value\nStores the current user name in `LOGIN`. (On systems where POSIX\nfunctions `geteuid` and `getpwuid` are not available, and\nthe `getlogin` function is not implemented either, this will\nreturn a blank string.)\n\n\n\n### Example\n```\n\n\nPROGRAM TEST_GETLOG\n\n  CHARACTER(32) :: login\n\n  CALL GETLOG(login)\n\n  WRITE(*,*) login\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGETUID\n" -} \ No newline at end of file + "keyword": "GETLOG", + "docstr": "`GETLOG` — Get login name\n\n### Description\nGets the username under which the program is running.\n\n\n\n### Syntax\n`CALL GETLOG(C)`\n\n\n### Arguments\n\n \n and of default kind.\n\n\n\n\n\n\n### Return value\nStores the current user name in `LOGIN`. (On systems where POSIX\nfunctions `geteuid` and `getpwuid` are not available, and\nthe `getlogin` function is not implemented either, this will\nreturn a blank string.)\n\n\n\n### Example\n```\n\n\nPROGRAM TEST_GETLOG\n\n  CHARACTER(32) :: login\n\n  CALL GETLOG(login)\n\n  WRITE(*,*) login\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGETUID\n" +} diff --git a/src/docs/GETPID.json b/src/docs/GETPID.json index 03a0824f..fbd0cee6 100644 --- a/src/docs/GETPID.json +++ b/src/docs/GETPID.json @@ -1,4 +1,4 @@ { - "keyword":"GETPID", - "docstr":"`GETPID` — Process ID function\n\n### Description\nReturns the numerical process identifier of the current process.\n\n\n\n### Syntax\n`RESULT = GETPID()`\n\n\n### Return value\nThe return value of `GETPID` is an `INTEGER` of the default\nkind.\n\n\n\n### Example\n```\n\n\nprogram info\n\n  print *, \"The current process ID is \", getpid()\n\n  print *, \"Your numerical user ID is \", getuid()\n\n  print *, \"Your numerical group ID is \", getgid()\n\nend program info\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGETGID, GETUID\n" -} \ No newline at end of file + "keyword": "GETPID", + "docstr": "`GETPID` — Process ID function\n\n### Description\nReturns the numerical process identifier of the current process.\n\n\n\n### Syntax\n`RESULT = GETPID()`\n\n\n### Return value\nThe return value of `GETPID` is an `INTEGER` of the default\nkind.\n\n\n\n### Example\n```\n\n\nprogram info\n\n  print *, \"The current process ID is \", getpid()\n\n  print *, \"Your numerical user ID is \", getuid()\n\n  print *, \"Your numerical group ID is \", getgid()\n\nend program info\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGETGID, GETUID\n" +} diff --git a/src/docs/GETUID.json b/src/docs/GETUID.json index eba73566..bf84db87 100644 --- a/src/docs/GETUID.json +++ b/src/docs/GETUID.json @@ -1,4 +1,4 @@ { - "keyword":"GETUID", - "docstr":"`GETUID` — User ID function\n\n### Description\nReturns the numerical user ID of the current process.\n\n\n\n### Syntax\n`RESULT = GETUID()`\n\n\n### Return value\nThe return value of `GETUID` is an `INTEGER` of the default\nkind.\n\n\n\n### Example\nSee `GETPID` for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGETPID, GETLOG\n" -} \ No newline at end of file + "keyword": "GETUID", + "docstr": "`GETUID` — User ID function\n\n### Description\nReturns the numerical user ID of the current process.\n\n\n\n### Syntax\n`RESULT = GETUID()`\n\n\n### Return value\nThe return value of `GETUID` is an `INTEGER` of the default\nkind.\n\n\n\n### Example\nSee `GETPID` for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGETPID, GETLOG\n" +} diff --git a/src/docs/GET_COMMAND.json b/src/docs/GET_COMMAND.json index 43606031..1edfcda0 100644 --- a/src/docs/GET_COMMAND.json +++ b/src/docs/GET_COMMAND.json @@ -1,4 +1,4 @@ { - "keyword":"GET_COMMAND", - "docstr":"`GET_COMMAND` — Get the entire command line\n\n### Description\nRetrieve the entire command line that was used to invoke the program.\n\n\n\n### Syntax\n`CALL GET_COMMAND([COMMAND, LENGTH, STATUS])`\n\n\n### Arguments\n\n \n and\nof default kind. \n\n | `LENGTH` | (Optional) Shall be of type `INTEGER` and of\ndefault kind. \n\n | `STATUS` | (Optional) Shall be of type `INTEGER` and of\ndefault kind.\n\n\n\n\n\n\n### Return value\nIf `COMMAND` is present, stores the entire command line that was used\nto invoke the program in `COMMAND`. If `LENGTH` is present, it is\nassigned the length of the command line. If `STATUS` is present, it\nis assigned 0 upon success of the command, -1 if `COMMAND` is too\nshort to store the command line, or a positive value in case of an error.\n\n\n\n### Example\n```\n\n\nPROGRAM test_get_command\n\n  CHARACTER(len=255) :: cmd\n\n  CALL get_command(cmd)\n\n  WRITE (*,*) TRIM(cmd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n" -} \ No newline at end of file + "keyword": "GET_COMMAND", + "docstr": "`GET_COMMAND` — Get the entire command line\n\n### Description\nRetrieve the entire command line that was used to invoke the program.\n\n\n\n### Syntax\n`CALL GET_COMMAND([COMMAND, LENGTH, STATUS])`\n\n\n### Arguments\n\n \n and\nof default kind. \n\n | `LENGTH` | (Optional) Shall be of type `INTEGER` and of\ndefault kind. \n\n | `STATUS` | (Optional) Shall be of type `INTEGER` and of\ndefault kind.\n\n\n\n\n\n\n### Return value\nIf `COMMAND` is present, stores the entire command line that was used\nto invoke the program in `COMMAND`. If `LENGTH` is present, it is\nassigned the length of the command line. If `STATUS` is present, it\nis assigned 0 upon success of the command, -1 if `COMMAND` is too\nshort to store the command line, or a positive value in case of an error.\n\n\n\n### Example\n```\n\n\nPROGRAM test_get_command\n\n  CHARACTER(len=255) :: cmd\n\n  CALL get_command(cmd)\n\n  WRITE (*,*) TRIM(cmd)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n" +} diff --git a/src/docs/GET_COMMAND_ARGUMENT.json b/src/docs/GET_COMMAND_ARGUMENT.json index 0fe904fe..3c33c146 100644 --- a/src/docs/GET_COMMAND_ARGUMENT.json +++ b/src/docs/GET_COMMAND_ARGUMENT.json @@ -1,4 +1,4 @@ { - "keyword":"GET_COMMAND_ARGUMENT", - "docstr":"`GET_COMMAND_ARGUMENT` — Get command line arguments\n\n### Description\nRetrieve the `NUMBER`-th argument that was passed on the\ncommand line when the containing program was invoked.\n\n\n\n### Syntax\n`CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])`\n\n\n### Arguments\n\n \n and of\ndefault kind, `NUMBER` \\geq 0\n\n | `VALUE` | (Optional) Shall be a scalar of type `CHARACTER`and of default kind. \n\n | `LENGTH` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `STATUS` | (Optional) Shall be a scalar of type `INTEGER`and of default kind.\n\n\n\n\n\n\n### Return value\nAfter `GET_COMMAND_ARGUMENT` returns, the `VALUE` argument holds the\n`NUMBER`-th command line argument. If `VALUE` can not hold the argument, it is\ntruncated to fit the length of `VALUE`. If there are less than `NUMBER`\narguments specified at the command line, `VALUE` will be filled with blanks. \nIf `NUMBER` = 0, `VALUE` is set to the name of the program (on\nsystems that support this feature). The `LENGTH` argument contains the\nlength of the `NUMBER`-th command line argument. If the argument retrieval\nfails, `STATUS` is a positive number; if `VALUE` contains a truncated\ncommand line argument, `STATUS` is -1; and otherwise the `STATUS` is\nzero.\n\n\n\n### Example\n```\n\n\nPROGRAM test_get_command_argument\n\n  INTEGER :: i\n\n  CHARACTER(len=32) :: arg\n\n\n  i = 0\n\n  DO\n\n    CALL get_command_argument(i, arg)\n\n    IF (LEN_TRIM(arg) == 0) EXIT\n\n\n    WRITE (*,*) TRIM(arg)\n\n    i = i+1\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_COMMAND, COMMAND_ARGUMENT_COUNT\n" -} \ No newline at end of file + "keyword": "GET_COMMAND_ARGUMENT", + "docstr": "`GET_COMMAND_ARGUMENT` — Get command line arguments\n\n### Description\nRetrieve the `NUMBER`-th argument that was passed on the\ncommand line when the containing program was invoked.\n\n\n\n### Syntax\n`CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])`\n\n\n### Arguments\n\n \n and of\ndefault kind, `NUMBER` \\geq 0\n\n | `VALUE` | (Optional) Shall be a scalar of type `CHARACTER`and of default kind. \n\n | `LENGTH` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `STATUS` | (Optional) Shall be a scalar of type `INTEGER`and of default kind.\n\n\n\n\n\n\n### Return value\nAfter `GET_COMMAND_ARGUMENT` returns, the `VALUE` argument holds the\n`NUMBER`-th command line argument. If `VALUE` can not hold the argument, it is\ntruncated to fit the length of `VALUE`. If there are less than `NUMBER`\narguments specified at the command line, `VALUE` will be filled with blanks. \nIf `NUMBER` = 0, `VALUE` is set to the name of the program (on\nsystems that support this feature). The `LENGTH` argument contains the\nlength of the `NUMBER`-th command line argument. If the argument retrieval\nfails, `STATUS` is a positive number; if `VALUE` contains a truncated\ncommand line argument, `STATUS` is -1; and otherwise the `STATUS` is\nzero.\n\n\n\n### Example\n```\n\n\nPROGRAM test_get_command_argument\n\n  INTEGER :: i\n\n  CHARACTER(len=32) :: arg\n\n\n  i = 0\n\n  DO\n\n    CALL get_command_argument(i, arg)\n\n    IF (LEN_TRIM(arg) == 0) EXIT\n\n\n    WRITE (*,*) TRIM(arg)\n\n    i = i+1\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nGET_COMMAND, COMMAND_ARGUMENT_COUNT\n" +} diff --git a/src/docs/GET_ENVIRONMENT_VARIABLE.json b/src/docs/GET_ENVIRONMENT_VARIABLE.json index 1de9f87d..412e9993 100644 --- a/src/docs/GET_ENVIRONMENT_VARIABLE.json +++ b/src/docs/GET_ENVIRONMENT_VARIABLE.json @@ -1,4 +1,4 @@ { - "keyword":"GET_ENVIRONMENT_VARIABLE", - "docstr":"`GET_ENVIRONMENT_VARIABLE` — Get an environmental variable\n\n### Description\nGet the `VALUE` of the environmental variable `NAME`.\n\n \nNote that `GET_ENVIRONMENT_VARIABLE` need not be thread-safe. It\nis the responsibility of the user to ensure that the environment is\nnot being updated concurrently with a call to the\n`GET_ENVIRONMENT_VARIABLE` intrinsic.\n\n\n\n\n### Syntax\n`CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)`\n\n\n### Arguments\n\n \n\nand of default kind. \n\n | `VALUE` | (Optional) Shall be a scalar of type `CHARACTER`and of default kind. \n\n | `LENGTH` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `STATUS` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `TRIM_NAME` | (Optional) Shall be a scalar of type `LOGICAL`and of default kind.\n\n\n\n\n\n\n### Return value\nStores the value of `NAME` in `VALUE`. If `VALUE` is\nnot large enough to hold the data, it is truncated. If `NAME`\nis not set, `VALUE` will be filled with blanks. Argument `LENGTH`\ncontains the length needed for storing the environment variable `NAME`\nor zero if it is not present. `STATUS` is -1 if `VALUE` is present\nbut too short for the environment variable; it is 1 if the environment\nvariable does not exist and 2 if the processor does not support environment\nvariables; in all other cases `STATUS` is zero. If `TRIM_NAME` is\npresent with the value `.FALSE.`, the trailing blanks in `NAME`\nare significant; otherwise they are not part of the environment variable\nname.\n\n\n\n### Example\n```\n\n\nPROGRAM test_getenv\n\n  CHARACTER(len=255) :: homedir\n\n  CALL get_environment_variable(\"HOME\", homedir)\n\n  WRITE (*,*) TRIM(homedir)\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n" -} \ No newline at end of file + "keyword": "GET_ENVIRONMENT_VARIABLE", + "docstr": "`GET_ENVIRONMENT_VARIABLE` — Get an environmental variable\n\n### Description\nGet the `VALUE` of the environmental variable `NAME`.\n\n \nNote that `GET_ENVIRONMENT_VARIABLE` need not be thread-safe. It\nis the responsibility of the user to ensure that the environment is\nnot being updated concurrently with a call to the\n`GET_ENVIRONMENT_VARIABLE` intrinsic.\n\n\n\n\n### Syntax\n`CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)`\n\n\n### Arguments\n\n \n\nand of default kind. \n\n | `VALUE` | (Optional) Shall be a scalar of type `CHARACTER`and of default kind. \n\n | `LENGTH` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `STATUS` | (Optional) Shall be a scalar of type `INTEGER`and of default kind. \n\n | `TRIM_NAME` | (Optional) Shall be a scalar of type `LOGICAL`and of default kind.\n\n\n\n\n\n\n### Return value\nStores the value of `NAME` in `VALUE`. If `VALUE` is\nnot large enough to hold the data, it is truncated. If `NAME`\nis not set, `VALUE` will be filled with blanks. Argument `LENGTH`\ncontains the length needed for storing the environment variable `NAME`\nor zero if it is not present. `STATUS` is -1 if `VALUE` is present\nbut too short for the environment variable; it is 1 if the environment\nvariable does not exist and 2 if the processor does not support environment\nvariables; in all other cases `STATUS` is zero. If `TRIM_NAME` is\npresent with the value `.FALSE.`, the trailing blanks in `NAME`\nare significant; otherwise they are not part of the environment variable\nname.\n\n\n\n### Example\n```\n\n\nPROGRAM test_getenv\n\n  CHARACTER(len=255) :: homedir\n\n  CALL get_environment_variable(\"HOME\", homedir)\n\n  WRITE (*,*) TRIM(homedir)\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nSubroutine\n\n\n" +} diff --git a/src/docs/GMTIME.json b/src/docs/GMTIME.json index e4171911..8d65d5d4 100644 --- a/src/docs/GMTIME.json +++ b/src/docs/GMTIME.json @@ -1,4 +1,4 @@ { - "keyword":"GMTIME", - "docstr":"`GMTIME` — Convert time to GMT info\n\n### Description\nGiven a system time value `TIME` (as provided by the `TIME8`intrinsic), fills `VALUES` with values extracted from it appropriate\nto the UTC time zone (Universal Coordinated Time, also known in some\ncountries as GMT, Greenwich Mean Time), using `gmtime(3)`.\n\n\n\n### Syntax\n`CALL GMTIME(TIME, VALUES)`\n\n\n### Arguments\n\n \n scalar expression\ncorresponding to a system time, with `INTENT(IN)`. \n\n | `VALUES` | A default `INTEGER` array with 9 elements,\nwith `INTENT(OUT)`.\n\n\n\n\n\n\n### Return value\nThe elements of `VALUES` are assigned as follows:\n
    \n
  1. Seconds after the minute, range 0–59 or 0–61 to allow for leap\nseconds\n
  2. Minutes after the hour, range 0–59\n
  3. Hours past midnight, range 0–23\n
  4. Day of month, range 0–31\n
  5. Number of months since January, range 0–12\n
  6. Years since 1900\n
  7. Number of days since Sunday, range 0–6\n
  8. Days since January 1\n
  9. Daylight savings indicator: positive if daylight savings is in\neffect, zero if not, and negative if the information is not available.\n
\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nCTIME, LTIME, TIME, TIME8\n\n " -} \ No newline at end of file + "keyword": "GMTIME", + "docstr": "`GMTIME` — Convert time to GMT info\n\n### Description\nGiven a system time value `TIME` (as provided by the `TIME8`intrinsic), fills `VALUES` with values extracted from it appropriate\nto the UTC time zone (Universal Coordinated Time, also known in some\ncountries as GMT, Greenwich Mean Time), using `gmtime(3)`.\n\n\n\n### Syntax\n`CALL GMTIME(TIME, VALUES)`\n\n\n### Arguments\n\n \n scalar expression\ncorresponding to a system time, with `INTENT(IN)`. \n\n | `VALUES` | A default `INTEGER` array with 9 elements,\nwith `INTENT(OUT)`.\n\n\n\n\n\n\n### Return value\nThe elements of `VALUES` are assigned as follows:\n
    \n
  1. Seconds after the minute, range 0–59 or 0–61 to allow for leap\nseconds\n
  2. Minutes after the hour, range 0–59\n
  3. Hours past midnight, range 0–23\n
  4. Day of month, range 0–31\n
  5. Number of months since January, range 0–12\n
  6. Years since 1900\n
  7. Number of days since Sunday, range 0–6\n
  8. Days since January 1\n
  9. Daylight savings indicator: positive if daylight savings is in\neffect, zero if not, and negative if the information is not available.\n
\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nCTIME, LTIME, TIME, TIME8\n\n " +} diff --git a/src/docs/HOSTNM.json b/src/docs/HOSTNM.json index 8e47215c..a23ec7ac 100644 --- a/src/docs/HOSTNM.json +++ b/src/docs/HOSTNM.json @@ -1,4 +1,4 @@ { - "keyword":"HOSTNM", - "docstr":"`HOSTNM` — Get system host name\n\n### Description\nRetrieves the host name of the system on which the program is running.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = HOSTNM(NAME)`
\n\n\n\n\n\n### Arguments\n\n \n and of default kind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, or a system specific error code otherwise.\n\n\n\n\n\n\n### Return value\nIn either syntax, `NAME` is set to the current hostname if it can\nbe obtained, or to a blank string otherwise.\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" -} \ No newline at end of file + "keyword": "HOSTNM", + "docstr": "`HOSTNM` — Get system host name\n\n### Description\nRetrieves the host name of the system on which the program is running.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = HOSTNM(NAME)`
\n\n\n\n\n\n### Arguments\n\n \n and of default kind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, or a system specific error code otherwise.\n\n\n\n\n\n\n### Return value\nIn either syntax, `NAME` is set to the current hostname if it can\nbe obtained, or to a blank string otherwise.\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" +} diff --git a/src/docs/HUGE.json b/src/docs/HUGE.json index 07805da8..d493261a 100644 --- a/src/docs/HUGE.json +++ b/src/docs/HUGE.json @@ -1,4 +1,4 @@ { - "keyword":"HUGE", - "docstr":"`HUGE` — Largest number of a kind\n\n### Description\n`HUGE(X)` returns the largest number that is not an infinity in\nthe model of the type of `X`.\n\n\n\n### Syntax\n`RESULT = HUGE(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`\n\n\n\n### Example\n```\n\n\nprogram test_huge_tiny\n\n  print *, huge(0), huge(0.0), huge(0.0d0)\n\n  print *, tiny(0.0), tiny(0.0d0)\n\nend program test_huge_tiny\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "HUGE", + "docstr": "`HUGE` — Largest number of a kind\n\n### Description\n`HUGE(X)` returns the largest number that is not an infinity in\nthe model of the type of `X`.\n\n\n\n### Syntax\n`RESULT = HUGE(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`\n\n\n\n### Example\n```\n\n\nprogram test_huge_tiny\n\n  print *, huge(0), huge(0.0), huge(0.0d0)\n\n  print *, tiny(0.0), tiny(0.0d0)\n\nend program test_huge_tiny\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/HYPOT.json b/src/docs/HYPOT.json index d2668915..e91e2713 100644 --- a/src/docs/HYPOT.json +++ b/src/docs/HYPOT.json @@ -1,4 +1,4 @@ { - "keyword":"HYPOT", - "docstr":"`HYPOT` — Euclidean distance function\n\n### Description\n`HYPOT(X,Y)` is the Euclidean distance function. It is equal to\n\\sqrtX^2 + Y^2, without undue underflow or overflow.\n\n\n\n### Syntax\n`RESULT = HYPOT(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type and kind type parameter shall be the same as\n`X`.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind type parameter as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_hypot\n\n  real(4) :: x = 1.e0_4, y = 0.5e0_4\n\n  x = hypot(x,y)\n\nend program test_hypot\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "HYPOT", + "docstr": "`HYPOT` — Euclidean distance function\n\n### Description\n`HYPOT(X,Y)` is the Euclidean distance function. It is equal to\n\\sqrtX^2 + Y^2, without undue underflow or overflow.\n\n\n\n### Syntax\n`RESULT = HYPOT(X, Y)`\n\n\n### Arguments\n\n \n. \n\n | `Y` | The type and kind type parameter shall be the same as\n`X`.\n\n\n\n\n\n\n### Return value\nThe return value has the same type and kind type parameter as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_hypot\n\n  real(4) :: x = 1.e0_4, y = 0.5e0_4\n\n  x = hypot(x,y)\n\nend program test_hypot\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/IACHAR.json b/src/docs/IACHAR.json index 4f770d11..89210347 100644 --- a/src/docs/IACHAR.json +++ b/src/docs/IACHAR.json @@ -1,4 +1,4 @@ { - "keyword":"IACHAR", - "docstr":"`IACHAR` — Code in ASCII collating sequence\n\n### Description\n`IACHAR(C)` returns the code for the ASCII character\nin the first character position of `C`.\n\n\n\n### Syntax\n`RESULT = IACHAR(C [, KIND])`\n\n\n### Arguments\n\n \n\n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nprogram test_iachar\n\n  integer i\n\n  i = iachar(' ')\n\nend program test_iachar\n\n```\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, CHAR, ICHAR\n\n " -} \ No newline at end of file + "keyword": "IACHAR", + "docstr": "`IACHAR` — Code in ASCII collating sequence\n\n### Description\n`IACHAR(C)` returns the code for the ASCII character\nin the first character position of `C`.\n\n\n\n### Syntax\n`RESULT = IACHAR(C [, KIND])`\n\n\n### Arguments\n\n \n\n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nprogram test_iachar\n\n  integer i\n\n  i = iachar(' ')\n\nend program test_iachar\n\n```\n\n\n\n### Notes\nSee ICHAR for a discussion of converting between numerical values\nand formatted string representations.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, CHAR, ICHAR\n\n " +} diff --git a/src/docs/IALL.json b/src/docs/IALL.json index 9a467314..f4fbabb7 100644 --- a/src/docs/IALL.json +++ b/src/docs/IALL.json @@ -1,4 +1,4 @@ { - "keyword":"IALL", - "docstr":"`IALL` — Bitwise AND of array elements\n\n### Description\nReduces with bitwise AND the elements of `ARRAY` along dimension `DIM`\nif the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IALL(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise ALL of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_iall\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 00100000\n\n  PRINT '(b8.8)', IALL(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIANY, IPARITY, IAND\n" -} \ No newline at end of file + "keyword": "IALL", + "docstr": "`IALL` — Bitwise AND of array elements\n\n### Description\nReduces with bitwise AND the elements of `ARRAY` along dimension `DIM`\nif the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IALL(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise ALL of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_iall\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 00100000\n\n  PRINT '(b8.8)', IALL(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIANY, IPARITY, IAND\n" +} diff --git a/src/docs/IAND.json b/src/docs/IAND.json index 9b2e7193..ec1afa86 100644 --- a/src/docs/IAND.json +++ b/src/docs/IAND.json @@ -1,4 +1,4 @@ { - "keyword":"IAND", - "docstr":"`IAND` — Bitwise logical and\n\n### Description\nBitwise logical `AND`.\n\n\n\n### Syntax\n`RESULT = IAND(I, J)`\n\n\n### Arguments\n\n \n. \n\n | `J` | The type shall be `INTEGER`, of the same\nkind as `I`. (As a GNU extension, different kinds are also\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\narguments. (If the argument kinds differ, it is of the same kind as\nthe larger argument.)\n\n\n\n### Example\n```\n\n\nPROGRAM test_iand\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n  WRITE (*,*) IAND(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIOR, IEOR, IBITS, IBSET, IBCLR, NOT\n\n " -} \ No newline at end of file + "keyword": "IAND", + "docstr": "`IAND` — Bitwise logical and\n\n### Description\nBitwise logical `AND`.\n\n\n\n### Syntax\n`RESULT = IAND(I, J)`\n\n\n### Arguments\n\n \n. \n\n | `J` | The type shall be `INTEGER`, of the same\nkind as `I`. (As a GNU extension, different kinds are also\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\narguments. (If the argument kinds differ, it is of the same kind as\nthe larger argument.)\n\n\n\n### Example\n```\n\n\nPROGRAM test_iand\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n  WRITE (*,*) IAND(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIOR, IEOR, IBITS, IBSET, IBCLR, NOT\n\n " +} diff --git a/src/docs/IANY.json b/src/docs/IANY.json index 768740d0..85268603 100644 --- a/src/docs/IANY.json +++ b/src/docs/IANY.json @@ -1,4 +1,4 @@ { - "keyword":"IANY", - "docstr":"`IANY` — Bitwise OR of array elements\n\n### Description\nReduces with bitwise OR (inclusive or) the elements of `ARRAY` along\ndimension `DIM` if the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IANY(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise OR of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_iany\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 01101110\n\n  PRINT '(b8.8)', IANY(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIPARITY, IALL, IOR\n" -} \ No newline at end of file + "keyword": "IANY", + "docstr": "`IANY` — Bitwise OR of array elements\n\n### Description\nReduces with bitwise OR (inclusive or) the elements of `ARRAY` along\ndimension `DIM` if the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IANY(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise OR of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_iany\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 01101110\n\n  PRINT '(b8.8)', IANY(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIPARITY, IALL, IOR\n" +} diff --git a/src/docs/IARGC.json b/src/docs/IARGC.json index 43fc13c9..e01d7722 100644 --- a/src/docs/IARGC.json +++ b/src/docs/IARGC.json @@ -1,4 +1,4 @@ { - "keyword":"IARGC", - "docstr":"`IARGC` — Get the number of command line arguments\n\n### Description\n`IARGC` returns the number of arguments passed on the\ncommand line when the containing program was invoked.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe COMMAND_ARGUMENT_COUNT intrinsic defined by the Fortran 2003\nstandard.\n\n\n\n\n### Syntax\n`RESULT = IARGC()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe number of command line arguments, type `INTEGER(4)`.\n\n\n\n### Example\nSee GETARG\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGNU Fortran 77 compatibility subroutine: GETARG\n\n \nFortran 2003 functions and subroutines: GET_COMMAND,\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n\n" -} \ No newline at end of file + "keyword": "IARGC", + "docstr": "`IARGC` — Get the number of command line arguments\n\n### Description\n`IARGC` returns the number of arguments passed on the\ncommand line when the containing program was invoked.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. In new code, programmers should consider the use of\nthe COMMAND_ARGUMENT_COUNT intrinsic defined by the Fortran 2003\nstandard.\n\n\n\n\n### Syntax\n`RESULT = IARGC()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe number of command line arguments, type `INTEGER(4)`.\n\n\n\n### Example\nSee GETARG\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nGNU Fortran 77 compatibility subroutine: GETARG\n\n \nFortran 2003 functions and subroutines: GET_COMMAND,\nGET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT\n\n" +} diff --git a/src/docs/IBCLR.json b/src/docs/IBCLR.json index e7e83dd7..6051e573 100644 --- a/src/docs/IBCLR.json +++ b/src/docs/IBCLR.json @@ -1,4 +1,4 @@ { - "keyword":"IBCLR", - "docstr":"`IBCLR` — Clear bit\n\n### Description\n`IBCLR` returns the value of `I` with the bit at position\n`POS` set to zero.\n\n\n\n### Syntax\n`RESULT = IBCLR(I, POS)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIBITS, IBSET, IAND, IOR, IEOR, MVBITS\n\n " -} \ No newline at end of file + "keyword": "IBCLR", + "docstr": "`IBCLR` — Clear bit\n\n### Description\n`IBCLR` returns the value of `I` with the bit at position\n`POS` set to zero.\n\n\n\n### Syntax\n`RESULT = IBCLR(I, POS)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIBITS, IBSET, IAND, IOR, IEOR, MVBITS\n\n " +} diff --git a/src/docs/IBITS.json b/src/docs/IBITS.json index 22e7dd13..6e37fe89 100644 --- a/src/docs/IBITS.json +++ b/src/docs/IBITS.json @@ -1,4 +1,4 @@ { - "keyword":"IBITS", - "docstr":"`IBITS` — Bit extraction\n\n### Description\n`IBITS` extracts a field of length `LEN` from `I`,\nstarting from bit position `POS` and extending left for `LEN`\nbits. The result is right-justified and the remaining bits are\nzeroed. The value of `POS+LEN` must be less than or equal to the\nvalue `BIT_SIZE(I)`.\n\n\n\n### Syntax\n`RESULT = IBITS(I, POS, LEN)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`. \n\n | `LEN` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, IBCLR, IBSET, IAND, IOR, IEOR\n" -} \ No newline at end of file + "keyword": "IBITS", + "docstr": "`IBITS` — Bit extraction\n\n### Description\n`IBITS` extracts a field of length `LEN` from `I`,\nstarting from bit position `POS` and extending left for `LEN`\nbits. The result is right-justified and the remaining bits are\nzeroed. The value of `POS+LEN` must be less than or equal to the\nvalue `BIT_SIZE(I)`.\n\n\n\n### Syntax\n`RESULT = IBITS(I, POS, LEN)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`. \n\n | `LEN` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, IBCLR, IBSET, IAND, IOR, IEOR\n" +} diff --git a/src/docs/IBSET.json b/src/docs/IBSET.json index 2356e601..acc1f91a 100644 --- a/src/docs/IBSET.json +++ b/src/docs/IBSET.json @@ -1,4 +1,4 @@ { - "keyword":"IBSET", - "docstr":"`IBSET` — Set bit\n\n### Description\n`IBSET` returns the value of `I` with the bit at position\n`POS` set to one.\n\n\n\n### Syntax\n`RESULT = IBSET(I, POS)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIBCLR, IBITS, IAND, IOR, IEOR, MVBITS\n\n " -} \ No newline at end of file + "keyword": "IBSET", + "docstr": "`IBSET` — Set bit\n\n### Description\n`IBSET` returns the value of `I` with the bit at position\n`POS` set to one.\n\n\n\n### Syntax\n`RESULT = IBSET(I, POS)`\n\n\n### Arguments\n\n \n. \n\n | `POS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIBCLR, IBITS, IAND, IOR, IEOR, MVBITS\n\n " +} diff --git a/src/docs/ICHAR.json b/src/docs/ICHAR.json index 22bf2e64..1589d040 100644 --- a/src/docs/ICHAR.json +++ b/src/docs/ICHAR.json @@ -1,4 +1,4 @@ { - "keyword":"ICHAR", - "docstr":"`ICHAR` — Character-to-integer conversion function\n\n### Description\n`ICHAR(C)` returns the code for the character in the first character\nposition of `C` in the system's native character set. \nThe correspondence between characters and their codes is not necessarily\nthe same across different GNU Fortran implementations.\n\n\n\n### Syntax\n`RESULT = ICHAR(C [, KIND])`\n\n\n### Arguments\n\n \n\n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nprogram test_ichar\n\n  integer i\n\n  i = ichar(' ')\n\nend program test_ichar\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ICHAR(C)` | `CHARACTER C` | `INTEGER(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Notes\nNo intrinsic exists to convert between a numeric value and a formatted\ncharacter string representation – for instance, given the\n`CHARACTER` value `'154'`, obtaining an `INTEGER` or\n`REAL` value with the value 154, or vice versa. Instead, this\nfunctionality is provided by internal-file I/O, as in the following\nexample:\n
          program read_val\n            integer value\n            character(len=10) string, string2\n            string = '154'\n          \n            ! Convert a string to a numeric value\n            read (string,'(I10)') value\n            print *, value\n          \n            ! Convert a value to a formatted string\n            write (string2,'(I10)') value\n            print *, string2\n          end program read_val\n
\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, CHAR, IACHAR\n\n " -} \ No newline at end of file + "keyword": "ICHAR", + "docstr": "`ICHAR` — Character-to-integer conversion function\n\n### Description\n`ICHAR(C)` returns the code for the character in the first character\nposition of `C` in the system's native character set. \nThe correspondence between characters and their codes is not necessarily\nthe same across different GNU Fortran implementations.\n\n\n\n### Syntax\n`RESULT = ICHAR(C [, KIND])`\n\n\n### Arguments\n\n \n\n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nprogram test_ichar\n\n  integer i\n\n  i = ichar(' ')\n\nend program test_ichar\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ICHAR(C)` | `CHARACTER C` | `INTEGER(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Notes\nNo intrinsic exists to convert between a numeric value and a formatted\ncharacter string representation – for instance, given the\n`CHARACTER` value `'154'`, obtaining an `INTEGER` or\n`REAL` value with the value 154, or vice versa. Instead, this\nfunctionality is provided by internal-file I/O, as in the following\nexample:\n
          program read_val\n            integer value\n            character(len=10) string, string2\n            string = '154'\n          \n            ! Convert a string to a numeric value\n            read (string,'(I10)') value\n            print *, value\n          \n            ! Convert a value to a formatted string\n            write (string2,'(I10)') value\n            print *, string2\n          end program read_val\n
\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nACHAR, CHAR, IACHAR\n\n " +} diff --git a/src/docs/IDATE.json b/src/docs/IDATE.json index 8dff7722..34822828 100644 --- a/src/docs/IDATE.json +++ b/src/docs/IDATE.json @@ -1,4 +1,4 @@ { - "keyword":"IDATE", - "docstr":"`IDATE` — Get current local time subroutine (day/month/year)\n\n### Description\n`IDATE(VALUES)` Fills `VALUES` with the numerical values at the\ncurrent local time. The day (in the range 1-31), month (in the range 1-12),\nand year appear in elements 1, 2, and 3 of `VALUES`, respectively. \nThe year has four significant digits.\n\n\n\n### Syntax\n`CALL IDATE(VALUES)`\n\n\n### Arguments\n\n \n and\nthe kind shall be the default integer kind.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\n```\n\n\nprogram test_idate\n\n  integer, dimension(3) :: tarray\n\n  call idate(tarray)\n\n  print *, tarray(1)\n\n  print *, tarray(2)\n\n  print *, tarray(3)\n\nend program test_idate\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" -} \ No newline at end of file + "keyword": "IDATE", + "docstr": "`IDATE` — Get current local time subroutine (day/month/year)\n\n### Description\n`IDATE(VALUES)` Fills `VALUES` with the numerical values at the\ncurrent local time. The day (in the range 1-31), month (in the range 1-12),\nand year appear in elements 1, 2, and 3 of `VALUES`, respectively. \nThe year has four significant digits.\n\n\n\n### Syntax\n`CALL IDATE(VALUES)`\n\n\n### Arguments\n\n \n and\nthe kind shall be the default integer kind.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\n```\n\n\nprogram test_idate\n\n  integer, dimension(3) :: tarray\n\n  call idate(tarray)\n\n  print *, tarray(1)\n\n  print *, tarray(2)\n\n  print *, tarray(3)\n\nend program test_idate\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" +} diff --git a/src/docs/IEOR.json b/src/docs/IEOR.json index 58de3c6a..020fa2da 100644 --- a/src/docs/IEOR.json +++ b/src/docs/IEOR.json @@ -1,4 +1,4 @@ { - "keyword":"IEOR", - "docstr":"`IEOR` — Bitwise logical exclusive or\n\n### Description\n`IEOR` returns the bitwise Boolean exclusive-OR of `I` and\n`J`.\n\n\n\n### Syntax\n`RESULT = IEOR(I, J)`\n\n\n### Arguments\n\n \n. \n\n | `J` | The type shall be `INTEGER`, of the same\nkind as `I`. (As a GNU extension, different kinds are also\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\narguments. (If the argument kinds differ, it is of the same kind as\nthe larger argument.)\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIOR, IAND, IBITS, IBSET, IBCLR, NOT\n" -} \ No newline at end of file + "keyword": "IEOR", + "docstr": "`IEOR` — Bitwise logical exclusive or\n\n### Description\n`IEOR` returns the bitwise Boolean exclusive-OR of `I` and\n`J`.\n\n\n\n### Syntax\n`RESULT = IEOR(I, J)`\n\n\n### Arguments\n\n \n. \n\n | `J` | The type shall be `INTEGER`, of the same\nkind as `I`. (As a GNU extension, different kinds are also\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\narguments. (If the argument kinds differ, it is of the same kind as\nthe larger argument.)\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIOR, IAND, IBITS, IBSET, IBCLR, NOT\n" +} diff --git a/src/docs/IERRNO.json b/src/docs/IERRNO.json index d8de4a45..e908e581 100644 --- a/src/docs/IERRNO.json +++ b/src/docs/IERRNO.json @@ -1,4 +1,4 @@ { - "keyword":"IERRNO", - "docstr":"`IERRNO` — Get the last system error number\n\n### Description\nReturns the last system error number, as given by the C `errno`variable.\n\n\n\n### Syntax\n`RESULT = IERRNO()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nPERROR\n" -} \ No newline at end of file + "keyword": "IERRNO", + "docstr": "`IERRNO` — Get the last system error number\n\n### Description\nReturns the last system error number, as given by the C `errno`variable.\n\n\n\n### Syntax\n`RESULT = IERRNO()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nPERROR\n" +} diff --git a/src/docs/IMAGE_INDEX.json b/src/docs/IMAGE_INDEX.json index ee31d82f..3985dfe8 100644 --- a/src/docs/IMAGE_INDEX.json +++ b/src/docs/IMAGE_INDEX.json @@ -1,4 +1,4 @@ { - "keyword":"IMAGE_INDEX", - "docstr":"`IMAGE_INDEX` — Function that converts a cosubscript to an image index\n\n### Description\nReturns the image index belonging to a cosubscript.\n\n\n\n### Syntax\n`RESULT = IMAGE_INDEX(COARRAY, SUB)`\n\n\n### Return value\nScalar default integer with the value of the image index which corresponds\nto the cosubscripts. For invalid cosubscripts the result is zero.\n\n\n\n### Example\n```\n\n\nINTEGER :: array[2,-1:4,8,*]\n\n! Writes 28 (or 0 if there are fewer than 28 images)\n\nWRITE (*,*) IMAGE_INDEX (array, [2,0,3,1])\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nInquiry function.\n\n\n\n### See also\nTHIS_IMAGE, NUM_IMAGES\n" -} \ No newline at end of file + "keyword": "IMAGE_INDEX", + "docstr": "`IMAGE_INDEX` — Function that converts a cosubscript to an image index\n\n### Description\nReturns the image index belonging to a cosubscript.\n\n\n\n### Syntax\n`RESULT = IMAGE_INDEX(COARRAY, SUB)`\n\n\n### Return value\nScalar default integer with the value of the image index which corresponds\nto the cosubscripts. For invalid cosubscripts the result is zero.\n\n\n\n### Example\n```\n\n\nINTEGER :: array[2,-1:4,8,*]\n\n! Writes 28 (or 0 if there are fewer than 28 images)\n\nWRITE (*,*) IMAGE_INDEX (array, [2,0,3,1])\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nInquiry function.\n\n\n\n### See also\nTHIS_IMAGE, NUM_IMAGES\n" +} diff --git a/src/docs/INDEX.json b/src/docs/INDEX.json index 4ebd8546..b386874a 100644 --- a/src/docs/INDEX.json +++ b/src/docs/INDEX.json @@ -1,4 +1,4 @@ { - "keyword":"INDEX", - "docstr":"`INDEX` — Position of a substring within a string\n\n### Description\nReturns the position of the start of the first occurrence of string\n`SUBSTRING` as a substring in `STRING`, counting from one. If\n`SUBSTRING` is not present in `STRING`, zero is returned. If\nthe `BACK` argument is present and true, the return value is the\nstart of the last occurrence rather than the first.\n\n\n\n### Syntax\n`RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])`\n\n\n### Arguments\n\n \n, with\n`INTENT(IN)`
\n | `SUBSTRING` | Shall be a scalar `CHARACTER`, with\n`INTENT(IN)`
\n | `BACK` | (Optional) Shall be a scalar `LOGICAL`, with\n`INTENT(IN)`
\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `INDEX(STRING, SUBSTRING)` | `CHARACTER` | `INTEGER(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSCAN, VERIFY\n" -} \ No newline at end of file + "keyword": "INDEX", + "docstr": "`INDEX` — Position of a substring within a string\n\n### Description\nReturns the position of the start of the first occurrence of string\n`SUBSTRING` as a substring in `STRING`, counting from one. If\n`SUBSTRING` is not present in `STRING`, zero is returned. If\nthe `BACK` argument is present and true, the return value is the\nstart of the last occurrence rather than the first.\n\n\n\n### Syntax\n`RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])`\n\n\n### Arguments\n\n \n, with\n`INTENT(IN)`
\n | `SUBSTRING` | Shall be a scalar `CHARACTER`, with\n`INTENT(IN)`
\n | `BACK` | (Optional) Shall be a scalar `LOGICAL`, with\n`INTENT(IN)`
\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `INDEX(STRING, SUBSTRING)` | `CHARACTER` | `INTEGER(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSCAN, VERIFY\n" +} diff --git a/src/docs/INT.json b/src/docs/INT.json index 26432ada..f5d6e80e 100644 --- a/src/docs/INT.json +++ b/src/docs/INT.json @@ -1,4 +1,4 @@ { - "keyword":"INT", - "docstr":"`INT` — Convert to integer type\n\n### Description\nConvert to integer type\n\n\n\n### Syntax\n`RESULT = INT(A [, KIND))`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `INTEGER` variable or array under\nthe following rules:\n\n
\n**(A)** If `A` is of type `INTEGER`, `INT(A) = A`\n**(B)** If `A` is of type `REAL` and |A| < 1, `INT(A)`equals `0`. If |A| \\geq 1, then `INT(A)` is the integer\nwhose magnitude is the largest integer that does not exceed the magnitude\nof `A` and whose sign is the same as the sign of `A`. \n\n**(C)** If `A` is of type `COMPLEX`, rule B is applied to the real part of `A`. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_int\n\n  integer :: i = 42\n\n  complex :: z = (-3.7, 1.0)\n\n  print *, int(i)\n\n  print *, int(z), int(z,8)\n\nend program\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `INT(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IFIX(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IDINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "INT", + "docstr": "`INT` — Convert to integer type\n\n### Description\nConvert to integer type\n\n\n\n### Syntax\n`RESULT = INT(A [, KIND))`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `INTEGER` variable or array under\nthe following rules:\n\n
\n**(A)** If `A` is of type `INTEGER`, `INT(A) = A`\n**(B)** If `A` is of type `REAL` and |A| < 1, `INT(A)`equals `0`. If |A| \\geq 1, then `INT(A)` is the integer\nwhose magnitude is the largest integer that does not exceed the magnitude\nof `A` and whose sign is the same as the sign of `A`. \n\n**(C)** If `A` is of type `COMPLEX`, rule B is applied to the real part of `A`. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_int\n\n  integer :: i = 42\n\n  complex :: z = (-3.7, 1.0)\n\n  print *, int(i)\n\n  print *, int(z), int(z,8)\n\nend program\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `INT(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IFIX(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IDINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/INT2.json b/src/docs/INT2.json index f2948b4d..c9860103 100644 --- a/src/docs/INT2.json +++ b/src/docs/INT2.json @@ -1,4 +1,4 @@ { - "keyword":"INT2", - "docstr":"`INT2` — Convert to 16-bit integer type\n\n### Description\nConvert to a `KIND=2` integer type. This is equivalent to the\nstandard `INT` intrinsic with an optional argument of\n`KIND=2`, and is only included for backwards compatibility.\n\n \nThe `SHORT` intrinsic is equivalent to `INT2`.\n\n\n\n\n### Syntax\n`RESULT = INT2(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is a `INTEGER(2)` variable.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINT, INT8, LONG\n" -} \ No newline at end of file + "keyword": "INT2", + "docstr": "`INT2` — Convert to 16-bit integer type\n\n### Description\nConvert to a `KIND=2` integer type. This is equivalent to the\nstandard `INT` intrinsic with an optional argument of\n`KIND=2`, and is only included for backwards compatibility.\n\n \nThe `SHORT` intrinsic is equivalent to `INT2`.\n\n\n\n\n### Syntax\n`RESULT = INT2(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is a `INTEGER(2)` variable.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINT, INT8, LONG\n" +} diff --git a/src/docs/INT8.json b/src/docs/INT8.json index d3d105fd..d21e500a 100644 --- a/src/docs/INT8.json +++ b/src/docs/INT8.json @@ -1,4 +1,4 @@ { - "keyword":"INT8", - "docstr":"`INT8` — Convert to 64-bit integer type\n\n### Description\nConvert to a `KIND=8` integer type. This is equivalent to the\nstandard `INT` intrinsic with an optional argument of\n`KIND=8`, and is only included for backwards compatibility.\n\n\n\n### Syntax\n`RESULT = INT8(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is a `INTEGER(8)` variable.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINT, INT2, LONG\n" -} \ No newline at end of file + "keyword": "INT8", + "docstr": "`INT8` — Convert to 64-bit integer type\n\n### Description\nConvert to a `KIND=8` integer type. This is equivalent to the\nstandard `INT` intrinsic with an optional argument of\n`KIND=8`, and is only included for backwards compatibility.\n\n\n\n### Syntax\n`RESULT = INT8(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is a `INTEGER(8)` variable.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINT, INT2, LONG\n" +} diff --git a/src/docs/IOR.json b/src/docs/IOR.json index 7decf4ab..aaf59c82 100644 --- a/src/docs/IOR.json +++ b/src/docs/IOR.json @@ -1,4 +1,4 @@ { - "keyword":"IOR", - "docstr":"`IOR` — Bitwise logical or\n\n### Description\n`IOR` returns the bitwise Boolean inclusive-OR of `I` and\n`J`.\n\n\n\n### Syntax\n`RESULT = IOR(I, J)`\n\n\n### Arguments\n\n \n. \n\n | `J` | The type shall be `INTEGER`, of the same\nkind as `I`. (As a GNU extension, different kinds are also\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\narguments. (If the argument kinds differ, it is of the same kind as\nthe larger argument.)\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIEOR, IAND, IBITS, IBSET, IBCLR, NOT\n" -} \ No newline at end of file + "keyword": "IOR", + "docstr": "`IOR` — Bitwise logical or\n\n### Description\n`IOR` returns the bitwise Boolean inclusive-OR of `I` and\n`J`.\n\n\n\n### Syntax\n`RESULT = IOR(I, J)`\n\n\n### Arguments\n\n \n. \n\n | `J` | The type shall be `INTEGER`, of the same\nkind as `I`. (As a GNU extension, different kinds are also\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\narguments. (If the argument kinds differ, it is of the same kind as\nthe larger argument.)\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIEOR, IAND, IBITS, IBSET, IBCLR, NOT\n" +} diff --git a/src/docs/IPARITY.json b/src/docs/IPARITY.json index 89d0fda9..7b394dc9 100644 --- a/src/docs/IPARITY.json +++ b/src/docs/IPARITY.json @@ -1,4 +1,4 @@ { - "keyword":"IPARITY", - "docstr":"`IPARITY` — Bitwise XOR of array elements\n\n### Description\nReduces with bitwise XOR (exclusive or) the elements of `ARRAY` along\ndimension `DIM` if the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IPARITY(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise XOR of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_iparity\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 01001110\n\n  PRINT '(b8.8)', IPARITY(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIANY, IALL, IEOR, PARITY\n" -} \ No newline at end of file + "keyword": "IPARITY", + "docstr": "`IPARITY` — Bitwise XOR of array elements\n\n### Description\nReduces with bitwise XOR (exclusive or) the elements of `ARRAY` along\ndimension `DIM` if the corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = IPARITY(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the bitwise XOR of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_iparity\n\n  INTEGER(1) :: a(2)\n\n\n  a(1) = b'00100100'\n\n  a(2) = b'01101010'\n\n\n  ! prints 01001110\n\n  PRINT '(b8.8)', IPARITY(a)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nIANY, IALL, IEOR, PARITY\n" +} diff --git a/src/docs/IRAND.json b/src/docs/IRAND.json index eb1151ea..0b6dd7a3 100644 --- a/src/docs/IRAND.json +++ b/src/docs/IRAND.json @@ -1,4 +1,4 @@ { - "keyword":"IRAND", - "docstr":"`IRAND` — Integer pseudo-random number\n\n### Description\n`IRAND(FLAG)` returns a pseudo-random number from a uniform\ndistribution between 0 and a system-dependent limit (which is in most\ncases 2147483647). If `FLAG` is 0, the next number\nin the current sequence is returned; if `FLAG` is 1, the generator\nis restarted by `CALL SRAND(0)`; if `FLAG` has any other value,\nit is used as a new seed with `SRAND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. It implements a simple modulo generator as provided\nby *g77*. For new code, one should consider the use of\nRANDOM_NUMBER as it implements a superior algorithm.\n\n\n\n\n### Syntax\n`RESULT = IRAND(I)`\n\n\n### Arguments\n\n \n of kind 4.\n\n\n\n\n\n\n### Return value\nThe return value is of `INTEGER(kind=4)` type.\n\n\n\n### Example\n```\n\n\nprogram test_irand\n\n  integer,parameter :: seed = 86456\n\n\n  call srand(seed)\n\n  print *, irand(), irand(), irand(), irand()\n\n  print *, irand(seed), irand(), irand(), irand()\n\nend program test_irand\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" -} \ No newline at end of file + "keyword": "IRAND", + "docstr": "`IRAND` — Integer pseudo-random number\n\n### Description\n`IRAND(FLAG)` returns a pseudo-random number from a uniform\ndistribution between 0 and a system-dependent limit (which is in most\ncases 2147483647). If `FLAG` is 0, the next number\nin the current sequence is returned; if `FLAG` is 1, the generator\nis restarted by `CALL SRAND(0)`; if `FLAG` has any other value,\nit is used as a new seed with `SRAND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. It implements a simple modulo generator as provided\nby *g77*. For new code, one should consider the use of\nRANDOM_NUMBER as it implements a superior algorithm.\n\n\n\n\n### Syntax\n`RESULT = IRAND(I)`\n\n\n### Arguments\n\n \n of kind 4.\n\n\n\n\n\n\n### Return value\nThe return value is of `INTEGER(kind=4)` type.\n\n\n\n### Example\n```\n\n\nprogram test_irand\n\n  integer,parameter :: seed = 86456\n\n\n  call srand(seed)\n\n  print *, irand(), irand(), irand(), irand()\n\n  print *, irand(seed), irand(), irand(), irand()\n\nend program test_irand\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" +} diff --git a/src/docs/ISATTY.json b/src/docs/ISATTY.json index 7dfee4de..e8d91ec7 100644 --- a/src/docs/ISATTY.json +++ b/src/docs/ISATTY.json @@ -1,4 +1,4 @@ { - "keyword":"ISATTY", - "docstr":"`ISATTY` — Whether a unit is a terminal device.\n\n### Description\nDetermine whether a unit is connected to a terminal device.\n\n\n\n### Syntax\n`RESULT = ISATTY(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if the `UNIT` is connected to a terminal\ndevice, `.FALSE.` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM test_isatty\n\n  INTEGER(kind=1) :: unit\n\n  DO unit = 1, 10\n\n    write(*,*) isatty(unit=unit)\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nTTYNAM\n" -} \ No newline at end of file + "keyword": "ISATTY", + "docstr": "`ISATTY` — Whether a unit is a terminal device.\n\n### Description\nDetermine whether a unit is connected to a terminal device.\n\n\n\n### Syntax\n`RESULT = ISATTY(UNIT)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if the `UNIT` is connected to a terminal\ndevice, `.FALSE.` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM test_isatty\n\n  INTEGER(kind=1) :: unit\n\n  DO unit = 1, 10\n\n    write(*,*) isatty(unit=unit)\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nTTYNAM\n" +} diff --git a/src/docs/ISHFT.json b/src/docs/ISHFT.json index b38f3742..d7561c08 100644 --- a/src/docs/ISHFT.json +++ b/src/docs/ISHFT.json @@ -1,4 +1,4 @@ { - "keyword":"ISHFT", - "docstr":"`ISHFT` — Shift bits\n\n### Description\n`ISHFT` returns a value corresponding to `I` with all of the\nbits shifted `SHIFT` places. A value of `SHIFT` greater than\nzero corresponds to a left shift, a value of zero corresponds to no\nshift, and a value less than zero corresponds to a right shift. If the\nabsolute value of `SHIFT` is greater than `BIT_SIZE(I)`, the\nvalue is undefined. Bits shifted out from the left end or right end are\nlost; zeros are shifted in from the opposite end.\n\n\n\n### Syntax\n`RESULT = ISHFT(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nISHFTC\n" -} \ No newline at end of file + "keyword": "ISHFT", + "docstr": "`ISHFT` — Shift bits\n\n### Description\n`ISHFT` returns a value corresponding to `I` with all of the\nbits shifted `SHIFT` places. A value of `SHIFT` greater than\nzero corresponds to a left shift, a value of zero corresponds to no\nshift, and a value less than zero corresponds to a right shift. If the\nabsolute value of `SHIFT` is greater than `BIT_SIZE(I)`, the\nvalue is undefined. Bits shifted out from the left end or right end are\nlost; zeros are shifted in from the opposite end.\n\n\n\n### Syntax\n`RESULT = ISHFT(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nISHFTC\n" +} diff --git a/src/docs/ISHFTC.json b/src/docs/ISHFTC.json index cec7e9c2..ef42a04e 100644 --- a/src/docs/ISHFTC.json +++ b/src/docs/ISHFTC.json @@ -1,4 +1,4 @@ { - "keyword":"ISHFTC", - "docstr":"`ISHFTC` — Shift bits circularly\n\n### Description\n`ISHFTC` returns a value corresponding to `I` with the\nrightmost `SIZE` bits shifted circularly `SHIFT` places; that\nis, bits shifted out one end are shifted into the opposite end. A value\nof `SHIFT` greater than zero corresponds to a left shift, a value of\nzero corresponds to no shift, and a value less than zero corresponds to\na right shift. The absolute value of `SHIFT` must be less than\n`SIZE`. If the `SIZE` argument is omitted, it is taken to be\nequivalent to `BIT_SIZE(I)`.\n\n\n\n### Syntax\n`RESULT = ISHFTC(I, SHIFT [, SIZE])`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `SIZE` | (Optional) The type shall be `INTEGER`;\nthe value must be greater than zero and less than or equal to\n`BIT_SIZE(I)`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nISHFT\n" -} \ No newline at end of file + "keyword": "ISHFTC", + "docstr": "`ISHFTC` — Shift bits circularly\n\n### Description\n`ISHFTC` returns a value corresponding to `I` with the\nrightmost `SIZE` bits shifted circularly `SHIFT` places; that\nis, bits shifted out one end are shifted into the opposite end. A value\nof `SHIFT` greater than zero corresponds to a left shift, a value of\nzero corresponds to no shift, and a value less than zero corresponds to\na right shift. The absolute value of `SHIFT` must be less than\n`SIZE`. If the `SIZE` argument is omitted, it is taken to be\nequivalent to `BIT_SIZE(I)`.\n\n\n\n### Syntax\n`RESULT = ISHFTC(I, SHIFT [, SIZE])`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`. \n\n | `SIZE` | (Optional) The type shall be `INTEGER`;\nthe value must be greater than zero and less than or equal to\n`BIT_SIZE(I)`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nISHFT\n" +} diff --git a/src/docs/ISNAN.json b/src/docs/ISNAN.json index 8675df51..b7bcd47a 100644 --- a/src/docs/ISNAN.json +++ b/src/docs/ISNAN.json @@ -1,4 +1,4 @@ { - "keyword":"ISNAN", - "docstr":"`ISNAN` — Test for a NaN\n\n### Description\n`ISNAN` tests whether a floating-point value is an IEEE\nNot-a-Number (NaN). \n\n\n### Syntax\n`ISNAN(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n\n### Return value\nReturns a default-kind `LOGICAL`. The returned value is `TRUE`if `X` is a NaN and `FALSE` otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_nan\n\n  implicit none\n\n  real :: x\n\n  x = -1.0\n\n  x = sqrt(x)\n\n  if (isnan(x)) stop '\"x\" is a NaN'\n\nend program test_nan\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "ISNAN", + "docstr": "`ISNAN` — Test for a NaN\n\n### Description\n`ISNAN` tests whether a floating-point value is an IEEE\nNot-a-Number (NaN). \n\n\n### Syntax\n`ISNAN(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n\n### Return value\nReturns a default-kind `LOGICAL`. The returned value is `TRUE`if `X` is a NaN and `FALSE` otherwise.\n\n\n\n### Example\n```\n\n\nprogram test_nan\n\n  implicit none\n\n  real :: x\n\n  x = -1.0\n\n  x = sqrt(x)\n\n  if (isnan(x)) stop '\"x\" is a NaN'\n\nend program test_nan\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/IS_CONTIGUOUS.json b/src/docs/IS_CONTIGUOUS.json index 4ee2ebd5..25a165ac 100644 --- a/src/docs/IS_CONTIGUOUS.json +++ b/src/docs/IS_CONTIGUOUS.json @@ -1,4 +1,4 @@ { - "keyword":"IS_CONTIGUOUS", - "docstr":"`IS_CONTIGUOUS` — Test whether an array is contiguous\n\n### Description\nIS_CONTIGUOUS tests whether an array is contiguous.\n### Standard\nFortran 2008 and later.\n### Class\nInquiry function\n### Syntax\nRESULT = IS_CONTIGUOUS(ARRAY)\n### Arguments\n- ARRAY: Shall be an array of any type.\n### Return value\nReturns a LOGICAL of the default kind, which .TRUE. if ARRAY is contiguous and false otherwise.\n" -} \ No newline at end of file + "keyword": "IS_CONTIGUOUS", + "docstr": "`IS_CONTIGUOUS` — Test whether an array is contiguous\n\n### Description\nIS_CONTIGUOUS tests whether an array is contiguous.\n### Standard\nFortran 2008 and later.\n### Class\nInquiry function\n### Syntax\nRESULT = IS_CONTIGUOUS(ARRAY)\n### Arguments\n- ARRAY: Shall be an array of any type.\n### Return value\nReturns a LOGICAL of the default kind, which .TRUE. if ARRAY is contiguous and false otherwise.\n" +} diff --git a/src/docs/IS_IOSTAT_END.json b/src/docs/IS_IOSTAT_END.json index 5fb63139..59e169c8 100644 --- a/src/docs/IS_IOSTAT_END.json +++ b/src/docs/IS_IOSTAT_END.json @@ -1,4 +1,4 @@ { - "keyword":"IS_IOSTAT_END", - "docstr":"`IS_IOSTAT_END` — Test for end-of-file value\n\n### Description\n`IS_IOSTAT_END` tests whether an variable has the value of the I/O\nstatus “end of file”. The function is equivalent to comparing the variable\nwith the `IOSTAT_END` parameter of the intrinsic module\n`ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`RESULT = IS_IOSTAT_END(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns a `LOGICAL` of the default kind, which `.TRUE.` if\n`I` has the value which indicates an end of file condition for\n`IOSTAT=` specifiers, and is `.FALSE.` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM iostat\n\n  IMPLICIT NONE\n\n  INTEGER :: stat, i\n\n  OPEN(88, FILE='test.dat')\n\n  READ(88, *, IOSTAT=stat) i\n\n  IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE'\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "IS_IOSTAT_END", + "docstr": "`IS_IOSTAT_END` — Test for end-of-file value\n\n### Description\n`IS_IOSTAT_END` tests whether an variable has the value of the I/O\nstatus “end of file”. The function is equivalent to comparing the variable\nwith the `IOSTAT_END` parameter of the intrinsic module\n`ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`RESULT = IS_IOSTAT_END(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns a `LOGICAL` of the default kind, which `.TRUE.` if\n`I` has the value which indicates an end of file condition for\n`IOSTAT=` specifiers, and is `.FALSE.` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM iostat\n\n  IMPLICIT NONE\n\n  INTEGER :: stat, i\n\n  OPEN(88, FILE='test.dat')\n\n  READ(88, *, IOSTAT=stat) i\n\n  IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE'\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/IS_IOSTAT_EOR.json b/src/docs/IS_IOSTAT_EOR.json index 415c68e6..138b57af 100644 --- a/src/docs/IS_IOSTAT_EOR.json +++ b/src/docs/IS_IOSTAT_EOR.json @@ -1,4 +1,4 @@ { - "keyword":"IS_IOSTAT_EOR", - "docstr":"`IS_IOSTAT_EOR` — Test for end-of-record value\n\n### Description\n`IS_IOSTAT_EOR` tests whether an variable has the value of the I/O\nstatus “end of record”. The function is equivalent to comparing the\nvariable with the `IOSTAT_EOR` parameter of the intrinsic module\n`ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`RESULT = IS_IOSTAT_EOR(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns a `LOGICAL` of the default kind, which `.TRUE.` if\n`I` has the value which indicates an end of file condition for\n`IOSTAT=` specifiers, and is `.FALSE.` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM iostat\n\n  IMPLICIT NONE\n\n  INTEGER :: stat, i(50)\n\n  OPEN(88, FILE='test.dat', FORM='UNFORMATTED')\n\n  READ(88, IOSTAT=stat) i\n\n  IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD'\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "IS_IOSTAT_EOR", + "docstr": "`IS_IOSTAT_EOR` — Test for end-of-record value\n\n### Description\n`IS_IOSTAT_EOR` tests whether an variable has the value of the I/O\nstatus “end of record”. The function is equivalent to comparing the\nvariable with the `IOSTAT_EOR` parameter of the intrinsic module\n`ISO_FORTRAN_ENV`.\n\n\n\n### Syntax\n`RESULT = IS_IOSTAT_EOR(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nReturns a `LOGICAL` of the default kind, which `.TRUE.` if\n`I` has the value which indicates an end of file condition for\n`IOSTAT=` specifiers, and is `.FALSE.` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM iostat\n\n  IMPLICIT NONE\n\n  INTEGER :: stat, i(50)\n\n  OPEN(88, FILE='test.dat', FORM='UNFORMATTED')\n\n  READ(88, IOSTAT=stat) i\n\n  IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD'\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/ITIME.json b/src/docs/ITIME.json index 0508b494..add060aa 100644 --- a/src/docs/ITIME.json +++ b/src/docs/ITIME.json @@ -1,4 +1,4 @@ { - "keyword":"ITIME", - "docstr":"`ITIME` — Get current local time subroutine (hour/minutes/seconds)\n\n### Description\n`IDATE(VALUES)` Fills `VALUES` with the numerical values at the\ncurrent local time. The hour (in the range 1-24), minute (in the range 1-60),\nand seconds (in the range 1-60) appear in elements 1, 2, and 3 of `VALUES`,\nrespectively.\n\n\n\n### Syntax\n`CALL ITIME(VALUES)`\n\n\n### Arguments\n\n \n\nand the kind shall be the default integer kind.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\n```\n\n\nprogram test_itime\n\n  integer, dimension(3) :: tarray\n\n  call itime(tarray)\n\n  print *, tarray(1)\n\n  print *, tarray(2)\n\n  print *, tarray(3)\n\nend program test_itime\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" -} \ No newline at end of file + "keyword": "ITIME", + "docstr": "`ITIME` — Get current local time subroutine (hour/minutes/seconds)\n\n### Description\n`IDATE(VALUES)` Fills `VALUES` with the numerical values at the\ncurrent local time. The hour (in the range 1-24), minute (in the range 1-60),\nand seconds (in the range 1-60) appear in elements 1, 2, and 3 of `VALUES`,\nrespectively.\n\n\n\n### Syntax\n`CALL ITIME(VALUES)`\n\n\n### Arguments\n\n \n\nand the kind shall be the default integer kind.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\n```\n\n\nprogram test_itime\n\n  integer, dimension(3) :: tarray\n\n  call itime(tarray)\n\n  print *, tarray(1)\n\n  print *, tarray(2)\n\n  print *, tarray(3)\n\nend program test_itime\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" +} diff --git a/src/docs/KILL.json b/src/docs/KILL.json index 6c897843..03b465e0 100644 --- a/src/docs/KILL.json +++ b/src/docs/KILL.json @@ -1,4 +1,4 @@ { - "keyword":"KILL", - "docstr":"`KILL` — Send a signal to a process\n\n### Description\nSends the signal specified by `SIGNAL` to the process `PID`. \nSee `kill(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = KILL(C, VALUE)`
\n\n\n\n\n\n### Arguments\n\n \n, with\n`INTENT(IN)`
\n | `VALUE` | Shall be a scalar `INTEGER`, with\n`INTENT(IN)`
\n | `STATUS` | (Optional) status flag of type `INTEGER(4)` or\n`INTEGER(8)`. Returns 0 on success, or a system-specific error code\notherwise.\n\n\n\n\n\n\n### Standard\nSends the signal specified by `SIGNAL` to the process `PID`. \nSee `kill(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nABORT, EXIT\n" -} \ No newline at end of file + "keyword": "KILL", + "docstr": "`KILL` — Send a signal to a process\n\n### Description\nSends the signal specified by `SIGNAL` to the process `PID`. \nSee `kill(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = KILL(C, VALUE)`
\n\n\n\n\n\n### Arguments\n\n \n, with\n`INTENT(IN)`
\n | `VALUE` | Shall be a scalar `INTEGER`, with\n`INTENT(IN)`
\n | `STATUS` | (Optional) status flag of type `INTEGER(4)` or\n`INTEGER(8)`. Returns 0 on success, or a system-specific error code\notherwise.\n\n\n\n\n\n\n### Standard\nSends the signal specified by `SIGNAL` to the process `PID`. \nSee `kill(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nABORT, EXIT\n" +} diff --git a/src/docs/KIND.json b/src/docs/KIND.json index 6449d517..405a5166 100644 --- a/src/docs/KIND.json +++ b/src/docs/KIND.json @@ -1,4 +1,4 @@ { - "keyword":"KIND", - "docstr":"`KIND` — Kind of an entity\n\n### Description\n`KIND(X)` returns the kind value of the entity `X`.\n\n\n\n### Syntax\n`K = KIND(X)`\n\n\n### Arguments\n\n \n,\n`REAL`, `COMPLEX` or `CHARACTER`.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `INTEGER` and of the default\ninteger kind.\n\n\n\n### Example\n```\n\n\nprogram test_kind\n\n  integer,parameter :: kc = kind(' ')\n\n  integer,parameter :: kl = kind(.true.)\n\n\n  print *, \"The default character kind is \", kc\n\n  print *, \"The default logical kind is \", kl\n\nend program test_kind\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "KIND", + "docstr": "`KIND` — Kind of an entity\n\n### Description\n`KIND(X)` returns the kind value of the entity `X`.\n\n\n\n### Syntax\n`K = KIND(X)`\n\n\n### Arguments\n\n \n,\n`REAL`, `COMPLEX` or `CHARACTER`.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `INTEGER` and of the default\ninteger kind.\n\n\n\n### Example\n```\n\n\nprogram test_kind\n\n  integer,parameter :: kc = kind(' ')\n\n  integer,parameter :: kl = kind(.true.)\n\n\n  print *, \"The default character kind is \", kc\n\n  print *, \"The default logical kind is \", kl\n\nend program test_kind\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/LBOUND.json b/src/docs/LBOUND.json index 1fe6be00..18b81cb5 100644 --- a/src/docs/LBOUND.json +++ b/src/docs/LBOUND.json @@ -1,4 +1,4 @@ { - "keyword":"LBOUND", - "docstr":"`LBOUND` — Lower dimension bounds of an array\n\n### Description\nReturns the lower bounds of an array, or a single lower bound\nalong the `DIM` dimension. \n\n\n### Syntax\n`RESULT = LBOUND(ARRAY [, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array, of any type. \n\n | `DIM` | (Optional) Shall be a scalar `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is absent, the result is an array of the lower bounds of\n`ARRAY`. If `DIM` is present, the result is a scalar\ncorresponding to the lower bound of the array along that dimension. If\n`ARRAY` is an expression rather than a whole array or array\nstructure component, or if it has a zero extent along the relevant\ndimension, the lower bound is taken to be 1.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nUBOUND, LCOBOUND\n" -} \ No newline at end of file + "keyword": "LBOUND", + "docstr": "`LBOUND` — Lower dimension bounds of an array\n\n### Description\nReturns the lower bounds of an array, or a single lower bound\nalong the `DIM` dimension. \n\n\n### Syntax\n`RESULT = LBOUND(ARRAY [, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array, of any type. \n\n | `DIM` | (Optional) Shall be a scalar `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is absent, the result is an array of the lower bounds of\n`ARRAY`. If `DIM` is present, the result is a scalar\ncorresponding to the lower bound of the array along that dimension. If\n`ARRAY` is an expression rather than a whole array or array\nstructure component, or if it has a zero extent along the relevant\ndimension, the lower bound is taken to be 1.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nUBOUND, LCOBOUND\n" +} diff --git a/src/docs/LCOBOUND.json b/src/docs/LCOBOUND.json index a1d18c87..4ac8b183 100644 --- a/src/docs/LCOBOUND.json +++ b/src/docs/LCOBOUND.json @@ -1,4 +1,4 @@ { - "keyword":"LCOBOUND", - "docstr":"`LCOBOUND` — Lower codimension bounds of an array\n\n### Description\nReturns the lower bounds of a coarray, or a single lower cobound\nalong the `DIM` codimension. \n\n\n### Syntax\n`RESULT = LCOBOUND(COARRAY [, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an coarray, of any type. \n\n | `DIM` | (Optional) Shall be a scalar `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is absent, the result is an array of the lower cobounds of\n`COARRAY`. If `DIM` is present, the result is a scalar\ncorresponding to the lower cobound of the array along that codimension.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nUCOBOUND, LBOUND\n" -} \ No newline at end of file + "keyword": "LCOBOUND", + "docstr": "`LCOBOUND` — Lower codimension bounds of an array\n\n### Description\nReturns the lower bounds of a coarray, or a single lower cobound\nalong the `DIM` codimension. \n\n\n### Syntax\n`RESULT = LCOBOUND(COARRAY [, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an coarray, of any type. \n\n | `DIM` | (Optional) Shall be a scalar `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is absent, the result is an array of the lower cobounds of\n`COARRAY`. If `DIM` is present, the result is a scalar\ncorresponding to the lower cobound of the array along that codimension.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nUCOBOUND, LBOUND\n" +} diff --git a/src/docs/LEADZ.json b/src/docs/LEADZ.json index 870799b9..720e2799 100644 --- a/src/docs/LEADZ.json +++ b/src/docs/LEADZ.json @@ -1,4 +1,4 @@ { - "keyword":"LEADZ", - "docstr":"`LEADZ` — Number of leading zero bits of an integer\n\n### Description\n`LEADZ` returns the number of leading zero bits of an integer.\n\n\n\n### Syntax\n`RESULT = LEADZ(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe type of the return value is the default `INTEGER`. \nIf all the bits of `I` are zero, the result value is `BIT_SIZE(I)`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_leadz\n\n  WRITE (*,*) BIT_SIZE(1) ! prints 32\n\n  WRITE (*,*) LEADZ(1) ! prints 31\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, TRAILZ, POPCNT, POPPAR\n" -} \ No newline at end of file + "keyword": "LEADZ", + "docstr": "`LEADZ` — Number of leading zero bits of an integer\n\n### Description\n`LEADZ` returns the number of leading zero bits of an integer.\n\n\n\n### Syntax\n`RESULT = LEADZ(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe type of the return value is the default `INTEGER`. \nIf all the bits of `I` are zero, the result value is `BIT_SIZE(I)`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_leadz\n\n  WRITE (*,*) BIT_SIZE(1) ! prints 32\n\n  WRITE (*,*) LEADZ(1) ! prints 31\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, TRAILZ, POPCNT, POPPAR\n" +} diff --git a/src/docs/LEN.json b/src/docs/LEN.json index 32de964d..45688fb8 100644 --- a/src/docs/LEN.json +++ b/src/docs/LEN.json @@ -1,4 +1,4 @@ { - "keyword":"LEN", - "docstr":"`LEN` — Length of a character entity\n\n### Description\nReturns the length of a character string. If `STRING` is an array,\nthe length of an element of `STRING` is returned. Note that\n`STRING` need not be defined when this intrinsic is invoked, since\nonly the length, not the content, of `STRING` is needed.\n\n\n\n### Syntax\n`L = LEN(STRING [, KIND])`\n\n\n### Arguments\n\n \n | `STRING` | Shall be a scalar or array of type\n`CHARACTER`, with `INTENT(IN)`
\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LEN(STRING)` | `CHARACTER` | `INTEGER` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nLEN_TRIM, ADJUSTL, ADJUSTR\n" -} \ No newline at end of file + "keyword": "LEN", + "docstr": "`LEN` — Length of a character entity\n\n### Description\nReturns the length of a character string. If `STRING` is an array,\nthe length of an element of `STRING` is returned. Note that\n`STRING` need not be defined when this intrinsic is invoked, since\nonly the length, not the content, of `STRING` is needed.\n\n\n\n### Syntax\n`L = LEN(STRING [, KIND])`\n\n\n### Arguments\n\n \n | `STRING` | Shall be a scalar or array of type\n`CHARACTER`, with `INTENT(IN)`
\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LEN(STRING)` | `CHARACTER` | `INTEGER` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nLEN_TRIM, ADJUSTL, ADJUSTR\n" +} diff --git a/src/docs/LEN_TRIM.json b/src/docs/LEN_TRIM.json index 5c91b0f4..0ba076ea 100644 --- a/src/docs/LEN_TRIM.json +++ b/src/docs/LEN_TRIM.json @@ -1,4 +1,4 @@ { - "keyword":"LEN_TRIM", - "docstr":"`LEN_TRIM` — Length of a character entity without trailing blank characters\n\n### Description\nReturns the length of a character string, ignoring any trailing blanks.\n\n\n\n### Syntax\n`RESULT = LEN_TRIM(STRING [, KIND])`\n\n\n### Arguments\n\n \n,\nwith `INTENT(IN)`
\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLEN, ADJUSTL, ADJUSTR\n" -} \ No newline at end of file + "keyword": "LEN_TRIM", + "docstr": "`LEN_TRIM` — Length of a character entity without trailing blank characters\n\n### Description\nReturns the length of a character string, ignoring any trailing blanks.\n\n\n\n### Syntax\n`RESULT = LEN_TRIM(STRING [, KIND])`\n\n\n### Arguments\n\n \n,\nwith `INTENT(IN)`
\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLEN, ADJUSTL, ADJUSTR\n" +} diff --git a/src/docs/LGE.json b/src/docs/LGE.json index 151476cc..fb023ff2 100644 --- a/src/docs/LGE.json +++ b/src/docs/LGE.json @@ -1,4 +1,4 @@ { - "keyword":"LGE", - "docstr":"`LGE` — Lexical greater than or equal\n\n### Description\nDetermines whether one string is lexically greater than or equal to\nanother string, where the two strings are interpreted as containing\nASCII character codes. If the String A and String B are not the same\nlength, the shorter is compared as if spaces were appended to it to form\na value that has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LGE(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A >= STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGE(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGT, LLE, LLT\n" -} \ No newline at end of file + "keyword": "LGE", + "docstr": "`LGE` — Lexical greater than or equal\n\n### Description\nDetermines whether one string is lexically greater than or equal to\nanother string, where the two strings are interpreted as containing\nASCII character codes. If the String A and String B are not the same\nlength, the shorter is compared as if spaces were appended to it to form\na value that has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LGE(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A >= STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGE(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGT, LLE, LLT\n" +} diff --git a/src/docs/LGT.json b/src/docs/LGT.json index e1494c14..a73911b2 100644 --- a/src/docs/LGT.json +++ b/src/docs/LGT.json @@ -1,4 +1,4 @@ { - "keyword":"LGT", - "docstr":"`LGT` — Lexical greater than\n\n### Description\nDetermines whether one string is lexically greater than another string,\nwhere the two strings are interpreted as containing ASCII character\ncodes. If the String A and String B are not the same length, the\nshorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LGT(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A > STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGT(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LLE, LLT\n" -} \ No newline at end of file + "keyword": "LGT", + "docstr": "`LGT` — Lexical greater than\n\n### Description\nDetermines whether one string is lexically greater than another string,\nwhere the two strings are interpreted as containing ASCII character\ncodes. If the String A and String B are not the same length, the\nshorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LGT(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A > STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGT(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LLE, LLT\n" +} diff --git a/src/docs/LINK.json b/src/docs/LINK.json index b9b7370e..a6747629 100644 --- a/src/docs/LINK.json +++ b/src/docs/LINK.json @@ -1,4 +1,4 @@ { - "keyword":"LINK", - "docstr":"`LINK` — Create a hard link\n\n### Description\nMakes a (hard) link from file `PATH1` to `PATH2`. A null\ncharacter (`CHAR(0)`) can be used to mark the end of the names in\n`PATH1` and `PATH2`; otherwise, trailing blanks in the file\nnames are ignored. If the `STATUS` argument is supplied, it\ncontains 0 on success or a nonzero error code upon return; see\n`link(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = LINK(PATH1, PATH2)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `PATH2` | Shall be of default `CHARACTER` type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nSYMLNK, UNLINK\n" -} \ No newline at end of file + "keyword": "LINK", + "docstr": "`LINK` — Create a hard link\n\n### Description\nMakes a (hard) link from file `PATH1` to `PATH2`. A null\ncharacter (`CHAR(0)`) can be used to mark the end of the names in\n`PATH1` and `PATH2`; otherwise, trailing blanks in the file\nnames are ignored. If the `STATUS` argument is supplied, it\ncontains 0 on success or a nonzero error code upon return; see\n`link(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = LINK(PATH1, PATH2)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `PATH2` | Shall be of default `CHARACTER` type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nSYMLNK, UNLINK\n" +} diff --git a/src/docs/LLE.json b/src/docs/LLE.json index e94e0f1c..efbe5316 100644 --- a/src/docs/LLE.json +++ b/src/docs/LLE.json @@ -1,4 +1,4 @@ { - "keyword":"LLE", - "docstr":"`LLE` — Lexical less than or equal\n\n### Description\nDetermines whether one string is lexically less than or equal to another\nstring, where the two strings are interpreted as containing ASCII\ncharacter codes. If the String A and String B are not the same length,\nthe shorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LLE(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A <= STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LLE(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LGT, LLT\n" -} \ No newline at end of file + "keyword": "LLE", + "docstr": "`LLE` — Lexical less than or equal\n\n### Description\nDetermines whether one string is lexically less than or equal to another\nstring, where the two strings are interpreted as containing ASCII\ncharacter codes. If the String A and String B are not the same length,\nthe shorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LLE(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A <= STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LLE(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LGT, LLT\n" +} diff --git a/src/docs/LLT.json b/src/docs/LLT.json index 2a1d784c..f4da7198 100644 --- a/src/docs/LLT.json +++ b/src/docs/LLT.json @@ -1,4 +1,4 @@ { - "keyword":"LLT", - "docstr":"`LLT` — Lexical less than\n\n### Description\nDetermines whether one string is lexically less than another string,\nwhere the two strings are interpreted as containing ASCII character\ncodes. If the String A and String B are not the same length, the\nshorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LLT(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A < STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LLT(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LGT, LLE\n" -} \ No newline at end of file + "keyword": "LLT", + "docstr": "`LLT` — Lexical less than\n\n### Description\nDetermines whether one string is lexically less than another string,\nwhere the two strings are interpreted as containing ASCII character\ncodes. If the String A and String B are not the same length, the\nshorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LLT(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A < STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LLT(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LGT, LLE\n" +} diff --git a/src/docs/LNBLNK.json b/src/docs/LNBLNK.json index 9897e858..01a68828 100644 --- a/src/docs/LNBLNK.json +++ b/src/docs/LNBLNK.json @@ -1,4 +1,4 @@ { - "keyword":"LNBLNK", - "docstr":"`LNBLNK` — Index of the last non-blank character in a string\n\n### Description\nReturns the length of a character string, ignoring any trailing blanks. \nThis is identical to the standard `LEN_TRIM` intrinsic, and is only\nincluded for backwards compatibility.\n\n\n\n### Syntax\n`RESULT = LNBLNK(STRING)`\n\n\n### Arguments\n\n \n,\nwith `INTENT(IN)`
\n\n\n\n\n\n### Return value\nThe return value is of `INTEGER(kind=4)` type.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINDEX intrinsic, LEN_TRIM\n" -} \ No newline at end of file + "keyword": "LNBLNK", + "docstr": "`LNBLNK` — Index of the last non-blank character in a string\n\n### Description\nReturns the length of a character string, ignoring any trailing blanks. \nThis is identical to the standard `LEN_TRIM` intrinsic, and is only\nincluded for backwards compatibility.\n\n\n\n### Syntax\n`RESULT = LNBLNK(STRING)`\n\n\n### Arguments\n\n \n,\nwith `INTENT(IN)`
\n\n\n\n\n\n### Return value\nThe return value is of `INTEGER(kind=4)` type.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINDEX intrinsic, LEN_TRIM\n" +} diff --git a/src/docs/LOC.json b/src/docs/LOC.json index 52182449..aee2866d 100644 --- a/src/docs/LOC.json +++ b/src/docs/LOC.json @@ -1,4 +1,4 @@ { - "keyword":"LOC", - "docstr":"`LOC` — Returns the address of a variable\n\n### Description\n`LOC(X)` returns the address of `X` as an integer.\n\n\n\n### Syntax\n`RESULT = LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Variable of any type.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`, with a `KIND`corresponding to the size (in bytes) of a memory address on the target\nmachine.\n\n\n\n### Example\n```\n\n\nprogram test_loc\n\n  integer :: i\n\n  real :: r\n\n  i = loc(r)\n\n  print *, i\n\nend program test_loc\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "LOC", + "docstr": "`LOC` — Returns the address of a variable\n\n### Description\n`LOC(X)` returns the address of `X` as an integer.\n\n\n\n### Syntax\n`RESULT = LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Variable of any type.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`, with a `KIND`corresponding to the size (in bytes) of a memory address on the target\nmachine.\n\n\n\n### Example\n```\n\n\nprogram test_loc\n\n  integer :: i\n\n  real :: r\n\n  i = loc(r)\n\n  print *, i\n\nend program test_loc\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/LOG.json b/src/docs/LOG.json index 0455a6a9..d0ca63c9 100644 --- a/src/docs/LOG.json +++ b/src/docs/LOG.json @@ -1,4 +1,4 @@ { - "keyword":"LOG", - "docstr":"`LOG` — Natural logarithm function\n\n### Description\n`LOG(X)` computes the natural logarithm of `X`, i.e. the\nlogarithm to the base e.\n\n\n\n### Syntax\n`RESULT = LOG(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`. \nIf `X` is `COMPLEX`, the imaginary part \\omega is in the range\n-\\pi < \\omega \\leq \\pi.\n\n\n\n### Example\n```\n\n\nprogram test_log\n\n  real(8) :: x = 2.7182818284590451_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = log(x) ! will yield (approximately) 1\n\n  z = log(z)\n\nend program test_log\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG(X)` | `REAL(4) X` | `REAL(4)` | f95, gnu\n\n | `DLOG(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CLOG(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "LOG", + "docstr": "`LOG` — Natural logarithm function\n\n### Description\n`LOG(X)` computes the natural logarithm of `X`, i.e. the\nlogarithm to the base e.\n\n\n\n### Syntax\n`RESULT = LOG(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`. \nIf `X` is `COMPLEX`, the imaginary part \\omega is in the range\n-\\pi < \\omega \\leq \\pi.\n\n\n\n### Example\n```\n\n\nprogram test_log\n\n  real(8) :: x = 2.7182818284590451_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = log(x) ! will yield (approximately) 1\n\n  z = log(z)\n\nend program test_log\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG(X)` | `REAL(4) X` | `REAL(4)` | f95, gnu\n\n | `DLOG(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CLOG(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/LOG10.json b/src/docs/LOG10.json index 6c1dbc9d..505f774d 100644 --- a/src/docs/LOG10.json +++ b/src/docs/LOG10.json @@ -1,4 +1,4 @@ { - "keyword":"LOG10", - "docstr":"`LOG10` — Base 10 logarithm function\n\n### Description\n`LOG10(X)` computes the base 10 logarithm of `X`.\n\n\n\n### Syntax\n`RESULT = LOG10(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_log10\n\n  real(8) :: x = 10.0_8\n\n  x = log10(x)\n\nend program test_log10\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG10(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DLOG10(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "LOG10", + "docstr": "`LOG10` — Base 10 logarithm function\n\n### Description\n`LOG10(X)` computes the base 10 logarithm of `X`.\n\n\n\n### Syntax\n`RESULT = LOG10(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_log10\n\n  real(8) :: x = 10.0_8\n\n  x = log10(x)\n\nend program test_log10\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG10(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DLOG10(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/LOGICAL.json b/src/docs/LOGICAL.json index 8d30697e..a62e16e4 100644 --- a/src/docs/LOGICAL.json +++ b/src/docs/LOGICAL.json @@ -1,4 +1,4 @@ { - "keyword":"LOGICAL", - "docstr":"`LOGICAL` — Convert to logical type\n\n### Description\nConverts one kind of `LOGICAL` variable to another.\n\n\n\n### Syntax\n`RESULT = LOGICAL(L [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is a `LOGICAL` value equal to `L`, with a\nkind corresponding to `KIND`, or of the default logical kind if\n`KIND` is not given.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINT, REAL, CMPLX\n" -} \ No newline at end of file + "keyword": "LOGICAL", + "docstr": "`LOGICAL` — Convert to logical type\n\n### Description\nConverts one kind of `LOGICAL` variable to another.\n\n\n\n### Syntax\n`RESULT = LOGICAL(L [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is a `LOGICAL` value equal to `L`, with a\nkind corresponding to `KIND`, or of the default logical kind if\n`KIND` is not given.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINT, REAL, CMPLX\n" +} diff --git a/src/docs/LOG_GAMMA.json b/src/docs/LOG_GAMMA.json index 64802e72..61ca6394 100644 --- a/src/docs/LOG_GAMMA.json +++ b/src/docs/LOG_GAMMA.json @@ -1,4 +1,4 @@ { - "keyword":"LOG_GAMMA", - "docstr":"`LOG_GAMMA` — Logarithm of the Gamma function\n\n### Description\n`LOG_GAMMA(X)` computes the natural logarithm of the absolute value\nof the Gamma (\\Gamma) function.\n\n\n\n### Syntax\n`X = LOG_GAMMA(X)`\n\n\n### Arguments\n\n \n and neither zero\nnor a negative integer.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` of the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_log_gamma\n\n  real :: x = 1.0\n\n  x = lgamma(x) ! returns 0.0\n\nend program test_log_gamma\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGAMMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `ALGAMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `DLGAMA(X)` | `REAL(8) X` | `REAL(8)` | GNU Extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nGamma function: GAMMA\n\n " -} \ No newline at end of file + "keyword": "LOG_GAMMA", + "docstr": "`LOG_GAMMA` — Logarithm of the Gamma function\n\n### Description\n`LOG_GAMMA(X)` computes the natural logarithm of the absolute value\nof the Gamma (\\Gamma) function.\n\n\n\n### Syntax\n`X = LOG_GAMMA(X)`\n\n\n### Arguments\n\n \n and neither zero\nnor a negative integer.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` of the same kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_log_gamma\n\n  real :: x = 1.0\n\n  x = lgamma(x) ! returns 0.0\n\nend program test_log_gamma\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGAMMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `ALGAMA(X)` | `REAL(4) X` | `REAL(4)` | GNU Extension\n\n | `DLGAMA(X)` | `REAL(8) X` | `REAL(8)` | GNU Extension\n\n\n\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nGamma function: GAMMA\n\n " +} diff --git a/src/docs/LONG.json b/src/docs/LONG.json index 58d5550b..c2cebc1b 100644 --- a/src/docs/LONG.json +++ b/src/docs/LONG.json @@ -1,4 +1,4 @@ { - "keyword":"LONG", - "docstr":"`LONG` — Convert to integer type\n\n### Description\nConvert to a `KIND=4` integer type, which is the same size as a C\n`long` integer. This is equivalent to the standard `INT`intrinsic with an optional argument of `KIND=4`, and is only\nincluded for backwards compatibility.\n\n\n\n### Syntax\n`RESULT = LONG(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is a `INTEGER(4)` variable.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINT, INT2, INT8\n" -} \ No newline at end of file + "keyword": "LONG", + "docstr": "`LONG` — Convert to integer type\n\n### Description\nConvert to a `KIND=4` integer type, which is the same size as a C\n`long` integer. This is equivalent to the standard `INT`intrinsic with an optional argument of `KIND=4`, and is only\nincluded for backwards compatibility.\n\n\n\n### Syntax\n`RESULT = LONG(A)`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is a `INTEGER(4)` variable.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINT, INT2, INT8\n" +} diff --git a/src/docs/LSHIFT.json b/src/docs/LSHIFT.json index 0a325af4..c0f7ad62 100644 --- a/src/docs/LSHIFT.json +++ b/src/docs/LSHIFT.json @@ -1,4 +1,4 @@ { - "keyword":"LSHIFT", - "docstr":"`LSHIFT` — Left shift bits\n\n### Description\n`LSHIFT` returns a value corresponding to `I` with all of the\nbits shifted left by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the left end are lost; zeros are shifted in from\nthe opposite end.\n\n \nThis function has been superseded by the `ISHFT` intrinsic, which\nis standard in Fortran 95 and later, and the `SHIFTL` intrinsic,\nwhich is standard in Fortran 2008 and later.\n\n\n\n\n### Syntax\n`RESULT = LSHIFT(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nISHFT, ISHFTC, RSHIFT, SHIFTA, SHIFTL,\nSHIFTR\n\n " -} \ No newline at end of file + "keyword": "LSHIFT", + "docstr": "`LSHIFT` — Left shift bits\n\n### Description\n`LSHIFT` returns a value corresponding to `I` with all of the\nbits shifted left by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the left end are lost; zeros are shifted in from\nthe opposite end.\n\n \nThis function has been superseded by the `ISHFT` intrinsic, which\nis standard in Fortran 95 and later, and the `SHIFTL` intrinsic,\nwhich is standard in Fortran 2008 and later.\n\n\n\n\n### Syntax\n`RESULT = LSHIFT(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nISHFT, ISHFTC, RSHIFT, SHIFTA, SHIFTL,\nSHIFTR\n\n " +} diff --git a/src/docs/LSTAT.json b/src/docs/LSTAT.json index 14e2faaf..85e551ca 100644 --- a/src/docs/LSTAT.json +++ b/src/docs/LSTAT.json @@ -1,4 +1,4 @@ { - "keyword":"LSTAT", - "docstr":"`LSTAT` — Get file status\n\n### Description\n`LSTAT` is identical to STAT, except that if path is a\nsymbolic link, then the link itself is statted, not the file that it\nrefers to.\n\n \nThe elements in `VALUES` are the same as described by STAT.\n\n \n\nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = LSTAT(NAME, VALUES)`
\n\n\n\n\n\n### Arguments\n\n \n of the default\nkind, a valid path within the file system. \n\n | `VALUES` | The type shall be `INTEGER(4), DIMENSION(13)`. \n\n | `STATUS` | (Optional) status flag of type `INTEGER(4)`. \nReturns 0 on success and a system specific error code otherwise.\n\n\n\n\n\n\n### Example\nSee STAT for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nTo stat an open file: FSTAT, to stat a file: STAT\n" -} \ No newline at end of file + "keyword": "LSTAT", + "docstr": "`LSTAT` — Get file status\n\n### Description\n`LSTAT` is identical to STAT, except that if path is a\nsymbolic link, then the link itself is statted, not the file that it\nrefers to.\n\n \nThe elements in `VALUES` are the same as described by STAT.\n\n \n\nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = LSTAT(NAME, VALUES)`
\n\n\n\n\n\n### Arguments\n\n \n of the default\nkind, a valid path within the file system. \n\n | `VALUES` | The type shall be `INTEGER(4), DIMENSION(13)`. \n\n | `STATUS` | (Optional) status flag of type `INTEGER(4)`. \nReturns 0 on success and a system specific error code otherwise.\n\n\n\n\n\n\n### Example\nSee STAT for an example.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nTo stat an open file: FSTAT, to stat a file: STAT\n" +} diff --git a/src/docs/LTIME.json b/src/docs/LTIME.json index 9480cf0d..529db386 100644 --- a/src/docs/LTIME.json +++ b/src/docs/LTIME.json @@ -1,4 +1,4 @@ { - "keyword":"LTIME", - "docstr":"`LTIME` — Convert time to local time info\n\n### Description\nGiven a system time value `TIME` (as provided by the `TIME8`intrinsic), fills `VALUES` with values extracted from it appropriate\nto the local time zone using `localtime(3)`.\n\n\n\n### Syntax\n`CALL LTIME(TIME, VALUES)`\n\n\n### Arguments\n\n \n scalar expression\ncorresponding to a system time, with `INTENT(IN)`. \n\n | `VALUES` | A default `INTEGER` array with 9 elements,\nwith `INTENT(OUT)`.\n\n\n\n\n\n\n### Return value\nThe elements of `VALUES` are assigned as follows:\n
    \n
  1. Seconds after the minute, range 0–59 or 0–61 to allow for leap\nseconds\n
  2. Minutes after the hour, range 0–59\n
  3. Hours past midnight, range 0–23\n
  4. Day of month, range 0–31\n
  5. Number of months since January, range 0–12\n
  6. Years since 1900\n
  7. Number of days since Sunday, range 0–6\n
  8. Days since January 1\n
  9. Daylight savings indicator: positive if daylight savings is in\neffect, zero if not, and negative if the information is not available.\n
\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nCTIME, GMTIME, TIME, TIME8\n\n " -} \ No newline at end of file + "keyword": "LTIME", + "docstr": "`LTIME` — Convert time to local time info\n\n### Description\nGiven a system time value `TIME` (as provided by the `TIME8`intrinsic), fills `VALUES` with values extracted from it appropriate\nto the local time zone using `localtime(3)`.\n\n\n\n### Syntax\n`CALL LTIME(TIME, VALUES)`\n\n\n### Arguments\n\n \n scalar expression\ncorresponding to a system time, with `INTENT(IN)`. \n\n | `VALUES` | A default `INTEGER` array with 9 elements,\nwith `INTENT(OUT)`.\n\n\n\n\n\n\n### Return value\nThe elements of `VALUES` are assigned as follows:\n
    \n
  1. Seconds after the minute, range 0–59 or 0–61 to allow for leap\nseconds\n
  2. Minutes after the hour, range 0–59\n
  3. Hours past midnight, range 0–23\n
  4. Day of month, range 0–31\n
  5. Number of months since January, range 0–12\n
  6. Years since 1900\n
  7. Number of days since Sunday, range 0–6\n
  8. Days since January 1\n
  9. Daylight savings indicator: positive if daylight savings is in\neffect, zero if not, and negative if the information is not available.\n
\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nCTIME, GMTIME, TIME, TIME8\n\n " +} diff --git a/src/docs/MALLOC.json b/src/docs/MALLOC.json index 86a26e18..89acab3c 100644 --- a/src/docs/MALLOC.json +++ b/src/docs/MALLOC.json @@ -1,4 +1,4 @@ { - "keyword":"MALLOC", - "docstr":"`MALLOC` — Allocate dynamic memory\n\n### Description\n`MALLOC(SIZE)` allocates `SIZE` bytes of dynamic memory and\nreturns the address of the allocated memory. The `MALLOC` intrinsic\nis an extension intended to be used with Cray pointers, and is provided\nin GNU Fortran to allow the user to compile legacy code. For new code\nusing Fortran 95 pointers, the memory allocation intrinsic is\n`ALLOCATE`.\n\n\n\n### Syntax\n`PTR = MALLOC(SIZE)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(K)`, with `K` such that\nvariables of type `INTEGER(K)` have the same size as\nC pointers (`sizeof(void *)`).\n\n\n\n### Example\nThe following example demonstrates the use of `MALLOC` and\n`FREE` with Cray pointers.\n\n ```\n\n\nprogram test_malloc\n\n  implicit none\n\n  integer i\n\n  real*8 x(*), z\n\n  pointer(ptr_x,x)\n\n\n  ptr_x = malloc(20*8)\n\n  do i = 1, 20\n\n    x(i) = sqrt(1.0d0 / i)\n\n  end do\n\n  z = 0\n\n  do i = 1, 20\n\n    z = z + x(i)\n\n    print *, z\n\n  end do\n\n  call free(ptr_x)\n\nend program test_malloc\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFREE\n" -} \ No newline at end of file + "keyword": "MALLOC", + "docstr": "`MALLOC` — Allocate dynamic memory\n\n### Description\n`MALLOC(SIZE)` allocates `SIZE` bytes of dynamic memory and\nreturns the address of the allocated memory. The `MALLOC` intrinsic\nis an extension intended to be used with Cray pointers, and is provided\nin GNU Fortran to allow the user to compile legacy code. For new code\nusing Fortran 95 pointers, the memory allocation intrinsic is\n`ALLOCATE`.\n\n\n\n### Syntax\n`PTR = MALLOC(SIZE)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(K)`, with `K` such that\nvariables of type `INTEGER(K)` have the same size as\nC pointers (`sizeof(void *)`).\n\n\n\n### Example\nThe following example demonstrates the use of `MALLOC` and\n`FREE` with Cray pointers.\n\n ```\n\n\nprogram test_malloc\n\n  implicit none\n\n  integer i\n\n  real*8 x(*), z\n\n  pointer(ptr_x,x)\n\n\n  ptr_x = malloc(20*8)\n\n  do i = 1, 20\n\n    x(i) = sqrt(1.0d0 / i)\n\n  end do\n\n  z = 0\n\n  do i = 1, 20\n\n    z = z + x(i)\n\n    print *, z\n\n  end do\n\n  call free(ptr_x)\n\nend program test_malloc\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFREE\n" +} diff --git a/src/docs/MASKL.json b/src/docs/MASKL.json index bb27f7c5..f9f13f57 100644 --- a/src/docs/MASKL.json +++ b/src/docs/MASKL.json @@ -1,4 +1,4 @@ { - "keyword":"MASKL", - "docstr":"`MASKL` — Left justified mask\n\n### Description\n`MASKL(I[, KIND])` has its leftmost `I` bits set to 1, and the\nremaining bits set to 0.\n\n\n\n### Syntax\n`RESULT = MASKL(I[, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | Shall be a scalar constant expression of type\n`INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`. If `KIND` is present, it\nspecifies the kind value of the return type; otherwise, it is of the\ndefault integer kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMASKR\n" -} \ No newline at end of file + "keyword": "MASKL", + "docstr": "`MASKL` — Left justified mask\n\n### Description\n`MASKL(I[, KIND])` has its leftmost `I` bits set to 1, and the\nremaining bits set to 0.\n\n\n\n### Syntax\n`RESULT = MASKL(I[, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | Shall be a scalar constant expression of type\n`INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`. If `KIND` is present, it\nspecifies the kind value of the return type; otherwise, it is of the\ndefault integer kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMASKR\n" +} diff --git a/src/docs/MASKR.json b/src/docs/MASKR.json index 17793802..0190e419 100644 --- a/src/docs/MASKR.json +++ b/src/docs/MASKR.json @@ -1,4 +1,4 @@ { - "keyword":"MASKR", - "docstr":"`MASKR` — Right justified mask\n\n### Description\n`MASKL(I[, KIND])` has its rightmost `I` bits set to 1, and the\nremaining bits set to 0.\n\n\n\n### Syntax\n`RESULT = MASKR(I[, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | Shall be a scalar constant expression of type\n`INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`. If `KIND` is present, it\nspecifies the kind value of the return type; otherwise, it is of the\ndefault integer kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMASKL\n" -} \ No newline at end of file + "keyword": "MASKR", + "docstr": "`MASKR` — Right justified mask\n\n### Description\n`MASKL(I[, KIND])` has its rightmost `I` bits set to 1, and the\nremaining bits set to 0.\n\n\n\n### Syntax\n`RESULT = MASKR(I[, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | Shall be a scalar constant expression of type\n`INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER`. If `KIND` is present, it\nspecifies the kind value of the return type; otherwise, it is of the\ndefault integer kind.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMASKL\n" +} diff --git a/src/docs/MATMUL.json b/src/docs/MATMUL.json index 40a1d9d1..fb39248e 100644 --- a/src/docs/MATMUL.json +++ b/src/docs/MATMUL.json @@ -1,4 +1,4 @@ { - "keyword":"MATMUL", - "docstr":"`MATMUL` — matrix multiplication\n\n### Description\nPerforms a matrix multiplication on numeric or logical arguments.\n\n\n\n### Syntax\n`RESULT = MATMUL(MATRIX_A, MATRIX_B)`\n\n\n### Arguments\n\n \n,\n`REAL`, `COMPLEX`, or `LOGICAL` type, with a rank of\none or two. \n\n | `MATRIX_B` | An array of `INTEGER`,\n`REAL`, or `COMPLEX` type if `MATRIX_A` is of a numeric\ntype; otherwise, an array of `LOGICAL` type. The rank shall be one\nor two, and the first (or only) dimension of `MATRIX_B` shall be\nequal to the last (or only) dimension of `MATRIX_A`.\n\n\n\n\n\n\n### Return value\nThe matrix product of `MATRIX_A` and `MATRIX_B`. The type and\nkind of the result follow the usual type and kind promotion rules, as\nfor the `*` or `.AND.` operators.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\n" -} \ No newline at end of file + "keyword": "MATMUL", + "docstr": "`MATMUL` — matrix multiplication\n\n### Description\nPerforms a matrix multiplication on numeric or logical arguments.\n\n\n\n### Syntax\n`RESULT = MATMUL(MATRIX_A, MATRIX_B)`\n\n\n### Arguments\n\n \n,\n`REAL`, `COMPLEX`, or `LOGICAL` type, with a rank of\none or two. \n\n | `MATRIX_B` | An array of `INTEGER`,\n`REAL`, or `COMPLEX` type if `MATRIX_A` is of a numeric\ntype; otherwise, an array of `LOGICAL` type. The rank shall be one\nor two, and the first (or only) dimension of `MATRIX_B` shall be\nequal to the last (or only) dimension of `MATRIX_A`.\n\n\n\n\n\n\n### Return value\nThe matrix product of `MATRIX_A` and `MATRIX_B`. The type and\nkind of the result follow the usual type and kind promotion rules, as\nfor the `*` or `.AND.` operators.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\n" +} diff --git a/src/docs/MAX.json b/src/docs/MAX.json index 46900e97..bb320f58 100644 --- a/src/docs/MAX.json +++ b/src/docs/MAX.json @@ -1,4 +1,4 @@ { - "keyword":"MAX", - "docstr":"`MAX` — Maximum value of an argument list\n\n### Description\nReturns the argument with the largest (most positive) value.\n\n\n\n### Syntax\n`RESULT = MAX(A1, A2 [, A3 [, ...]])`\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `A2`, `A3`, ... | An expression of the same type and kind\nas `A1`. (As a GNU extension, arguments of different kinds are\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return value corresponds to the maximum value among the arguments,\nand has the same type and kind as the first argument.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `MAX0(A1)` | `INTEGER(4) A1` | `INTEGER(4)` | Fortran 77 and later\n\n | `AMAX0(A1)` | `INTEGER(4) A1` | `REAL(MAX(X))` | Fortran 77 and later\n\n | `MAX1(A1)` | `REAL A1` | `INT(MAX(X))` | Fortran 77 and later\n\n | `AMAX1(A1)` | `REAL(4) A1` | `REAL(4)` | Fortran 77 and later\n\n | `DMAX1(A1)` | `REAL(8) A1` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMAXLOC MAXVAL, MIN\n\n " -} \ No newline at end of file + "keyword": "MAX", + "docstr": "`MAX` — Maximum value of an argument list\n\n### Description\nReturns the argument with the largest (most positive) value.\n\n\n\n### Syntax\n`RESULT = MAX(A1, A2 [, A3 [, ...]])`\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `A2`, `A3`, ... | An expression of the same type and kind\nas `A1`. (As a GNU extension, arguments of different kinds are\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return value corresponds to the maximum value among the arguments,\nand has the same type and kind as the first argument.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `MAX0(A1)` | `INTEGER(4) A1` | `INTEGER(4)` | Fortran 77 and later\n\n | `AMAX0(A1)` | `INTEGER(4) A1` | `REAL(MAX(X))` | Fortran 77 and later\n\n | `MAX1(A1)` | `REAL A1` | `INT(MAX(X))` | Fortran 77 and later\n\n | `AMAX1(A1)` | `REAL(4) A1` | `REAL(4)` | Fortran 77 and later\n\n | `DMAX1(A1)` | `REAL(8) A1` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMAXLOC MAXVAL, MIN\n\n " +} diff --git a/src/docs/MAXEXPONENT.json b/src/docs/MAXEXPONENT.json index 195923a8..6b683d9f 100644 --- a/src/docs/MAXEXPONENT.json +++ b/src/docs/MAXEXPONENT.json @@ -1,4 +1,4 @@ { - "keyword":"MAXEXPONENT", - "docstr":"`MAXEXPONENT` — Maximum exponent of a real kind\n\n### Description\n`MAXEXPONENT(X)` returns the maximum exponent in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = MAXEXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram exponents\n\n  real(kind=4) :: x\n\n  real(kind=8) :: y\n\n\n  print *, minexponent(x), maxexponent(x)\n\n  print *, minexponent(y), maxexponent(y)\n\nend program exponents\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "MAXEXPONENT", + "docstr": "`MAXEXPONENT` — Maximum exponent of a real kind\n\n### Description\n`MAXEXPONENT(X)` returns the maximum exponent in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = MAXEXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram exponents\n\n  real(kind=4) :: x\n\n  real(kind=8) :: y\n\n\n  print *, minexponent(x), maxexponent(x)\n\n  print *, minexponent(y), maxexponent(y)\n\nend program exponents\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/MAXLOC.json b/src/docs/MAXLOC.json index 8556d5d1..0fdd4620 100644 --- a/src/docs/MAXLOC.json +++ b/src/docs/MAXLOC.json @@ -1,4 +1,4 @@ { - "keyword":"MAXLOC", - "docstr":"`MAXLOC` — Location of the maximum value within an array\n\n### Description\nDetermines the location of the element in the array with the maximum\nvalue, or, if the `DIM` argument is supplied, determines the\nlocations of the maximum element along each row of the array in the\n`DIM` direction. If `MASK` is present, only the elements for\nwhich `MASK` is `.TRUE.` are considered. If more than one\nelement in the array has the maximum value, the location returned is\nthat of the first such element in array element order. If the array has\nzero size, or all of the elements of `MASK` are `.FALSE.`, then\nthe result is an array of zeroes. Similarly, if `DIM` is supplied\nand all of the elements of `MASK` along a given row are zero, the\nresult value for that row is zero.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = MAXLOC(ARRAY [, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `DIM` | (Optional) Shall be a scalar of type\n`INTEGER`, with a value between one and the rank of `ARRAY`,\ninclusive. It may not be an optional dummy argument. \n\n | `MASK` | Shall be an array of type `LOGICAL`,\nand conformable with `ARRAY`.\n\n\n\n\n\n\n### Return value\nIf `DIM` is absent, the result is a rank-one array with a length\nequal to the rank of `ARRAY`. If `DIM` is present, the result\nis an array with a rank one less than the rank of `ARRAY`, and a\nsize corresponding to the size of `ARRAY` with the `DIM`\ndimension removed. If `DIM` is present and `ARRAY` has a rank\nof one, the result is a scalar. In all cases, the result is of default\n`INTEGER` type.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nMAX, MAXVAL\n\n " -} \ No newline at end of file + "keyword": "MAXLOC", + "docstr": "`MAXLOC` — Location of the maximum value within an array\n\n### Description\nDetermines the location of the element in the array with the maximum\nvalue, or, if the `DIM` argument is supplied, determines the\nlocations of the maximum element along each row of the array in the\n`DIM` direction. If `MASK` is present, only the elements for\nwhich `MASK` is `.TRUE.` are considered. If more than one\nelement in the array has the maximum value, the location returned is\nthat of the first such element in array element order. If the array has\nzero size, or all of the elements of `MASK` are `.FALSE.`, then\nthe result is an array of zeroes. Similarly, if `DIM` is supplied\nand all of the elements of `MASK` along a given row are zero, the\nresult value for that row is zero.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = MAXLOC(ARRAY [, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `DIM` | (Optional) Shall be a scalar of type\n`INTEGER`, with a value between one and the rank of `ARRAY`,\ninclusive. It may not be an optional dummy argument. \n\n | `MASK` | Shall be an array of type `LOGICAL`,\nand conformable with `ARRAY`.\n\n\n\n\n\n\n### Return value\nIf `DIM` is absent, the result is a rank-one array with a length\nequal to the rank of `ARRAY`. If `DIM` is present, the result\nis an array with a rank one less than the rank of `ARRAY`, and a\nsize corresponding to the size of `ARRAY` with the `DIM`\ndimension removed. If `DIM` is present and `ARRAY` has a rank\nof one, the result is a scalar. In all cases, the result is of default\n`INTEGER` type.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nMAX, MAXVAL\n\n " +} diff --git a/src/docs/MAXVAL.json b/src/docs/MAXVAL.json index 2ba1f535..c2e1ff71 100644 --- a/src/docs/MAXVAL.json +++ b/src/docs/MAXVAL.json @@ -1,4 +1,4 @@ { - "keyword":"MAXVAL", - "docstr":"`MAXVAL` — Maximum value of an array\n\n### Description\nDetermines the maximum value of the elements in an array value, or, if\nthe `DIM` argument is supplied, determines the maximum value along\neach row of the array in the `DIM` direction. If `MASK` is\npresent, only the elements for which `MASK` is `.TRUE.` are\nconsidered. If the array has zero size, or all of the elements of\n`MASK` are `.FALSE.`, then the result is `-HUGE(ARRAY)`if `ARRAY` is numeric, or a string of nulls if `ARRAY` is of character\ntype.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = MAXVAL(ARRAY [, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `DIM` | (Optional) Shall be a scalar of type\n`INTEGER`, with a value between one and the rank of `ARRAY`,\ninclusive. It may not be an optional dummy argument. \n\n | `MASK` | Shall be an array of type `LOGICAL`,\nand conformable with `ARRAY`.\n\n\n\n\n\n\n### Return value\nIf `DIM` is absent, or if `ARRAY` has a rank of one, the result\nis a scalar. If `DIM` is present, the result is an array with a\nrank one less than the rank of `ARRAY`, and a size corresponding to\nthe size of `ARRAY` with the `DIM` dimension removed. In all\ncases, the result is of the same type and kind as `ARRAY`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nMAX, MAXLOC\n" -} \ No newline at end of file + "keyword": "MAXVAL", + "docstr": "`MAXVAL` — Maximum value of an array\n\n### Description\nDetermines the maximum value of the elements in an array value, or, if\nthe `DIM` argument is supplied, determines the maximum value along\neach row of the array in the `DIM` direction. If `MASK` is\npresent, only the elements for which `MASK` is `.TRUE.` are\nconsidered. If the array has zero size, or all of the elements of\n`MASK` are `.FALSE.`, then the result is `-HUGE(ARRAY)`if `ARRAY` is numeric, or a string of nulls if `ARRAY` is of character\ntype.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = MAXVAL(ARRAY [, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `DIM` | (Optional) Shall be a scalar of type\n`INTEGER`, with a value between one and the rank of `ARRAY`,\ninclusive. It may not be an optional dummy argument. \n\n | `MASK` | Shall be an array of type `LOGICAL`,\nand conformable with `ARRAY`.\n\n\n\n\n\n\n### Return value\nIf `DIM` is absent, or if `ARRAY` has a rank of one, the result\nis a scalar. If `DIM` is present, the result is an array with a\nrank one less than the rank of `ARRAY`, and a size corresponding to\nthe size of `ARRAY` with the `DIM` dimension removed. In all\ncases, the result is of the same type and kind as `ARRAY`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nMAX, MAXLOC\n" +} diff --git a/src/docs/MCLOCK.json b/src/docs/MCLOCK.json index 77a1bf1b..017c8da7 100644 --- a/src/docs/MCLOCK.json +++ b/src/docs/MCLOCK.json @@ -1,4 +1,4 @@ { - "keyword":"MCLOCK", - "docstr":"`MCLOCK` — Time function\n\n### Description\nReturns the number of clock ticks since the start of the process, based\non the function `clock(3)` in the C standard library.\n\n \nThis intrinsic is not fully portable, such as to systems with 32-bit\n`INTEGER` types but supporting times wider than 32 bits. Therefore,\nthe values returned by this intrinsic might be, or become, negative, or\nnumerically less than previous values, during a single run of the\ncompiled program.\n\n\n\n\n### Syntax\n`RESULT = MCLOCK()`\n\n\n### Return value\nThe return value is a scalar of type `INTEGER(4)`, equal to the\nnumber of clock ticks since the start of the process, or `-1` if\nthe system does not support `clock(3)`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nCTIME, GMTIME, LTIME, MCLOCK, TIME\n\n " -} \ No newline at end of file + "keyword": "MCLOCK", + "docstr": "`MCLOCK` — Time function\n\n### Description\nReturns the number of clock ticks since the start of the process, based\non the function `clock(3)` in the C standard library.\n\n \nThis intrinsic is not fully portable, such as to systems with 32-bit\n`INTEGER` types but supporting times wider than 32 bits. Therefore,\nthe values returned by this intrinsic might be, or become, negative, or\nnumerically less than previous values, during a single run of the\ncompiled program.\n\n\n\n\n### Syntax\n`RESULT = MCLOCK()`\n\n\n### Return value\nThe return value is a scalar of type `INTEGER(4)`, equal to the\nnumber of clock ticks since the start of the process, or `-1` if\nthe system does not support `clock(3)`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nCTIME, GMTIME, LTIME, MCLOCK, TIME\n\n " +} diff --git a/src/docs/MCLOCK8.json b/src/docs/MCLOCK8.json index f3fa0240..bde727a6 100644 --- a/src/docs/MCLOCK8.json +++ b/src/docs/MCLOCK8.json @@ -1,4 +1,4 @@ { - "keyword":"MCLOCK8", - "docstr":"`MCLOCK8` — Time function (64-bit)\n\n### Description\nReturns the number of clock ticks since the start of the process, based\non the function `clock(3)` in the C standard library.\n\n \nWarning: this intrinsic does not increase the range of the timing\nvalues over that returned by `clock(3)`. On a system with a 32-bit\n`clock(3)`, `MCLOCK8` will return a 32-bit value, even though\nit is converted to a 64-bit `INTEGER(8)` value. That means\noverflows of the 32-bit value can still occur. Therefore, the values\nreturned by this intrinsic might be or become negative or numerically\nless than previous values during a single run of the compiled program.\n\n\n\n\n### Syntax\n`RESULT = MCLOCK8()`\n\n\n### Return value\nThe return value is a scalar of type `INTEGER(8)`, equal to the\nnumber of clock ticks since the start of the process, or `-1` if\nthe system does not support `clock(3)`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nCTIME, GMTIME, LTIME, MCLOCK, TIME8\n\n " -} \ No newline at end of file + "keyword": "MCLOCK8", + "docstr": "`MCLOCK8` — Time function (64-bit)\n\n### Description\nReturns the number of clock ticks since the start of the process, based\non the function `clock(3)` in the C standard library.\n\n \nWarning: this intrinsic does not increase the range of the timing\nvalues over that returned by `clock(3)`. On a system with a 32-bit\n`clock(3)`, `MCLOCK8` will return a 32-bit value, even though\nit is converted to a 64-bit `INTEGER(8)` value. That means\noverflows of the 32-bit value can still occur. Therefore, the values\nreturned by this intrinsic might be or become negative or numerically\nless than previous values during a single run of the compiled program.\n\n\n\n\n### Syntax\n`RESULT = MCLOCK8()`\n\n\n### Return value\nThe return value is a scalar of type `INTEGER(8)`, equal to the\nnumber of clock ticks since the start of the process, or `-1` if\nthe system does not support `clock(3)`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nCTIME, GMTIME, LTIME, MCLOCK, TIME8\n\n " +} diff --git a/src/docs/MERGE.json b/src/docs/MERGE.json index 8bfdab8c..325970fa 100644 --- a/src/docs/MERGE.json +++ b/src/docs/MERGE.json @@ -1,4 +1,4 @@ { - "keyword":"MERGE", - "docstr":"`MERGE` — Merge variables\n\n### Description\nSelect values from two arrays according to a logical mask. The result\nis equal to `TSOURCE` if `MASK` is `.TRUE.`, or equal to\n`FSOURCE` if it is `.FALSE.`.\n\n\n\n### Syntax\n`RESULT = MERGE(TSOURCE, FSOURCE, MASK)`\n\n\n### Arguments\n\n \n | `TSOURCE` | May be of any type. \n\n | `FSOURCE` | Shall be of the same type and type parameters\nas `TSOURCE`. \n\n | `MASK` | Shall be of type `LOGICAL`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type and type parameters as `TSOURCE`.\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "MERGE", + "docstr": "`MERGE` — Merge variables\n\n### Description\nSelect values from two arrays according to a logical mask. The result\nis equal to `TSOURCE` if `MASK` is `.TRUE.`, or equal to\n`FSOURCE` if it is `.FALSE.`.\n\n\n\n### Syntax\n`RESULT = MERGE(TSOURCE, FSOURCE, MASK)`\n\n\n### Arguments\n\n \n | `TSOURCE` | May be of any type. \n\n | `FSOURCE` | Shall be of the same type and type parameters\nas `TSOURCE`. \n\n | `MASK` | Shall be of type `LOGICAL`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type and type parameters as `TSOURCE`.\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/MERGE_BITS.json b/src/docs/MERGE_BITS.json index d216e621..9dae7f79 100644 --- a/src/docs/MERGE_BITS.json +++ b/src/docs/MERGE_BITS.json @@ -1,4 +1,4 @@ { - "keyword":"MERGE_BITS", - "docstr":"`MERGE_BITS` — Merge of bits under mask\n\n### Description\n`MERGE_BITS(I, J, MASK)` merges the bits of `I` and `J`\nas determined by the mask. The i-th bit of the result is equal to the\ni-th bit of `I` if the i-th bit of `MASK` is 1; it is equal to\nthe i-th bit of `J` otherwise.\n\n\n\n### Syntax\n`RESULT = MERGE_BITS(I, J, MASK)`\n\n\n### Arguments\n\n \n. \n\n | `J` | Shall be of type `INTEGER` and of the same\nkind as `I`. \n\n | `MASK` | Shall be of type `INTEGER` and of the same\nkind as `I`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type and kind as `I`.\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "MERGE_BITS", + "docstr": "`MERGE_BITS` — Merge of bits under mask\n\n### Description\n`MERGE_BITS(I, J, MASK)` merges the bits of `I` and `J`\nas determined by the mask. The i-th bit of the result is equal to the\ni-th bit of `I` if the i-th bit of `MASK` is 1; it is equal to\nthe i-th bit of `J` otherwise.\n\n\n\n### Syntax\n`RESULT = MERGE_BITS(I, J, MASK)`\n\n\n### Arguments\n\n \n. \n\n | `J` | Shall be of type `INTEGER` and of the same\nkind as `I`. \n\n | `MASK` | Shall be of type `INTEGER` and of the same\nkind as `I`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type and kind as `I`.\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/MIN.json b/src/docs/MIN.json index b6a724e9..e8056129 100644 --- a/src/docs/MIN.json +++ b/src/docs/MIN.json @@ -1,4 +1,4 @@ { - "keyword":"MIN", - "docstr":"`MIN` — Minimum value of an argument list\n\n### Description\nReturns the argument with the smallest (most negative) value.\n\n\n\n### Syntax\n`RESULT = MIN(A1, A2 [, A3, ...])`\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `A2`, `A3`, ... | An expression of the same type and kind\nas `A1`. (As a GNU extension, arguments of different kinds are\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return value corresponds to the maximum value among the arguments,\nand has the same type and kind as the first argument.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `MIN0(A1)` | `INTEGER(4) A1` | `INTEGER(4)` | Fortran 77 and later\n\n | `AMIN0(A1)` | `INTEGER(4) A1` | `REAL(4)` | Fortran 77 and later\n\n | `MIN1(A1)` | `REAL A1` | `INTEGER(4)` | Fortran 77 and later\n\n | `AMIN1(A1)` | `REAL(4) A1` | `REAL(4)` | Fortran 77 and later\n\n | `DMIN1(A1)` | `REAL(8) A1` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMAX, MINLOC, MINVAL\n" -} \ No newline at end of file + "keyword": "MIN", + "docstr": "`MIN` — Minimum value of an argument list\n\n### Description\nReturns the argument with the smallest (most negative) value.\n\n\n\n### Syntax\n`RESULT = MIN(A1, A2 [, A3, ...])`\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `A2`, `A3`, ... | An expression of the same type and kind\nas `A1`. (As a GNU extension, arguments of different kinds are\npermitted.)\n\n\n\n\n\n\n### Return value\nThe return value corresponds to the maximum value among the arguments,\nand has the same type and kind as the first argument.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `MIN0(A1)` | `INTEGER(4) A1` | `INTEGER(4)` | Fortran 77 and later\n\n | `AMIN0(A1)` | `INTEGER(4) A1` | `REAL(4)` | Fortran 77 and later\n\n | `MIN1(A1)` | `REAL A1` | `INTEGER(4)` | Fortran 77 and later\n\n | `AMIN1(A1)` | `REAL(4) A1` | `REAL(4)` | Fortran 77 and later\n\n | `DMIN1(A1)` | `REAL(8) A1` | `REAL(8)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMAX, MINLOC, MINVAL\n" +} diff --git a/src/docs/MINEXPONENT.json b/src/docs/MINEXPONENT.json index 6b454fe8..be614611 100644 --- a/src/docs/MINEXPONENT.json +++ b/src/docs/MINEXPONENT.json @@ -1,4 +1,4 @@ { - "keyword":"MINEXPONENT", - "docstr":"`MINEXPONENT` — Minimum exponent of a real kind\n\n### Description\n`MINEXPONENT(X)` returns the minimum exponent in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = MINEXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\nSee `MAXEXPONENT` for an example. \n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "MINEXPONENT", + "docstr": "`MINEXPONENT` — Minimum exponent of a real kind\n\n### Description\n`MINEXPONENT(X)` returns the minimum exponent in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = MINEXPONENT(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\nSee `MAXEXPONENT` for an example. \n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/MINLOC.json b/src/docs/MINLOC.json index a1adca15..4941aee5 100644 --- a/src/docs/MINLOC.json +++ b/src/docs/MINLOC.json @@ -1,4 +1,4 @@ { - "keyword":"MINLOC", - "docstr":"`MINLOC` — Location of the minimum value within an array\n\n### Description\nDetermines the location of the element in the array with the minimum\nvalue, or, if the `DIM` argument is supplied, determines the\nlocations of the minimum element along each row of the array in the\n`DIM` direction. If `MASK` is present, only the elements for\nwhich `MASK` is `.TRUE.` are considered. If more than one\nelement in the array has the minimum value, the location returned is\nthat of the first such element in array element order. If the array has\nzero size, or all of the elements of `MASK` are `.FALSE.`, then\nthe result is an array of zeroes. Similarly, if `DIM` is supplied\nand all of the elements of `MASK` along a given row are zero, the\nresult value for that row is zero.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = MINLOC(ARRAY [, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `DIM` | (Optional) Shall be a scalar of type\n`INTEGER`, with a value between one and the rank of `ARRAY`,\ninclusive. It may not be an optional dummy argument. \n\n | `MASK` | Shall be an array of type `LOGICAL`,\nand conformable with `ARRAY`.\n\n\n\n\n\n\n### Return value\nIf `DIM` is absent, the result is a rank-one array with a length\nequal to the rank of `ARRAY`. If `DIM` is present, the result\nis an array with a rank one less than the rank of `ARRAY`, and a\nsize corresponding to the size of `ARRAY` with the `DIM`\ndimension removed. If `DIM` is present and `ARRAY` has a rank\nof one, the result is a scalar. In all cases, the result is of default\n`INTEGER` type.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nMIN, MINVAL\n\n " -} \ No newline at end of file + "keyword": "MINLOC", + "docstr": "`MINLOC` — Location of the minimum value within an array\n\n### Description\nDetermines the location of the element in the array with the minimum\nvalue, or, if the `DIM` argument is supplied, determines the\nlocations of the minimum element along each row of the array in the\n`DIM` direction. If `MASK` is present, only the elements for\nwhich `MASK` is `.TRUE.` are considered. If more than one\nelement in the array has the minimum value, the location returned is\nthat of the first such element in array element order. If the array has\nzero size, or all of the elements of `MASK` are `.FALSE.`, then\nthe result is an array of zeroes. Similarly, if `DIM` is supplied\nand all of the elements of `MASK` along a given row are zero, the\nresult value for that row is zero.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = MINLOC(ARRAY [, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `DIM` | (Optional) Shall be a scalar of type\n`INTEGER`, with a value between one and the rank of `ARRAY`,\ninclusive. It may not be an optional dummy argument. \n\n | `MASK` | Shall be an array of type `LOGICAL`,\nand conformable with `ARRAY`.\n\n\n\n\n\n\n### Return value\nIf `DIM` is absent, the result is a rank-one array with a length\nequal to the rank of `ARRAY`. If `DIM` is present, the result\nis an array with a rank one less than the rank of `ARRAY`, and a\nsize corresponding to the size of `ARRAY` with the `DIM`\ndimension removed. If `DIM` is present and `ARRAY` has a rank\nof one, the result is a scalar. In all cases, the result is of default\n`INTEGER` type.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nMIN, MINVAL\n\n " +} diff --git a/src/docs/MINVAL.json b/src/docs/MINVAL.json index 65857a7c..f7a8a82d 100644 --- a/src/docs/MINVAL.json +++ b/src/docs/MINVAL.json @@ -1,4 +1,4 @@ { - "keyword":"MINVAL", - "docstr":"`MINVAL` — Minimum value of an array\n\n### Description\nDetermines the minimum value of the elements in an array value, or, if\nthe `DIM` argument is supplied, determines the minimum value along\neach row of the array in the `DIM` direction. If `MASK` is\npresent, only the elements for which `MASK` is `.TRUE.` are\nconsidered. If the array has zero size, or all of the elements of\n`MASK` are `.FALSE.`, then the result is `HUGE(ARRAY)` if\n`ARRAY` is numeric, or a string of `CHAR(255)` characters if\n`ARRAY` is of character type.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = MINVAL(ARRAY [, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `DIM` | (Optional) Shall be a scalar of type\n`INTEGER`, with a value between one and the rank of `ARRAY`,\ninclusive. It may not be an optional dummy argument. \n\n | `MASK` | Shall be an array of type `LOGICAL`,\nand conformable with `ARRAY`.\n\n\n\n\n\n\n### Return value\nIf `DIM` is absent, or if `ARRAY` has a rank of one, the result\nis a scalar. If `DIM` is present, the result is an array with a\nrank one less than the rank of `ARRAY`, and a size corresponding to\nthe size of `ARRAY` with the `DIM` dimension removed. In all\ncases, the result is of the same type and kind as `ARRAY`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nMIN, MINLOC\n\n " -} \ No newline at end of file + "keyword": "MINVAL", + "docstr": "`MINVAL` — Minimum value of an array\n\n### Description\nDetermines the minimum value of the elements in an array value, or, if\nthe `DIM` argument is supplied, determines the minimum value along\neach row of the array in the `DIM` direction. If `MASK` is\npresent, only the elements for which `MASK` is `.TRUE.` are\nconsidered. If the array has zero size, or all of the elements of\n`MASK` are `.FALSE.`, then the result is `HUGE(ARRAY)` if\n`ARRAY` is numeric, or a string of `CHAR(255)` characters if\n`ARRAY` is of character type.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = MINVAL(ARRAY [, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n or\n`REAL`. \n\n | `DIM` | (Optional) Shall be a scalar of type\n`INTEGER`, with a value between one and the rank of `ARRAY`,\ninclusive. It may not be an optional dummy argument. \n\n | `MASK` | Shall be an array of type `LOGICAL`,\nand conformable with `ARRAY`.\n\n\n\n\n\n\n### Return value\nIf `DIM` is absent, or if `ARRAY` has a rank of one, the result\nis a scalar. If `DIM` is present, the result is an array with a\nrank one less than the rank of `ARRAY`, and a size corresponding to\nthe size of `ARRAY` with the `DIM` dimension removed. In all\ncases, the result is of the same type and kind as `ARRAY`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nMIN, MINLOC\n\n " +} diff --git a/src/docs/MOD.json b/src/docs/MOD.json index 3680e687..024d9ceb 100644 --- a/src/docs/MOD.json +++ b/src/docs/MOD.json @@ -1,4 +1,4 @@ { - "keyword":"MOD", - "docstr":"`MOD` — Remainder function\n\n### Description\n`MOD(A,P)` computes the remainder of the division of A by P.\n\n\n\n### Syntax\n`RESULT = MOD(A, P)`\n\n\n### Arguments\n\n \n. \n\n | `P` | Shall be a scalar of the same type and kind as `A`\nand not equal to zero.\n\n\n\n\n\n\n### Return value\nThe return value is the result of `A - (INT(A/P) * P)`. The type\nand kind of the return value is the same as that of the arguments. The\nreturned value has the same sign as A and a magnitude less than the\nmagnitude of P.\n\n\n\n### Example\n```\n\n\nprogram test_mod\n\n  print *, mod(17,3)\n\n  print *, mod(17.5,5.5)\n\n  print *, mod(17.5d0,5.5)\n\n  print *, mod(17.5,5.5d0)\n\n\n  print *, mod(-17,3)\n\n  print *, mod(-17.5,5.5)\n\n  print *, mod(-17.5d0,5.5)\n\n  print *, mod(-17.5,5.5d0)\n\n\n  print *, mod(17,-3)\n\n  print *, mod(17.5,-5.5)\n\n  print *, mod(17.5d0,-5.5)\n\n  print *, mod(17.5,-5.5d0)\n\nend program test_mod\n\n```\n\n\n\n### Specific names\n\n \n | Name | Arguments | Return type | Standard\n\n | `MOD(A,P)` | `INTEGER A,P` | `INTEGER` | Fortran 95 and later\n\n | `AMOD(A,P)` | `REAL(4) A,P` | `REAL(4)` | Fortran 95 and later\n\n | `DMOD(A,P)` | `REAL(8) A,P` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMODULO\n\n " -} \ No newline at end of file + "keyword": "MOD", + "docstr": "`MOD` — Remainder function\n\n### Description\n`MOD(A,P)` computes the remainder of the division of A by P.\n\n\n\n### Syntax\n`RESULT = MOD(A, P)`\n\n\n### Arguments\n\n \n. \n\n | `P` | Shall be a scalar of the same type and kind as `A`\nand not equal to zero.\n\n\n\n\n\n\n### Return value\nThe return value is the result of `A - (INT(A/P) * P)`. The type\nand kind of the return value is the same as that of the arguments. The\nreturned value has the same sign as A and a magnitude less than the\nmagnitude of P.\n\n\n\n### Example\n```\n\n\nprogram test_mod\n\n  print *, mod(17,3)\n\n  print *, mod(17.5,5.5)\n\n  print *, mod(17.5d0,5.5)\n\n  print *, mod(17.5,5.5d0)\n\n\n  print *, mod(-17,3)\n\n  print *, mod(-17.5,5.5)\n\n  print *, mod(-17.5d0,5.5)\n\n  print *, mod(-17.5,5.5d0)\n\n\n  print *, mod(17,-3)\n\n  print *, mod(17.5,-5.5)\n\n  print *, mod(17.5d0,-5.5)\n\n  print *, mod(17.5,-5.5d0)\n\nend program test_mod\n\n```\n\n\n\n### Specific names\n\n \n | Name | Arguments | Return type | Standard\n\n | `MOD(A,P)` | `INTEGER A,P` | `INTEGER` | Fortran 95 and later\n\n | `AMOD(A,P)` | `REAL(4) A,P` | `REAL(4)` | Fortran 95 and later\n\n | `DMOD(A,P)` | `REAL(8) A,P` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMODULO\n\n " +} diff --git a/src/docs/MODULO.json b/src/docs/MODULO.json index 10f13a05..848ab2da 100644 --- a/src/docs/MODULO.json +++ b/src/docs/MODULO.json @@ -1,4 +1,4 @@ { - "keyword":"MODULO", - "docstr":"`MODULO` — Modulo function\n\n### Description\n`MODULO(A,P)` computes the `A` modulo `P`.\n\n\n\n### Syntax\n`RESULT = MODULO(A, P)`\n\n\n### Arguments\n\n \n. \n\n | `P` | Shall be a scalar of the same type and kind as `A`. \nIt shall not be zero.\n\n\n\n\n\n\n### Return value\nThe type and kind of the result are those of the arguments.\n
\n**If `A` and `P` are of type `INTEGER`:** `MODULO(A,P)` has the value `R` such that `A=Q*P+R`, where\n`Q` is an integer and `R` is between 0 (inclusive) and `P`\n(exclusive). \n\n**If `A` and `P` are of type `REAL`:** `MODULO(A,P)` has the value of `A - FLOOR (A / P) * P`. \n\n
\n The returned value has the same sign as P and a magnitude less than\nthe magnitude of P.\n\n\n\n### Example\n```\n\n\nprogram test_modulo\n\n  print *, modulo(17,3)\n\n  print *, modulo(17.5,5.5)\n\n\n  print *, modulo(-17,3)\n\n  print *, modulo(-17.5,5.5)\n\n\n  print *, modulo(17,-3)\n\n  print *, modulo(17.5,-5.5)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMOD\n\n " -} \ No newline at end of file + "keyword": "MODULO", + "docstr": "`MODULO` — Modulo function\n\n### Description\n`MODULO(A,P)` computes the `A` modulo `P`.\n\n\n\n### Syntax\n`RESULT = MODULO(A, P)`\n\n\n### Arguments\n\n \n. \n\n | `P` | Shall be a scalar of the same type and kind as `A`. \nIt shall not be zero.\n\n\n\n\n\n\n### Return value\nThe type and kind of the result are those of the arguments.\n
\n**If `A` and `P` are of type `INTEGER`:** `MODULO(A,P)` has the value `R` such that `A=Q*P+R`, where\n`Q` is an integer and `R` is between 0 (inclusive) and `P`\n(exclusive). \n\n**If `A` and `P` are of type `REAL`:** `MODULO(A,P)` has the value of `A - FLOOR (A / P) * P`. \n\n
\n The returned value has the same sign as P and a magnitude less than\nthe magnitude of P.\n\n\n\n### Example\n```\n\n\nprogram test_modulo\n\n  print *, modulo(17,3)\n\n  print *, modulo(17.5,5.5)\n\n\n  print *, modulo(-17,3)\n\n  print *, modulo(-17.5,5.5)\n\n\n  print *, modulo(17,-3)\n\n  print *, modulo(17.5,-5.5)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nMOD\n\n " +} diff --git a/src/docs/MOVE_ALLOC.json b/src/docs/MOVE_ALLOC.json index aaeb902a..9ceccf98 100644 --- a/src/docs/MOVE_ALLOC.json +++ b/src/docs/MOVE_ALLOC.json @@ -1,4 +1,4 @@ { - "keyword":"MOVE_ALLOC", - "docstr":"`MOVE_ALLOC` — Move allocation from one object to another\n\n### Description\n`MOVE_ALLOC(FROM, TO)` moves the allocation from `FROM` to\n`TO`. `FROM` will become deallocated in the process.\n\n\n\n### Syntax\n`CALL MOVE_ALLOC(FROM, TO)`\n\n\n### Arguments\n\n \n, may be\nof any type and kind. \n\n | `TO` | `ALLOCATABLE`, `INTENT(OUT)`, shall be\nof the same type, kind and rank as `FROM`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_move_alloc\n\n    integer, allocatable :: a(:), b(:)\n\n\n    allocate(a(3))\n\n    a = [ 1, 2, 3 ]\n\n    call move_alloc(a, b)\n\n    print *, allocated(a), allocated(b)\n\n    print *, b\n\nend program test_move_alloc\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nPure subroutine\n\n\n" -} \ No newline at end of file + "keyword": "MOVE_ALLOC", + "docstr": "`MOVE_ALLOC` — Move allocation from one object to another\n\n### Description\n`MOVE_ALLOC(FROM, TO)` moves the allocation from `FROM` to\n`TO`. `FROM` will become deallocated in the process.\n\n\n\n### Syntax\n`CALL MOVE_ALLOC(FROM, TO)`\n\n\n### Arguments\n\n \n, may be\nof any type and kind. \n\n | `TO` | `ALLOCATABLE`, `INTENT(OUT)`, shall be\nof the same type, kind and rank as `FROM`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_move_alloc\n\n    integer, allocatable :: a(:), b(:)\n\n\n    allocate(a(3))\n\n    a = [ 1, 2, 3 ]\n\n    call move_alloc(a, b)\n\n    print *, allocated(a), allocated(b)\n\n    print *, b\n\nend program test_move_alloc\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nPure subroutine\n\n\n" +} diff --git a/src/docs/MVBITS.json b/src/docs/MVBITS.json index e20147ab..4a499b39 100644 --- a/src/docs/MVBITS.json +++ b/src/docs/MVBITS.json @@ -1,4 +1,4 @@ { - "keyword":"MVBITS", - "docstr":"`MVBITS` — Move bits from one integer to another\n\n### Description\nMoves `LEN` bits from positions `FROMPOS` through\n`FROMPOS+LEN-1` of `FROM` to positions `TOPOS` through\n`TOPOS+LEN-1` of `TO`. The portion of argument `TO` not\naffected by the movement of bits is unchanged. The values of\n`FROMPOS+LEN-1` and `TOPOS+LEN-1` must be less than\n`BIT_SIZE(FROM)`.\n\n\n\n### Syntax\n`CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)`\n\n\n### Arguments\n\n \n. \n\n | `FROMPOS` | The type shall be `INTEGER`. \n\n | `LEN` | The type shall be `INTEGER`. \n\n | `TO` | The type shall be `INTEGER`, of the\nsame kind as `FROM`. \n\n | `TOPOS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental subroutine\n\n\n\n### See also\nIBCLR, IBSET, IBITS, IAND, IOR, IEOR\n" -} \ No newline at end of file + "keyword": "MVBITS", + "docstr": "`MVBITS` — Move bits from one integer to another\n\n### Description\nMoves `LEN` bits from positions `FROMPOS` through\n`FROMPOS+LEN-1` of `FROM` to positions `TOPOS` through\n`TOPOS+LEN-1` of `TO`. The portion of argument `TO` not\naffected by the movement of bits is unchanged. The values of\n`FROMPOS+LEN-1` and `TOPOS+LEN-1` must be less than\n`BIT_SIZE(FROM)`.\n\n\n\n### Syntax\n`CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)`\n\n\n### Arguments\n\n \n. \n\n | `FROMPOS` | The type shall be `INTEGER`. \n\n | `LEN` | The type shall be `INTEGER`. \n\n | `TO` | The type shall be `INTEGER`, of the\nsame kind as `FROM`. \n\n | `TOPOS` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental subroutine\n\n\n\n### See also\nIBCLR, IBSET, IBITS, IAND, IOR, IEOR\n" +} diff --git a/src/docs/NEAREST.json b/src/docs/NEAREST.json index 38f992d4..6fb2b21b 100644 --- a/src/docs/NEAREST.json +++ b/src/docs/NEAREST.json @@ -1,4 +1,4 @@ { - "keyword":"NEAREST", - "docstr":"`NEAREST` — Nearest representable number\n\n### Description\n`NEAREST(X, S)` returns the processor-representable number nearest\nto `X` in the direction indicated by the sign of `S`.\n\n\n\n### Syntax\n`RESULT = NEAREST(X, S)`\n\n\n### Arguments\n\n \n. \n\n | `S` | Shall be of type `REAL` and\nnot equal to zero.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type as `X`. If `S` is\npositive, `NEAREST` returns the processor-representable number\ngreater than `X` and nearest to it. If `S` is negative,\n`NEAREST` returns the processor-representable number smaller than\n`X` and nearest to it.\n\n\n\n### Example\n```\n\n\nprogram test_nearest\n\n  real :: x, y\n\n  x = nearest(42.0, 1.0)\n\n  y = nearest(42.0, -1.0)\n\n  write (*,\"(3(G20.15))\") x, y, x - y\n\nend program test_nearest\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "NEAREST", + "docstr": "`NEAREST` — Nearest representable number\n\n### Description\n`NEAREST(X, S)` returns the processor-representable number nearest\nto `X` in the direction indicated by the sign of `S`.\n\n\n\n### Syntax\n`RESULT = NEAREST(X, S)`\n\n\n### Arguments\n\n \n. \n\n | `S` | Shall be of type `REAL` and\nnot equal to zero.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type as `X`. If `S` is\npositive, `NEAREST` returns the processor-representable number\ngreater than `X` and nearest to it. If `S` is negative,\n`NEAREST` returns the processor-representable number smaller than\n`X` and nearest to it.\n\n\n\n### Example\n```\n\n\nprogram test_nearest\n\n  real :: x, y\n\n  x = nearest(42.0, 1.0)\n\n  y = nearest(42.0, -1.0)\n\n  write (*,\"(3(G20.15))\") x, y, x - y\n\nend program test_nearest\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/NEW_LINE.json b/src/docs/NEW_LINE.json index b8982ecc..31ddfcd7 100644 --- a/src/docs/NEW_LINE.json +++ b/src/docs/NEW_LINE.json @@ -1,4 +1,4 @@ { - "keyword":"NEW_LINE", - "docstr":"`NEW_LINE` — New line character\n\n### Description\n`NEW_LINE(C)` returns the new-line character.\n\n\n\n### Syntax\n`RESULT = NEW_LINE(C)`\n\n\n### Arguments\n\n \n | `C` | The argument shall be a scalar or array of the\ntype `CHARACTER`.\n\n\n\n\n\n\n### Return value\nReturns a `CHARACTER` scalar of length one with the new-line character of\nthe same kind as parameter `C`.\n\n\n\n### Example\n```\n\n\nprogram newline\n\n  implicit none\n\n  write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.'\n\nend program newline\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "NEW_LINE", + "docstr": "`NEW_LINE` — New line character\n\n### Description\n`NEW_LINE(C)` returns the new-line character.\n\n\n\n### Syntax\n`RESULT = NEW_LINE(C)`\n\n\n### Arguments\n\n \n | `C` | The argument shall be a scalar or array of the\ntype `CHARACTER`.\n\n\n\n\n\n\n### Return value\nReturns a `CHARACTER` scalar of length one with the new-line character of\nthe same kind as parameter `C`.\n\n\n\n### Example\n```\n\n\nprogram newline\n\n  implicit none\n\n  write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.'\n\nend program newline\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/NINT.json b/src/docs/NINT.json index 69999986..69d97bcc 100644 --- a/src/docs/NINT.json +++ b/src/docs/NINT.json @@ -1,4 +1,4 @@ { - "keyword":"NINT", - "docstr":"`NINT` — Nearest whole number\n\n### Description\n`NINT(A)` rounds its argument to the nearest whole number.\n\n\n\n### Syntax\n`RESULT = NINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nReturns `A` with the fractional portion of its magnitude eliminated by\nrounding to the nearest whole number and with its sign preserved,\nconverted to an `INTEGER` of the default kind.\n\n\n\n### Example\n```\n\n\nprogram test_nint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, nint(x4), idnint(x8)\n\nend program test_nint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return Type | Standard\n\n | `NINT(A)` | `REAL(4) A` | `INTEGER` | Fortran 95 and later\n\n | `IDNINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 90 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCEILING, FLOOR\n\n " -} \ No newline at end of file + "keyword": "NINT", + "docstr": "`NINT` — Nearest whole number\n\n### Description\n`NINT(A)` rounds its argument to the nearest whole number.\n\n\n\n### Syntax\n`RESULT = NINT(A [, KIND])`\n\n\n### Arguments\n\n \n. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nReturns `A` with the fractional portion of its magnitude eliminated by\nrounding to the nearest whole number and with its sign preserved,\nconverted to an `INTEGER` of the default kind.\n\n\n\n### Example\n```\n\n\nprogram test_nint\n\n  real(4) x4\n\n  real(8) x8\n\n  x4 = 1.234E0_4\n\n  x8 = 4.321_8\n\n  print *, nint(x4), idnint(x8)\n\nend program test_nint\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return Type | Standard\n\n | `NINT(A)` | `REAL(4) A` | `INTEGER` | Fortran 95 and later\n\n | `IDNINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, with `KIND` argument Fortran 90 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nCEILING, FLOOR\n\n " +} diff --git a/src/docs/NORM2.json b/src/docs/NORM2.json index 48e536b5..83d2a911 100644 --- a/src/docs/NORM2.json +++ b/src/docs/NORM2.json @@ -1,4 +1,4 @@ { - "keyword":"NORM2", - "docstr":"`NORM2` — Euclidean vector norms\n\n### Description\nCalculates the Euclidean vector norm (L_2 norm) of\nof `ARRAY` along dimension `DIM`.\n\n\n\n### Syntax\n\n \n\n\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the square root of the sum of all\nelements in `ARRAY` squared is returned. Otherwise, an array of\nrank n-1, where n equals the rank of `ARRAY`, and a\nshape similar to that of `ARRAY` with dimension `DIM` dropped\nis returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_sum\n\n  REAL :: x(5) = [ real :: 1, 2, 3, 4, 5 ]\n\n  print *, NORM2(x) ! = sqrt(55.) ~ 7.416\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "NORM2", + "docstr": "`NORM2` — Euclidean vector norms\n\n### Description\nCalculates the Euclidean vector norm (L_2 norm) of\nof `ARRAY` along dimension `DIM`.\n\n\n\n### Syntax\n\n \n\n\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the square root of the sum of all\nelements in `ARRAY` squared is returned. Otherwise, an array of\nrank n-1, where n equals the rank of `ARRAY`, and a\nshape similar to that of `ARRAY` with dimension `DIM` dropped\nis returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_sum\n\n  REAL :: x(5) = [ real :: 1, 2, 3, 4, 5 ]\n\n  print *, NORM2(x) ! = sqrt(55.) ~ 7.416\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/NOT.json b/src/docs/NOT.json index 0303d6f4..4abeb419 100644 --- a/src/docs/NOT.json +++ b/src/docs/NOT.json @@ -1,4 +1,4 @@ { - "keyword":"NOT", - "docstr":"`NOT` — Logical negation\n\n### Description\n`NOT` returns the bitwise Boolean inverse of `I`.\n\n\n\n### Syntax\n`RESULT = NOT(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\nargument.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIAND, IEOR, IOR, IBITS, IBSET, IBCLR\n\n " -} \ No newline at end of file + "keyword": "NOT", + "docstr": "`NOT` — Logical negation\n\n### Description\n`NOT` returns the bitwise Boolean inverse of `I`.\n\n\n\n### Syntax\n`RESULT = NOT(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return type is `INTEGER`, of the same kind as the\nargument.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nIAND, IEOR, IOR, IBITS, IBSET, IBCLR\n\n " +} diff --git a/src/docs/NULL.json b/src/docs/NULL.json index 83ef2170..91d832cd 100644 --- a/src/docs/NULL.json +++ b/src/docs/NULL.json @@ -1,4 +1,4 @@ { - "keyword":"NULL", - "docstr":"`NULL` — Function that returns an disassociated pointer\n\n### Description\nReturns a disassociated pointer.\n\n \nIf `MOLD` is present, a disassociated pointer of the same type is\nreturned, otherwise the type is determined by context.\n\n \n\nIn Fortran 95, `MOLD` is optional. Please note that Fortran 2003\nincludes cases where it is required.\n\n\n\n\n### Syntax\n`PTR => NULL([MOLD])`\n\n\n### Arguments\n\n \n | `MOLD` | (Optional) shall be a pointer of any association\nstatus and of any type.\n\n\n\n\n\n\n### Return value\nA disassociated pointer.\n\n\n\n### Example\n```\n\n\nREAL, POINTER, DIMENSION(:) :: VEC => NULL ()\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nASSOCIATED\n" -} \ No newline at end of file + "keyword": "NULL", + "docstr": "`NULL` — Function that returns an disassociated pointer\n\n### Description\nReturns a disassociated pointer.\n\n \nIf `MOLD` is present, a disassociated pointer of the same type is\nreturned, otherwise the type is determined by context.\n\n \n\nIn Fortran 95, `MOLD` is optional. Please note that Fortran 2003\nincludes cases where it is required.\n\n\n\n\n### Syntax\n`PTR => NULL([MOLD])`\n\n\n### Arguments\n\n \n | `MOLD` | (Optional) shall be a pointer of any association\nstatus and of any type.\n\n\n\n\n\n\n### Return value\nA disassociated pointer.\n\n\n\n### Example\n```\n\n\nREAL, POINTER, DIMENSION(:) :: VEC => NULL ()\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nASSOCIATED\n" +} diff --git a/src/docs/NUM_IMAGES.json b/src/docs/NUM_IMAGES.json index 689f2af7..ac0a1631 100644 --- a/src/docs/NUM_IMAGES.json +++ b/src/docs/NUM_IMAGES.json @@ -1,4 +1,4 @@ { - "keyword":"NUM_IMAGES", - "docstr":"`NUM_IMAGES` — Function that returns the number of images\n\n### Description\nReturns the number of images.\n\n\n\n### Syntax\n`RESULT = NUM_IMAGES(DISTANCE, FAILED)`\n\n\n### Arguments\n\n \n | `DISTANCE` | (optional, intent(in)) Nonnegative scalar integer\n\n | `FAILED` | (optional, intent(in)) Scalar logical expression\n\n\n\n\n\n\n### Return value\nScalar default-kind integer. If `DISTANCE` is not present or has value 0,\nthe number of images in the current team is returned. For values smaller or\nequal distance to the initial team, it returns the number of images index\non the ancestor team which has a distance of `DISTANCE` from the invoking\nteam. If `DISTANCE` is larger than the distance to the initial team, the\nnumber of images of the initial team is returned. If `FAILED` is not present\nthe total number of images is returned; if it has the value `.TRUE.`,\nthe number of failed images is returned, otherwise, the number of images which\ndo have not the failed status.\n\n\n\n### Example\n```\n\n\nINTEGER :: value[*]\n\nINTEGER :: i\n\nvalue = THIS_IMAGE()\n\nSYNC ALL\n\nIF (THIS_IMAGE() == 1) THEN\n\n  DO i = 1, NUM_IMAGES()\n\n    WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]\n\n  END DO\n\nEND IF\n\n```\n\n\n\n### Standard\nFortran 2008 and later. With `DISTANCE` or `FAILED` argument,\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nTHIS_IMAGE, IMAGE_INDEX\n" -} \ No newline at end of file + "keyword": "NUM_IMAGES", + "docstr": "`NUM_IMAGES` — Function that returns the number of images\n\n### Description\nReturns the number of images.\n\n\n\n### Syntax\n`RESULT = NUM_IMAGES(DISTANCE, FAILED)`\n\n\n### Arguments\n\n \n | `DISTANCE` | (optional, intent(in)) Nonnegative scalar integer\n\n | `FAILED` | (optional, intent(in)) Scalar logical expression\n\n\n\n\n\n\n### Return value\nScalar default-kind integer. If `DISTANCE` is not present or has value 0,\nthe number of images in the current team is returned. For values smaller or\nequal distance to the initial team, it returns the number of images index\non the ancestor team which has a distance of `DISTANCE` from the invoking\nteam. If `DISTANCE` is larger than the distance to the initial team, the\nnumber of images of the initial team is returned. If `FAILED` is not present\nthe total number of images is returned; if it has the value `.TRUE.`,\nthe number of failed images is returned, otherwise, the number of images which\ndo have not the failed status.\n\n\n\n### Example\n```\n\n\nINTEGER :: value[*]\n\nINTEGER :: i\n\nvalue = THIS_IMAGE()\n\nSYNC ALL\n\nIF (THIS_IMAGE() == 1) THEN\n\n  DO i = 1, NUM_IMAGES()\n\n    WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]\n\n  END DO\n\nEND IF\n\n```\n\n\n\n### Standard\nFortran 2008 and later. With `DISTANCE` or `FAILED` argument,\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nTHIS_IMAGE, IMAGE_INDEX\n" +} diff --git a/src/docs/OR.json b/src/docs/OR.json index e71b8370..b2283e69 100644 --- a/src/docs/OR.json +++ b/src/docs/OR.json @@ -1,4 +1,4 @@ { - "keyword":"OR", - "docstr":"`OR` — Bitwise logical OR\n\n### Description\nBitwise logical `OR`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IOR intrinsic defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = OR(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `J`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_or\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F)\n\n  WRITE (*,*) OR(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IOR\n" -} \ No newline at end of file + "keyword": "OR", + "docstr": "`OR` — Bitwise logical OR\n\n### Description\nBitwise logical `OR`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IOR intrinsic defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = OR(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `J`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_or\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F)\n\n  WRITE (*,*) OR(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IOR\n" +} diff --git a/src/docs/PACK.json b/src/docs/PACK.json index 7633cbeb..6a405f1f 100644 --- a/src/docs/PACK.json +++ b/src/docs/PACK.json @@ -1,4 +1,4 @@ { - "keyword":"PACK", - "docstr":"`PACK` — Pack an array into an array of rank one\n\n### Description\nStores the elements of `ARRAY` in an array of rank one.\n\n \nThe beginning of the resulting array is made up of elements whose `MASK`\nequals `TRUE`. Afterwards, positions are filled with elements taken from\n`VECTOR`.\n\n\n\n\n### Syntax\n`RESULT = PACK(ARRAY, MASK[,VECTOR])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. \n\n | `MASK` | Shall be an array of type `LOGICAL` and\nof the same size as `ARRAY`. Alternatively, it may be a `LOGICAL`scalar. \n\n | `VECTOR` | (Optional) shall be an array of the same type\nas `ARRAY` and of rank one. If present, the number of elements in\n`VECTOR` shall be equal to or greater than the number of true elements\nin `MASK`. If `MASK` is scalar, the number of elements in\n`VECTOR` shall be equal to or greater than the number of elements in\n`ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is an array of rank one and the same type as that of `ARRAY`. \nIf `VECTOR` is present, the result size is that of `VECTOR`, the\nnumber of `TRUE` values in `MASK` otherwise.\n\n\n\n### Example\nGathering nonzero elements from an array:\n ```\n\n\nPROGRAM test_pack_1\n\n  INTEGER :: m(6)\n\n  m = (/ 1, 0, 0, 0, 5, 0 /)\n\n  WRITE(*, FMT=\"(6(I0, ' '))\") pack(m, m /= 0) ! \"1 5\"\n\nEND PROGRAM\n\n```\n\n \nGathering nonzero elements from an array and appending elements from `VECTOR`:\n \n
          PROGRAM test_pack_2\n            INTEGER :: m(4)\n            m = (/ 1, 0, 0, 2 /)\n            WRITE(*, FMT=\"(4(I0, ' '))\") pack(m, m /= 0, (/ 0, 0, 3, 4 /))  ! \"1 2 3 4\"\n          END PROGRAM\n
\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nUNPACK\n" -} \ No newline at end of file + "keyword": "PACK", + "docstr": "`PACK` — Pack an array into an array of rank one\n\n### Description\nStores the elements of `ARRAY` in an array of rank one.\n\n \nThe beginning of the resulting array is made up of elements whose `MASK`\nequals `TRUE`. Afterwards, positions are filled with elements taken from\n`VECTOR`.\n\n\n\n\n### Syntax\n`RESULT = PACK(ARRAY, MASK[,VECTOR])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. \n\n | `MASK` | Shall be an array of type `LOGICAL` and\nof the same size as `ARRAY`. Alternatively, it may be a `LOGICAL`scalar. \n\n | `VECTOR` | (Optional) shall be an array of the same type\nas `ARRAY` and of rank one. If present, the number of elements in\n`VECTOR` shall be equal to or greater than the number of true elements\nin `MASK`. If `MASK` is scalar, the number of elements in\n`VECTOR` shall be equal to or greater than the number of elements in\n`ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is an array of rank one and the same type as that of `ARRAY`. \nIf `VECTOR` is present, the result size is that of `VECTOR`, the\nnumber of `TRUE` values in `MASK` otherwise.\n\n\n\n### Example\nGathering nonzero elements from an array:\n ```\n\n\nPROGRAM test_pack_1\n\n  INTEGER :: m(6)\n\n  m = (/ 1, 0, 0, 0, 5, 0 /)\n\n  WRITE(*, FMT=\"(6(I0, ' '))\") pack(m, m /= 0) ! \"1 5\"\n\nEND PROGRAM\n\n```\n\n \nGathering nonzero elements from an array and appending elements from `VECTOR`:\n \n
          PROGRAM test_pack_2\n            INTEGER :: m(4)\n            m = (/ 1, 0, 0, 2 /)\n            WRITE(*, FMT=\"(4(I0, ' '))\") pack(m, m /= 0, (/ 0, 0, 3, 4 /))  ! \"1 2 3 4\"\n          END PROGRAM\n
\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nUNPACK\n" +} diff --git a/src/docs/PARITY.json b/src/docs/PARITY.json index e4d8ede0..b111c9d6 100644 --- a/src/docs/PARITY.json +++ b/src/docs/PARITY.json @@ -1,4 +1,4 @@ { - "keyword":"PARITY", - "docstr":"`PARITY` — Reduction with exclusive OR\n\n### Description\nCalculates the parity, i.e. the reduction using `.XOR.`,\nof `MASK` along dimension `DIM`.\n\n\n\n### Syntax\n\n \n\n\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `MASK`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `MASK`.\n\n \nIf `DIM` is absent, a scalar with the parity of all elements in\n`MASK` is returned, i.e. true if an odd number of elements is\n`.true.` and false otherwise. If `DIM` is present, an array\nof rank n-1, where n equals the rank of `ARRAY`,\nand a shape similar to that of `MASK` with dimension `DIM`\ndropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_sum\n\n  LOGICAL :: x(2) = [ .true., .false. ]\n\n  print *, PARITY(x) ! prints \"T\" (true).\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "PARITY", + "docstr": "`PARITY` — Reduction with exclusive OR\n\n### Description\nCalculates the parity, i.e. the reduction using `.XOR.`,\nof `MASK` along dimension `DIM`.\n\n\n\n### Syntax\n\n \n\n\n\n\n\n\n\n### Arguments\n\n \n\n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `MASK`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `MASK`.\n\n \nIf `DIM` is absent, a scalar with the parity of all elements in\n`MASK` is returned, i.e. true if an odd number of elements is\n`.true.` and false otherwise. If `DIM` is present, an array\nof rank n-1, where n equals the rank of `ARRAY`,\nand a shape similar to that of `MASK` with dimension `DIM`\ndropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_sum\n\n  LOGICAL :: x(2) = [ .true., .false. ]\n\n  print *, PARITY(x) ! prints \"T\" (true).\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/PERROR.json b/src/docs/PERROR.json index 8047638b..d07f48c8 100644 --- a/src/docs/PERROR.json +++ b/src/docs/PERROR.json @@ -1,4 +1,4 @@ { - "keyword":"PERROR", - "docstr":"`PERROR` — Print system error message\n\n### Description\nPrints (on the C `stderr` stream) a newline-terminated error\nmessage corresponding to the last system error. This is prefixed by\n`STRING`, a colon and a space. See `perror(3)`.\n\n\n\n### Syntax\n`CALL PERROR(STRING)`\n\n\n### Arguments\n\n \n and of the\ndefault kind.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nIERRNO\n" -} \ No newline at end of file + "keyword": "PERROR", + "docstr": "`PERROR` — Print system error message\n\n### Description\nPrints (on the C `stderr` stream) a newline-terminated error\nmessage corresponding to the last system error. This is prefixed by\n`STRING`, a colon and a space. See `perror(3)`.\n\n\n\n### Syntax\n`CALL PERROR(STRING)`\n\n\n### Arguments\n\n \n and of the\ndefault kind.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nIERRNO\n" +} diff --git a/src/docs/POPCNT.json b/src/docs/POPCNT.json index a3932c36..cfec65c0 100644 --- a/src/docs/POPCNT.json +++ b/src/docs/POPCNT.json @@ -1,4 +1,4 @@ { - "keyword":"POPCNT", - "docstr":"`POPCNT` — Number of bits set\n\n### Description\n`POPCNT(I)` returns the number of bits set ('1' bits) in the binary\nrepresentation of `I`.\n\n\n\n### Syntax\n`RESULT = POPCNT(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram test_population\n\n  print *, popcnt(127), poppar(127)\n\n  print *, popcnt(huge(0_4)), poppar(huge(0_4))\n\n  print *, popcnt(huge(0_8)), poppar(huge(0_8))\n\nend program test_population\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nPOPPAR, LEADZ, TRAILZ\n\n\n" -} \ No newline at end of file + "keyword": "POPCNT", + "docstr": "`POPCNT` — Number of bits set\n\n### Description\n`POPCNT(I)` returns the number of bits set ('1' bits) in the binary\nrepresentation of `I`.\n\n\n\n### Syntax\n`RESULT = POPCNT(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram test_population\n\n  print *, popcnt(127), poppar(127)\n\n  print *, popcnt(huge(0_4)), poppar(huge(0_4))\n\n  print *, popcnt(huge(0_8)), poppar(huge(0_8))\n\nend program test_population\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nPOPPAR, LEADZ, TRAILZ\n\n\n" +} diff --git a/src/docs/POPPAR.json b/src/docs/POPPAR.json index d81c501c..048293d7 100644 --- a/src/docs/POPPAR.json +++ b/src/docs/POPPAR.json @@ -1,4 +1,4 @@ { - "keyword":"POPPAR", - "docstr":"`POPPAR` — Parity of the number of bits set\n\n### Description\n`POPPAR(I)` returns parity of the integer `I`, i.e. the parity\nof the number of bits set ('1' bits) in the binary representation of\n`I`. It is equal to 0 if `I` has an even number of bits set,\nand 1 for an odd number of '1' bits.\n\n\n\n### Syntax\n`RESULT = POPPAR(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram test_population\n\n  print *, popcnt(127), poppar(127)\n\n  print *, popcnt(huge(0_4)), poppar(huge(0_4))\n\n  print *, popcnt(huge(0_8)), poppar(huge(0_8))\n\nend program test_population\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nPOPCNT, LEADZ, TRAILZ\n\n\n" -} \ No newline at end of file + "keyword": "POPPAR", + "docstr": "`POPPAR` — Parity of the number of bits set\n\n### Description\n`POPPAR(I)` returns parity of the integer `I`, i.e. the parity\nof the number of bits set ('1' bits) in the binary representation of\n`I`. It is equal to 0 if `I` has an even number of bits set,\nand 1 for an odd number of '1' bits.\n\n\n\n### Syntax\n`RESULT = POPPAR(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram test_population\n\n  print *, popcnt(127), poppar(127)\n\n  print *, popcnt(huge(0_4)), poppar(huge(0_4))\n\n  print *, popcnt(huge(0_8)), poppar(huge(0_8))\n\nend program test_population\n\n```\n\n \n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nPOPCNT, LEADZ, TRAILZ\n\n\n" +} diff --git a/src/docs/PRECISION.json b/src/docs/PRECISION.json index 307b018f..9c872f87 100644 --- a/src/docs/PRECISION.json +++ b/src/docs/PRECISION.json @@ -1,4 +1,4 @@ { - "keyword":"PRECISION", - "docstr":"`PRECISION` — Decimal precision of a real kind\n\n### Description\n`PRECISION(X)` returns the decimal precision in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = PRECISION(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram prec_and_range\n\n  real(kind=4) :: x(2)\n\n  complex(kind=8) :: y\n\n\n  print *, precision(x), range(x)\n\n  print *, precision(y), range(y)\n\nend program prec_and_range\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND, RANGE\n\n\n" -} \ No newline at end of file + "keyword": "PRECISION", + "docstr": "`PRECISION` — Decimal precision of a real kind\n\n### Description\n`PRECISION(X)` returns the decimal precision in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = PRECISION(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\n```\n\n\nprogram prec_and_range\n\n  real(kind=4) :: x(2)\n\n  complex(kind=8) :: y\n\n\n  print *, precision(x), range(x)\n\n  print *, precision(y), range(y)\n\nend program prec_and_range\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND, RANGE\n\n\n" +} diff --git a/src/docs/PRESENT.json b/src/docs/PRESENT.json index 79c83715..0c368914 100644 --- a/src/docs/PRESENT.json +++ b/src/docs/PRESENT.json @@ -1,4 +1,4 @@ { - "keyword":"PRESENT", - "docstr":"`PRESENT` — Determine whether an optional dummy argument is specified\n\n### Description\nDetermines whether an optional dummy argument is present.\n\n\n\n### Syntax\n`RESULT = PRESENT(A)`\n\n\n### Arguments\n\n \n | `A` | May be of any type and may be a pointer, scalar or array\nvalue, or a dummy procedure. It shall be the name of an optional dummy argument\naccessible within the current subroutine or function.\n\n\n\n\n\n\n### Return value\nReturns either `TRUE` if the optional argument `A` is present, or\n`FALSE` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM test_present\n\n  WRITE(*,*) f(), f(42) ! \"F T\"\n\nCONTAINS\n\n  LOGICAL FUNCTION f(x)\n\n    INTEGER, INTENT(IN), OPTIONAL :: x\n\n    f = PRESENT(x)\n\n  END FUNCTION\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "PRESENT", + "docstr": "`PRESENT` — Determine whether an optional dummy argument is specified\n\n### Description\nDetermines whether an optional dummy argument is present.\n\n\n\n### Syntax\n`RESULT = PRESENT(A)`\n\n\n### Arguments\n\n \n | `A` | May be of any type and may be a pointer, scalar or array\nvalue, or a dummy procedure. It shall be the name of an optional dummy argument\naccessible within the current subroutine or function.\n\n\n\n\n\n\n### Return value\nReturns either `TRUE` if the optional argument `A` is present, or\n`FALSE` otherwise.\n\n\n\n### Example\n```\n\n\nPROGRAM test_present\n\n  WRITE(*,*) f(), f(42) ! \"F T\"\n\nCONTAINS\n\n  LOGICAL FUNCTION f(x)\n\n    INTEGER, INTENT(IN), OPTIONAL :: x\n\n    f = PRESENT(x)\n\n  END FUNCTION\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/PRODUCT.json b/src/docs/PRODUCT.json index 8867b2af..58d5e307 100644 --- a/src/docs/PRODUCT.json +++ b/src/docs/PRODUCT.json @@ -1,4 +1,4 @@ { - "keyword":"PRODUCT", - "docstr":"`PRODUCT` — Product of array elements\n\n### Description\nMultiplies the elements of `ARRAY` along dimension `DIM` if\nthe corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = PRODUCT(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n,\n`REAL` or `COMPLEX`. \n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the product of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_product\n\n  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)\n\n  print *, PRODUCT(x) ! all elements, product = 120\n\n  print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nSUM\n" -} \ No newline at end of file + "keyword": "PRODUCT", + "docstr": "`PRODUCT` — Product of array elements\n\n### Description\nMultiplies the elements of `ARRAY` along dimension `DIM` if\nthe corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = PRODUCT(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n,\n`REAL` or `COMPLEX`. \n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the product of all elements in\n`ARRAY` is returned. Otherwise, an array of rank n-1, where n equals\nthe rank of `ARRAY`, and a shape similar to that of `ARRAY` with\ndimension `DIM` dropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_product\n\n  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)\n\n  print *, PRODUCT(x) ! all elements, product = 120\n\n  print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nSUM\n" +} diff --git a/src/docs/RADIX.json b/src/docs/RADIX.json index 0d5811a7..09f357fe 100644 --- a/src/docs/RADIX.json +++ b/src/docs/RADIX.json @@ -1,4 +1,4 @@ { - "keyword":"RADIX", - "docstr":"`RADIX` — Base of a model number\n\n### Description\n`RADIX(X)` returns the base of the model representing the entity `X`.\n\n\n\n### Syntax\n`RESULT = RADIX(X)`\n\n\n### Arguments\n\n \n\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `INTEGER` and of the default\ninteger kind.\n\n\n\n### Example\n```\n\n\nprogram test_radix\n\n  print *, \"The radix for the default integer kind is\", radix(0)\n\n  print *, \"The radix for the default real kind is\", radix(0.0)\n\nend program test_radix\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND\n\n\n" -} \ No newline at end of file + "keyword": "RADIX", + "docstr": "`RADIX` — Base of a model number\n\n### Description\n`RADIX(X)` returns the base of the model representing the entity `X`.\n\n\n\n### Syntax\n`RESULT = RADIX(X)`\n\n\n### Arguments\n\n \n\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type `INTEGER` and of the default\ninteger kind.\n\n\n\n### Example\n```\n\n\nprogram test_radix\n\n  print *, \"The radix for the default integer kind is\", radix(0)\n\n  print *, \"The radix for the default real kind is\", radix(0.0)\n\nend program test_radix\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND\n\n\n" +} diff --git a/src/docs/RAN.json b/src/docs/RAN.json index 309fbf66..92bb59f8 100644 --- a/src/docs/RAN.json +++ b/src/docs/RAN.json @@ -1,4 +1,4 @@ { - "keyword":"RAN", - "docstr":"`RAN` — Real pseudo-random number\n\n### Description\nFor compatibility with HP FORTRAN 77/iX, the `RAN` intrinsic is\nprovided as an alias for `RAND`. See RAND for complete\ndocumentation.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nRAND, RANDOM_NUMBER\n" -} \ No newline at end of file + "keyword": "RAN", + "docstr": "`RAN` — Real pseudo-random number\n\n### Description\nFor compatibility with HP FORTRAN 77/iX, the `RAN` intrinsic is\nprovided as an alias for `RAND`. See RAND for complete\ndocumentation.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nRAND, RANDOM_NUMBER\n" +} diff --git a/src/docs/RAND.json b/src/docs/RAND.json index 0bccb4d2..430dd2af 100644 --- a/src/docs/RAND.json +++ b/src/docs/RAND.json @@ -1,4 +1,4 @@ { - "keyword":"RAND", - "docstr":"`RAND` — Real pseudo-random number\n\n### Description\n`RAND(FLAG)` returns a pseudo-random number from a uniform\ndistribution between 0 and 1. If `FLAG` is 0, the next number\nin the current sequence is returned; if `FLAG` is 1, the generator\nis restarted by `CALL SRAND(0)`; if `FLAG` has any other value,\nit is used as a new seed with `SRAND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. It implements a simple modulo generator as provided\nby *g77*. For new code, one should consider the use of\nRANDOM_NUMBER as it implements a superior algorithm.\n\n\n\n\n### Syntax\n`RESULT = RAND(I)`\n\n\n### Arguments\n\n \n of kind 4.\n\n\n\n\n\n\n### Return value\nThe return value is of `REAL` type and the default kind.\n\n\n\n### Example\n```\n\n\nprogram test_rand\n\n  integer,parameter :: seed = 86456\n\n\n  call srand(seed)\n\n  print *, rand(), rand(), rand(), rand()\n\n  print *, rand(seed), rand(), rand(), rand()\n\nend program test_rand\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nSRAND, RANDOM_NUMBER\n\n " -} \ No newline at end of file + "keyword": "RAND", + "docstr": "`RAND` — Real pseudo-random number\n\n### Description\n`RAND(FLAG)` returns a pseudo-random number from a uniform\ndistribution between 0 and 1. If `FLAG` is 0, the next number\nin the current sequence is returned; if `FLAG` is 1, the generator\nis restarted by `CALL SRAND(0)`; if `FLAG` has any other value,\nit is used as a new seed with `SRAND`.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. It implements a simple modulo generator as provided\nby *g77*. For new code, one should consider the use of\nRANDOM_NUMBER as it implements a superior algorithm.\n\n\n\n\n### Syntax\n`RESULT = RAND(I)`\n\n\n### Arguments\n\n \n of kind 4.\n\n\n\n\n\n\n### Return value\nThe return value is of `REAL` type and the default kind.\n\n\n\n### Example\n```\n\n\nprogram test_rand\n\n  integer,parameter :: seed = 86456\n\n\n  call srand(seed)\n\n  print *, rand(), rand(), rand(), rand()\n\n  print *, rand(seed), rand(), rand(), rand()\n\nend program test_rand\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nSRAND, RANDOM_NUMBER\n\n " +} diff --git a/src/docs/RANDOM_INIT.json b/src/docs/RANDOM_INIT.json index 592ec96c..9e4a0346 100644 --- a/src/docs/RANDOM_INIT.json +++ b/src/docs/RANDOM_INIT.json @@ -1,4 +1,4 @@ { - "keyword":"RANDOM_INIT", - "docstr":"`RANDOM_INIT` — Initialize a pseudo-random number generator\n\n### Description\nInitializes the state of the pseudorandom number generator used by RANDOM_NUMBER.\n### Standard\nFortran 2018\n### Class\nSubroutine\n### Syntax\nCALL RANDOM_INIT(REPEATABLE, IMAGE_DISTINCT)\n### Arguments\n- REPEATABLE: Shall be a scalar with a LOGICAL type, and it is INTENT(IN). If it is .true., the seed is set to a processor-dependent value that is the same each time RANDOM_INIT is called from the same image. The term “same image” means a single instance of program execution. The sequence of random numbers is different for repeated execution of the program. If it is .false., the seed is set to a processor-dependent value.\n- IMAGE_DISTINCT: Shall be a scalar with a LOGICAL type, and it is INTENT(IN). If it is .true., the seed is set to a processor-dependent value that is distinct from th seed set by a call to RANDOM_INIT in another image. If it is .false., the seed is set value that does depend which image called RANDOM_INIT.\n" -} \ No newline at end of file + "keyword": "RANDOM_INIT", + "docstr": "`RANDOM_INIT` — Initialize a pseudo-random number generator\n\n### Description\nInitializes the state of the pseudorandom number generator used by RANDOM_NUMBER.\n### Standard\nFortran 2018\n### Class\nSubroutine\n### Syntax\nCALL RANDOM_INIT(REPEATABLE, IMAGE_DISTINCT)\n### Arguments\n- REPEATABLE: Shall be a scalar with a LOGICAL type, and it is INTENT(IN). If it is .true., the seed is set to a processor-dependent value that is the same each time RANDOM_INIT is called from the same image. The term “same image” means a single instance of program execution. The sequence of random numbers is different for repeated execution of the program. If it is .false., the seed is set to a processor-dependent value.\n- IMAGE_DISTINCT: Shall be a scalar with a LOGICAL type, and it is INTENT(IN). If it is .true., the seed is set to a processor-dependent value that is distinct from th seed set by a call to RANDOM_INIT in another image. If it is .false., the seed is set value that does depend which image called RANDOM_INIT.\n" +} diff --git a/src/docs/RANDOM_NUMBER.json b/src/docs/RANDOM_NUMBER.json index 817da88a..4e65e7cf 100644 --- a/src/docs/RANDOM_NUMBER.json +++ b/src/docs/RANDOM_NUMBER.json @@ -1,4 +1,4 @@ { - "keyword":"RANDOM_NUMBER", - "docstr":"`RANDOM_NUMBER` — Pseudo-random number\n\n### Description\nReturns a single pseudorandom number or an array of pseudorandom numbers\nfrom the uniform distribution over the range 0 \\leq x < 1.\n\n \nThe runtime-library implements George Marsaglia's KISS (Keep It Simple\nStupid) random number generator (RNG). This RNG combines:\n \n
    \n
  1. The congruential generator x(n) = 69069 \\cdot x(n-1) + 1327217885\nwith a period of 2^32,\n
  2. A 3-shift shift-register generator with a period of 2^32 - 1,\n
  3. Two 16-bit multiply-with-carry generators with a period of\n597273182964842497 > 2^59.\n
\nThe overall period exceeds 2^123.\n\n \nPlease note, this RNG is thread safe if used within OpenMP directives,\ni.e., its state will be consistent while called from multiple threads. \nHowever, the KISS generator does not create random numbers in parallel\nfrom multiple sources, but in sequence from a single source. If an\nOpenMP-enabled application heavily relies on random numbers, one should\nconsider employing a dedicated parallel random number generator instead.\n\n\n\n\n### Syntax\n`RANDOM_NUMBER(HARVEST)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_random_number\n\n  REAL :: r(5,5)\n\n  CALL init_random_seed() ! see example of RANDOM_SEED\n\n  CALL RANDOM_NUMBER(r)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_SEED\n" -} \ No newline at end of file + "keyword": "RANDOM_NUMBER", + "docstr": "`RANDOM_NUMBER` — Pseudo-random number\n\n### Description\nReturns a single pseudorandom number or an array of pseudorandom numbers\nfrom the uniform distribution over the range 0 \\leq x < 1.\n\n \nThe runtime-library implements George Marsaglia's KISS (Keep It Simple\nStupid) random number generator (RNG). This RNG combines:\n \n
    \n
  1. The congruential generator x(n) = 69069 \\cdot x(n-1) + 1327217885\nwith a period of 2^32,\n
  2. A 3-shift shift-register generator with a period of 2^32 - 1,\n
  3. Two 16-bit multiply-with-carry generators with a period of\n597273182964842497 > 2^59.\n
\nThe overall period exceeds 2^123.\n\n \nPlease note, this RNG is thread safe if used within OpenMP directives,\ni.e., its state will be consistent while called from multiple threads. \nHowever, the KISS generator does not create random numbers in parallel\nfrom multiple sources, but in sequence from a single source. If an\nOpenMP-enabled application heavily relies on random numbers, one should\nconsider employing a dedicated parallel random number generator instead.\n\n\n\n\n### Syntax\n`RANDOM_NUMBER(HARVEST)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_random_number\n\n  REAL :: r(5,5)\n\n  CALL init_random_seed() ! see example of RANDOM_SEED\n\n  CALL RANDOM_NUMBER(r)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_SEED\n" +} diff --git a/src/docs/RANDOM_SEED.json b/src/docs/RANDOM_SEED.json index 2d37df0e..5f23756e 100644 --- a/src/docs/RANDOM_SEED.json +++ b/src/docs/RANDOM_SEED.json @@ -1,4 +1,4 @@ { - "keyword":"RANDOM_SEED", - "docstr":"`RANDOM_SEED` — Initialize a pseudo-random number sequence\n\n### Description\nRestarts or queries the state of the pseudorandom number generator used by\n`RANDOM_NUMBER`.\n\n \nIf `RANDOM_SEED` is called without arguments, it is initialized\nto a default state. The example below shows how to initialize the\nrandom seed with a varying seed in order to ensure a different random\nnumber sequence for each invocation of the program. Note that setting\nany of the seed values to zero should be avoided as it can result in\npoor quality random numbers being generated.\n\n\n\n\n### Syntax\n`CALL RANDOM_SEED([SIZE, PUT, GET])`\n\n\n### Arguments\n\n \n | `SIZE` | (Optional) Shall be a scalar and of type default\n`INTEGER`, with `INTENT(OUT)`. It specifies the minimum size\nof the arrays used with the `PUT` and `GET` arguments. \n\n | `PUT` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(IN)` and the size of\nthe array must be larger than or equal to the number returned by the\n`SIZE` argument. \n\n | `GET` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(OUT)` and the size\nof the array must be larger than or equal to the number returned by\nthe `SIZE` argument.\n\n\n\n\n\n\n### Example\n```\n\n\nsubroutine init_random_seed()\n\n  use iso_fortran_env, only: int64\n\n  implicit none\n\n  integer, allocatable :: seed(:)\n\n  integer :: i, n, un, istat, dt(8), pid\n\n  integer(int64) :: t\n\n\n  call random_seed(size = n)\n\n  allocate(seed(n))\n\n  ! First try if the OS provides a random number generator\n\n  open(newunit=un, file=\"/dev/urandom\", access=\"stream\", &\n\n       form=\"unformatted\", action=\"read\", status=\"old\", iostat=istat)\n\n  if (istat == 0) then\n\n     read(un) seed\n\n     close(un)\n\n  else\n\n     ! Fallback to XOR:ing the current time and pid. The PID is\n\n     ! useful in case one launches multiple instances of the same\n\n     ! program in parallel.\n\n     call system_clock(t)\n\n     if (t == 0) then\n\n        call date_and_time(values=dt)\n\n        t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(3) * 24_int64 * 60 * 60 * 1000 &\n\n             + dt(5) * 60 * 60 * 1000 &\n\n             + dt(6) * 60 * 1000 + dt(7) * 1000 &\n\n             + dt(8)\n\n     end if\n\n     pid = getpid()\n\n     t = ieor(t, int(pid, kind(t)))\n\n     do i = 1, n\n\n        seed(i) = lcg(t)\n\n     end do\n\n  end if\n\n  call random_seed(put=seed)\n\ncontains\n\n  ! This simple PRNG might not be good enough for real work, but is\n\n  ! sufficient for seeding a better PRNG.\n\n  function lcg(s)\n\n    integer :: lcg\n\n    integer(int64) :: s\n\n    if (s == 0) then\n\n       s = 104729\n\n    else\n\n       s = mod(s, 4294967296_int64)\n\n    end if\n\n    s = mod(s * 279470273_int64, 4294967291_int64)\n\n    lcg = int(mod(s, int(huge(0), int64)), kind(0))\n\n  end function lcg\n\nend subroutine init_random_seed\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_NUMBER\n" -} \ No newline at end of file + "keyword": "RANDOM_SEED", + "docstr": "`RANDOM_SEED` — Initialize a pseudo-random number sequence\n\n### Description\nRestarts or queries the state of the pseudorandom number generator used by\n`RANDOM_NUMBER`.\n\n \nIf `RANDOM_SEED` is called without arguments, it is initialized\nto a default state. The example below shows how to initialize the\nrandom seed with a varying seed in order to ensure a different random\nnumber sequence for each invocation of the program. Note that setting\nany of the seed values to zero should be avoided as it can result in\npoor quality random numbers being generated.\n\n\n\n\n### Syntax\n`CALL RANDOM_SEED([SIZE, PUT, GET])`\n\n\n### Arguments\n\n \n | `SIZE` | (Optional) Shall be a scalar and of type default\n`INTEGER`, with `INTENT(OUT)`. It specifies the minimum size\nof the arrays used with the `PUT` and `GET` arguments. \n\n | `PUT` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(IN)` and the size of\nthe array must be larger than or equal to the number returned by the\n`SIZE` argument. \n\n | `GET` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(OUT)` and the size\nof the array must be larger than or equal to the number returned by\nthe `SIZE` argument.\n\n\n\n\n\n\n### Example\n```\n\n\nsubroutine init_random_seed()\n\n  use iso_fortran_env, only: int64\n\n  implicit none\n\n  integer, allocatable :: seed(:)\n\n  integer :: i, n, un, istat, dt(8), pid\n\n  integer(int64) :: t\n\n\n  call random_seed(size = n)\n\n  allocate(seed(n))\n\n  ! First try if the OS provides a random number generator\n\n  open(newunit=un, file=\"/dev/urandom\", access=\"stream\", &\n\n       form=\"unformatted\", action=\"read\", status=\"old\", iostat=istat)\n\n  if (istat == 0) then\n\n     read(un) seed\n\n     close(un)\n\n  else\n\n     ! Fallback to XOR:ing the current time and pid. The PID is\n\n     ! useful in case one launches multiple instances of the same\n\n     ! program in parallel.\n\n     call system_clock(t)\n\n     if (t == 0) then\n\n        call date_and_time(values=dt)\n\n        t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(3) * 24_int64 * 60 * 60 * 1000 &\n\n             + dt(5) * 60 * 60 * 1000 &\n\n             + dt(6) * 60 * 1000 + dt(7) * 1000 &\n\n             + dt(8)\n\n     end if\n\n     pid = getpid()\n\n     t = ieor(t, int(pid, kind(t)))\n\n     do i = 1, n\n\n        seed(i) = lcg(t)\n\n     end do\n\n  end if\n\n  call random_seed(put=seed)\n\ncontains\n\n  ! This simple PRNG might not be good enough for real work, but is\n\n  ! sufficient for seeding a better PRNG.\n\n  function lcg(s)\n\n    integer :: lcg\n\n    integer(int64) :: s\n\n    if (s == 0) then\n\n       s = 104729\n\n    else\n\n       s = mod(s, 4294967296_int64)\n\n    end if\n\n    s = mod(s * 279470273_int64, 4294967291_int64)\n\n    lcg = int(mod(s, int(huge(0), int64)), kind(0))\n\n  end function lcg\n\nend subroutine init_random_seed\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_NUMBER\n" +} diff --git a/src/docs/RANGE.json b/src/docs/RANGE.json index 1e939a29..b966d1b1 100644 --- a/src/docs/RANGE.json +++ b/src/docs/RANGE.json @@ -1,4 +1,4 @@ { - "keyword":"RANGE", - "docstr":"`RANGE` — Decimal exponent range\n\n### Description\n`RANGE(X)` returns the decimal exponent range in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = RANGE(X)`\n\n\n### Arguments\n\n \n\nor `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\nSee `PRECISION` for an example. \n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND, PRECISION\n\n\n" -} \ No newline at end of file + "keyword": "RANGE", + "docstr": "`RANGE` — Decimal exponent range\n\n### Description\n`RANGE(X)` returns the decimal exponent range in the model of the\ntype of `X`.\n\n\n\n### Syntax\n`RESULT = RANGE(X)`\n\n\n### Arguments\n\n \n\nor `COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind.\n\n\n\n### Example\nSee `PRECISION` for an example. \n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSELECTED_REAL_KIND, PRECISION\n\n\n" +} diff --git a/src/docs/RANK.json b/src/docs/RANK.json index 3e170161..aba19fff 100644 --- a/src/docs/RANK.json +++ b/src/docs/RANK.json @@ -1,4 +1,4 @@ { - "keyword":"RANK", - "docstr":"`RANK` — Rank of a data object\n\n### Description\n`RANK(A)` returns the rank of a scalar or array data object.\n\n\n\n### Syntax\n`RESULT = RANK(A)`\n\n\n### Arguments\n\n \n | `A` | can be of any type\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind. For arrays, their rank is returned; for scalars zero is returned.\n\n\n\n### Example\n```\n\n\nprogram test_rank\n\n  integer :: a\n\n  real, allocatable :: b(:,:)\n\n\n  print *, rank(a), rank(b) ! Prints: 0 2\n\nend program test_rank\n\n```\n\n \n\n### Standard\nTechnical Specification (TS) 29113\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "RANK", + "docstr": "`RANK` — Rank of a data object\n\n### Description\n`RANK(A)` returns the rank of a scalar or array data object.\n\n\n\n### Syntax\n`RESULT = RANK(A)`\n\n\n### Arguments\n\n \n | `A` | can be of any type\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the default integer\nkind. For arrays, their rank is returned; for scalars zero is returned.\n\n\n\n### Example\n```\n\n\nprogram test_rank\n\n  integer :: a\n\n  real, allocatable :: b(:,:)\n\n\n  print *, rank(a), rank(b) ! Prints: 0 2\n\nend program test_rank\n\n```\n\n \n\n### Standard\nTechnical Specification (TS) 29113\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/REAL.json b/src/docs/REAL.json index be6f8678..5f67faac 100644 --- a/src/docs/REAL.json +++ b/src/docs/REAL.json @@ -1,4 +1,4 @@ { - "keyword":"REAL", - "docstr":"`REAL` — Convert to real type\n\n### Description\n`REAL(A [, KIND])` converts its argument `A` to a real type. The\n`REALPART` function is provided for compatibility with *g77*,\nand its use is strongly discouraged.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = REALPART(Z)`
\n\n\n\n\n\n### Arguments\n\n \n, or\n`COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `REAL` variable or array under\nthe following rules:\n\n
\n**(A)** `REAL(A)` is converted to a default real type if `A` is an\ninteger or real variable. \n\n**(B)** `REAL(A)` is converted to a real type with the kind type parameter\nof `A` if `A` is a complex variable. \n\n**(C)** `REAL(A, KIND)` is converted to a real type with kind type\nparameter `KIND` if `A` is a complex, integer, or real\nvariable. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_real\n\n  complex :: x = (1.0, 2.0)\n\n  print *, real(x), real(x,8), realpart(x)\n\nend program test_real\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `FLOAT(A)` | `INTEGER(4)` | `REAL(4)` | Fortran 77 and later\n\n | `DFLOAT(A)` | `INTEGER(4)` | `REAL(8)` | GNU extension\n\n | `SNGL(A)` | `INTEGER(8)` | `REAL(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nDBLE\n\n " -} \ No newline at end of file + "keyword": "REAL", + "docstr": "`REAL` — Convert to real type\n\n### Description\n`REAL(A [, KIND])` converts its argument `A` to a real type. The\n`REALPART` function is provided for compatibility with *g77*,\nand its use is strongly discouraged.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = REALPART(Z)`
\n\n\n\n\n\n### Arguments\n\n \n, or\n`COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `REAL` variable or array under\nthe following rules:\n\n
\n**(A)** `REAL(A)` is converted to a default real type if `A` is an\ninteger or real variable. \n\n**(B)** `REAL(A)` is converted to a real type with the kind type parameter\nof `A` if `A` is a complex variable. \n\n**(C)** `REAL(A, KIND)` is converted to a real type with kind type\nparameter `KIND` if `A` is a complex, integer, or real\nvariable. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_real\n\n  complex :: x = (1.0, 2.0)\n\n  print *, real(x), real(x,8), realpart(x)\n\nend program test_real\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `FLOAT(A)` | `INTEGER(4)` | `REAL(4)` | Fortran 77 and later\n\n | `DFLOAT(A)` | `INTEGER(4)` | `REAL(8)` | GNU extension\n\n | `SNGL(A)` | `INTEGER(8)` | `REAL(4)` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nDBLE\n\n " +} diff --git a/src/docs/RENAME.json b/src/docs/RENAME.json index e4d6aca7..7084f1da 100644 --- a/src/docs/RENAME.json +++ b/src/docs/RENAME.json @@ -1,4 +1,4 @@ { - "keyword":"RENAME", - "docstr":"`RENAME` — Rename a file\n\n### Description\nRenames a file from file `PATH1` to `PATH2`. A null\ncharacter (`CHAR(0)`) can be used to mark the end of the names in\n`PATH1` and `PATH2`; otherwise, trailing blanks in the file\nnames are ignored. If the `STATUS` argument is supplied, it\ncontains 0 on success or a nonzero error code upon return; see\n`rename(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = RENAME(PATH1, PATH2)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `PATH2` | Shall be of default `CHARACTER` type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nLINK\n\n " -} \ No newline at end of file + "keyword": "RENAME", + "docstr": "`RENAME` — Rename a file\n\n### Description\nRenames a file from file `PATH1` to `PATH2`. A null\ncharacter (`CHAR(0)`) can be used to mark the end of the names in\n`PATH1` and `PATH2`; otherwise, trailing blanks in the file\nnames are ignored. If the `STATUS` argument is supplied, it\ncontains 0 on success or a nonzero error code upon return; see\n`rename(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = RENAME(PATH1, PATH2)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `PATH2` | Shall be of default `CHARACTER` type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nLINK\n\n " +} diff --git a/src/docs/REPEAT.json b/src/docs/REPEAT.json index 5419280a..07f6291f 100644 --- a/src/docs/REPEAT.json +++ b/src/docs/REPEAT.json @@ -1,4 +1,4 @@ { - "keyword":"REPEAT", - "docstr":"`REPEAT` — Repeated string concatenation\n\n### Description\nConcatenates `NCOPIES` copies of a string.\n\n\n\n### Syntax\n`RESULT = REPEAT(STRING, NCOPIES)`\n\n\n### Arguments\n\n \n. \n\n | `NCOPIES` | Shall be scalar and of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nA new scalar of type `CHARACTER` built up from `NCOPIES` copies\nof `STRING`.\n\n\n\n### Example\n```\n\n\nprogram test_repeat\n\n  write(*,*) repeat(\"x\", 5) ! \"xxxxx\"\n\nend program\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "REPEAT", + "docstr": "`REPEAT` — Repeated string concatenation\n\n### Description\nConcatenates `NCOPIES` copies of a string.\n\n\n\n### Syntax\n`RESULT = REPEAT(STRING, NCOPIES)`\n\n\n### Arguments\n\n \n. \n\n | `NCOPIES` | Shall be scalar and of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nA new scalar of type `CHARACTER` built up from `NCOPIES` copies\nof `STRING`.\n\n\n\n### Example\n```\n\n\nprogram test_repeat\n\n  write(*,*) repeat(\"x\", 5) ! \"xxxxx\"\n\nend program\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/RESHAPE.json b/src/docs/RESHAPE.json index 42a443e9..6b217cd6 100644 --- a/src/docs/RESHAPE.json +++ b/src/docs/RESHAPE.json @@ -1,4 +1,4 @@ { - "keyword":"RESHAPE", - "docstr":"`RESHAPE` — Function to reshape an array\n\n### Description\nReshapes `SOURCE` to correspond to `SHAPE`. If necessary,\nthe new array may be padded with elements from `PAD` or permuted\nas defined by `ORDER`.\n\n\n\n### Syntax\n`RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be an array of any type. \n\n | `SHAPE` | Shall be of type `INTEGER` and an\narray of rank one. Its values must be positive or zero. \n\n | `PAD` | (Optional) shall be an array of the same\ntype as `SOURCE`. \n\n | `ORDER` | (Optional) shall be of type `INTEGER`and an array of the same shape as `SHAPE`. Its values shall\nbe a permutation of the numbers from 1 to n, where n is the size of\n`SHAPE`. If `ORDER` is absent, the natural ordering shall\nbe assumed.\n\n\n\n\n\n\n### Return value\nThe result is an array of shape `SHAPE` with the same type as\n`SOURCE`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_reshape\n\n  INTEGER, DIMENSION(4) :: x\n\n  WRITE(*,*) SHAPE(x) ! prints \"4\"\n\n  WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/))) ! prints \"2 2\"\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nSHAPE\n" -} \ No newline at end of file + "keyword": "RESHAPE", + "docstr": "`RESHAPE` — Function to reshape an array\n\n### Description\nReshapes `SOURCE` to correspond to `SHAPE`. If necessary,\nthe new array may be padded with elements from `PAD` or permuted\nas defined by `ORDER`.\n\n\n\n### Syntax\n`RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be an array of any type. \n\n | `SHAPE` | Shall be of type `INTEGER` and an\narray of rank one. Its values must be positive or zero. \n\n | `PAD` | (Optional) shall be an array of the same\ntype as `SOURCE`. \n\n | `ORDER` | (Optional) shall be of type `INTEGER`and an array of the same shape as `SHAPE`. Its values shall\nbe a permutation of the numbers from 1 to n, where n is the size of\n`SHAPE`. If `ORDER` is absent, the natural ordering shall\nbe assumed.\n\n\n\n\n\n\n### Return value\nThe result is an array of shape `SHAPE` with the same type as\n`SOURCE`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_reshape\n\n  INTEGER, DIMENSION(4) :: x\n\n  WRITE(*,*) SHAPE(x) ! prints \"4\"\n\n  WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/))) ! prints \"2 2\"\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nSHAPE\n" +} diff --git a/src/docs/RRSPACING.json b/src/docs/RRSPACING.json index 1f29d299..e90a2d90 100644 --- a/src/docs/RRSPACING.json +++ b/src/docs/RRSPACING.json @@ -1,4 +1,4 @@ { - "keyword":"RRSPACING", - "docstr":"`RRSPACING` — Reciprocal of the relative spacing\n\n### Description\n`RRSPACING(X)` returns the reciprocal of the relative spacing of\nmodel numbers near `X`.\n\n\n\n### Syntax\n`RESULT = RRSPACING(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe value returned is equal to\n`ABS(FRACTION(X)) * FLOAT(RADIX(X))**DIGITS(X)`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSPACING\n" -} \ No newline at end of file + "keyword": "RRSPACING", + "docstr": "`RRSPACING` — Reciprocal of the relative spacing\n\n### Description\n`RRSPACING(X)` returns the reciprocal of the relative spacing of\nmodel numbers near `X`.\n\n\n\n### Syntax\n`RESULT = RRSPACING(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe value returned is equal to\n`ABS(FRACTION(X)) * FLOAT(RADIX(X))**DIGITS(X)`.\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSPACING\n" +} diff --git a/src/docs/RSHIFT.json b/src/docs/RSHIFT.json index 80245c09..3674d067 100644 --- a/src/docs/RSHIFT.json +++ b/src/docs/RSHIFT.json @@ -1,4 +1,4 @@ { - "keyword":"RSHIFT", - "docstr":"`RSHIFT` — Right shift bits\n\n### Description\n`RSHIFT` returns a value corresponding to `I` with all of the\nbits shifted right by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the right end are lost. The fill is arithmetic: the\nbits shifted in from the left end are equal to the leftmost bit, which in\ntwo's complement representation is the sign bit.\n\n \nThis function has been superseded by the `SHIFTA` intrinsic, which\nis standard in Fortran 2008 and later.\n\n\n\n\n### Syntax\n`RESULT = RSHIFT(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nISHFT, ISHFTC, LSHIFT, SHIFTA, SHIFTR,\nSHIFTL\n\n " -} \ No newline at end of file + "keyword": "RSHIFT", + "docstr": "`RSHIFT` — Right shift bits\n\n### Description\n`RSHIFT` returns a value corresponding to `I` with all of the\nbits shifted right by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the right end are lost. The fill is arithmetic: the\nbits shifted in from the left end are equal to the leftmost bit, which in\ntwo's complement representation is the sign bit.\n\n \nThis function has been superseded by the `SHIFTA` intrinsic, which\nis standard in Fortran 2008 and later.\n\n\n\n\n### Syntax\n`RESULT = RSHIFT(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nISHFT, ISHFTC, LSHIFT, SHIFTA, SHIFTR,\nSHIFTL\n\n " +} diff --git a/src/docs/SAME_TYPE_AS.json b/src/docs/SAME_TYPE_AS.json index 99b61c67..2f681dd5 100644 --- a/src/docs/SAME_TYPE_AS.json +++ b/src/docs/SAME_TYPE_AS.json @@ -1,4 +1,4 @@ { - "keyword":"SAME_TYPE_AS", - "docstr":"`SAME_TYPE_AS` — Query dynamic types for equality\n\n### Description\nQuery dynamic types for equality.\n\n\n\n### Syntax\n`RESULT = SAME_TYPE_AS(A, B)`\n\n\n### Arguments\n\n \n | `A` | Shall be an object of extensible declared type or\nunlimited polymorphic. \n\n | `B` | Shall be an object of extensible declared type or\nunlimited polymorphic.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type default logical. It is true if and\nonly if the dynamic type of A is the same as the dynamic type of B.\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nEXTENDS_TYPE_OF\n\n " -} \ No newline at end of file + "keyword": "SAME_TYPE_AS", + "docstr": "`SAME_TYPE_AS` — Query dynamic types for equality\n\n### Description\nQuery dynamic types for equality.\n\n\n\n### Syntax\n`RESULT = SAME_TYPE_AS(A, B)`\n\n\n### Arguments\n\n \n | `A` | Shall be an object of extensible declared type or\nunlimited polymorphic. \n\n | `B` | Shall be an object of extensible declared type or\nunlimited polymorphic.\n\n\n\n\n\n\n### Return value\nThe return value is a scalar of type default logical. It is true if and\nonly if the dynamic type of A is the same as the dynamic type of B.\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nEXTENDS_TYPE_OF\n\n " +} diff --git a/src/docs/SCALE.json b/src/docs/SCALE.json index 05b10d6c..89893829 100644 --- a/src/docs/SCALE.json +++ b/src/docs/SCALE.json @@ -1,4 +1,4 @@ { - "keyword":"SCALE", - "docstr":"`SCALE` — Scale a real value\n\n### Description\n`SCALE(X,I)` returns `X * RADIX(X)**I`.\n\n\n\n### Syntax\n`RESULT = SCALE(X, I)`\n\n\n### Arguments\n\n \n. \n\n | `I` | The type of the argument shall be a `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nIts value is `X * RADIX(X)**I`.\n\n\n\n### Example\n```\n\n\nprogram test_scale\n\n  real :: x = 178.1387e-4\n\n  integer :: i = 5\n\n  print *, scale(x,i), x*radix(x)**i\n\nend program test_scale\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "SCALE", + "docstr": "`SCALE` — Scale a real value\n\n### Description\n`SCALE(X,I)` returns `X * RADIX(X)**I`.\n\n\n\n### Syntax\n`RESULT = SCALE(X, I)`\n\n\n### Arguments\n\n \n. \n\n | `I` | The type of the argument shall be a `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nIts value is `X * RADIX(X)**I`.\n\n\n\n### Example\n```\n\n\nprogram test_scale\n\n  real :: x = 178.1387e-4\n\n  integer :: i = 5\n\n  print *, scale(x,i), x*radix(x)**i\n\nend program test_scale\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/SCAN.json b/src/docs/SCAN.json index 95ef48c4..f3bf2ae3 100644 --- a/src/docs/SCAN.json +++ b/src/docs/SCAN.json @@ -1,4 +1,4 @@ { - "keyword":"SCAN", - "docstr":"`SCAN` — Scan a string for the presence of a set of characters\n\n### Description\nScans a `STRING` for any of the characters in a `SET`\nof characters.\n\n \nIf `BACK` is either absent or equals `FALSE`, this function\nreturns the position of the leftmost character of `STRING` that is\nin `SET`. If `BACK` equals `TRUE`, the rightmost position\nis returned. If no character of `SET` is found in `STRING`, the\nresult is zero.\n\n\n\n\n### Syntax\n`RESULT = SCAN(STRING, SET[, BACK [, KIND]])`\n\n\n### Arguments\n\n \n. \n\n | `SET` | Shall be of type `CHARACTER`. \n\n | `BACK` | (Optional) shall be of type `LOGICAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_scan\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"AO\") ! 2, found 'O'\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"AO\", .TRUE.) ! 6, found 'A'\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"C++\") ! 0, found none\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINDEX intrinsic, VERIFY\n" -} \ No newline at end of file + "keyword": "SCAN", + "docstr": "`SCAN` — Scan a string for the presence of a set of characters\n\n### Description\nScans a `STRING` for any of the characters in a `SET`\nof characters.\n\n \nIf `BACK` is either absent or equals `FALSE`, this function\nreturns the position of the leftmost character of `STRING` that is\nin `SET`. If `BACK` equals `TRUE`, the rightmost position\nis returned. If no character of `SET` is found in `STRING`, the\nresult is zero.\n\n\n\n\n### Syntax\n`RESULT = SCAN(STRING, SET[, BACK [, KIND]])`\n\n\n### Arguments\n\n \n. \n\n | `SET` | Shall be of type `CHARACTER`. \n\n | `BACK` | (Optional) shall be of type `LOGICAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_scan\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"AO\") ! 2, found 'O'\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"AO\", .TRUE.) ! 6, found 'A'\n\n  WRITE(*,*) SCAN(\"FORTRAN\", \"C++\") ! 0, found none\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nINDEX intrinsic, VERIFY\n" +} diff --git a/src/docs/SECNDS.json b/src/docs/SECNDS.json index 0972d391..a4514e58 100644 --- a/src/docs/SECNDS.json +++ b/src/docs/SECNDS.json @@ -1,4 +1,4 @@ { - "keyword":"SECNDS", - "docstr":"`SECNDS` — Time function\n\n### Description\n`SECNDS(X)` gets the time in seconds from the real-time system clock. \n`X` is a reference time, also in seconds. If this is zero, the time in\nseconds from midnight is returned. This function is non-standard and its\nuse is discouraged.\n\n\n\n### Syntax\n`RESULT = SECNDS (X)`\n\n\n### Arguments\n\n \n. \n\n | `X` | Shall be of type `REAL(4)`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_secnds\n\n    integer :: i\n\n    real(4) :: t1, t2\n\n    print *, secnds (0.0) ! seconds since midnight\n\n    t1 = secnds (0.0) ! reference time\n\n    do i = 1, 10000000 ! do something\n\n    end do\n\n    t2 = secnds (t1) ! elapsed time\n\n    print *, \"Something took \", t2, \" seconds.\"\n\nend program test_secnds\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" -} \ No newline at end of file + "keyword": "SECNDS", + "docstr": "`SECNDS` — Time function\n\n### Description\n`SECNDS(X)` gets the time in seconds from the real-time system clock. \n`X` is a reference time, also in seconds. If this is zero, the time in\nseconds from midnight is returned. This function is non-standard and its\nuse is discouraged.\n\n\n\n### Syntax\n`RESULT = SECNDS (X)`\n\n\n### Arguments\n\n \n. \n\n | `X` | Shall be of type `REAL(4)`.\n\n\n\n\n\n\n### Return value\nNone\n\n\n\n### Example\n```\n\n\nprogram test_secnds\n\n    integer :: i\n\n    real(4) :: t1, t2\n\n    print *, secnds (0.0) ! seconds since midnight\n\n    t1 = secnds (0.0) ! reference time\n\n    do i = 1, 10000000 ! do something\n\n    end do\n\n    t2 = secnds (t1) ! elapsed time\n\n    print *, \"Something took \", t2, \" seconds.\"\n\nend program test_secnds\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n" +} diff --git a/src/docs/SECOND.json b/src/docs/SECOND.json index dddd5f90..74009dfe 100644 --- a/src/docs/SECOND.json +++ b/src/docs/SECOND.json @@ -1,4 +1,4 @@ { - "keyword":"SECOND", - "docstr":"`SECOND` — CPU time function\n\n### Description\nReturns a `REAL(4)` value representing the elapsed CPU time in\nseconds. This provides the same functionality as the standard\n`CPU_TIME` intrinsic, and is only included for backwards\ncompatibility.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `TIME = SECOND()`
\n\n\n\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nIn either syntax, `TIME` is set to the process's current runtime in\nseconds.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " -} \ No newline at end of file + "keyword": "SECOND", + "docstr": "`SECOND` — CPU time function\n\n### Description\nReturns a `REAL(4)` value representing the elapsed CPU time in\nseconds. This provides the same functionality as the standard\n`CPU_TIME` intrinsic, and is only included for backwards\ncompatibility.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `TIME = SECOND()`
\n\n\n\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nIn either syntax, `TIME` is set to the process's current runtime in\nseconds.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nCPU_TIME\n\n " +} diff --git a/src/docs/SELECTED_CHAR_KIND.json b/src/docs/SELECTED_CHAR_KIND.json index b2fc6aa9..3979f794 100644 --- a/src/docs/SELECTED_CHAR_KIND.json +++ b/src/docs/SELECTED_CHAR_KIND.json @@ -1,4 +1,4 @@ { - "keyword":"SELECTED_CHAR_KIND", - "docstr":"`SELECTED_CHAR_KIND` — Choose character kind\n\n### Description\n\n`SELECTED_CHAR_KIND(NAME)` returns the kind value for the character\nset named `NAME`, if a character set with such a name is supported,\nor -1 otherwise. Currently, supported character sets include\n“ASCII” and “DEFAULT”, which are equivalent, and “ISO_10646”\n(Universal Character Set, UCS-4) which is commonly known as Unicode.\n\n\n\n### Syntax\n`RESULT = SELECTED_CHAR_KIND(NAME)`\n\n\n### Arguments\n\n \n | `NAME` | Shall be a scalar and of the default character type.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram character_kind\n\n  use iso_fortran_env\n\n  implicit none\n\n  integer, parameter :: ascii = selected_char_kind (\"ascii\")\n\n  integer, parameter :: ucs4 = selected_char_kind ('ISO_10646')\n\n\n  character(kind=ascii, len=26) :: alphabet\n\n  character(kind=ucs4, len=30) :: hello_world\n\n\n  alphabet = ascii_\"abcdefghijklmnopqrstuvwxyz\"\n\n  hello_world = ucs4_'Hello World and Ni Hao -- ' &\n\n                // char (int (z'4F60'), ucs4) &\n\n                // char (int (z'597D'), ucs4)\n\n\n  write (*,*) alphabet\n\n\n  open (output_unit, encoding='UTF-8')\n\n  write (*,*) trim (hello_world)\n\nend program character_kind\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "SELECTED_CHAR_KIND", + "docstr": "`SELECTED_CHAR_KIND` — Choose character kind\n\n### Description\n\n`SELECTED_CHAR_KIND(NAME)` returns the kind value for the character\nset named `NAME`, if a character set with such a name is supported,\nor -1 otherwise. Currently, supported character sets include\n“ASCII” and “DEFAULT”, which are equivalent, and “ISO_10646”\n(Universal Character Set, UCS-4) which is commonly known as Unicode.\n\n\n\n### Syntax\n`RESULT = SELECTED_CHAR_KIND(NAME)`\n\n\n### Arguments\n\n \n | `NAME` | Shall be a scalar and of the default character type.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram character_kind\n\n  use iso_fortran_env\n\n  implicit none\n\n  integer, parameter :: ascii = selected_char_kind (\"ascii\")\n\n  integer, parameter :: ucs4 = selected_char_kind ('ISO_10646')\n\n\n  character(kind=ascii, len=26) :: alphabet\n\n  character(kind=ucs4, len=30) :: hello_world\n\n\n  alphabet = ascii_\"abcdefghijklmnopqrstuvwxyz\"\n\n  hello_world = ucs4_'Hello World and Ni Hao -- ' &\n\n                // char (int (z'4F60'), ucs4) &\n\n                // char (int (z'597D'), ucs4)\n\n\n  write (*,*) alphabet\n\n\n  open (output_unit, encoding='UTF-8')\n\n  write (*,*) trim (hello_world)\n\nend program character_kind\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/SELECTED_INT_KIND.json b/src/docs/SELECTED_INT_KIND.json index 7cc79cce..dd7c01cd 100644 --- a/src/docs/SELECTED_INT_KIND.json +++ b/src/docs/SELECTED_INT_KIND.json @@ -1,4 +1,4 @@ { - "keyword":"SELECTED_INT_KIND", - "docstr":"`SELECTED_INT_KIND` — Choose integer kind\n\n### Description\n`SELECTED_INT_KIND(R)` return the kind value of the smallest integer\ntype that can represent all values ranging from -10^R (exclusive)\nto 10^R (exclusive). If there is no integer kind that accommodates\nthis range, `SELECTED_INT_KIND` returns -1.\n\n\n\n### Syntax\n`RESULT = SELECTED_INT_KIND(R)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram large_integers\n\n  integer,parameter :: k5 = selected_int_kind(5)\n\n  integer,parameter :: k15 = selected_int_kind(15)\n\n  integer(kind=k5) :: i5\n\n  integer(kind=k15) :: i15\n\n\n  print *, huge(i5), huge(i15)\n\n\n  ! The following inequalities are always true\n\n  print *, huge(i5) >= 10_k5**5-1\n\n  print *, huge(i15) >= 10_k15**15-1\n\nend program large_integers\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "SELECTED_INT_KIND", + "docstr": "`SELECTED_INT_KIND` — Choose integer kind\n\n### Description\n`SELECTED_INT_KIND(R)` return the kind value of the smallest integer\ntype that can represent all values ranging from -10^R (exclusive)\nto 10^R (exclusive). If there is no integer kind that accommodates\nthis range, `SELECTED_INT_KIND` returns -1.\n\n\n\n### Syntax\n`RESULT = SELECTED_INT_KIND(R)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram large_integers\n\n  integer,parameter :: k5 = selected_int_kind(5)\n\n  integer,parameter :: k15 = selected_int_kind(15)\n\n  integer(kind=k5) :: i5\n\n  integer(kind=k15) :: i15\n\n\n  print *, huge(i5), huge(i15)\n\n\n  ! The following inequalities are always true\n\n  print *, huge(i5) >= 10_k5**5-1\n\n  print *, huge(i15) >= 10_k15**15-1\n\nend program large_integers\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/SELECTED_REAL_KIND.json b/src/docs/SELECTED_REAL_KIND.json index a024340b..69173613 100644 --- a/src/docs/SELECTED_REAL_KIND.json +++ b/src/docs/SELECTED_REAL_KIND.json @@ -1,4 +1,4 @@ { - "keyword":"SELECTED_REAL_KIND", - "docstr":"`SELECTED_REAL_KIND` — Choose real kind\n\n### Description\n`SELECTED_REAL_KIND(P,R)` returns the kind value of a real data type\nwith decimal precision of at least `P` digits, exponent range of\nat least `R`, and with a radix of `RADIX`.\n\n\n\n### Syntax\n`RESULT = SELECTED_REAL_KIND([P, R, RADIX])`\n\n\n### Arguments\n\n \n. \n\n | `R` | (Optional) shall be a scalar and of type `INTEGER`. \n\n | `RADIX` | (Optional) shall be a scalar and of type `INTEGER`.\n\n\nBefore Fortran 2008, at least one of the arguments `R` or `P` shall\nbe present; since Fortran 2008, they are assumed to be zero if absent.\n\n\n\n\n### Return value\n\n`SELECTED_REAL_KIND` returns the value of the kind type parameter of\na real data type with decimal precision of at least `P` digits, a\ndecimal exponent range of at least `R`, and with the requested\n`RADIX`. If the `RADIX` parameter is absent, real kinds with\nany radix can be returned. If more than one real data type meet the\ncriteria, the kind of the data type with the smallest decimal precision\nis returned. If no real data type matches the criteria, the result is\n
\n**-1 if the processor does not support a real data type with a** precision greater than or equal to `P`, but the `R` and\n`RADIX` requirements can be fulfilled\n\n**-2 if the processor does not support a real type with an exponent** range greater than or equal to `R`, but `P` and `RADIX`are fulfillable\n\n**-3 if `RADIX` but not `P` and `R` requirements** are fulfillable\n\n**-4 if `RADIX` and either `P` or `R` requirements** are fulfillable\n\n
-5 if there is no real type with the given `RADIX`
\n\n\n\n### Example\n```\n\n\nprogram real_kinds\n\n  integer,parameter :: p6 = selected_real_kind(6)\n\n  integer,parameter :: p10r100 = selected_real_kind(10,100)\n\n  integer,parameter :: r400 = selected_real_kind(r=400)\n\n  real(kind=p6) :: x\n\n  real(kind=p10r100) :: y\n\n  real(kind=r400) :: z\n\n\n  print *, precision(x), range(x)\n\n  print *, precision(y), range(y)\n\n  print *, precision(z), range(z)\n\nend program real_kinds\n\n```\n\n \n\n### Standard\nFortran 95 and later, with `RADIX` Fortran 2008 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPRECISION, RANGE, RADIX\n\n\n" -} \ No newline at end of file + "keyword": "SELECTED_REAL_KIND", + "docstr": "`SELECTED_REAL_KIND` — Choose real kind\n\n### Description\n`SELECTED_REAL_KIND(P,R)` returns the kind value of a real data type\nwith decimal precision of at least `P` digits, exponent range of\nat least `R`, and with a radix of `RADIX`.\n\n\n\n### Syntax\n`RESULT = SELECTED_REAL_KIND([P, R, RADIX])`\n\n\n### Arguments\n\n \n. \n\n | `R` | (Optional) shall be a scalar and of type `INTEGER`. \n\n | `RADIX` | (Optional) shall be a scalar and of type `INTEGER`.\n\n\nBefore Fortran 2008, at least one of the arguments `R` or `P` shall\nbe present; since Fortran 2008, they are assumed to be zero if absent.\n\n\n\n\n### Return value\n\n`SELECTED_REAL_KIND` returns the value of the kind type parameter of\na real data type with decimal precision of at least `P` digits, a\ndecimal exponent range of at least `R`, and with the requested\n`RADIX`. If the `RADIX` parameter is absent, real kinds with\nany radix can be returned. If more than one real data type meet the\ncriteria, the kind of the data type with the smallest decimal precision\nis returned. If no real data type matches the criteria, the result is\n
\n**-1 if the processor does not support a real data type with a** precision greater than or equal to `P`, but the `R` and\n`RADIX` requirements can be fulfilled\n\n**-2 if the processor does not support a real type with an exponent** range greater than or equal to `R`, but `P` and `RADIX`are fulfillable\n\n**-3 if `RADIX` but not `P` and `R` requirements** are fulfillable\n\n**-4 if `RADIX` and either `P` or `R` requirements** are fulfillable\n\n
-5 if there is no real type with the given `RADIX`
\n\n\n\n### Example\n```\n\n\nprogram real_kinds\n\n  integer,parameter :: p6 = selected_real_kind(6)\n\n  integer,parameter :: p10r100 = selected_real_kind(10,100)\n\n  integer,parameter :: r400 = selected_real_kind(r=400)\n\n  real(kind=p6) :: x\n\n  real(kind=p10r100) :: y\n\n  real(kind=r400) :: z\n\n\n  print *, precision(x), range(x)\n\n  print *, precision(y), range(y)\n\n  print *, precision(z), range(z)\n\nend program real_kinds\n\n```\n\n \n\n### Standard\nFortran 95 and later, with `RADIX` Fortran 2008 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPRECISION, RANGE, RADIX\n\n\n" +} diff --git a/src/docs/SET_EXPONENT.json b/src/docs/SET_EXPONENT.json index e86f54f1..fef7bd7e 100644 --- a/src/docs/SET_EXPONENT.json +++ b/src/docs/SET_EXPONENT.json @@ -1,4 +1,4 @@ { - "keyword":"SET_EXPONENT", - "docstr":"`SET_EXPONENT` — Set the exponent of the model\n\n### Description\n`SET_EXPONENT(X, I)` returns the real number whose fractional part\nis that that of `X` and whose exponent part is `I`.\n\n\n\n### Syntax\n`RESULT = SET_EXPONENT(X, I)`\n\n\n### Arguments\n\n \n. \n\n | `I` | Shall be of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real number whose fractional part\nis that that of `X` and whose exponent part if `I` is returned;\nit is `FRACTION(X) * RADIX(X)**I`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_setexp\n\n  REAL :: x = 178.1387e-4\n\n  INTEGER :: i = 17\n\n  PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "SET_EXPONENT", + "docstr": "`SET_EXPONENT` — Set the exponent of the model\n\n### Description\n`SET_EXPONENT(X, I)` returns the real number whose fractional part\nis that that of `X` and whose exponent part is `I`.\n\n\n\n### Syntax\n`RESULT = SET_EXPONENT(X, I)`\n\n\n### Arguments\n\n \n. \n\n | `I` | Shall be of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`. \nThe real number whose fractional part\nis that that of `X` and whose exponent part if `I` is returned;\nit is `FRACTION(X) * RADIX(X)**I`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_setexp\n\n  REAL :: x = 178.1387e-4\n\n  INTEGER :: i = 17\n\n  PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/SHAPE.json b/src/docs/SHAPE.json index 5ea58d24..8be65f82 100644 --- a/src/docs/SHAPE.json +++ b/src/docs/SHAPE.json @@ -1,4 +1,4 @@ { - "keyword":"SHAPE", - "docstr":"`SHAPE` — Determine the shape of an array\n\n### Description\nDetermines the shape of an array.\n\n\n\n### Syntax\n`RESULT = SHAPE(SOURCE [, KIND])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be an array or scalar of any type. \nIf `SOURCE` is a pointer it must be associated and allocatable\narrays must be allocated. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nAn `INTEGER` array of rank one with as many elements as `SOURCE`\nhas dimensions. The elements of the resulting array correspond to the extend\nof `SOURCE` along the respective dimensions. If `SOURCE` is a scalar,\nthe result is the rank one array of size zero. If `KIND` is absent, the\nreturn value has the default integer kind otherwise the specified kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_shape\n\n  INTEGER, DIMENSION(-1:1, -1:2) :: A\n\n  WRITE(*,*) SHAPE(A) ! (/ 3, 4 /)\n\n  WRITE(*,*) SIZE(SHAPE(42)) ! (/ /)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nRESHAPE, SIZE\n" -} \ No newline at end of file + "keyword": "SHAPE", + "docstr": "`SHAPE` — Determine the shape of an array\n\n### Description\nDetermines the shape of an array.\n\n\n\n### Syntax\n`RESULT = SHAPE(SOURCE [, KIND])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be an array or scalar of any type. \nIf `SOURCE` is a pointer it must be associated and allocatable\narrays must be allocated. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nAn `INTEGER` array of rank one with as many elements as `SOURCE`\nhas dimensions. The elements of the resulting array correspond to the extend\nof `SOURCE` along the respective dimensions. If `SOURCE` is a scalar,\nthe result is the rank one array of size zero. If `KIND` is absent, the\nreturn value has the default integer kind otherwise the specified kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_shape\n\n  INTEGER, DIMENSION(-1:1, -1:2) :: A\n\n  WRITE(*,*) SHAPE(A) ! (/ 3, 4 /)\n\n  WRITE(*,*) SIZE(SHAPE(42)) ! (/ /)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nRESHAPE, SIZE\n" +} diff --git a/src/docs/SHIFTA.json b/src/docs/SHIFTA.json index 77825c2a..6a5acd1a 100644 --- a/src/docs/SHIFTA.json +++ b/src/docs/SHIFTA.json @@ -1,4 +1,4 @@ { - "keyword":"SHIFTA", - "docstr":"`SHIFTA` — Right shift with fill\n\n### Description\n`SHIFTA` returns a value corresponding to `I` with all of the\nbits shifted right by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the right end are lost. The fill is arithmetic: the\nbits shifted in from the left end are equal to the leftmost bit, which in\ntwo's complement representation is the sign bit.\n\n\n\n### Syntax\n`RESULT = SHIFTA(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSHIFTL, SHIFTR\n" -} \ No newline at end of file + "keyword": "SHIFTA", + "docstr": "`SHIFTA` — Right shift with fill\n\n### Description\n`SHIFTA` returns a value corresponding to `I` with all of the\nbits shifted right by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the right end are lost. The fill is arithmetic: the\nbits shifted in from the left end are equal to the leftmost bit, which in\ntwo's complement representation is the sign bit.\n\n\n\n### Syntax\n`RESULT = SHIFTA(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSHIFTL, SHIFTR\n" +} diff --git a/src/docs/SHIFTL.json b/src/docs/SHIFTL.json index fbaffe35..de0e042b 100644 --- a/src/docs/SHIFTL.json +++ b/src/docs/SHIFTL.json @@ -1,4 +1,4 @@ { - "keyword":"SHIFTL", - "docstr":"`SHIFTL` — Left shift\n\n### Description\n`SHIFTL` returns a value corresponding to `I` with all of the\nbits shifted left by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the left end are lost, and bits shifted in from\nthe right end are set to 0.\n\n\n\n### Syntax\n`RESULT = SHIFTL(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSHIFTA, SHIFTR\n" -} \ No newline at end of file + "keyword": "SHIFTL", + "docstr": "`SHIFTL` — Left shift\n\n### Description\n`SHIFTL` returns a value corresponding to `I` with all of the\nbits shifted left by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the left end are lost, and bits shifted in from\nthe right end are set to 0.\n\n\n\n### Syntax\n`RESULT = SHIFTL(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSHIFTA, SHIFTR\n" +} diff --git a/src/docs/SHIFTR.json b/src/docs/SHIFTR.json index baf8d8dc..055ada6b 100644 --- a/src/docs/SHIFTR.json +++ b/src/docs/SHIFTR.json @@ -1,4 +1,4 @@ { - "keyword":"SHIFTR", - "docstr":"`SHIFTR` — Right shift\n\n### Description\n`SHIFTR` returns a value corresponding to `I` with all of the\nbits shifted right by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the right end are lost, and bits shifted in from\nthe left end are set to 0.\n\n\n\n### Syntax\n`RESULT = SHIFTR(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSHIFTA, SHIFTL\n" -} \ No newline at end of file + "keyword": "SHIFTR", + "docstr": "`SHIFTR` — Right shift\n\n### Description\n`SHIFTR` returns a value corresponding to `I` with all of the\nbits shifted right by `SHIFT` places. If the absolute value of\n`SHIFT` is greater than `BIT_SIZE(I)`, the value is undefined. \nBits shifted out from the right end are lost, and bits shifted in from\nthe left end are set to 0.\n\n\n\n### Syntax\n`RESULT = SHIFTR(I, SHIFT)`\n\n\n### Arguments\n\n \n. \n\n | `SHIFT` | The type shall be `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of the same kind as\n`I`.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSHIFTA, SHIFTL\n" +} diff --git a/src/docs/SIGN.json b/src/docs/SIGN.json index 796b9398..7bf01fd4 100644 --- a/src/docs/SIGN.json +++ b/src/docs/SIGN.json @@ -1,4 +1,4 @@ { - "keyword":"SIGN", - "docstr":"`SIGN` — Sign copying function\n\n### Description\n`SIGN(A,B)` returns the value of `A` with the sign of `B`.\n\n\n\n### Syntax\n`RESULT = SIGN(A, B)`\n\n\n### Arguments\n\n \n\n\n | `B` | Shall be of the same type and kind as `A`\n\n\n\n\n\n\n### Return value\nThe kind of the return value is that of `A` and `B`. \nIf B\\ge 0 then the result is `ABS(A)`, else\nit is `-ABS(A)`.\n\n\n\n### Example\n```\n\n\nprogram test_sign\n\n  print *, sign(-12,1)\n\n  print *, sign(-12,0)\n\n  print *, sign(-12,-1)\n\n\n  print *, sign(-12.,1.)\n\n  print *, sign(-12.,0.)\n\n  print *, sign(-12.,-1.)\n\nend program test_sign\n\n```\n\n\n\n### Specific names\n\n \n | Name | Arguments | Return type | Standard\n\n | `SIGN(A,B)` | `REAL(4) A, B` | `REAL(4)` | f77, gnu\n\n | `ISIGN(A,B)` | `INTEGER(4) A, B` | `INTEGER(4)` | f77, gnu\n\n | `DSIGN(A,B)` | `REAL(8) A, B` | `REAL(8)` | f77, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "SIGN", + "docstr": "`SIGN` — Sign copying function\n\n### Description\n`SIGN(A,B)` returns the value of `A` with the sign of `B`.\n\n\n\n### Syntax\n`RESULT = SIGN(A, B)`\n\n\n### Arguments\n\n \n\n\n | `B` | Shall be of the same type and kind as `A`\n\n\n\n\n\n\n### Return value\nThe kind of the return value is that of `A` and `B`. \nIf B\\ge 0 then the result is `ABS(A)`, else\nit is `-ABS(A)`.\n\n\n\n### Example\n```\n\n\nprogram test_sign\n\n  print *, sign(-12,1)\n\n  print *, sign(-12,0)\n\n  print *, sign(-12,-1)\n\n\n  print *, sign(-12.,1.)\n\n  print *, sign(-12.,0.)\n\n  print *, sign(-12.,-1.)\n\nend program test_sign\n\n```\n\n\n\n### Specific names\n\n \n | Name | Arguments | Return type | Standard\n\n | `SIGN(A,B)` | `REAL(4) A, B` | `REAL(4)` | f77, gnu\n\n | `ISIGN(A,B)` | `INTEGER(4) A, B` | `INTEGER(4)` | f77, gnu\n\n | `DSIGN(A,B)` | `REAL(8) A, B` | `REAL(8)` | f77, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/SIGNAL.json b/src/docs/SIGNAL.json index ef60fde8..ac933da9 100644 --- a/src/docs/SIGNAL.json +++ b/src/docs/SIGNAL.json @@ -1,4 +1,4 @@ { - "keyword":"SIGNAL", - "docstr":"`SIGNAL` — Signal handling subroutine (or function)\n\n### Description\n`SIGNAL(NUMBER, HANDLER [, STATUS])` causes external subroutine\n`HANDLER` to be executed with a single integer argument when signal\n`NUMBER` occurs. If `HANDLER` is an integer, it can be used to\nturn off handling of signal `NUMBER` or revert to its default\naction. See `signal(2)`.\n\n \nIf `SIGNAL` is called as a subroutine and the `STATUS` argument\nis supplied, it is set to the value returned by `signal(2)`.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = SIGNAL(NUMBER, HANDLER)`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `HANDLER` | Signal handler (`INTEGER FUNCTION` or\n`SUBROUTINE`) or dummy/global `INTEGER` scalar. \n`INTEGER`. It is `INTENT(IN)`. \n\n | `STATUS` | (Optional) `STATUS` shall be a scalar\ninteger. It has `INTENT(OUT)`.\n\n\n\n\n\n\n\n### Return value\nThe `SIGNAL` function returns the value returned by `signal(2)`.\n\n\n\n### Example\n```\n\n\nprogram test_signal\n\n  intrinsic signal\n\n  external handler_print\n\n\n  call signal (12, handler_print)\n\n  call signal (10, 1)\n\n\n  call sleep (30)\n\nend program test_signal\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" -} \ No newline at end of file + "keyword": "SIGNAL", + "docstr": "`SIGNAL` — Signal handling subroutine (or function)\n\n### Description\n`SIGNAL(NUMBER, HANDLER [, STATUS])` causes external subroutine\n`HANDLER` to be executed with a single integer argument when signal\n`NUMBER` occurs. If `HANDLER` is an integer, it can be used to\nturn off handling of signal `NUMBER` or revert to its default\naction. See `signal(2)`.\n\n \nIf `SIGNAL` is called as a subroutine and the `STATUS` argument\nis supplied, it is set to the value returned by `signal(2)`.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = SIGNAL(NUMBER, HANDLER)`
\n\n\n\n\n\n### Arguments\n\n \n\n\n | `HANDLER` | Signal handler (`INTEGER FUNCTION` or\n`SUBROUTINE`) or dummy/global `INTEGER` scalar. \n`INTEGER`. It is `INTENT(IN)`. \n\n | `STATUS` | (Optional) `STATUS` shall be a scalar\ninteger. It has `INTENT(OUT)`.\n\n\n\n\n\n\n\n### Return value\nThe `SIGNAL` function returns the value returned by `signal(2)`.\n\n\n\n### Example\n```\n\n\nprogram test_signal\n\n  intrinsic signal\n\n  external handler_print\n\n\n  call signal (12, handler_print)\n\n  call signal (10, 1)\n\n\n  call sleep (30)\n\nend program test_signal\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" +} diff --git a/src/docs/SIN.json b/src/docs/SIN.json index d0ea836f..602e20cd 100644 --- a/src/docs/SIN.json +++ b/src/docs/SIN.json @@ -1,4 +1,4 @@ { - "keyword":"SIN", - "docstr":"`SIN` — Sine function\n\n### Description\n`SIN(X)` computes the sine of `X`.\n\n\n\n### Syntax\n`RESULT = SIN(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_sin\n\n  real :: x = 0.0\n\n  x = sin(x)\n\nend program test_sin\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SIN(X)` | `REAL(4) X` | `REAL(4)` | f77, gnu\n\n | `DSIN(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CSIN(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZSIN(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDSIN(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nASIN\n" -} \ No newline at end of file + "keyword": "SIN", + "docstr": "`SIN` — Sine function\n\n### Description\n`SIN(X)` computes the sine of `X`.\n\n\n\n### Syntax\n`RESULT = SIN(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_sin\n\n  real :: x = 0.0\n\n  x = sin(x)\n\nend program test_sin\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SIN(X)` | `REAL(4) X` | `REAL(4)` | f77, gnu\n\n | `DSIN(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CSIN(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZSIN(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDSIN(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nASIN\n" +} diff --git a/src/docs/SIND.json b/src/docs/SIND.json index 37adfdec..f89745a0 100644 --- a/src/docs/SIND.json +++ b/src/docs/SIND.json @@ -1,4 +1,4 @@ { - "keyword":"SIND", - "docstr":"`SIND` — Sine function, degrees\n\n### Description\nIND(X) computes the sine of X in degrees.\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = SIND(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n ### Return value\nThe return value has same type and kind as X, and its value is in degrees.\n" -} \ No newline at end of file + "keyword": "SIND", + "docstr": "`SIND` — Sine function, degrees\n\n### Description\nIND(X) computes the sine of X in degrees.\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = SIND(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n ### Return value\nThe return value has same type and kind as X, and its value is in degrees.\n" +} diff --git a/src/docs/SINH.json b/src/docs/SINH.json index ea33c44e..277dd1ba 100644 --- a/src/docs/SINH.json +++ b/src/docs/SINH.json @@ -1,4 +1,4 @@ { - "keyword":"SINH", - "docstr":"`SINH` — Hyperbolic sine function\n\n### Description\n`SINH(X)` computes the hyperbolic sine of `X`.\n\n\n\n### Syntax\n`RESULT = SINH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_sinh\n\n  real(8) :: x = - 1.0_8\n\n  x = sinh(x)\n\nend program test_sinh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SINH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DSINH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 95 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nASINH\n" -} \ No newline at end of file + "keyword": "SINH", + "docstr": "`SINH` — Hyperbolic sine function\n\n### Description\n`SINH(X)` computes the hyperbolic sine of `X`.\n\n\n\n### Syntax\n`RESULT = SINH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_sinh\n\n  real(8) :: x = - 1.0_8\n\n  x = sinh(x)\n\nend program test_sinh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SINH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DSINH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 95 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nASINH\n" +} diff --git a/src/docs/SIZE.json b/src/docs/SIZE.json index de8c17e2..42ce4aa2 100644 --- a/src/docs/SIZE.json +++ b/src/docs/SIZE.json @@ -1,4 +1,4 @@ { - "keyword":"SIZE", - "docstr":"`SIZE` — Determine the size of an array\n\n### Description\nDetermine the extent of `ARRAY` along a specified dimension `DIM`,\nor the total number of elements in `ARRAY` if `DIM` is absent.\n\n\n\n### Syntax\n`RESULT = SIZE(ARRAY[, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. If `ARRAY` is\na pointer it must be associated and allocatable arrays must be allocated. \n\n | `DIM` | (Optional) shall be a scalar of type `INTEGER`and its value shall be in the range from 1 to n, where n equals the rank\nof `ARRAY`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_size\n\n  WRITE(*,*) SIZE((/ 1, 2 /)) ! 2\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSHAPE, RESHAPE\n" -} \ No newline at end of file + "keyword": "SIZE", + "docstr": "`SIZE` — Determine the size of an array\n\n### Description\nDetermine the extent of `ARRAY` along a specified dimension `DIM`,\nor the total number of elements in `ARRAY` if `DIM` is absent.\n\n\n\n### Syntax\n`RESULT = SIZE(ARRAY[, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. If `ARRAY` is\na pointer it must be associated and allocatable arrays must be allocated. \n\n | `DIM` | (Optional) shall be a scalar of type `INTEGER`and its value shall be in the range from 1 to n, where n equals the rank\nof `ARRAY`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_size\n\n  WRITE(*,*) SIZE((/ 1, 2 /)) ! 2\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nSHAPE, RESHAPE\n" +} diff --git a/src/docs/SIZEOF.json b/src/docs/SIZEOF.json index f7882f84..f9557ab5 100644 --- a/src/docs/SIZEOF.json +++ b/src/docs/SIZEOF.json @@ -1,4 +1,4 @@ { - "keyword":"SIZEOF", - "docstr":"`SIZEOF` — Size in bytes of an expression\n\n### Description\n`SIZEOF(X)` calculates the number of bytes of storage the\nexpression `X` occupies.\n\n\n\n### Syntax\n`N = SIZEOF(X)`\n\n\n### Arguments\n\n \n | `X` | The argument shall be of any type, rank or shape.\n\n\n\n\n\n\n### Return value\nThe return value is of type integer and of the system-dependent kind\n`C_SIZE_T` (from the `ISO_C_BINDING` module). Its value is the\nnumber of bytes occupied by the argument. If the argument has the\n`POINTER` attribute, the number of bytes of the storage area pointed\nto is returned. If the argument is of a derived type with `POINTER`or `ALLOCATABLE` components, the return value does not account for\nthe sizes of the data pointed to by these components. If the argument is\npolymorphic, the size according to the dynamic type is returned. The argument\nmay not be a procedure or procedure pointer. Note that the code assumes for\narrays that those are contiguous; for contiguous arrays, it returns the\nstorage or an array element multiplied by the size of the array.\n\n\n\n### Example\n```\n\n\ninteger :: i\n\nreal :: r, s(5)\n\nprint *, (sizeof(s)/sizeof(r) == 5)\n\nend\n\n```\n\n \nThe example will print `.TRUE.` unless you are using a platform\nwhere default `REAL` variables are unusually padded.\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_SIZEOF, STORAGE_SIZE\n" -} \ No newline at end of file + "keyword": "SIZEOF", + "docstr": "`SIZEOF` — Size in bytes of an expression\n\n### Description\n`SIZEOF(X)` calculates the number of bytes of storage the\nexpression `X` occupies.\n\n\n\n### Syntax\n`N = SIZEOF(X)`\n\n\n### Arguments\n\n \n | `X` | The argument shall be of any type, rank or shape.\n\n\n\n\n\n\n### Return value\nThe return value is of type integer and of the system-dependent kind\n`C_SIZE_T` (from the `ISO_C_BINDING` module). Its value is the\nnumber of bytes occupied by the argument. If the argument has the\n`POINTER` attribute, the number of bytes of the storage area pointed\nto is returned. If the argument is of a derived type with `POINTER`or `ALLOCATABLE` components, the return value does not account for\nthe sizes of the data pointed to by these components. If the argument is\npolymorphic, the size according to the dynamic type is returned. The argument\nmay not be a procedure or procedure pointer. Note that the code assumes for\narrays that those are contiguous; for contiguous arrays, it returns the\nstorage or an array element multiplied by the size of the array.\n\n\n\n### Example\n```\n\n\ninteger :: i\n\nreal :: r, s(5)\n\nprint *, (sizeof(s)/sizeof(r) == 5)\n\nend\n\n```\n\n \nThe example will print `.TRUE.` unless you are using a platform\nwhere default `REAL` variables are unusually padded.\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_SIZEOF, STORAGE_SIZE\n" +} diff --git a/src/docs/SLEEP.json b/src/docs/SLEEP.json index 1a23072a..1e510692 100644 --- a/src/docs/SLEEP.json +++ b/src/docs/SLEEP.json @@ -1,4 +1,4 @@ { - "keyword":"SLEEP", - "docstr":"`SLEEP` — Sleep for the specified number of seconds\n\n### Description\nCalling this subroutine causes the process to pause for `SECONDS` seconds.\n\n\n\n### Syntax\n`CALL SLEEP(SECONDS)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_sleep\n\n  call sleep(5)\n\nend\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" -} \ No newline at end of file + "keyword": "SLEEP", + "docstr": "`SLEEP` — Sleep for the specified number of seconds\n\n### Description\nCalling this subroutine causes the process to pause for `SECONDS` seconds.\n\n\n\n### Syntax\n`CALL SLEEP(SECONDS)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_sleep\n\n  call sleep(5)\n\nend\n\n```\n\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n" +} diff --git a/src/docs/SPACING.json b/src/docs/SPACING.json index 7e4ffb95..84fbec19 100644 --- a/src/docs/SPACING.json +++ b/src/docs/SPACING.json @@ -1,4 +1,4 @@ { - "keyword":"SPACING", - "docstr":"`SPACING` — Smallest distance between two numbers of a given type\n\n### Description\nDetermines the distance between the argument `X` and the nearest\nadjacent number of the same type.\n\n\n\n### Syntax\n`RESULT = SPACING(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as the input argument `X`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_spacing\n\n  INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37)\n\n  INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200)\n\n\n  WRITE(*,*) spacing(1.0_SGL) ! \"1.1920929E-07\" on i686\n\n  WRITE(*,*) spacing(1.0_DBL) ! \"2.220446049250313E-016\" on i686\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nRRSPACING\n" -} \ No newline at end of file + "keyword": "SPACING", + "docstr": "`SPACING` — Smallest distance between two numbers of a given type\n\n### Description\nDetermines the distance between the argument `X` and the nearest\nadjacent number of the same type.\n\n\n\n### Syntax\n`RESULT = SPACING(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as the input argument `X`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_spacing\n\n  INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37)\n\n  INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200)\n\n\n  WRITE(*,*) spacing(1.0_SGL) ! \"1.1920929E-07\" on i686\n\n  WRITE(*,*) spacing(1.0_DBL) ! \"2.220446049250313E-016\" on i686\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nRRSPACING\n" +} diff --git a/src/docs/SPREAD.json b/src/docs/SPREAD.json index 512dcb73..eb49b232 100644 --- a/src/docs/SPREAD.json +++ b/src/docs/SPREAD.json @@ -1,4 +1,4 @@ { - "keyword":"SPREAD", - "docstr":"`SPREAD` — Add a dimension to an array\n\n### Description\nReplicates a `SOURCE` array `NCOPIES` times along a specified\ndimension `DIM`.\n\n\n\n### Syntax\n`RESULT = SPREAD(SOURCE, DIM, NCOPIES)`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be a scalar or an array of any type and\na rank less than seven. \n\n | `DIM` | Shall be a scalar of type `INTEGER` with a\nvalue in the range from 1 to n+1, where n equals the rank of `SOURCE`. \n\n | `NCOPIES` | Shall be a scalar of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe result is an array of the same type as `SOURCE` and has rank n+1\nwhere n equals the rank of `SOURCE`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_spread\n\n  INTEGER :: a = 1, b(2) = (/ 1, 2 /)\n\n  WRITE(*,*) SPREAD(A, 1, 2) ! \"1 1\"\n\n  WRITE(*,*) SPREAD(B, 1, 2) ! \"1 1 2 2\"\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nUNPACK\n" -} \ No newline at end of file + "keyword": "SPREAD", + "docstr": "`SPREAD` — Add a dimension to an array\n\n### Description\nReplicates a `SOURCE` array `NCOPIES` times along a specified\ndimension `DIM`.\n\n\n\n### Syntax\n`RESULT = SPREAD(SOURCE, DIM, NCOPIES)`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be a scalar or an array of any type and\na rank less than seven. \n\n | `DIM` | Shall be a scalar of type `INTEGER` with a\nvalue in the range from 1 to n+1, where n equals the rank of `SOURCE`. \n\n | `NCOPIES` | Shall be a scalar of type `INTEGER`.\n\n\n\n\n\n\n### Return value\nThe result is an array of the same type as `SOURCE` and has rank n+1\nwhere n equals the rank of `SOURCE`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_spread\n\n  INTEGER :: a = 1, b(2) = (/ 1, 2 /)\n\n  WRITE(*,*) SPREAD(A, 1, 2) ! \"1 1\"\n\n  WRITE(*,*) SPREAD(B, 1, 2) ! \"1 1 2 2\"\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nUNPACK\n" +} diff --git a/src/docs/SQRT.json b/src/docs/SQRT.json index b95e3c42..a9ea3159 100644 --- a/src/docs/SQRT.json +++ b/src/docs/SQRT.json @@ -1,4 +1,4 @@ { - "keyword":"SQRT", - "docstr":"`SQRT` — Square-root function\n\n### Description\n`SQRT(X)` computes the square root of `X`.\n\n\n\n### Syntax\n`RESULT = SQRT(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_sqrt\n\n  real(8) :: x = 2.0_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = sqrt(x)\n\n  z = sqrt(z)\n\nend program test_sqrt\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SQRT(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DSQRT(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n | `CSQRT(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 95 and later\n\n | `ZSQRT(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDSQRT(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" -} \ No newline at end of file + "keyword": "SQRT", + "docstr": "`SQRT` — Square-root function\n\n### Description\n`SQRT(X)` computes the square root of `X`.\n\n\n\n### Syntax\n`RESULT = SQRT(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_sqrt\n\n  real(8) :: x = 2.0_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = sqrt(x)\n\n  z = sqrt(z)\n\nend program test_sqrt\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `SQRT(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DSQRT(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n | `CSQRT(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | Fortran 95 and later\n\n | `ZSQRT(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n | `CDSQRT(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | GNU extension\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" +} diff --git a/src/docs/SRAND.json b/src/docs/SRAND.json index d07bfc9e..d2c732c2 100644 --- a/src/docs/SRAND.json +++ b/src/docs/SRAND.json @@ -1,4 +1,4 @@ { - "keyword":"SRAND", - "docstr":"`SRAND` — Reinitialize the random number generator\n\n### Description\n`SRAND` reinitializes the pseudo-random number generator\ncalled by `RAND` and `IRAND`. The new seed used by the\ngenerator is specified by the required argument `SEED`.\n\n\n\n### Syntax\n`CALL SRAND(SEED)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\nSee `RAND` and `IRAND` for examples.\n\n\n\n### Notes\nThe Fortran standard specifies the intrinsic subroutines\n`RANDOM_SEED` to initialize the pseudo-random number\ngenerator and `RANDOM_NUMBER` to generate pseudo-random numbers. \nThese subroutines should be used in new codes.\n\n \nPlease note that in GNU Fortran, these two sets of intrinsics (`RAND`,\n`IRAND` and `SRAND` on the one hand, `RANDOM_NUMBER` and\n`RANDOM_SEED` on the other hand) access two independent\npseudo-random number generators.\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRAND, RANDOM_SEED, RANDOM_NUMBER\n\n " -} \ No newline at end of file + "keyword": "SRAND", + "docstr": "`SRAND` — Reinitialize the random number generator\n\n### Description\n`SRAND` reinitializes the pseudo-random number generator\ncalled by `RAND` and `IRAND`. The new seed used by the\ngenerator is specified by the required argument `SEED`.\n\n\n\n### Syntax\n`CALL SRAND(SEED)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nDoes not return anything.\n\n\n\n### Example\nSee `RAND` and `IRAND` for examples.\n\n\n\n### Notes\nThe Fortran standard specifies the intrinsic subroutines\n`RANDOM_SEED` to initialize the pseudo-random number\ngenerator and `RANDOM_NUMBER` to generate pseudo-random numbers. \nThese subroutines should be used in new codes.\n\n \nPlease note that in GNU Fortran, these two sets of intrinsics (`RAND`,\n`IRAND` and `SRAND` on the one hand, `RANDOM_NUMBER` and\n`RANDOM_SEED` on the other hand) access two independent\npseudo-random number generators.\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRAND, RANDOM_SEED, RANDOM_NUMBER\n\n " +} diff --git a/src/docs/STAT.json b/src/docs/STAT.json index a93b2209..c48521fd 100644 --- a/src/docs/STAT.json +++ b/src/docs/STAT.json @@ -1,4 +1,4 @@ { - "keyword":"STAT", - "docstr":"`STAT` — Get file status\n\n### Description\nThis function returns information about a file. No permissions are required on\nthe file itself, but execute (search) permission is required on all of the\ndirectories in path that lead to the file.\n\n \nThe elements that are obtained and stored in the array `VALUES`:\n \n\n | Device ID\n\n | `VALUES(2)` | Inode number\n\n | `VALUES(3)` | File mode\n\n | `VALUES(4)` | Number of links\n\n | `VALUES(5)` | Owner's uid\n\n | `VALUES(6)` | Owner's gid\n\n | `VALUES(7)` | ID of device containing directory entry for file (0 if not available)\n\n | `VALUES(8)` | File size (bytes)\n\n | `VALUES(9)` | Last access time\n\n | `VALUES(10)` | Last modification time\n\n | `VALUES(11)` | Last file status change time\n\n | `VALUES(12)` | Preferred I/O block size (-1 if not available)\n\n | `VALUES(13)` | Number of blocks allocated (-1 if not available)\n\n\n\n \n\nNot all these elements are relevant on all systems. \nIf an element is not relevant, it is returned as 0.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = STAT(NAME, VALUES)`
\n\n\n\n\n\n### Arguments\n\n \n, of the\ndefault kind and a valid path within the file system. \n\n | `VALUES` | The type shall be `INTEGER(4), DIMENSION(13)`. \n\n | `STATUS` | (Optional) status flag of type `INTEGER(4)`. Returns 0\non success and a system specific error code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_stat\n\n  INTEGER, DIMENSION(13) :: buff\n\n  INTEGER :: status\n\n\n  CALL STAT(\"/etc/passwd\", buff, status)\n\n\n  IF (status == 0) THEN\n\n    WRITE (*, FMT=\"('Device ID:', T30, I19)\") buff(1)\n\n    WRITE (*, FMT=\"('Inode number:', T30, I19)\") buff(2)\n\n    WRITE (*, FMT=\"('File mode (octal):', T30, O19)\") buff(3)\n\n    WRITE (*, FMT=\"('Number of links:', T30, I19)\") buff(4)\n\n    WRITE (*, FMT=\"('Owner''s uid:', T30, I19)\") buff(5)\n\n    WRITE (*, FMT=\"('Owner''s gid:', T30, I19)\") buff(6)\n\n    WRITE (*, FMT=\"('Device where located:', T30, I19)\") buff(7)\n\n    WRITE (*, FMT=\"('File size:', T30, I19)\") buff(8)\n\n    WRITE (*, FMT=\"('Last access time:', T30, A19)\") CTIME(buff(9))\n\n    WRITE (*, FMT=\"('Last modification time', T30, A19)\") CTIME(buff(10))\n\n    WRITE (*, FMT=\"('Last status change time:', T30, A19)\") CTIME(buff(11))\n\n    WRITE (*, FMT=\"('Preferred block size:', T30, I19)\") buff(12)\n\n    WRITE (*, FMT=\"('No. of blocks allocated:', T30, I19)\") buff(13)\n\n  END IF\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nTo stat an open file: FSTAT, to stat a link: LSTAT\n" -} \ No newline at end of file + "keyword": "STAT", + "docstr": "`STAT` — Get file status\n\n### Description\nThis function returns information about a file. No permissions are required on\nthe file itself, but execute (search) permission is required on all of the\ndirectories in path that lead to the file.\n\n \nThe elements that are obtained and stored in the array `VALUES`:\n \n\n | Device ID\n\n | `VALUES(2)` | Inode number\n\n | `VALUES(3)` | File mode\n\n | `VALUES(4)` | Number of links\n\n | `VALUES(5)` | Owner's uid\n\n | `VALUES(6)` | Owner's gid\n\n | `VALUES(7)` | ID of device containing directory entry for file (0 if not available)\n\n | `VALUES(8)` | File size (bytes)\n\n | `VALUES(9)` | Last access time\n\n | `VALUES(10)` | Last modification time\n\n | `VALUES(11)` | Last file status change time\n\n | `VALUES(12)` | Preferred I/O block size (-1 if not available)\n\n | `VALUES(13)` | Number of blocks allocated (-1 if not available)\n\n\n\n \n\nNot all these elements are relevant on all systems. \nIf an element is not relevant, it is returned as 0.\n\n \n\nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = STAT(NAME, VALUES)`
\n\n\n\n\n\n### Arguments\n\n \n, of the\ndefault kind and a valid path within the file system. \n\n | `VALUES` | The type shall be `INTEGER(4), DIMENSION(13)`. \n\n | `STATUS` | (Optional) status flag of type `INTEGER(4)`. Returns 0\non success and a system specific error code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_stat\n\n  INTEGER, DIMENSION(13) :: buff\n\n  INTEGER :: status\n\n\n  CALL STAT(\"/etc/passwd\", buff, status)\n\n\n  IF (status == 0) THEN\n\n    WRITE (*, FMT=\"('Device ID:', T30, I19)\") buff(1)\n\n    WRITE (*, FMT=\"('Inode number:', T30, I19)\") buff(2)\n\n    WRITE (*, FMT=\"('File mode (octal):', T30, O19)\") buff(3)\n\n    WRITE (*, FMT=\"('Number of links:', T30, I19)\") buff(4)\n\n    WRITE (*, FMT=\"('Owner''s uid:', T30, I19)\") buff(5)\n\n    WRITE (*, FMT=\"('Owner''s gid:', T30, I19)\") buff(6)\n\n    WRITE (*, FMT=\"('Device where located:', T30, I19)\") buff(7)\n\n    WRITE (*, FMT=\"('File size:', T30, I19)\") buff(8)\n\n    WRITE (*, FMT=\"('Last access time:', T30, A19)\") CTIME(buff(9))\n\n    WRITE (*, FMT=\"('Last modification time', T30, A19)\") CTIME(buff(10))\n\n    WRITE (*, FMT=\"('Last status change time:', T30, A19)\") CTIME(buff(11))\n\n    WRITE (*, FMT=\"('Preferred block size:', T30, I19)\") buff(12)\n\n    WRITE (*, FMT=\"('No. of blocks allocated:', T30, I19)\") buff(13)\n\n  END IF\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nTo stat an open file: FSTAT, to stat a link: LSTAT\n" +} diff --git a/src/docs/STORAGE_SIZE.json b/src/docs/STORAGE_SIZE.json index df5e3e21..b64f74ae 100644 --- a/src/docs/STORAGE_SIZE.json +++ b/src/docs/STORAGE_SIZE.json @@ -1,4 +1,4 @@ { - "keyword":"STORAGE_SIZE", - "docstr":"`STORAGE_SIZE` — Storage size in bits\n\n### Description\nReturns the storage size of argument `A` in bits. \n\n\n### Syntax\n`RESULT = STORAGE_SIZE(A [, KIND])`\n\n\n### Arguments\n\n \n | `A` | Shall be a scalar or array of any type. \n\n | `KIND` | (Optional) shall be a scalar integer constant expression.\n\n\n\n\n\n\n### Return value\nThe result is a scalar integer with the kind type parameter specified by KIND\n(or default integer type if KIND is missing). The result value is the size\nexpressed in bits for an element of an array that has the dynamic type and type\nparameters of A.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n### Class\nInquiry function\n\n\n### See also\nC_SIZEOF, SIZEOF\n" -} \ No newline at end of file + "keyword": "STORAGE_SIZE", + "docstr": "`STORAGE_SIZE` — Storage size in bits\n\n### Description\nReturns the storage size of argument `A` in bits. \n\n\n### Syntax\n`RESULT = STORAGE_SIZE(A [, KIND])`\n\n\n### Arguments\n\n \n | `A` | Shall be a scalar or array of any type. \n\n | `KIND` | (Optional) shall be a scalar integer constant expression.\n\n\n\n\n\n\n### Return value\nThe result is a scalar integer with the kind type parameter specified by KIND\n(or default integer type if KIND is missing). The result value is the size\nexpressed in bits for an element of an array that has the dynamic type and type\nparameters of A.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n### Class\nInquiry function\n\n\n### See also\nC_SIZEOF, SIZEOF\n" +} diff --git a/src/docs/SUM.json b/src/docs/SUM.json index 7c5658b8..5a257ead 100644 --- a/src/docs/SUM.json +++ b/src/docs/SUM.json @@ -1,4 +1,4 @@ { - "keyword":"SUM", - "docstr":"`SUM` — Sum of array elements\n\n### Description\nAdds the elements of `ARRAY` along dimension `DIM` if\nthe corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = SUM(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n,\n`REAL` or `COMPLEX`. \n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the sum of all elements in `ARRAY`\nis returned. Otherwise, an array of rank n-1, where n equals the rank of\n`ARRAY`, and a shape similar to that of `ARRAY` with dimension `DIM`\ndropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_sum\n\n  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)\n\n  print *, SUM(x) ! all elements, sum = 15\n\n  print *, SUM(x, MASK=MOD(x, 2)==1) ! odd elements, sum = 9\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPRODUCT\n" -} \ No newline at end of file + "keyword": "SUM", + "docstr": "`SUM` — Sum of array elements\n\n### Description\nAdds the elements of `ARRAY` along dimension `DIM` if\nthe corresponding element in `MASK` is `TRUE`.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = SUM(ARRAY, DIM[, MASK])`
\n\n\n\n\n\n### Arguments\n\n \n,\n`REAL` or `COMPLEX`. \n\n | `DIM` | (Optional) shall be a scalar of type\n`INTEGER` with a value in the range from 1 to n, where n\nequals the rank of `ARRAY`. \n\n | `MASK` | (Optional) shall be of type `LOGICAL`and either be a scalar or an array of the same shape as `ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is of the same type as `ARRAY`.\n\n \nIf `DIM` is absent, a scalar with the sum of all elements in `ARRAY`\nis returned. Otherwise, an array of rank n-1, where n equals the rank of\n`ARRAY`, and a shape similar to that of `ARRAY` with dimension `DIM`\ndropped is returned.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_sum\n\n  INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /)\n\n  print *, SUM(x) ! all elements, sum = 15\n\n  print *, SUM(x, MASK=MOD(x, 2)==1) ! odd elements, sum = 9\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPRODUCT\n" +} diff --git a/src/docs/SYMLNK.json b/src/docs/SYMLNK.json index 55726ade..5f4073fb 100644 --- a/src/docs/SYMLNK.json +++ b/src/docs/SYMLNK.json @@ -1,4 +1,4 @@ { - "keyword":"SYMLNK", - "docstr":"`SYMLNK` — Create a symbolic link\n\n### Description\nMakes a symbolic link from file `PATH1` to `PATH2`. A null\ncharacter (`CHAR(0)`) can be used to mark the end of the names in\n`PATH1` and `PATH2`; otherwise, trailing blanks in the file\nnames are ignored. If the `STATUS` argument is supplied, it\ncontains 0 on success or a nonzero error code upon return; see\n`symlink(2)`. If the system does not supply `symlink(2)`,\n`ENOSYS` is returned.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = SYMLNK(PATH1, PATH2)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `PATH2` | Shall be of default `CHARACTER` type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nLINK, UNLINK\n\n " -} \ No newline at end of file + "keyword": "SYMLNK", + "docstr": "`SYMLNK` — Create a symbolic link\n\n### Description\nMakes a symbolic link from file `PATH1` to `PATH2`. A null\ncharacter (`CHAR(0)`) can be used to mark the end of the names in\n`PATH1` and `PATH2`; otherwise, trailing blanks in the file\nnames are ignored. If the `STATUS` argument is supplied, it\ncontains 0 on success or a nonzero error code upon return; see\n`symlink(2)`. If the system does not supply `symlink(2)`,\n`ENOSYS` is returned.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = SYMLNK(PATH1, PATH2)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `PATH2` | Shall be of default `CHARACTER` type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nLINK, UNLINK\n\n " +} diff --git a/src/docs/SYSTEM.json b/src/docs/SYSTEM.json index 2d710511..71317240 100644 --- a/src/docs/SYSTEM.json +++ b/src/docs/SYSTEM.json @@ -1,4 +1,4 @@ { - "keyword":"SYSTEM", - "docstr":"`SYSTEM` — Execute a shell command\n\n### Description\nPasses the command `COMMAND` to a shell (see `system(3)`). If\nargument `STATUS` is present, it contains the value returned by\n`system(3)`, which is presumably 0 if the shell command succeeded. \nNote that which shell is used to invoke the command is system-dependent\nand environment-dependent.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n \n\nNote that the `system` function need not be thread-safe. It is\nthe responsibility of the user to ensure that `system` is not\ncalled concurrently.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = SYSTEM(COMMAND)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nEXECUTE_COMMAND_LINE, which is part of the Fortran 2008 standard\nand should considered in new code for future portability. \n" -} \ No newline at end of file + "keyword": "SYSTEM", + "docstr": "`SYSTEM` — Execute a shell command\n\n### Description\nPasses the command `COMMAND` to a shell (see `system(3)`). If\nargument `STATUS` is present, it contains the value returned by\n`system(3)`, which is presumably 0 if the shell command succeeded. \nNote that which shell is used to invoke the command is system-dependent\nand environment-dependent.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n \n\nNote that the `system` function need not be thread-safe. It is\nthe responsibility of the user to ensure that `system` is not\ncalled concurrently.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = SYSTEM(COMMAND)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nEXECUTE_COMMAND_LINE, which is part of the Fortran 2008 standard\nand should considered in new code for future portability. \n" +} diff --git a/src/docs/SYSTEM_CLOCK.json b/src/docs/SYSTEM_CLOCK.json index 70532b37..8e4f6325 100644 --- a/src/docs/SYSTEM_CLOCK.json +++ b/src/docs/SYSTEM_CLOCK.json @@ -1,4 +1,4 @@ { - "keyword":"SYSTEM_CLOCK", - "docstr":"`SYSTEM_CLOCK` — Time function\n\n### Description\nDetermines the `COUNT` of a processor clock since an unspecified\ntime in the past modulo `COUNT_MAX`, `COUNT_RATE` determines\nthe number of clock ticks per second. If the platform supports a\nmonotonic clock, that clock is used and can, depending on the platform\nclock implementation, provide up to nanosecond resolution. If a\nmonotonic clock is not available, the implementation falls back to a\nrealtime clock.\n\n \n`COUNT_RATE` is system dependent and can vary depending on the kind of\nthe arguments. For `kind=4` arguments (and smaller integer kinds),\n`COUNT` represents milliseconds, while for `kind=8` arguments (and\nlarger integer kinds), `COUNT` typically represents micro- or\nnanoseconds depending on resolution of the underlying platform clock. \n`COUNT_MAX` usually equals `HUGE(COUNT_MAX)`. Note that the\nmillisecond resolution of the `kind=4` version implies that the\n`COUNT` will wrap around in roughly 25 days. In order to avoid issues\nwith the wrap around and for more precise timing, please use the\n`kind=8` version.\n\n \n\nIf there is no clock, or querying the clock fails, `COUNT` is set\nto `-HUGE(COUNT)`, and `COUNT_RATE` and `COUNT_MAX` are\nset to zero.\n\n \n\nWhen running on a platform using the GNU C library (glibc) version\n2.16 or older, or a derivative thereof, the high resolution monotonic\nclock is available only when linking with the `rt` library. This\ncan be done explicitly by adding the `-lrt` flag when linking the\napplication, but is also done implicitly when using OpenMP.\n\n \n\nOn the Windows platform, the version with `kind=4` arguments uses\nthe `GetTickCount` function, whereas the `kind=8` version\nuses `QueryPerformanceCounter` and\n`QueryPerformanceCounterFrequency`. For more information, and\npotential caveats, please see the platform documentation.\n\n\n\n\n### Syntax\n`CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])`\n\n\n### Arguments\n\n \n | `COUNT` | (Optional) shall be a scalar of type\n`INTEGER` with `INTENT(OUT)`. \n\n | `COUNT_RATE` | (Optional) shall be a scalar of type\n`INTEGER` or `REAL`, with `INTENT(OUT)`. \n\n | `COUNT_MAX` | (Optional) shall be a scalar of type\n`INTEGER` with `INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_system_clock\n\n  INTEGER :: count, count_rate, count_max\n\n  CALL SYSTEM_CLOCK(count, count_rate, count_max)\n\n  WRITE(*,*) count, count_rate, count_max\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nDATE_AND_TIME, CPU_TIME\n" -} \ No newline at end of file + "keyword": "SYSTEM_CLOCK", + "docstr": "`SYSTEM_CLOCK` — Time function\n\n### Description\nDetermines the `COUNT` of a processor clock since an unspecified\ntime in the past modulo `COUNT_MAX`, `COUNT_RATE` determines\nthe number of clock ticks per second. If the platform supports a\nmonotonic clock, that clock is used and can, depending on the platform\nclock implementation, provide up to nanosecond resolution. If a\nmonotonic clock is not available, the implementation falls back to a\nrealtime clock.\n\n \n`COUNT_RATE` is system dependent and can vary depending on the kind of\nthe arguments. For `kind=4` arguments (and smaller integer kinds),\n`COUNT` represents milliseconds, while for `kind=8` arguments (and\nlarger integer kinds), `COUNT` typically represents micro- or\nnanoseconds depending on resolution of the underlying platform clock. \n`COUNT_MAX` usually equals `HUGE(COUNT_MAX)`. Note that the\nmillisecond resolution of the `kind=4` version implies that the\n`COUNT` will wrap around in roughly 25 days. In order to avoid issues\nwith the wrap around and for more precise timing, please use the\n`kind=8` version.\n\n \n\nIf there is no clock, or querying the clock fails, `COUNT` is set\nto `-HUGE(COUNT)`, and `COUNT_RATE` and `COUNT_MAX` are\nset to zero.\n\n \n\nWhen running on a platform using the GNU C library (glibc) version\n2.16 or older, or a derivative thereof, the high resolution monotonic\nclock is available only when linking with the `rt` library. This\ncan be done explicitly by adding the `-lrt` flag when linking the\napplication, but is also done implicitly when using OpenMP.\n\n \n\nOn the Windows platform, the version with `kind=4` arguments uses\nthe `GetTickCount` function, whereas the `kind=8` version\nuses `QueryPerformanceCounter` and\n`QueryPerformanceCounterFrequency`. For more information, and\npotential caveats, please see the platform documentation.\n\n\n\n\n### Syntax\n`CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])`\n\n\n### Arguments\n\n \n | `COUNT` | (Optional) shall be a scalar of type\n`INTEGER` with `INTENT(OUT)`. \n\n | `COUNT_RATE` | (Optional) shall be a scalar of type\n`INTEGER` or `REAL`, with `INTENT(OUT)`. \n\n | `COUNT_MAX` | (Optional) shall be a scalar of type\n`INTEGER` with `INTENT(OUT)`.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_system_clock\n\n  INTEGER :: count, count_rate, count_max\n\n  CALL SYSTEM_CLOCK(count, count_rate, count_max)\n\n  WRITE(*,*) count, count_rate, count_max\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nDATE_AND_TIME, CPU_TIME\n" +} diff --git a/src/docs/TAN.json b/src/docs/TAN.json index f1d0968b..f6e3734a 100644 --- a/src/docs/TAN.json +++ b/src/docs/TAN.json @@ -1,4 +1,4 @@ { - "keyword":"TAN", - "docstr":"`TAN` — Tangent function\n\n### Description\n`TAN(X)` computes the tangent of `X`.\n\n\n\n### Syntax\n`RESULT = TAN(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_tan\n\n  real(8) :: x = 0.165_8\n\n  x = tan(x)\n\nend program test_tan\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `TAN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DTAN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nATAN\n" -} \ No newline at end of file + "keyword": "TAN", + "docstr": "`TAN` — Tangent function\n\n### Description\n`TAN(X)` computes the tangent of `X`.\n\n\n\n### Syntax\n`RESULT = TAN(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`.\n\n\n\n### Example\n```\n\n\nprogram test_tan\n\n  real(8) :: x = 0.165_8\n\n  x = tan(x)\n\nend program test_tan\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `TAN(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DTAN(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nATAN\n" +} diff --git a/src/docs/TAND.json b/src/docs/TAND.json index ecf1f92c..db31ce78 100644 --- a/src/docs/TAND.json +++ b/src/docs/TAND.json @@ -1,4 +1,4 @@ { - "keyword":"TAND", - "docstr":"`TAND` — Tangent function, degrees\n\n### Description\nTAND(X) computes the tangent of X in degrees.\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = TAND(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n### Return value\nThe return value has same type and kind as X, and its value is in degrees.\n" -} \ No newline at end of file + "keyword": "TAND", + "docstr": "`TAND` — Tangent function, degrees\n\n### Description\nTAND(X) computes the tangent of X in degrees.\nThis function is for compatibility only and should be avoided in favor of standard constructs wherever possible.\n### Standard\nGNU Extension, enabled with -fdec-math\n### Class\nElemental function\n### Syntax\nRESULT = TAND(X)\n### Arguments\n- X: The type shall be REAL or COMPLEX.\n### Return value\nThe return value has same type and kind as X, and its value is in degrees.\n" +} diff --git a/src/docs/TANH.json b/src/docs/TANH.json index 87945e82..5f6683d2 100644 --- a/src/docs/TANH.json +++ b/src/docs/TANH.json @@ -1,4 +1,4 @@ { - "keyword":"TANH", - "docstr":"`TANH` — Hyperbolic tangent function\n\n### Description\n`TANH(X)` computes the hyperbolic tangent of `X`.\n\n\n\n### Syntax\n`X = TANH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians. If `X`\nis `REAL`, the return value lies in the range\n - 1 \\leq tanh(x) \\leq 1 .\n\n\n\n### Example\n```\n\n\nprogram test_tanh\n\n  real(8) :: x = 2.1_8\n\n  x = tanh(x)\n\nend program test_tanh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `TANH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DTANH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nATANH\n" -} \ No newline at end of file + "keyword": "TANH", + "docstr": "`TANH` — Hyperbolic tangent function\n\n### Description\n`TANH(X)` computes the hyperbolic tangent of `X`.\n\n\n\n### Syntax\n`X = TANH(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value has same type and kind as `X`. If `X` is\ncomplex, the imaginary part of the result is in radians. If `X`\nis `REAL`, the return value lies in the range\n - 1 \\leq tanh(x) \\leq 1 .\n\n\n\n### Example\n```\n\n\nprogram test_tanh\n\n  real(8) :: x = 2.1_8\n\n  x = tanh(x)\n\nend program test_tanh\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `TANH(X)` | `REAL(4) X` | `REAL(4)` | Fortran 95 and later\n\n | `DTANH(X)` | `REAL(8) X` | `REAL(8)` | Fortran 95 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later, for a complex argument Fortran 2008 or later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nATANH\n" +} diff --git a/src/docs/THIS_IMAGE.json b/src/docs/THIS_IMAGE.json index 86fb6b70..a14e4d05 100644 --- a/src/docs/THIS_IMAGE.json +++ b/src/docs/THIS_IMAGE.json @@ -1,4 +1,4 @@ { - "keyword":"THIS_IMAGE", - "docstr":"`THIS_IMAGE` — Function that returns the cosubscript index of this image\n\n### Description\nReturns the cosubscript for this image.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = THIS_IMAGE(DISTANCE)`
\n | `RESULT = THIS_IMAGE(COARRAY [, DIM])`
\n\n\n\n\n\n### Arguments\n\n \n | `DISTANCE` | (optional, intent(in)) Nonnegative scalar integer\n(not permitted together with `COARRAY`). \n\n | `COARRAY` | Coarray of any type (optional; if `DIM`\npresent, required). \n\n | `DIM` | default integer scalar (optional). If present,\n`DIM` shall be between one and the corank of `COARRAY`.\n\n\n\n\n\n\n### Return value\nDefault integer. If `COARRAY` is not present, it is scalar; if\n`DISTANCE` is not present or has value 0, its value is the image index on\nthe invoking image for the current team, for values smaller or equal\ndistance to the initial team, it returns the image index on the ancestor team\nwhich has a distance of `DISTANCE` from the invoking team. If\n`DISTANCE` is larger than the distance to the initial team, the image\nindex of the initial team is returned. Otherwise when the `COARRAY` is\npresent, if `DIM` is not present, a rank-1 array with corank elements is\nreturned, containing the cosubscripts for `COARRAY` specifying the invoking\nimage. If `DIM` is present, a scalar is returned, with the value of\nthe `DIM` element of `THIS_IMAGE(COARRAY)`.\n\n\n\n### Example\n```\n\n\nINTEGER :: value[*]\n\nINTEGER :: i\n\nvalue = THIS_IMAGE()\n\nSYNC ALL\n\nIF (THIS_IMAGE() == 1) THEN\n\n  DO i = 1, NUM_IMAGES()\n\n    WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]\n\n  END DO\n\nEND IF\n\n\n! Check whether the current image is the initial image\n\nIF (THIS_IMAGE(HUGE(1)) /= THIS_IMAGE())\n\n  error stop \"something is rotten here\"\n\n```\n\n\n\n### Standard\nFortran 2008 and later. With `DISTANCE` argument,\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nNUM_IMAGES, IMAGE_INDEX\n" -} \ No newline at end of file + "keyword": "THIS_IMAGE", + "docstr": "`THIS_IMAGE` — Function that returns the cosubscript index of this image\n\n### Description\nReturns the cosubscript for this image.\n\n\n\n### Syntax\n\n \n\n\n | `RESULT = THIS_IMAGE(DISTANCE)`
\n | `RESULT = THIS_IMAGE(COARRAY [, DIM])`
\n\n\n\n\n\n### Arguments\n\n \n | `DISTANCE` | (optional, intent(in)) Nonnegative scalar integer\n(not permitted together with `COARRAY`). \n\n | `COARRAY` | Coarray of any type (optional; if `DIM`\npresent, required). \n\n | `DIM` | default integer scalar (optional). If present,\n`DIM` shall be between one and the corank of `COARRAY`.\n\n\n\n\n\n\n### Return value\nDefault integer. If `COARRAY` is not present, it is scalar; if\n`DISTANCE` is not present or has value 0, its value is the image index on\nthe invoking image for the current team, for values smaller or equal\ndistance to the initial team, it returns the image index on the ancestor team\nwhich has a distance of `DISTANCE` from the invoking team. If\n`DISTANCE` is larger than the distance to the initial team, the image\nindex of the initial team is returned. Otherwise when the `COARRAY` is\npresent, if `DIM` is not present, a rank-1 array with corank elements is\nreturned, containing the cosubscripts for `COARRAY` specifying the invoking\nimage. If `DIM` is present, a scalar is returned, with the value of\nthe `DIM` element of `THIS_IMAGE(COARRAY)`.\n\n\n\n### Example\n```\n\n\nINTEGER :: value[*]\n\nINTEGER :: i\n\nvalue = THIS_IMAGE()\n\nSYNC ALL\n\nIF (THIS_IMAGE() == 1) THEN\n\n  DO i = 1, NUM_IMAGES()\n\n    WRITE(*,'(2(a,i0))') 'value[', i, '] is ', value[i]\n\n  END DO\n\nEND IF\n\n\n! Check whether the current image is the initial image\n\nIF (THIS_IMAGE(HUGE(1)) /= THIS_IMAGE())\n\n  error stop \"something is rotten here\"\n\n```\n\n\n\n### Standard\nFortran 2008 and later. With `DISTANCE` argument,\nTechnical Specification (TS) 18508 or later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nNUM_IMAGES, IMAGE_INDEX\n" +} diff --git a/src/docs/TIME.json b/src/docs/TIME.json index 8737d875..b4f37201 100644 --- a/src/docs/TIME.json +++ b/src/docs/TIME.json @@ -1,4 +1,4 @@ { - "keyword":"TIME", - "docstr":"`TIME` — Time function\n\n### Description\nReturns the current time encoded as an integer (in the manner of the\nfunction `time(3)` in the C standard library). This value is\nsuitable for passing to `CTIME`, `GMTIME`, and `LTIME`.\n\n \nThis intrinsic is not fully portable, such as to systems with 32-bit\n`INTEGER` types but supporting times wider than 32 bits. Therefore,\nthe values returned by this intrinsic might be, or become, negative, or\nnumerically less than previous values, during a single run of the\ncompiled program.\n\n \n\nSee TIME8, for information on a similar intrinsic that might be\nportable to more GNU Fortran implementations, though to fewer Fortran\ncompilers.\n\n\n\n\n### Syntax\n`RESULT = TIME()`\n\n\n### Return value\nThe return value is a scalar of type `INTEGER(4)`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nCTIME, GMTIME, LTIME, MCLOCK, TIME8\n\n " -} \ No newline at end of file + "keyword": "TIME", + "docstr": "`TIME` — Time function\n\n### Description\nReturns the current time encoded as an integer (in the manner of the\nfunction `time(3)` in the C standard library). This value is\nsuitable for passing to `CTIME`, `GMTIME`, and `LTIME`.\n\n \nThis intrinsic is not fully portable, such as to systems with 32-bit\n`INTEGER` types but supporting times wider than 32 bits. Therefore,\nthe values returned by this intrinsic might be, or become, negative, or\nnumerically less than previous values, during a single run of the\ncompiled program.\n\n \n\nSee TIME8, for information on a similar intrinsic that might be\nportable to more GNU Fortran implementations, though to fewer Fortran\ncompilers.\n\n\n\n\n### Syntax\n`RESULT = TIME()`\n\n\n### Return value\nThe return value is a scalar of type `INTEGER(4)`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nCTIME, GMTIME, LTIME, MCLOCK, TIME8\n\n " +} diff --git a/src/docs/TIME8.json b/src/docs/TIME8.json index 593bda27..b59512ff 100644 --- a/src/docs/TIME8.json +++ b/src/docs/TIME8.json @@ -1,4 +1,4 @@ { - "keyword":"TIME8", - "docstr":"`TIME8` — Time function (64-bit)\n\n### Description\nReturns the current time encoded as an integer (in the manner of the\nfunction `time(3)` in the C standard library). This value is\nsuitable for passing to `CTIME`, `GMTIME`, and `LTIME`.\n\n \nWarning: this intrinsic does not increase the range of the timing\nvalues over that returned by `time(3)`. On a system with a 32-bit\n`time(3)`, `TIME8` will return a 32-bit value, even though\nit is converted to a 64-bit `INTEGER(8)` value. That means\noverflows of the 32-bit value can still occur. Therefore, the values\nreturned by this intrinsic might be or become negative or numerically\nless than previous values during a single run of the compiled program.\n\n\n\n\n### Syntax\n`RESULT = TIME8()`\n\n\n### Return value\nThe return value is a scalar of type `INTEGER(8)`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nCTIME, GMTIME, LTIME, MCLOCK8, TIME\n\n " -} \ No newline at end of file + "keyword": "TIME8", + "docstr": "`TIME8` — Time function (64-bit)\n\n### Description\nReturns the current time encoded as an integer (in the manner of the\nfunction `time(3)` in the C standard library). This value is\nsuitable for passing to `CTIME`, `GMTIME`, and `LTIME`.\n\n \nWarning: this intrinsic does not increase the range of the timing\nvalues over that returned by `time(3)`. On a system with a 32-bit\n`time(3)`, `TIME8` will return a 32-bit value, even though\nit is converted to a 64-bit `INTEGER(8)` value. That means\noverflows of the 32-bit value can still occur. Therefore, the values\nreturned by this intrinsic might be or become negative or numerically\nless than previous values during a single run of the compiled program.\n\n\n\n\n### Syntax\n`RESULT = TIME8()`\n\n\n### Return value\nThe return value is a scalar of type `INTEGER(8)`.\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nCTIME, GMTIME, LTIME, MCLOCK8, TIME\n\n " +} diff --git a/src/docs/TINY.json b/src/docs/TINY.json index e311de96..3b8bd997 100644 --- a/src/docs/TINY.json +++ b/src/docs/TINY.json @@ -1,4 +1,4 @@ { - "keyword":"TINY", - "docstr":"`TINY` — Smallest positive number of a real kind\n\n### Description\n`TINY(X)` returns the smallest positive (non zero) number\nin the model of the type of `X`.\n\n\n\n### Syntax\n`RESULT = TINY(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`\n\n\n\n### Example\nSee `HUGE` for an example. \n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" -} \ No newline at end of file + "keyword": "TINY", + "docstr": "`TINY` — Smallest positive number of a real kind\n\n### Description\n`TINY(X)` returns the smallest positive (non zero) number\nin the model of the type of `X`.\n\n\n\n### Syntax\n`RESULT = TINY(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of the same type and kind as `X`\n\n\n\n### Example\nSee `HUGE` for an example. \n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" +} diff --git a/src/docs/TRAILZ.json b/src/docs/TRAILZ.json index 424cb6d0..cac14d38 100644 --- a/src/docs/TRAILZ.json +++ b/src/docs/TRAILZ.json @@ -1,4 +1,4 @@ { - "keyword":"TRAILZ", - "docstr":"`TRAILZ` — Number of trailing zero bits of an integer\n\n### Description\n`TRAILZ` returns the number of trailing zero bits of an integer.\n\n\n\n### Syntax\n`RESULT = TRAILZ(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe type of the return value is the default `INTEGER`. \nIf all the bits of `I` are zero, the result value is `BIT_SIZE(I)`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_trailz\n\n  WRITE (*,*) TRAILZ(8) ! prints 3\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, LEADZ, POPPAR, POPCNT\n" -} \ No newline at end of file + "keyword": "TRAILZ", + "docstr": "`TRAILZ` — Number of trailing zero bits of an integer\n\n### Description\n`TRAILZ` returns the number of trailing zero bits of an integer.\n\n\n\n### Syntax\n`RESULT = TRAILZ(I)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe type of the return value is the default `INTEGER`. \nIf all the bits of `I` are zero, the result value is `BIT_SIZE(I)`.\n\n\n\n### Example\n```\n\n\nPROGRAM test_trailz\n\n  WRITE (*,*) TRAILZ(8) ! prints 3\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nBIT_SIZE, LEADZ, POPPAR, POPCNT\n" +} diff --git a/src/docs/TRANSFER.json b/src/docs/TRANSFER.json index 9095835d..78e603d9 100644 --- a/src/docs/TRANSFER.json +++ b/src/docs/TRANSFER.json @@ -1,4 +1,4 @@ { - "keyword":"TRANSFER", - "docstr":"`TRANSFER` — Transfer bit patterns\n\n### Description\nInterprets the bitwise representation of `SOURCE` in memory as if it\nis the representation of a variable or array of the same type and type\nparameters as `MOLD`.\n\n \nThis is approximately equivalent to the C concept of casting one\ntype to another.\n\n\n\n\n### Syntax\n`RESULT = TRANSFER(SOURCE, MOLD[, SIZE])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be a scalar or an array of any type. \n\n | `MOLD` | Shall be a scalar or an array of any type. \n\n | `SIZE` | (Optional) shall be a scalar of type\n`INTEGER`.\n\n\n\n\n\n\n### Return value\nThe result has the same type as `MOLD`, with the bit level\nrepresentation of `SOURCE`. If `SIZE` is present, the result is\na one-dimensional array of length `SIZE`. If `SIZE` is absent\nbut `MOLD` is an array (of any size or shape), the result is a one-\ndimensional array of the minimum length needed to contain the entirety\nof the bitwise representation of `SOURCE`. If `SIZE` is absent\nand `MOLD` is a scalar, the result is a scalar.\n\n \nIf the bitwise representation of the result is longer than that of\n`SOURCE`, then the leading bits of the result correspond to those of\n`SOURCE` and any trailing bits are filled arbitrarily.\n\n \n\nWhen the resulting bit representation does not correspond to a valid\nrepresentation of a variable of the same type as `MOLD`, the results\nare undefined, and subsequent operations on the result cannot be\nguaranteed to produce sensible behavior. For example, it is possible to\ncreate `LOGICAL` variables for which `VAR` and\n`.NOT.``VAR` both appear to be true.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_transfer\n\n  integer :: x = 2143289344\n\n  print *, transfer(x, 1.0) ! prints \"NaN\" on i686\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "TRANSFER", + "docstr": "`TRANSFER` — Transfer bit patterns\n\n### Description\nInterprets the bitwise representation of `SOURCE` in memory as if it\nis the representation of a variable or array of the same type and type\nparameters as `MOLD`.\n\n \nThis is approximately equivalent to the C concept of casting one\ntype to another.\n\n\n\n\n### Syntax\n`RESULT = TRANSFER(SOURCE, MOLD[, SIZE])`\n\n\n### Arguments\n\n \n | `SOURCE` | Shall be a scalar or an array of any type. \n\n | `MOLD` | Shall be a scalar or an array of any type. \n\n | `SIZE` | (Optional) shall be a scalar of type\n`INTEGER`.\n\n\n\n\n\n\n### Return value\nThe result has the same type as `MOLD`, with the bit level\nrepresentation of `SOURCE`. If `SIZE` is present, the result is\na one-dimensional array of length `SIZE`. If `SIZE` is absent\nbut `MOLD` is an array (of any size or shape), the result is a one-\ndimensional array of the minimum length needed to contain the entirety\nof the bitwise representation of `SOURCE`. If `SIZE` is absent\nand `MOLD` is a scalar, the result is a scalar.\n\n \nIf the bitwise representation of the result is longer than that of\n`SOURCE`, then the leading bits of the result correspond to those of\n`SOURCE` and any trailing bits are filled arbitrarily.\n\n \n\nWhen the resulting bit representation does not correspond to a valid\nrepresentation of a variable of the same type as `MOLD`, the results\nare undefined, and subsequent operations on the result cannot be\nguaranteed to produce sensible behavior. For example, it is possible to\ncreate `LOGICAL` variables for which `VAR` and\n`.NOT.``VAR` both appear to be true.\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_transfer\n\n  integer :: x = 2143289344\n\n  print *, transfer(x, 1.0) ! prints \"NaN\" on i686\n\nEND PROGRAM\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/TRANSPOSE.json b/src/docs/TRANSPOSE.json index 8deb9ab4..1bcddbe1 100644 --- a/src/docs/TRANSPOSE.json +++ b/src/docs/TRANSPOSE.json @@ -1,4 +1,4 @@ { - "keyword":"TRANSPOSE", - "docstr":"`TRANSPOSE` — Transpose an array of rank two\n\n### Description\nTranspose an array of rank two. Element (i, j) of the result has the value\n`MATRIX(j, i)`, for all i, j.\n\n\n\n### Syntax\n`RESULT = TRANSPOSE(MATRIX)`\n\n\n### Arguments\n\n \n | `MATRIX` | Shall be an array of any type and have a rank of two.\n\n\n\n\n\n\n### Return value\nThe result has the same type as `MATRIX`, and has shape\n`(/ m, n /)` if `MATRIX` has shape `(/ n, m /)`. \n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" -} \ No newline at end of file + "keyword": "TRANSPOSE", + "docstr": "`TRANSPOSE` — Transpose an array of rank two\n\n### Description\nTranspose an array of rank two. Element (i, j) of the result has the value\n`MATRIX(j, i)`, for all i, j.\n\n\n\n### Syntax\n`RESULT = TRANSPOSE(MATRIX)`\n\n\n### Arguments\n\n \n | `MATRIX` | Shall be an array of any type and have a rank of two.\n\n\n\n\n\n\n### Return value\nThe result has the same type as `MATRIX`, and has shape\n`(/ m, n /)` if `MATRIX` has shape `(/ n, m /)`. \n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" +} diff --git a/src/docs/TRIM.json b/src/docs/TRIM.json index acbf8242..04d93619 100644 --- a/src/docs/TRIM.json +++ b/src/docs/TRIM.json @@ -1,4 +1,4 @@ { - "keyword":"TRIM", - "docstr":"`TRIM` — Remove trailing blank characters of a string\n\n### Description\nRemoves trailing blank characters of a string.\n\n\n\n### Syntax\n`RESULT = TRIM(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nA scalar of type `CHARACTER` which length is that of `STRING`\nless the number of trailing blanks.\n\n\n\n### Example\n```\n\n\nPROGRAM test_trim\n\n  CHARACTER(len=10), PARAMETER :: s = \"GFORTRAN \"\n\n  WRITE(*,*) LEN(s), LEN(TRIM(s)) ! \"10 8\", with/without trailing blanks\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nADJUSTL, ADJUSTR\n" -} \ No newline at end of file + "keyword": "TRIM", + "docstr": "`TRIM` — Remove trailing blank characters of a string\n\n### Description\nRemoves trailing blank characters of a string.\n\n\n\n### Syntax\n`RESULT = TRIM(STRING)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nA scalar of type `CHARACTER` which length is that of `STRING`\nless the number of trailing blanks.\n\n\n\n### Example\n```\n\n\nPROGRAM test_trim\n\n  CHARACTER(len=10), PARAMETER :: s = \"GFORTRAN \"\n\n  WRITE(*,*) LEN(s), LEN(TRIM(s)) ! \"10 8\", with/without trailing blanks\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nADJUSTL, ADJUSTR\n" +} diff --git a/src/docs/TTYNAM.json b/src/docs/TTYNAM.json index 24245e39..efb7352a 100644 --- a/src/docs/TTYNAM.json +++ b/src/docs/TTYNAM.json @@ -1,4 +1,4 @@ { - "keyword":"TTYNAM", - "docstr":"`TTYNAM` — Get the name of a terminal device.\n\n### Description\nGet the name of a terminal device. For more information,\nsee `ttyname(3)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `NAME = TTYNAM(UNIT)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `NAME` | Shall be of type `CHARACTER`.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_ttynam\n\n  INTEGER :: unit\n\n  DO unit = 1, 10\n\n    IF (isatty(unit=unit)) write(*,*) ttynam(unit)\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nISATTY\n" -} \ No newline at end of file + "keyword": "TTYNAM", + "docstr": "`TTYNAM` — Get the name of a terminal device.\n\n### Description\nGet the name of a terminal device. For more information,\nsee `ttyname(3)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `NAME = TTYNAM(UNIT)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `NAME` | Shall be of type `CHARACTER`.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_ttynam\n\n  INTEGER :: unit\n\n  DO unit = 1, 10\n\n    IF (isatty(unit=unit)) write(*,*) ttynam(unit)\n\n  END DO\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nISATTY\n" +} diff --git a/src/docs/UBOUND.json b/src/docs/UBOUND.json index 426784d2..b30e6fe4 100644 --- a/src/docs/UBOUND.json +++ b/src/docs/UBOUND.json @@ -1,4 +1,4 @@ { - "keyword":"UBOUND", - "docstr":"`UBOUND` — Upper dimension bounds of an array\n\n### Description\nReturns the upper bounds of an array, or a single upper bound\nalong the `DIM` dimension. \n\n\n### Syntax\n`RESULT = UBOUND(ARRAY [, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array, of any type. \n\n | `DIM` | (Optional) Shall be a scalar `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is absent, the result is an array of the upper bounds of\n`ARRAY`. If `DIM` is present, the result is a scalar\ncorresponding to the upper bound of the array along that dimension. If\n`ARRAY` is an expression rather than a whole array or array\nstructure component, or if it has a zero extent along the relevant\ndimension, the upper bound is taken to be the number of elements along\nthe relevant dimension.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nLBOUND, LCOBOUND\n" -} \ No newline at end of file + "keyword": "UBOUND", + "docstr": "`UBOUND` — Upper dimension bounds of an array\n\n### Description\nReturns the upper bounds of an array, or a single upper bound\nalong the `DIM` dimension. \n\n\n### Syntax\n`RESULT = UBOUND(ARRAY [, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array, of any type. \n\n | `DIM` | (Optional) Shall be a scalar `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is absent, the result is an array of the upper bounds of\n`ARRAY`. If `DIM` is present, the result is a scalar\ncorresponding to the upper bound of the array along that dimension. If\n`ARRAY` is an expression rather than a whole array or array\nstructure component, or if it has a zero extent along the relevant\ndimension, the upper bound is taken to be the number of elements along\nthe relevant dimension.\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nLBOUND, LCOBOUND\n" +} diff --git a/src/docs/UCOBOUND.json b/src/docs/UCOBOUND.json index 7606a4ab..7ad0ea06 100644 --- a/src/docs/UCOBOUND.json +++ b/src/docs/UCOBOUND.json @@ -1,4 +1,4 @@ { - "keyword":"UCOBOUND", - "docstr":"`UCOBOUND` — Upper codimension bounds of an array\n\n### Description\nReturns the upper cobounds of a coarray, or a single upper cobound\nalong the `DIM` codimension. \n\n\n### Syntax\n`RESULT = UCOBOUND(COARRAY [, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an coarray, of any type. \n\n | `DIM` | (Optional) Shall be a scalar `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is absent, the result is an array of the lower cobounds of\n`COARRAY`. If `DIM` is present, the result is a scalar\ncorresponding to the lower cobound of the array along that codimension.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nLCOBOUND, LBOUND\n" -} \ No newline at end of file + "keyword": "UCOBOUND", + "docstr": "`UCOBOUND` — Upper codimension bounds of an array\n\n### Description\nReturns the upper cobounds of a coarray, or a single upper cobound\nalong the `DIM` codimension. \n\n\n### Syntax\n`RESULT = UCOBOUND(COARRAY [, DIM [, KIND]])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an coarray, of any type. \n\n | `DIM` | (Optional) Shall be a scalar `INTEGER`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind. \nIf `DIM` is absent, the result is an array of the lower cobounds of\n`COARRAY`. If `DIM` is present, the result is a scalar\ncorresponding to the lower cobound of the array along that codimension.\n\n\n\n### Standard\nFortran 2008 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nLCOBOUND, LBOUND\n" +} diff --git a/src/docs/UMASK.json b/src/docs/UMASK.json index 99b12939..75adc57f 100644 --- a/src/docs/UMASK.json +++ b/src/docs/UMASK.json @@ -1,4 +1,4 @@ { - "keyword":"UMASK", - "docstr":"`UMASK` — Set the file creation mask\n\n### Description\nSets the file creation mask to `MASK`. If called as a function, it\nreturns the old value. If called as a subroutine and argument `OLD`\nif it is supplied, it is set to the old value. See `umask(2)`.\n\n\n\n### Syntax\n\n \n\n\n | `OLD = UMASK(MASK)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `OLD` | (Optional) Shall be a scalar of type\n`INTEGER`.\n\n\n\n \n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" -} \ No newline at end of file + "keyword": "UMASK", + "docstr": "`UMASK` — Set the file creation mask\n\n### Description\nSets the file creation mask to `MASK`. If called as a function, it\nreturns the old value. If called as a subroutine and argument `OLD`\nif it is supplied, it is set to the old value. See `umask(2)`.\n\n\n\n### Syntax\n\n \n\n\n | `OLD = UMASK(MASK)`
\n\n\n\n\n\n### Arguments\n\n \n. \n\n | `OLD` | (Optional) Shall be a scalar of type\n`INTEGER`.\n\n\n\n \n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" +} diff --git a/src/docs/UNLINK.json b/src/docs/UNLINK.json index 68436a45..7e0acda0 100644 --- a/src/docs/UNLINK.json +++ b/src/docs/UNLINK.json @@ -1,4 +1,4 @@ { - "keyword":"UNLINK", - "docstr":"`UNLINK` — Remove a file from the file system\n\n### Description\nUnlinks the file `PATH`. A null character (`CHAR(0)`) can be\nused to mark the end of the name in `PATH`; otherwise, trailing\nblanks in the file name are ignored. If the `STATUS` argument is\nsupplied, it contains 0 on success or a nonzero error code upon return;\nsee `unlink(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = UNLINK(PATH)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nLINK, SYMLNK\n" -} \ No newline at end of file + "keyword": "UNLINK", + "docstr": "`UNLINK` — Remove a file from the file system\n\n### Description\nUnlinks the file `PATH`. A null character (`CHAR(0)`) can be\nused to mark the end of the name in `PATH`; otherwise, trailing\nblanks in the file name are ignored. If the `STATUS` argument is\nsupplied, it contains 0 on success or a nonzero error code upon return;\nsee `unlink(2)`.\n\n \nThis intrinsic is provided in both subroutine and function forms;\nhowever, only one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = UNLINK(PATH)`
\n\n\n\n\n\n### Arguments\n\n \n type. \n\n | `STATUS` | (Optional) Shall be of default `INTEGER` type.\n\n\n\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nLINK, SYMLNK\n" +} diff --git a/src/docs/UNPACK.json b/src/docs/UNPACK.json index 43d192bb..e741c0ce 100644 --- a/src/docs/UNPACK.json +++ b/src/docs/UNPACK.json @@ -1,4 +1,4 @@ { - "keyword":"UNPACK", - "docstr":"`UNPACK` — Unpack an array of rank one into an array\n\n### Description\nStore the elements of `VECTOR` in an array of higher rank.\n\n\n\n### Syntax\n`RESULT = UNPACK(VECTOR, MASK, FIELD)`\n\n\n### Arguments\n\n \n | `VECTOR` | Shall be an array of any type and rank one. It\nshall have at least as many elements as `MASK` has `TRUE` values. \n\n | `MASK` | Shall be an array of type `LOGICAL`. \n\n | `FIELD` | Shall be of the same type as `VECTOR` and have\nthe same shape as `MASK`.\n\n\n\n\n\n\n### Return value\nThe resulting array corresponds to `FIELD` with `TRUE` elements\nof `MASK` replaced by values from `VECTOR` in array element order.\n\n\n\n### Example\n```\n\n\nPROGRAM test_unpack\n\n  integer :: vector(2) = (/1,1/)\n\n  logical :: mask(4) = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)\n\n  integer :: field(2,2) = 0, unity(2,2)\n\n\n  ! result: unity matrix\n\n  unity = unpack(vector, reshape(mask, (/2,2/)), field)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPACK, SPREAD\n" -} \ No newline at end of file + "keyword": "UNPACK", + "docstr": "`UNPACK` — Unpack an array of rank one into an array\n\n### Description\nStore the elements of `VECTOR` in an array of higher rank.\n\n\n\n### Syntax\n`RESULT = UNPACK(VECTOR, MASK, FIELD)`\n\n\n### Arguments\n\n \n | `VECTOR` | Shall be an array of any type and rank one. It\nshall have at least as many elements as `MASK` has `TRUE` values. \n\n | `MASK` | Shall be an array of type `LOGICAL`. \n\n | `FIELD` | Shall be of the same type as `VECTOR` and have\nthe same shape as `MASK`.\n\n\n\n\n\n\n### Return value\nThe resulting array corresponds to `FIELD` with `TRUE` elements\nof `MASK` replaced by values from `VECTOR` in array element order.\n\n\n\n### Example\n```\n\n\nPROGRAM test_unpack\n\n  integer :: vector(2) = (/1,1/)\n\n  logical :: mask(4) = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)\n\n  integer :: field(2,2) = 0, unity(2,2)\n\n\n  ! result: unity matrix\n\n  unity = unpack(vector, reshape(mask, (/2,2/)), field)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nPACK, SPREAD\n" +} diff --git a/src/docs/VERIFY.json b/src/docs/VERIFY.json index 8d4ba4e8..921e2c39 100644 --- a/src/docs/VERIFY.json +++ b/src/docs/VERIFY.json @@ -1,4 +1,4 @@ { - "keyword":"VERIFY", - "docstr":"`VERIFY` — Scan a string for characters not a given set\n\n### Description\nVerifies that all the characters in `STRING` belong to the set of\ncharacters in `SET`.\n\n \nIf `BACK` is either absent or equals `FALSE`, this function\nreturns the position of the leftmost character of `STRING` that is\nnot in `SET`. If `BACK` equals `TRUE`, the rightmost\nposition is returned. If all characters of `STRING` are found in\n`SET`, the result is zero.\n\n\n\n\n### Syntax\n`RESULT = VERIFY(STRING, SET[, BACK [, KIND]])`\n\n\n### Arguments\n\n \n. \n\n | `SET` | Shall be of type `CHARACTER`. \n\n | `BACK` | (Optional) shall be of type `LOGICAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_verify\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"AO\") ! 1, found 'F'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"FOO\") ! 3, found 'R'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"C++\") ! 1, found 'F'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"C++\", .TRUE.) ! 7, found 'N'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"FORTRAN\") ! 0' found none\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSCAN, INDEX intrinsic\n" -} \ No newline at end of file + "keyword": "VERIFY", + "docstr": "`VERIFY` — Scan a string for characters not a given set\n\n### Description\nVerifies that all the characters in `STRING` belong to the set of\ncharacters in `SET`.\n\n \nIf `BACK` is either absent or equals `FALSE`, this function\nreturns the position of the leftmost character of `STRING` that is\nnot in `SET`. If `BACK` equals `TRUE`, the rightmost\nposition is returned. If all characters of `STRING` are found in\n`SET`, the result is zero.\n\n\n\n\n### Syntax\n`RESULT = VERIFY(STRING, SET[, BACK [, KIND]])`\n\n\n### Arguments\n\n \n. \n\n | `SET` | Shall be of type `CHARACTER`. \n\n | `BACK` | (Optional) shall be of type `LOGICAL`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER` and of kind `KIND`. If\n`KIND` is absent, the return value is of default integer kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_verify\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"AO\") ! 1, found 'F'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"FOO\") ! 3, found 'R'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"C++\") ! 1, found 'F'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"C++\", .TRUE.) ! 7, found 'N'\n\n  WRITE(*,*) VERIFY(\"FORTRAN\", \"FORTRAN\") ! 0' found none\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nFortran 95 and later, with `KIND` argument Fortran 2003 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nSCAN, INDEX intrinsic\n" +} diff --git a/src/docs/XOR.json b/src/docs/XOR.json index ead3820d..f9e44920 100644 --- a/src/docs/XOR.json +++ b/src/docs/XOR.json @@ -1,4 +1,4 @@ { - "keyword":"XOR", - "docstr":"`XOR` — Bitwise logical exclusive OR\n\n### Description\nBitwise logical exclusive or.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IEOR intrinsic and for logical arguments the\n`.NEQV.` operator, which are both defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = XOR(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `I`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_xor\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F)\n\n  WRITE (*,*) XOR(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IEOR\n" -} \ No newline at end of file + "keyword": "XOR", + "docstr": "`XOR` — Bitwise logical exclusive OR\n\n### Description\nBitwise logical exclusive or.\n\n \nThis intrinsic routine is provided for backwards compatibility with\nGNU Fortran 77. For integer arguments, programmers should consider\nthe use of the IEOR intrinsic and for logical arguments the\n`.NEQV.` operator, which are both defined by the Fortran standard.\n\n\n\n\n### Syntax\n`RESULT = XOR(I, J)`\n\n\n### Arguments\n\n \n\ntype or a scalar `LOGICAL` type. \n\n | `J` | The type shall be the same as the type of `I`.\n\n\n\n\n\n\n### Return value\nThe return type is either a scalar `INTEGER` or a scalar\n`LOGICAL`. If the kind type parameters differ, then the\nsmaller kind type is implicitly converted to larger kind, and the\nreturn has the larger kind.\n\n\n\n### Example\n```\n\n\nPROGRAM test_xor\n\n  LOGICAL :: T = .TRUE., F = .FALSE.\n\n  INTEGER :: a, b\n\n  DATA a / Z'F' /, b / Z'3' /\n\n\n  WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F)\n\n  WRITE (*,*) XOR(a, b)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFortran 95 elemental function: IEOR\n" +} From b6e840f85efbf52059807b85c7d590a8111924e3 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 20:32:46 +0100 Subject: [PATCH 17/62] Updated README.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd6f5600..7fcf882e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Fixes OpenACC syntax highlighting not triggering +- Fixes internal hover documentation display + ([#205](https://github.com/krvajal/vscode-fortran-support/issues/205)) ### Added From f0e6af46fa7cdf13386eeeedf08bda6867ee9ad2 Mon Sep 17 00:00:00 2001 From: gnikit Date: Sat, 2 Oct 2021 17:25:26 +0100 Subject: [PATCH 18/62] Adds VS marketplace automated release Fixes Setting up VSCE releases from GitHub releases #237 --- .github/workflows/publish.yml | 24 ++++++++++++++++++++++++ CHANGELOG.md | 2 ++ 2 files changed, 26 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..7425472b --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,24 @@ +on: + push: + tags: + - '*' + +name: Deploy Extension +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 12 + - run: npm ci + # - name: Publish to Open VSX Registry + # uses: HaaLeo/publish-vscode-extension@v0 + # with: + # pat: ${{ secrets.OPEN_VSX_TOKEN }} + - name: Publish to Visual Studio Marketplace + uses: HaaLeo/publish-vscode-extension@v0 + with: + pat: ${{ secrets.VS_MARKETPLACE_TOKEN }} + registryUrl: https://marketplace.visualstudio.com diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fcf882e..d995bbe1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Adds support for .f18 and .F18 file extensions ([#252](https://github.com/krvajal/vscode-fortran-support/pull/252)) +- Adds workflow for automatic publishing to VS Marketplace + ([#237](https://github.com/krvajal/vscode-fortran-support/issues/237)) ## [2.3.0] From 83aa34fe84233e0155b3a5e1038a6d626fb3799d Mon Sep 17 00:00:00 2001 From: gnikit Date: Sat, 2 Oct 2021 18:57:26 +0100 Subject: [PATCH 19/62] Further improvements to the hover documentation --- src/docs/ACCESS.json | 2 +- src/docs/ASSOCIATED.json | 2 +- src/docs/COMPILER_OPTIONS.json | 2 +- src/docs/COMPILER_VERSION.json | 2 +- src/docs/C_ASSOCIATED.json | 2 +- src/docs/C_LOC.json | 2 +- src/docs/EPSILON.json | 2 +- src/docs/EVENT_QUERY.json | 2 +- src/docs/FGET.json | 2 +- src/docs/INT.json | 2 +- src/docs/LGE.json | 2 +- src/docs/LGT.json | 2 +- src/docs/LLE.json | 2 +- src/docs/LLT.json | 2 +- src/docs/LOG.json | 2 +- src/docs/NULL.json | 2 +- src/docs/RANDOM_NUMBER.json | 2 +- src/docs/RANDOM_SEED.json | 2 +- src/docs/SELECTED_CHAR_KIND.json | 2 +- src/docs/SELECTED_INT_KIND.json | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/docs/ACCESS.json b/src/docs/ACCESS.json index d9eb1c32..d7854e1a 100644 --- a/src/docs/ACCESS.json +++ b/src/docs/ACCESS.json @@ -1,4 +1,4 @@ { "keyword": "ACCESS", - "docstr": "`ACCESS` — Checks file access modes\n\n### Description\n`ACCESS(NAME, MODE)` checks whether the file `NAME`\nexists, is readable, writable or executable. Except for the\nexecutable check, `ACCESS` can be replaced by\nFortran 95's `INQUIRE`.\n\n\n\n### Syntax\n`RESULT = ACCESS(NAME, MODE)`\n\n\n### Arguments\n\n \n of default kind with the\nfile name. Tailing blank are ignored unless the character `achar(0)`is present, then all characters up to and excluding `achar(0)` are\nused as file name. \n\n | `MODE` | Scalar `CHARACTER` of default kind with the\nfile access mode, may be any concatenation of `\"r\"` (readable),\n`\"w\"` (writable) and `\"x\"` (executable), or `\" \"` to check\nfor existence.\n\n\n\n\n\n\n### Return value\nReturns a scalar `INTEGER`, which is `0` if the file is\naccessible in the given mode; otherwise or if an invalid argument\nhas been given for `MODE` the value `1` is returned.\n\n\n\n### Example\n```\n\n\nprogram access_test\n\n  implicit none\n\n  character(len=*), parameter :: file = 'test.dat'\n\n  character(len=*), parameter :: file2 = 'test.dat '//achar(0)\n\n  if(access(file,' ') == 0) print *, trim(file),' is exists'\n\n  if(access(file,'r') == 0) print *, trim(file),' is readable'\n\n  if(access(file,'w') == 0) print *, trim(file),' is writable'\n\n  if(access(file,'x') == 0) print *, trim(file),' is executable'\n\n  if(access(file2,'rwx') == 0) &\n\n    print *, trim(file2),' is readable, writable and executable'\n\nend program access_test\n\n```\n\n\n\n### Specific names\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\n\n" + "docstr": "`ACCESS` — Checks file access modes\n\n### Description\n`ACCESS(NAME, MODE)` checks whether the file `NAME`\nexists, is readable, writable or executable. Except for the\nexecutable check, `ACCESS` can be replaced by\nFortran 95's `INQUIRE`.\n\n\n\n### Syntax\n`RESULT = ACCESS(NAME, MODE)`\n\n\n### Arguments\n\n \n of default kind with the\nfile name. Tailing blank are ignored unless the character `achar(0)`is present, then all characters up to and excluding `achar(0)` are\nused as file name. \n\n | `MODE` | Scalar `CHARACTER` of default kind with the\nfile access mode, may be any concatenation of `\"r\"` (readable),\n`\"w\"` (writable) and `\"x\"` (executable), or `\" \"` to check\nfor existence.\n\n\n\n\n\n\n### Return value\nReturns a scalar `INTEGER`, which is `0` if the file is\naccessible in the given mode; otherwise or if an invalid argument\nhas been given for `MODE` the value `1` is returned.\n\n\n\n### Example\n```\n\n\nprogram access_test\n\n  implicit none\n\n  character(len=*), parameter :: file = 'test.dat'\n\n  character(len=*), parameter :: file2 = 'test.dat '//achar(0)\n\n  if(access(file,' ') == 0) print *, trim(file),' is exists'\n\n  if(access(file,'r') == 0) print *, trim(file),' is readable'\n\n  if(access(file,'w') == 0) print *, trim(file),' is writable'\n\n  if(access(file,'x') == 0) print *, trim(file),' is executable'\n\n  if(access(file2,'rwx') == 0) &\n\n    print *, trim(file2),' is readable, writable and executable'\n\nend program access_test\n\n```\n\n\n\n### Specific names\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\n\n" } diff --git a/src/docs/ASSOCIATED.json b/src/docs/ASSOCIATED.json index c01345d1..83e2aae2 100644 --- a/src/docs/ASSOCIATED.json +++ b/src/docs/ASSOCIATED.json @@ -1,4 +1,4 @@ { "keyword": "ASSOCIATED", - "docstr": "`ASSOCIATED` — Status of a pointer or pointer/target pair\n\n### Description\n`ASSOCIATED(POINTER [, TARGET])` determines the status of the pointer\n`POINTER` or if `POINTER` is associated with the target `TARGET`.\n\n\n\n### Syntax\n`RESULT = ASSOCIATED(POINTER [, TARGET])`\n\n\n### Arguments\n\n \n attribute\nand it can be of any type. \n\n | `TARGET` | (Optional) `TARGET` shall be a pointer or\na target. It must have the same type, kind type parameter, and\narray rank as `POINTER`.\n\n\nThe association status of neither `POINTER` nor `TARGET` shall be\nundefined.\n\n\n\n\n### Return value\n`ASSOCIATED(POINTER)` returns a scalar value of type `LOGICAL(4)`. \nThere are several cases:\n
\n**(A) When the optional `TARGET` is not present then** `ASSOCIATED(POINTER)` is true if `POINTER` is associated with a target; otherwise, it returns false. \n\n**(B) If `TARGET` is present and a scalar target, the result is true if** `TARGET` is not a zero-sized storage sequence and the target associated with `POINTER` occupies the same storage units. If `POINTER` is\ndisassociated, the result is false. \n\n**(C) If `TARGET` is present and an array target, the result is true if** `TARGET` and `POINTER` have the same shape, are not zero-sized arrays,\nare arrays whose elements are not zero-sized storage sequences, and\n`TARGET` and `POINTER` occupy the same storage units in array element\norder. \nAs in case(B), the result is false, if `POINTER` is disassociated. \n\n**(D) If `TARGET` is present and an scalar pointer, the result is true** if `TARGET` is associated with `POINTER`, the target associated with\n`TARGET` are not zero-sized storage sequences and occupy the same storage\nunits. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n**(E) If `TARGET` is present and an array pointer, the result is true if** target associated with `POINTER` and the target associated with `TARGET`\nhave the same shape, are not zero-sized arrays, are arrays whose elements are\nnot zero-sized storage sequences, and `TARGET` and `POINTER` occupy\nthe same storage units in array element order. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_associated\n\n   implicit none\n\n   real, target :: tgt(2) = (/1., 2./)\n\n   real, pointer :: ptr(:)\n\n   ptr => tgt\n\n   if (associated(ptr) .eqv. .false.) call abort\n\n   if (associated(ptr,tgt) .eqv. .false.) call abort\n\nend program test_associated\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nNULL\n" + "docstr": "`ASSOCIATED` — Status of a pointer or pointer/target pair\n\n### Description\n`ASSOCIATED(POINTER [, TARGET])` determines the status of the pointer\n`POINTER` or if `POINTER` is associated with the target `TARGET`.\n\n\n\n### Syntax\n`RESULT = ASSOCIATED(POINTER [, TARGET])`\n\n\n### Arguments\n\n \n attribute\nand it can be of any type. \n\n | `TARGET` | (Optional) `TARGET` shall be a pointer or\na target. It must have the same type, kind type parameter, and\narray rank as `POINTER`.\n\n\nThe association status of neither `POINTER` nor `TARGET` shall be\nundefined.\n\n\n\n\n### Return value\n`ASSOCIATED(POINTER)` returns a scalar value of type `LOGICAL(4)`. \nThere are several cases:\n
\n**(A) When the optional `TARGET` is not present then** `ASSOCIATED(POINTER)` is true if `POINTER` is associated with a target; otherwise, it returns false. \n\n**(B) If `TARGET` is present and a scalar target, the result is true if** `TARGET` is not a zero-sized storage sequence and the target associated with `POINTER` occupies the same storage units. If `POINTER` is\ndisassociated, the result is false. \n\n**(C) If `TARGET` is present and an array target, the result is true if** `TARGET` and `POINTER` have the same shape, are not zero-sized arrays,\nare arrays whose elements are not zero-sized storage sequences, and\n`TARGET` and `POINTER` occupy the same storage units in array element\norder. \nAs in case(B), the result is false, if `POINTER` is disassociated. \n\n**(D) If `TARGET` is present and an scalar pointer, the result is true** if `TARGET` is associated with `POINTER`, the target associated with\n`TARGET` are not zero-sized storage sequences and occupy the same storage\nunits. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n**(E) If `TARGET` is present and an array pointer, the result is true if** target associated with `POINTER` and the target associated with `TARGET`\nhave the same shape, are not zero-sized arrays, are arrays whose elements are\nnot zero-sized storage sequences, and `TARGET` and `POINTER` occupy\nthe same storage units in array element order. \nThe result is false, if either `TARGET` or `POINTER` is disassociated. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_associated\n\n   implicit none\n\n   real, target :: tgt(2) = (/1., 2./)\n\n   real, pointer :: ptr(:)\n\n   ptr => tgt\n\n   if (associated(ptr) .eqv. .false.) call abort\n\n   if (associated(ptr,tgt) .eqv. .false.) call abort\n\nend program test_associated\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nNULL\n" } diff --git a/src/docs/COMPILER_OPTIONS.json b/src/docs/COMPILER_OPTIONS.json index e8ffe1f2..746961c1 100644 --- a/src/docs/COMPILER_OPTIONS.json +++ b/src/docs/COMPILER_OPTIONS.json @@ -1,4 +1,4 @@ { "keyword": "COMPILER_OPTIONS", - "docstr": "`COMPILER_OPTIONS` — Options passed to the compiler\n\n### Description\n`COMPILER_OPTIONS` returns a string with the options used for\ncompiling.\n\n\n\n### Syntax\n`STR = COMPILER_OPTIONS()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the compiler flags used to compile the file, which called\nthe `COMPILER_OPTIONS` intrinsic.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_VERSION, ISO_FORTRAN_ENV\n" + "docstr": "`COMPILER_OPTIONS` — Options passed to the compiler\n\n### Description\n`COMPILER_OPTIONS` returns a string with the options used for\ncompiling.\n\n\n\n### Syntax\n`STR = COMPILER_OPTIONS()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the compiler flags used to compile the file, which called\nthe `COMPILER_OPTIONS` intrinsic.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_VERSION, ISO_FORTRAN_ENV\n" } diff --git a/src/docs/COMPILER_VERSION.json b/src/docs/COMPILER_VERSION.json index 9d6a1ced..24e41d1e 100644 --- a/src/docs/COMPILER_VERSION.json +++ b/src/docs/COMPILER_VERSION.json @@ -1,4 +1,4 @@ { "keyword": "COMPILER_VERSION", - "docstr": "`COMPILER_VERSION` — Compiler version string\n\n### Description\n`COMPILER_VERSION` returns a string with the name and the\nversion of the compiler.\n\n\n\n### Syntax\n`STR = COMPILER_VERSION()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the name of the compiler and its version number.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_OPTIONS, ISO_FORTRAN_ENV\n" + "docstr": "`COMPILER_VERSION` — Compiler version string\n\n### Description\n`COMPILER_VERSION` returns a string with the name and the\nversion of the compiler.\n\n\n\n### Syntax\n`STR = COMPILER_VERSION()`\n\n\n### Arguments\nNone.\n\n\n\n### Return value\nThe return value is a default-kind string with system-dependent length. \nIt contains the name of the compiler and its version number.\n\n\n\n### Example\n```\n\n\nuse iso_fortran_env\n\nprint '(4a)', 'This file was compiled by ', &\n\n              compiler_version(), ' using the options ', &\n\n              compiler_options()\n\nend\n\n```\n\n\n\n### Standard\nFortran 2008\n\n\n\n### Class\nInquiry function of the module `ISO_FORTRAN_ENV`\n\n\n### See also\nCOMPILER_OPTIONS, ISO_FORTRAN_ENV\n" } diff --git a/src/docs/C_ASSOCIATED.json b/src/docs/C_ASSOCIATED.json index ff9e998c..640db87e 100644 --- a/src/docs/C_ASSOCIATED.json +++ b/src/docs/C_ASSOCIATED.json @@ -1,4 +1,4 @@ { "keyword": "C_ASSOCIATED", - "docstr": "`C_ASSOCIATED` — Status of a C pointer\n\n### Description\n`C_ASSOCIATED(c_ptr_1[, c_ptr_2])` determines the status of the C pointer\n`c_ptr_1` or if `c_ptr_1` is associated with the target `c_ptr_2`.\n\n\n\n### Syntax\n`RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])`\n\n\n### Arguments\n\n \n. \n\n | `c_ptr_2` | (Optional) Scalar of the same type as `c_ptr_1`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`; it is `.false.` if either\n`c_ptr_1` is a C NULL pointer or if `c_ptr1` and `c_ptr_2`\npoint to different addresses.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_LOC, C_FUNLOC\n" + "docstr": "`C_ASSOCIATED` — Status of a C pointer\n\n### Description\n`C_ASSOCIATED(c_ptr_1[, c_ptr_2])` determines the status of the C pointer\n`c_ptr_1` or if `c_ptr_1` is associated with the target `c_ptr_2`.\n\n\n\n### Syntax\n`RESULT = C_ASSOCIATED(c_ptr_1[, c_ptr_2])`\n\n\n### Arguments\n\n \n. \n\n | `c_ptr_2` | (Optional) Scalar of the same type as `c_ptr_1`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `LOGICAL`; it is `.false.` if either\n`c_ptr_1` is a C NULL pointer or if `c_ptr1` and `c_ptr_2`\npoint to different addresses.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_LOC, C_FUNLOC\n" } diff --git a/src/docs/C_LOC.json b/src/docs/C_LOC.json index a2baafaf..41d13f79 100644 --- a/src/docs/C_LOC.json +++ b/src/docs/C_LOC.json @@ -1,4 +1,4 @@ { "keyword": "C_LOC", - "docstr": "`C_LOC` — Obtain the C address of an object\n\n### Description\n`C_LOC(X)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Shall have either the POINTER or TARGET attribute. It shall not be a coindexed object. It shall either be a variable with interoperable type and kind type parameters, or be a scalar, nonpolymorphic variable with no length type parameters.\n\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_PTR` and contains the C address\nof the argument.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_FUNLOC, C_F_POINTER, C_F_PROCPOINTER\n" + "docstr": "`C_LOC` — Obtain the C address of an object\n\n### Description\n`C_LOC(X)` determines the C address of the argument.\n\n\n\n### Syntax\n`RESULT = C_LOC(X)`\n\n\n### Arguments\n\n \n | `X` | Shall have either the POINTER or TARGET attribute. It shall not be a coindexed object. It shall either be a variable with interoperable type and kind type parameters, or be a scalar, nonpolymorphic variable with no length type parameters.\n\n\n\n\n\n\n\n### Return value\nThe return value is of type `C_PTR` and contains the C address\nof the argument.\n\n\n\n### Example\n```\n\n\nsubroutine association_test(a,b)\n\n  use iso_c_binding, only: c_associated, c_loc, c_ptr\n\n  implicit none\n\n  real, pointer :: a\n\n  type(c_ptr) :: b\n\n  if(c_associated(b, c_loc(a))) &\n\n     stop 'b and a do not point to same target'\n\nend subroutine association_test\n\n```\n\n\n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nInquiry function\n\n\n\n### See also\nC_ASSOCIATED, C_FUNLOC, C_F_POINTER, C_F_PROCPOINTER\n" } diff --git a/src/docs/EPSILON.json b/src/docs/EPSILON.json index 17c5c4f5..4218905d 100644 --- a/src/docs/EPSILON.json +++ b/src/docs/EPSILON.json @@ -1,4 +1,4 @@ { "keyword": "EPSILON", - "docstr": "`EPSILON` — Epsilon function\n\n### Description\n`EPSILON(X)` returns the smallest number `E` of the same kind\nas `X` such that 1 + E > 1.\n\n\n\n### Syntax\n`RESULT = EPSILON(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of same type as the argument.\n\n\n\n### Example\n```\n\n\nprogram test_epsilon\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, EPSILON(x)\n\n    print *, EPSILON(y)\n\nend program test_epsilon\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" + "docstr": "`EPSILON` — Epsilon function\n\n### Description\n`EPSILON(X)` returns the smallest number `E` of the same kind\nas `X` such that 1 + E > 1.\n\n\n\n### Syntax\n`RESULT = EPSILON(X)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of same type as the argument.\n\n\n\n### Example\n```\n\n\nprogram test_epsilon\n\n    real :: x = 3.143\n\n    real(8) :: y = 2.33\n\n    print *, EPSILON(x)\n\n    print *, EPSILON(y)\n\nend program test_epsilon\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nInquiry function\n\n\n" } diff --git a/src/docs/EVENT_QUERY.json b/src/docs/EVENT_QUERY.json index d76e9996..e83405e5 100644 --- a/src/docs/EVENT_QUERY.json +++ b/src/docs/EVENT_QUERY.json @@ -1,4 +1,4 @@ { "keyword": "EVENT_QUERY", - "docstr": "`EVENT_QUERY` — Query whether a coarray event has occurred\n\n### Description\n`EVENT_QUERY` assignes the number of events to `COUNT` which have been\nposted to the `EVENT` variable and not yet been removed by calling\n`EVENT WAIT`. When `STAT` is present and the invokation was successful,\nit is assigned the value 0. If it is present and the invokation has failed,\nit is assigned a positive value and `COUNT` is assigned the value -1.\n\n\n\n### Syntax\n`CALL EVENT_QUERY (EVENT, COUNT [, STAT])`\n\n\n### Arguments\n\n \n,\ndefined in `ISO_FORTRAN_ENV`; shall not be coindexed. \n\n | `COUNT` | (intent(out))Scalar integer with at least the\nprecision of default integer. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  implicit none\n\n  type(event_type) :: event_value_has_been_set[*]\n\n  integer :: cnt\n\n  if (this_image() == 1) then\n\n    call event_query (event_value_has_been_set, cnt)\n\n    if (cnt > 0) write(*,*) \"Value has been set\"\n\n  elseif (this_image() == 2) then\n\n    event post (event_value_has_been_set[1])\n\n  end if\n\nend program atomic\n\n```\n\n \n\n### Standard\nTS 18508 or later\n\n\n\n### Class\n subroutine\n\n\n" + "docstr": "`EVENT_QUERY` — Query whether a coarray event has occurred\n\n### Description\n`EVENT_QUERY` assignes the number of events to `COUNT` which have been\nposted to the `EVENT` variable and not yet been removed by calling\n`EVENT WAIT`. When `STAT` is present and the invokation was successful,\nit is assigned the value 0. If it is present and the invokation has failed,\nit is assigned a positive value and `COUNT` is assigned the value -1.\n\n\n\n### Syntax\n`CALL EVENT_QUERY (EVENT, COUNT [, STAT])`\n\n\n### Arguments\n\n \n,\ndefined in `ISO_FORTRAN_ENV`; shall not be coindexed. \n\n | `COUNT` | (intent(out))Scalar integer with at least the\nprecision of default integer. \n\n | `STAT` | (optional) Scalar default-kind integer variable.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram atomic\n\n  use iso_fortran_env\n\n  implicit none\n\n  type(event_type) :: event_value_has_been_set[*]\n\n  integer :: cnt\n\n  if (this_image() == 1) then\n\n    call event_query (event_value_has_been_set, cnt)\n\n    if (cnt > 0) write(*,*) \"Value has been set\"\n\n  elseif (this_image() == 2) then\n\n    event post (event_value_has_been_set[1])\n\n  end if\n\nend program atomic\n\n```\n\n \n\n### Standard\nTS 18508 or later\n\n\n\n### Class\n subroutine\n\n\n" } diff --git a/src/docs/FGET.json b/src/docs/FGET.json index 68747407..1fda27eb 100644 --- a/src/docs/FGET.json +++ b/src/docs/FGET.json @@ -1,4 +1,4 @@ { "keyword": "FGET", - "docstr": "`FGET` — Read a single character in stream mode from stdin\n\n### Description\nRead a single character in stream mode from stdin by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGET(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file, and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fget\n\n  INTEGER, PARAMETER :: strlen = 100\n\n  INTEGER :: status, i = 1\n\n  CHARACTER(len=strlen) :: str = \"\"\n\n\n  WRITE (*,*) 'Enter text:'\n\n  DO\n\n    CALL fget(str(i:i), status)\n\n    if (status /= 0 .OR. i > strlen) exit\n\n    i = i + 1\n\n  END DO\n\n  WRITE (*,*) TRIM(str)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGETC, FPUT, FPUTC\n" + "docstr": "`FGET` — Read a single character in stream mode from stdin\n\n### Description\nRead a single character in stream mode from stdin by bypassing normal\nformatted output. Stream I/O should not be mixed with normal record-oriented\n(formatted or unformatted) I/O on the same unit; the results are unpredictable.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n \n\nNote that the `FGET` intrinsic is provided for backwards compatibility with\n*g77*. GNU Fortran provides the Fortran 2003 Stream facility. \nProgrammers should consider the use of new stream IO feature in new code\nfor future portability. See also Fortran 2003 status.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = FGET(C)`
\n\n\n\n\n\n### Arguments\n\n \n and of default\nkind. \n\n | `STATUS` | (Optional) status flag of type `INTEGER`. \nReturns 0 on success, -1 on end-of-file, and a system specific positive\nerror code otherwise.\n\n\n\n\n\n\n### Example\n```\n\n\nPROGRAM test_fget\n\n  INTEGER, PARAMETER :: strlen = 100\n\n  INTEGER :: status, i = 1\n\n  CHARACTER(len=strlen) :: str = \"\"\n\n\n  WRITE (*,*) 'Enter text:'\n\n  DO\n\n    CALL fget(str(i:i), status)\n\n    if (status /= 0 .OR. i > strlen) exit\n\n    i = i + 1\n\n  END DO\n\n  WRITE (*,*) TRIM(str)\n\nEND PROGRAM\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n\n### See also\nFGETC, FPUT, FPUTC\n" } diff --git a/src/docs/INT.json b/src/docs/INT.json index f5d6e80e..34562eb4 100644 --- a/src/docs/INT.json +++ b/src/docs/INT.json @@ -1,4 +1,4 @@ { "keyword": "INT", - "docstr": "`INT` — Convert to integer type\n\n### Description\nConvert to integer type\n\n\n\n### Syntax\n`RESULT = INT(A [, KIND))`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `INTEGER` variable or array under\nthe following rules:\n\n
\n**(A)** If `A` is of type `INTEGER`, `INT(A) = A`\n**(B)** If `A` is of type `REAL` and |A| < 1, `INT(A)`equals `0`. If |A| \\geq 1, then `INT(A)` is the integer\nwhose magnitude is the largest integer that does not exceed the magnitude\nof `A` and whose sign is the same as the sign of `A`. \n\n**(C)** If `A` is of type `COMPLEX`, rule B is applied to the real part of `A`. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_int\n\n  integer :: i = 42\n\n  complex :: z = (-3.7, 1.0)\n\n  print *, int(i)\n\n  print *, int(z), int(z,8)\n\nend program\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `INT(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IFIX(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IDINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr": "`INT` — Convert to integer type\n\n### Description\nConvert to integer type\n\n\n\n### Syntax\n`RESULT = INT(A [, KIND))`\n\n\n### Arguments\n\n \n,\n`REAL`, or `COMPLEX`. \n\n | `KIND` | (Optional) An `INTEGER` initialization\nexpression indicating the kind parameter of the result.\n\n\n\n\n\n\n### Return value\nThese functions return a `INTEGER` variable or array under\nthe following rules:\n\n
\n**(A)** If `A` is of type `INTEGER`, `INT(A) = A`\n**(B)** If `A` is of type `REAL` and |A| < 1, `INT(A)`equals `0`. If |A| \\geq 1, then `INT(A)` is the integer\nwhose magnitude is the largest integer that does not exceed the magnitude\nof `A` and whose sign is the same as the sign of `A`. \n\n**(C)** If `A` is of type `COMPLEX`, rule B is applied to the real part of `A`. \n\n
\n\n\n\n### Example\n```\n\n\nprogram test_int\n\n  integer :: i = 42\n\n  complex :: z = (-3.7, 1.0)\n\n  print *, int(i)\n\n  print *, int(z), int(z,8)\n\nend program\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `INT(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IFIX(A)` | `REAL(4) A` | `INTEGER` | Fortran 77 and later\n\n | `IDINT(A)` | `REAL(8) A` | `INTEGER` | Fortran 77 and later\n\n\n\n \n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } diff --git a/src/docs/LGE.json b/src/docs/LGE.json index fb023ff2..8ee1bb38 100644 --- a/src/docs/LGE.json +++ b/src/docs/LGE.json @@ -1,4 +1,4 @@ { "keyword": "LGE", - "docstr": "`LGE` — Lexical greater than or equal\n\n### Description\nDetermines whether one string is lexically greater than or equal to\nanother string, where the two strings are interpreted as containing\nASCII character codes. If the String A and String B are not the same\nlength, the shorter is compared as if spaces were appended to it to form\na value that has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LGE(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A >= STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGE(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGT, LLE, LLT\n" + "docstr": "`LGE` — Lexical greater than or equal\n\n### Description\nDetermines whether one string is lexically greater than or equal to\nanother string, where the two strings are interpreted as containing\nASCII character codes. If the String A and String B are not the same\nlength, the shorter is compared as if spaces were appended to it to form\na value that has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LGE(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A >= STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGE(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGT, LLE, LLT\n" } diff --git a/src/docs/LGT.json b/src/docs/LGT.json index a73911b2..354dc05b 100644 --- a/src/docs/LGT.json +++ b/src/docs/LGT.json @@ -1,4 +1,4 @@ { "keyword": "LGT", - "docstr": "`LGT` — Lexical greater than\n\n### Description\nDetermines whether one string is lexically greater than another string,\nwhere the two strings are interpreted as containing ASCII character\ncodes. If the String A and String B are not the same length, the\nshorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LGT(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A > STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGT(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LLE, LLT\n" + "docstr": "`LGT` — Lexical greater than\n\n### Description\nDetermines whether one string is lexically greater than another string,\nwhere the two strings are interpreted as containing ASCII character\ncodes. If the String A and String B are not the same length, the\nshorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LGT(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A > STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LGT(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LLE, LLT\n" } diff --git a/src/docs/LLE.json b/src/docs/LLE.json index efbe5316..36e5b367 100644 --- a/src/docs/LLE.json +++ b/src/docs/LLE.json @@ -1,4 +1,4 @@ { "keyword": "LLE", - "docstr": "`LLE` — Lexical less than or equal\n\n### Description\nDetermines whether one string is lexically less than or equal to another\nstring, where the two strings are interpreted as containing ASCII\ncharacter codes. If the String A and String B are not the same length,\nthe shorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LLE(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A <= STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LLE(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LGT, LLT\n" + "docstr": "`LLE` — Lexical less than or equal\n\n### Description\nDetermines whether one string is lexically less than or equal to another\nstring, where the two strings are interpreted as containing ASCII\ncharacter codes. If the String A and String B are not the same length,\nthe shorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LLE(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A <= STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LLE(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LGT, LLT\n" } diff --git a/src/docs/LLT.json b/src/docs/LLT.json index f4da7198..1b2a40c4 100644 --- a/src/docs/LLT.json +++ b/src/docs/LLT.json @@ -1,4 +1,4 @@ { "keyword": "LLT", - "docstr": "`LLT` — Lexical less than\n\n### Description\nDetermines whether one string is lexically less than another string,\nwhere the two strings are interpreted as containing ASCII character\ncodes. If the String A and String B are not the same length, the\nshorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LLT(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A < STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LLT(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LGT, LLE\n" + "docstr": "`LLT` — Lexical less than\n\n### Description\nDetermines whether one string is lexically less than another string,\nwhere the two strings are interpreted as containing ASCII character\ncodes. If the String A and String B are not the same length, the\nshorter is compared as if spaces were appended to it to form a value\nthat has the same length as the longer.\n\n \nIn general, the lexical comparison intrinsics `LGE`, `LGT`,\n`LLE`, and `LLT` differ from the corresponding intrinsic\noperators `.GE.`, `.GT.`, `.LE.`, and `.LT.`, in\nthat the latter use the processor's character ordering (which is not\nASCII on some targets), whereas the former always use the ASCII\nordering.\n\n\n\n\n### Syntax\n`RESULT = LLT(STRING_A, STRING_B)`\n\n\n### Arguments\n\n \n type. \n\n | `STRING_B` | Shall be of default `CHARACTER` type.\n\n\n\n\n\n\n### Return value\nReturns `.TRUE.` if `STRING_A < STRING_B`, and `.FALSE.`otherwise, based on the ASCII ordering.\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `LLT(STRING_A, STRING_B)` | `CHARACTER` | `LOGICAL` | Fortran 77 and later\n\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n\n### See also\nLGE, LGT, LLE\n" } diff --git a/src/docs/LOG.json b/src/docs/LOG.json index d0ca63c9..e67fea82 100644 --- a/src/docs/LOG.json +++ b/src/docs/LOG.json @@ -1,4 +1,4 @@ { "keyword": "LOG", - "docstr": "`LOG` — Natural logarithm function\n\n### Description\n`LOG(X)` computes the natural logarithm of `X`, i.e. the\nlogarithm to the base e.\n\n\n\n### Syntax\n`RESULT = LOG(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`. \nIf `X` is `COMPLEX`, the imaginary part \\omega is in the range\n-\\pi < \\omega \\leq \\pi.\n\n\n\n### Example\n```\n\n\nprogram test_log\n\n  real(8) :: x = 2.7182818284590451_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = log(x) ! will yield (approximately) 1\n\n  z = log(z)\n\nend program test_log\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG(X)` | `REAL(4) X` | `REAL(4)` | f95, gnu\n\n | `DLOG(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CLOG(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" + "docstr": "`LOG` — Natural logarithm function\n\n### Description\n`LOG(X)` computes the natural logarithm of `X`, i.e. the\nlogarithm to the base e.\n\n\n\n### Syntax\n`RESULT = LOG(X)`\n\n\n### Arguments\n\n \n or\n`COMPLEX`.\n\n\n\n\n\n\n### Return value\nThe return value is of type `REAL` or `COMPLEX`. \nThe kind type parameter is the same as `X`. \nIf `X` is `COMPLEX`, the imaginary part \\omega is in the range\n-\\pi < \\omega \\leq \\pi.\n\n\n\n### Example\n```\n\n\nprogram test_log\n\n  real(8) :: x = 2.7182818284590451_8\n\n  complex :: z = (1.0, 2.0)\n\n  x = log(x) ! will yield (approximately) 1\n\n  z = log(z)\n\nend program test_log\n\n```\n\n\n\n### Specific names\n\n \n | Name | Argument | Return type | Standard\n\n | `ALOG(X)` | `REAL(4) X` | `REAL(4)` | f95, gnu\n\n | `DLOG(X)` | `REAL(8) X` | `REAL(8)` | f95, gnu\n\n | `CLOG(X)` | `COMPLEX(4) X` | `COMPLEX(4)` | f95, gnu\n\n | `ZLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n | `CDLOG(X)` | `COMPLEX(8) X` | `COMPLEX(8)` | f95, gnu\n\n\n\n\n\n### Standard\nFortran 77 and later\n\n\n\n### Class\nElemental function\n\n\n" } diff --git a/src/docs/NULL.json b/src/docs/NULL.json index 91d832cd..07f8b539 100644 --- a/src/docs/NULL.json +++ b/src/docs/NULL.json @@ -1,4 +1,4 @@ { "keyword": "NULL", - "docstr": "`NULL` — Function that returns an disassociated pointer\n\n### Description\nReturns a disassociated pointer.\n\n \nIf `MOLD` is present, a disassociated pointer of the same type is\nreturned, otherwise the type is determined by context.\n\n \n\nIn Fortran 95, `MOLD` is optional. Please note that Fortran 2003\nincludes cases where it is required.\n\n\n\n\n### Syntax\n`PTR => NULL([MOLD])`\n\n\n### Arguments\n\n \n | `MOLD` | (Optional) shall be a pointer of any association\nstatus and of any type.\n\n\n\n\n\n\n### Return value\nA disassociated pointer.\n\n\n\n### Example\n```\n\n\nREAL, POINTER, DIMENSION(:) :: VEC => NULL ()\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nASSOCIATED\n" + "docstr": "`NULL` — Function that returns an disassociated pointer\n\n### Description\nReturns a disassociated pointer.\n\n \nIf `MOLD` is present, a disassociated pointer of the same type is\nreturned, otherwise the type is determined by context.\n\n \n\nIn Fortran 95, `MOLD` is optional. Please note that Fortran 2003\nincludes cases where it is required.\n\n\n\n\n### Syntax\n`PTR => NULL([MOLD])`\n\n\n### Arguments\n\n \n | `MOLD` | (Optional) shall be a pointer of any association\nstatus and of any type.\n\n\n\n\n\n\n### Return value\nA disassociated pointer.\n\n\n\n### Example\n```\n\n\nREAL, POINTER, DIMENSION(:) :: VEC => NULL ()\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nASSOCIATED\n" } diff --git a/src/docs/RANDOM_NUMBER.json b/src/docs/RANDOM_NUMBER.json index 4e65e7cf..bf60aba0 100644 --- a/src/docs/RANDOM_NUMBER.json +++ b/src/docs/RANDOM_NUMBER.json @@ -1,4 +1,4 @@ { "keyword": "RANDOM_NUMBER", - "docstr": "`RANDOM_NUMBER` — Pseudo-random number\n\n### Description\nReturns a single pseudorandom number or an array of pseudorandom numbers\nfrom the uniform distribution over the range 0 \\leq x < 1.\n\n \nThe runtime-library implements George Marsaglia's KISS (Keep It Simple\nStupid) random number generator (RNG). This RNG combines:\n \n
    \n
  1. The congruential generator x(n) = 69069 \\cdot x(n-1) + 1327217885\nwith a period of 2^32,\n
  2. A 3-shift shift-register generator with a period of 2^32 - 1,\n
  3. Two 16-bit multiply-with-carry generators with a period of\n597273182964842497 > 2^59.\n
\nThe overall period exceeds 2^123.\n\n \nPlease note, this RNG is thread safe if used within OpenMP directives,\ni.e., its state will be consistent while called from multiple threads. \nHowever, the KISS generator does not create random numbers in parallel\nfrom multiple sources, but in sequence from a single source. If an\nOpenMP-enabled application heavily relies on random numbers, one should\nconsider employing a dedicated parallel random number generator instead.\n\n\n\n\n### Syntax\n`RANDOM_NUMBER(HARVEST)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_random_number\n\n  REAL :: r(5,5)\n\n  CALL init_random_seed() ! see example of RANDOM_SEED\n\n  CALL RANDOM_NUMBER(r)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_SEED\n" + "docstr": "`RANDOM_NUMBER` — Pseudo-random number\n\n### Description\nReturns a single pseudorandom number or an array of pseudorandom numbers\nfrom the uniform distribution over the range 0 \\leq x < 1.\n\n \nThe runtime-library implements George Marsaglia's KISS (Keep It Simple\nStupid) random number generator (RNG). This RNG combines:\n \n
    \n
  1. The congruential generator x(n) = 69069 \\cdot x(n-1) + 1327217885\nwith a period of 2^32,\n
  2. A 3-shift shift-register generator with a period of 2^32 - 1,\n
  3. Two 16-bit multiply-with-carry generators with a period of\n597273182964842497 > 2^59.\n
\nThe overall period exceeds 2^123.\n\n \nPlease note, this RNG is thread safe if used within OpenMP directives,\ni.e., its state will be consistent while called from multiple threads. \nHowever, the KISS generator does not create random numbers in parallel\nfrom multiple sources, but in sequence from a single source. If an\nOpenMP-enabled application heavily relies on random numbers, one should\nconsider employing a dedicated parallel random number generator instead.\n\n\n\n\n### Syntax\n`RANDOM_NUMBER(HARVEST)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram test_random_number\n\n  REAL :: r(5,5)\n\n  CALL init_random_seed() ! see example of RANDOM_SEED\n\n  CALL RANDOM_NUMBER(r)\n\nend program\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_SEED\n" } diff --git a/src/docs/RANDOM_SEED.json b/src/docs/RANDOM_SEED.json index 5f23756e..9f77f4a3 100644 --- a/src/docs/RANDOM_SEED.json +++ b/src/docs/RANDOM_SEED.json @@ -1,4 +1,4 @@ { "keyword": "RANDOM_SEED", - "docstr": "`RANDOM_SEED` — Initialize a pseudo-random number sequence\n\n### Description\nRestarts or queries the state of the pseudorandom number generator used by\n`RANDOM_NUMBER`.\n\n \nIf `RANDOM_SEED` is called without arguments, it is initialized\nto a default state. The example below shows how to initialize the\nrandom seed with a varying seed in order to ensure a different random\nnumber sequence for each invocation of the program. Note that setting\nany of the seed values to zero should be avoided as it can result in\npoor quality random numbers being generated.\n\n\n\n\n### Syntax\n`CALL RANDOM_SEED([SIZE, PUT, GET])`\n\n\n### Arguments\n\n \n | `SIZE` | (Optional) Shall be a scalar and of type default\n`INTEGER`, with `INTENT(OUT)`. It specifies the minimum size\nof the arrays used with the `PUT` and `GET` arguments. \n\n | `PUT` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(IN)` and the size of\nthe array must be larger than or equal to the number returned by the\n`SIZE` argument. \n\n | `GET` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(OUT)` and the size\nof the array must be larger than or equal to the number returned by\nthe `SIZE` argument.\n\n\n\n\n\n\n### Example\n```\n\n\nsubroutine init_random_seed()\n\n  use iso_fortran_env, only: int64\n\n  implicit none\n\n  integer, allocatable :: seed(:)\n\n  integer :: i, n, un, istat, dt(8), pid\n\n  integer(int64) :: t\n\n\n  call random_seed(size = n)\n\n  allocate(seed(n))\n\n  ! First try if the OS provides a random number generator\n\n  open(newunit=un, file=\"/dev/urandom\", access=\"stream\", &\n\n       form=\"unformatted\", action=\"read\", status=\"old\", iostat=istat)\n\n  if (istat == 0) then\n\n     read(un) seed\n\n     close(un)\n\n  else\n\n     ! Fallback to XOR:ing the current time and pid. The PID is\n\n     ! useful in case one launches multiple instances of the same\n\n     ! program in parallel.\n\n     call system_clock(t)\n\n     if (t == 0) then\n\n        call date_and_time(values=dt)\n\n        t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(3) * 24_int64 * 60 * 60 * 1000 &\n\n             + dt(5) * 60 * 60 * 1000 &\n\n             + dt(6) * 60 * 1000 + dt(7) * 1000 &\n\n             + dt(8)\n\n     end if\n\n     pid = getpid()\n\n     t = ieor(t, int(pid, kind(t)))\n\n     do i = 1, n\n\n        seed(i) = lcg(t)\n\n     end do\n\n  end if\n\n  call random_seed(put=seed)\n\ncontains\n\n  ! This simple PRNG might not be good enough for real work, but is\n\n  ! sufficient for seeding a better PRNG.\n\n  function lcg(s)\n\n    integer :: lcg\n\n    integer(int64) :: s\n\n    if (s == 0) then\n\n       s = 104729\n\n    else\n\n       s = mod(s, 4294967296_int64)\n\n    end if\n\n    s = mod(s * 279470273_int64, 4294967291_int64)\n\n    lcg = int(mod(s, int(huge(0), int64)), kind(0))\n\n  end function lcg\n\nend subroutine init_random_seed\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_NUMBER\n" + "docstr": "`RANDOM_SEED` — Initialize a pseudo-random number sequence\n\n### Description\nRestarts or queries the state of the pseudorandom number generator used by\n`RANDOM_NUMBER`.\n\n \nIf `RANDOM_SEED` is called without arguments, it is initialized\nto a default state. The example below shows how to initialize the\nrandom seed with a varying seed in order to ensure a different random\nnumber sequence for each invocation of the program. Note that setting\nany of the seed values to zero should be avoided as it can result in\npoor quality random numbers being generated.\n\n\n\n\n### Syntax\n`CALL RANDOM_SEED([SIZE, PUT, GET])`\n\n\n### Arguments\n\n \n | `SIZE` | (Optional) Shall be a scalar and of type default\n`INTEGER`, with `INTENT(OUT)`. It specifies the minimum size\nof the arrays used with the `PUT` and `GET` arguments. \n\n | `PUT` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(IN)` and the size of\nthe array must be larger than or equal to the number returned by the\n`SIZE` argument. \n\n | `GET` | (Optional) Shall be an array of type default\n`INTEGER` and rank one. It is `INTENT(OUT)` and the size\nof the array must be larger than or equal to the number returned by\nthe `SIZE` argument.\n\n\n\n\n\n\n### Example\n```\n\n\nsubroutine init_random_seed()\n\n  use iso_fortran_env, only: int64\n\n  implicit none\n\n  integer, allocatable :: seed(:)\n\n  integer :: i, n, un, istat, dt(8), pid\n\n  integer(int64) :: t\n\n\n  call random_seed(size = n)\n\n  allocate(seed(n))\n\n  ! First try if the OS provides a random number generator\n\n  open(newunit=un, file=\"/dev/urandom\", access=\"stream\", &\n\n       form=\"unformatted\", action=\"read\", status=\"old\", iostat=istat)\n\n  if (istat == 0) then\n\n     read(un) seed\n\n     close(un)\n\n  else\n\n     ! Fallback to XOR:ing the current time and pid. The PID is\n\n     ! useful in case one launches multiple instances of the same\n\n     ! program in parallel.\n\n     call system_clock(t)\n\n     if (t == 0) then\n\n        call date_and_time(values=dt)\n\n        t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 &\n\n             + dt(3) * 24_int64 * 60 * 60 * 1000 &\n\n             + dt(5) * 60 * 60 * 1000 &\n\n             + dt(6) * 60 * 1000 + dt(7) * 1000 &\n\n             + dt(8)\n\n     end if\n\n     pid = getpid()\n\n     t = ieor(t, int(pid, kind(t)))\n\n     do i = 1, n\n\n        seed(i) = lcg(t)\n\n     end do\n\n  end if\n\n  call random_seed(put=seed)\n\ncontains\n\n  ! This simple PRNG might not be good enough for real work, but is\n\n  ! sufficient for seeding a better PRNG.\n\n  function lcg(s)\n\n    integer :: lcg\n\n    integer(int64) :: s\n\n    if (s == 0) then\n\n       s = 104729\n\n    else\n\n       s = mod(s, 4294967296_int64)\n\n    end if\n\n    s = mod(s * 279470273_int64, 4294967291_int64)\n\n    lcg = int(mod(s, int(huge(0), int64)), kind(0))\n\n  end function lcg\n\nend subroutine init_random_seed\n\n```\n\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nSubroutine\n\n\n\n### See also\nRANDOM_NUMBER\n" } diff --git a/src/docs/SELECTED_CHAR_KIND.json b/src/docs/SELECTED_CHAR_KIND.json index 3979f794..d6e47064 100644 --- a/src/docs/SELECTED_CHAR_KIND.json +++ b/src/docs/SELECTED_CHAR_KIND.json @@ -1,4 +1,4 @@ { "keyword": "SELECTED_CHAR_KIND", - "docstr": "`SELECTED_CHAR_KIND` — Choose character kind\n\n### Description\n\n`SELECTED_CHAR_KIND(NAME)` returns the kind value for the character\nset named `NAME`, if a character set with such a name is supported,\nor -1 otherwise. Currently, supported character sets include\n“ASCII” and “DEFAULT”, which are equivalent, and “ISO_10646”\n(Universal Character Set, UCS-4) which is commonly known as Unicode.\n\n\n\n### Syntax\n`RESULT = SELECTED_CHAR_KIND(NAME)`\n\n\n### Arguments\n\n \n | `NAME` | Shall be a scalar and of the default character type.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram character_kind\n\n  use iso_fortran_env\n\n  implicit none\n\n  integer, parameter :: ascii = selected_char_kind (\"ascii\")\n\n  integer, parameter :: ucs4 = selected_char_kind ('ISO_10646')\n\n\n  character(kind=ascii, len=26) :: alphabet\n\n  character(kind=ucs4, len=30) :: hello_world\n\n\n  alphabet = ascii_\"abcdefghijklmnopqrstuvwxyz\"\n\n  hello_world = ucs4_'Hello World and Ni Hao -- ' &\n\n                // char (int (z'4F60'), ucs4) &\n\n                // char (int (z'597D'), ucs4)\n\n\n  write (*,*) alphabet\n\n\n  open (output_unit, encoding='UTF-8')\n\n  write (*,*) trim (hello_world)\n\nend program character_kind\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr": "`SELECTED_CHAR_KIND` — Choose character kind\n\n### Description\n\n`SELECTED_CHAR_KIND(NAME)` returns the kind value for the character\nset named `NAME`, if a character set with such a name is supported,\nor -1 otherwise. Currently, supported character sets include\n“ASCII” and “DEFAULT”, which are equivalent, and “ISO_10646”\n(Universal Character Set, UCS-4) which is commonly known as Unicode.\n\n\n\n### Syntax\n`RESULT = SELECTED_CHAR_KIND(NAME)`\n\n\n### Arguments\n\n \n | `NAME` | Shall be a scalar and of the default character type.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram character_kind\n\n  use iso_fortran_env\n\n  implicit none\n\n  integer, parameter :: ascii = selected_char_kind (\"ascii\")\n\n  integer, parameter :: ucs4 = selected_char_kind ('ISO_10646')\n\n\n  character(kind=ascii, len=26) :: alphabet\n\n  character(kind=ucs4, len=30) :: hello_world\n\n\n  alphabet = ascii_\"abcdefghijklmnopqrstuvwxyz\"\n\n  hello_world = ucs4_'Hello World and Ni Hao -- ' &\n\n                // char (int (z'4F60'), ucs4) &\n\n                // char (int (z'597D'), ucs4)\n\n\n  write (*,*) alphabet\n\n\n  open (output_unit, encoding='UTF-8')\n\n  write (*,*) trim (hello_world)\n\nend program character_kind\n\n```\n\n \n\n### Standard\nFortran 2003 and later\n\n\n\n### Class\nTransformational function\n\n\n" } diff --git a/src/docs/SELECTED_INT_KIND.json b/src/docs/SELECTED_INT_KIND.json index dd7c01cd..a312fbf1 100644 --- a/src/docs/SELECTED_INT_KIND.json +++ b/src/docs/SELECTED_INT_KIND.json @@ -1,4 +1,4 @@ { "keyword": "SELECTED_INT_KIND", - "docstr": "`SELECTED_INT_KIND` — Choose integer kind\n\n### Description\n`SELECTED_INT_KIND(R)` return the kind value of the smallest integer\ntype that can represent all values ranging from -10^R (exclusive)\nto 10^R (exclusive). If there is no integer kind that accommodates\nthis range, `SELECTED_INT_KIND` returns -1.\n\n\n\n### Syntax\n`RESULT = SELECTED_INT_KIND(R)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram large_integers\n\n  integer,parameter :: k5 = selected_int_kind(5)\n\n  integer,parameter :: k15 = selected_int_kind(15)\n\n  integer(kind=k5) :: i5\n\n  integer(kind=k15) :: i15\n\n\n  print *, huge(i5), huge(i15)\n\n\n  ! The following inequalities are always true\n\n  print *, huge(i5) >= 10_k5**5-1\n\n  print *, huge(i15) >= 10_k15**15-1\n\nend program large_integers\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" + "docstr": "`SELECTED_INT_KIND` — Choose integer kind\n\n### Description\n`SELECTED_INT_KIND(R)` return the kind value of the smallest integer\ntype that can represent all values ranging from -10^R (exclusive)\nto 10^R (exclusive). If there is no integer kind that accommodates\nthis range, `SELECTED_INT_KIND` returns -1.\n\n\n\n### Syntax\n`RESULT = SELECTED_INT_KIND(R)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Example\n```\n\n\nprogram large_integers\n\n  integer,parameter :: k5 = selected_int_kind(5)\n\n  integer,parameter :: k15 = selected_int_kind(15)\n\n  integer(kind=k5) :: i5\n\n  integer(kind=k15) :: i15\n\n\n  print *, huge(i5), huge(i15)\n\n\n  ! The following inequalities are always true\n\n  print *, huge(i5) >= 10_k5**5-1\n\n  print *, huge(i15) >= 10_k15**15-1\n\nend program large_integers\n\n```\n\n \n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n" } From 2adaa8d62c2e045f9e15dcd28ab409e14be8da1b Mon Sep 17 00:00:00 2001 From: gnikit Date: Sun, 3 Oct 2021 15:53:27 +0100 Subject: [PATCH 20/62] further fixes for internal documentation --- src/docs/CHMOD.json | 2 +- src/docs/MALLOC.json | 2 +- src/docs/PACK.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/docs/CHMOD.json b/src/docs/CHMOD.json index 2c514643..bfc8bebe 100644 --- a/src/docs/CHMOD.json +++ b/src/docs/CHMOD.json @@ -1,4 +1,4 @@ { "keyword": "CHMOD", - "docstr": "`CHMOD` — Change access permissions of files\n\n### Description\n`CHMOD` changes the permissions of a file.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = CHMOD(NAME, MODE)`
\n\n\n\n\n\n### Arguments\n\n \n\n | `NAME` | Scalar `CHARACTER` of default kind with the\nfile name. Trailing blanks are ignored unless the character\n`achar(0)` is present, then all characters up to and excluding\n`achar(0)` are used as the file name.\n\n \n\n\n | `MODE` | Scalar `CHARACTER` of default kind giving the\nfile permission. `MODE` uses the same syntax as the `chmod` utility\nas defined by the POSIX standard. The argument shall either be a string of\na nonnegative octal number or a symbolic mode.\n\n \n\n\n | `STATUS` | (optional) scalar `INTEGER`, which is\n`0` on success and nonzero otherwise.\n\n\n\n\n\n\n### Return value\nIn either syntax, `STATUS` is set to `0` on success and nonzero\notherwise.\n\n\n\n### Example\n`CHMOD` as subroutine\n ```\n\n\nprogram chmod_test\n\n  implicit none\n\n  integer :: status\n\n  call chmod('test.dat','u+x',status)\n\n  print *, 'Status: ', status\n\nend program chmod_test\n\n```\n\n \n`CHMOD` as function:\n \n
          program chmod_test\n            implicit none\n            integer :: status\n            status = chmod('test.dat','u+x')\n            print *, 'Status: ', status\n          end program chmod_test\n
\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" + "docstr": "`CHMOD` — Change access permissions of files\n\n### Description\n`CHMOD` changes the permissions of a file.\n\n \nThis intrinsic is provided in both subroutine and function forms; however,\nonly one form can be used in any given program unit.\n\n\n\n\n### Syntax\n\n \n\n\n | `STATUS = CHMOD(NAME, MODE)`
\n\n\n\n\n\n### Arguments\n\n \n\n | `NAME` | Scalar `CHARACTER` of default kind with the\nfile name. Trailing blanks are ignored unless the character\n`achar(0)` is present, then all characters up to and excluding\n`achar(0)` are used as the file name.\n\n \n\n\n | `MODE` | Scalar `CHARACTER` of default kind giving the\nfile permission. `MODE` uses the same syntax as the `chmod` utility\nas defined by the POSIX standard. The argument shall either be a string of\na nonnegative octal number or a symbolic mode.\n\n \n\n\n | `STATUS` | (optional) scalar `INTEGER`, which is\n`0` on success and nonzero otherwise.\n\n\n\n\n\n\n### Return value\nIn either syntax, `STATUS` is set to `0` on success and nonzero\notherwise.\n\n\n\n### Example\n`CHMOD` as subroutine\n```\n\n\nprogram chmod_test\n\n  implicit none\n\n  integer :: status\n\n  call chmod('test.dat','u+x',status)\n\n  print *, 'Status: ', status\n\nend program chmod_test\n\n```\n\n \n`CHMOD` as function:\n \n
          program chmod_test\n            implicit none\n            integer :: status\n            status = chmod('test.dat','u+x')\n            print *, 'Status: ', status\n          end program chmod_test\n
\n \n\n### Standard\nGNU extension\n\n\n\n### Class\nSubroutine, function\n\n\n" } diff --git a/src/docs/MALLOC.json b/src/docs/MALLOC.json index 89acab3c..d9265ef6 100644 --- a/src/docs/MALLOC.json +++ b/src/docs/MALLOC.json @@ -1,4 +1,4 @@ { "keyword": "MALLOC", - "docstr": "`MALLOC` — Allocate dynamic memory\n\n### Description\n`MALLOC(SIZE)` allocates `SIZE` bytes of dynamic memory and\nreturns the address of the allocated memory. The `MALLOC` intrinsic\nis an extension intended to be used with Cray pointers, and is provided\nin GNU Fortran to allow the user to compile legacy code. For new code\nusing Fortran 95 pointers, the memory allocation intrinsic is\n`ALLOCATE`.\n\n\n\n### Syntax\n`PTR = MALLOC(SIZE)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(K)`, with `K` such that\nvariables of type `INTEGER(K)` have the same size as\nC pointers (`sizeof(void *)`).\n\n\n\n### Example\nThe following example demonstrates the use of `MALLOC` and\n`FREE` with Cray pointers.\n\n ```\n\n\nprogram test_malloc\n\n  implicit none\n\n  integer i\n\n  real*8 x(*), z\n\n  pointer(ptr_x,x)\n\n\n  ptr_x = malloc(20*8)\n\n  do i = 1, 20\n\n    x(i) = sqrt(1.0d0 / i)\n\n  end do\n\n  z = 0\n\n  do i = 1, 20\n\n    z = z + x(i)\n\n    print *, z\n\n  end do\n\n  call free(ptr_x)\n\nend program test_malloc\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFREE\n" + "docstr": "`MALLOC` — Allocate dynamic memory\n\n### Description\n`MALLOC(SIZE)` allocates `SIZE` bytes of dynamic memory and\nreturns the address of the allocated memory. The `MALLOC` intrinsic\nis an extension intended to be used with Cray pointers, and is provided\nin GNU Fortran to allow the user to compile legacy code. For new code\nusing Fortran 95 pointers, the memory allocation intrinsic is\n`ALLOCATE`.\n\n\n\n### Syntax\n`PTR = MALLOC(SIZE)`\n\n\n### Arguments\n\n \n.\n\n\n\n\n\n\n### Return value\nThe return value is of type `INTEGER(K)`, with `K` such that\nvariables of type `INTEGER(K)` have the same size as\nC pointers (`sizeof(void *)`).\n\n\n\n### Example\nThe following example demonstrates the use of `MALLOC` and\n`FREE` with Cray pointers.\n\n```\n\n\nprogram test_malloc\n\n  implicit none\n\n  integer i\n\n  real*8 x(*), z\n\n  pointer(ptr_x,x)\n\n\n  ptr_x = malloc(20*8)\n\n  do i = 1, 20\n\n    x(i) = sqrt(1.0d0 / i)\n\n  end do\n\n  z = 0\n\n  do i = 1, 20\n\n    z = z + x(i)\n\n    print *, z\n\n  end do\n\n  call free(ptr_x)\n\nend program test_malloc\n\n```\n\n\n\n### Standard\nGNU extension\n\n\n\n### Class\nFunction\n\n\n\n### See also\nFREE\n" } diff --git a/src/docs/PACK.json b/src/docs/PACK.json index 6a405f1f..08287b2d 100644 --- a/src/docs/PACK.json +++ b/src/docs/PACK.json @@ -1,4 +1,4 @@ { "keyword": "PACK", - "docstr": "`PACK` — Pack an array into an array of rank one\n\n### Description\nStores the elements of `ARRAY` in an array of rank one.\n\n \nThe beginning of the resulting array is made up of elements whose `MASK`\nequals `TRUE`. Afterwards, positions are filled with elements taken from\n`VECTOR`.\n\n\n\n\n### Syntax\n`RESULT = PACK(ARRAY, MASK[,VECTOR])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. \n\n | `MASK` | Shall be an array of type `LOGICAL` and\nof the same size as `ARRAY`. Alternatively, it may be a `LOGICAL`scalar. \n\n | `VECTOR` | (Optional) shall be an array of the same type\nas `ARRAY` and of rank one. If present, the number of elements in\n`VECTOR` shall be equal to or greater than the number of true elements\nin `MASK`. If `MASK` is scalar, the number of elements in\n`VECTOR` shall be equal to or greater than the number of elements in\n`ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is an array of rank one and the same type as that of `ARRAY`. \nIf `VECTOR` is present, the result size is that of `VECTOR`, the\nnumber of `TRUE` values in `MASK` otherwise.\n\n\n\n### Example\nGathering nonzero elements from an array:\n ```\n\n\nPROGRAM test_pack_1\n\n  INTEGER :: m(6)\n\n  m = (/ 1, 0, 0, 0, 5, 0 /)\n\n  WRITE(*, FMT=\"(6(I0, ' '))\") pack(m, m /= 0) ! \"1 5\"\n\nEND PROGRAM\n\n```\n\n \nGathering nonzero elements from an array and appending elements from `VECTOR`:\n \n
          PROGRAM test_pack_2\n            INTEGER :: m(4)\n            m = (/ 1, 0, 0, 2 /)\n            WRITE(*, FMT=\"(4(I0, ' '))\") pack(m, m /= 0, (/ 0, 0, 3, 4 /))  ! \"1 2 3 4\"\n          END PROGRAM\n
\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nUNPACK\n" + "docstr": "`PACK` — Pack an array into an array of rank one\n\n### Description\nStores the elements of `ARRAY` in an array of rank one.\n\n \nThe beginning of the resulting array is made up of elements whose `MASK`\nequals `TRUE`. Afterwards, positions are filled with elements taken from\n`VECTOR`.\n\n\n\n\n### Syntax\n`RESULT = PACK(ARRAY, MASK[,VECTOR])`\n\n\n### Arguments\n\n \n | `ARRAY` | Shall be an array of any type. \n\n | `MASK` | Shall be an array of type `LOGICAL` and\nof the same size as `ARRAY`. Alternatively, it may be a `LOGICAL`scalar. \n\n | `VECTOR` | (Optional) shall be an array of the same type\nas `ARRAY` and of rank one. If present, the number of elements in\n`VECTOR` shall be equal to or greater than the number of true elements\nin `MASK`. If `MASK` is scalar, the number of elements in\n`VECTOR` shall be equal to or greater than the number of elements in\n`ARRAY`.\n\n\n\n\n\n\n### Return value\nThe result is an array of rank one and the same type as that of `ARRAY`. \nIf `VECTOR` is present, the result size is that of `VECTOR`, the\nnumber of `TRUE` values in `MASK` otherwise.\n\n\n\n### Example\nGathering nonzero elements from an array:\n```\n\n\nPROGRAM test_pack_1\n\n  INTEGER :: m(6)\n\n  m = (/ 1, 0, 0, 0, 5, 0 /)\n\n  WRITE(*, FMT=\"(6(I0, ' '))\") pack(m, m /= 0) ! \"1 5\"\n\nEND PROGRAM\n\n```\n\n \nGathering nonzero elements from an array and appending elements from `VECTOR`:\n \n
          PROGRAM test_pack_2\n            INTEGER :: m(4)\n            m = (/ 1, 0, 0, 2 /)\n            WRITE(*, FMT=\"(4(I0, ' '))\") pack(m, m /= 0, (/ 0, 0, 3, 4 /))  ! \"1 2 3 4\"\n          END PROGRAM\n
\n\n\n### Standard\nFortran 95 and later\n\n\n\n### Class\nTransformational function\n\n\n\n### See also\nUNPACK\n" } From f1c2aa2bde691880ba1662fff8aafc704fdd519c Mon Sep 17 00:00:00 2001 From: gnikit Date: Sun, 3 Oct 2021 17:18:34 +0100 Subject: [PATCH 21/62] Adds autoclosing for strings --- language-configuration.json | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/language-configuration.json b/language-configuration.json index ff54a94e..2e9142ee 100644 --- a/language-configuration.json +++ b/language-configuration.json @@ -28,7 +28,23 @@ { "open": "(/", "close": "/" - } + }, + { + "open": "'", + "close": "'", + "notIn": [ + "string", + "comment" + ] + }, + { + "open": "\"", + "close": "\"", + "notIn": [ + "string", + "comment" + ] + }, ], "surroundingPairs": [ [ From 23e643733e2f67c482d0199bb1beb0b95c83dba5 Mon Sep 17 00:00:00 2001 From: gnikit Date: Sun, 3 Oct 2021 17:24:51 +0100 Subject: [PATCH 22/62] Updates Fortran extensino and adds .pFUnit support Fixes #185. --- package.json | 5 ++++- syntaxes/fortran_free-form.tmLanguage.json | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a55d9c5c..ba201805 100644 --- a/package.json +++ b/package.json @@ -58,10 +58,13 @@ ".F90", ".f95", ".F95", + ".f03", + ".F03", ".f08", ".F08", ".f18", - ".F18" + ".F18", + ".pf" ], "configuration": "./language-configuration.json" }, diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 6813f37f..86bb26e2 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -12,7 +12,8 @@ "f08", "F08", "f18", - "F18" + "F18", + ".pf" ], "firstLineMatch": "(?i)-[*]- mode: fortran free -[*]-", "injections": { From 25eb5bbfa303dab2ec3147aa927fb86ac02a453c Mon Sep 17 00:00:00 2001 From: gnikit Date: Sun, 3 Oct 2021 18:03:05 +0100 Subject: [PATCH 23/62] Updates CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d995bbe1..854278da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ([#252](https://github.com/krvajal/vscode-fortran-support/pull/252)) - Adds workflow for automatic publishing to VS Marketplace ([#237](https://github.com/krvajal/vscode-fortran-support/issues/237)) +- Adds basic support for pFUnit (.pf) highlighting + ([#185](https://github.com/krvajal/vscode-fortran-support/issues/185)) ## [2.3.0] From 6537b388a94b41533c982cafb15bbccc0507ed64 Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 6 Oct 2021 03:44:32 +0100 Subject: [PATCH 24/62] Fixes preprocessor syntax highlighting The line continuation operator is a bit too aggressive so instead of adding lookaheads for every case where we don't need to apply it we have excluded the preprocessor directives from the lint cont. The original .cson highlighting does the same, see: https://github.com/dparkins/language-fortran/blob/master/grammars/fortran%20-%20free%20form.cson for injections see: https://gist.github.com/Aerijo/b8c82d647db783187804e86fa0a604a1 Fixes Preprocessor statements in line continuations break syntax highlighting #248 Fixes Erroneous syntax highlighting for preprocessor conditionals in derived types #249 --- syntaxes/fortran_free-form.tmLanguage.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 86bb26e2..4fec12dc 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -17,10 +17,13 @@ ], "firstLineMatch": "(?i)-[*]- mode: fortran free -[*]-", "injections": { - "source.fortran.free - ( string | comment )": { + "source.fortran.free - ( string | comment | source.preprocessor )": { "patterns": [ { "include": "#line-continuation-operator" + }, + { + "include": "#preprocessor" } ] }, @@ -121,6 +124,7 @@ ], "repository": { "preprocessor": { + "name": "source.preprocessor", "begin": "^\\s*(#)", "beginCaptures": { "1": { From b5342a5399f33934f665da3e120e35852d831ec7 Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 6 Oct 2021 15:16:03 +0100 Subject: [PATCH 25/62] Preprocessor assignment i.e. = is not a thing The regex was doing a negative look ahead and lookbehind for = but using = is illegal code and will not compile. e.g. #define VAR = 1 Also I went ahead and changed the patterns #define can match to be both string literals and numerical values #define VAR 1 is legal. --- syntaxes/fortran_free-form.tmLanguage.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 4fec12dc..2c0f2778 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -328,9 +328,6 @@ }, "preprocessor-operators": { "patterns": [ - { - "include": "#preprocessor-assignment-operator" - }, { "include": "#preprocessor-line-continuation-operator" }, @@ -388,10 +385,7 @@ "include": "#preprocessor-comments" }, { - "include": "#preprocessor-string-constant" - }, - { - "include": "#preprocessor-assignment-operator" + "include": "#preprocessor-constants" }, { "include": "#preprocessor-line-continuation-operator" From 1086fe544a5128bc4b8bfc10b4d95c370f11f764 Mon Sep 17 00:00:00 2001 From: gnikit Date: Thu, 7 Oct 2021 16:10:49 +0100 Subject: [PATCH 26/62] Preprocessor operator fixes - Adds support for all Fortran supported logical preprocessor operators - Adds support for arithmetic operators - Adds support for C++ preprocessor integers - Changes the syntax highlighting of preprocessor commands to use the `meta` scope which should result in consistent coloring between C++ and Fortran. A few things are not supported like macro function argument highlighting but I do not believe it is important for now --- CHANGELOG.md | 9 + package.json | 3 +- syntaxes/fortran_free-form.tmLanguage.json | 429 +++++++++++++- test/resources/header.h | 1 + test/resources/preprocessor.F90 | 139 +++++ test/resources/preprocessor.F90.snap | 659 +++++++++++++++++++++ 6 files changed, 1207 insertions(+), 33 deletions(-) create mode 100644 test/resources/header.h create mode 100644 test/resources/preprocessor.F90 create mode 100644 test/resources/preprocessor.F90.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 854278da..565ed08c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,20 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [2.3.1] +### Changed + +- Changes the syntax highlighting of preprocessor macros to match that of C++ + ### Fixed - Fixes OpenACC syntax highlighting not triggering - Fixes internal hover documentation display ([#205](https://github.com/krvajal/vscode-fortran-support/issues/205)) +- Fixes preprocessor syntax highlighting with line continuations + ([#248](https://github.com/krvajal/vscode-fortran-support/issues/248)) +- Fixes preprocessor syntax highlighting with derived type and conditionals + ([#249](https://github.com/krvajal/vscode-fortran-support/issues/249)) +- Fixes the general preprocessor syntax highlighting and adds testing ### Added diff --git a/package.json b/package.json index ba201805..7c1a42c8 100644 --- a/package.json +++ b/package.json @@ -210,7 +210,8 @@ "watch": "tsc -watch -p ./", "postinstall": "node ./node_modules/vscode/bin/install", "test": "CODE_TESTS_WORKSPACE='./' node ./node_modules/vscode/bin/test", - "test:grammar": "vscode-tmgrammar-snap -s source.fortran.free -g ./syntaxes/fortran_free-form.tmLanguage.json -t \"./test/resources/*.f90\"", + "test:grammar": "vscode-tmgrammar-snap -s source.fortran.free -g ./syntaxes/fortran_free-form.tmLanguage.json -t \"./test/**/*{.f90,F90}\"", + "test:grammar-update": "npm run test:grammar -- -u", "lint": "node ./node_modules/tslint/bin/tslint ./src/**/*.ts " }, "devDependencies": { diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 2c0f2778..d77fbea5 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -17,7 +17,7 @@ ], "firstLineMatch": "(?i)-[*]- mode: fortran free -[*]-", "injections": { - "source.fortran.free - ( string | comment | source.preprocessor )": { + "source.fortran.free - ( string | comment | meta.preprocessor )": { "patterns": [ { "include": "#line-continuation-operator" @@ -124,22 +124,22 @@ ], "repository": { "preprocessor": { - "name": "source.preprocessor", + "name": "meta.preprocessor", "begin": "^\\s*(#)", "beginCaptures": { "1": { - "name": "keyword.preprocessor.indicator.fortran" + "name": "keyword.control.preprocessor.indicator.fortran" } }, "end": "\\n", "patterns": [ { - "include": "#preprocessor-if-construct" + "include": "#preprocessor-if-construct" }, { - "include": "#preprocessor-statements" + "include": "#preprocessor-statements" } - ] + ] }, "preprocessor-comments": { "name": "comment.preprocessor", @@ -149,17 +149,285 @@ "preprocessor-constants": { "patterns": [ { - "include": "#preprocessor-numeric-constant" + "include": "#cpp-numeric-constant" }, { "include": "#preprocessor-string-constant" } ] }, - "preprocessor-numeric-constant": { - "comment": "Numeric constants", - "name": "constant.numeric.fortran", - "match": "(?ix)[\\+\\-]?(\\b\\d+\\.?\\d*|\\.\\d+) (_\\w+|d[\\+\\-]?\\d+|e[\\+\\-]?\\d+(_\\w+)?)?(?![a-z_])" + "cpp-numeric-constant": { + "match": "(?=)|(\\<)|(\\>)|(~)|(\\^)|(&)|(\\!)|(\\|)", + "captures": { + "1": { + "name": "keyword.operator.logical.preprocessor.and.fortran" + }, + "2": { + "name": "keyword.operator.logical.preprocessor.equals.fortran" + }, + "3": { + "name": "keyword.operator.logical.preprocessor.not_equals.fortran" + }, + "4": { + "name": "keyword.operator.logical.preprocessor.or.fortran" + }, + "5": { + "name": "keyword.operator.logical.preprocessor.less_eq.fortran" + }, + "6": { + "name": "keyword.operator.logical.preprocessor.more_eq.fortran" + }, + "7": { + "name": "keyword.operator.logical.preprocessor.less.fortran" + }, + "8": { + "name": "keyword.operator.logical.preprocessor.more.fortran" + }, + "9": { + "name": "keyword.operator.logical.preprocessor.complementary.fortran" + }, + "10": { + "name": "keyword.operator.logical.preprocessor.xor.fortran" + }, + "11": { + "name": "keyword.operator.logical.preprocessor.bitand.fortran" + }, + "12": { + "name": "keyword.operator.logical.preprocessor.not.fortran" + }, + "13": { + "name": "keyword.operator.logical.preprocessor.bitor.fortran" + } + } + }, + "preprocessor-arithmetic-operators": { + "comment": "division regex is different than in main fortran", + "match": "(\\-)|(\\+)|(\\/)|(\\*)", + "captures": { + "1": { + "name": "keyword.operator.subtraction.fortran" + }, + "2": { + "name": "keyword.operator.addition.fortran" + }, + "3": { + "name": "keyword.operator.division.fortran" + }, + "4": { + "name": "keyword.operator.multiplication.fortran" + } + } }, "preprocessor-statements": { "patterns": [ @@ -373,10 +730,11 @@ ] }, "preprocessor-define-statement": { + "name": "meta.preprocessor.macro.fortran", "begin": "(?i)\\G\\s*\\b(define)\\b", "beginCaptures": { "1": { - "name": "keyword.define.preprocessor.fortran" + "name": "keyword.control.preprocessor.define.fortran" } }, "end": "(?=\\n)", @@ -393,10 +751,11 @@ ] }, "preprocessor-error-statement": { + "name": "meta.preprocessor.macro.fortran", "begin": "(?i)\\G\\s*(error)\\b", "beginCaptures": { "1": { - "name": "keyword.error.preprocessor.fortran" + "name": "keyword.control.preprocessor.error.fortran" } }, "end": "(?=\\n)", @@ -413,10 +772,11 @@ ] }, "preprocessor-include-statement": { + "name": "meta.preprocessor.include.fortran", "begin": "(?i)\\G\\s*(include)\\b", "beginCaptures": { "1": { - "name": "keyword.include.preprocessor.fortran" + "name": "keyword.control.preprocessor.include.fortran" } }, "end": "(?=\\n)", @@ -448,10 +808,11 @@ ] }, "preprocessor-pragma-statement": { + "name": "meta.preprocessor.pragma.fortran", "begin": "(?i)\\G\\s*\\b(pragma)\\b", "beginCaptures": { "1": { - "name": "keyword.pragma.preprocessor.fortran" + "name": "keyword.control.preprocessor.pragma.fortran" } }, "end": "(?=\\n)", @@ -465,16 +826,20 @@ ] }, "preprocessor-undefine-statement": { + "name": "meta.preprocessor.undef.fortran", "begin": "(?i)\\G\\s*\\b(undef)\\b", "beginCaptures": { "1": { - "name": "keyword.undef.preprocessor.fortran" + "name": "keyword.control.preprocessor.undef.fortran" } }, "end": "(?=\\n)", "patterns": [ { "include": "#preprocessor-comments" + }, + { + "include": "#preprocessor-line-continuation-operator" } ] }, @@ -4786,7 +5151,7 @@ }, "6": { "name": "storage.type.dimension.fortran" - }, + }, "7": { "name": "keyword.operator.multiplication.fortran" }, @@ -5274,4 +5639,4 @@ ] } } -} +} \ No newline at end of file diff --git a/test/resources/header.h b/test/resources/header.h new file mode 100644 index 00000000..d4786dc6 --- /dev/null +++ b/test/resources/header.h @@ -0,0 +1 @@ +#define Var1 0 \ No newline at end of file diff --git a/test/resources/preprocessor.F90 b/test/resources/preprocessor.F90 new file mode 100644 index 00000000..eddd2a89 --- /dev/null +++ b/test/resources/preprocessor.F90 @@ -0,0 +1,139 @@ +#if defined(PETSC_USING_F90) && !defined(PETSC_USE_FORTRANKIND) +#define PetscObjectState 1 +#elif defined(PETSC_USING_F90) || !defined(PETSC_USE_FORTRANKIND) +#define PetscObjectState 0 +#endif /* a comment */ + +#define zoltan_mpi_id_datatype_name "MPI_UNSIGNED" +#define ZOLTAN_ID_CONSTANT(z) z + +! Testing C++ numeric literals +#if defined(__STDC_VERSION__) +# if (__STDC_VERSION__ >= 199901L) +# define ZOLTAN_GNO_SPEC "%zd" +# else +# define ZOLTAN_GNO_SPEC "%ld" +# endif +#else +# define ZOLTAN_GNO_SPEC "%ld" +#endif + +#if defined (__sun) || defined(MSOL2) || defined (ARCH_SOL2) +#define CHOLMOD_SOL2 +#define CHOLMOD_ARCHITECTURE "Sun Solaris" + +#elif defined (__linux) || defined(MGLNX86) || defined (ARCH_GLNX86) +#define CHOLMOD_LINUX +#define CHOLMOD_ARCHITECTURE "Linux" + +#elif defined(__APPLE__) +#define CHOLMOD_MAC +#define CHOLMOD_ARCHITECTURE "Mac" + +#else +! /* If the architecture is unknown, and you call the BLAS, you may need to */ +! /* define BLAS_BY_VALUE, BLAS_NO_UNDERSCORE, and/or BLAS_CHAR_ARG yourself. */ +#define CHOLMOD_ARCHITECTURE "unknown" +#endif + +program main + implicit none + + + type logical_vector +#ifdef DEBUG + logical, dimension(:), pointer :: ptr=>null() +#else + logical, dimension(:), pointer :: ptr +#endif + end type logical_vector + + real & +#ifdef DEBUG + , target, +#endif + :: val(3) + +! Tests ifndef, include, endif, define +#ifndef Var1 +#include "header.h" +#endif +#define Var2 2 + +! Test equality logical operators +#if Var1 == Var2 +#define OP 1 +#elif Var1 != Var2 +#define OP 2 +#elif Var1 <= Var2 +#define OP 3 +#elif Var1 >= Var2 +#define OP 4 +#endif +#undef OP + +! Test comparative logical operators +#if Var1 < Var2 +#define OP 1 +#elif Var1 <= Var2 +#define OP 2 +#endif +#undef OP + +! Test arithmetic operators +#if Var1 == Var1 + 1 +#elif Var1 == Var1 - 1 +#elif Var1 == Var1 * 1 +#elif Var1 == Var1 / 1 +#endif + +! Test line continuation +#if !defined( \ + PETSC_USING_F90) \ +&& \ +!defined(PETSC_USE_FORTRANKIND) +#define Var3 \ + 1 +#undef \ + Var1 +#endif + +! --------------------! +! and : && ! valid ! +! bitand: & ! valid ! +! bitor : | ! valid ! +! not : ! ! valid ! +! not_eq: != ! valid ! +! or : || ! valid ! +! xor : ^ ! valid ! +! compl : ~ ! valid ! +! --------------------! +#if 2 | -3 +print*, 'OR (|) operator' +#endif + +#if 2 ^ -3 +print*, 'XOR (^) operator' +#endif + +#if 2&2 +print*, 'AND (&) operator' +#endif + +#if !(2&-3) +print*, 'NOT (!) operator' +#endif + +#if 2 != 3 +print*, 'NOT EQUAL (!=) operator' +#endif + +#if ~2 == -3 +print*, 'complement (~) operator' +#endif + +! and_eq , &= ! not valid +! or_eq , |= ! not valid +! xor_eq , ^= ! not valid + +end program main \ No newline at end of file diff --git a/test/resources/preprocessor.F90.snap b/test/resources/preprocessor.F90.snap new file mode 100644 index 00000000..c7ce7b09 --- /dev/null +++ b/test/resources/preprocessor.F90.snap @@ -0,0 +1,659 @@ +>#if defined(PETSC_USING_F90) && !defined(PETSC_USE_FORTRANKIND) +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.and.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran +# ^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +>#define PetscObjectState 1 +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +>#elif defined(PETSC_USING_F90) || !defined(PETSC_USE_FORTRANKIND) +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^ source.fortran.free meta.preprocessor +# ^^^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor +# ^^ source.fortran.free meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.or.fortran +# ^ source.fortran.free meta.preprocessor +# ^ source.fortran.free meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran +# ^^^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor +>#define PetscObjectState 0 +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +>#endif /* a comment */ +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.endif.fortran +# ^ source.fortran.free meta.preprocessor +# ^^ source.fortran.free meta.preprocessor comment.preprocessor +# ^^^^^^^^^^^ source.fortran.free meta.preprocessor comment.preprocessor +# ^^ source.fortran.free meta.preprocessor comment.preprocessor +> +>#define zoltan_mpi_id_datatype_name "MPI_UNSIGNED" +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +>#define ZOLTAN_ID_CONSTANT(z) z +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +> +>! Testing C++ numeric literals +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>#if defined(__STDC_VERSION__) +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +># if (__STDC_VERSION__ >= 199901L) +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.more_eq.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.other.unit.suffix.integer.cpp +# ^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +># define ZOLTAN_GNO_SPEC "%zd" +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +># else +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.preprocessor +# ^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.else.fortran +># define ZOLTAN_GNO_SPEC "%ld" +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +># endif +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.preprocessor +# ^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.endif.fortran +>#else +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.else.fortran +># define ZOLTAN_GNO_SPEC "%ld" +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +>#endif +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>#if defined (__sun) || defined(MSOL2) || defined (ARCH_SOL2) +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.or.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.or.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +# ^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.conditional.fortran +>#define CHOLMOD_SOL2 +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +>#define CHOLMOD_ARCHITECTURE "Sun Solaris" +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +> +>#elif defined (__linux) || defined(MGLNX86) || defined (ARCH_GLNX86) +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^ source.fortran.free meta.preprocessor +# ^^^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^ source.fortran.free meta.preprocessor +# ^^ source.fortran.free meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.or.fortran +# ^ source.fortran.free meta.preprocessor +# ^^^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^ source.fortran.free meta.preprocessor +# ^^ source.fortran.free meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.or.fortran +# ^ source.fortran.free meta.preprocessor +# ^^^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor +>#define CHOLMOD_LINUX +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +>#define CHOLMOD_ARCHITECTURE "Linux" +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +> +>#elif defined(__APPLE__) +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^ source.fortran.free meta.preprocessor +# ^^^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^ source.fortran.free meta.preprocessor +>#define CHOLMOD_MAC +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +>#define CHOLMOD_ARCHITECTURE "Mac" +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +> +>#else +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.else.fortran +>! /* If the architecture is unknown, and you call the BLAS, you may need to */ +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>! /* define BLAS_BY_VALUE, BLAS_NO_UNDERSCORE, and/or BLAS_CHAR_ARG yourself. */ +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>#define CHOLMOD_ARCHITECTURE "unknown" +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^^^^^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.preprocessor meta.preprocessor.macro.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +>#endif +#^ source.fortran.free meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>program main +#^^^^^^^ source.fortran.free meta.program.fortran keyword.control.program.fortran +# ^ source.fortran.free meta.program.fortran +# ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran +> implicit none +#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.none.fortran +> +> +> type logical_vector +#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +>#ifdef DEBUG +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.ifdef.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor +> logical, dimension(:), pointer :: ptr=>null() +#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.character.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.dimension.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.pointer.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran keyword.other.point.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran support.function.intrinsic.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran punctuation.parentheses.right.fortran +>#else +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.else.fortran +> logical, dimension(:), pointer :: ptr +#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.character.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.dimension.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.pointer.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> end type logical_vector +#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +> +> real & +#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.line-continuation.fortran +>#ifdef DEBUG +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.preprocessor keyword.control.preprocessor.ifdef.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.preprocessor +> , target, +#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.target.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> :: val(3) +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +> +>! Tests ifndef, include, endif, define +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>#ifndef Var1 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.ifndef.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +>#include "header.h" +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran keyword.control.preprocessor.include.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +>#define Var2 2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +> +>! Test equality logical operators +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>#if Var1 == Var2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +>#define OP 1 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +>#elif Var1 != Var2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not_equals.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +>#define OP 2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +>#elif Var1 <= Var2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.less_eq.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +>#define OP 3 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +>#elif Var1 >= Var2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.more_eq.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +>#define OP 4 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +>#undef OP +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran keyword.control.preprocessor.undef.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran +> +>! Test comparative logical operators +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>#if Var1 < Var2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.less.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +>#define OP 1 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +>#elif Var1 <= Var2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.less_eq.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +>#define OP 2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +>#undef OP +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran keyword.control.preprocessor.undef.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran +> +>! Test arithmetic operators +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>#if Var1 == Var1 + 1 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +>#elif Var1 == Var1 - 1 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor constant.numeric.decimal.cpp +>#elif Var1 == Var1 * 1 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.multiplication.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor constant.numeric.decimal.cpp +>#elif Var1 == Var1 / 1 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.division.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor constant.numeric.decimal.cpp +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>! Test line continuation +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>#if !defined( \ +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.character.escape.line-continuation.preprocessor.fortran +> PETSC_USING_F90) \ +#^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.character.escape.line-continuation.preprocessor.fortran +>&& \ +#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.and.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.character.escape.line-continuation.preprocessor.fortran +>!defined(PETSC_USE_FORTRANKIND) +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +>#define Var3 \ +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.character.escape.line-continuation.preprocessor.fortran +> 1 +#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +>#undef \ +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran keyword.control.preprocessor.undef.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran constant.character.escape.line-continuation.preprocessor.fortran +> Var1 +#^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>! --------------------! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! and : && ! valid ! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! bitand: & ! valid ! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! bitor : | ! valid ! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! not : ! ! valid ! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! not_eq: != ! valid ! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! or : || ! valid ! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! xor : ^ ! valid ! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! compl : ~ ! valid ! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! --------------------! +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>#if 2 | -3 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.bitor.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +>print*, 'OR (|) operator' +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>#if 2 ^ -3 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.xor.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +>print*, 'XOR (^) operator' +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>#if 2&2 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.bitand.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +>print*, 'AND (&) operator' +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>#if !(2&-3) +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.bitand.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +>print*, 'NOT (!) operator' +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>#if 2 != 3 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not_equals.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +>print*, 'NOT EQUAL (!=) operator' +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>#if ~2 == -3 +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.complementary.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +>print*, 'complement (~) operator' +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +>#endif +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +> +>! and_eq , &= ! not valid +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! or_eq , |= ! not valid +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +>! xor_eq , ^= ! not valid +#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +> +>end program main +#^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran +# ^ source.fortran.free meta.program.fortran +# ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran \ No newline at end of file From d214d53cbdfc7f9650ccc58a982556568c8e2c69 Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 11 Oct 2021 16:18:44 +0100 Subject: [PATCH 27/62] Fixes Erroneous syntax highlighting, when argument is called "function" or "procedure" #207 I have used non-fixed width ngative lookbehinds which should not be permitted in traditional Oniguruma regex. VSCode's implementation of the regex engine does not seem to care hence the solution --- syntaxes/fortran_free-form.tmLanguage.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index d77fbea5..3f925a68 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -2512,7 +2512,7 @@ "derived-type-component-type-specification": { "comment": "Introduced in the Fortran 1995 standard.", "name": "meta.specification.type.fortran", - "begin": "(?ix)(?=\\b(?:character|class|complex|double\\s*precision|double\\s*complex|integer|logical|real|type)\\b(?![^'\";!\\n]*\\bfunction\\b))", + "begin": "(?ix)(?=\\b(?:character|class|complex|double\\s*precision|double\\s*complex|integer|logical|real|type)\\b(?![^'\";!\\n]*(? Date: Mon, 11 Oct 2021 16:25:35 +0100 Subject: [PATCH 28/62] Adds unittest for #207 and updates CHANGELOG --- CHANGELOG.md | 2 + .../function_subroutine_definitions.f90 | 50 +++ .../function_subroutine_definitions.f90.snap | 389 ++++++++++++++++++ 3 files changed, 441 insertions(+) create mode 100644 test/resources/function_subroutine_definitions.f90 create mode 100644 test/resources/function_subroutine_definitions.f90.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 565ed08c..d3ca81e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Fixes preprocessor syntax highlighting with derived type and conditionals ([#249](https://github.com/krvajal/vscode-fortran-support/issues/249)) - Fixes the general preprocessor syntax highlighting and adds testing +- Fixes using function/subroutine as parameter in functions/subroutines + ([#207](https://github.com/krvajal/vscode-fortran-support/issues/207)) ### Added diff --git a/test/resources/function_subroutine_definitions.f90 b/test/resources/function_subroutine_definitions.f90 new file mode 100644 index 00000000..7d697748 --- /dev/null +++ b/test/resources/function_subroutine_definitions.f90 @@ -0,0 +1,50 @@ +interface function_subroutine_definitions + + ! Normal subroutine + subroutine sub( arg ) + integer, intent(inout) :: arg + end subroutine + + ! Normal functions + integer function fun_integer( arg ) result(val) + integer, intent(inout) :: arg + end function fun_integer + + real function fun_real( arg ) result(val) + integer, intent(inout) :: arg + end function fun_real + + logical function fun_logical( arg ) result(val) + integer, intent(inout) :: arg + end function fun_logical + + character(kind=1, len=100) function fun_character( arg ) result(val) + integer, intent(inout) :: arg + end function fun_character + + double precision function fun_double_precision( arg ) result(val) + integer, intent(inout) :: arg + end function fun_double_precision + + double complex function fun_double_complex( arg ) result(val) + integer, intent(inout) :: arg + end function fun_double_complex + + ! Weird edge cases where the keyword function/subroutine is also used as arguments + function fun_with_fun( function ) + integer, intent(inout) :: function + end function fun_with_fun + + function fun_with_sub( subroutine ) + integer, intent(inout) :: subroutine + end function fun_with_sub + + subroutine sub_with_sub( subroutine ) + integer, intent(inout) :: subroutine + end subroutine sub_with_sub + + subroutine sub_with_fun( function ) + integer, intent(inout) :: function + end subroutine sub_with_fun + +end interface function_subroutine_definitions \ No newline at end of file diff --git a/test/resources/function_subroutine_definitions.f90.snap b/test/resources/function_subroutine_definitions.f90.snap new file mode 100644 index 00000000..f6431f3d --- /dev/null +++ b/test/resources/function_subroutine_definitions.f90.snap @@ -0,0 +1,389 @@ +>interface function_subroutine_definitions +#^^^^^^^^^ source.fortran.free meta.interface.generic.fortran keyword.control.interface.fortran +# ^ source.fortran.free meta.interface.generic.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran entity.name.function.fortran +> +> ! Normal subroutine +#^^ source.fortran.free meta.interface.generic.fortran +# ^ source.fortran.free meta.interface.generic.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran comment.line.fortran +> subroutine sub( arg ) +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.attribute-list.fortran +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +> integer, intent(inout) :: arg +#^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end subroutine +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +> +> ! Normal functions +#^^ source.fortran.free meta.interface.generic.fortran +# ^ source.fortran.free meta.interface.generic.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran comment.line.fortran +> integer function fun_integer( arg ) result(val) +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran +> integer, intent(inout) :: arg +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end function fun_integer +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +> +> real function fun_real( arg ) result(val) +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.real.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran +> integer, intent(inout) :: arg +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end function fun_real +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +> +> logical function fun_logical( arg ) result(val) +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.character.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran +> integer, intent(inout) :: arg +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end function fun_logical +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +> +> character(kind=1, len=100) function fun_character( arg ) result(val) +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.character.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran variable.parameter.dummy-variable.fortran.modern +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran constant.numeric.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran +# ^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran variable.parameter.dummy-variable.fortran.modern +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran keyword.operator.assignment.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran constant.numeric.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran +> integer, intent(inout) :: arg +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end function fun_character +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +> +> double precision function fun_double_precision( arg ) result(val) +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.double.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran +> integer, intent(inout) :: arg +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end function fun_double_precision +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +> +> double complex function fun_double_complex( arg ) result(val) +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.doublecomplex.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran +> integer, intent(inout) :: arg +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end function fun_double_complex +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +> +> ! Weird edge cases where the keyword function/subroutine is also used as arguments +#^^ source.fortran.free meta.interface.generic.fortran +# ^ source.fortran.free meta.interface.generic.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran comment.line.fortran +> function fun_with_fun( function ) +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +> integer, intent(inout) :: function +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end function fun_with_fun +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +> +> function fun_with_sub( subroutine ) +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +> integer, intent(inout) :: subroutine +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end function fun_with_sub +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran +> +> subroutine sub_with_sub( subroutine ) +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.attribute-list.fortran +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +> integer, intent(inout) :: subroutine +#^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end subroutine sub_with_sub +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +> +> subroutine sub_with_fun( function ) +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.attribute-list.fortran +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +> integer, intent(inout) :: function +#^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end subroutine sub_with_fun +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +> +>end interface function_subroutine_definitions +#^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran keyword.control.endinterface.fortran +# ^ source.fortran.free meta.interface.generic.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran entity.name.function.fortran \ No newline at end of file From 7f6706af46006d3791946235fa62a2dbcaa702d3 Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 11 Oct 2021 16:40:36 +0100 Subject: [PATCH 29/62] Adds syntax highlighting support for fypp also extends the support for pfunit. Not sure if .pf and .fpp are considered to be fixed-form by default I don't think that is the case but fypp and pfunit use them so we default them to free-form --- package.json | 9 +++++---- syntaxes/fortran_fixed-form.tmLanguage.json | 4 +--- syntaxes/fortran_free-form.tmLanguage.json | 8 ++++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 7c1a42c8..f8b17fbd 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,10 @@ ".F08", ".f18", ".F18", - ".pf" + ".fpp", + ".FPP", + ".pf", + ".PF" ], "configuration": "./language-configuration.json" }, @@ -81,9 +84,7 @@ ".f77", ".F77", ".for", - ".FOR", - ".fpp", - ".FPP" + ".FOR" ], "configuration": "./language-configuration.json" } diff --git a/syntaxes/fortran_fixed-form.tmLanguage.json b/syntaxes/fortran_fixed-form.tmLanguage.json index d12dccb9..92b51ed0 100644 --- a/syntaxes/fortran_fixed-form.tmLanguage.json +++ b/syntaxes/fortran_fixed-form.tmLanguage.json @@ -8,9 +8,7 @@ "f77", "F77", "for", - "FOR", - "fpp", - "FPP" + "FOR" ], "injections": { "source.fortran.fixed - ( string | comment )": { diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 3f925a68..09187565 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -13,7 +13,11 @@ "F08", "f18", "F18", - ".pf" + "fpp", + "FPP", + ".pf", + ".PF" + ], "firstLineMatch": "(?i)-[*]- mode: fortran free -[*]-", "injections": { @@ -125,7 +129,7 @@ "repository": { "preprocessor": { "name": "meta.preprocessor", - "begin": "^\\s*(#)", + "begin": "^\\s*(#:?)", "beginCaptures": { "1": { "name": "keyword.control.preprocessor.indicator.fortran" From 06af154b32559b7613bf81e16ff29b66b8863f6e Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 11 Oct 2021 16:50:37 +0100 Subject: [PATCH 30/62] Add MIT license badge back to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bfd49c70..0ea9e5cd 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![Downloads](https://vsmarketplacebadge.apphb.com/downloads-short/krvajalm.linter-gfortran.svg)](https://marketplace.visualstudio.com/items?itemName=krvajalm.linter-gfortran) [![Installs](https://vsmarketplacebadge.apphb.com/installs/krvajalm.linter-gfortran.svg)](https://marketplace.visualstudio.com/items?itemName=krvajalm.linter-gfortran) [![VS Marketplace](https://vsmarketplacebadge.apphb.com/version-short/krvajalm.linter-gfortran.svg)](https://marketplace.visualstudio.com/items?itemName=krvajalm.linter-gfortran) +[![MIT License](https://img.shields.io/npm/l/stack-overflow-copy-paste.svg?)](http://opensource.org/licenses/MIT) > This extension provides support for the Fortran programming language. It includes syntax highlighting, debugging, code snippets and a linting based on `gfortran`. You can download the Visual Studio Code editor from [here](https://code.visualstudio.com/download). From 5bfbbe6dc8450d8c2ccf7e549a6495941bfd1efa Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 11 Oct 2021 17:11:12 +0100 Subject: [PATCH 31/62] Adds names specific to individual scopes This is meant to make debugging syntax highlighting bugs easier to trace The unittests are also updated to contain the new scope names. --- syntaxes/fortran_free-form.tmLanguage.json | 102 +- test/resources/class.f90.snap | 384 ++++---- .../function_subroutine_definitions.f90.snap | 460 ++++----- test/resources/openacc_support.f90.snap | 278 +++--- test/resources/preprocessor.F90.snap | 704 +++++++------- test/resources/sample.f90.snap | 78 +- test/resources/select_case.f90.snap | 252 ++--- test/resources/select_rank.f90.snap | 878 +++++++++--------- test/resources/select_type.f90.snap | 666 ++++++------- 9 files changed, 1898 insertions(+), 1904 deletions(-) diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 09187565..1585e3fa 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -1356,7 +1356,7 @@ "end": "(?i)\\s*(?!\\b(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)\\b(?:\\b(\\1)\\b)?(?:\\s*([^\\s;!][^;!\\n]*?))?(?=\\s*[;!\\n])", "endCaptures": { "2": { - "name": "invalid.error.fortran.modern" + "name": "invalid.error.named-control-constructs.fortran.modern" } }, "applyEndPatternLast": 1, @@ -2310,7 +2310,7 @@ "patterns": [ { "comment": "Attribute list.", - "contentName": "meta.attribute-list.fortran", + "contentName": "meta.attribute-list.derived-type.fortran", "begin": "\\G(?=\\s*(,|::))", "end": "(::)|(?=[;!\\n])", "endCaptures": { @@ -2363,7 +2363,7 @@ "name": "entity.name.type.fortran" }, "3": { - "name": "invalid.error.fortran" + "name": "invalid.error.derived-type.fortran" } }, "patterns": [ @@ -2372,7 +2372,7 @@ }, { "comment": "Derived type specification block.", - "name": "meta.block.specification.fortran", + "name": "meta.block.specification.derived-type.fortran", "begin": "(?i)^(?!\\s*\\b(?:contains|end\\s*type)\\b)", "end": "(?i)^(?=\\s*\\b(?:contains|end\\s*type)\\b)", "patterns": [ @@ -2474,7 +2474,7 @@ }, { "comment": "Attribute list.", - "contentName": "meta.attribute-list.fortran", + "contentName": "meta.attribute-list.derived-type-component-procedure.fortran", "begin": "(?=\\s*(,|::|\\())", "end": "(::)|(?=[;!\\n])", "endCaptures": { @@ -2515,7 +2515,7 @@ }, "derived-type-component-type-specification": { "comment": "Introduced in the Fortran 1995 standard.", - "name": "meta.specification.type.fortran", + "name": "meta.specification.derived-type.fortran", "begin": "(?ix)(?=\\b(?:character|class|complex|double\\s*precision|double\\s*complex|integer|logical|real|type)\\b(?![^'\";!\\n]*(? > use iso_fortran_env, only: real64 -#^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran -# ^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.use.fortran keyword.control.use.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.use.fortran -# ^^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.use.fortran entity.name.class.module.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.use.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.use.fortran -# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.use.fortran keyword.control.only.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.use.fortran -# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.use.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran keyword.control.use.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran entity.name.class.module.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran +# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran keyword.control.only.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran meta.parameter.fortran > implicit none -#^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.implicit.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.none.fortran +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.implicit.fortran keyword.other.none.fortran > private -#^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.statement.attribute-specification.fortran storage.modifier.private.fortran +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.attribute-specification.fortran storage.modifier.private.fortran > > type, public :: test_t -#^^ source.fortran.free meta.module.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.type.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran storage.modifier.public.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran storage.modifier.public.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran entity.name.type.fortran > real(real64) :: a, b -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.real.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.type-spec.fortran punctuation.parentheses.left.fortran -# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.type-spec.fortran meta.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.type-spec.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.type-spec.fortran punctuation.parentheses.left.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.type-spec.fortran meta.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.type-spec.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran > contains -#^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran keyword.control.contains.fortran +#^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran keyword.control.contains.fortran > procedure, private :: init_sub -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran -# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran storage.type.procedure.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.fortran meta.something.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.fortran meta.something.fortran -# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.fortran meta.something.fortran storage.modifier.private.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.fortran meta.something.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran storage.type.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran storage.modifier.private.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran > generic :: init => init_sub -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran -# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran storage.type.procedure.generic.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran entity.name.function.procedure.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran keyword.other.point.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran entity.name.function.procedure.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran storage.type.procedure.generic.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.attribute-list.derived-type-contains-generic-procedure.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran entity.name.function.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.generic.fortran meta.name-list.fortran entity.name.function.procedure.fortran > end type test_t -#^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran entity.name.type.fortran > > type :: node -#^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.type.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran entity.name.type.fortran > private -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.statement.attribute-specification.fortran -# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.statement.attribute-specification.fortran storage.modifier.private.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.statement.attribute-specification.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.statement.attribute-specification.fortran storage.modifier.private.fortran > type(node), pointer :: next => null() -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.type.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.pointer.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran keyword.other.point.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran support.function.intrinsic.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.specification.type.derived.fortran storage.type.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.specification.type.derived.fortran entity.name.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran storage.modifier.pointer.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran support.function.intrinsic.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran punctuation.parentheses.right.fortran > class(*), allocatable :: item -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran -# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.class.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.allocatable.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.specification.type.derived.fortran storage.type.class.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.specification.type.derived.fortran entity.name.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran storage.modifier.allocatable.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran > > contains -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran keyword.control.contains.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran keyword.control.contains.fortran > final :: node_finalizer -#^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran -# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran storage.type.final-procedure.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran meta.attribute-list.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran entity.name.function.procedure.fortran +#^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran +# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran storage.type.final-procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran meta.attribute-list.derived-type-contains-final-procedure.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran meta.attribute-list.derived-type-contains-final-procedure.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.final.fortran entity.name.function.procedure.fortran > > end type node -#^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran entity.name.type.fortran > > contains -#^^ source.fortran.free meta.module.fortran meta.block.specification.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran keyword.control.contains.fortran +#^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran keyword.control.contains.fortran > > subroutine init_sub(this, a, b) -#^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.fortran -# ^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran +# ^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > > class( test_t ) :: this -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.class.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran -# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran meta.type-spec.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.class.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran meta.type-spec.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > real(real64),intent(in) :: a, b -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.real.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.type-spec.fortran punctuation.parentheses.left.fortran -# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.type-spec.fortran meta.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.type-spec.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.type-spec.fortran punctuation.parentheses.left.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.type-spec.fortran meta.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.type-spec.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > > this%a = a -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.parameter.fortran keyword.other.selector.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.parameter.fortran keyword.other.selector.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.parameter.fortran > this%b = b -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.parameter.fortran keyword.other.selector.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.parameter.fortran keyword.other.selector.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.parameter.fortran > > end subroutine init_sub -#^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran -# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran > > subroutine node_finalizer(a) -#^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.fortran -# ^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran +# ^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > type(node) :: a -#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.type.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > > end subroutine node_finalizer -#^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran -# ^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran > >end module main #^^^^^^^^^^ source.fortran.free meta.module.fortran keyword.other.endmodule.fortran diff --git a/test/resources/function_subroutine_definitions.f90.snap b/test/resources/function_subroutine_definitions.f90.snap index f6431f3d..b1854c1f 100644 --- a/test/resources/function_subroutine_definitions.f90.snap +++ b/test/resources/function_subroutine_definitions.f90.snap @@ -8,30 +8,30 @@ # ^ source.fortran.free meta.interface.generic.fortran comment.line.fortran # ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran comment.line.fortran > subroutine sub( arg ) -#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran # ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.subroutine.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran # ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > integer, intent(inout) :: arg -#^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end subroutine -#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran # ^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran > > ! Normal functions @@ -39,226 +39,226 @@ # ^ source.fortran.free meta.interface.generic.fortran comment.line.fortran # ^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran comment.line.fortran > integer function fun_integer( arg ) result(val) -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran # ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran # ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran > integer, intent(inout) :: arg -#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end function fun_integer -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran > > real function fun_real( arg ) result(val) -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran -# ^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.real.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran +# ^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran storage.type.real.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran # ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran # ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran > integer, intent(inout) :: arg -#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end function fun_real -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran > > logical function fun_logical( arg ) result(val) -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.character.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran storage.type.character.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran # ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran # ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran > integer, intent(inout) :: arg -#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end function fun_logical -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran > > character(kind=1, len=100) function fun_character( arg ) result(val) -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran -# ^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.character.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran variable.parameter.dummy-variable.fortran.modern -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran constant.numeric.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran -# ^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran variable.parameter.dummy-variable.fortran.modern -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran keyword.operator.assignment.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran constant.numeric.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran meta.type-spec.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran +# ^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran storage.type.character.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran meta.type-spec.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran meta.type-spec.fortran variable.parameter.dummy-variable.fortran.modern +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran meta.type-spec.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran meta.type-spec.fortran constant.numeric.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran meta.type-spec.fortran +# ^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran meta.type-spec.fortran variable.parameter.dummy-variable.fortran.modern +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran meta.type-spec.fortran keyword.operator.assignment.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran meta.type-spec.fortran constant.numeric.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran meta.type-spec.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran # ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran # ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran > integer, intent(inout) :: arg -#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end function fun_character -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran > > double precision function fun_double_precision( arg ) result(val) -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.double.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran storage.type.double.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran # ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran # ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran > integer, intent(inout) :: arg -#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end function fun_double_precision -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran > > double complex function fun_double_complex( arg ) result(val) -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran storage.type.doublecomplex.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran storage.type.doublecomplex.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran # ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.control.result.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.left.fortran # ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.parentheses.right.fortran > integer, intent(inout) :: arg -#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end function fun_double_complex -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran @@ -268,117 +268,117 @@ # ^ source.fortran.free meta.interface.generic.fortran comment.line.fortran # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran comment.line.fortran > function fun_with_fun( function ) -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > integer, intent(inout) :: function -#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end function fun_with_fun -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran > > function fun_with_sub( subroutine ) -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.attribute-list.function.fortran # ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.function.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.function.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > integer, intent(inout) :: subroutine -#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end function fun_with_sub -#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran meta.block.specification.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran keyword.other.endfunction.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.function.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.function.fortran entity.name.function.fortran > > subroutine sub_with_sub( subroutine ) -#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran # ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.subroutine.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran -# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > integer, intent(inout) :: subroutine -#^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end subroutine sub_with_sub -#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran # ^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran > > subroutine sub_with_fun( function ) -#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.attribute-list.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran # ^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.subroutine.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran -# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > integer, intent(inout) :: function -#^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.intent.in-out.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in-out.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > end subroutine sub_with_fun -#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.fortran +#^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran # ^^^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran # ^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran # ^^^^^^^^^^^^ source.fortran.free meta.interface.generic.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran diff --git a/test/resources/openacc_support.f90.snap b/test/resources/openacc_support.f90.snap index 2ac25511..4d328f10 100644 --- a/test/resources/openacc_support.f90.snap +++ b/test/resources/openacc_support.f90.snap @@ -6,206 +6,206 @@ # ^ source.fortran.free meta.program.fortran # ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran > implicit none -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.none.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.none.fortran > > !The highlighting should continue on the second line -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc data copy(A) copyin(B(:)) copyout(C(1:N)) present(D) & -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc& no_create(E) deviceptr(F) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc parallel loop private(foo) firstprivate(bar) tile(32,32) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc parallel -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc loop collapse(2) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc end parallel -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc end data -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc kernels default(present) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc loop independent -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc loop reduction(+:sum) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc loop reduction(max:the_max) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc loop gang worker vector -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc loop gang(128) worker(4) vector(128) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc loop seq -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc end kernels -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc parallel loop num_gangs(1) num_workers(1) vector_length(1) default(none) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc enter data create(A(1:N)) attach(B) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc update device(A) async -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc update host(A(1:N)) async(1) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc update self(A(:)) async(2) wait(1) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc wait(1) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc wait -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc exit data delete(A) detach(B) finalize -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc serial self(.TRUE.) if(.FALSE.) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc host_data use_device(A) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc end host_data -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc declare device_resident(A) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc init device_type(foo) device_num(bar) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc shutdown device_type(foo) device_num(bar) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc set default_async(1) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !$acc cache(A(:)) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > ! Test all four forms of atomic -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc atomic capture -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc end atomic -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc atomic update -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc end atomic -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc atomic read -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc end atomic -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc atomic write -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc end atomic -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > !The "do" should not highlight, if it does it's coming from OpenMP -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$acc parallel do -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !The "do" here still should, since it is OpenMP -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > !$omp parallel do -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > >end program main #^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran diff --git a/test/resources/preprocessor.F90.snap b/test/resources/preprocessor.F90.snap index c7ce7b09..ff40ba4a 100644 --- a/test/resources/preprocessor.F90.snap +++ b/test/resources/preprocessor.F90.snap @@ -203,455 +203,455 @@ # ^ source.fortran.free meta.program.fortran # ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran > implicit none -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.none.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.none.fortran > > > type logical_vector -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran entity.name.type.fortran >#ifdef DEBUG -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.ifdef.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.preprocessor keyword.control.preprocessor.ifdef.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.preprocessor > logical, dimension(:), pointer :: ptr=>null() -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.character.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.dimension.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.pointer.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran keyword.other.point.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran support.function.intrinsic.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran punctuation.parentheses.right.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran storage.type.character.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran storage.modifier.dimension.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran storage.modifier.pointer.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran keyword.other.point.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran support.function.intrinsic.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran punctuation.parentheses.right.fortran >#else -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.else.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.preprocessor keyword.control.preprocessor.else.fortran > logical, dimension(:), pointer :: ptr -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.character.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.dimension.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.pointer.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran storage.type.character.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran storage.modifier.dimension.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran storage.modifier.pointer.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > end type logical_vector -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran entity.name.type.fortran > > real & -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.real.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.line-continuation.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.line-continuation.fortran >#ifdef DEBUG -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.preprocessor keyword.control.preprocessor.ifdef.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.preprocessor +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.preprocessor keyword.control.preprocessor.ifdef.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.preprocessor > , target, -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.target.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.target.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > :: val(3) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran punctuation.parentheses.right.fortran > >! Tests ifndef, include, endif, define -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >#ifndef Var1 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.ifndef.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.ifndef.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor >#include "header.h" -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran keyword.control.preprocessor.include.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran keyword.control.preprocessor.include.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.begin.preprocessor.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.include.fortran string.quoted.double.include.preprocessor.fortran punctuation.definition.string.end.preprocessor.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran >#define Var2 2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp > >! Test equality logical operators -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >#if Var1 == Var2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran >#define OP 1 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp >#elif Var1 != Var2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not_equals.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not_equals.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor >#define OP 2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp >#elif Var1 <= Var2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.less_eq.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.less_eq.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor >#define OP 3 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp >#elif Var1 >= Var2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.more_eq.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.more_eq.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor >#define OP 4 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran >#undef OP -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran keyword.control.preprocessor.undef.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.undef.fortran keyword.control.preprocessor.undef.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.undef.fortran > >! Test comparative logical operators -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >#if Var1 < Var2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.less.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.less.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran >#define OP 1 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp >#elif Var1 <= Var2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.less_eq.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.less_eq.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor >#define OP 2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran >#undef OP -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran keyword.control.preprocessor.undef.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.undef.fortran keyword.control.preprocessor.undef.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.undef.fortran > >! Test arithmetic operators -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >#if Var1 == Var1 + 1 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.addition.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.addition.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp >#elif Var1 == Var1 - 1 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.subtraction.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor constant.numeric.decimal.cpp >#elif Var1 == Var1 * 1 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.multiplication.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.multiplication.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor constant.numeric.decimal.cpp >#elif Var1 == Var1 / 1 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.operator.division.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.elif.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.operator.division.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor constant.numeric.decimal.cpp >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > >! Test line continuation -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >#if !defined( \ -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.character.escape.line-continuation.preprocessor.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.character.escape.line-continuation.preprocessor.fortran > PETSC_USING_F90) \ -#^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.character.escape.line-continuation.preprocessor.fortran +#^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.character.escape.line-continuation.preprocessor.fortran >&& \ -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.and.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.character.escape.line-continuation.preprocessor.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.and.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.character.escape.line-continuation.preprocessor.fortran >!defined(PETSC_USE_FORTRANKIND) -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.defined.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran >#define Var3 \ -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.character.escape.line-continuation.preprocessor.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran keyword.control.preprocessor.define.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.character.escape.line-continuation.preprocessor.fortran > 1 -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.macro.fortran constant.numeric.decimal.cpp >#undef \ -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran keyword.control.preprocessor.undef.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran constant.character.escape.line-continuation.preprocessor.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.undef.fortran keyword.control.preprocessor.undef.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.undef.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.undef.fortran constant.character.escape.line-continuation.preprocessor.fortran > Var1 -#^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.undef.fortran +#^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.undef.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > >! --------------------! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! and : && ! valid ! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! bitand: & ! valid ! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! bitor : | ! valid ! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! not : ! ! valid ! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! not_eq: != ! valid ! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! or : || ! valid ! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! xor : ^ ! valid ! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! compl : ~ ! valid ! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! --------------------! -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >#if 2 | -3 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.bitor.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.bitor.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp >print*, 'OR (|) operator' -#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > >#if 2 ^ -3 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.xor.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.xor.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp >print*, 'XOR (^) operator' -#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > >#if 2&2 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.bitand.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.bitand.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp >print*, 'AND (&) operator' -#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > >#if !(2&-3) -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.bitand.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.bitand.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran >print*, 'NOT (!) operator' -#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > >#if 2 != 3 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not_equals.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.not_equals.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp >print*, 'NOT EQUAL (!=) operator' -#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > >#if ~2 == -3 -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.complementary.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.control.preprocessor.if.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.complementary.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.logical.preprocessor.fortran keyword.operator.logical.preprocessor.equals.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran keyword.operator.subtraction.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor meta.preprocessor.conditional.fortran constant.numeric.decimal.cpp >print*, 'complement (~) operator' -#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran +#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran string.quoted.single.fortran punctuation.definition.string.end.fortran >#endif -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.indicator.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.preprocessor keyword.control.preprocessor.endif.fortran > >! and_eq , &= ! not valid -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! or_eq , |= ! not valid -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran >! xor_eq , ^= ! not valid -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > >end program main #^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran diff --git a/test/resources/sample.f90.snap b/test/resources/sample.f90.snap index 8c9ca1ff..6c4d013b 100644 --- a/test/resources/sample.f90.snap +++ b/test/resources/sample.f90.snap @@ -3,55 +3,55 @@ # ^ source.fortran.free meta.program.fortran # ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran > ! execution -#^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran comment.line.fortran +#^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran comment.line.fortran > > call say_hello() -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran keyword.control.call.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran -# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran punctuation.parentheses.right.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran keyword.control.call.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran punctuation.parentheses.right.fortran > >contains -#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran keyword.control.contains.fortran +#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran keyword.control.contains.fortran > > subroutine say_hello(a,b) -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran -# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > integer :: a,b -#^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > > print *, "Hello, World!" -#^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > end subroutine say_hello -#^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran -# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran > > >end program main diff --git a/test/resources/select_case.f90.snap b/test/resources/select_case.f90.snap index 80589b7d..20603c4a 100644 --- a/test/resources/select_case.f90.snap +++ b/test/resources/select_case.f90.snap @@ -16,160 +16,160 @@ # ^ source.fortran.free meta.program.fortran # ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran > implicit none -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.none.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.none.fortran > > integer :: i, j, k -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > > > select case(i) -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran keyword.control.selectcase.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran keyword.control.selectcase.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran > case(1) -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran keyword.control.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran keyword.control.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran > select case(j) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.selectcase.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.selectcase.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran > case(1) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran > print*, i, j -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran > case(2) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran > print*, i, j -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran > case default -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.default.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.default.fortran > print*, i, j -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran > end select -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.endselect.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.endselect.fortran > > case(2) -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran keyword.control.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran keyword.control.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran > select case(k) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.selectcase.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.selectcase.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran > case(1) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran > print*, i, j -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran > case(2) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran punctuation.parentheses.right.fortran > print*, i, j -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran > case default -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.default.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.default.fortran > print*, i, j -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran meta.parameter.fortran > end select -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.endselect.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.block.select.case.fortran keyword.control.endselect.fortran > > case default -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran keyword.control.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran keyword.control.default.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran keyword.control.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran keyword.control.default.fortran > print*, i, j -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran meta.parameter.fortran > end select -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.case.fortran keyword.control.endselect.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.case.fortran keyword.control.endselect.fortran > >end program select_case_test #^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran diff --git a/test/resources/select_rank.f90.snap b/test/resources/select_rank.f90.snap index c078b673..ba094dd2 100644 --- a/test/resources/select_rank.f90.snap +++ b/test/resources/select_rank.f90.snap @@ -20,518 +20,518 @@ # ^ source.fortran.free meta.program.fortran # ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran > implicit none -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.none.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.none.fortran > > real, dimension(2, 2) :: a, b -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.real.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.dimension.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran constant.numeric.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.dimension.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran constant.numeric.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > > a = -666.0; b = -666.0 -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran constant.numeric.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran constant.numeric.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran constant.numeric.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran constant.numeric.fortran > call initialize(a) -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran keyword.control.call.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran punctuation.parentheses.right.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran keyword.control.call.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran punctuation.parentheses.right.fortran > call nested_initialise(a, b) -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran keyword.control.call.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.control.call.fortran punctuation.parentheses.right.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran keyword.control.call.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.control.call.fortran punctuation.parentheses.right.fortran > > print*, a -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran > print*, b -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran > > contains -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran keyword.control.contains.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran keyword.control.contains.fortran > > subroutine initialize (arg) -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > real :: arg(..) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.real.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.right.fortran > select rank (arg) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > rank (0) ! scalar -#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran comment.line.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran comment.line.fortran +#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran comment.line.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran comment.line.fortran > arg = 0.0 -#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank (1) -#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg(:) = 0.0 -#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank (2) -#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg(:, :) = 0.0 -#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank default -#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.default.fortran +#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.default.fortran > print *, "Subroutine initialize called with unexpected rank argument" -#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > end select -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran > return -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.statement.control.return.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.statement.control.return.fortran keyword.control.return.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.control.return.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.control.return.fortran keyword.control.return.fortran > end subroutine -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran > > subroutine nested_initialise(arg1, arg2) -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.begin.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran variable.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran punctuation.definition.parameters.end.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran > !< @note this is meant to test the syntax highlighting, nothing else! -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran comment.line.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran comment.line.fortran > real :: arg1(..), arg2(..) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.real.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran punctuation.parentheses.right.fortran > select rank (arg1) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > rank (0) ! scalar -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran comment.line.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran comment.line.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran comment.line.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran comment.line.fortran > arg1 = 0.0 -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran > select rank (arg2) -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > rank (0) ! scalar -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran > arg2 = 0.0 -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank (1) -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg2(:) = 0.0 -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank (2) -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg2(:, :) = 0.0 -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank default -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.default.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.default.fortran > print *, "Subroutine initialize called with unexpected rank argument" -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > end select -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran > rank (1) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg1(:) = 0.0 -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran > select rank (arg2) -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > rank (0) ! scalar -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran > arg2 = 0.0 -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank (1) -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg2(:) = 0.0 -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank (2) -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg2(:, :) = 0.0 -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank default -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.default.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.default.fortran > print *, "Subroutine initialize called with unexpected rank argument" -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > end select -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran > rank (2) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg1(:, :) = 0.0 -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran constant.numeric.fortran > select rank (arg2) -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.selectrank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > rank (0) ! scalar -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran comment.line.fortran > arg2 = 0.0 -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank (1) -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg2(:) = 0.0 -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank (2) -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran punctuation.parentheses.right.fortran > arg2(:, :) = 0.0 -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.left.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran meta.parameter.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran constant.numeric.fortran > rank default -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.default.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.default.fortran > print *, "Subroutine initialize called with unexpected rank argument" -#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > end select -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran > rank default -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.default.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.default.fortran > print *, "Subroutine initialize called with unexpected rank argument" -#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > end select -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.block.select.rank.fortran keyword.control.endselect.fortran > return -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.statement.control.return.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran meta.statement.control.return.fortran keyword.control.return.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.control.return.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.control.return.fortran keyword.control.return.fortran > > end subroutine nested_initialise -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.contains.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran > >end program select_rank_test #^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran diff --git a/test/resources/select_type.f90.snap b/test/resources/select_type.f90.snap index b4b9b066..34f58190 100644 --- a/test/resources/select_type.f90.snap +++ b/test/resources/select_type.f90.snap @@ -16,391 +16,391 @@ # ^ source.fortran.free meta.program.fortran # ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran > implicit none -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.statement.implicit.fortran keyword.other.none.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.none.fortran > > > type :: point -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran entity.name.type.fortran > real :: x, y -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.real.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran > end type point -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran entity.name.type.fortran > > type, extends(point) :: point_3d -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran storage.modifier.extends.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran entity.name.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran storage.modifier.extends.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran entity.name.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran entity.name.type.fortran > real :: z -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.real.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran > end type point_3d -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran entity.name.type.fortran > > type, extends(point) :: color_point -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran storage.modifier.extends.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran entity.name.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran storage.modifier.extends.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran entity.name.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran entity.name.type.fortran > integer :: color -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran storage.type.integer.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran > end type color_point -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.derived-type.definition.fortran entity.name.type.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.derived-type.definition.fortran entity.name.type.fortran > > type(point_3d), target :: p3 -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.target.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.target.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > type(color_point), target :: c -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.target.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.target.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > class(point), pointer :: p_or_c -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.pointer.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.pointer.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > class(point), pointer :: p -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran punctuation.comma.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran storage.modifier.pointer.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.attribute-list.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.pointer.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran > > p_or_c => c -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.other.point.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran > p => p3 -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran keyword.other.point.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.parameter.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.parameter.fortran > select type ( a => p_or_c ) -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.selecttype.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.other.point.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.selecttype.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran > class is ( point ) -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.is.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.is.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran > ! "class ( point ) :: a" implied here -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran > print *, a%x, a%y ! this block executes -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran > select type(a) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.selecttype.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.selecttype.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran > type is (point_3d) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran > print*, "type(point_3d)" -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > type is (color_point) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran > print*, "type(color_point)" -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > class default -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.default.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.default.fortran > print*, "no matching type" -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > end select -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.endselect.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.endselect.fortran > > class is (color_point) ! does not execute -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.is.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.is.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran > select type(p) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.selecttype.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.selecttype.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran > class is (point_3d) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran > print*, "class(point_3d)" -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > class is (color_point) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran > print*, "class(color_point)" -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > class is (point) -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.is.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran > print*, "class(point)" -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > class default -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.default.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.default.fortran > print*, "no matching class" -#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > end select -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.endselect.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.block.select.type.fortran keyword.control.endselect.fortran > > type is ( point_3d ) ! does not execute -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.is.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.is.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran > ! "type ( point_3d ) :: a" implied here -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran comment.line.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran comment.line.fortran > print *, a%x, a%y, a%z -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran meta.parameter.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran keyword.other.selector.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran meta.parameter.fortran > class default -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.class.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.default.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.class.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.default.fortran > print*, "no matching class" -#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.print.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.operator.power.fortran -# ^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran -# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran > end select -#^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran -# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.fortran meta.block.select.type.fortran keyword.control.endselect.fortran +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.select.type.fortran keyword.control.endselect.fortran > > >end program select_type_test From a8f33f902171c4b5d00eabaacc7fb1da06e7f0eb Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 11 Oct 2021 22:31:18 +0100 Subject: [PATCH 32/62] Fixes Erroneous syntax highlighting of if construct with tags #204 Labels were only captured at the start and end of a statement. Now we are also capturing them in between for if conditionals. The edits in the end in "named-control-constructs" are meant to correctly handle whitespaces which before they were placed as part of the group returned to the invalid.error.xxx A unittest has been added testing the conditionals with/out labels. --- CHANGELOG.md | 2 + syntaxes/fortran_free-form.tmLanguage.json | 18 +- test/resources/conditionals.f90 | 41 ++++ test/resources/conditionals.f90.snap | 222 +++++++++++++++++++++ 4 files changed, 280 insertions(+), 3 deletions(-) create mode 100644 test/resources/conditionals.f90 create mode 100644 test/resources/conditionals.f90.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index d3ca81e3..cfd07aad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Fixes the general preprocessor syntax highlighting and adds testing - Fixes using function/subroutine as parameter in functions/subroutines ([#207](https://github.com/krvajal/vscode-fortran-support/issues/207)) +- Fixes labelled conditionals erroneous highlighting + ([#204](https://github.com/krvajal/vscode-fortran-support/issues/204)) ### Added diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 1585e3fa..13cd7115 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -17,7 +17,6 @@ "FPP", ".pf", ".PF" - ], "firstLineMatch": "(?i)-[*]- mode: fortran free -[*]-", "injections": { @@ -1353,7 +1352,7 @@ "comment": "Introduced in the Fortran 1990 standard.", "contentName": "meta.named-construct.fortran.modern", "begin": "(?ix)([a-z]\\w*)\\s*(:)(?=\\s*(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)", - "end": "(?i)\\s*(?!\\b(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)\\b(?:\\b(\\1)\\b)?(?:\\s*([^\\s;!][^;!\\n]*?))?(?=\\s*[;!\\n])", + "end": "(?i)(?!\\s*\\b(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)(?:\\b(\\1)\\b)?(?:\\s*([^\\s;!][^;!\\n]*?))?(?=\\s*[;!\\n])", "endCaptures": { "2": { "name": "invalid.error.named-control-constructs.fortran.modern" @@ -1611,10 +1610,14 @@ "include": "#parentheses" }, { - "match": "(?i)\\b(then)\\b", + "comment": "capture the label if present", + "match": "(?i)\\b(then)\\b(\\s*[a-z]\\w*)?", "captures": { "1": { "name": "keyword.control.then.fortran" + }, + "2": { + "name": "meta.label.elseif" } } }, @@ -1638,6 +1641,15 @@ "begin": "(?!(\\s*(;|!|\\n)))", "end": "(?=[;!\\n])", "patterns": [ + { + "comment": "capture the label if present", + "match": "\\s*([a-z]\\w*)?\\s*", + "captures": { + "1": { + "name": "meta.label.else" + } + } + }, { "include": "#invalid-word" } diff --git a/test/resources/conditionals.f90 b/test/resources/conditionals.f90 new file mode 100644 index 00000000..f736f61e --- /dev/null +++ b/test/resources/conditionals.f90 @@ -0,0 +1,41 @@ +! if +if (1 > 2) then +end if + +! if-else +if (1 > 2) then +else +end if + +! if-else-if-else +if (1 > 2) then +else if (2 < 1) then +else +end if + +! labelled if +label1: if (1 > 2) then +end if label1 + +! labelled if-else +label2: if (1 > 2) then +else label2 +end if label2 + +! labelled if-else-if-else +label3: if (1 > 2) then +else if (2 < 1) then label3 +else label3 +end if label3 + +! labelled if with whitespace after end label +label4: if (1 > 2) then +end if label4 ! bug continuous to new line + +! nested labels with whitespaces +if (1 > 2) then + label5: if (1) then + end if label5 ! +else +! whitespace in the "end if label5 " causes else to be incorrect +end if \ No newline at end of file diff --git a/test/resources/conditionals.f90.snap b/test/resources/conditionals.f90.snap new file mode 100644 index 00000000..170da3b2 --- /dev/null +++ b/test/resources/conditionals.f90.snap @@ -0,0 +1,222 @@ +>! if +#^ source.fortran.free comment.line.fortran +# ^^^ source.fortran.free comment.line.fortran +>if (1 > 2) then +#^^ source.fortran.free keyword.control.if.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free +# ^^^^ source.fortran.free keyword.control.then.fortran +>end if +#^^^^^^ source.fortran.free keyword.control.endif.fortran +> +>! if-else +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^ source.fortran.free comment.line.fortran +>if (1 > 2) then +#^^ source.fortran.free keyword.control.if.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free +# ^^^^ source.fortran.free keyword.control.then.fortran +>else +#^^^^ source.fortran.free meta.block.if.fortran keyword.control.else.fortran +>end if +#^^^^^^ source.fortran.free keyword.control.endif.fortran +> +>! if-else-if-else +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>if (1 > 2) then +#^^ source.fortran.free keyword.control.if.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free +# ^^^^ source.fortran.free keyword.control.then.fortran +>else if (2 < 1) then +#^^^^^^^ source.fortran.free meta.block.if.fortran keyword.control.elseif.fortran +# ^ source.fortran.free meta.block.if.fortran +# ^ source.fortran.free meta.block.if.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.block.if.fortran constant.numeric.fortran +# ^ source.fortran.free meta.block.if.fortran +# ^ source.fortran.free meta.block.if.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.block.if.fortran +# ^ source.fortran.free meta.block.if.fortran constant.numeric.fortran +# ^ source.fortran.free meta.block.if.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.block.if.fortran +# ^^^^ source.fortran.free meta.block.if.fortran keyword.control.then.fortran +>else +#^^^^ source.fortran.free meta.block.if.fortran keyword.control.else.fortran +>end if +#^^^^^^ source.fortran.free keyword.control.endif.fortran +> +>! labelled if +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>label1: if (1 > 2) then +#^^^^^^^ source.fortran.free +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.then.fortran +>end if label1 +#^^^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.endif.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran +# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran meta.parameter.fortran +> +>! labelled if-else +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>label2: if (1 > 2) then +#^^^^^^^ source.fortran.free +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.then.fortran +>else label2 +#^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.else.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran +# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.else +>end if label2 +#^^^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.endif.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran +# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran meta.parameter.fortran +> +>! labelled if-else-if-else +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>label3: if (1 > 2) then +#^^^^^^^ source.fortran.free +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.then.fortran +>else if (2 < 1) then label3 +#^^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.elseif.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran +# ^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.then.fortran +# ^^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.elseif +>else label3 +#^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.else.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran +# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.else +>end if label3 +#^^^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.endif.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran +# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran meta.parameter.fortran +> +>! labelled if with whitespace after end label +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>label4: if (1 > 2) then +#^^^^^^^ source.fortran.free +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.if.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.then.fortran +>end if label4 ! bug continuous to new line +#^^^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.endif.fortran +# ^^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran +# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran meta.parameter.fortran +# ^^^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran +# ^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +> +>! nested labels with whitespaces +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>if (1 > 2) then +#^^ source.fortran.free keyword.control.if.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran keyword.logical.fortran.modern +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free +# ^^^^ source.fortran.free keyword.control.then.fortran +> label5: if (1) then +#^^^ source.fortran.free meta.block.if.fortran +# ^^^^^^^ source.fortran.free meta.block.if.fortran +# ^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern +# ^^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern keyword.control.if.fortran +# ^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran +# ^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern +# ^^^^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern keyword.control.then.fortran +> end if label5 ! +#^^^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern meta.block.if.fortran +# ^^^^^^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern keyword.control.endif.fortran +# ^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern meta.statement.control.if.fortran +# ^^^^^^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern meta.statement.control.if.fortran meta.parameter.fortran +# ^ source.fortran.free meta.block.if.fortran meta.named-construct.fortran.modern meta.statement.control.if.fortran +# ^ source.fortran.free meta.block.if.fortran comment.line.fortran +>else +#^^^^ source.fortran.free meta.block.if.fortran keyword.control.else.fortran +>! whitespace in the "end if label5 " causes else to be incorrect +#^ source.fortran.free meta.block.if.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.block.if.fortran comment.line.fortran +>end if +#^^^^^^ source.fortran.free keyword.control.endif.fortran \ No newline at end of file From e9763d398f2ad62efb27dbfd107761064b106c70 Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 11 Oct 2021 22:48:10 +0100 Subject: [PATCH 33/62] Updated CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfd07aad..6311e2e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ([#207](https://github.com/krvajal/vscode-fortran-support/issues/207)) - Fixes labelled conditionals erroneous highlighting ([#204](https://github.com/krvajal/vscode-fortran-support/issues/204)) +- Fixes labelled conditionals erroneous highlighting when followed by whitespace + ([#205](https://github.com/krvajal/vscode-fortran-support/issues/205)) ### Added From 5a6039db78f88d8343b10e7af1393e500ad2f369 Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 11 Oct 2021 23:12:30 +0100 Subject: [PATCH 34/62] Fixes STOP named_string #172 `stop` can now handle labels --- CHANGELOG.md | 2 ++ syntaxes/fortran_free-form.tmLanguage.json | 5 ++- test/resources/conditionals.f90 | 7 +++- test/resources/conditionals.f90.snap | 40 +++++++++++++++++++++- 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6311e2e9..2982a15a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ([#204](https://github.com/krvajal/vscode-fortran-support/issues/204)) - Fixes labelled conditionals erroneous highlighting when followed by whitespace ([#205](https://github.com/krvajal/vscode-fortran-support/issues/205)) +- Fixes labelled `stop` conditions + ([#172](https://github.com/krvajal/vscode-fortran-support/issues/172)) ### Added diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 13cd7115..3a4f3854 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -2291,10 +2291,13 @@ "stop-statement": { "comment": "Introduced in the Fortran 1977 standard.", "name": "meta.statement.control.stop.fortran", - "begin": "(?i)\\s*\\b(stop)\\b", + "begin": "(?i)\\s*\\b(stop)\\b(?:\\s*\\b([a-z]\\w*)\\b)?", "beginCaptures": { "1": { "name": "keyword.control.stop.fortran" + }, + "2": { + "name": "meta.label.stop" } }, "end": "(?=[;!\\n])", diff --git a/test/resources/conditionals.f90 b/test/resources/conditionals.f90 index f736f61e..ef066bdf 100644 --- a/test/resources/conditionals.f90 +++ b/test/resources/conditionals.f90 @@ -38,4 +38,9 @@ end if label5 ! else ! whitespace in the "end if label5 " causes else to be incorrect -end if \ No newline at end of file +end if + +! stop +if (1) stop +if (1) stop label6 +if (1) stop "label"//"7" \ No newline at end of file diff --git a/test/resources/conditionals.f90.snap b/test/resources/conditionals.f90.snap index 170da3b2..692736ab 100644 --- a/test/resources/conditionals.f90.snap +++ b/test/resources/conditionals.f90.snap @@ -219,4 +219,42 @@ #^ source.fortran.free meta.block.if.fortran comment.line.fortran # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.block.if.fortran comment.line.fortran >end if -#^^^^^^ source.fortran.free keyword.control.endif.fortran \ No newline at end of file +#^^^^^^ source.fortran.free keyword.control.endif.fortran +> +>! stop +#^ source.fortran.free comment.line.fortran +# ^^^^^ source.fortran.free comment.line.fortran +>if (1) stop +#^^ source.fortran.free keyword.control.if.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran +# ^^^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran keyword.control.stop.fortran +>if (1) stop label6 +#^^ source.fortran.free keyword.control.if.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran +# ^^^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran keyword.control.stop.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran +# ^^^^^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran meta.label.stop +>if (1) stop "label"//"7" +#^^ source.fortran.free keyword.control.if.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran constant.numeric.fortran +# ^ source.fortran.free meta.expression.control.logical.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran +# ^^^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran keyword.control.stop.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +# ^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran keyword.other.concatination.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran \ No newline at end of file From 920ea640e01e3e4d8df2c132f7f2c2849041944c Mon Sep 17 00:00:00 2001 From: gnikit Date: Tue, 12 Oct 2021 11:27:13 +0100 Subject: [PATCH 35/62] Comments are correctly highlighted for type,... Fixes Erroneous syntax highlighting with type,abstract :: var #262 A unittest has been added and the CHANGELOG has been updated. --- CHANGELOG.md | 2 + syntaxes/fortran_free-form.tmLanguage.json | 5 +- test/resources/abstraction.f90 | 68 +++++ test/resources/abstraction.f90.snap | 308 +++++++++++++++++++++ 4 files changed, 382 insertions(+), 1 deletion(-) create mode 100644 test/resources/abstraction.f90 create mode 100644 test/resources/abstraction.f90.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 2982a15a..5ff1b018 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ([#205](https://github.com/krvajal/vscode-fortran-support/issues/205)) - Fixes labelled `stop` conditions ([#172](https://github.com/krvajal/vscode-fortran-support/issues/172)) +- Fixes incorrect comment capture for type, abstract|extends types + ([#262](https://github.com/krvajal/vscode-fortran-support/issues/262)) ### Added diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 3a4f3854..bb9dafc3 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -2385,6 +2385,9 @@ { "include": "#dummy-variable-list" }, + { + "include": "#comments" + }, { "comment": "Derived type specification block.", "name": "meta.block.specification.derived-type.fortran", @@ -4460,7 +4463,7 @@ "name": "punctuation.parentheses.left.fortran" }, "3": { - "name": "entity.name.module.fortran" + "name": "entity.name.class.submodule.fortran" } }, "end": "(\\))", diff --git a/test/resources/abstraction.f90 b/test/resources/abstraction.f90 new file mode 100644 index 00000000..98f66e2f --- /dev/null +++ b/test/resources/abstraction.f90 @@ -0,0 +1,68 @@ +! This is an example demonstrating abstraction and the benefit of using +! submodules. However for convenience of testing all files have been merged to 1 + +! base.f90 +module BaseClass + + implicit none + + type, abstract :: Base ! <-- the base class with subroutine "sub" + contains + procedure(sub_interface), nopass, deferred :: sub + end type + + interface + subroutine sub_interface(i) ! <-- the interface is defined here + implicit none + integer, intent(in) :: i + end subroutine sub_interface + end interface + +end module BaseClass + +! child.f90 +module ChildClass + + use BaseClass + implicit none + + type, extends(Base) :: Child ! <-- we extend the Base Class + contains + procedure, nopass :: sub + end type + + interface + module subroutine sub(i) ! <-- the interface for the submodule (unfortunately we have to declare the entire thing again) + implicit none + integer, intent(in) :: i + end subroutine sub + end interface + +end module ChildClass + +! sub.f90 +submodule (ChildClass) ChildSub + +contains + + module procedure sub ! <-- we finally get to define the subroutine + print*, "The answer is :", i + end procedure + +end submodule + +! main.f90 +program test + + use ChildClass + + implicit none + + type(Child) :: c + integer :: i + + do i=1, 10 + call c%sub(i) + end do + +end program test \ No newline at end of file diff --git a/test/resources/abstraction.f90.snap b/test/resources/abstraction.f90.snap new file mode 100644 index 00000000..e1f402f3 --- /dev/null +++ b/test/resources/abstraction.f90.snap @@ -0,0 +1,308 @@ +>! This is an example demonstrating abstraction and the benefit of using +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>! submodules. However for convenience of testing all files have been merged to 1 +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +> +>! base.f90 +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^ source.fortran.free comment.line.fortran +>module BaseClass +#^^^^^^ source.fortran.free meta.module.fortran keyword.other.program.fortran +# ^ source.fortran.free meta.module.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran entity.name.class.module.fortran +> +> implicit none +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.implicit.fortran keyword.other.none.fortran +> +> type, abstract :: Base ! <-- the base class with subroutine "sub" +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran storage.modifier.fortran.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran entity.name.type.fortran +# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran comment.line.fortran +> contains +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran keyword.control.contains.fortran +> procedure(sub_interface), nopass, deferred :: sub +#^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran storage.type.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.type-spec.fortran entity.name.function.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran storage.modifier.nopass.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran storage.modifier.deferred.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +> end type +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +> +> interface +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran keyword.control.interface.fortran +> subroutine sub_interface(i) ! <-- the interface is defined here +#^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran +# ^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.first-line.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran comment.line.fortran +> implicit none +#^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.implicit.fortran keyword.other.none.fortran +> integer, intent(in) :: i +#^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end subroutine sub_interface +#^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +> end interface +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran keyword.control.endinterface.fortran.modern +> +>end module BaseClass +#^^^^^^^^^^ source.fortran.free meta.module.fortran keyword.other.endmodule.fortran +# ^ source.fortran.free meta.module.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran entity.name.class.module.fortran +> +>! child.f90 +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^ source.fortran.free comment.line.fortran +>module ChildClass +#^^^^^^ source.fortran.free meta.module.fortran keyword.other.program.fortran +# ^ source.fortran.free meta.module.fortran +# ^^^^^^^^^^ source.fortran.free meta.module.fortran entity.name.class.module.fortran +> +> use BaseClass +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran keyword.control.use.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.use.fortran entity.name.class.module.fortran +> implicit none +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.statement.implicit.fortran keyword.other.none.fortran +> +> type, extends(Base) :: Child ! <-- we extend the Base Class +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran storage.modifier.extends.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran entity.name.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran entity.name.type.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran comment.line.fortran +> contains +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran keyword.control.contains.fortran +> procedure, nopass :: sub +#^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran storage.type.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran storage.modifier.nopass.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +> end type +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +> +> interface +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran keyword.control.interface.fortran +> module subroutine sub(i) ! <-- the interface for the submodule (unfortunately we have to declare the entire thing again) +#^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran storage.modifier.module.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.attribute-list.subroutine.fortran +# ^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran keyword.other.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran +# ^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.begin.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list variable.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.first-line.fortran keyword.dummy-variable-list punctuation.definition.parameters.end.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.first-line.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran comment.line.fortran +> implicit none +#^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.statement.implicit.fortran keyword.other.none.fortran +> integer, intent(in) :: i +#^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran storage.modifier.intent.in.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> end subroutine sub +#^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran meta.block.specification.subroutine.fortran +# ^^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran keyword.other.endsubroutine.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran +# ^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran meta.subroutine.fortran entity.name.function.subroutine.fortran +> end interface +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.interface.explicit.fortran keyword.control.endinterface.fortran.modern +> +>end module ChildClass +#^^^^^^^^^^ source.fortran.free meta.module.fortran keyword.other.endmodule.fortran +# ^ source.fortran.free meta.module.fortran +# ^^^^^^^^^^ source.fortran.free meta.module.fortran entity.name.class.module.fortran +> +>! sub.f90 +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^ source.fortran.free comment.line.fortran +>submodule (ChildClass) ChildSub +#^^^^^^^^^ source.fortran.free meta.submodule.fortran keyword.other.submodule.fortran +# ^ source.fortran.free meta.submodule.fortran +# ^ source.fortran.free meta.submodule.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^^^ source.fortran.free meta.submodule.fortran entity.name.class.submodule.fortran +# ^ source.fortran.free meta.submodule.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.submodule.fortran +# ^^^^^^^^ source.fortran.free meta.submodule.fortran entity.name.module.submodule.fortran +> +>contains +#^^^^^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran keyword.control.contains.fortran +> +> module procedure sub ! <-- we finally get to define the subroutine +#^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran +# ^^^^^^^^^^^^^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran keyword.other.procedure.fortran +# ^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran +# ^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran entity.name.function.procedure.fortran +# ^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran +# ^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran comment.line.fortran +> print*, "The answer is :", i +#^^^^^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran +# ^^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran keyword.control.print.fortran +# ^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran keyword.operator.power.fortran +# ^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran +# ^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran +# ^^^^^^^^^^^^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran string.quoted.double.fortran +# ^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +# ^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran +# ^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran meta.block.specification.procedure.fortran meta.parameter.fortran +> end procedure +#^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.submodule.fortran meta.block.specification.submodule.fortran meta.block.contains.fortran meta.procedure.fortran keyword.other.endprocedure.fortran +> +>end submodule +#^^^^^^^^^^^^^ source.fortran.free meta.submodule.fortran keyword.other.endsubmodule.fortran +> +>! main.f90 +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^ source.fortran.free comment.line.fortran +>program test +#^^^^^^^ source.fortran.free meta.program.fortran keyword.control.program.fortran +# ^ source.fortran.free meta.program.fortran +# ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran +> +> use ChildClass +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.use.fortran keyword.control.use.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.use.fortran +# ^^^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.use.fortran entity.name.class.module.fortran +> +> implicit none +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.none.fortran +> +> type(Child) :: c +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran storage.type.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.left.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran entity.name.type.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.specification.type.derived.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> integer :: i +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran storage.type.integer.fortran +# ^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran +> +> do i=1, 10 +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran keyword.control.do.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran +> call c%sub(i) +#^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran +# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran keyword.control.call.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran variable.other.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran punctuation.accessor.fortran +# ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran entity.name.function.subroutine.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran meta.parameter.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran punctuation.parentheses.right.fortran +> end do +#^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran +# ^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran keyword.control.enddo.fortran +> +>end program test +#^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran +# ^ source.fortran.free meta.program.fortran +# ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran \ No newline at end of file From 801c7f31fe8301446ad246477e5b3920ef665dd1 Mon Sep 17 00:00:00 2001 From: gnikit Date: Tue, 12 Oct 2021 14:10:16 +0100 Subject: [PATCH 36/62] Add syntax test for fixed form fortran --- package.json | 6 ++- test/resources/fixed_form.F | 32 +++++++++++ test/resources/fixed_form.F.snap | 93 ++++++++++++++++++++++++++++++++ 3 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 test/resources/fixed_form.F create mode 100644 test/resources/fixed_form.F.snap diff --git a/package.json b/package.json index f8b17fbd..0c872f35 100644 --- a/package.json +++ b/package.json @@ -211,8 +211,10 @@ "watch": "tsc -watch -p ./", "postinstall": "node ./node_modules/vscode/bin/install", "test": "CODE_TESTS_WORKSPACE='./' node ./node_modules/vscode/bin/test", - "test:grammar": "vscode-tmgrammar-snap -s source.fortran.free -g ./syntaxes/fortran_free-form.tmLanguage.json -t \"./test/**/*{.f90,F90}\"", - "test:grammar-update": "npm run test:grammar -- -u", + "test:grammar-free": "vscode-tmgrammar-snap -s source.fortran.free -g ./syntaxes/fortran_free-form.tmLanguage.json -t \"./test/**/*{.f90,F90}\"", + "test:grammar-fixed": "vscode-tmgrammar-snap -s source.fortran.fixed -g ./syntaxes/fortran_fixed-form.tmLanguage.json -t \"./test/**/*{.f,F}\"", + "test:grammar": "npm run test:grammar-free && npm run test:grammar-fixed", + "test:grammar-update": "npm run test:grammar -- -u", "lint": "node ./node_modules/tslint/bin/tslint ./src/**/*.ts " }, "devDependencies": { diff --git a/test/resources/fixed_form.F b/test/resources/fixed_form.F new file mode 100644 index 00000000..78d8d4cf --- /dev/null +++ b/test/resources/fixed_form.F @@ -0,0 +1,32 @@ +* euclid.f (FORTRAN 77) +* Find greatest common divisor using the Euclidean algorithm + + PROGRAM EUCLID + PRINT *, 'A?' + READ *, NA + IF (NA.LE.0) THEN + PRINT *, 'A must be a positive integer.' + STOP + END IF + PRINT *, 'B?' + READ *, NB + IF (NB.LE.0) THEN + PRINT *, 'B must be a positive integer.' + STOP + END IF + PRINT *, 'The GCD of', NA, ' and', NB, ' is', NGCD(NA, NB), '.' + STOP + END + + FUNCTION NGCD(NA, NB) + IA = NA + IB = NB + 1 IF (IB.NE.0) THEN + ITEMP = IA + IA = IB + IB = MOD(ITEMP, IB) + GOTO 1 + END IF + NGCD = IA + RETURN + END diff --git a/test/resources/fixed_form.F.snap b/test/resources/fixed_form.F.snap new file mode 100644 index 00000000..51b17b93 --- /dev/null +++ b/test/resources/fixed_form.F.snap @@ -0,0 +1,93 @@ +>* euclid.f (FORTRAN 77) +#^ source.fortran.fixed comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed comment.line.fortran +>* Find greatest common divisor using the Euclidean algorithm +#^ source.fortran.fixed comment.line.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed comment.line.fortran +> +> PROGRAM EUCLID +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^ source.fortran.fixed +> PRINT *, 'A?' +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.fixed +> READ *, NA +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^ source.fortran.fixed +> IF (NA.LE.0) THEN +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed +> PRINT *, 'A must be a positive integer.' +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed +> STOP +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^ source.fortran.fixed +> END IF +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^ source.fortran.fixed +> PRINT *, 'B?' +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.fixed +> READ *, NB +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^ source.fortran.fixed +> IF (NB.LE.0) THEN +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed +> PRINT *, 'B must be a positive integer.' +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed +> STOP +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^ source.fortran.fixed +> END IF +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^ source.fortran.fixed +> PRINT *, 'The GCD of', NA, ' and', NB, ' is', NGCD(NA, NB), '.' +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed +> STOP +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^ source.fortran.fixed +> END +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^ source.fortran.fixed +> +> FUNCTION NGCD(NA, NB) +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed +> IA = NA +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^ source.fortran.fixed +> IB = NB +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^ source.fortran.fixed +> 1 IF (IB.NE.0) THEN +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed +> ITEMP = IA +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.fixed +> IA = IB +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^ source.fortran.fixed +> IB = MOD(ITEMP, IB) +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.fortran.fixed +> GOTO 1 +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^ source.fortran.fixed +> END IF +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^ source.fortran.fixed +> NGCD = IA +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^^^^ source.fortran.fixed +> RETURN +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^^^^^^^ source.fortran.fixed +> END +#^^^^^^ source.fortran.fixed constant.numeric.fortran +# ^^^^ source.fortran.fixed +> \ No newline at end of file From b2211141a35055a2402aeeb67092af3965638ab7 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 15 Oct 2021 14:01:55 +0100 Subject: [PATCH 37/62] Switches to @types/vscode & @vscode/test-electron Also updates the tests to use strictEqual Adds production, test and dev tscofig compilation Fixes Migrate from vscode module #263 --- package.json | 28 +++++++++++++--------- test/extension.test.ts | 2 +- test/helper.test.ts | 22 +++++++++--------- test/index.ts | 53 ++++++++++++++++++++++++++---------------- test/runTest.ts | 25 ++++++++++++++++++++ test/tokenizer.test.ts | 14 +++++------ tsconfig.json | 1 - tsconfig.prod.json | 22 ++++++++++++++++++ tsconfig.test.json | 21 +++++++++++++++++ 9 files changed, 137 insertions(+), 51 deletions(-) create mode 100644 test/runTest.ts create mode 100644 tsconfig.prod.json create mode 100644 tsconfig.test.json diff --git a/package.json b/package.json index 0c872f35..41292931 100644 --- a/package.json +++ b/package.json @@ -207,10 +207,12 @@ }, "scripts": { "vscode:prepublish": "npm run compile", - "compile": "tsc -p ./", - "watch": "tsc -watch -p ./", - "postinstall": "node ./node_modules/vscode/bin/install", - "test": "CODE_TESTS_WORKSPACE='./' node ./node_modules/vscode/bin/test", + "compile": "tsc -p tsconfig.prod.json", + "compile-dev": "tsc -p tsconfig.json", + "watch": "tsc -watch -p tsconfig.prod.json", + "watch-dev": "tsc -watch -p tsconfig.json", + "pretest": "tsc -p tsconfig.test.json", + "test": "node ./out/test/runTest.js", "test:grammar-free": "vscode-tmgrammar-snap -s source.fortran.free -g ./syntaxes/fortran_free-form.tmLanguage.json -t \"./test/**/*{.f90,F90}\"", "test:grammar-fixed": "vscode-tmgrammar-snap -s source.fortran.fixed -g ./syntaxes/fortran_fixed-form.tmLanguage.json -t \"./test/**/*{.f,F}\"", "test:grammar": "npm run test:grammar-free && npm run test:grammar-fixed", @@ -218,14 +220,18 @@ "lint": "node ./node_modules/tslint/bin/tslint ./src/**/*.ts " }, "devDependencies": { - "@types/mocha": "^2.2.32", - "@types/node": "^15.12.1", - "husky": "^1.1.2", - "lint-staged": "^7.3.0", - "mocha": "^9.0.1", + "@types/glob": "^7.1.4", + "@types/mocha": "^9.0.0", + "@types/node": "^15.14.9", + "@types/vscode": "^1.30.0", + "@types/which": "^2.0.1", + "@vscode/test-electron": "^1.6.2", + "glob": "^7.2.0", + "husky": "^7.0.2", + "lint-staged": "^11.2.3", + "mocha": "^9.1.3", "tslint": "^5.20.1", - "typescript": "^3.5.1", - "vscode": "^1.1.37", + "typescript": "^3.9.10", "vscode-tmgrammar-test": "^0.0.11" }, "husky": { diff --git a/test/extension.test.ts b/test/extension.test.ts index 8f48b155..5272e23a 100644 --- a/test/extension.test.ts +++ b/test/extension.test.ts @@ -21,6 +21,6 @@ suite("Extension Tests", () => { vscode.window.showTextDocument(doc); const symbolProvider = new FortranDocumentSymbolProvider(); const symbols = await symbolProvider.provideDocumentSymbols(doc, null); - assert.equal(symbols.length, 1); + assert.strictEqual(symbols.length, 1); }); }); diff --git a/test/helper.test.ts b/test/helper.test.ts index f7525367..76e7ccc0 100644 --- a/test/helper.test.ts +++ b/test/helper.test.ts @@ -14,46 +14,46 @@ import { suite("function helper test", () => { test("validVariableName does not allow variables starting with number", () => { - assert.equal(false, validVariableName("1as")); + assert.strictEqual(false, validVariableName("1as")); }); test("validVariableName returns true with correct variable", () => { - assert.equal(true, validVariableName("matA")); + assert.strictEqual(true, validVariableName("matA")); }); test("validVariableName returns true for variables starting with uppercase", () => { - assert.equal(true, validVariableName("MatA")); + assert.strictEqual(true, validVariableName("MatA")); }); test("validVariableName return true for variable starting with _", () => { - assert.equal(true, validVariableName("_matA")); + assert.strictEqual(true, validVariableName("_matA")); }); test("parseFuntion return undefined on empty line", () => { - // assert.equal(undefined, parseFunction({text: ""})); + // assert.strictEqual(undefined, parseFunction({text: ""})); }); test("parseFuntion return undefined if function keyword is missing", () => { - // assert.equal(undefined, parseFunction({"hello")); + // assert.strictEqual(undefined, parseFunction({"hello")); }); test("parseFuntion return correct function name", () => { - // assert.equal("hello", parseFunction("function hello()").name); + // assert.strictEqual("hello", parseFunction("function hello()").name); }); test("parseFuntion return correct number of args", () => { - // assert.equal(2, parseFunction("function hello( a, b)").args.length); + // assert.strictEqual(2, parseFunction("function hello( a, b)").args.length); }); test("parseArgs return the correct number of args", () => { - assert.equal(2, parseArgs("a,b").length); + assert.strictEqual(2, parseArgs("a,b").length); }); test("parseArgs handle spaces well", () => { - assert.equal(2, parseArgs(" a, b").length); + assert.strictEqual(2, parseArgs(" a, b").length); }); test("parseArgs handle empty args", () => { - assert.equal(0, parseArgs("").length); + assert.strictEqual(0, parseArgs("").length); }); }); diff --git a/test/index.ts b/test/index.ts index 496cf0bd..215606cf 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1,25 +1,38 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for details. +import * as path from 'path'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; -// This file is used by VS Code's default test runner to configure Mocha before the test run. +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + color: true + }); -/* tslint:disable:no-var-keyword no-var-requires */ -var testRunner = require("vscode/lib/testrunner"); -/* tslint:enable:no-var-keyword no-var-requires */ + const testsRoot = __dirname; -let mochaOptions: any = { - ui: "tdd", - useColors: true, - invert: true, - grep: "debuggerContext" // Do not run tests intended for the debuggerContext -}; + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } -// Look for the env variable to decide wheter to use the TeamCity reporter or not -if (process.env.VSCODE_REACT_NATIVE_TEAMCITY_TEST) { - mochaOptions.reporter = "mocha-teamcity-reporter"; -} - -// Register Mocha options -testRunner.configure(mochaOptions); + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); -module.exports = testRunner; + try { + // Run the mocha test + mocha.timeout(100000); + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + e(err); + } + }); + }); +} diff --git a/test/runTest.ts b/test/runTest.ts new file mode 100644 index 00000000..b5d642b1 --- /dev/null +++ b/test/runTest.ts @@ -0,0 +1,25 @@ +import * as path from 'path'; + +import { runTests } from '@vscode/test-electron'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../'); + + // The path to the extension test runner script + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './index'); + + const launchArgs = ["--disable-extensions", "--install-extension ms-vscode.cpptools"]; + // Download VS Code, unzip it and run the integration test + await runTests({ launchArgs, extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error(err); + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/test/tokenizer.test.ts b/test/tokenizer.test.ts index e9a76a7b..b8adcd07 100644 --- a/test/tokenizer.test.ts +++ b/test/tokenizer.test.ts @@ -6,12 +6,12 @@ import { Tokenizer, TokenType } from '../src/lib/tokenizer'; suite("fortran tokenizer", () => { - test("get correct amount of tokens", () => { - const fortranTokenizer = constructFortranTokenizer(); - fortranTokenizer.tokenize("function a( m, n)\n 2 + 3\nend"); - let tokens = fortranTokenizer.tokens; - assert.equal(tokens.length, 11); - }); + test("get correct amount of tokens", () => { + const fortranTokenizer = constructFortranTokenizer(); + fortranTokenizer.tokenize("function a( m, n)\n 2 + 3\nend"); + let tokens = fortranTokenizer.tokens; + assert.strictEqual(tokens.length, 11); + }); }); function constructFortranTokenizer() { @@ -28,4 +28,4 @@ function constructFortranTokenizer() { tokenizer.add(/^,\s*/, TokenType.COMMA); // comma separator tokenizer.add(/[+\-*\/]\s*/, TokenType.BINARY_OPERATOR); // operators return tokenizer; -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index 750e86bd..2c787488 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,6 @@ "include": [ "src/**/*.ts", "src/docs/**/*.json", - "test/**/*.ts" ], "exclude": [ "node_modules", diff --git a/tsconfig.prod.json b/tsconfig.prod.json new file mode 100644 index 00000000..ae79cf22 --- /dev/null +++ b/tsconfig.prod.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "outDir": "out", + "lib": [ + "es6" + ], + "sourceMap": false, + "removeComments": true, + "rootDir": ".", + "resolveJsonModule": true + }, + "include": [ + "src/**/*.ts", + "src/docs/**/*.json", + ], + "exclude": [ + "node_modules", + ".vscode-test" + ] +} \ No newline at end of file diff --git a/tsconfig.test.json b/tsconfig.test.json new file mode 100644 index 00000000..4e7122cc --- /dev/null +++ b/tsconfig.test.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "outDir": "out", + "lib": [ + "es6" + ], + "sourceMap": true, + "rootDir": ".", + "resolveJsonModule": true + }, + "include": [ + "test/**/*.ts", + "syntaxes/*.json", + ], + "exclude": [ + "node_modules", + ".vscode-test" + ] +} \ No newline at end of file From 3a352419a50ea0262c33014bdfa57a8b153b8b2b Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 15 Oct 2021 15:06:26 +0100 Subject: [PATCH 38/62] Updated changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ff1b018..f317a160 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Changes the syntax highlighting of preprocessor macros to match that of C++ +- Changes npm `vscode` module to `@types/vscode` and `@vscode/test-electron` + ([#263](https://github.com/krvajal/vscode-fortran-support/issues/263)) ### Fixed From 595f10da3b4d84880bcfbd459db4d7cd90df4e9b Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 15 Oct 2021 15:08:04 +0100 Subject: [PATCH 39/62] Updated yarn.lock --- yarn.lock | 2083 ++++++++++++++--------------------------------------- 1 file changed, 547 insertions(+), 1536 deletions(-) diff --git a/yarn.lock b/yarn.lock index 73723c5e..5c3f0533 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,16 +3,16 @@ "@babel/code-frame@^7.0.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" + integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== dependencies: "@babel/highlight" "^7.14.5" "@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== "@babel/highlight@^7.14.5": version "7.14.5" @@ -23,39 +23,68 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" - integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== - dependencies: - any-observable "^0.3.0" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@types/mocha@^2.2.32": - version "2.2.48" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.48.tgz#3523b126a0b049482e1c3c11877460f76622ffab" - integrity sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw== +"@types/glob@^7.1.4": + version "7.1.4" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" + integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/mocha@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.0.0.tgz#3205bcd15ada9bc681ac20bef64e9e6df88fd297" + integrity sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA== -"@types/node@^15.12.1": - version "15.12.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.5.tgz#9a78318a45d75c9523d2396131bd3cca54b2d185" - integrity sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg== +"@types/node@*": + version "16.11.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.0.tgz#4b95f2327bacd1ef8f08d8ceda193039c5d7f52e" + integrity sha512-8MLkBIYQMuhRBQzGN9875bYsOhPnf/0rgXGo66S2FemHkhbn9qtsz9ywV1iCG+vbjigE4WUNVvw37Dx+L0qsPg== + +"@types/node@^15.14.9": + version "15.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" + integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/vscode@^1.30.0": + version "1.61.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.61.0.tgz#c54335b6f84c19c69b1435b17cc0ce3b2cecfeec" + integrity sha512-9k5Nwq45hkRwdfCFY+eKXeQQSbPoA114mF7U/4uJXRBJeGIO7MuJdhF1PnaDN+lllL9iKGQtd6FFXShBXMNaFg== + +"@types/which@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/which/-/which-2.0.1.tgz#27ecd67f915b7c3d6ba552135bb1eecd66e63501" + integrity sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ== "@ungap/promise-all-settled@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== +"@vscode/test-electron@^1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-1.6.2.tgz#f639cab19a0013949015079dcfd2ff0c1aa88a1b" + integrity sha512-W01ajJEMx6223Y7J5yaajGjVs1QfW3YGkkOJHVKfAMEqNB1ZHN9wCcViehv5ZwVSSJnjhu6lYEYgwBdHtCxqhQ== dependencies: - es6-promisify "^5.0.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + rimraf "^3.0.2" + unzipper "^0.10.11" agent-base@6: version "6.0.2" @@ -64,37 +93,32 @@ agent-base@6: dependencies: debug "4" -ansi-colors@4.1.1: +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ansi-colors@4.1.1, ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -108,12 +132,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - -anymatch@~3.1.1: +anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -133,59 +152,39 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" +big-integer@^1.6.17: + version "1.6.50" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.50.tgz#299a4be8bd441c73dcc492ed46b7169c34e92e70" + integrity sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ== binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -194,23 +193,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@~3.0.2: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -222,67 +205,39 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-indexof-polyfill@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" + integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== + +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^6.0.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + traverse ">=0.3.0 <0.4" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -292,57 +247,47 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4 supports-color "^5.3.0" chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== +chokidar@3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" + restore-cursor "^3.1.0" -cli-cursor@^2.0.0, cli-cursor@^2.1.0: +cli-truncate@2.1.0, cli-truncate@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: - restore-cursor "^2.0.0" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" + slice-ansi "^3.0.0" + string-width "^4.2.0" cliui@^7.0.2: version "7.0.4" @@ -353,19 +298,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -390,136 +322,63 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -commander@2.15.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== +colorette@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -commander@^2.12.1, commander@^2.14.1, commander@^2.20.3, commander@^2.9.0: +commander@^2.12.1, commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +commander@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.2.0.tgz#37fe2bde301d87d47a53adeff8b5915db1381ca8" + integrity sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -cosmiconfig@^5.0.2, cosmiconfig@^5.0.7: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== +cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: - ms "2.0.0" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" -debug@4, debug@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== +debug@4, debug@4.3.2, debug@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -530,22 +389,24 @@ diff@^4.0.1, diff@^4.0.2: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== +enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: - once "^1.4.0" + ansi-colors "^4.1.1" error-ex@^1.3.1: version "1.3.2" @@ -554,130 +415,40 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - escape-string-regexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -execa@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" - integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA== - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" fill-range@^7.0.1: version "7.0.1" @@ -686,11 +457,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-parent-dir@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.1.tgz#c5c385b96858c3351f95d446cab866cbf9f11125" - integrity sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A== - find-up@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -699,40 +465,31 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.3.1: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -748,39 +505,22 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -glob-parent@~5.1.0: +glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -789,10 +529,10 @@ glob@7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.7, glob@^7.1.1, glob@^7.1.2, glob@^7.1.6: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== +glob@^7.1.1, glob@^7.1.3, glob@^7.1.6, glob@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -801,18 +541,16 @@ glob@7.1.7, glob@^7.1.1, glob@^7.1.2, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +graceful-fs@^4.1.2, graceful-fs@^4.2.2: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -823,37 +561,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -861,29 +568,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -he@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= - he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -893,14 +582,6 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -https-proxy-agent@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -909,34 +590,28 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -husky@^1.1.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" - integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg== - dependencies: - cosmiconfig "^5.0.7" - execa "^1.0.0" - find-up "^3.0.0" - get-stdin "^6.0.0" - is-ci "^2.0.0" - pkg-dir "^3.0.0" - please-upgrade-node "^3.1.1" - read-pkg "^4.0.1" - run-node "^1.0.0" - slash "^2.0.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +husky@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.2.tgz#21900da0f30199acca43a46c043c4ad84ae88dff" + integrity sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" + parent-module "^1.0.0" + resolve-from "^4.0.0" -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" @@ -946,25 +621,11 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@~2.0.0, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -977,110 +638,30 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1091,51 +672,27 @@ is-obj@^1.0.1: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-promise@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -isarray@1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -1145,33 +702,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -jest-get-type@^22.1.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== - -jest-validate@^23.5.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" - integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.6.0" - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -1192,119 +722,53 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +lint-staged@^11.2.3: + version "11.2.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.2.3.tgz#fc3f4569cc4f46553309dfc1447b8aef69f744fb" + integrity sha512-Tfmhk8O2XFMD25EswHPv+OYhUjsijy5D7liTdxeXvhG2rsadmOLFtyj8lmlfoFFXY8oXWAIOKpoI+lJe1DB1mw== + dependencies: + cli-truncate "2.1.0" + colorette "^1.4.0" + commander "^8.2.0" + cosmiconfig "^7.0.1" + debug "^4.3.2" + enquirer "^2.3.6" + execa "^5.1.1" + listr2 "^3.12.2" + micromatch "^4.0.4" + normalize-path "^3.0.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" + stringify-object "3.3.0" + supports-color "8.1.1" -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - -lint-staged@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.3.0.tgz#90ff33e5ca61ed3dbac35b6f6502dbefdc0db58d" - integrity sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw== - dependencies: - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^5.0.2" - debug "^3.1.0" - dedent "^0.7.0" - execa "^0.9.0" - find-parent-dir "^0.3.0" - is-glob "^4.0.0" - is-windows "^1.0.2" - jest-validate "^23.5.0" - listr "^0.14.1" - lodash "^4.17.5" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.1" - string-argv "^0.0.2" - stringify-object "^3.2.2" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.1: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= + +listr2@^3.12.2: + version "3.12.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.12.2.tgz#2d55cc627111603ad4768a9e87c9c7bb9b49997e" + integrity sha512-64xC2CJ/As/xgVI3wbhlPWVPx0wfTqbUAkpb7bjDi0thSWMqrf07UFhrfsGoo8YSXmF049Rp9C0cjLC8rZxK9A== + dependencies: + cli-truncate "^2.1.0" + colorette "^1.4.0" + log-update "^4.0.0" + p-map "^4.0.0" + rxjs "^6.6.7" + through "^2.3.8" + wrap-ansi "^7.0.0" locate-path@^6.0.0: version "6.0.0" @@ -1313,11 +777,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash@^4.17.5: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - log-symbols@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -1326,72 +785,33 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: - chalk "^2.0.1" + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" + braces "^3.0.1" + picomatch "^2.2.3" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" @@ -1400,65 +820,28 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -mkdirp@^0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mocha@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" - integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== - dependencies: - browser-stdout "1.3.1" - commander "2.15.1" - debug "3.1.0" - diff "3.5.0" - escape-string-regexp "1.0.5" - glob "7.1.2" - growl "1.10.5" - he "1.1.1" - minimatch "3.0.4" - mkdirp "0.5.1" - supports-color "5.4.0" - -mocha@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.0.1.tgz#01e66b7af0012330c0a38c4b6eaa6d92b8a81bf9" - integrity sha512-9zwsavlRO+5csZu6iRtl3GHImAbhERoDsZwdRkdJ/bE+eVplmoxNKE901ZJ9LdSchYBjSCPbjKc5XvcAri2ylw== +mocha@^9.1.3: + version "9.1.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.1.3.tgz#8a623be6b323810493d8c8f6f7667440fa469fdb" + integrity sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" - chokidar "3.5.1" - debug "4.3.1" + chokidar "3.5.2" + debug "4.3.2" diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" @@ -1469,155 +852,56 @@ mocha@^9.0.1: log-symbols "4.1.0" minimatch "3.0.4" ms "2.1.3" - nanoid "3.1.23" - serialize-javascript "5.0.1" + nanoid "3.1.25" + serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" which "2.0.2" - wide-align "1.1.3" - workerpool "6.1.4" + workerpool "6.1.5" yargs "16.2.0" yargs-parser "20.2.4" yargs-unparser "2.0.0" -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanoid@3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" +nanoid@3.1.25: + version "3.1.25" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" + integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - isobject "^3.0.1" + path-key "^3.0.0" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: - p-try "^2.0.0" + mimic-fn "^2.1.0" p-limit@^3.0.2: version "3.1.0" @@ -1626,13 +910,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -1640,38 +917,29 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -parse-json@^4.0.0: +p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" + aggregate-error "^3.0.0" -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" path-exists@^4.0.0: version "4.0.0" @@ -1683,70 +951,37 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -picomatch@^2.0.4, picomatch@^2.2.1: +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: +please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== dependencies: semver-compare "^1.0.0" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== randombytes@^2.1.0: version "2.1.0" @@ -1755,56 +990,37 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -read-pkg@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" - integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= +readable-stream@^2.0.2, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: - normalize-package-data "^2.3.2" - parse-json "^4.0.0" - pify "^3.0.0" + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.10.0, resolve@^1.3.2: +resolve@^1.3.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -1812,25 +1028,29 @@ resolve@^1.10.0, resolve@^1.3.2: is-core-module "^2.2.0" path-parse "^1.0.6" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: - onetime "^2.0.0" + onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +rimraf@2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" -rxjs@^6.3.3: +rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -1842,214 +1062,95 @@ safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +semver@^5.3.0, semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -serialize-javascript@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +setimmediate@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -slash@^2.0.0: +shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.0: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" + shebang-regex "^3.0.0" -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.5" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" + integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== -spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - extend-shallow "^3.0.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -staged-git-files@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b" - integrity sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" +string-argv@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" -stringify-object@^3.2.2: +stringify-object@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== @@ -2058,44 +1159,23 @@ stringify-object@^3.2.2: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^2.0.0" + ansi-regex "^5.0.1" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" - integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== - dependencies: - has-flag "^3.0.0" - supports-color@8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -2103,11 +1183,6 @@ supports-color@8.1.1: dependencies: has-flag "^4.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2122,25 +1197,10 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= to-regex-range@^5.0.1: version "5.0.1" @@ -2149,15 +1209,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" @@ -2190,46 +1245,36 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" -typescript@^3.5.1: +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typescript@^3.9.10: version "3.9.10" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" +unzipper@^0.10.11: + version "0.10.11" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" + integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + graceful-fs "^4.2.2" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= vscode-jsonrpc@^4.0.0: version "4.0.0" @@ -2262,14 +1307,6 @@ vscode-oniguruma@^1.5.1: resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.5.1.tgz#9ca10cd3ada128bd6380344ea28844243d11f695" integrity sha512-JrBZH8DCC262TEYcYdeyZusiETu0Vli0xFgdRwNJjDcObcRjbmJP+IFcA3ScBwIXwgFHYKbAgfxtM/Cl+3Spjw== -vscode-test@^0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/vscode-test/-/vscode-test-0.4.3.tgz#461ebf25fc4bc93d77d982aed556658a2e2b90b8" - integrity sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w== - dependencies: - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - vscode-textmate@^5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.4.0.tgz#4b25ffc1f14ac3a90faf9a388c67a01d24257cd7" @@ -2287,52 +1324,26 @@ vscode-tmgrammar-test@^0.0.11: vscode-oniguruma "^1.5.1" vscode-textmate "^5.4.0" -vscode@^1.1.37: - version "1.1.37" - resolved "https://registry.yarnpkg.com/vscode/-/vscode-1.1.37.tgz#c2a770bee4bb3fff765e2b72c7bcc813b8a6bb0a" - integrity sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg== - dependencies: - glob "^7.1.2" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - mocha "^5.2.0" - semver "^5.4.1" - source-map-support "^0.5.0" - vscode-test "^0.4.1" - -which@2.0.2: +which@2.0.2, which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -which@^1.2.10, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -workerpool@6.1.4: - version "6.1.4" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.4.tgz#6a972b6df82e38d50248ee2820aa98e2d0ad3090" - integrity sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g== +workerpool@6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581" + integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw== -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrap-ansi@^7.0.0: version "7.0.0" @@ -2353,10 +1364,10 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yargs-parser@20.2.4: version "20.2.4" From fd6c177d21c40cd4bcac8a508f1f159c421d9d4e Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 15 Oct 2021 15:14:19 +0100 Subject: [PATCH 40/62] Increments version to 2.4.0 Release a tag after token is uploaded --- CHANGELOG.md | 6 +- package-lock.json | 3220 +++++++++------------------------------------ package.json | 2 +- 3 files changed, 656 insertions(+), 2572 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f317a160..66c306c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] -## [2.3.1] +## [2.4.0] ### Changed @@ -273,8 +273,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Initial release -[unreleased]: https://github.com/krvajal/vscode-fortran-support/compare/v2.3.1...HEAD -[2.3.1]: https://github.com/krvajal/vscode-fortran-support/compare/v2.3.0...v2.3.1 +[unreleased]: https://github.com/krvajal/vscode-fortran-support/compare/v2.4.0...HEAD +[2.4.0]: https://github.com/krvajal/vscode-fortran-support/compare/v2.3.0...v2.4.0 [2.3.0]: https://github.com/krvajal/vscode-fortran-support/compare/v2.2.2...v2.3.0 [2.2.2]: https://github.com/krvajal/vscode-fortran-support/compare/2.2.1...v2.2.1 [2.2.1]: https://github.com/krvajal/vscode-fortran-support/compare/2.2.0...v2.2.1 diff --git a/package-lock.json b/package-lock.json index 981b8ed9..9a945bf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "linter-gfortran", - "version": "2.3.1", + "version": "2.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -73,34 +73,56 @@ } } }, - "@samverschueren/stream-to-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", - "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", - "dev": true, - "requires": { - "any-observable": "^0.3.0" - } - }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, - "@types/mocha": { - "version": "2.2.45", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.45.tgz", - "integrity": "sha512-tE1SYtNG3I3atRVPELSGN2FJJJtPg3O/G0tycYSyzeDqdAbdLPRH089LhpWYA5M/iHeWHkVZq/b0OVKngcK0Eg==", + "@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", "dev": true, "requires": { + "@types/minimatch": "*", "@types/node": "*" } }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/mocha": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", + "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "dev": true + }, "@types/node": { - "version": "15.12.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz", - "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==", + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/vscode": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.61.0.tgz", + "integrity": "sha512-9k5Nwq45hkRwdfCFY+eKXeQQSbPoA114mF7U/4uJXRBJeGIO7MuJdhF1PnaDN+lllL9iKGQtd6FFXShBXMNaFg==", + "dev": true + }, + "@types/which": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.1.tgz", + "integrity": "sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==", "dev": true }, "@ungap/promise-all-settled": { @@ -109,6 +131,18 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "@vscode/test-electron": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-1.6.2.tgz", + "integrity": "sha512-W01ajJEMx6223Y7J5yaajGjVs1QfW3YGkkOJHVKfAMEqNB1ZHN9wCcViehv5ZwVSSJnjhu6lYEYgwBdHtCxqhQ==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + } + }, "agent-base": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", @@ -135,6 +169,16 @@ } } }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -142,28 +186,45 @@ "dev": true }, "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } }, "anymatch": { "version": "3.1.2", @@ -184,40 +245,10 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "balanced-match": { @@ -226,65 +257,20 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "big-integer": { + "version": "1.6.50", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz", + "integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ==", + "dev": true + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" } }, "binary-extensions": { @@ -293,6 +279,12 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", @@ -304,32 +296,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" } }, "browser-stdout": { @@ -338,10 +310,16 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", "dev": true }, "builtin-modules": { @@ -350,45 +328,10 @@ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { @@ -397,155 +340,75 @@ "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "dependencies": { "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "readdirp": "~3.6.0" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" } }, "cliui": { @@ -557,91 +420,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" } }, "color-convert": { @@ -659,98 +437,61 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cosmiconfig": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", - "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - } + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "2.1.2" } }, "decamelize": { @@ -759,76 +500,20 @@ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } }, "emoji-regex": { "version": "8.0.0", @@ -836,39 +521,24 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { - "once": "^1.4.0" + "ansi-colors": "^4.1.1" } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -876,206 +546,37 @@ "dev": true }, "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -1084,35 +585,6 @@ "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" - }, - "dependencies": { - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } } }, "flat": { @@ -1121,21 +593,6 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1149,6 +606,29 @@ "dev": true, "optional": true }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -1162,27 +642,21 @@ "dev": true }, "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true }, "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1200,19 +674,14 @@ "dev": true, "requires": { "is-glob": "^4.0.1" - }, - "dependencies": { - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } } }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -1228,65 +697,12 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -1342,121 +758,34 @@ } } }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, "husky": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", - "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.7", - "execa": "^1.0.0", - "find-up": "^3.0.0", - "get-stdin": "^6.0.0", - "is-ci": "^2.0.0", - "pkg-dir": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "read-pkg": "^4.0.1", - "run-node": "^1.0.0", - "slash": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } - } + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.2.tgz", + "integrity": "sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg==", + "dev": true }, "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1473,15 +802,6 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -1497,30 +817,6 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, "is-core-module": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", @@ -1530,46 +826,6 @@ "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1577,28 +833,25 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-obj": { "version": "1.0.1", @@ -1606,36 +859,12 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "dev": true, - "requires": { - "symbol-observable": "^1.1.0" - } - }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", @@ -1643,9 +872,9 @@ "dev": true }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-unicode-supported": { @@ -1654,10 +883,10 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isexe": { @@ -1666,73 +895,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-get-type": { - "version": "22.4.3", - "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", - "dev": true - }, - "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1757,405 +919,144 @@ } } }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, "lint-staged": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.3.0.tgz", - "integrity": "sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw==", - "dev": true, - "requires": { - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.0.2", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "execa": "^0.9.0", - "find-parent-dir": "^0.3.0", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "jest-validate": "^23.5.0", - "listr": "^0.14.1", - "lodash": "^4.17.5", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.1", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2" + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.3.tgz", + "integrity": "sha512-Tfmhk8O2XFMD25EswHPv+OYhUjsijy5D7liTdxeXvhG2rsadmOLFtyj8lmlfoFFXY8oXWAIOKpoI+lJe1DB1mw==", + "dev": true, + "requires": { + "cli-truncate": "2.1.0", + "colorette": "^1.4.0", + "commander": "^8.2.0", + "cosmiconfig": "^7.0.1", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "execa": "^5.1.1", + "listr2": "^3.12.2", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "3.3.0", + "supports-color": "8.1.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "execa": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz", - "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.2.0.tgz", + "integrity": "sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "listr2": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.12.2.tgz", + "integrity": "sha512-64xC2CJ/As/xgVI3wbhlPWVPx0wfTqbUAkpb7bjDi0thSWMqrf07UFhrfsGoo8YSXmF049Rp9C0cjLC8rZxK9A==", "dev": true, "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "dependencies": { - "p-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz", - "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==", - "dev": true - } + "cli-truncate": "^2.1.0", + "colorette": "^1.4.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.7", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" } }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - } + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" } }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } } } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "object-visit": "^1.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimatch": { @@ -2173,27 +1074,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -2204,16 +1084,16 @@ } }, "mocha": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.1.tgz", - "integrity": "sha512-9zwsavlRO+5csZu6iRtl3GHImAbhERoDsZwdRkdJ/bE+eVplmoxNKE901ZJ9LdSchYBjSCPbjKc5XvcAri2ylw==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", + "chokidar": "3.5.2", + "debug": "4.3.2", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", @@ -2224,92 +1104,23 @@ "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", - "nanoid": "3.1.23", - "serialize-javascript": "5.0.1", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.4", + "workerpool": "6.1.5", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -2339,171 +1150,39 @@ "argparse": "^2.0.1" } }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": true }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "requires": { - "which": "^1.2.10" - } - }, "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - } - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "isobject": "^3.0.1" + "path-key": "^3.0.0" } }, "once": { @@ -2516,55 +1195,61 @@ } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^3.0.2" } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } }, "path-exists": { "version": "4.0.0", @@ -2578,16 +1263,10 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { @@ -2596,90 +1275,33 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - } - } - }, "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, "requires": { "semver-compare": "^1.0.0" } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - } - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -2689,37 +1311,30 @@ "safe-buffer": "^5.1.0" } }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "picomatch": "^2.2.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "picomatch": "^2.2.1" } }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2737,313 +1352,102 @@ } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "dev": true - }, - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "glob": "^7.1.3" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { - "kind-of": "^3.2.0" + "tslib": "^1.9.0" } }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "randombytes": "^2.1.0" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "spdx-license-ids": "^1.0.2" + "shebang-regex": "^3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, "sprintf-js": { @@ -3052,64 +1456,30 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "staged-git-files": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.1.tgz", - "integrity": "sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==", + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "string-argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", - "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "safe-buffer": "~5.1.0" } }, "stringify-object": { @@ -3124,18 +1494,18 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "strip-json-comments": { @@ -3153,43 +1523,27 @@ "has-flag": "^4.0.0" } }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -3275,196 +1629,41 @@ "tslib": "^1.8.1" } }, - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", "dev": true, "requires": { - "spdx-correct": "~1.0.0", - "spdx-expression-parse": "~1.0.0" + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" } }, - "vscode": { - "version": "1.1.37", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.37.tgz", - "integrity": "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg==", - "dev": true, - "requires": { - "glob": "^7.1.2", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "mocha": "^5.2.0", - "semver": "^5.4.1", - "source-map-support": "^0.5.0", - "vscode-test": "^0.4.1" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "vscode-jsonrpc": { "version": "4.0.0", @@ -3507,62 +1706,6 @@ "integrity": "sha512-JrBZH8DCC262TEYcYdeyZusiETu0Vli0xFgdRwNJjDcObcRjbmJP+IFcA3ScBwIXwgFHYKbAgfxtM/Cl+3Spjw==", "dev": true }, - "vscode-test": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", - "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", - "dev": true, - "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1" - }, - "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "vscode-textmate": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.4.0.tgz", @@ -3653,54 +1796,29 @@ } }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "workerpool": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.4.tgz", - "integrity": "sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", "dev": true }, "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { @@ -3715,10 +1833,10 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { @@ -3734,40 +1852,6 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "yargs-parser": { diff --git a/package.json b/package.json index 41292931..eca813e6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "linter-gfortran", "displayName": "Modern Fortran", "description": "Modern Fortran language support, including syntax highlighting and error detection.", - "version": "2.3.1", + "version": "2.4.0", "publisher": "krvajalm", "license": "MIT", "author": { From 37cdec20209da4fd3c8f5d829410c0de29541f97 Mon Sep 17 00:00:00 2001 From: gnikit Date: Mon, 18 Oct 2021 19:30:32 +0100 Subject: [PATCH 41/62] Updated tasks.json and launch.json External extensions are enabled since we need the C++ extension for VSCode to launch without throwing an error. The tasks.json has been updated to call directly scripts from package. --- .vscode/launch.json | 10 +++---- .vscode/tasks.json | 64 ++++++++++++++++++++++++--------------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index dcdcdebf..b6afce22 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -14,25 +14,21 @@ "outFiles": [ "${workspaceFolder}/out/src/**/*.js" ], - "preLaunchTask": "npm: watch", + "preLaunchTask": "npm: watch-dev", }, { "name": "Launch Tests", "type": "extensionHost", "request": "launch", - "env": { - "CODE_TESTS_WORKSPACE": "./" - }, + "runtimeExecutable": "${execPath}", "args": [ - "${workspaceFolder}/test/resources/sample.f90", - "--disable-extensions", "--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=${workspaceFolder}/out/test" ], "outFiles": [ "${workspaceFolder}/out/test/**/*.js" ], - "preLaunchTask": "npm: compile", + "preLaunchTask": "npm: pretest setup", }, ] } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index ccdeccb0..55e65e80 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,44 +1,48 @@ -// Available variables which can be used inside of strings. -// ${workspaceRoot}: the root folder of the team -// ${file}: the current opened file -// ${fileBasename}: the current opened file's basename -// ${fileDirname}: the current opened file's dirname -// ${fileExtname}: the current opened file's extension -// ${cwd}: the current working directory of the spawned process -// A task runner that calls a custom npm script that compiles the extension. { "version": "2.0.0", "tasks": [ { - "label": "npm: watch", - "type": "shell", - "command": "npm", - "args": [ - "run", - "watch", - "--loglevel", - "silent" - ], - "isBackground": true, - "problemMatcher": "$tsc-watch", + "label": "npm: watch-dev", + "type": "npm", + "script": "watch-dev", "group": { "kind": "build", "isDefault": true - } + }, + "isBackground": true, + "problemMatcher": "$tsc-watch", + "detail": "tsc -watch -p tsconfig.json" + }, + { + "label": "npm: compile-dev", + "type": "npm", + "script": "compile-dev", + "group": "build", + "problemMatcher": "$tsc", + "detail": "tsc -p tsconfig.json" + }, + { + "label": "npm: pretest", + "type": "npm", + "script": "pretest", + "group": "test", + "problemMatcher": "$tsc", + "detail": "tsc -p tsconfig.test.json" }, { - "label": "npm: compile", + "label": "npm: pretest setup", "type": "shell", - "command": "npm", - "args": [ - "run", - "compile", - "--loglevel", - "silent" + "dependsOn": [ + "npm: compile-dev", + "npm: pretest" ], - "isBackground": true, - "problemMatcher": "$tsc-watch", - "group": "build" + "dependsOrder": "sequence", + "group": { + "kind": "test", + "isDefault": true + }, + "detail": "setup for test launch" + } ] } \ No newline at end of file From dd9466692acf30d117ba3a4be2a6d97156a79313 Mon Sep 17 00:00:00 2001 From: gnikit Date: Tue, 19 Oct 2021 11:58:51 +0100 Subject: [PATCH 42/62] Updated names of scopes to contain fortran --- syntaxes/fortran_free-form.tmLanguage.json | 6 +++--- test/resources/conditionals.f90.snap | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index bb9dafc3..c30e3d4d 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -1617,7 +1617,7 @@ "name": "keyword.control.then.fortran" }, "2": { - "name": "meta.label.elseif" + "name": "meta.label.elseif.fortran" } } }, @@ -1646,7 +1646,7 @@ "match": "\\s*([a-z]\\w*)?\\s*", "captures": { "1": { - "name": "meta.label.else" + "name": "meta.label.else.fortran" } } }, @@ -2297,7 +2297,7 @@ "name": "keyword.control.stop.fortran" }, "2": { - "name": "meta.label.stop" + "name": "meta.label.stop.stop" } }, "end": "(?=[;!\\n])", diff --git a/test/resources/conditionals.f90.snap b/test/resources/conditionals.f90.snap index 692736ab..e212ba09 100644 --- a/test/resources/conditionals.f90.snap +++ b/test/resources/conditionals.f90.snap @@ -110,7 +110,7 @@ >else label2 #^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.else.fortran # ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran -# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.else +# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.else.fortran >end if label2 #^^^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.endif.fortran # ^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran @@ -145,11 +145,11 @@ # ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran punctuation.parentheses.right.fortran # ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran # ^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.then.fortran -# ^^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.elseif +# ^^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.elseif.fortran >else label3 #^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran keyword.control.else.fortran # ^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran -# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.else +# ^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.if.fortran meta.label.else.fortran >end if label3 #^^^^^^ source.fortran.free meta.named-construct.fortran.modern keyword.control.endif.fortran # ^ source.fortran.free meta.named-construct.fortran.modern meta.statement.control.if.fortran @@ -241,7 +241,7 @@ # ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran # ^^^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran keyword.control.stop.fortran # ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran -# ^^^^^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran meta.label.stop +# ^^^^^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran meta.label.stop.stop >if (1) stop "label"//"7" #^^ source.fortran.free keyword.control.if.fortran # ^ source.fortran.free meta.expression.control.logical.fortran From 3d60be6cd2c69715b0e021501e86fd3e7e124d10 Mon Sep 17 00:00:00 2001 From: gnikit Date: Tue, 19 Oct 2021 12:12:36 +0100 Subject: [PATCH 43/62] Fixes normal labeled construct end statements --- syntaxes/fortran_free-form.tmLanguage.json | 5 ++- test/resources/conditionals.f90 | 11 +++++- test/resources/conditionals.f90.snap | 40 +++++++++++++++++++++- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index c30e3d4d..7cd59717 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -1352,8 +1352,11 @@ "comment": "Introduced in the Fortran 1990 standard.", "contentName": "meta.named-construct.fortran.modern", "begin": "(?ix)([a-z]\\w*)\\s*(:)(?=\\s*(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)", - "end": "(?i)(?!\\s*\\b(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)(?:\\b(\\1)\\b)?(?:\\s*([^\\s;!][^;!\\n]*?))?(?=\\s*[;!\\n])", + "end": "(?i)(?!\\s*\\b(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)(?:\\b(\\1)\\b)?([^\\s;!\\n]*?)?(?=\\s*[;!\\n])", "endCaptures": { + "1": { + "name": "meta.label.end.name.fortran" + }, "2": { "name": "invalid.error.named-control-constructs.fortran.modern" } diff --git a/test/resources/conditionals.f90 b/test/resources/conditionals.f90 index ef066bdf..13723cd3 100644 --- a/test/resources/conditionals.f90 +++ b/test/resources/conditionals.f90 @@ -43,4 +43,13 @@ ! stop if (1) stop if (1) stop label6 -if (1) stop "label"//"7" \ No newline at end of file +if (1) stop "label"//"7" + +! do loop +do i = 1, 10 +end do + +! labelled do loop +label8: do i = 1, 10 +end do label8 + diff --git a/test/resources/conditionals.f90.snap b/test/resources/conditionals.f90.snap index e212ba09..d057ffc9 100644 --- a/test/resources/conditionals.f90.snap +++ b/test/resources/conditionals.f90.snap @@ -257,4 +257,42 @@ # ^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran keyword.other.concatination.fortran # ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran # ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran -# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran \ No newline at end of file +# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran +> +>! do loop +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^ source.fortran.free comment.line.fortran +>do i = 1, 10 +#^^ source.fortran.free meta.block.do.unlabeled.fortran keyword.control.do.fortran +# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran meta.parameter.fortran +# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran +# ^^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran +>end do +#^^^^^^ source.fortran.free meta.block.do.unlabeled.fortran keyword.control.enddo.fortran +> +>! labelled do loop +#^ source.fortran.free comment.line.fortran +# ^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran +>label8: do i = 1, 10 +#^^^^^^^ source.fortran.free +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran keyword.control.do.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran meta.parameter.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran keyword.operator.assignment.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran +# ^^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran +# ^^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran +>end do label8 +#^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran keyword.control.enddo.fortran +# ^ source.fortran.free meta.named-construct.fortran.modern +# ^^^^^^ source.fortran.free meta.label.end.name.fortran +> +> \ No newline at end of file From f20856e28e5c0542c42fc0e22423799daea58251 Mon Sep 17 00:00:00 2001 From: gnikit Date: Tue, 19 Oct 2021 12:14:25 +0100 Subject: [PATCH 44/62] Adds error highlighting for else labeled --- syntaxes/fortran_free-form.tmLanguage.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 7cd59717..4b5737b1 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -1646,10 +1646,13 @@ "patterns": [ { "comment": "capture the label if present", - "match": "\\s*([a-z]\\w*)?\\s*", + "match": "\\s*([a-z]\\w*)?\\s*\\b(\\w*)\\b", "captures": { "1": { "name": "meta.label.else.fortran" + }, + "2": { + "name": "invalid.error.label.else.fortran" } } }, From 901bcb3e98067bf5d2965080062affbfb02b1b5f Mon Sep 17 00:00:00 2001 From: gnikit Date: Tue, 19 Oct 2021 12:15:05 +0100 Subject: [PATCH 45/62] Upgraded package.json grammar update --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eca813e6..0dee5dd2 100644 --- a/package.json +++ b/package.json @@ -216,7 +216,7 @@ "test:grammar-free": "vscode-tmgrammar-snap -s source.fortran.free -g ./syntaxes/fortran_free-form.tmLanguage.json -t \"./test/**/*{.f90,F90}\"", "test:grammar-fixed": "vscode-tmgrammar-snap -s source.fortran.fixed -g ./syntaxes/fortran_fixed-form.tmLanguage.json -t \"./test/**/*{.f,F}\"", "test:grammar": "npm run test:grammar-free && npm run test:grammar-fixed", - "test:grammar-update": "npm run test:grammar -- -u", + "test:grammar-update": "npm run test:grammar-free -- -u && npm run test:grammar-fixed -- -u", "lint": "node ./node_modules/tslint/bin/tslint ./src/**/*.ts " }, "devDependencies": { From caf2d4637508fc59576bc58a3efa3aefd1b2aabf Mon Sep 17 00:00:00 2001 From: gnikit Date: Tue, 21 Sep 2021 18:47:52 +0100 Subject: [PATCH 46/62] Removes paths.ts which checks if binary is in PATH This has now been replaced with `which` which is also platform agnostic. The only difference is that `which` does not cache the result of the query. However, realistically speaking calling which once per new file being opened is a trivial cost. Moreover, already opened files are cached automatically so no `which` calls are made when changing between opened files. --- package-lock.json | 6 ++++++ src/extension.ts | 6 +++++- src/lang-server.ts | 25 ++----------------------- src/lib/helper.ts | 1 - src/lib/paths.ts | 40 ---------------------------------------- src/lib/tools.ts | 5 +---- 6 files changed, 14 insertions(+), 69 deletions(-) delete mode 100644 src/lib/paths.ts diff --git a/package-lock.json b/package-lock.json index 9a945bf2..eb4443db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -125,6 +125,12 @@ "integrity": "sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==", "dev": true }, + "@types/which": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.1.tgz", + "integrity": "sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==", + "dev": true + }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", diff --git a/src/extension.ts b/src/extension.ts index f98049b3..05b25bdf 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,4 +1,5 @@ // src/extension.ts +import * as which from 'which' import * as vscode from 'vscode' import FortranLintingProvider from './features/linter-provider' @@ -53,7 +54,10 @@ export function activate(context: vscode.ExtensionContext) { loggingService.logInfo('Symbol Provider is not enabled') } - if (checkForLangServer(extensionConfig)) { + // Our interface with `fortls` has been disabled in favour of the @hansec's + // VS Code extension Fortran IntelliSense + const useInternalFLInterface = false; + if (useInternalFLInterface) { const langServer = new FortranLangServer(context, extensionConfig) langServer.start() langServer.onReady().then(() => { diff --git a/src/lang-server.ts b/src/lang-server.ts index d9613d9f..e2b7aa29 100644 --- a/src/lang-server.ts +++ b/src/lang-server.ts @@ -3,11 +3,10 @@ import { LanguageClientOptions, Executable, } from 'vscode-languageclient' +import * as which from 'which' import * as vscode from 'vscode' import { - getBinPath, FORTRAN_FREE_FORM_ID, - promptForMissingTool, } from './lib/helper' import { LANG_SERVER_TOOL_ID } from './lib/tools' @@ -18,7 +17,7 @@ export class FortranLangServer { let langServerFlags: string[] = config.get('languageServerFlags', []) const serverOptions: Executable = { - command: getBinPath(LANG_SERVER_TOOL_ID), + command: which.sync(LANG_SERVER_TOOL_ID), args: [...langServerFlags], options: {}, } @@ -48,23 +47,3 @@ export class FortranLangServer { return capabilities } } - -export function checkForLangServer(config) { - const useLangServer = false //config.get('useLanguageServer') - if (!useLangServer) return false - if (process.platform === 'win32') { - vscode.window.showInformationMessage( - 'The Fortran language server is not supported on Windows yet.' - ) - return false - } - let langServerAvailable = getBinPath(LANG_SERVER_TOOL_ID) - if (!langServerAvailable) { - promptForMissingTool(LANG_SERVER_TOOL_ID) - vscode.window.showInformationMessage( - 'Reload VS Code window after installing the Fortran language server' - ) - } - return true -} - diff --git a/src/lib/helper.ts b/src/lib/helper.ts index 72f87a16..eceb7943 100644 --- a/src/lib/helper.ts +++ b/src/lib/helper.ts @@ -115,7 +115,6 @@ let saveKeywordToJson = keyword => { }); }; -export { default as getBinPath } from './paths' export function promptForMissingTool(tool: string) { const items = ['Install']; diff --git a/src/lib/paths.ts b/src/lib/paths.ts deleted file mode 100644 index c141d12a..00000000 --- a/src/lib/paths.ts +++ /dev/null @@ -1,40 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; -import { toolBinNames } from './tools'; - -let binPathCache: { [tool: string]: string } = {}; - -export const envPath = - process.env['PATH'] || - (process.platform === 'win32' ? process.env['Path'] : null); - -// checks in the PATH defined in the PATH env variables -// for the specified tools and returns its complete path -export default function getBinPath(tool: string): string | null { - if (binPathCache[tool]) return binPathCache[tool]; - const binDirPaths = envPath.split(path.delimiter); - const binName = getBinName(tool); - const possiblePaths = binDirPaths.map(binDirPath => - path.join(binDirPath, binName) - ); - for (let p of possiblePaths) { - if (fileExists(p)) { - // save in cache - binPathCache[tool] = p; - return p; - } - } - return null; -} - -function getBinName(tool: string): string { - return toolBinNames[tool]; -} - -function fileExists(filePath: string): boolean { - try { - return fs.statSync(filePath).isFile(); - } catch (e) { - return false; - } -} diff --git a/src/lib/tools.ts b/src/lib/tools.ts index 45e071f5..7c9b0383 100644 --- a/src/lib/tools.ts +++ b/src/lib/tools.ts @@ -1,9 +1,6 @@ export const LANG_SERVER_TOOL_ID = 'fortran-langserver'; import * as cp from 'child_process'; -export const toolBinNames = { - [LANG_SERVER_TOOL_ID]: 'fortls', - 'gnu-compiler': 'gfortran', -}; + export function installTool(toolname) { if (toolname === LANG_SERVER_TOOL_ID) { From d60ad889263c7e051a0d8933755589243b9db76a Mon Sep 17 00:00:00 2001 From: gnikit Date: Tue, 21 Sep 2021 18:55:06 +0100 Subject: [PATCH 47/62] Updates install tools. We now prompt the user to install fortran-language-server and Fortran IntelliSense if the packages are missing. There is a slight issue with the calls being asynchronous, so if they are installed in the wrong order Fortran IntelliSense first and then fortls an error is being throw. --- src/extension.ts | 24 ++++++++++++++++++++-- src/lib/helper.ts | 51 ++++++++++++++++++++++++++++++++++++----------- src/lib/tools.ts | 34 ++++++++++++++++--------------- 3 files changed, 79 insertions(+), 30 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 05b25bdf..640fa250 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -7,10 +7,11 @@ import FortranHoverProvider from './features/hover-provider' import { FortranCompletionProvider } from './features/completion-provider' import { FortranDocumentSymbolProvider } from './features/document-symbol-provider' -import { FORTRAN_FREE_FORM_ID, EXTENSION_ID } from './lib/helper' -import { FortranLangServer, checkForLangServer } from './lang-server' +import { FortranLangServer } from './lang-server' +import { FORTRAN_FREE_FORM_ID, EXTENSION_ID, promptForMissingTool } from './lib/helper' import { LoggingService } from './services/logging-service' import * as pkg from '../package.json' +import { LANG_SERVER_TOOL_ID } from './lib/tools' export function activate(context: vscode.ExtensionContext) { const loggingService = new LoggingService() @@ -54,6 +55,25 @@ export function activate(context: vscode.ExtensionContext) { loggingService.logInfo('Symbol Provider is not enabled') } + // Check if the language server is installed and if not prompt to install it + if (!which.sync('fortls', { nothrow: true })) { + let msg = `It is highly recommended to use the fortran-language-server to + enable hover, peeking, gotos and many more. + For a full list of features the language server adds see: + https://github.com/hansec/fortran-language-server`; + promptForMissingTool(LANG_SERVER_TOOL_ID, msg, 'Python', loggingService); + } + + // Check that Fortran Intellisense is installed and if not prompt to install + if (!vscode.extensions.getExtension('hansec.fortran-ls')) { + let msg = `It is highly recommended to install the Fortran IntelliSense + extension. The extension is used to interface with the + fortran-language-server. + For a full list of features provided by the extension see: + https://github.com/hansec/vscode-fortran-ls`; + promptForMissingTool('hansec.fortran-ls', msg, 'VSExt', loggingService); + } + // Our interface with `fortls` has been disabled in favour of the @hansec's // VS Code extension Fortran IntelliSense const useInternalFLInterface = false; diff --git a/src/lib/helper.ts b/src/lib/helper.ts index eceb7943..782a8a91 100644 --- a/src/lib/helper.ts +++ b/src/lib/helper.ts @@ -1,7 +1,8 @@ import * as fs from 'fs'; import * as vscode from 'vscode'; +import { installPythonTool } from './tools'; import intrinsics from './fortran-intrinsics'; -import { installTool, LANG_SERVER_TOOL_ID } from './tools'; +import { LoggingService } from '../services/logging-service'; // IMPORTANT: this should match the value // on the package.json otherwise the extension won't @@ -109,24 +110,50 @@ export function isPositionInString( let saveKeywordToJson = keyword => { let doc = _loadDocString(keyword); let docObject = JSON.stringify({ keyword: keyword, docstr: doc }); - fs.appendFile('src/docs/' + keyword + '.json', docObject, function(err) { + fs.appendFile('src/docs/' + keyword + '.json', docObject, function (err) { if (err) throw err; console.log('Saved!'); }); }; -export function promptForMissingTool(tool: string) { +/** + * Install a package either a Python pip package or a VS Marketplace Extension. + * + * For the Python install supply the name of the package in PyPi + * e.g. fortran-language-server + * + * For the VS Extension to be installed supply the id of the extension + * e.g 'hansec.fortran-ls' + * + * @param tool name of the tool e.g. fortran-language-server + * @param msg optional message for installing said package + * @param toolType type of tool, supports `Python` (through pip) and 'VSExt' + */ +export function promptForMissingTool(tool: string, msg: string, toolType: string, logger?: LoggingService) { const items = ['Install']; - let message = ''; - if (tool === 'fortran-langserver') { - message = - 'You choose to use the fortranLanguageServer functionality but it is not installed. Please press the Install button to install it'; - } - vscode.window.showInformationMessage(message, ...items).then(selected => { - if (selected === 'Install') { - installTool(tool); - } + return new Promise((resolve, reject) => { + resolve( + vscode.window.showInformationMessage(msg, ...items).then(selected => { + if (selected === 'Install') { + switch (toolType) { + case 'Python': + installPythonTool(tool, logger); + break; + + case 'VSExt': + logger.logInfo(`Installing VS Marketplace Extension with id: ${tool}`); + vscode.commands.executeCommand('workbench.extensions.installExtension', tool); + logger.logInfo(`Extension ${tool} successfully installed`); + break; + + default: + logger.logError(`Failed to install tool: ${tool}`); + break; + } + } + }) + ); }); } diff --git a/src/lib/tools.ts b/src/lib/tools.ts index 7c9b0383..f37b129f 100644 --- a/src/lib/tools.ts +++ b/src/lib/tools.ts @@ -1,20 +1,22 @@ -export const LANG_SERVER_TOOL_ID = 'fortran-langserver'; +export const LANG_SERVER_TOOL_ID = 'fortran-language-server'; +export const FORMATTERS = ['Disabled', 'findent', 'fprettify']; + import * as cp from 'child_process'; +import { LoggingService } from '../services/logging-service'; +export function installPythonTool(pyPackage: string, logger?: LoggingService) { -export function installTool(toolname) { - if (toolname === LANG_SERVER_TOOL_ID) { - const installProcess = cp.spawn( - 'pip', - 'install --user --upgrade fortran-language-server'.split(' ') - ); - installProcess.on('exit', (code, signal) => { - if (code !== 0) { - // extension failed to install - } - }); - installProcess.on('error', err => { - // failed to install - }); - } + const installProcess = cp.spawn( + 'pip', + 'install --user --upgrade '.concat(pyPackage).split(' ') + ); + installProcess.stdout.on('data', (data) => { logger.logInfo(`pip install: ${data}`) }); + installProcess.on('exit', (code, signal) => { + if (code !== 0) { + logger.logError(`Python package ${pyPackage} failed to install with code: ${code}, signal: ${signal}`); + } + }); + installProcess.on('error', err => { + logger.logError(`${err}`); + }); } From 8b72230b539d6d72eda67440f2cc481563bdd8b0 Mon Sep 17 00:00:00 2001 From: gnikit Date: Tue, 21 Sep 2021 21:19:51 +0100 Subject: [PATCH 48/62] Adds formatting support Adds support for `findent` and `fprettify`. Fixes #29. --- README.md | 36 +++++++ package.json | 23 ++++- src/extension.ts | 13 +++ src/features/formatting-provider.ts | 143 ++++++++++++++++++++++++++++ 4 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 src/features/formatting-provider.ts diff --git a/README.md b/README.md index 0ea9e5cd..e1115f88 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ - Code autocompletion (beta) - Symbols provider - Debugger, uses Microsoft's [C/C++ extension](https://github.com/Microsoft/vscode-cpptools) +- Formatting with [findent](https://sourceforge.net/projects/findent/) or [fprettify](https://github.com/pseewald/fprettify) ![symbol_nav](./doc/symbol_nav.png) @@ -140,6 +141,41 @@ More details about how to setup the debugger can be found in Microsoft's website } ``` +## Formatting + +Two formatters are supported [`findent`](https://sourceforge.net/projects/findent/) +and [`fprettify`](https://github.com/pseewald/fprettify). `fprettify` can be installed +automatically through the extension using `pip`, while `findent` must be installed +by the user manually. + +The formatter is controlled by the user option + +```json +{ + "fortran.formatting.formatter": "Disabled" | "findent" | "fprettify", +} +``` + +Additional arguments to the formatter can be input using + +```json +{ + "fortran.formatting.args":, ["-Cn", "-Rr"] +} +``` + +If the formatter is not present in the `PATH` its location can be input with + +```json +{ + "fortran.formattting.path": "/custom-path-to-formatter-binary", +} +``` + +### NOTE: About `findent` + +`findent` can also be used to generate dependency files for a project. + ## Requirements For the linter to work you need to have `gfortran` on your path, or wherever you configure it to be. diff --git a/package.json b/package.json index 0dee5dd2..2f98a114 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,8 @@ "Programming Languages", "Snippets", "Linters", - "Debuggers" + "Debuggers", + "Formatters" ], "activationEvents": [ "onLanguage:FortranFreeForm" @@ -157,6 +158,26 @@ ], "description": "Specify additional options to use when calling the gfortran compiler" }, + "fortran.formatting.formatter": { + "type": "string", + "default": "Disabled", + "enum": [ + "findent", + "fprettify", + "Disabled" + ], + "description": "Fortran formatter, currently supports findent and fprettify" + }, + "fortran.formatting.args": { + "type": "array", + "default": [], + "description": "Additional arguments for the formatter" + }, + "fortran.formatting.path": { + "type": "string", + "default": "", + "description": "Specify the full path of where the formatter is installed" + }, "fortran.provideSymbols": { "type": "boolean", "default": true, diff --git a/src/extension.ts b/src/extension.ts index 640fa250..71941398 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -12,6 +12,7 @@ import { FORTRAN_FREE_FORM_ID, EXTENSION_ID, promptForMissingTool } from './lib/ import { LoggingService } from './services/logging-service' import * as pkg from '../package.json' import { LANG_SERVER_TOOL_ID } from './lib/tools' +import { FortranFormattingProvider } from './features/formatting-provider' export function activate(context: vscode.ExtensionContext) { const loggingService = new LoggingService() @@ -28,6 +29,18 @@ export function activate(context: vscode.ExtensionContext) { loggingService.logInfo('Linter is not enabled') } + if (extensionConfig.get('formatter') !== 'Disabled') { + let disposable: vscode.Disposable = + vscode.languages.registerDocumentFormattingEditProvider( + FORTRAN_FREE_FORM_ID, + new FortranFormattingProvider(loggingService) + ); + context.subscriptions.push(disposable); + } + else { + loggingService.logInfo('Formatting is disabled') + } + if (extensionConfig.get('provideCompletion', true)) { let completionProvider = new FortranCompletionProvider(loggingService) vscode.languages.registerCompletionItemProvider( diff --git a/src/features/formatting-provider.ts b/src/features/formatting-provider.ts new file mode 100644 index 00000000..17c83d68 --- /dev/null +++ b/src/features/formatting-provider.ts @@ -0,0 +1,143 @@ +'use strict'; + +import * as fs from 'fs'; +import * as path from 'path'; +import * as which from 'which'; +import * as vscode from 'vscode'; +import * as cp from 'child_process'; + +import { FORMATTERS } from '../lib/tools'; +import { LoggingService } from '../services/logging-service'; +import { EXTENSION_ID, promptForMissingTool } from '../lib/helper'; + + +export class FortranFormattingProvider + implements vscode.DocumentFormattingEditProvider { + + constructor(private logger: LoggingService) { } + + public provideDocumentFormattingEdits(document: vscode.TextDocument, options: vscode.FormattingOptions, token: vscode.CancellationToken): vscode.ProviderResult { + + let formatterName: string = this.getFormatter(); + + if (formatterName === 'fprettify') { + this.doFormatFprettify(document); + } + else if (formatterName === 'findent') { + this.doFormatFindent(document); + } + else { + this.logger.logError('Cannot format document with formatter set to Disabled') + } + + return + } + + /** + * Use `fprettyfy` to format a Fortran file. + * + * @param document vscode.TextDocument document to operate on + */ + private doFormatFprettify(document: vscode.TextDocument) { + + const formatterName: string = 'fprettify'; + let formatterPath: string = this.getFormatterPath(); + // If no formatter path is present check that formatter is present in $PATH + if (!formatterPath) { + if (!which.sync(formatterName, { nothrow: true })) { + this.logger.logWarning(`Formatter: ${formatterName} not detected in your system. + Attempting to install now.`); + let msg = `Installing ${formatterName} through pip with --user option`; + promptForMissingTool(formatterName, msg, 'Python'); + } + } + let formatter: string = path.join(formatterPath, formatterName); + + let args: string[] = [document.fileName, ...this.getFormatterArgs()]; + // args.push('--silent'); // TODO: pass? + + // Get current file (name rel to path), run extension can be in a shell?? + let process = cp.spawn(formatter, args); + + // if the findent then capture the output from that and parse it back to the file + process.stdout.on('data', (data) => { this.logger.logInfo(`formatter stdout: ${data}`) }); + process.stderr.on('data', (data) => { this.logger.logError(`formatter stderr: ${data}`) }); + process.on('close', (code: number) => { if (code !== 0) this.logger.logInfo(`formatter exited with code: ${code}`) }); + process.on('error', (code) => { this.logger.logInfo(`formatter exited with code: ${code}`) }); + + } + + /** + * Use `findent` to format a Fortran file. + * Creates a temporary file where the output is placed and then deleted + * + * @param document vscode.TextDocument document to operate on + */ + private doFormatFindent(document: vscode.TextDocument) { + + const formatterName: string = 'findent'; + let formatterPath: string = this.getFormatterPath(); + let formatter: string = path.join(formatterPath, formatterName); + + // Annoyingly findent only outputs to a file and not to a stream so + // let us go and create a temporary file + let out = document.uri.path + '.findent.tmp'; + let args: string = ['< ' + document.fileName + ' >', out, ...this.getFormatterArgs()].join(' '); + formatter = formatter + ' ' + args; + + // @note It is wise to have all IO operations being synchronous we don't + // want to copy or delete the temp file before findent has completed. + // I cannot forsee a situation where a performance bottleneck is created + // since findent performs something like ~100k lines per second + cp.execSync(formatter, { stdio: 'inherit' }); + fs.copyFileSync(out, document.fileName); + fs.unlinkSync(out); + + } + + /** + * Get the formatter type + * Currently supporting: `findent` and `fprettify` + * + * Formatters are defined in FORMATTERS (./lib/tools.ts) + * + * @returns {string} formatter name or `Disabled` + */ + private getFormatter(): string { + + let config = vscode.workspace.getConfiguration(EXTENSION_ID) + const formatter: string = config.get('formatting.formatter', 'Disabled') + + if (!FORMATTERS.includes(formatter)) { + this.logger.logError(`Unsupported formatter: ${formatter}`) + } + return formatter + } + + /** + * Read in any custom arguments for the formatter + * + * @returns {string[]} list of additional arguments + */ + private getFormatterArgs(): string[] { + let config = vscode.workspace.getConfiguration(EXTENSION_ID) + const args: string[] = config.get('formatting.args', []) + + return args + } + + /** + * Installation directory for formatter (if not in PATH) + * + * @returns {string} path of formatter + */ + private getFormatterPath(): string { + let config = vscode.workspace.getConfiguration(EXTENSION_ID) + const formatterPath: string = config.get('formatting.path', '') + if (formatterPath !== '') { + this.logger.logInfo(`Formatter located in: ${formatterPath}`) + } + + return formatterPath + } +} From 548ffd7d129a0f1f5d80735e4133a4341835aa49 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 11:27:27 +0100 Subject: [PATCH 49/62] Installing `findent` through pip --- src/features/formatting-provider.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/features/formatting-provider.ts b/src/features/formatting-provider.ts index 17c83d68..285422e2 100644 --- a/src/features/formatting-provider.ts +++ b/src/features/formatting-provider.ts @@ -77,6 +77,15 @@ export class FortranFormattingProvider const formatterName: string = 'findent'; let formatterPath: string = this.getFormatterPath(); + // If no formatter path is present check that formatter is present in $PATH + if (!formatterPath) { + if (!which.sync(formatterName, { nothrow: true })) { + this.logger.logWarning(`Formatter: ${formatterName} not detected in your system. + Attempting to install now.`); + let msg = `Installing ${formatterName} through pip with --user option`; + promptForMissingTool(formatterName, msg, 'Python'); + } + } let formatter: string = path.join(formatterPath, formatterName); // Annoyingly findent only outputs to a file and not to a stream so From 3f426b237a9f4ff60ed1477801e622595ba6a7b8 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 11:32:36 +0100 Subject: [PATCH 50/62] Minor edit when installing a VSCode extension --- src/lib/helper.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/helper.ts b/src/lib/helper.ts index 782a8a91..6906b783 100644 --- a/src/lib/helper.ts +++ b/src/lib/helper.ts @@ -143,6 +143,7 @@ export function promptForMissingTool(tool: string, msg: string, toolType: string case 'VSExt': logger.logInfo(`Installing VS Marketplace Extension with id: ${tool}`); + vscode.commands.executeCommand('extension.open', tool); vscode.commands.executeCommand('workbench.extensions.installExtension', tool); logger.logInfo(`Extension ${tool} successfully installed`); break; From 0bc0f866fbc994656045a841c2666f076765488d Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 14:34:22 +0100 Subject: [PATCH 51/62] Renames `fortran_fixed-form` to `FortranFixedForm` Fixes Rename fortran_fixed-form to FortranFixedForm #259 --- package.json | 9 +++++---- src/extension.ts | 12 ++++++------ src/lang-server.ts | 4 ++-- src/lib/helper.ts | 5 ++++- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 2f98a114..ccfeb457 100644 --- a/package.json +++ b/package.json @@ -73,11 +73,12 @@ "configuration": "./language-configuration.json" }, { - "id": "fortran_fixed-form", + "id": "FortranFixedForm", "aliases": [ "Fortran", "fortran", - "FORTRAN77" + "FORTRAN77", + "fortran_fixed-form" ], "extensions": [ ".f", @@ -111,7 +112,7 @@ ] }, { - "language": "fortran_fixed-form", + "language": "FortranFixedForm", "scopeName": "source.fortran.fixed", "path": "./syntaxes/fortran_fixed-form.tmLanguage.json" } @@ -222,7 +223,7 @@ "language": "FortranFreeForm" }, { - "language": "fortran_fixed-form" + "language": "FortranFixedForm" } ] }, diff --git a/src/extension.ts b/src/extension.ts index 71941398..dd157fe6 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -8,7 +8,7 @@ import { FortranCompletionProvider } from './features/completion-provider' import { FortranDocumentSymbolProvider } from './features/document-symbol-provider' import { FortranLangServer } from './lang-server' -import { FORTRAN_FREE_FORM_ID, EXTENSION_ID, promptForMissingTool } from './lib/helper' +import { FORTRAN_DOCUMENT_SELECTOR, EXTENSION_ID, promptForMissingTool } from './lib/helper' import { LoggingService } from './services/logging-service' import * as pkg from '../package.json' import { LANG_SERVER_TOOL_ID } from './lib/tools' @@ -24,7 +24,7 @@ export function activate(context: vscode.ExtensionContext) { if (extensionConfig.get('linterEnabled', true)) { let linter = new FortranLintingProvider(loggingService) linter.activate(context.subscriptions) - vscode.languages.registerCodeActionsProvider(FORTRAN_FREE_FORM_ID, linter) + vscode.languages.registerCodeActionsProvider(FORTRAN_DOCUMENT_SELECTOR, linter) } else { loggingService.logInfo('Linter is not enabled') } @@ -32,7 +32,7 @@ export function activate(context: vscode.ExtensionContext) { if (extensionConfig.get('formatter') !== 'Disabled') { let disposable: vscode.Disposable = vscode.languages.registerDocumentFormattingEditProvider( - FORTRAN_FREE_FORM_ID, + FORTRAN_DOCUMENT_SELECTOR, new FortranFormattingProvider(loggingService) ); context.subscriptions.push(disposable); @@ -44,7 +44,7 @@ export function activate(context: vscode.ExtensionContext) { if (extensionConfig.get('provideCompletion', true)) { let completionProvider = new FortranCompletionProvider(loggingService) vscode.languages.registerCompletionItemProvider( - FORTRAN_FREE_FORM_ID, + FORTRAN_DOCUMENT_SELECTOR, completionProvider ) } else { @@ -53,7 +53,7 @@ export function activate(context: vscode.ExtensionContext) { if (extensionConfig.get('provideHover', true)) { let hoverProvider = new FortranHoverProvider(loggingService) - vscode.languages.registerHoverProvider(FORTRAN_FREE_FORM_ID, hoverProvider) + vscode.languages.registerHoverProvider(FORTRAN_DOCUMENT_SELECTOR, hoverProvider) } else { loggingService.logInfo('Hover Provider is not enabled') } @@ -61,7 +61,7 @@ export function activate(context: vscode.ExtensionContext) { if (extensionConfig.get('provideSymbols', true)) { let symbolProvider = new FortranDocumentSymbolProvider() vscode.languages.registerDocumentSymbolProvider( - FORTRAN_FREE_FORM_ID, + FORTRAN_DOCUMENT_SELECTOR, symbolProvider ) } else { diff --git a/src/lang-server.ts b/src/lang-server.ts index e2b7aa29..8a217575 100644 --- a/src/lang-server.ts +++ b/src/lang-server.ts @@ -6,7 +6,7 @@ import { import * as which from 'which' import * as vscode from 'vscode' import { - FORTRAN_FREE_FORM_ID, + FORTRAN_DOCUMENT_SELECTOR, } from './lib/helper' import { LANG_SERVER_TOOL_ID } from './lib/tools' @@ -23,7 +23,7 @@ export class FortranLangServer { } const clientOptions: LanguageClientOptions = { - documentSelector: [FORTRAN_FREE_FORM_ID], + documentSelector: FORTRAN_DOCUMENT_SELECTOR, } this.c = new LanguageClient( diff --git a/src/lib/helper.ts b/src/lib/helper.ts index 6906b783..1bdd026c 100644 --- a/src/lib/helper.ts +++ b/src/lib/helper.ts @@ -8,7 +8,10 @@ import { LoggingService } from '../services/logging-service'; // on the package.json otherwise the extension won't // work at all export const LANGUAGE_ID = 'FortranFreeForm'; -export const FORTRAN_FREE_FORM_ID = { language: LANGUAGE_ID, scheme: 'file' }; +export const FORTRAN_DOCUMENT_SELECTOR = [ + { scheme: 'file', language: 'FortranFreeForm' }, + { scheme: 'file', language: 'FortranFixedForm' } +]; export { intrinsics } export const EXTENSION_ID = 'fortran'; From c1866907ae3288565b325b9aef17d842960e4953 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 14:36:31 +0100 Subject: [PATCH 52/62] The extension would not activate for fixed form Fixes Extension does not activate for FixedForm #257 --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ccfeb457..50c2a95c 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "Formatters" ], "activationEvents": [ - "onLanguage:FortranFreeForm" + "onLanguage:FortranFreeForm", + "onLanguage:FortranFixedForm" ], "main": "./out/src/extension", "extensionDependencies": [ From 17dce23f7c12798ca0a62e5109d49ebceaab4d84 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 14:38:06 +0100 Subject: [PATCH 53/62] Linting now works with fixed form Fixes Linting does not work for fixed format files #258 --- src/features/linter-provider.ts | 9 +++++---- src/lib/helper.ts | 1 - 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/features/linter-provider.ts b/src/features/linter-provider.ts index c1ac11a0..0c72cdca 100644 --- a/src/features/linter-provider.ts +++ b/src/features/linter-provider.ts @@ -2,13 +2,13 @@ import * as path from 'path' import * as cp from 'child_process' -import { getIncludeParams, LANGUAGE_ID } from '../lib/helper' +import { FORTRAN_DOCUMENT_SELECTOR, getIncludeParams } from '../lib/helper' import * as vscode from 'vscode' import { LoggingService } from '../services/logging-service' export default class FortranLintingProvider { - constructor(private loggingService: LoggingService) {} + constructor(private loggingService: LoggingService) { } private diagnosticCollection: vscode.DiagnosticCollection @@ -16,9 +16,10 @@ export default class FortranLintingProvider { const errorRegex: RegExp = /^([a-zA-Z]:\\)*([^:]*):([0-9]+):([0-9]+):\s+(.*)\s+.*?\s+(Error|Warning|Fatal Error):\s(.*)$/gm + // Only lint Fortran (free, fixed) format files if ( - textDocument.languageId !== LANGUAGE_ID || - textDocument.uri.scheme !== 'file' + FORTRAN_DOCUMENT_SELECTOR.some((element) => { element.language !== textDocument.languageId }) || + FORTRAN_DOCUMENT_SELECTOR.some((element) => { element.scheme !== textDocument.uri.scheme }) ) { return } diff --git a/src/lib/helper.ts b/src/lib/helper.ts index 1bdd026c..bd3e125d 100644 --- a/src/lib/helper.ts +++ b/src/lib/helper.ts @@ -7,7 +7,6 @@ import { LoggingService } from '../services/logging-service'; // IMPORTANT: this should match the value // on the package.json otherwise the extension won't // work at all -export const LANGUAGE_ID = 'FortranFreeForm'; export const FORTRAN_DOCUMENT_SELECTOR = [ { scheme: 'file', language: 'FortranFreeForm' }, { scheme: 'file', language: 'FortranFixedForm' } From 4d2d08a885da83f70d4e873855a4ec468d781502 Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 15:37:23 +0100 Subject: [PATCH 54/62] Added safeguard for fprettify and fixed Fortran --- src/features/formatting-provider.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/features/formatting-provider.ts b/src/features/formatting-provider.ts index 285422e2..8568584b 100644 --- a/src/features/formatting-provider.ts +++ b/src/features/formatting-provider.ts @@ -34,12 +34,19 @@ export class FortranFormattingProvider } /** - * Use `fprettyfy` to format a Fortran file. + * Use `fprettify` to format a Fortran file. * * @param document vscode.TextDocument document to operate on */ private doFormatFprettify(document: vscode.TextDocument) { + // fprettify can only do FortranFreeFrom + if (document.languageId !== 'FortranFreeForm') { + this.logger.logError(`fprettify can only format FortranFreeForm, change + to findent for FortranFixedForm formatting`); + return + } + const formatterName: string = 'fprettify'; let formatterPath: string = this.getFormatterPath(); // If no formatter path is present check that formatter is present in $PATH From 521dcd551b82ab56d6e848ef73ac17548902a63b Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 1 Oct 2021 15:53:21 +0100 Subject: [PATCH 55/62] Updates README.md --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e1115f88..c3190ce1 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ - Code autocompletion (beta) - Symbols provider - Debugger, uses Microsoft's [C/C++ extension](https://github.com/Microsoft/vscode-cpptools) -- Formatting with [findent](https://sourceforge.net/projects/findent/) or [fprettify](https://github.com/pseewald/fprettify) +- Formatting with [findent](https://github.com/gnikit/findent-pypi) or [fprettify](https://github.com/pseewald/fprettify) ![symbol_nav](./doc/symbol_nav.png) @@ -143,10 +143,9 @@ More details about how to setup the debugger can be found in Microsoft's website ## Formatting -Two formatters are supported [`findent`](https://sourceforge.net/projects/findent/) -and [`fprettify`](https://github.com/pseewald/fprettify). `fprettify` can be installed -automatically through the extension using `pip`, while `findent` must be installed -by the user manually. +Two formatters are supported [`findent`](https://github.com/gnikit/findent-pypi) +and [`fprettify`](https://github.com/pseewald/fprettify). Both of them can be +installed with `pip` automatically through the extension. The formatter is controlled by the user option From 4da11a2f5483f01146c3b1d007486b87820fe47f Mon Sep 17 00:00:00 2001 From: gnikit Date: Thu, 14 Oct 2021 16:10:20 +0100 Subject: [PATCH 56/62] Addresses review comments 1. Fixes conditional trigger for linting 2. Moves which as a dependency 3. Adds logging output for when parts of the extension are enabled --- package-lock.json | 4 +--- package.json | 3 ++- src/extension.ts | 4 ++++ src/features/linter-provider.ts | 6 +++--- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index eb4443db..589ae73c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -898,8 +898,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "js-tokens": { "version": "4.0.0", @@ -1805,7 +1804,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } diff --git a/package.json b/package.json index 50c2a95c..c8414e5c 100644 --- a/package.json +++ b/package.json @@ -268,6 +268,7 @@ ] }, "dependencies": { - "vscode-languageclient": "^5.1.0" + "vscode-languageclient": "^5.1.0", + "which": "^2.0.2" } } diff --git a/src/extension.ts b/src/extension.ts index dd157fe6..87a80e72 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -25,6 +25,7 @@ export function activate(context: vscode.ExtensionContext) { let linter = new FortranLintingProvider(loggingService) linter.activate(context.subscriptions) vscode.languages.registerCodeActionsProvider(FORTRAN_DOCUMENT_SELECTOR, linter) + loggingService.logInfo('Linter is enabled') } else { loggingService.logInfo('Linter is not enabled') } @@ -36,6 +37,7 @@ export function activate(context: vscode.ExtensionContext) { new FortranFormattingProvider(loggingService) ); context.subscriptions.push(disposable); + loggingService.logInfo('Formatting is enabled') } else { loggingService.logInfo('Formatting is disabled') @@ -54,6 +56,7 @@ export function activate(context: vscode.ExtensionContext) { if (extensionConfig.get('provideHover', true)) { let hoverProvider = new FortranHoverProvider(loggingService) vscode.languages.registerHoverProvider(FORTRAN_DOCUMENT_SELECTOR, hoverProvider) + loggingService.logInfo('Hover Provider is enabled') } else { loggingService.logInfo('Hover Provider is not enabled') } @@ -64,6 +67,7 @@ export function activate(context: vscode.ExtensionContext) { FORTRAN_DOCUMENT_SELECTOR, symbolProvider ) + loggingService.logInfo('Symbol Provider is enabled') } else { loggingService.logInfo('Symbol Provider is not enabled') } diff --git a/src/features/linter-provider.ts b/src/features/linter-provider.ts index 0c72cdca..e93a4440 100644 --- a/src/features/linter-provider.ts +++ b/src/features/linter-provider.ts @@ -18,8 +18,8 @@ export default class FortranLintingProvider { // Only lint Fortran (free, fixed) format files if ( - FORTRAN_DOCUMENT_SELECTOR.some((element) => { element.language !== textDocument.languageId }) || - FORTRAN_DOCUMENT_SELECTOR.some((element) => { element.scheme !== textDocument.uri.scheme }) + !FORTRAN_DOCUMENT_SELECTOR.some(e => e.scheme === textDocument.uri.scheme) || + !FORTRAN_DOCUMENT_SELECTOR.some(e => e.language === textDocument.languageId) ) { return } @@ -138,7 +138,7 @@ export default class FortranLintingProvider { private command: vscode.Disposable public activate(subscriptions: vscode.Disposable[]) { - this.diagnosticCollection = vscode.languages.createDiagnosticCollection() + this.diagnosticCollection = vscode.languages.createDiagnosticCollection('Fortran') vscode.workspace.onDidOpenTextDocument( this.doModernFortranLint, From 202a9620cad20d3e1b537aa0542dc810af2c43da Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 15 Oct 2021 15:43:27 +0100 Subject: [PATCH 57/62] Update to version 2.5.0 --- CHANGELOG.md | 2 +- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 66c306c6..93e9fbdf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] -## [2.4.0] +## [2.5.0] ### Changed diff --git a/package-lock.json b/package-lock.json index 589ae73c..cd27de03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "linter-gfortran", - "version": "2.4.0", + "version": "2.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c8414e5c..2bf1b713 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "linter-gfortran", "displayName": "Modern Fortran", "description": "Modern Fortran language support, including syntax highlighting and error detection.", - "version": "2.4.0", + "version": "2.5.0", "publisher": "krvajalm", "license": "MIT", "author": { From 251fb799c5aba52281dd5e62a72b6ec56c56476f Mon Sep 17 00:00:00 2001 From: gnikit Date: Fri, 15 Oct 2021 16:13:24 +0100 Subject: [PATCH 58/62] Updates CHANGELOG after rebase --- CHANGELOG.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93e9fbdf..6bc09533 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,31 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [2.5.0] +### Fixed + +- Extension now activates for `FortranFixedForm` + ([#257](https://github.com/krvajal/vscode-fortran-support/issues/257)) +- Linting is now operational for `FortranFixedForm` + ([#258](https://github.com/krvajal/vscode-fortran-support/issues/258)) + +### Changed + +- Renamed the Fixed Format Format language from `fortran_fixed-form` to + `FortranFixedForm`, an alias has been added for backwards compatibility + ([#259](https://github.com/krvajal/vscode-fortran-support/issues/259)) + +### Added + +- Adds support for formatting with `findent` and `fprettify` + ([#29](https://github.com/krvajal/vscode-fortran-support/issues/29)) +- Adds prompts for installing Fortran IntelliSense and fortran-language-server + +### Removed + +- Removes `paths.js` for detecting binaries in favour of `which` + +## [2.4.0] + ### Changed - Changes the syntax highlighting of preprocessor macros to match that of C++ @@ -273,7 +298,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Initial release -[unreleased]: https://github.com/krvajal/vscode-fortran-support/compare/v2.4.0...HEAD +[unreleased]: https://github.com/krvajal/vscode-fortran-support/compare/v2.5.0...HEAD +[2.5.0]: https://github.com/krvajal/vscode-fortran-support/compare/v2.4.0...v2.5.0 [2.4.0]: https://github.com/krvajal/vscode-fortran-support/compare/v2.3.0...v2.4.0 [2.3.0]: https://github.com/krvajal/vscode-fortran-support/compare/v2.2.2...v2.3.0 [2.2.2]: https://github.com/krvajal/vscode-fortran-support/compare/2.2.1...v2.2.1 From 5790bc4378c349d968228dc0e915bba3262767d6 Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 10 Nov 2021 00:02:18 +0000 Subject: [PATCH 59/62] Lint and format --- README.md | 2 +- src/extension.ts | 2 +- src/features/formatting-provider.ts | 107 ++++++++++++++-------------- 3 files changed, 57 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index f6219e39..e225baea 100644 --- a/README.md +++ b/README.md @@ -164,7 +164,7 @@ If the formatter is not present in the `PATH` its location can be input with ```json { - "fortran.formattting.path": "/custom-path-to-formatter-binary", + "fortran.formattting.path": "/custom-path-to-formatter-binary" } ``` diff --git a/src/extension.ts b/src/extension.ts index 8003e337..df0b13c3 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -31,7 +31,7 @@ export function activate(context: vscode.ExtensionContext) { } if (extensionConfig.get('formatter') !== 'Disabled') { - let disposable: vscode.Disposable = vscode.languages.registerDocumentFormattingEditProvider( + const disposable: vscode.Disposable = vscode.languages.registerDocumentFormattingEditProvider( FORTRAN_DOCUMENT_SELECTOR, new FortranFormattingProvider(loggingService) ); diff --git a/src/features/formatting-provider.ts b/src/features/formatting-provider.ts index 8568584b..d419d0e6 100644 --- a/src/features/formatting-provider.ts +++ b/src/features/formatting-provider.ts @@ -10,86 +10,89 @@ import { FORMATTERS } from '../lib/tools'; import { LoggingService } from '../services/logging-service'; import { EXTENSION_ID, promptForMissingTool } from '../lib/helper'; +export class FortranFormattingProvider implements vscode.DocumentFormattingEditProvider { + constructor(private logger: LoggingService) {} -export class FortranFormattingProvider - implements vscode.DocumentFormattingEditProvider { - - constructor(private logger: LoggingService) { } - - public provideDocumentFormattingEdits(document: vscode.TextDocument, options: vscode.FormattingOptions, token: vscode.CancellationToken): vscode.ProviderResult { - - let formatterName: string = this.getFormatter(); + public provideDocumentFormattingEdits( + document: vscode.TextDocument, + options: vscode.FormattingOptions, + token: vscode.CancellationToken + ): vscode.ProviderResult { + const formatterName: string = this.getFormatter(); if (formatterName === 'fprettify') { this.doFormatFprettify(document); - } - else if (formatterName === 'findent') { + } else if (formatterName === 'findent') { this.doFormatFindent(document); - } - else { - this.logger.logError('Cannot format document with formatter set to Disabled') + } else { + this.logger.logError('Cannot format document with formatter set to Disabled'); } - return + return; } /** * Use `fprettify` to format a Fortran file. - * + * * @param document vscode.TextDocument document to operate on */ private doFormatFprettify(document: vscode.TextDocument) { - // fprettify can only do FortranFreeFrom if (document.languageId !== 'FortranFreeForm') { this.logger.logError(`fprettify can only format FortranFreeForm, change to findent for FortranFixedForm formatting`); - return + return; } - const formatterName: string = 'fprettify'; - let formatterPath: string = this.getFormatterPath(); + const formatterName = 'fprettify'; + const formatterPath: string = this.getFormatterPath(); // If no formatter path is present check that formatter is present in $PATH if (!formatterPath) { if (!which.sync(formatterName, { nothrow: true })) { this.logger.logWarning(`Formatter: ${formatterName} not detected in your system. Attempting to install now.`); - let msg = `Installing ${formatterName} through pip with --user option`; + const msg = `Installing ${formatterName} through pip with --user option`; promptForMissingTool(formatterName, msg, 'Python'); } } - let formatter: string = path.join(formatterPath, formatterName); + const formatter: string = path.join(formatterPath, formatterName); - let args: string[] = [document.fileName, ...this.getFormatterArgs()]; + const args: string[] = [document.fileName, ...this.getFormatterArgs()]; // args.push('--silent'); // TODO: pass? // Get current file (name rel to path), run extension can be in a shell?? - let process = cp.spawn(formatter, args); + const process = cp.spawn(formatter, args); // if the findent then capture the output from that and parse it back to the file - process.stdout.on('data', (data) => { this.logger.logInfo(`formatter stdout: ${data}`) }); - process.stderr.on('data', (data) => { this.logger.logError(`formatter stderr: ${data}`) }); - process.on('close', (code: number) => { if (code !== 0) this.logger.logInfo(`formatter exited with code: ${code}`) }); - process.on('error', (code) => { this.logger.logInfo(`formatter exited with code: ${code}`) }); - + process.stdout.on('data', data => { + this.logger.logInfo(`formatter stdout: ${data}`); + }); + process.stderr.on('data', data => { + this.logger.logError(`formatter stderr: ${data}`); + }); + process.on('close', (code: number) => { + if (code !== 0) this.logger.logInfo(`formatter exited with code: ${code}`); + }); + process.on('error', code => { + this.logger.logInfo(`formatter exited with code: ${code}`); + }); } /** * Use `findent` to format a Fortran file. * Creates a temporary file where the output is placed and then deleted - * + * * @param document vscode.TextDocument document to operate on */ private doFormatFindent(document: vscode.TextDocument) { - - const formatterName: string = 'findent'; - let formatterPath: string = this.getFormatterPath(); + const formatterName = 'findent'; + const formatterPath: string = this.getFormatterPath(); // If no formatter path is present check that formatter is present in $PATH if (!formatterPath) { if (!which.sync(formatterName, { nothrow: true })) { this.logger.logWarning(`Formatter: ${formatterName} not detected in your system. Attempting to install now.`); - let msg = `Installing ${formatterName} through pip with --user option`; + const msg = `Installing ${formatterName} through pip with --user option`; promptForMissingTool(formatterName, msg, 'Python'); } } @@ -97,8 +100,10 @@ export class FortranFormattingProvider // Annoyingly findent only outputs to a file and not to a stream so // let us go and create a temporary file - let out = document.uri.path + '.findent.tmp'; - let args: string = ['< ' + document.fileName + ' >', out, ...this.getFormatterArgs()].join(' '); + const out = document.uri.path + '.findent.tmp'; + const args: string = ['< ' + document.fileName + ' >', out, ...this.getFormatterArgs()].join( + ' ' + ); formatter = formatter + ' ' + args; // @note It is wise to have all IO operations being synchronous we don't @@ -108,52 +113,50 @@ export class FortranFormattingProvider cp.execSync(formatter, { stdio: 'inherit' }); fs.copyFileSync(out, document.fileName); fs.unlinkSync(out); - } /** * Get the formatter type * Currently supporting: `findent` and `fprettify` - * + * * Formatters are defined in FORMATTERS (./lib/tools.ts) - * + * * @returns {string} formatter name or `Disabled` */ private getFormatter(): string { - - let config = vscode.workspace.getConfiguration(EXTENSION_ID) - const formatter: string = config.get('formatting.formatter', 'Disabled') + const config = vscode.workspace.getConfiguration(EXTENSION_ID); + const formatter: string = config.get('formatting.formatter', 'Disabled'); if (!FORMATTERS.includes(formatter)) { - this.logger.logError(`Unsupported formatter: ${formatter}`) + this.logger.logError(`Unsupported formatter: ${formatter}`); } - return formatter + return formatter; } /** * Read in any custom arguments for the formatter - * + * * @returns {string[]} list of additional arguments */ private getFormatterArgs(): string[] { - let config = vscode.workspace.getConfiguration(EXTENSION_ID) - const args: string[] = config.get('formatting.args', []) + const config = vscode.workspace.getConfiguration(EXTENSION_ID); + const args: string[] = config.get('formatting.args', []); - return args + return args; } /** * Installation directory for formatter (if not in PATH) - * + * * @returns {string} path of formatter */ private getFormatterPath(): string { - let config = vscode.workspace.getConfiguration(EXTENSION_ID) - const formatterPath: string = config.get('formatting.path', '') + const config = vscode.workspace.getConfiguration(EXTENSION_ID); + const formatterPath: string = config.get('formatting.path', ''); if (formatterPath !== '') { - this.logger.logInfo(`Formatter located in: ${formatterPath}`) + this.logger.logInfo(`Formatter located in: ${formatterPath}`); } - return formatterPath + return formatterPath; } } From 08e1832d9c7e8244c265729fa52e24ce1eee7bc3 Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 10 Nov 2021 14:48:33 +0000 Subject: [PATCH 60/62] Updates changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80c32a4c..47c6b010 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Removes `paths.js` for detecting binaries in favour of `which` +## [2.4.1] + +### Fixed + +- Fixes dummy variable list erroneous syntax highlighting + ([#264](https://github.com/krvajal/vscode-fortran-support/issues/264)) + ## [2.4.0] ### Changed From ff7a2a183ea35efa7c8f87812dec717e40024fad Mon Sep 17 00:00:00 2001 From: gnikit Date: Wed, 17 Nov 2021 01:06:04 +0000 Subject: [PATCH 61/62] Updates README by including formatting annimations --- README.md | 6 +++++- images/findent-demo.gif | Bin 0 -> 499195 bytes images/fprettify-demo.gif | Bin 0 -> 526438 bytes 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 images/findent-demo.gif create mode 100644 images/fprettify-demo.gif diff --git a/README.md b/README.md index e225baea..dcdc51c8 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,10 @@ Two formatters are supported [`findent`](https://github.com/gnikit/findent-pypi) and [`fprettify`](https://github.com/pseewald/fprettify). Both of them can be installed with `pip` automatically through the extension. +findent | fprettify +:-------------------------:|:-------------------------: +![](./images/findent-demo.gif) | ![](./images/fprettify-demo.gif) + The formatter is controlled by the user option ```json @@ -156,7 +160,7 @@ Additional arguments to the formatter can be input using ```json { - "fortran.formatting.args":, ["-Cn", "-Rr"] + "fortran.formatting.args":, ["-Cn", "--align-paren=1"] } ``` diff --git a/images/findent-demo.gif b/images/findent-demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..b66005a4523855129e148e00098f74edf9ba47ac GIT binary patch literal 499195 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%0Df0rObR6_(w?h$yJEAycRILp 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

1Uo;u~8dcB@&mOTy5J&m3{O~F0Q(LLAW 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 L{w@9n8?gQ#fH)6- literal 0 HcmV?d00001 diff --git a/images/fprettify-demo.gif b/images/fprettify-demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..030fbd2c392765ee027ea0683b5aab45acdca572 GIT binary patch literal 526438 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

L*GaL&^FGkIb;p3XumP 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%0DIs`bh4-WT%v|DmiYwm$ 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