Compare commits

...

518 Commits

Author SHA1 Message Date
Arfon Smith
ab33fccddd Merge pull request #2836 from github/cut-release-v4.7.5
Cut release v4.7.5
2016-02-12 16:58:11 -07:00
Arfon Smith
bd95ac0beb Bumping version 2016-02-12 16:27:29 -07:00
Arfon Smith
7b3efb185f Updating grammars 2016-02-12 16:25:05 -07:00
Arfon Smith
9374784651 Merge pull request #2805 from jamesqo/patch-1
Add .xproj to list of XML file extensions
2016-02-04 20:28:47 -07:00
Arfon Smith
aa6af3deed Merge pull request #2822 from AbigailBuccaneer/master
Add detection of GrammarKit-generated files
2016-02-04 20:28:12 -07:00
Arfon Smith
a19e501b44 Merge pull request #2833 from pchaigno/less-new-grammar
New grammar for Less
2016-02-03 08:45:08 -07:00
Paul Chaignon
889a395340 Grammar for Less from Atom package 2016-02-03 14:22:23 +01:00
Paul Chaignon
eb8eb28ca7 Remove Less grammar 2016-02-03 14:19:58 +01:00
Arfon Smith
697b3351e6 Merge pull request #2832 from github/better-perl6
Adding Perl6-specific grammar.
2016-02-02 22:43:12 -07:00
Arfon Smith
9fd80bfd67 Updating to latest perl6 grammar 2016-02-02 22:38:50 -07:00
Arfon Smith
7b58b1ea59 Adding Perl6-specific grammar. 2016-02-02 19:37:35 -07:00
Arfon Smith
c46900396a Merge pull request #2827 from pchaigno/yang
Support for the YANG modeling language
2016-01-31 18:33:07 -06:00
Paul Chaignon
b235ed1223 Grammar for YANG from Atom package 2016-01-31 10:31:06 +01:00
Paul Chaignon
16d9612603 Support for YANG language 2016-01-31 10:29:06 +01:00
Abigail
721e5b4656 Add detection of GrammarKit-generated files
GrammarKit is a plugin by JetBrains for creating custom language plugins
for JetBrains IDEs (such as IntelliJ, RubyMine, CLion and more). It
defines a BNF parser language which can be used to generate a parser in
Java, and it also integrates JFLex for generating a lexer in Java.

Both of these generated Java files can be recognised by a comment on the
first line of the file, and so classifying them as generated is trivial.
2016-01-28 11:47:33 +00:00
Arfon Smith
9961f8bc1c Merge pull request #2797 from lpil/erlang-leex-yecc
support for leex (.xrl) / yecc (.yrl) files
2016-01-23 11:36:43 -05:00
Arfon Smith
c066867d59 Merge pull request #2812 from chrisarcand/improved-vim-modeline-detection
Improved vim modeline detection
2016-01-21 20:12:26 -05:00
Arfon Smith
21093165e1 Merge pull request #2613 from ismailarilik/patch-2
Add colors for some languages.
2016-01-21 20:10:36 -05:00
James Ko
df88de14e3 Add .xproj to list of XML extensions 2016-01-20 19:01:19 -05:00
Arfon Smith
94de431aa5 Merge pull request #2811 from pchaigno/pod-heuristic
Heuristic for Pod vs. Perl
2016-01-18 07:59:47 -05:00
Arfon Smith
502557a97f Merge pull request #2808 from pchaigno/submodules-ssh
HTTPS links for submodules
2016-01-17 16:14:55 -05:00
Paul Chaignon
52938f6dbf Test submodules are using HTTPS links 2016-01-17 18:14:51 +01:00
chrisarcand
d87fad649c Improved vim modeline detection
TLDR: This greatly increases the flexibility of vim modeline detection
to manually set the language of a file.

In vim there are two forms of modelines:

[text]{white}{vi:|vim:|ex:}[white]{options}
examples: 'vim: syntax=perl', 'ex: filetype=ruby'

-and-

[text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
examples: 'vim set syntax=perl:', 'Vim: se ft=ruby:'

As you can see, there are many combinations. These changes should allow
most combinations to be used. The two most important additions are the
use of the keyword 'syntax', as well as the addition of the first form
(you now no longer need to use the keyword 'set' with a colon at the end).
The use of first form with 'syntax' is very, very common across GitHub:

https://github.com/search?l=ruby&q=vim%3A+syntax%3D&ref=searchresults&type=Code&utf8=%E2%9C%93
2016-01-16 08:57:20 -05:00
Paul Chaignon
d8666e5309 Heuristic for Pod vs. Perl
.pod files classified as Pod if they contain any Pod syntax
2016-01-16 11:21:26 +01:00
Arfon Smith
0c071990cb Merge pull request #2809 from github/cut-release-v4.7.4
v4.7.4 release
2016-01-15 10:34:50 -05:00
Arfon Smith
77dfb19a50 Bumping to v4.7.4 2016-01-15 09:21:43 -05:00
Arfon Smith
49254f1f74 Grammar update 2016-01-15 09:19:24 -05:00
Arfon Smith
9dd952c175 Merge pull request #2807 from mrmonday/patch-1
Support .rs.in as a file extension for Rust files.
2016-01-15 09:11:36 -05:00
Robert Clipsham
0b9897db1f Support .rs.in as a file extension for Rust files.
When using syntax extensions in stable or beta Rust channels using the syntex package, it is common to use the file extension .rs.in for the source file, and .rs for the generated file.
2016-01-11 19:15:01 +00:00
Paul Chaignon
71f124faa5 HTTPS links for submodules
When cloning the repository with all its submodules,
users without an SSH key registered will fail to clone
submodules with an SSH link
2016-01-10 10:10:41 +01:00
Arfon Smith
470bd34349 Merge pull request #2800 from github/2794-local
[UPDATED] Switch to a different (and better) grammar for Inform 7 source code
2016-01-07 16:37:28 -05:00
Arfon Smith
65087dd7b8 Merge branch 'master' into 2794-local 2016-01-07 16:28:54 -05:00
Arfon Smith
89c5361f25 Merge pull request #2772 from ibnfirnas/fix-copypasta-artifact
Remove copypasta artifact.
2016-01-07 16:26:10 -05:00
Arfon Smith
f82cc26e4f Merge pull request #2778 from pchaigno/wiki
New extensions for consistency with Markup
2016-01-07 16:25:47 -05:00
Louis Pilfold
15232fc072 Add the LFE lexer as an example of erlang .xrl 2016-01-04 12:17:31 +00:00
Louis Pilfold
0a7aab947c Add the Elixir parser as an example of erlang .yrl 2016-01-04 12:16:32 +00:00
Louis Pilfold
5906fa81bb support for Erlang leex (.xrl) / yecc (.yrl) files 2016-01-04 11:12:39 +00:00
Arfon Smith
1b2f574af2 Merge pull request #2782 from pchaigno/perl-heuristic-order
Reorder Perl heuristic rules
2016-01-03 07:44:54 -05:00
Paul Chaignon
ca4bc6110f Remove 'use strict' from Perl6 sample 2016-01-03 11:47:09 +01:00
Arfon Smith
a944769d61 Grammars update 2016-01-02 22:18:27 -05:00
Arfon Smith
98a31515ef Merge pull request #2796 from github/2703-local
MagicPython
2016-01-02 22:09:52 -05:00
Arfon Smith
3e665099ac Updating Python grammars 2016-01-02 22:04:16 -05:00
Arfon Smith
5400b534e4 Merge branch 'master' into 2703-local 2016-01-02 21:38:37 -05:00
Arfon Smith
6f2d4dc195 Merge pull request #2788 from nwolverson/update-purescript-submodule
Update PureScript submodule (moved repo, grammar tweak)
2016-01-02 21:33:21 -05:00
Arfon Smith
4f7fac3ba1 Merge pull request #2783 from jrnold/add-stan-extension
Add stan extension
2016-01-02 21:32:14 -05:00
Arfon Smith
fd6569830a Merge pull request #2792 from aqnouch/patch-1
Updated copyright to 2016
2016-01-02 21:23:52 -05:00
Andrew Plotkin
5d4cad6394 Remove the old submodule entry. 2016-01-01 22:40:23 -05:00
Andrew Plotkin
b790a49282 Remove the old Sublime-Inform grammar from the submodules list. 2016-01-01 22:25:11 -05:00
Andrew Plotkin
537b83c759 Switch from Sublime-Inform grammar to language-inform7 grammar
for Inform 7 source code.
2016-01-01 22:23:01 -05:00
Andrew Plotkin
c0b9e2c3f4 Update comment. 2016-01-01 21:52:51 -05:00
Andrew Plotkin
f488b9b9f7 Test strings and substs in a doc comment. 2016-01-01 17:22:06 -05:00
Andrew Plotkin
7060b116f4 Reword a little. 2016-01-01 16:54:55 -05:00
Andrew Plotkin
0f4cf11294 Wrong semicolon. 2016-01-01 16:34:23 -05:00
Andrew Plotkin
048496723b Include lots more forms of Inform7 syntax. Including embedded Inform6
syntax.
2016-01-01 16:15:03 -05:00
AQNOUCH Mohammed
70068f74f1 Updated copyright to 2016 2016-01-01 01:53:09 +00:00
Nicholas Wolverson
6f197bacc7 Update PureScript submodule (moved repo, grammar tweak)
Updated grammar to support triple-quoted strings properly:
0c53f8162e

atom-language-purescript repo has been moved to purescript-contrib org,
update the URL.
2015-12-29 23:22:53 +00:00
jrnold
24a89d2d75 add tm_grammar for Stan 2015-12-28 22:32:53 -08:00
jrnold
1ac16cbec7 add vendor for Stan 2015-12-28 22:31:49 -08:00
jrnold
8144438f39 Add color for Stan
Use the brick-red color of the [Stan logo](https://raw.githubusercontent.com/stan-dev/logos/master/logo.png).
2015-12-27 18:50:43 -08:00
jrnold
f141abbc73 add tm_scope for Stan 2015-12-24 16:05:06 -08:00
jrnold
5329b96793 add Stan samples 2015-12-24 15:55:14 -08:00
jrnold
7a70931066 add Stan to languages 2015-12-24 15:55:00 -08:00
Paul Chaignon
9a070d7bb3 Reorder Perl heuristic rules
Order heuristic rules by accuracy
Heuristic rules which are expected to generated
less false positives should be tested first
2015-12-23 21:43:55 +01:00
Paul Chaignon
189b2d684b .rst.txt and .rest.txt as reStructuredText extensions 2015-12-20 16:21:11 +01:00
Paul Chaignon
71dfac26fe .wiki extension as Mediawiki 2015-12-20 13:09:00 +01:00
Arfon Smith
efdc790374 Merge pull request #2776 from humzashah/minor-code-improvements
minor code improvements
2015-12-18 11:50:25 -05:00
Syed Humza Shah
a3613dc438 fixed a typo 2015-12-18 01:43:01 +00:00
Syed Humza Shah
97afedd861 removed usage of keyword as variable
this was done mainly to fix annoying syntax highlighting
2015-12-18 01:27:58 +00:00
Syed Humza Shah
00a436f175 used proper 'if/elsif/end' syntax 2015-12-18 01:24:05 +00:00
Siraaj Khandkar
aa2e3000cd Remove copypasta artifact. 2015-12-16 14:00:48 -05:00
Arfon Smith
10e0fa4360 Merge pull request #2771 from ibnfirnas/add-mathematica-test-file-extension
Add mathematica unit test file extension
2015-12-15 19:48:05 -05:00
Siraaj Khandkar
0473af368f Add sample Mathematica test files. 2015-12-15 13:37:55 -05:00
Siraaj Khandkar
b82f563c38 Add Mathematica test file extension: .mt 2015-12-15 13:33:03 -05:00
Arfon Smith
344297895b Merge pull request #2768 from williamd1k0/master
Add Ren'Py language and grammars
2015-12-14 09:41:45 -05:00
William Claude Tumeo
d3c525645b Fix sample folder name and language order 2015-12-13 15:58:14 -02:00
William Claude Tumeo
59d02e5138 Add language-renpy submodule 2015-12-13 00:20:25 -02:00
William Claude Tumeo
8522dc1d33 Add Ren'Py language and grammars 2015-12-13 00:16:09 -02:00
Vicent Marti
53d238f310 Merge pull request #2766 from github/piki/clear-cache
Catch `ENOENT` in `clear_cache`
2015-12-10 09:08:40 +01:00
Patrick Reynolds
92ed2d189e Catch ENOENT in clear_cache
There's no need for `clear_cache` to fail if the cache doesn't exist,
either because we call `clear_cache` twice or because no cache was
previously written on this particular repo.
2015-12-09 23:24:32 -06:00
Arfon Smith
7133c3b11a Merge pull request #2765 from github/cut-release-v4.7.3
Bumping version to v4.7.3
2015-12-08 23:17:35 -05:00
Arfon Smith
d72114083b Bumping version to v4.7.3 2015-12-08 22:30:17 -05:00
Arfon Smith
683925fcd5 Updating grammars 2015-12-08 22:28:46 -05:00
Arfon Smith
1c8bf32d35 Merge pull request #2759 from pchaigno/click
Support for the Click modular router language
2015-12-08 16:08:55 -05:00
Paul Chaignon
28913833f4 Merge branch 'master' into click 2015-12-08 22:00:49 +01:00
Arfon Smith
c6752be546 Merge pull request #2749 from Alhadis/maxscript
Add language support for MAXScript
2015-12-08 08:04:13 -05:00
Arfon Smith
395e474cad Merge pull request #2763 from github/2746-local
Jupyter notebook, version 2
2015-12-08 07:45:57 -05:00
Arfon Smith
16ea189aa6 Colour switch 2015-12-08 07:39:43 -05:00
marcelo-ramires
ac81fc5da9 Changing Jupyter Notebook color to a further darker shade to make it even more different from Mask's one 2015-12-07 14:12:18 -02:00
marcelo-ramires
58191c10b3 Changing Jupyter Notebook color to make it more different from Mask's one 2015-12-07 14:00:18 -02:00
marcelo-ramires
c2ca23d580 Removing extra leading space 2015-12-05 19:38:02 -02:00
marcelo-ramires
b5dfb40c7d Setting Jupyter Notebook's language property tm_scope to source.json 2015-12-05 18:57:40 -02:00
marcelo-ramires
7e647fd915 Renaming the sample folder to match Jupyter Notebook's, making the language type markup, and adding a real sample file instead of a dummy one 2015-12-05 18:48:17 -02:00
Paul Chaignon
5b9f9bc0e6 Grammar for Click from Atom package 2015-12-05 14:03:02 +01:00
Paul Chaignon
b1c057fa30 Support for the Click router config language 2015-12-05 13:58:14 +01:00
marcelo-ramires
ca348dd373 Moving .ipynb extension from python language to a new language called Jupyter Notebook 2015-12-05 03:25:38 -02:00
Arfon Smith
b802045c5c Grammar updates 2015-12-03 17:27:17 -06:00
Arfon Smith
3c244a9501 Merge pull request #2758 from github/2667-local
Add Ur/Web support
2015-12-03 16:03:12 -06:00
Arfon Smith
832a7b9b06 Merge branch 'master' into 2667-local 2015-12-03 15:41:25 -06:00
Arfon Smith
e7d856345f Merge pull request #2757 from scottclowe/octave-alias
Add octave as an alias for Matlab syntax
2015-12-03 15:35:55 -06:00
Scott Lowe
ac559effaa Add octave as an alias for Matlab syntax
Since Octave is a clone of Matlab, the syntax is exactly the same
and hence it is desirable for highlighting to be exactly the same
as well.
Adding octave as an alias for Matlab will trivially provide support
for highlighting Octave code, and will ensure the two languages
always use the same syntax highlighting rules.
2015-12-03 21:00:21 +00:00
Arfon Smith
95d0daba80 Merge pull request #2755 from github/add-elixir-interpreter
Adding elixir as an interpreter
2015-12-02 16:23:14 -06:00
Arfon Smith
a0ad1523a1 Adding elixir as an interpreter 2015-12-02 14:52:29 -06:00
Alhadis
06c049b8c0 Change ".ms" heuristic to accommodate MAXScript
Linguist currently uses the presence of "move" commands to differentiate
a GAS file from Groff. This is problematic with MAXScript, with includes
a built-in function of that name. Furthermore, because of the language's
exhaustive vocabulary, case insensitive nature and flexible syntax, it's
difficult to impose rigid criteria on classifying it.

This commit modifies the heuristic to assume the following flow:

    1. If a line contains ".include" or ".global"/".globl" which doesn't
       follow a non-whitespace character, assume GAS.

    2. Otherwise, if the line starts with a command like ".LG7E0" with a
       possible string of whitespace before it, assume it's also GAS.

       UNLESS either of the following conditions are true:
       2a. The token is enclosed by a string or /* multiline comment */
       2b. The previous line ends with a backslash to denote a statement
           broken between lines, with possible whitespace and/or comment
           sequences between the backslash and the actual newline.

    3. If neither of the above are met, assume the file is MAXScript.

This approach may appear overly-inclusive, but given real-world usage of
MAXScript includes writing brief files with few distinguishing keywords,
it's reasonable to permit this leniency.
2015-11-28 04:40:29 +11:00
marcelo-ramires
24c7380765 Adding .ipynb (Jupyter Notebook) extension to python, and a sample file 2015-11-26 02:55:39 -02:00
Alhadis
73ef1bf156 Update MAXScript submodule to version v1.0
This is the first "real" version of the language package, which I pushed
to Atom's packages repository earlier before.
2015-11-26 05:58:10 +11:00
Arfon Smith
c8b30a62f9 Merge pull request #2741 from github/cut-release-v4.7.2
Cut release v4.7.2
2015-11-23 15:24:29 -06:00
Arfon Smith
48dfdd2dfe Bumping version to v4.7.2 2015-11-23 14:04:48 -06:00
Arfon Smith
68727f724a Grammars update 2015-11-23 13:53:53 -06:00
Alhadis
f46e053633 Darken MAXScript's language colour
Rake's tests are failing because #0AA is too similar to the colour being
used by another language (Dart: #00B4AB). This commit increases contrast
enough to satisfy the build (with 00A6A6 being the closest shade allowed
by the current colour threshold).

See also: github/linguist@3c96f9e
2015-11-23 19:04:09 +11:00
Alhadis
d2e739ba8c Update MAXScript submodule to include license file
See also: Alhadis/language-maxscript@96dbacf5b
2015-11-23 19:02:50 +11:00
Alhadis
37174e1d2c Include MAXScript submodule in grammars directory 2015-11-23 17:34:43 +11:00
Alhadis
cdb5206def Define MAXScript's language traits
The colour chosen to represent the language is taken from Autodesk's own
colouring scheme, which should easily be recognised by their userbase.
2015-11-23 17:14:35 +11:00
Alhadis
d636eaf1e3 Add example MAXScript files from Autodesk reference 2015-11-23 17:12:18 +11:00
Arfon Smith
49f3eb1286 Merge pull request #2736 from ppwwyyxx/patch-1
add jquery.fancybox.css to vendor list
2015-11-22 21:16:45 -06:00
Yuxin Wu
8ab94a8643 Use one line for jquery fancybox in vendor
(just another commit to pass CLA check
2015-11-21 21:55:08 -05:00
Yuxin Wu
f72c337c5b add jquery.fancybox.css to vendor list
fancybox has both js and css
2015-11-21 21:48:03 -05:00
Arfon Smith
d22321de07 Merge pull request #2733 from github/cake
.cake
2015-11-19 20:34:36 -06:00
Arfon Smith
473e5db51f Adding sample for Coffeescript too 2015-11-19 20:24:23 -06:00
Arfon Smith
8b9fc4683a Merge branch 'master' into cake 2015-11-19 20:19:08 -06:00
Arfon Smith
3b4415cc3c Merge pull request #2729 from larsbrinkhoff/fortran
Recognise END statement in FORTRAN files.
2015-11-19 20:07:10 -06:00
Arfon Smith
2afce1754a Merge pull request #2731 from soc/patch-1
Change Scala language color to Scala language's main color
2015-11-19 20:06:22 -06:00
Arfon Smith
f232b93214 Merge pull request #2728 from larsbrinkhoff/fs
Add new .eam.fs sample for Formatted.
2015-11-19 20:05:45 -06:00
soc
db64f192fa Change Scala language color to Scala language's main color 2015-11-19 15:25:55 +01:00
Lars Brinkhoff
ca96ecdc55 Recognise END statement in FORTRAN files. 2015-11-19 08:51:13 +01:00
Lars Brinkhoff
2a06d1aa19 Add new sample for Formatted.
Sample from qingguang/lammps-sph; GPL v2 license.
2015-11-19 07:59:31 +01:00
Arfon Smith
b2fa2a1f46 Merge pull request #2655 from iblech/pickle
Detect Pickle data dumps (.p, .pkl, .pickle)
2015-11-16 17:57:53 -06:00
Ingo Blechschmidt
6839516b5c Only classify .pkl files as Pickle data dumps
It seems to be the dominant extension at the moment, even though several
Python resources use `.p` or `.pickle`. This was discussed in #2655.
2015-11-17 00:05:22 +01:00
Arfon Smith
7247c80fac Merge pull request #2722 from github/cut-release-v4.7.1
Cut release v4.7.1
2015-11-12 19:51:41 -06:00
Arfon Smith
01d05d1d4e Bumping to v4.7.1 2015-11-12 18:43:16 -06:00
Arfon Smith
8db4cc482e Grammar update 2015-11-12 18:42:24 -06:00
Arfon Smith
074f17ed98 Merge pull request #2712 from matiasinsaurralde/master
Support for JSCAD files
2015-11-12 18:18:52 -06:00
Arfon Smith
68b553ea55 Updating grammars 2015-11-10 09:57:04 +00:00
Arfon Smith
fd5da9cb15 Merge pull request #2690 from github/licensee-6
Upgrade to licensee 6
2015-11-10 09:41:09 +00:00
Arfon Smith
d081f687b0 Merge branch 'master' into licensee-6 2015-11-10 09:34:39 +00:00
Arfon Smith
34abe5b983 Merge pull request #2717 from meatballhat/supercollider-grammar
Add SuperCollider grammar
2015-11-10 09:31:24 +00:00
Arfon Smith
5765f1faf1 Merge pull request #2718 from meatballhat/travis-apt-update
Fetch libicu via Travis, switch back to container-based
2015-11-10 09:30:04 +00:00
Dan Buch
550b67215c Fetch libicu via Travis, switch back to container-based
This is a test.  I don't understand the details of how the `bundle config
build.charlock_holmes` bit works/fails, so the intent here is to get a PR posted
for purposes of getting feedback via the full Travis machinery.
2015-11-08 06:41:22 -05:00
Dan Buch
d7b2826113 Add SuperCollider grammar
plus a few minor language support updates including:

- recognize `sclang` and `scsynth` interpreters
- set `tm_scope: source.supercollider`
- reorder extensions so that `.sc` is primary
2015-11-08 06:28:14 -05:00
Arfon Smith
b4f94c7c25 Merge pull request #2706 from redroot/add-csl-as-xml-support
adding csl as an extension for XML, included sample
2015-11-05 09:07:49 -08:00
Arfon Smith
d24677adbb Merge pull request #2716 from github/faster-string-tokenizer
Use negative lookbehind when tokenizing string literals
2015-11-05 08:40:34 -08:00
Arfon Smith
04f981eeac Merge pull request #2714 from github/aroben-patch-1
Remove mentions of treatment of vendored files in diffs
2015-11-05 08:14:26 -08:00
Arfon Smith
b53d84d8ff Merge pull request #2600 from manveru/pony-language
Add Pony language
2015-11-05 08:08:38 -08:00
Adam Roben
fea8bb21a0 Use negative lookbehind when tokenizing string literals
This can double the speed of tokenizing large RTF files that use \'hh
escape sequences.
2015-11-05 10:18:44 -05:00
Adam Roben
996ed8a8b1 Remove mentions of treatment of vendored files in diffs
Vendored files are treated just like any other files when diffing on github.com.
2015-11-04 13:26:24 -05:00
Matias Insaurralde
daef164163 adding jscad sample file 2015-11-03 00:24:15 -03:00
Matias Insaurralde
61a5cab1f2 adding extension for OpenJSCAD 2015-11-03 00:03:00 -03:00
Redth
2fddaaf3d7 Reordered extensions so the primary .cs is first 2015-10-31 12:45:54 -04:00
Redth
741d246581 Add .cake extension for C#
This adds the .cake file extension to the C# language.

Here is a search in the wild: https://github.com/search?q=extension%3Acake+NOT+coffee&type=Code

Cake (C# Make) is a cross platform build automation system with a C# DSL to do things like compiling code, copy files/folders, running unit tests, compress files and build NuGet packages.

You can find out out more about cake here: http://cakebuild.net/
2015-10-30 15:06:38 -04:00
redroot
1b23e81541 adding csl as an extension for XML, included sample 2015-10-30 10:40:15 +00:00
Arfon Smith
362d300cb0 Blob not FileBlob 2015-10-26 09:06:42 +00:00
Dario Bertini
7b185cc2f3 Switch to MagicPython for Python sources 2015-10-23 20:49:05 +01:00
Arfon Smith
932726863f Merge branch 'master' into licensee-6 2015-10-23 10:29:47 +01:00
Arfon Smith
a35a3e98ce Merge pull request #2702 from github/drop-ruby-1.9.3
Dropping support for Ruby 1.9.3
2015-10-23 10:29:13 +01:00
Arfon Smith
7c404e72d2 Dropping support for Ruby 1.9.3 2015-10-23 10:20:31 +01:00
Arfon Smith
8736e2305d Merge pull request #2700 from pchaigno/django-alias
Django as an alias for HTML+Django
2015-10-22 20:39:14 +01:00
Paul Chaignon
a13664698f Django as an alias for HTML+Django 2015-10-22 20:28:40 +02:00
Arfon Smith
6e934067a8 Merge pull request #2698 from phase/master
Change D color to match the website
2015-10-22 09:26:31 +01:00
phase
3040642f97 Change D color to its logo 2015-10-21 16:42:43 -07:00
phase
dd7e44f957 Change D color to match the website
The original yellow color doesn't fit D very well, and it looks an awful lot like the color for JavaScript. This changes it to the color used on the website's sidebar, and nice dark maroon: http://www.colorpicker.com/2e2324
2015-10-21 15:34:25 -07:00
Arfon Smith
6b56a243e7 Merge pull request #2696 from github/cut-linguist-4.7.0
Bumping to version 4.7.0
2015-10-21 10:19:16 +01:00
Arfon Smith
5d08605aef Bumping to version 4.7.0 2015-10-21 09:04:17 +01:00
Arfon Smith
bf705cbaf2 Grammars update 2015-10-21 09:02:56 +01:00
Arfon Smith
fe827896e0 Merge pull request #2681 from miek/kicad-brd-extension
Add .brd extension for KiCad
2015-10-21 08:55:05 +01:00
Arfon Smith
317219e479 Merge branch 'master' into licensee-6 2015-10-21 08:51:10 +01:00
Arfon Smith
64e7df7596 Merge pull request #2694 from github/memory_blob
Memory blob
2015-10-21 08:49:42 +01:00
Arfon Smith
b3ff84872b Merge branch 'master' into memory_blob 2015-10-20 19:24:43 +01:00
Arfon Smith
5d176a781c Fixing the build :-\ 2015-10-20 19:24:04 +01:00
Arfon Smith
e0c97f97ba Merge branch 'master' into memory_blob 2015-10-20 12:36:26 +01:00
Arfon Smith
83f358976e Fixing up some old MemoryBlob references 2015-10-20 12:33:43 +01:00
Arfon Smith
9ee6153891 Merge pull request #2676 from lucky/master
Support for files generated by Racc.
2015-10-19 12:05:12 +01:00
Arfon Smith
825e640061 Merge pull request #2684 from jeffkreeftmeijer/eex
Add EEx (Embedded Elixir)
2015-10-19 12:02:18 +01:00
Arfon Smith
e5ae213839 Merge pull request #2689 from edendramis/master
Add FreeMarker syntax highlighting
2015-10-19 12:00:38 +01:00
Arfon Smith
74e034c689 Merge pull request #2686 from pchaigno/metal
Support for Metal language
2015-10-19 11:49:36 +01:00
Evangelia Dendramis
a55a60a161 removing group and search term 2015-10-16 18:19:53 -07:00
Brandon Keepers
9d865ec018 license of factor grammar is now detected properly 2015-10-16 15:16:04 -04:00
Brandon Keepers
8b01e3dead Upgrade to licensee 6.0.0b1 2015-10-16 15:15:34 -04:00
edendramis
9e3cc01715 adding FreeMarker to grammars.yml 2015-10-16 09:54:17 -07:00
edendramis
0f204767a9 updating examples 2015-10-15 14:48:20 -07:00
edendramis
11e3251efd adding samples 2015-10-15 14:43:02 -07:00
edendramis
1f1416a5f7 adding freemarker grammar 2015-10-15 14:15:27 -07:00
edendramis
b3786f3825 Merge remote-tracking branch 'upstream/master' 2015-10-15 14:07:13 -07:00
Paul Chaignon
09c2eee91e Support for Metal language 2015-10-13 07:57:58 +02:00
Arfon Smith
dc78b14902 Merge pull request #2683 from hipikat/patch-1
Correct typo ("Any information you [c]an add")
2015-10-12 10:09:17 +01:00
Arfon Smith
500ce0959a Merge branch 'master' into memory_blob 2015-10-12 09:49:22 +01:00
Adam Wright
aa0c9e3572 Correct typo ("Any information you [c]an add") 2015-10-12 14:40:18 +08:00
Mike Walters
e6de75d48a Add .brd extension for KiCad 2015-10-11 23:50:29 +01:00
Arfon Smith
a5ad0a34f8 Merge pull request #2675 from fbonzon/master
Add .phps extension for PHP
2015-10-11 21:32:17 +01:00
Arfon Smith
6e609cc4e3 Merge pull request #2680 from k2b6s9j/patch-1
The Crystal Grammar repository has moved.
2015-10-11 21:31:55 +01:00
Kepler Sticka-Jones
27727a927f The Crystal Grammar repository has moved.
And I'm kinda thinking about changing my GitHub name...
2015-10-10 23:49:07 -06:00
Jared Kuolt
5ff580df0a Support for files generated by Racc.
This changeset includes a sample racc file from [this auto-generated
file](44e9bf0440/lib/rjson/parser.rb)
(MIT-licensed).

[Racc](https://github.com/tenderlove/racc) Racc is an LALR(1) parser
generator. It is written in Ruby itself, and generates ruby programs.
2015-10-09 16:20:59 -07:00
Jeff Kreeftmeijer
b34acac722 Add EEx (Embedded Elixir)
EEx is embedded Elixir: http://elixir-lang.org/docs/v1.0/eex/. Here's
some in-the-wild usage on Github: https://github.com/search?p=100&q=extension%3Aeex+NOT+nothack&ref=searchresults&type=Code&utf8=✓

This uses the "html_elixir" Ace mode, which was added in this pull
request on the Ace project: https://github.com/ajaxorg/ace/pull/2696
2015-10-10 00:20:38 +02:00
François B
37840856ed Add .phps extension for PHP
.phps stands for "PHP Source"

Useful to show examples of PHP code. A properly-configured server will
output a .phps file as is, with color-formated source code instead of
the HTML that would normally be generated.

Usage in GitHub:
https://github.com/search?utf8=%E2%9C%93&q=extension%3Aphps+NOT+nothack&
type=Code

Example taken from:
https://github.com/PHPMailer/PHPMailer/blob/master/examples/mail.phps
2015-10-09 14:43:22 +02:00
Brandon Keepers
acfad4371f Mention alphabetical order in contributing docs
Closes #2649
2015-10-07 19:41:37 -04:00
Arfon Smith
ae42cc0307 Merge pull request #2672 from github/cut-release-v4.6.4
Cut release v4.6.4
2015-10-05 11:15:35 +01:00
Arfon Smith
d06860df37 Bumping version to v4.6.4 2015-10-05 09:45:32 +01:00
Arfon Smith
7d5d162f6b Updating FSharp grammars to match 2015-10-05 09:45:05 +01:00
Arfon Smith
d39a75b68b Grammar updates 2015-10-05 09:41:56 +01:00
Arfon Smith
d72f7311f6 Merge pull request #2648 from jaredpetersen/master
Added .pck PLSQL file extension
2015-10-05 09:23:56 +01:00
Arfon Smith
3f81b7c179 Merge pull request #2640 from wizawu/master
Add new extension .tsx for TypeScript
2015-10-05 09:21:46 +01:00
Arfon Smith
33d1255a5a Merge pull request #2671 from pchaigno/change-stata-grammar-repo
Change Stata grammar repo
2015-10-05 09:15:15 +01:00
Paul Chaignon
0ebea6a0ff Use pschumm/Stata.tmbundle 2015-10-04 20:45:33 +02:00
Paul Chaignon
c28da3a4a9 Remove statatmbundle/Stata.tmbundle grammar 2015-10-04 20:42:29 +02:00
Julian Squires
538f479b60 Add sample Ur/Web files
Taken from tokenrove/parsur so I don't have to worry about license
hassles.  (You may relicense these samples as necessary.)

It would be nice to have an example of the embedded SQL syntax in a
sample.
2015-10-03 08:28:44 -04:00
Julian Squires
88cc73fa49 Add language definition for Ur/Web
I have omitted the related .urp extension because these are small
files (projects) in a different syntax.
2015-10-03 08:28:44 -04:00
wizawu
d6d368a65d Replace the sample file for .tsx extension
The sample file is from https://github.com/Microsoft/TypeScript/blob/master/tests/cases/conformance/jsx/tsxAttributeResolution9.tsx
2015-10-03 11:01:22 +08:00
wizawu
c5be9cc3e9 Add .tsx extension for XML
The sample file is from https://github.com/nyxcharon/tiled/blob/master/src/examples/water.tsx
2015-10-02 19:50:10 +08:00
E
c462c2bd31 add FreeMarker to languages.yml 2015-10-01 13:59:52 -07:00
wizawu
3426165621 Add a TypeScript sample with .tsx extension 2015-09-30 13:45:38 +08:00
Vicent Marti
98b99e38bb Merge pull request #2654 from github/vmg/git-linguist-fixes
Small fixes for git-linguist
2015-09-28 11:12:49 +02:00
Vicent Marti
d8e3bec499 Bump version 2015-09-28 01:45:49 -07:00
Vicent Marti
7c759d4d29 git-linguist: Do not write cache if repo is gone 2015-09-28 01:45:49 -07:00
Vicent Marti
41d438b47e repository: Do not attempt to scan large repos 2015-09-28 01:45:49 -07:00
Vicent Marti
41911d6921 git-linguist: Properly handle $GIT_DIR from git 2015-09-28 01:45:49 -07:00
Arfon Smith
dca18d77cb Merge pull request #2656 from iblech/better-test-description
Clarified that only nonprimary extensions should be sorted
2015-09-27 20:34:30 +01:00
Ingo Blechschmidt
040af5dad2 Clarify that only nonprimary extensions should be sorted 2015-09-25 19:23:06 +02:00
Ingo Blechschmidt
01bb6c37ab Detect Pickle data dumps (.p, .pkl, .pickle) 2015-09-25 19:06:50 +02:00
Jared Petersen
c624d68628 Added .pck PLSQL file extension 2015-09-24 07:59:06 -07:00
Arfon Smith
4867c49bd9 Merge pull request #2642 from github/license-in-gemspec
Include LICENSE in gem
2015-09-23 09:19:18 +01:00
Brandon Keepers
a354eddf4b Update github-linguist.gemspec 2015-09-22 16:33:08 -04:00
Vicent Marti
9b78c533a5 Merge pull request #2641 from github/js-syntax-fix
github-linguist-grammars 4.6.2
2015-09-21 21:56:33 +02:00
Mislav Marohnić
090ea576b9 github-linguist-grammars 4.6.2 2015-09-21 21:23:40 +02:00
Mislav Marohnić
6a2d33a4b3 Bump language-javascript for syntax highlighting fix
This is primarily to pull
https://github.com/atom/language-javascript/pull/227

Full changelog:
c5c381e...7b14bbb (diff-46d5c1ca71eaebb92619d6c7abc9388d)
2015-09-21 19:04:30 +02:00
wizawu
b54a9c7412 Add new extension .tsx for TypeScript
TypeScript 1.6 has introduced a new .tsx file extension.
2015-09-21 13:48:30 +08:00
Vicent Marti
2c62da7834 Merge pull request #2636 from github/vmg/git-linguist-oid
git-linguist: Delay loading @commit_oid
2015-09-16 16:48:12 +02:00
Vicent Marti
0145a0adb2 git-linguist: Delay loading @commit_oid 2015-09-16 05:50:35 -07:00
Vicent Marti
473282d64c Merge pull request #2630 from github/vmg/memory
4.6.0: Reduce memory pressure
2015-09-15 11:19:45 +02:00
Vicent Marti
c2c068e9db Bump version to 4.6.0 2015-09-14 08:43:10 -07:00
Vicent Marti
13d1f662d1 Add the git-linguist helper 2015-09-14 08:42:51 -07:00
Arfon Smith
bdd57f58a0 Merge pull request #2625 from github/handlebars-group
Adding Handlebars to the HTML group
2015-09-09 09:18:11 +01:00
Arfon Smith
b1bcabd6e6 Adding Handlebars to the HTML group 2015-09-08 12:25:05 +01:00
Arfon Smith
e128c3fa82 Merge pull request #2622 from miksen/patch-1
Language bar clarification in README.md
2015-09-08 12:08:42 +01:00
Arfon Smith
efac9fe750 Merge pull request #2624 from pchaigno/jsx-grammar
New JSX language under JavaScript group
2015-09-08 11:01:44 +01:00
Arfon Smith
2b8545a8fa Merge pull request #2567 from pcantrell/objc-import-statement
#import "*.h" detection for Objective-C
2015-09-08 10:53:32 +01:00
Vicent Marti
b275b5d728 Soften memory pressure 2015-09-07 22:03:29 +02:00
Paul Chaignon
1f46cfafa7 New JSX language under JavaScript group
A specific grammar is needed to highlight .jsx files
Thus, there are now in a distinct language but still in the JavaScript group
2015-09-05 13:31:17 +02:00
miksen
b1dcdf3418 Language bar clarification in README.md
Clarified what the percentages in the Language bar are based on.
2015-09-04 11:49:10 +02:00
Paul Cantrell
4bfd65deb8 #import "*.h" detection for Objective-C 2015-09-03 22:10:27 -05:00
Paul Chaignon
213cf322f5 Merge branch 'master' into blob_in_memory 2015-09-04 00:55:39 +02:00
Arfon Smith
61102812a0 Merge pull request #2619 from github/linguist-generated
Adding support for generated overrides
2015-09-03 15:02:16 +01:00
Arfon Smith
580cfce7fb Adding support for generated overrides 2015-09-03 14:39:27 +01:00
Arfon Smith
f1383d7a45 Merge pull request #2616 from scttnlsn/patch-1
Ignore spec fixtures
2015-09-02 18:35:07 +01:00
Scott Nelson
e4ce5bfe39 Ignore spec fixtures 2015-09-02 12:52:25 -04:00
ismail-arilik
4d2b38497d Remove color attributes of 'type: data's. 2015-09-02 18:53:29 +03:00
ismail-arilik
fc5ae1cfbc Revert colors of some languages.
Revert colors of some languages which have 'type: data' attribute.
2015-09-02 17:53:58 +03:00
ismail-arilik
7e76d1cc6b Update Pascal color to fix the closeness issue. 2015-09-02 17:01:38 +03:00
ismail-arilik
cf834e8a21 Update some colors to fix closeness. 2015-09-02 16:23:33 +03:00
ismail-arilik
ee61466042 Update some colors to fix closeness. 2015-09-02 15:58:46 +03:00
ismail-arilik
35884d482c Update some colors to fix closeness. 2015-09-02 15:38:41 +03:00
ismail-arilik
802de8112c Update some colors to fix closeness. 2015-09-02 14:39:19 +03:00
ismail-arilik
9a76cfc85f Update some colors to fix closeness.
I have used syntactic color values with respect to the table below:

A | B C | D | E | F G | H | I | J K | L M | N O | P Q | R S | T U | V W | X | Y Z
0     1     2   3     4     5   6   7      8        9      A      B     C       D    E     F

For example for Gradle the color should be 4B0283, for Cuda the color should be 1C201C(for six-letter CudaCu) and for reStructuredText the color should be B3BCBC(for six-letter reStru).
2015-09-02 14:16:12 +03:00
ismail-arilik
dc41dd888d Update Cuda color to fix closeness. 2015-09-02 13:31:51 +03:00
Arfon Smith
6ed64f25a2 Merge pull request #2607 from Alhadis/master
Add .geojson/.topojson as JSON extensions / Fix NCL colour
2015-09-02 10:13:31 +01:00
ismail-arilik
827ad80311 Update colors to fix collision.
Colors basically incremented.
2015-09-02 10:16:37 +03:00
ismail-arilik
9e3d8ac4e9 Update Batchfile color. 2015-09-02 09:58:14 +03:00
Alhadis
114a331106 Add ".topojson" as a JSON extension 2015-09-02 07:04:51 +10:00
Arfon Smith
9aa24a216a Merge pull request #2612 from github/cut-release-v4.5.15
Cut release v4.5.15
2015-09-01 21:04:40 +01:00
ismail-arilik
1b327e29ba Add colors for some languages.
These are effected languages and the reason behind the proposed colors:

- Ant Build System: The color of logo (http://ant.apache.org/images/project-logo.gif).
- AppleScript: AppleScript editor logo (https://en.wikipedia.org/wiki/AppleScript#/media/File:AppleScript_Editor_Logo.png).
- Batchfile: Batch file icon in Windows (https://en.wikipedia.org/wiki/Batch_file#/media/File:Batch_file_icon_in_Windows_Vista.png).
- Bison: A color taken from a bison (https://en.wikipedia.org/wiki/Bison#/media/File:Americanbison.jpg).
- Cucumber: Official logo color (https://cucumber.io/images/cucumber-logo.svg).
- Cuda: Nvidia(creator of CUDA) logo color (http://www.nvidia.com/content/includes/redesign2010/images/redesign10/nvidia_logo.png).
- Gradle: Official Gradle logo color (https://gradle.org/wp-content/uploads/2015/03/GradleLogoReg.png).
- Hack: Hack logo color (http://hacklang.org/wp-content/themes/hack/hack.png).
- Haml: Haml logo color (http://haml.info/images/haml.png).
- LLVM: Eye color of the dragon logo of LLVM (http://llvm.org/img/DragonMedium.png).
- Less: Less logo color (http://lesscss.org/public/img/logo.png).
- Markdown: The Daring Fireball logo color (http://daringfireball.net/graphics/logos/).
- Maven POM: The maven logo color (https://en.wikipedia.org/wiki/Apache_Maven#/media/File:Maven_logo.svg).
- Nginx: The nginx logo color (http://nginx.org/nginx.png).
- NumPy: The NumPy logo color (http://www.numpy.org/_static/numpy_logo.png).
- RDoc: I couldn'd find any logo, so have used the color of the name of RDoc in the official site (http://docs.seattlerb.org/rdoc/).
- SCSS: The Sass logo color (http://sass-lang.com/assets/img/logos/logo-b6e1ef6e.svg).
- Sass: The Sass logo color (http://sass-lang.com/assets/img/logos/logo-b6e1ef6e.svg).
- XML: A random color.
- XSLT: A random color.
- YAML: The color of the name of YAML in the official site (http://yaml.org/).
- Yacc: A random color.
- reStructuredText: The official logo color (http://docutils.sourceforge.net/rst.png).
2015-09-01 21:51:48 +03:00
Arfon Smith
13702451ab Bumping to v4.5.15 2015-09-01 19:13:02 +01:00
Arfon Smith
f0242f6f97 Updating grammars 2015-09-01 19:12:27 +01:00
Arfon Smith
9775820398 Merge pull request #2591 from jtbandes/master
Vendored definitions for Xcode-related files
2015-09-01 18:53:08 +01:00
Arfon Smith
7daf26bcd0 Merge pull request #2604 from larsbrinkhoff/alphabetise-heuristics
Alphabetise heuristics.
2015-09-01 15:25:49 +01:00
Arfon Smith
231f705098 Merge pull request #2606 from thejameskyle/jsproj
Add .jsproj extension
2015-09-01 15:23:53 +01:00
Arfon Smith
893ab8fd8d Merge pull request #2610 from ismail-arilik/patch-1
Add color for the PL/SQL language.
2015-09-01 15:20:49 +01:00
ismail-arilik
5afdd2c533 Add color for the PL/SQL language.
I have added color to the PL/SQL language: #dad8d8. I take this color from a window background which evokes the interface of the language.
2015-09-01 14:23:59 +03:00
Lars Brinkhoff
e4f5c0066a Add checks to keep heuristics alphabetised. 2015-09-01 08:21:34 +02:00
Alhadis
a167f852dd Alphabetise JSON extensions 2015-09-01 07:33:07 +10:00
Alhadis
b428bce126 Quote NCL language's colour value
Without double-quotes, the hex colour is interpreted as a YAML comment.

Originally added in 2d39258.
2015-09-01 07:24:17 +10:00
Alhadis
e62d0e19a5 Add ".geojson" as a JSON extension 2015-09-01 07:12:18 +10:00
James Kyle
9b8bf9068f Move jsproj example to xml directory 2015-08-31 11:35:01 -07:00
James Kyle
6e05edc350 Add .jsproj extension 2015-08-31 10:26:29 -07:00
Lars Brinkhoff
dd8eaf2893 Alphabetise heuristics. 2015-08-31 08:53:51 +02:00
Michael Fellinger
ecc750f445 Merge branch 'master' of https://github.com/github/linguist into origin/patch-1
* 'master' of https://github.com/github/linguist:
  Switch to Apache License.
  also add help for unapproved licenses
  Update X10 grammar license.
  add some help text to license test
  Fix typo in Obj-C heuristic keyword
  Add the X10 language (http://x10-lang.org/).
  Sublime Text workspace files as vendored
  Make Slick regexp more general
  Tests for new vendored files
  Test for new CodeMirror regexp
  New JS vendored files
  Fix CodeMirror regex for vendored files
  added *.lslp to samples/LSL folder
  added *.lslp as LSL(Linden Scripting Language)

Conflicts:
	.gitmodules
2015-08-28 14:08:31 -04:00
Michael Fellinger
cf5268a7d4 add Pony language 2015-08-28 14:04:10 -04:00
Ben Balter
e24efad5ff Merge pull request #2594 from github/license-help
Add some additional help text to license test
2015-08-26 14:55:37 -04:00
Arfon Smith
58a34cdb7d Merge pull request #2589 from mandel/master
Add the X10 language.
2015-08-26 19:36:54 +01:00
Louis Mandel
b1c6b330e9 Switch to Apache License. 2015-08-26 14:26:30 -04:00
Ben Balter
7c3e265033 also add help for unapproved licenses 2015-08-26 12:31:29 -04:00
Louis Mandel
13695a716c Update X10 grammar license. 2015-08-26 09:46:02 -04:00
Ben Balter
c9e43804d6 add some help text to license test 2015-08-26 09:26:04 -04:00
Arfon Smith
1535e3553e Merge pull request #2580 from LeonaMorro/master
add *.lslp as an additional extension for LSL (LindenScriptingLanguage)
2015-08-26 14:09:48 +01:00
Arfon Smith
0ac05bbbeb Merge pull request #2582 from pchaigno/vendor-libraries
Vendored JS files
2015-08-26 14:02:57 +01:00
Arfon Smith
d3f979d640 Merge pull request #2592 from jtbandes/typo
Fix typo in Obj-C heuristic keyword
2015-08-26 12:52:05 +01:00
Jacob Bandes-Storch
0e9ded45dc Fix typo in Obj-C heuristic keyword
`synchronised` → `synchronized`
2015-08-26 00:34:00 -07:00
Jacob Bandes-Storch
a2ca886510 Vendored definitions for Xcode-related files 2015-08-25 23:42:20 -07:00
Louis Mandel
25a1af3775 Add the X10 language (http://x10-lang.org/). 2015-08-24 13:26:43 -04:00
Paul Chaignon
0d8e0a2970 Sublime Text workspace files as vendored 2015-08-24 12:32:26 +02:00
Paul Chaignon
c0fff6c8a8 Make Slick regexp more general 2015-08-21 12:30:01 +02:00
Paul Chaignon
e6b4428614 Tests for new vendored files 2015-08-21 12:24:04 +02:00
Paul Chaignon
4e6e69833d Test for new CodeMirror regexp 2015-08-21 12:15:17 +02:00
Paul Chaignon
1d9faff4c6 New JS vendored files 2015-08-21 12:13:42 +02:00
Paul Chaignon
7025cbe760 Fix CodeMirror regex for vendored files 2015-08-21 12:12:52 +02:00
LeonaMorro
e922b7c2ca added *.lslp to samples/LSL folder 2015-08-21 11:44:23 +02:00
LeonaMorro
96518d2d0f added *.lslp as LSL(Linden Scripting Language) 2015-08-21 11:17:12 +02:00
Arfon Smith
1241b20ba1 Merge pull request #2578 from blakeembrey/correct-raml-type
Make RAML a markup language
2015-08-20 20:56:21 +01:00
Ben Balter
f03f5c1628 Merge pull request #2568 from github/licensee
Use Licensee to classify submodule licenses
2015-08-20 15:42:50 -04:00
Ben Balter
cb550a3662 remove some random submodules 2015-08-20 15:30:51 -04:00
Ben Balter
d1f90d61c5 Merge branch 'master' into licensee 2015-08-20 15:25:15 -04:00
Blake Embrey
16e65fe189 Make RAML a markup language
RAML was originally merged as a data language, but this seems like an incorrect definition. I changed it to be markup instead, which will also result in RAML appearing in repo statistics.
2015-08-20 10:07:44 -07:00
Ben Balter
62a0faa729 let us 2015-08-20 12:23:52 -04:00
Ben Balter
fbb3ab2292 batch license test output 2015-08-20 11:38:31 -04:00
Arfon Smith
b3b75e5ef8 Merge pull request #2574 from github/perl-t
Adding Perl/Perl6 heuristic for '.t'
2015-08-20 10:29:52 +01:00
Arfon Smith
8b36210db5 Merge pull request #2573 from a0viedo/patch-1
relativize link in readme
2015-08-20 10:25:02 +01:00
Arfon Smith
a74f3b3e46 Adding Perl/Perl6 heuristic for '.t' 2015-08-20 10:16:52 +01:00
Alejandro Oviedo
e214a52de5 relativize link in readme
...so it could link properly in other branches and forks.
2015-08-19 19:15:05 -03:00
Arfon Smith
0624a9395c Merge pull request #2571 from pchaigno/prolog-grammar
New grammars for Prolog and ECLiPSe
2015-08-19 21:44:13 +01:00
Arfon Smith
b2e7f7ffa6 Merge pull request #2570 from pchaigno/typescript-grammar
New grammar for Typescript
2015-08-19 21:41:15 +01:00
Arfon Smith
b312b39a10 Merge pull request #2572 from pchaigno/rmarkdown-tmscope
TextMate scope for RMarkdown
2015-08-19 21:38:42 +01:00
Paul Chaignon
80e2d112b2 tm_scope for RMarkdown 2015-08-19 22:07:23 +02:00
Paul Chaignon
519b169df0 New grammar for Typescript from Sublime Text package 2015-08-19 21:30:24 +02:00
Paul Chaignon
5c2cfbc334 Remove Typescript grammar 2015-08-19 21:27:40 +02:00
Paul Chaignon
7d91e4959a Dissociate ECLiPSe from Prolog
ECLiPSe syntax is slightly different from Prolog syntax
ECLiPSe is in the Prolog group so it will only be highlighted differently
2015-08-19 20:56:14 +02:00
Paul Chaignon
0c5aa2a7eb Merge branch 'master' into prolog-grammar 2015-08-19 20:46:15 +02:00
Paul Chaignon
0d7a264981 Update submodule for Prolog grammar 2015-08-19 20:43:16 +02:00
Arfon Smith
52ff2d2e74 Merge pull request #2557 from pchaigno/mozilla-public-license
Recognize the Mozilla Public License for grammars
2015-08-19 19:21:33 +01:00
Ben Balter
8a7ceaa845 bump licensee to support ruby 1.9.3 2015-08-19 13:22:31 -04:00
Ben Balter
fd9ce2d1cf use licensee to classify submodule licenses 2015-08-19 12:54:21 -04:00
Paul Chaignon
2c2b37bec3 Reorganize tests
Rename test_memory_blob.rb to test_blob.rb for consistence with last commit
2015-08-19 18:07:42 +02:00
Paul Chaignon
c777f2d388 Merge branch 'master' into blob_in_memory 2015-08-19 18:02:31 +02:00
Paul Chaignon
eca10056a8 Rename MemoryBlob to Blob 2015-08-19 17:29:35 +02:00
Arfon Smith
c7bab11ebe Merge pull request #2566 from github/cut-release-v4.5.14
v4.5.14 version bump
2015-08-19 10:36:52 +01:00
Arfon Smith
6995fc28b6 v4.5.14 version bump 2015-08-19 07:01:07 +01:00
Arfon Smith
102f14d0e9 Grammars update 2015-08-19 06:59:39 +01:00
Arfon Smith
aac168402b Merge pull request #2565 from pchaigno/aspectj-grammar
Grammar for AspectJ
2015-08-19 06:49:16 +01:00
Paul Chaignon
152d49513f Grammar for AspectJ from Sublime Text package 2015-08-19 00:11:34 +02:00
Arfon Smith
d5564c808d Merge pull request #2560 from larsbrinkhoff/sexp
Add .sexp to Common Lisp.
2015-08-18 21:15:46 +01:00
Lars Brinkhoff
82410e07b2 Add .sexp to Common Lisp.
config.sexp by Jeremie Dimino; Apache License 2.0.
rss.sexp by Dan Lentz; LGPL 2.1.
2015-08-18 12:45:47 +02:00
Arfon Smith
94d90b30b5 Merge pull request #2561 from pchaigno/labview-xml
Highlight LabVIEW files as XML
2015-08-18 12:25:38 +02:00
Paul Chaignon
06997f0da2 Fix scope of grammar for LabVIEW 2015-08-14 14:17:32 +02:00
Paul Chaignon
55aafa416d Highlight LabVIEW files as XML 2015-08-14 13:56:28 +02:00
Paul Chaignon
6226a46988 Recognize the Mozilla Public License for grammars 2015-08-13 17:35:01 +02:00
Paul Chaignon
8d216f0c43 Grammar for Prolog from Sublime Text package
MPLv2 License is currently unrecognized
2015-08-13 17:15:04 +02:00
Paul Chaignon
7f5bb25542 Remove grammar for Prolog from TextMate bundle 2015-08-13 16:56:21 +02:00
Arfon Smith
5fcdf6adc2 Merge pull request #2555 from larsbrinkhoff/zone
Add .arpa to DNS Zone.
2015-08-13 10:18:51 +01:00
Lars Brinkhoff
6a565a849b Add .arpa to DNS Zone.
sample.arpa by Freeswitch project; Mozilla Public License 1.1.
2015-08-13 07:38:17 +02:00
Arfon Smith
66fc67e34c Merge pull request #2554 from github/mcandre-master
DNS Zone files
2015-08-12 18:54:04 +01:00
Arfon Smith
7cf140940e Fixing up the build 2015-08-12 17:20:29 +01:00
Arfon Smith
60e90bab23 Removing un-used Bind bundle 2015-08-12 17:06:39 +01:00
Arfon Smith
4f58258186 Removing erroneous submodule 2015-08-12 17:05:57 +01:00
Arfon Smith
03e2904ebf Merge branch 'master' of https://github.com/mcandre/linguist into mcandre-master 2015-08-12 15:15:28 +01:00
Andrew Pennebaker
bea90b256e use st2-zonefile (MIT licensed) instead of Bind.tmbundle (unlicensed) 2015-08-11 14:01:45 -05:00
Arfon Smith
8eb37ba956 Merge pull request #2541 from github/reworking-documentation-paths
Reworking documentation paths
2015-08-11 09:44:19 +01:00
Arfon Smith
8d20c1fb59 More inclusive documentation matches for License and Readme files 2015-08-11 09:39:41 +01:00
Arfon Smith
9a1abf0c49 Merge branch 'master' into reworking-documentation-paths 2015-08-11 09:10:08 +01:00
Arfon Smith
5aae7a4000 Merge pull request #2552 from github/cut-release-v4.5.13
Bumping version to v4.5.13
2015-08-11 07:50:53 +01:00
Arfon Smith
d9509a1750 Bumping version to v4.5.13 2015-08-11 07:01:05 +01:00
Arfon Smith
978c448fb8 Merge pull request #2551 from github/name-checkin
Catching one more edge case
2015-08-11 06:53:25 +01:00
Arfon Smith
997c0fca10 Catching one more edge case 2015-08-11 06:48:54 +01:00
Arfon Smith
3ae6e68492 Merge pull request #2549 from github/name-checkin
Don't blow up if empty string/nil passed to alias methods
2015-08-10 22:17:07 +01:00
Arfon Smith
851c93a1f7 Don't blow up if empty string/nil passed to alias methods 2015-08-10 22:07:28 +01:00
Arfon Smith
a5f7355e16 Merge pull request #2547 from github/grammars
Grammar updates
2015-08-10 15:10:20 +01:00
Arfon Smith
18ffdbaa65 Grammar updates 2015-08-10 15:07:27 +01:00
Arfon Smith
c089222bc6 Merge pull request #2545 from pchaigno/yaml-tmlanguage
YAML extensions for TextMate and Sublime Text grammars
2015-08-10 09:54:20 +01:00
Arfon Smith
37f9535d27 Merge pull request #2546 from ammaraskar/master
Make regex for vim modeline more lenient
2015-08-10 09:53:46 +01:00
Ammar Askar
4650368bc2 Make regex for vim modeline more lenient
This change allows the filetype/language to be retrieved from more complex vim modelines. The current regex strictly allows a set line which contains only the filetype/ft parameter and nothing else
2015-08-10 00:42:14 -05:00
Paul Chaignon
88b14ed455 .syntax extension for YAML 2015-08-09 14:13:48 +02:00
Paul Chaignon
54a2a47bc0 YAML-tmLanguage extension for YAML 2015-08-09 14:11:01 +02:00
Arfon Smith
ffcc970140 Merge pull request #2542 from github/brewfile
Highlight Brewfile as Ruby
2015-08-07 22:26:55 +01:00
Joshua Peek
7a811e39e0 Add sample Brewfile 2015-08-07 14:01:08 -07:00
Joshua Peek
11f158cbb3 Highlight Brewfile as Ruby 2015-08-07 11:12:30 -07:00
Arfon Smith
5d5550c48b Moving vendored definitions to documentation 2015-08-07 10:42:31 +01:00
Arfon Smith
fd570d906a Adding examples path to documentation.yml 2015-08-07 10:35:18 +01:00
Arfon Smith
deab0662f9 Merge pull request #2447 from Ryman/rustup
Split on comma in language name if no match is found
2015-08-07 10:28:21 +01:00
Arfon Smith
7238f50a6b Merge pull request #2539 from rji/puppet-lang-updates
Updates for the Puppet language
2015-08-07 10:25:32 +01:00
Arfon Smith
499fcd1f3f Merge pull request #2540 from pchaigno/makefile.inc
Filename Makefile.inc for Makefile
2015-08-06 09:33:55 +01:00
Paul Chaignon
dc0ddc82d6 Filename Makefile.inc for Makefile 2015-08-06 10:08:30 +02:00
Arfon Smith
436fc34cb9 Merge pull request #2538 from BerkeleyTrue/patch-1
Add codemirror's demo directory
2015-08-06 09:01:01 +01:00
Roger Ignazio
f072cd96e3 Add hiera_include() sample for the Puppet language
Prior to this commit, some Puppet files were being incorrectly
identified as Pascal when they contained only the following content:

  hiera_include('classes')

This commit adds a hiera_include() sample to for the Puppet language to
correct this behavior.
2015-08-05 14:02:09 -07:00
Roger Ignazio
3441a001c7 Modify Puppet color based on style guide
Prior to this commit, the Puppet language was colored to #332A77. The
Puppet Labs style guide (https://puppetlabs.com/styleguide/brand)
specifies Puppet Dark Purple to be #302B6D. Alternately, Puppet Purple,
a lighter variant, may be used: #7C6AAB.

Keeping with the dark purple theme, this commit modifies the Puppet
language to use Puppet Dark Purple, hex #302B6D.
2015-08-05 14:00:08 -07:00
Berkeley Martinez
bc747844ea Add codemirror's demo directory
This accounts for about ~150 html files throwing off the statistics of one of my projects
2015-08-05 12:22:21 -07:00
Arfon Smith
a887f58bcc Merge pull request #2537 from imsys/xbase-extra
#2504 - xBase aliases and extension .prw
2015-08-05 14:06:24 +01:00
Arthur Helfstein Fragoso
f42afef6e0 order - .prw should come after .ch
1) Failure:
TestPedantic#test_extensions_are_sorted
[/home/arthur/Projects/linguist/test/test_pedantic.rb:15]:
.prw should come after .ch
2015-08-05 05:58:02 -03:00
Arthur Helfstein Fragoso
18eaf22cb9 Added xBase/AdvPL sample file 2015-08-05 05:19:41 -03:00
Arthur Helfstein Fragoso
d94f427e12 xBase: Add aliases and extension .prw
xBase: Add aliases:
* advpl
* clipper
* foxpro

And the extension .prw
2015-08-05 05:06:11 -03:00
Arfon Smith
b94eb42db6 Merge pull request #2536 from github/slim-grammar
Adding Slim tm_scope
2015-08-04 22:04:25 +01:00
Arfon Smith
d2297f5516 Adding Slim tm_scope 2015-08-04 21:56:11 +01:00
Arfon Smith
ef6f58b828 Merge pull request #2535 from pchaigno/heuristics-case-insensitive
Case-insensitive extension match for heuristic rules
2015-08-04 21:35:54 +01:00
Paul Chaignon
eb0bf16cce Case-insensitive extension match for heuristic rules 2015-08-04 17:28:52 +02:00
Arfon Smith
ca51415540 Merge pull request #2534 from github/cut-release-v4.5.11
Bumping version to v4.5.11
2015-08-04 14:05:10 +01:00
Arfon Smith
8ae32e1d47 Bumping version to v4.5.11 2015-08-04 13:29:52 +01:00
Arfon Smith
0a6165c4d9 Updating csharp scopes 2015-08-04 13:27:21 +01:00
Arfon Smith
cf8521a629 Grammar updates 2015-08-04 13:18:27 +01:00
Arfon Smith
b11c7f3dc0 Merge pull request #2513 from yyx990803/master
add syntax highlight for *.vue component files
2015-08-04 12:47:12 +01:00
Arfon Smith
01151aad5c Merge pull request #2533 from github/rrebol
Adding back R/Rebol heuristics
2015-08-04 12:45:44 +01:00
Arfon Smith
6b283068a9 Adding back R/Rebol heuristics 2015-08-04 12:20:15 +01:00
Arfon Smith
ccd7d4d89d Merge pull request #2532 from github/heuristic-fixes
Fixing up some new heuristics
2015-08-04 12:11:17 +01:00
Arfon Smith
208ec3906f Fixing up some new heuristics 2015-08-04 12:06:41 +01:00
Arfon Smith
84d4fccb4d Merge pull request #2441 from pchaigno/associate-heuristic-with-extension
Associate heuristic rules with file extensions
2015-08-04 12:00:47 +01:00
Arfon Smith
8d8ea959ee Merge pull request #2527 from radeksimko/hcl-as-ruby
Parse HCL as Ruby, not JavaScript
2015-07-30 14:42:46 +01:00
Radek Simko
1c73db499f Parse HCL as Ruby, not JavaScript 2015-07-30 11:31:06 +01:00
Arfon Smith
16a4b4947f Merge pull request #2526 from github/cut-releasev4.5.10
Bumping to v4.5.10
2015-07-29 15:21:31 +01:00
Arfon Smith
4b2abb2064 Bumping to v4.5.10 2015-07-29 14:50:11 +01:00
Arfon Smith
c581b6a5a7 Merge pull request #2525 from github/grammars-update
Grammars update
2015-07-29 14:37:08 +01:00
Arfon Smith
4c66582f87 Grammars update 2015-07-29 14:27:35 +01:00
Arfon Smith
11388a5355 Merge pull request #1899 from sethvargo/patch-1
Add HCL to languages.yml
2015-07-29 14:14:38 +01:00
Arfon Smith
24ca98b1a3 Merge pull request #2524 from github/more-encompassing-number-skips
More encompassing number skips
2015-07-29 14:07:04 +01:00
Arfon Smith
90a293727d Merge branch 'master' into more-encompassing-number-skips 2015-07-29 13:54:51 +01:00
Arfon Smith
e869f6c173 Merge pull request #2438 from edm00se/master
add support for XPages
2015-07-25 17:52:01 +01:00
Evan You
5b187d1f20 update vue-syntax-highlight version 2015-07-24 23:40:43 -04:00
Evan You
7b5d1c075d add syntax highlight for *.vue component files 2015-07-21 18:51:55 -04:00
Arfon Smith
07173d2238 Merge pull request #2515 from github/xbase-ch
xBase .ch
2015-07-21 15:26:45 +01:00
Arfon Smith
6b747f7d65 Adding Charity and heuristic for xBase .ch files 2015-07-21 14:59:47 +01:00
Arfon Smith
aef19d72f9 Merge branch 'master' into xbase-ch 2015-07-21 13:55:59 +01:00
Arfon Smith
e1a661bffc Merge pull request #2506 from hdgarrood/master
Use a different grammar for PureScript
2015-07-21 13:37:05 +01:00
Arfon Smith
560f9b15d7 Merge pull request #2510 from joelparkerhenderson/master
Add documentation categorization for CHANGELOG et. al.
2015-07-20 16:30:57 +01:00
Paul Chaignon
452fc59d4f Merge branch 'master' into associate-heuristic-with-extension 2015-07-20 13:08:13 +02:00
Joel Parker Henderson
682cc2d82d Add documentation categorization for CHANGELOG et. al. 2015-07-19 19:36:12 -06:00
Harry Garrood
29197736c7 Use a different grammar for PureScript 2015-07-19 09:18:09 +01:00
Arfon Smith
e1dbd68713 Merge branch 'master' of github.com:github/linguist 2015-07-16 14:43:21 -07:00
Arfon Smith
0ecb865797 Merge branch 'rpavlick-master' 2015-07-16 14:40:52 -07:00
Arfon Smith
1ced06483e Merge branch 'master' of https://github.com/rpavlick/linguist into rpavlick-master 2015-07-16 14:40:21 -07:00
Garen Torikian
861cee33d5 Merge pull request #2502 from vszakats/patch-1
CONTRIBUTING.md: minor URL cleanups
2015-07-15 15:40:51 -07:00
Viktor Szakats
6b882438b0 CONTRIBUTING.md: minor URL cleanups
use `https://` and `.svg`, follow a redirect.
2015-07-15 13:39:27 +02:00
Arfon Smith
c570646c2d Merge pull request #2500 from github/cut-release-v4.5.9
Cut release v4.5.9
2015-07-14 16:22:23 -07:00
Arfon Smith
75f72578ad Bumping version to v4.5.9 2015-07-14 08:59:32 -07:00
Arfon Smith
4dc566e13f Updating OpenEdge-ABL grammars 2015-07-14 08:58:59 -07:00
Arfon Smith
bcfdbe3616 Grammars update 2015-07-14 08:56:44 -07:00
Arfon Smith
314b7f134d Merge pull request #2499 from vszakats/xgramm
add grammar for xbase and harbour languages
2015-07-14 08:48:24 -07:00
Eric McCormick
87eb4577ea trying this again 2015-07-13 21:31:02 -05:00
Eric McCormick
7563bf43e9 Revert "removed samples"
This reverts commit ce8cfed7ff.
2015-07-13 21:28:36 -05:00
Eric McCormick
ce8cfed7ff removed samples 2015-07-13 21:22:54 -05:00
Eric McCormick
8742de9a88 pulling .xsp, .form, .view from PR
Per comment in [PR 2438](https://github.com/github/linguist/pull/2438#issuecomment-120588670), pulling all but .xsp-config and .xsp.metadata for uniqueness and non-overlapping assignment based on file extension. This should be set / overridden in the `.gitattributes` file, [as demonstrated here](https://github.com/edm00se/AnAppOfIceAndFire/blob/master/.gitattributes), to assign the XPages language to the project files.
2015-07-13 21:11:06 -05:00
Arfon Smith
9c0af2ea5b Merge pull request #2488 from github/code-of-conduct
Add code of conduct to contributing guidelines
2015-07-13 15:14:20 -07:00
Viktor Szakats
4c81c0d904 add grammar for xbase and harbour languages 2015-07-13 15:28:42 +02:00
Viktor Szakats
4dcdb0c79c xBase: add .ch extension + sample 2015-07-13 10:32:08 +02:00
Paul Chaignon
5a646384f6 FileBlob extends MemoryBlob 2015-07-12 20:56:51 +02:00
Paul Chaignon
8917f1a91a MemoryBlob class: wrapper around the content of a file
Makes it possible to detect the language of a snippet of code
without having an actual file on disk
Will allow github-markup to use Linguist without restricting its API
2015-07-12 20:28:42 +02:00
Arfon Smith
d459f7289e Merge pull request #2493 from miek/patch-1
Add .kicad_pcb extension for KiCad PCB design files
2015-07-12 13:44:17 +01:00
Arfon Smith
d2c4104d30 Merge pull request #2494 from k2b6s9j/crystal-grammar
Use a Crystal grammar over the Ruby grammar for Crystal files.
2015-07-12 13:42:53 +01:00
Kepler Sticka-Jones
89fabd9a89 Use a Crystal grammar over the Ruby grammar for Crystal files.
The Crystal does have several little differences which distinguish it from Ruby. Thus it needs it's own grammar.
2015-07-11 09:24:22 -07:00
Mike Walters
3f7ce832ab Add .kicad_pcb extension for KiCad PCB design files 2015-07-11 16:34:05 +01:00
Arfon Smith
3fdc904b18 Merge pull request #2487 from thorade/issue2486_Modelica
more samples for Modelica language,
2015-07-11 07:59:48 +01:00
Arfon Smith
cf471af677 Merge pull request #2483 from github/cut-release-v4.5.8
v4.5.8 release
2015-07-10 22:57:07 +01:00
rpavlick
2d392581e2 adding NCL language 2015-07-09 07:17:01 -07:00
Arfon Smith
79a428ab8d Merge pull request #2180 from pchaigno/inc-extension
.inc file extension
2015-07-08 19:25:50 +01:00
Brandon Keepers
7ed1b9b0b1 Add code of conduct to contributing guidelines 2015-07-08 14:10:59 -04:00
thorade
58fd8a5d87 more samples for Modelica language,
see issue #2486
2015-07-07 12:40:37 +02:00
Paul Chaignon
9f8c15ed6c Merge branch 'master' into inc-extension 2015-07-05 14:45:35 +02:00
Paul Chaignon
b94eda18ab New .inc Pascal samples 2015-07-05 12:48:22 +02:00
Paul Chaignon
849eb28b01 New .inc SourcePawn samples 2015-07-05 12:48:12 +02:00
Paul Chaignon
b0073d461c New .inc C++ samples 2015-07-05 12:47:57 +02:00
Paul Chaignon
25d160e850 Merge branch 'master' into associate-heuristic-with-extension 2015-07-04 23:03:32 +02:00
Paul Chaignon
e688c865bc Merge branch 'master' into associate-heuristic-with-extension 2015-07-04 22:48:06 +02:00
Arfon Smith
21e97cc65c Merge pull request #2170 from pchaigno/mod-extension
.mod extension
2015-07-04 20:57:40 +01:00
Paul Chaignon
06c1033952 Fix error from merge conflicts 2015-07-04 18:04:19 +02:00
Paul Chaignon
8c54f68040 Fix conflicts from merging master into 'mod-extension' 2015-07-04 18:01:56 +02:00
Arfon Smith
4c1f5c490f Merge pull request #2484 from pchaigno/fix-g-code-samples
Remove incorrect G-code samples
2015-07-04 16:58:42 +01:00
Arfon Smith
117735ffb9 Merge pull request #2179 from pchaigno/symlinks
Ignore symbolic links
2015-07-04 16:57:43 +01:00
Paul Chaignon
f98e6bdac7 Use proper format for symlinks, submodules and trees 2015-07-04 17:14:30 +02:00
Paul Chaignon
19d76306d3 Remove incorrect samples 2015-07-04 12:33:41 +02:00
Arfon Smith
a63a609ce1 v4.5.8 release 2015-07-04 10:36:45 +01:00
Arfon Smith
95fce2024d Merge pull request #2482 from github/grammar-updates
Grammar updates
2015-07-04 07:02:29 +01:00
Arfon Smith
f3b65015f4 Grammar updates 2015-07-04 06:55:51 +01:00
Arfon Smith
5431298b0d Merge pull request #2481 from github/1823-local
Isabelle ROOT support (updated PR)
2015-07-04 06:19:02 +01:00
Arfon Smith
8f651bca03 Adding PHP sample file for completeness 2015-07-04 06:01:06 +01:00
Arfon Smith
6c45e5ec19 Merge branch 'master' into 1823-local 2015-07-04 05:46:23 +01:00
Arfon Smith
95d394642c Merge pull request #2478 from mattn/perl-test-more
Append Test::More into strict.t
2015-07-04 05:32:30 +01:00
mattn
6a185a3d3a remove some text contents from test.pl since it affect to heuristic search. 2015-07-04 02:29:01 +09:00
Arfon Smith
6ae353706d Merge pull request #2479 from SRI-CSL/master
SMT-LIB language support
2015-07-01 14:10:28 -05:00
Ian A. Mason
77bc72be14 Added an ace mode, and put the SMT entry in the correct place, maybe. 2015-07-01 11:22:04 -07:00
Bruno Dutertre
0585c880de Example smt2 files 2015-07-01 10:38:17 -07:00
mattn
da5189e7fb Append Test::More into strict.t. Because, most of tap scripts on Perl5 are detected as Perl6. 2015-07-01 16:23:38 +09:00
Ian A. Mason
5f456d8b22 Some part way through the adding a language checklist. 2015-06-30 15:29:02 -07:00
Vicent Marti
a351cdd486 Merge pull request #2477 from github/vmg/release-4.5.7
Rrelease 4.5.7
2015-06-30 14:58:18 +02:00
Arfon Smith
6e71663fd6 Merge pull request #2463 from pchaigno/doc-add-extension
Instructions to add a new extension to a language
2015-06-29 21:18:47 -05:00
Arfon Smith
0b2e43cdee Merge pull request #2457 from drewcrawford/master
Adding some more vendered expressions
2015-06-29 21:16:08 -05:00
Paul Chaignon
9cbd280f79 New .inc SourcePawn sample 2015-06-28 16:05:47 +02:00
Paul Chaignon
947be9db0f New .inc Pascal sample 2015-06-28 15:54:25 +02:00
Paul Chaignon
dd55f929d4 New .inc HTML sample 2015-06-28 15:27:59 +02:00
Paul Chaignon
8b5399d568 New C++ .inc sample 2015-06-28 14:33:54 +02:00
Paul Chaignon
1b8b0c6229 New .inc Assembly samples 2015-06-28 13:24:42 +02:00
Vicent Marti
ee3081fb4c Bump to 4.5.7 2015-06-26 03:34:18 -07:00
Vicent Marti
119770a038 Update grammars 2015-06-26 03:33:37 -07:00
Vicent Marti
9d61487403 gemspec: Loosen up the restriction on Rugged betas 2015-06-26 03:11:31 -07:00
Paul Chaignon
56dec47561 Merge branch 'master' into inc 2015-06-21 14:20:53 +02:00
Paul Chaignon
3e793ab5b7 Precision on requirements to add a language 2015-06-21 10:07:18 +02:00
Garen Torikian
f6b50a67f9 Change Haxe and Ragel colors to pass tests 2015-06-20 09:55:33 -07:00
Zalim Bashorov
cd47798d13 try to fix conflicts 2015-06-20 09:49:51 -07:00
Zalim Bashorov
3b54df2cde Change color for Kotlin based on color in logo
IMHO it's more suitable.
2015-06-20 09:49:51 -07:00
Paul Chaignon
8bf1defdc1 Merge branch 'master' into associate-heuristic-with-extension
Conflicts:
	lib/linguist/heuristics.rb
2015-06-18 21:54:59 +02:00
Drew Crawford
8845b266de Adding some more vendered expressions
* `Vendor/`, the capitalized path
* Crashlytics, a common iOS framework
* Fabric, a common iOS framework
2015-06-17 21:25:54 -05:00
Paul Chaignon
786d1e4cfc Instructions to add a new extension to a language 2015-06-12 21:22:55 +02:00
Kevin Butler
bc8d65e7d3 Add 1.0 rust sample and add file with extern crate usage 2015-06-10 17:58:36 +01:00
Kevin Butler
3180c5d554 Allow delimiting by comma in the language name 2015-06-10 15:37:31 +01:00
Paul Chaignon
be122ca1a5 Fix test for Perl heuristic
Improve heuristic rule for Perl6
Separate heuristic rules for .pl (with Prolog) and .pm (without Prolog)
2015-06-06 19:55:04 +02:00
Paul Chaignon
b05f6f0018 Test for the new heuristic definitions 2015-06-06 18:49:36 +02:00
Paul Chaignon
e811021806 Fix tests to use the correct extension in heuristic rules
Extand a few tests where only one file was tested for a language
2015-06-06 18:27:59 +02:00
Paul Chaignon
656f4f440d Several extensions can be associated to a heuristic rule 2015-06-06 17:44:02 +02:00
Paul Chaignon
7fb62de4d7 Associate each heuristic rule to a file extension 2015-06-06 15:37:41 +02:00
Eric McCormick
26a5325dc3 undoing color
apparently a bad idea, Travis CI didn't like it
2015-06-05 11:04:34 -05:00
Eric McCormick
4881e0aa51 added color to languages.yml 2015-06-05 10:36:40 -05:00
Eric McCormick
743f7c76de resorted entry in languages.yml to be consistent with other blocks 2015-06-05 06:19:02 -05:00
Eric McCormick
f8ef01f557 updated tm_scope to none in languages.yml
It looks like it helps to read the comments at the top of the file, who knew!
2015-06-05 06:13:36 -05:00
Eric McCormick
402fa5c2cd added navbar.xsp, xsp-config, xsp.metadata for completeness of file extensions and corrected xsp.metadata extension in languages.yml 2015-06-04 22:51:55 -05:00
Eric McCormick
5ac1e847a5 samples added for XPages design elements (.xsp) and affiliated NSF-based elements (.form, .view)
- demoServerRESTconsumption, src: https://gist.github.com/edm00se/15249dba8ff3fea38312, license: Creative Commons 3.0
- house.form, houses.view, house.xsp, src: https://github.com/edm00se/AnAppOfIceAndFire, license: Creative Commons 3.0
- UnpMainxsp, src: https://github.com/teamstudio/xcontrols-domino/blob/master/sampler-app/XPages/UnpMain.xsp, license: Apache v2.0
- xLogin.xsp, src: http://openntf.org/XSnippets.nsf/snippet.xsp?id=xpages-form-login-with-session-variable, license: Apache 2.0
2015-06-04 22:09:49 -05:00
Eric McCormick
0737a21e38 XPages added as programming language
XPages design element extensions and NSF-based design elements (Form, View) extensions added (all readable when marked up using XML settings for ACE); .jss (Domino SSJS) already aliased under JavaScript
2015-06-04 21:37:58 -05:00
Paul Chaignon
0c2aeae00d .inc extension for PHP, Pascal, Assembly, SQL, C++, HTML and SourcePawn 2015-05-10 20:36:41 +02:00
Paul Chaignon
b6ee02f313 Merge branch 'master' into mod-extension 2015-05-04 21:44:23 +02:00
Andrew Pennebaker
03369b8a6c use https url for travis support 2015-05-03 12:51:52 -05:00
Andrew Pennebaker
3b2ddb1a18 classify DNS zone as a data format 2015-05-01 11:25:16 -05:00
Andrew Pennebaker
1e20b12241 zone: add ace_mode 2015-04-30 15:40:44 -05:00
Andrew Pennebaker
81c41df15c zone: add tm_scope 2015-04-30 15:39:32 -05:00
Andrew Pennebaker
8b736189e0 better name for DNS zone 2015-04-30 15:34:43 -05:00
Andrew Pennebaker
188d2367df add sample zone file 2015-04-30 15:25:52 -05:00
Andrew Pennebaker
5aeac500da list zone in grammars.yml 2015-04-30 15:24:46 -05:00
Andrew Pennebaker
5730ab28ab list zone in languages.yml 2015-04-30 15:23:31 -05:00
Andrew Pennebaker
1c56b03a28 highlight DNS zone (BIND) files 2015-04-30 15:14:26 -05:00
Paul Chaignon
fc1f8083ad Heuristic rules for XML and Modula-2 2015-04-25 23:36:15 +02:00
Paul Chaignon
af5e799a45 Merge branch 'master' into mod-extension 2015-04-22 21:14:24 +02:00
Paul Chaignon
e073e91d62 Detect GFortran module files as generated 2015-04-19 16:56:38 +02:00
Paul Chaignon
da9bda0e27 Detect KiCAD module files as generated 2015-04-19 16:19:52 +02:00
Paul Chaignon
0e996e4bb7 Grammar for Modula-2 from Sublime Text package 2015-04-19 12:41:41 +02:00
Paul Chaignon
63fbbd6e0a .mod file extension for AMPL, Linux Kernel Module, Modula-2 and XML 2015-04-19 12:39:21 +02:00
Paul Chaignon
730be65514 Ignore symlinks in repository statistics 2015-02-28 16:08:16 +01:00
Stefan Johnson
885b5aab41 Changed tokenizer number literals to be more encompassing
Number literals now skips hexadecimal, and C style literals.
2015-02-20 14:08:39 +11:00
Gerwin Klein
f18ae4f99f add support for Isabelle ROOT file syntax 2014-12-27 10:13:02 +11:00
Seth Vargo
5217f19faa Alphabetize order 2014-12-18 17:53:53 -05:00
Seth Vargo
296d170ba9 Add sample for HCL 2014-12-18 17:52:30 -05:00
Seth Vargo
a97fd74399 Add HCL to languages.yml
More information on HCL: https://github.com/hashicorp/hcl
2014-12-18 17:46:26 -05:00
327 changed files with 47758 additions and 56708 deletions

96
.gitmodules vendored
View File

@@ -25,9 +25,6 @@
[submodule "vendor/grammars/Sublime-REBOL"]
path = vendor/grammars/Sublime-REBOL
url = https://github.com/Oldes/Sublime-REBOL
[submodule "vendor/grammars/Sublime-Inform"]
path = vendor/grammars/Sublime-Inform
url = https://github.com/PogiNate/Sublime-Inform
[submodule "vendor/grammars/autoitv3-tmbundle"]
path = vendor/grammars/autoitv3-tmbundle
url = https://github.com/Red-Nova-Technologies/autoitv3-tmbundle
@@ -85,6 +82,9 @@
[submodule "vendor/grammars/language-shellscript"]
path = vendor/grammars/language-shellscript
url = https://github.com/atom/language-shellscript
[submodule "vendor/grammars/language-supercollider"]
path = vendor/grammars/language-supercollider
url = https://github.com/supercollider/language-supercollider
[submodule "vendor/grammars/language-yaml"]
path = vendor/grammars/language-yaml
url = https://github.com/atom/language-yaml
@@ -169,9 +169,6 @@
[submodule "vendor/grammars/sublime-idris"]
path = vendor/grammars/sublime-idris
url = https://github.com/laughedelic/sublime-idris
[submodule "vendor/grammars/sublime-better-typescript"]
path = vendor/grammars/sublime-better-typescript
url = https://github.com/lavrton/sublime-better-typescript
[submodule "vendor/grammars/moonscript-tmbundle"]
path = vendor/grammars/moonscript-tmbundle
url = https://github.com/leafo/moonscript-tmbundle
@@ -256,9 +253,6 @@
[submodule "vendor/grammars/SublimeXtend"]
path = vendor/grammars/SublimeXtend
url = https://github.com/staltz/SublimeXtend
[submodule "vendor/grammars/Stata.tmbundle"]
path = vendor/grammars/Stata.tmbundle
url = https://github.com/statatmbundle/Stata.tmbundle
[submodule "vendor/grammars/Vala-TMBundle"]
path = vendor/grammars/Vala-TMBundle
url = https://github.com/technosophos/Vala-TMBundle
@@ -346,9 +340,6 @@
[submodule "vendor/grammars/latex.tmbundle"]
path = vendor/grammars/latex.tmbundle
url = https://github.com/textmate/latex.tmbundle
[submodule "vendor/grammars/less.tmbundle"]
path = vendor/grammars/less.tmbundle
url = https://github.com/textmate/less.tmbundle
[submodule "vendor/grammars/lilypond.tmbundle"]
path = vendor/grammars/lilypond.tmbundle
url = https://github.com/textmate/lilypond.tmbundle
@@ -397,9 +388,6 @@
[submodule "vendor/grammars/processing.tmbundle"]
path = vendor/grammars/processing.tmbundle
url = https://github.com/textmate/processing.tmbundle
[submodule "vendor/grammars/prolog.tmbundle"]
path = vendor/grammars/prolog.tmbundle
url = https://github.com/textmate/prolog.tmbundle
[submodule "vendor/grammars/python-django.tmbundle"]
path = vendor/grammars/python-django.tmbundle
url = https://github.com/textmate/python-django.tmbundle
@@ -629,6 +617,9 @@
[submodule "vendor/grammars/jflex.tmbundle"]
path = vendor/grammars/jflex.tmbundle
url = https://github.com/jflex-de/jflex.tmbundle.git
[submodule "vendor/grammars/Sublime-Modula-2"]
path = vendor/grammars/Sublime-Modula-2
url = https://github.com/harogaston/Sublime-Modula-2
[submodule "vendor/grammars/ada.tmbundle"]
path = vendor/grammars/ada.tmbundle
url = https://github.com/textmate/ada.tmbundle
@@ -647,3 +638,78 @@
[submodule "vendor/grammars/atom-fsharp"]
path = vendor/grammars/atom-fsharp
url = https://github.com/fsprojects/atom-fsharp
[submodule "vendor/grammars/SMT.tmbundle"]
path = vendor/grammars/SMT.tmbundle
url = https://github.com/SRI-CSL/SMT.tmbundle.git
[submodule "vendor/grammars/language-crystal"]
path = vendor/grammars/language-crystal
url = https://github.com/atom-crystal/language-crystal
[submodule "vendor/grammars/language-xbase"]
path = vendor/grammars/language-xbase
url = https://github.com/hernad/atom-language-harbour
[submodule "vendor/grammars/language-ncl"]
path = vendor/grammars/language-ncl
url = https://github.com/rpavlick/language-ncl.git
[submodule "vendor/grammars/atom-language-purescript"]
path = vendor/grammars/atom-language-purescript
url = https://github.com/purescript-contrib/atom-language-purescript
[submodule "vendor/grammars/vue-syntax-highlight"]
path = vendor/grammars/vue-syntax-highlight
url = https://github.com/vuejs/vue-syntax-highlight
[submodule "vendor/grammars/st2-zonefile"]
path = vendor/grammars/st2-zonefile
url = https://github.com/sixty4k/st2-zonefile
[submodule "vendor/grammars/sublimeprolog"]
path = vendor/grammars/sublimeprolog
url = https://github.com/alnkpa/sublimeprolog
[submodule "vendor/grammars/sublime-aspectj"]
path = vendor/grammars/sublime-aspectj
url = https://github.com/pchaigno/sublime-aspectj
[submodule "vendor/grammars/sublime-typescript"]
path = vendor/grammars/sublime-typescript
url = https://github.com/Microsoft/TypeScript-Sublime-Plugin
[submodule "vendor/grammars/sublime-pony"]
path = vendor/grammars/sublime-pony
url = https://github.com/CausalityLtd/sublime-pony
[submodule "vendor/grammars/X10"]
path = vendor/grammars/X10
url = https://github.com/x10-lang/x10-highlighting
[submodule "vendor/grammars/language-babel"]
path = vendor/grammars/language-babel
url = https://github.com/gandm/language-babel
[submodule "vendor/grammars/UrWeb-Language-Definition"]
path = vendor/grammars/UrWeb-Language-Definition
url = https://github.com/gwalborn/UrWeb-Language-Definition.git
[submodule "vendor/grammars/Stata.tmbundle"]
path = vendor/grammars/Stata.tmbundle
url = https://github.com/pschumm/Stata.tmbundle
[submodule "vendor/grammars/FreeMarker.tmbundle"]
path = vendor/grammars/FreeMarker.tmbundle
url = https://github.com/freemarker/FreeMarker.tmbundle
[submodule "vendor/grammars/MagicPython"]
path = vendor/grammars/MagicPython
url = https://github.com/MagicStack/MagicPython
[submodule "vendor/grammars/language-click"]
path = vendor/grammars/language-click
url = https://github.com/stenverbois/language-click.git
[submodule "vendor/grammars/language-maxscript"]
path = vendor/grammars/language-maxscript
url = https://github.com/Alhadis/language-maxscript
[submodule "vendor/grammars/language-renpy"]
path = vendor/grammars/language-renpy
url = https://github.com/williamd1k0/language-renpy.git
[submodule "vendor/grammars/language-inform7"]
path = vendor/grammars/language-inform7
url = https://github.com/erkyrath/language-inform7
[submodule "vendor/grammars/atom-language-stan"]
path = vendor/grammars/atom-language-stan
url = https://github.com/jrnold/atom-language-stan
[submodule "vendor/grammars/language-yang"]
path = vendor/grammars/language-yang
url = https://github.com/DzonyKalafut/language-yang.git
[submodule "vendor/grammars/perl6fe"]
path = vendor/grammars/perl6fe
url = https://github.com/MadcapJake/language-perl6fe.git
[submodule "vendor/grammars/language-less"]
path = vendor/grammars/language-less
url = https://github.com/atom/language-less.git

View File

@@ -1,6 +1,12 @@
language: ruby
sudo: false
addons:
apt:
packages:
- libicu-dev
- libicu48
before_install: script/travis/before_install
rvm:
- 1.9.3
- 2.0.0
- 2.1
- 2.2

View File

@@ -1,10 +1,31 @@
# Contributing
Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. The majority of contributions won't need to touch any Ruby code at all.
[code-of-conduct]: http://todogroup.org/opencodeofconduct/#Linguist/opensource@github.com
Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to uphold this code.
The majority of contributions won't need to touch any Ruby code at all.
## Adding an extension to a language
We try only to add new extensions once they have some usage on GitHub. In most cases we prefer that extensions be in use in hundreds of repositories before supporting them in Linguist.
To add support for a new extension:
0. Add your extension to the language entry in [`languages.yml`][languages], keeping the extensions in alphabetical order.
0. Add at least one sample for your extension to the [samples directory][samples] in the correct subdirectory.
0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage.
In addition, if this extension is already listed in [`languages.yml`][languages] then sometimes a few more steps will need to be taken:
0. Make sure that example `.yourextension` files are present in the [samples directory][samples] for each language that uses `.yourextension`.
0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.yourextension` files. (ping @arfon or @bkeepers to help with this) to ensure we're not misclassifying files.
0. If the Bayesian classifier does a bad job with the sample `.yourextension` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help.
## Adding a language
We try only to add languages once they have some usage on GitHub. In most cases we prefer that languages be in use in hundreds of repositories before supporting them in Linguist.
We try only to add languages once they have some usage on GitHub. In most cases we prefer that each new file extension be in use in hundreds of repositories before supporting them in Linguist.
To add support for a new language:
@@ -23,19 +44,21 @@ In addition, if your new language defines an extension that's already listed in
Remember, the goal here is to try and avoid false positives!
## Fixing a misclassified language
Most languages are detected by their file extension defined in [languages.yml][languages]. For disambiguating between files with common extensions, linguist applies some [heuristics](/lib/linguist/heuristics.rb) and a [statistical classifier](lib/linguist/classifier.rb). This process can help differentiate between, for example, `.h` files which could be either C, C++, or Obj-C.
Misclassifications can often be solved by either adding a new filename or extension for the language or adding more [samples][samples] to make the classifier smarter.
## Fixing syntax highlighting
Syntax highlighting in GitHub is performed using TextMate-compatible grammars. These are the same grammars that TextMate, Sublime Text and Atom use. Every language in [languages.yml][languages] is mapped to its corresponding TM `scope`. This scope will be used when picking up a grammar for highlighting.
Assuming your code is being detected as the right language, in most cases this is due to a bug in the language grammar rather than a bug in Linguist. [`grammars.yml`][grammars] lists all the grammars we use for syntax highlighting on github.com. Find the one corresponding to your code's programming language and submit a bug report upstream. If you can, try to reproduce the highlighting problem in the text editor that the grammar is designed for (TextMate, Sublime Text, or Atom) and include that information in your bug report.
You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](http://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com).
You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](https://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com).
Once the bug has been fixed upstream, we'll pick it up for GitHub in the next release of Linguist.
@@ -51,9 +74,10 @@ To run the tests:
bundle exec rake test
Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](http://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away.
Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](https://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away.
Here's our current build status: [![Build Status](https://api.travis-ci.org/github/linguist.svg?branch=master)](https://travis-ci.org/github/linguist)
Here's our current build status: [![Build Status](https://secure.travis-ci.org/github/linguist.png?branch=master)](http://travis-ci.org/github/linguist)
## Releasing

329
HACKING.rst.txt Normal file
View File

@@ -0,0 +1,329 @@
Contributing to SciPy
=====================
This document aims to give an overview of how to contribute to SciPy. It
tries to answer commonly asked questions, and provide some insight into how the
community process works in practice. Readers who are familiar with the SciPy
community and are experienced Python coders may want to jump straight to the
`git workflow`_ documentation.
Contributing new code
---------------------
If you have been working with the scientific Python toolstack for a while, you
probably have some code lying around of which you think "this could be useful
for others too". Perhaps it's a good idea then to contribute it to SciPy or
another open source project. The first question to ask is then, where does
this code belong? That question is hard to answer here, so we start with a
more specific one: *what code is suitable for putting into SciPy?*
Almost all of the new code added to scipy has in common that it's potentially
useful in multiple scientific domains and it fits in the scope of existing
scipy submodules. In principle new submodules can be added too, but this is
far less common. For code that is specific to a single application, there may
be an existing project that can use the code. Some scikits (`scikit-learn`_,
`scikits-image`_, `statsmodels`_, etc.) are good examples here; they have a
narrower focus and because of that more domain-specific code than SciPy.
Now if you have code that you would like to see included in SciPy, how do you
go about it? After checking that your code can be distributed in SciPy under a
compatible license (see FAQ for details), the first step is to discuss on the
scipy-dev mailing list. All new features, as well as changes to existing code,
are discussed and decided on there. You can, and probably should, already
start this discussion before your code is finished.
Assuming the outcome of the discussion on the mailing list is positive and you
have a function or piece of code that does what you need it to do, what next?
Before code is added to SciPy, it at least has to have good documentation, unit
tests and correct code style.
1. Unit tests
In principle you should aim to create unit tests that exercise all the code
that you are adding. This gives some degree of confidence that your code
runs correctly, also on Python versions and hardware or OSes that you don't
have available yourself. An extensive description of how to write unit
tests is given in the NumPy `testing guidelines`_.
2. Documentation
Clear and complete documentation is essential in order for users to be able
to find and understand the code. Documentation for individual functions
and classes -- which includes at least a basic description, type and
meaning of all parameters and returns values, and usage examples in
`doctest`_ format -- is put in docstrings. Those docstrings can be read
within the interpreter, and are compiled into a reference guide in html and
pdf format. Higher-level documentation for key (areas of) functionality is
provided in tutorial format and/or in module docstrings. A guide on how to
write documentation is given in `how to document`_.
3. Code style
Uniformity of style in which code is written is important to others trying
to understand the code. SciPy follows the standard Python guidelines for
code style, `PEP8`_. In order to check that your code conforms to PEP8,
you can use the `pep8 package`_ style checker. Most IDEs and text editors
have settings that can help you follow PEP8, for example by translating
tabs by four spaces. Using `pyflakes`_ to check your code is also a good
idea.
At the end of this document a checklist is given that may help to check if your
code fulfills all requirements for inclusion in SciPy.
Another question you may have is: *where exactly do I put my code*? To answer
this, it is useful to understand how the SciPy public API (application
programming interface) is defined. For most modules the API is two levels
deep, which means your new function should appear as
``scipy.submodule.my_new_func``. ``my_new_func`` can be put in an existing or
new file under ``/scipy/<submodule>/``, its name is added to the ``__all__``
dict in that file (which lists all public functions in the file), and those
public functions are then imported in ``/scipy/<submodule>/__init__.py``. Any
private functions/classes should have a leading underscore (``_``) in their
name. A more detailed description of what the public API of SciPy is, is given
in `SciPy API`_.
Once you think your code is ready for inclusion in SciPy, you can send a pull
request (PR) on Github. We won't go into the details of how to work with git
here, this is described well in the `git workflow`_ section of the NumPy
documentation and in the Github help pages. When you send the PR for a new
feature, be sure to also mention this on the scipy-dev mailing list. This can
prompt interested people to help review your PR. Assuming that you already got
positive feedback before on the general idea of your code/feature, the purpose
of the code review is to ensure that the code is correct, efficient and meets
the requirements outlined above. In many cases the code review happens
relatively quickly, but it's possible that it stalls. If you have addressed
all feedback already given, it's perfectly fine to ask on the mailing list
again for review (after a reasonable amount of time, say a couple of weeks, has
passed). Once the review is completed, the PR is merged into the "master"
branch of SciPy.
The above describes the requirements and process for adding code to SciPy. It
doesn't yet answer the question though how decisions are made exactly. The
basic answer is: decisions are made by consensus, by everyone who chooses to
participate in the discussion on the mailing list. This includes developers,
other users and yourself. Aiming for consensus in the discussion is important
-- SciPy is a project by and for the scientific Python community. In those
rare cases that agreement cannot be reached, the `maintainers`_ of the module
in question can decide the issue.
Contributing by helping maintain existing code
----------------------------------------------
The previous section talked specifically about adding new functionality to
SciPy. A large part of that discussion also applies to maintenance of existing
code. Maintenance means fixing bugs, improving code quality or style,
documenting existing functionality better, adding missing unit tests, keeping
build scripts up-to-date, etc. The SciPy `Trac`_ bug tracker contains all
reported bugs, build/documentation issues, etc. Fixing issues described in
Trac tickets helps improve the overall quality of SciPy, and is also a good way
of getting familiar with the project. You may also want to fix a bug because
you ran into it and need the function in question to work correctly.
The discussion on code style and unit testing above applies equally to bug
fixes. It is usually best to start by writing a unit test that shows the
problem, i.e. it should pass but doesn't. Once you have that, you can fix the
code so that the test does pass. That should be enough to send a PR for this
issue. Unlike when adding new code, discussing this on the mailing list may
not be necessary - if the old behavior of the code is clearly incorrect, no one
will object to having it fixed. It may be necessary to add some warning or
deprecation message for the changed behavior. This should be part of the
review process.
Other ways to contribute
------------------------
There are many ways to contribute other than contributing code. Participating
in discussions on the scipy-user and scipy-dev *mailing lists* is a contribution
in itself. The `scipy.org`_ *website* contains a lot of information on the
SciPy community and can always use a new pair of hands. A redesign of this
website is ongoing, see `scipy.github.com`_. The redesigned website is a
static site based on Sphinx, the sources for it are
also on Github at `scipy.org-new`_.
The SciPy *documentation* is constantly being improved by many developers and
users. You can contribute by sending a PR on Github that improves the
documentation, but there's also a `documentation wiki`_ that is very convenient
for making edits to docstrings (and doesn't require git knowledge). Anyone can
register a username on that wiki, ask on the scipy-dev mailing list for edit
rights and make edits. The documentation there is updated every day with the
latest changes in the SciPy master branch, and wiki edits are regularly
reviewed and merged into master. Another advantage of the documentation wiki
is that you can immediately see how the reStructuredText (reST) of docstrings
and other docs is rendered as html, so you can easily catch formatting errors.
Code that doesn't belong in SciPy itself or in another package but helps users
accomplish a certain task is valuable. `SciPy Central`_ is the place to share
this type of code (snippets, examples, plotting code, etc.).
Useful links, FAQ, checklist
----------------------------
Checklist before submitting a PR
````````````````````````````````
- Are there unit tests with good code coverage?
- Do all public function have docstrings including examples?
- Is the code style correct (PEP8, pyflakes)
- Is the new functionality tagged with ``.. versionadded:: X.Y.Z`` (with
X.Y.Z the version number of the next release - can be found in setup.py)?
- Is the new functionality mentioned in the release notes of the next
release?
- Is the new functionality added to the reference guide?
- In case of larger additions, is there a tutorial or more extensive
module-level description?
- In case compiled code is added, is it integrated correctly via setup.py
(and preferably also Bento/Numscons configuration files)?
- If you are a first-time contributor, did you add yourself to THANKS.txt?
Please note that this is perfectly normal and desirable - the aim is to
give every single contributor credit, and if you don't add yourself it's
simply extra work for the reviewer (or worse, the reviewer may forget).
- Did you check that the code can be distributed under a BSD license?
Useful SciPy documents
``````````````````````
- The `how to document`_ guidelines
- NumPy/SciPy `testing guidelines`_
- `SciPy API`_
- SciPy `maintainers`_
- NumPy/SciPy `git workflow`_
FAQ
```
*I based my code on existing Matlab/R/... code I found online, is this OK?*
It depends. SciPy is distributed under a BSD license, so if the code that you
based your code on is also BSD licensed or has a BSD-compatible license (MIT,
Apache, ...) then it's OK. Code which is GPL-licensed, has no clear license,
requires citation or is free for academic use only can't be included in SciPy.
Therefore if you copied existing code with such a license or made a direct
translation to Python of it, your code can't be included. See also `license
compatibility`_.
*How do I set up SciPy so I can edit files, run the tests and make commits?*
The simplest method is setting up an in-place build. To create your local git
repo and do the in-place build::
$ git clone https://github.com/scipy/scipy.git scipy
$ cd scipy
$ python setup.py build_ext -i
Then you need to either set up a symlink in your site-packages or add this
directory to your PYTHONPATH environment variable, so Python can find it. Some
IDEs (Spyder for example) have utilities to manage PYTHONPATH. On Linux and OS
X, you can for example edit your .bash_login file to automatically add this dir
on startup of your terminal. Add the line::
export PYTHONPATH="$HOME/scipy:${PYTHONPATH}"
Alternatively, to set up the symlink, use (prefix only necessary if you want to
use your local instead of global site-packages dir)::
$ python setupegg.py develop --prefix=${HOME}
To test that everything works, start the interpreter (not inside the scipy/
source dir) and run the tests::
$ python
>>> import scipy as sp
>>> sp.test()
Now editing a Python source file in SciPy allows you to immediately test and
use your changes, by simply restarting the interpreter.
Note that while the above procedure is the most straightforward way to get
started, you may want to look into using Bento or numscons for faster and more
flexible building, or virtualenv to maintain development environments for
multiple Python versions.
*How do I set up a development version of SciPy in parallel to a released
version that I use to do my job/research?*
One simple way to achieve this is to install the released version in
site-packages, by using a binary installer or pip for example, and set up the
development version with an in-place build in a virtualenv. First install
`virtualenv`_ and `virtualenvwrapper`_, then create your virtualenv (named
scipy-dev here) with::
$ mkvirtualenv scipy-dev
Now, whenever you want to switch to the virtual environment, you can use the
command ``workon scipy-dev``, while the command ``deactivate`` exits from the
virtual environment and brings back your previous shell. With scipy-dev
activated, follow the in-place build with the symlink install above to actually
install your development version of SciPy.
*Can I use a programming language other than Python to speed up my code?*
Yes. The languages used in SciPy are Python, Cython, C, C++ and Fortran. All
of these have their pros and cons. If Python really doesn't offer enough
performance, one of those languages can be used. Important concerns when
using compiled languages are maintainability and portability. For
maintainability, Cython is clearly preferred over C/C++/Fortran. Cython and C
are more portable than C++/Fortran. A lot of the existing C and Fortran code
in SciPy is older, battle-tested code that was only wrapped in (but not
specifically written for) Python/SciPy. Therefore the basic advice is: use
Cython. If there's specific reasons why C/C++/Fortran should be preferred,
please discuss those reasons first.
*There's overlap between Trac and Github, which do I use for what?*
Trac_ is the bug tracker, Github_ the code repository. Before the SciPy code
repository moved to Github, the preferred way to contribute code was to create
a patch and attach it to a Trac ticket. The overhead of this approach is much
larger than sending a PR on Github, so please don't do this anymore. Use Trac
for bug reports, Github for patches.
.. _scikit-learn: http://scikit-learn.org
.. _scikits-image: http://scikits-image.org/
.. _statsmodels: http://statsmodels.sourceforge.net/
.. _testing guidelines: https://github.com/numpy/numpy/blob/master/doc/TESTS.rst.txt
.. _how to document: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt
.. _PEP8: http://www.python.org/dev/peps/pep-0008/
.. _pep8 package: http://pypi.python.org/pypi/pep8
.. _pyflakes: http://pypi.python.org/pypi/pyflakes
.. _SciPy API: http://docs.scipy.org/doc/scipy/reference/api.html
.. _git workflow: http://docs.scipy.org/doc/numpy/dev/gitwash/index.html
.. _maintainers: https://github.com/scipy/scipy/blob/master/doc/MAINTAINERS.rst.txt
.. _Trac: http://projects.scipy.org/scipy/timeline
.. _Github: https://github.com/scipy/scipy
.. _scipy.org: http://scipy.org/
.. _scipy.github.com: http://scipy.github.com/
.. _scipy.org-new: https://github.com/scipy/scipy.org-new
.. _documentation wiki: http://docs.scipy.org/scipy/Front%20Page/
.. _SciPy Central: http://scipy-central.org/
.. _license compatibility: http://www.scipy.org/License_Compatibility
.. _doctest: http://www.doughellmann.com/PyMOTW/doctest/
.. _virtualenv: http://www.virtualenv.org/
.. _virtualenvwrapper: http://www.doughellmann.com/projects/virtualenvwrapper/

View File

@@ -1,4 +1,4 @@
Copyright (c) 2011-2015 GitHub, Inc.
Copyright (c) 2011-2016 GitHub, Inc.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation

View File

@@ -13,11 +13,11 @@ See [Troubleshooting](#troubleshooting) and [`CONTRIBUTING.md`](/CONTRIBUTING.md
![language stats bar](https://cloud.githubusercontent.com/assets/173/5562290/48e24654-8ddf-11e4-8fe7-735b0ce3a0d3.png)
The Language stats bar is built by aggregating the languages of each file in that repository. If it is reporting a language that you don't expect:
The Language stats bar displays languages percentages for the files in the repository. The percentages are calculated based on the bytes of code for each language as reported by the [List Languages](https://developer.github.com/v3/repos/#list-languages) API. If the bar is reporting a language that you don't expect:
0. Click on the name of the language in the stats bar to see a list of the files that are identified as that language.
0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them.
0. If the files are being misclassified, search for [open issues][issues] to see if anyone else has already reported the issue. Any information you an add, especially links to public repositories, is helpful.
0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them.
0. If the files are being misclassified, search for [open issues][issues] to see if anyone else has already reported the issue. Any information you can add, especially links to public repositories, is helpful.
0. If there are no reported issues of this misclassification, [open an issue][new-issue] and include a link to the repository or a sample of the code that is being misclassified.
## Overrides
@@ -33,9 +33,9 @@ $ cat .gitattributes
*.rb linguist-language=Java
```
Checking code you didn't write, such as JavaScript libraries, into your git repo is a common practice, but this often inflates your project's language stats and may even cause your project to be labeled as another language. By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository. Vendored files are also hidden by default in diffs on github.com.
Checking code you didn't write, such as JavaScript libraries, into your git repo is a common practice, but this often inflates your project's language stats and may even cause your project to be labeled as another language. By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository.
Use the `linguist-vendored` attribute to vendor or un-vendor paths. Please note, overriding the vendored (or un-vendored) status of a file only affects the language statistics for the repository and not the behavior in diffs on github.com.
Use the `linguist-vendored` attribute to vendor or un-vendor paths.
```
$ cat .gitattributes
@@ -59,6 +59,9 @@ Alternatively, you can use Vim or Emacs style modelines to set the language for
##### Vim
```
# Some examples of various styles:
vim: syntax=java
vim: set syntax=ruby:
vim: set filetype=prolog:
vim: set ft=cpp:
```

View File

@@ -62,7 +62,7 @@ namespace :benchmark do
corpus = File.expand_path(ENV["CORPUS"] || "samples")
require 'linguist/language'
require 'linguist'
results = Hash.new
Dir.glob("#{corpus}/**/*").each do |file|

138
bin/git-linguist Executable file
View File

@@ -0,0 +1,138 @@
#!/usr/bin/env ruby
require 'linguist'
require 'rugged'
require 'optparse'
require 'json'
require 'tmpdir'
require 'zlib'
class GitLinguist
def initialize(path, commit_oid, incremental = true)
@repo_path = path
@commit_oid = commit_oid
@incremental = incremental
end
def linguist
if @commit_oid.nil?
raise "git-linguist must be called with a specific commit OID to perform language computation"
end
repo = Linguist::Repository.new(rugged, @commit_oid)
if @incremental && stats = load_language_stats
old_commit_oid, old_stats = stats
# A cache with NULL oid means that we want to froze
# these language stats in place and stop computing
# them (for performance reasons)
return old_stats if old_commit_oid == NULL_OID
repo.load_existing_stats(old_commit_oid, old_stats)
end
result = yield repo
save_language_stats(@commit_oid, repo.cache)
result
end
def load_language_stats
version, oid, stats = load_cache
if version == LANGUAGE_STATS_CACHE_VERSION && oid && stats
[oid, stats]
end
end
def save_language_stats(oid, stats)
cache = [LANGUAGE_STATS_CACHE_VERSION, oid, stats]
write_cache(cache)
end
def clear_language_stats
File.unlink(cache_file)
rescue Errno::ENOENT
end
def disable_language_stats
save_language_stats(NULL_OID, {})
end
protected
NULL_OID = ("0" * 40).freeze
LANGUAGE_STATS_CACHE = 'language-stats.cache'
LANGUAGE_STATS_CACHE_VERSION = "v3:#{Linguist::VERSION}"
def rugged
@rugged ||= Rugged::Repository.bare(@repo_path)
end
def cache_file
File.join(@repo_path, LANGUAGE_STATS_CACHE)
end
def write_cache(object)
return unless File.directory? @repo_path
begin
tmp_path = Dir::Tmpname.make_tmpname(cache_file, nil)
File.open(tmp_path, "wb") do |f|
marshal = Marshal.dump(object)
f.write(Zlib::Deflate.deflate(marshal))
end
File.rename(tmp_path, cache_file)
rescue => e
(File.unlink(tmp_path) rescue nil)
raise e
end
end
def load_cache
marshal = File.open(cache_file, "rb") { |f| Zlib::Inflate.inflate(f.read) }
Marshal.load(marshal)
rescue SystemCallError, ::Zlib::DataError, ::Zlib::BufError, TypeError
nil
end
end
def git_linguist(args)
incremental = true
commit = nil
parser = OptionParser.new do |opts|
opts.banner = "Usage: git-linguist [OPTIONS] stats|breakdown|dump-cache|clear|disable"
opts.on("-f", "--force", "Force a full rescan") { incremental = false }
opts.on("--commit=COMMIT", "Commit to index") { |v| commit = v}
end
parser.parse!(args)
git_dir = `git rev-parse --git-dir`.strip
raise "git-linguist must be ran in a Git repository" unless $?.success?
wrapper = GitLinguist.new(git_dir, commit, incremental)
case args.pop
when "stats"
wrapper.linguist do |linguist|
puts JSON.dump(linguist.languages)
end
when "breakdown"
wrapper.linguist do |linguist|
puts JSON.dump(linguist.breakdown_by_file)
end
when "dump-cache"
puts JSON.dump(wrapper.load_language_stats)
when "clear"
wrapper.clear_language_stats
when "disable"
wrapper.disable_language_stats
else
$stderr.print(parser.help)
exit 1
end
end
git_linguist(ARGV)

View File

@@ -10,13 +10,13 @@ Gem::Specification.new do |s|
s.homepage = "https://github.com/github/linguist"
s.license = "MIT"
s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb']
s.executables << 'linguist'
s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb'] + ['LICENSE']
s.executables = ['linguist', 'git-linguist']
s.add_dependency 'charlock_holmes', '~> 0.7.3'
s.add_dependency 'escape_utils', '~> 1.1.0'
s.add_dependency 'mime-types', '>= 1.19'
s.add_dependency 'rugged', '~> 0.23.0b1'
s.add_dependency 'rugged', '>= 0.23.0b'
s.add_development_dependency 'minitest', '>= 5.0'
s.add_development_dependency 'mocha'
@@ -24,4 +24,6 @@ Gem::Specification.new do |s|
s.add_development_dependency 'rake'
s.add_development_dependency 'yajl-ruby'
s.add_development_dependency 'color-proximity', '~> 0.2.1'
s.add_development_dependency 'licensee', '6.0.0b1'
end

View File

@@ -42,6 +42,8 @@ vendor/grammars/Docker.tmbundle:
- source.dockerfile
vendor/grammars/Elm.tmLanguage:
- source.elm
vendor/grammars/FreeMarker.tmbundle:
- text.html.ftl
vendor/grammars/G-Code/:
- source.LS
- source.MCPOST
@@ -67,6 +69,9 @@ vendor/grammars/Lean.tmbundle:
- source.lean
vendor/grammars/LiveScript.tmbundle:
- source.livescript
vendor/grammars/MagicPython:
- source.python
- source.regexp.python
vendor/grammars/Modelica/:
- source.modelica
vendor/grammars/NSIS:
@@ -85,12 +90,14 @@ vendor/grammars/Racket:
- source.racket
vendor/grammars/SCSS.tmbundle:
- source.scss
vendor/grammars/SMT.tmbundle:
- source.smt
vendor/grammars/Scalate.tmbundle:
- source.scaml
- text.html.ssp
vendor/grammars/Slash.tmbundle:
- text.html.slash
vendor/grammars/Stata.tmbundle:
vendor/grammars/Stata.tmbundle/:
- source.mata
- source.stata
vendor/grammars/Stylus/:
@@ -99,14 +106,14 @@ vendor/grammars/Sublime-Coq:
- source.coq
vendor/grammars/Sublime-HTTP:
- source.httpspec
vendor/grammars/Sublime-Inform:
- source.Inform7
vendor/grammars/Sublime-Lasso:
- file.lasso
vendor/grammars/Sublime-Logos:
- source.logos
vendor/grammars/Sublime-Loom:
- source.loomscript
vendor/grammars/Sublime-Modula-2/:
- source.modula2
vendor/grammars/Sublime-Nit:
- source.nit
vendor/grammars/Sublime-QML:
@@ -119,6 +126,7 @@ vendor/grammars/Sublime-SQF-Language:
- source.sqf
vendor/grammars/Sublime-Text-2-OpenEdge-ABL:
- source.abl
- text.html.abl
vendor/grammars/Sublime-VimL:
- source.viml
vendor/grammars/SublimeBrainfuck:
@@ -135,10 +143,14 @@ vendor/grammars/TXL/:
- source.txl
vendor/grammars/Textmate-Gosu-Bundle:
- source.gosu.2
vendor/grammars/UrWeb-Language-Definition:
- source.ur
vendor/grammars/VBDotNetSyntax:
- source.vbnet
vendor/grammars/Vala-TMBundle:
- source.vala
vendor/grammars/X10:
- source.x10
vendor/grammars/abap.tmbundle:
- source.abap
vendor/grammars/actionscript3-tmbundle:
@@ -171,6 +183,13 @@ vendor/grammars/assembly.tmbundle:
- source.x86asm
vendor/grammars/atom-fsharp/:
- source.fsharp
- source.fsharp.fsi
- source.fsharp.fsl
- source.fsharp.fsx
vendor/grammars/atom-language-purescript/:
- source.purescript
vendor/grammars/atom-language-stan/:
- source.stan
vendor/grammars/atom-salt:
- source.python.salt
- source.yaml.salt
@@ -288,8 +307,8 @@ vendor/grammars/io.tmbundle:
vendor/grammars/ioke-outdated:
- source.ioke
vendor/grammars/jade-tmbundle:
- source.jade
- source.pyjade
- text.jade
vendor/grammars/jasmin-sublime:
- source.jasmin
vendor/grammars/java.tmbundle:
@@ -305,12 +324,20 @@ vendor/grammars/json.tmbundle:
- source.json
vendor/grammars/kotlin-sublime-package:
- source.Kotlin
vendor/grammars/language-babel/:
- source.js.jsx
- source.regexp.babel
vendor/grammars/language-click/:
- source.click
vendor/grammars/language-clojure:
- source.clojure
vendor/grammars/language-coffee-script:
- source.coffee
- source.litcoffee
vendor/grammars/language-crystal:
- source.crystal
vendor/grammars/language-csharp:
- source.cake
- source.cs
- source.csx
- source.nant-build
@@ -318,22 +345,37 @@ vendor/grammars/language-gfm:
- source.gfm
vendor/grammars/language-hy:
- source.hy
vendor/grammars/language-inform7:
- source.inform7
vendor/grammars/language-javascript:
- source.js
- source.js.regexp
- source.js.regexp.replacement
vendor/grammars/language-jsoniq/:
- source.jq
- source.xq
vendor/grammars/language-less/:
- source.css.less
vendor/grammars/language-maxscript:
- source.maxscript
vendor/grammars/language-ncl:
- source.ncl
vendor/grammars/language-python:
- source.python
- source.regexp.python
- text.python.console
- text.python.traceback
vendor/grammars/language-renpy:
- source.renpy
vendor/grammars/language-shellscript:
- source.shell
- text.shell-session
vendor/grammars/language-supercollider:
- source.supercollider
vendor/grammars/language-xbase:
- source.harbour
vendor/grammars/language-yaml:
- source.yaml
vendor/grammars/language-yang/:
- source.yang
vendor/grammars/latex.tmbundle:
- text.bibtex
- text.log.latex
@@ -341,8 +383,6 @@ vendor/grammars/latex.tmbundle:
- text.tex.latex
- text.tex.latex.beamer
- text.tex.latex.memoir
vendor/grammars/less.tmbundle:
- source.css.less
vendor/grammars/lilypond.tmbundle:
- source.lilypond
vendor/grammars/liquid.tmbundle:
@@ -405,6 +445,10 @@ vendor/grammars/pascal.tmbundle:
vendor/grammars/perl.tmbundle/:
- source.perl
- source.perl.6
vendor/grammars/perl6fe:
- source.meta-info
- source.perl6fe
- source.regexp.perl6fe
vendor/grammars/php-smarty.tmbundle:
- text.html.smarty
vendor/grammars/php.tmbundle:
@@ -417,8 +461,6 @@ vendor/grammars/powershell:
- source.powershell
vendor/grammars/processing.tmbundle:
- source.processing
vendor/grammars/prolog.tmbundle:
- source.prolog
vendor/grammars/protobuf-tmbundle:
- source.protobuf
vendor/grammars/puppet-textmate-bundle:
@@ -456,6 +498,8 @@ vendor/grammars/smalltalk-tmbundle:
- source.smalltalk
vendor/grammars/sql.tmbundle:
- source.sql
vendor/grammars/st2-zonefile:
- text.zone_file
vendor/grammars/standard-ml.tmbundle:
- source.cm
- source.ml
@@ -463,10 +507,10 @@ vendor/grammars/sublime-MuPAD:
- source.mupad
vendor/grammars/sublime-apl/:
- source.apl
vendor/grammars/sublime-aspectj/:
- source.aspectj
vendor/grammars/sublime-befunge:
- source.befunge
vendor/grammars/sublime-better-typescript:
- source.ts
vendor/grammars/sublime-bsv:
- source.bsv
vendor/grammars/sublime-cirru:
@@ -490,6 +534,8 @@ vendor/grammars/sublime-nix:
vendor/grammars/sublime-opal/:
- source.opal
- source.opalsysdefs
vendor/grammars/sublime-pony:
- source.pony
vendor/grammars/sublime-robot-plugin:
- text.robot
vendor/grammars/sublime-rust:
@@ -505,6 +551,9 @@ vendor/grammars/sublime-text-ox/:
- source.ox
vendor/grammars/sublime-text-pig-latin/:
- source.pig_latin
vendor/grammars/sublime-typescript/:
- source.ts
- source.tsx
vendor/grammars/sublime-varnish:
- source.varnish.vcl
vendor/grammars/sublime_cobol:
@@ -515,6 +564,9 @@ vendor/grammars/sublime_cobol:
vendor/grammars/sublime_man_page_support:
- source.man
- text.groff
vendor/grammars/sublimeprolog/:
- source.prolog
- source.prolog.eclipse
vendor/grammars/sublimetext-cuda-cpp:
- source.cuda-c++
vendor/grammars/swift.tmbundle:
@@ -531,6 +583,8 @@ vendor/grammars/turtle.tmbundle:
- source.turtle
vendor/grammars/verilog.tmbundle:
- source.verilog
vendor/grammars/vue-syntax-highlight:
- text.html.vue
vendor/grammars/x86-assembly-textmate-bundle:
- source.asm.x86
vendor/grammars/xc.tmbundle/:

View File

@@ -13,8 +13,8 @@ class << Linguist
def instrument(*args, &bk)
if instrumenter
instrumenter.instrument(*args, &bk)
else
yield if block_given?
elsif block_given?
yield
end
end
end

73
lib/linguist/blob.rb Normal file
View File

@@ -0,0 +1,73 @@
require 'linguist/blob_helper'
module Linguist
# A Blob is a wrapper around the content of a file to make it quack
# like a Grit::Blob. It provides the basic interface: `name`,
# `data`, `path` and `size`.
class Blob
include BlobHelper
# Public: Initialize a new Blob.
#
# path - A path String (does not necessarily exists on the file system).
# content - Content of the file.
#
# Returns a Blob.
def initialize(path, content)
@path = path
@content = content
end
# Public: Filename
#
# Examples
#
# Blob.new("/path/to/linguist/lib/linguist.rb", "").path
# # => "/path/to/linguist/lib/linguist.rb"
#
# Returns a String
attr_reader :path
# Public: File name
#
# Returns a String
def name
File.basename(@path)
end
# Public: File contents.
#
# Returns a String.
def data
@content
end
# Public: Get byte size
#
# Returns an Integer.
def size
@content.bytesize
end
# Public: Get file extension.
#
# Returns a String.
def extension
extensions.last || ""
end
# Public: Return an array of the file extensions
#
# >> Linguist::Blob.new("app/views/things/index.html.erb").extensions
# => [".html.erb", ".erb"]
#
# Returns an Array
def extensions
basename, *segments = name.downcase.split(".")
segments.map.with_index do |segment, index|
"." + segments[index..-1].join(".")
end
end
end
end

View File

@@ -13,11 +13,18 @@
- (^|/)[Dd]ocumentation/
- (^|/)javadoc/
- ^man/
- ^[Ee]xamples/
## Documentation files ##
- (^|/)CHANGE(S|LOG)?(\.|$)
- (^|/)CONTRIBUTING(\.|$)
- (^|/)COPYING(\.|$)
- (^|/)INSTALL(\.|$)
- (^|/)LICEN[CS]E(\.|$)
- (^|/)[Ll]icen[cs]e(\.|$)
- (^|/)README(\.|$)
- (^|/)[Rr]eadme(\.|$)
# Samples folders
- ^[Ss]amples/

View File

@@ -1,10 +1,11 @@
require 'linguist/blob_helper'
require 'linguist/blob'
module Linguist
# A FileBlob is a wrapper around a File object to make it quack
# like a Grit::Blob. It provides the basic interface: `name`,
# `data`, `path` and `size`.
class FileBlob
class FileBlob < Blob
include BlobHelper
# Public: Initialize a new FileBlob from a path
@@ -18,20 +19,6 @@ module Linguist
@path = base_path ? path.sub("#{base_path}/", '') : path
end
# Public: Filename
#
# Examples
#
# FileBlob.new("/path/to/linguist/lib/linguist.rb").path
# # => "/path/to/linguist/lib/linguist.rb"
#
# FileBlob.new("/path/to/linguist/lib/linguist.rb",
# "/path/to/linguist").path
# # => "lib/linguist.rb"
#
# Returns a String
attr_reader :path
# Public: Read file permissions
#
# Returns a String like '100644'
@@ -39,13 +26,6 @@ module Linguist
File.stat(@fullpath).mode.to_s(8)
end
# Public: File name
#
# Returns a String
def name
File.basename(@fullpath)
end
# Public: Read file contents.
#
# Returns a String.
@@ -59,26 +39,5 @@ module Linguist
def size
File.size(@fullpath)
end
# Public: Get file extension.
#
# Returns a String.
def extension
extensions.last || ""
end
# Public: Return an array of the file extensions
#
# >> Linguist::FileBlob.new("app/views/things/index.html.erb").extensions
# => [".html.erb", ".erb"]
#
# Returns an Array
def extensions
basename, *segments = name.downcase.split(".")
segments.map.with_index do |segment, index|
"." + segments[index..-1].join(".")
end
end
end
end

View File

@@ -69,8 +69,12 @@ module Linguist
generated_protocol_buffer? ||
generated_apache_thrift? ||
generated_jni_header? ||
vcr_cassette? ||
generated_module? ||
generated_unity3d_meta? ||
vcr_cassette?
generated_racc? ||
generated_jflex? ||
generated_grammarkit?
end
# Internal: Is the blob an Xcode file?
@@ -240,22 +244,26 @@ module Linguist
return lines[0].include?("Code generated by")
end
PROTOBUF_EXTENSIONS = ['.py', '.java', '.h', '.cc', '.cpp']
# Internal: Is the blob a C++, Java or Python source file generated by the
# Protocol Buffer compiler?
#
# Returns true of false.
def generated_protocol_buffer?
return false unless ['.py', '.java', '.h', '.cc', '.cpp'].include?(extname)
return false unless PROTOBUF_EXTENSIONS.include?(extname)
return false unless lines.count > 1
return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!")
end
APACHE_THRIFT_EXTENSIONS = ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp']
# Internal: Is the blob generated by Apache Thrift compiler?
#
# Returns true or false
def generated_apache_thrift?
return false unless ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp'].include?(extname)
return false unless APACHE_THRIFT_EXTENSIONS.include?(extname)
return false unless lines.count > 1
return lines[0].include?("Autogenerated by Thrift Compiler") || lines[1].include?("Autogenerated by Thrift Compiler")
@@ -324,6 +332,24 @@ module Linguist
return lines[0].include?("Generated by Cython")
end
# Internal: Is it a KiCAD or GFortran module file?
#
# KiCAD module files contain:
# PCBNEW-LibModule-V1 yyyy-mm-dd h:mm:ss XM
# on the first line.
#
# GFortran module files contain:
# GFORTRAN module version 'x' created from
# on the first line.
#
# Return true of false
def generated_module?
return false unless extname == '.mod'
return false unless lines.count > 1
return lines[0].include?("PCBNEW-LibModule-V") ||
lines[0].include?("GFORTRAN module version '")
end
# Internal: Is this a metadata file from Unity3D?
#
# Unity3D Meta files start with:
@@ -336,5 +362,45 @@ module Linguist
return false unless lines.count > 1
return lines[0].include?("fileFormatVersion: ")
end
# Internal: Is this a Racc-generated file?
#
# A Racc-generated file contains:
# # This file is automatically generated by Racc x.y.z
# on the third line.
#
# Return true or false
def generated_racc?
return false unless extname == '.rb'
return false unless lines.count > 2
return lines[2].start_with?("# This file is automatically generated by Racc")
end
# Internal: Is this a JFlex-generated file?
#
# A JFlex-generated file contains:
# /* The following code was generated by JFlex x.y.z on d/at/e ti:me */
# on the first line.
#
# Return true or false
def generated_jflex?
return false unless extname == '.java'
return false unless lines.count > 1
return lines[0].start_with?("/* The following code was generated by JFlex ")
end
# Internal: Is this a GrammarKit-generated file?
#
# A GrammarKit-generated file typically contain:
# // This is a generated file. Not intended for manual editing.
# on the first line. This is not always the case, as it's possible to
# customize the class header.
#
# Return true or false
def generated_grammarkit?
return false unless extname == '.java'
return false unless lines.count > 1
return lines[0].start_with?("// This is a generated file. Not intended for manual editing.")
end
end
end

View File

@@ -13,11 +13,14 @@ module Linguist
# ])
#
# Returns an Array of languages, or empty if none matched or were inconclusive.
def self.call(blob, languages)
def self.call(blob, candidates)
data = blob.data
@heuristics.each do |heuristic|
return Array(heuristic.call(data)) if heuristic.matches?(languages)
if heuristic.matches?(blob.name)
languages = Array(heuristic.call(data))
return languages if languages.any? || languages.all? { |l| candidates.include?(l) }
end
end
[] # No heuristics matched
@@ -30,7 +33,7 @@ module Linguist
#
# Examples
#
# disambiguate "Perl", "Prolog" do |data|
# disambiguate ".pm" do |data|
# if data.include?("use strict")
# Language["Perl"]
# elsif /^[^#]+:-/.match(data)
@@ -38,22 +41,23 @@ module Linguist
# end
# end
#
def self.disambiguate(*languages, &heuristic)
@heuristics << new(languages, &heuristic)
def self.disambiguate(*extensions, &heuristic)
@heuristics << new(extensions, &heuristic)
end
# Internal: Array of defined heuristics
@heuristics = []
# Internal
def initialize(languages, &heuristic)
@languages = languages
def initialize(extensions, &heuristic)
@extensions = extensions
@heuristic = heuristic
end
# Internal: Check if this heuristic matches the candidate languages.
def matches?(candidates)
candidates.any? && candidates.all? { |l| @languages.include?(l.name) }
def matches?(filename)
filename = filename.downcase
@extensions.any? { |ext| filename.end_with?(ext) }
end
# Internal: Perform the heuristic
@@ -62,99 +66,9 @@ module Linguist
end
# Common heuristics
ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronised|selector|implementation)\b/
ObjectiveCRegex = /^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])/
disambiguate "BitBake", "BlitzBasic" do |data|
if /^\s*; /.match(data) || data.include?("End Function")
Language["BlitzBasic"]
elsif /^\s*(# |include|require)\b/.match(data)
Language["BitBake"]
end
end
disambiguate "C#", "Smalltalk" do |data|
if /![\w\s]+methodsFor: /.match(data)
Language["Smalltalk"]
elsif /^\s*namespace\s*[\w\.]+\s*{/.match(data) || /^\s*\/\//.match(data)
Language["C#"]
end
end
disambiguate "Objective-C", "C++", "C" do |data|
if ObjectiveCRegex.match(data)
Language["Objective-C"]
elsif (/^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>/.match(data) ||
/^\s*template\s*</.match(data) || /^[ \t]*try/.match(data) || /^[ \t]*catch\s*\(/.match(data) || /^[ \t]*(class|(using[ \t]+)?namespace)\s+\w+/.match(data) || /^[ \t]*(private|public|protected):$/.match(data) || /std::\w+/.match(data))
Language["C++"]
end
end
disambiguate "Perl", "Perl6", "Prolog" do |data|
if data.include?("use v6")
Language["Perl6"]
elsif data.match(/use strict|use\s+v?5\./)
Language["Perl"]
elsif /^[^#]+:-/.match(data)
Language["Prolog"]
end
end
disambiguate "ECL", "Prolog" do |data|
if /^[^#]+:-/.match(data)
Language["Prolog"]
elsif data.include?(":=")
Language["ECL"]
end
end
disambiguate "IDL", "Prolog", "INI", "QMake" do |data|
if /^[^#]+:-/.match(data)
Language["Prolog"]
elsif data.include?("last_client=")
Language["INI"]
elsif data.include?("HEADERS") && data.include?("SOURCES")
Language["QMake"]
elsif /^\s*function[ \w,]+$/.match(data)
Language["IDL"]
end
end
disambiguate "GAP", "Scilab" do |data|
if (data.include?("gap> "))
Language["GAP"]
# Heads up - we don't usually write heuristics like this (with no regex match)
else
Language["Scilab"]
end
end
disambiguate "Common Lisp", "OpenCL", "Cool" do |data|
if /^\s*\((defun|in-package|defpackage) /i.match(data)
Language["Common Lisp"]
elsif /^class/x.match(data)
Language["Cool"]
elsif /\/\* |\/\/ |^\}/.match(data)
Language["OpenCL"]
end
end
disambiguate "Hack", "PHP" do |data|
if data.include?("<?hh")
Language["Hack"]
elsif /<?[^h]/.match(data)
Language["PHP"]
end
end
disambiguate "Scala", "SuperCollider" do |data|
if /\^(this|super)\./.match(data) || /^\s*(\+|\*)\s*\w+\s*{/.match(data) || /^\s*~\w+\s*=\./.match(data)
Language["SuperCollider"]
elsif /^\s*import (scala|java)\./.match(data) || /^\s*val\s+\w+\s*=/.match(data) || /^\s*class\b/.match(data)
Language["Scala"]
end
end
disambiguate "AsciiDoc", "AGS Script", "Public Key" do |data|
disambiguate ".asc" do |data|
if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data)
Language["Public Key"]
elsif /^[=-]+(\s|\n)|{{[A-Za-z]/.match(data)
@@ -164,15 +78,75 @@ module Linguist
end
end
disambiguate "FORTRAN", "Forth", "Formatted" do |data|
disambiguate ".bb" do |data|
if /^\s*; /.match(data) || data.include?("End Function")
Language["BlitzBasic"]
elsif /^\s*(# |include|require)\b/.match(data)
Language["BitBake"]
end
end
disambiguate ".ch" do |data|
if /^\s*#\s*(if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b/i.match(data)
Language["xBase"]
end
end
disambiguate ".cl" do |data|
if /^\s*\((defun|in-package|defpackage) /i.match(data)
Language["Common Lisp"]
elsif /^class/x.match(data)
Language["Cool"]
elsif /\/\* |\/\/ |^\}/.match(data)
Language["OpenCL"]
end
end
disambiguate ".cs" do |data|
if /![\w\s]+methodsFor: /.match(data)
Language["Smalltalk"]
elsif /^\s*namespace\s*[\w\.]+\s*{/.match(data) || /^\s*\/\//.match(data)
Language["C#"]
end
end
disambiguate ".d" do |data|
if /^module /.match(data)
Language["D"]
elsif /^((dtrace:::)?BEGIN|provider |#pragma (D (option|attributes)|ident)\s)/.match(data)
Language["DTrace"]
elsif /(\/.*:( .* \\)$| : \\$|^ : |: \\$)/.match(data)
Language["Makefile"]
end
end
disambiguate ".ecl" do |data|
if /^[^#]+:-/.match(data)
Language["ECLiPSe"]
elsif data.include?(":=")
Language["ECL"]
end
end
disambiguate ".for", ".f" do |data|
if /^: /.match(data)
Language["Forth"]
elsif /^([c*][^a-z]| (subroutine|program)\s|\s*!)/i.match(data)
elsif /^([c*][^abd-z]| (subroutine|program|end)\s|\s*!)/i.match(data)
Language["FORTRAN"]
end
end
disambiguate "F#", "Forth", "GLSL", "Filterscript" do |data|
disambiguate ".fr" do |data|
if /^(: |also |new-device|previous )/.match(data)
Language["Forth"]
elsif /^\s*(import|module|package|data|type) /.match(data)
Language["Frege"]
else
Language["Text"]
end
end
disambiguate ".fs" do |data|
if /^(: |new-device)/.match(data)
Language["Forth"]
elsif /^\s*(#light|import|let|module|namespace|open|type)/.match(data)
@@ -184,7 +158,48 @@ module Linguist
end
end
disambiguate "Limbo", "M", "MUF", "Mathematica", "Matlab", "Mercury", "Objective-C" do |data|
disambiguate ".gs" do |data|
Language["Gosu"] if /^uses java\./.match(data)
end
disambiguate ".h" do |data|
if ObjectiveCRegex.match(data)
Language["Objective-C"]
elsif (/^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>/.match(data) ||
/^\s*template\s*</.match(data) || /^[ \t]*try/.match(data) || /^[ \t]*catch\s*\(/.match(data) || /^[ \t]*(class|(using[ \t]+)?namespace)\s+\w+/.match(data) || /^[ \t]*(private|public|protected):$/.match(data) || /std::\w+/.match(data))
Language["C++"]
end
end
disambiguate ".l" do |data|
if /\(def(un|macro)\s/.match(data)
Language["Common Lisp"]
elsif /^(%[%{}]xs|<.*>)/.match(data)
Language["Lex"]
elsif /^\.[a-z][a-z](\s|$)/i.match(data)
Language["Groff"]
elsif /^\((de|class|rel|code|data|must)\s/.match(data)
Language["PicoLisp"]
end
end
disambiguate ".ls" do |data|
if /^\s*package\s*[\w\.\/\*\s]*\s*{/.match(data)
Language["LoomScript"]
else
Language["LiveScript"]
end
end
disambiguate ".lsp", ".lisp" do |data|
if /^\s*\((defun|in-package|defpackage) /i.match(data)
Language["Common Lisp"]
elsif /^\s*\(define /.match(data)
Language["NewLisp"]
end
end
disambiguate ".m" do |data|
if ObjectiveCRegex.match(data)
Language["Objective-C"]
elsif data.include?(":- module")
@@ -202,45 +217,127 @@ module Linguist
end
end
disambiguate "Gosu", "JavaScript" do |data|
Language["Gosu"] if /^uses java\./.match(data)
end
disambiguate "LoomScript", "LiveScript" do |data|
if /^\s*package\s*[\w\.\/\*\s]*\s*{/.match(data)
Language["LoomScript"]
else
Language["LiveScript"]
disambiguate ".ml" do |data|
if /(^\s*module)|let rec |match\s+(\S+\s)+with/.match(data)
Language["OCaml"]
elsif /=> |case\s+(\S+\s)+of/.match(data)
Language["Standard ML"]
end
end
disambiguate "Common Lisp", "NewLisp" do |data|
if /^\s*\((defun|in-package|defpackage) /i.match(data)
Language["Common Lisp"]
elsif /^\s*\(define /.match(data)
Language["NewLisp"]
end
end
disambiguate "TypeScript", "XML" do |data|
if data.include?("<TS ")
disambiguate ".mod" do |data|
if data.include?('<!ENTITY ')
Language["XML"]
elsif /MODULE\s\w+\s*;/i.match(data) || /^\s*END \w+;$/i.match(data)
Language["Modula-2"]
else
Language["TypeScript"]
[Language["Linux Kernel Module"], Language["AMPL"]]
end
end
disambiguate "Frege", "Forth", "Text" do |data|
if /^(: |also |new-device|previous )/.match(data)
Language["Forth"]
elsif /^\s*(import|module|package|data|type) /.match(data)
Language["Frege"]
disambiguate ".ms" do |data|
if /^[.'][a-z][a-z](\s|$)/i.match(data)
Language["Groff"]
elsif /(?<!\S)\.(include|globa?l)\s/.match(data) || /(?<!\/\*)(\A|\n)\s*\.[A-Za-z]/.match(data.gsub(/"([^\\"]|\\.)*"|'([^\\']|\\.)*'|\\\s*(?:--.*)?\n/, ""))
Language["GAS"]
else
Language["MAXScript"]
end
end
disambiguate ".n" do |data|
if /^[.']/.match(data)
Language["Groff"]
elsif /^(module|namespace|using)\s/.match(data)
Language["Nemerle"]
end
end
disambiguate ".ncl" do |data|
if data.include?("THE_TITLE")
Language["Text"]
end
end
disambiguate "PLSQL", "SQLPL", "PLpgSQL", "SQL" do |data|
disambiguate ".nl" do |data|
if /^(b|g)[0-9]+ /.match(data)
Language["NL"]
else
Language["NewLisp"]
end
end
disambiguate ".php" do |data|
if data.include?("<?hh")
Language["Hack"]
elsif /<?[^h]/.match(data)
Language["PHP"]
end
end
disambiguate ".pl" do |data|
if /^[^#]+:-/.match(data)
Language["Prolog"]
elsif /use strict|use\s+v?5\./.match(data)
Language["Perl"]
elsif /^(use v6|(my )?class|module)/.match(data)
Language["Perl6"]
end
end
disambiguate ".pm", ".t" do |data|
if /use strict|use\s+v?5\./.match(data)
Language["Perl"]
elsif /^(use v6|(my )?class|module)/.match(data)
Language["Perl6"]
end
end
disambiguate ".pod" do |data|
if /^=\w+$/.match(data)
Language["Pod"]
else
Language["Perl"]
end
end
disambiguate ".pro" do |data|
if /^[^#]+:-/.match(data)
Language["Prolog"]
elsif data.include?("last_client=")
Language["INI"]
elsif data.include?("HEADERS") && data.include?("SOURCES")
Language["QMake"]
elsif /^\s*function[ \w,]+$/.match(data)
Language["IDL"]
end
end
disambiguate ".r" do |data|
if /\bRebol\b/i.match(data)
Language["Rebol"]
elsif data.include?("<-")
Language["R"]
end
end
disambiguate ".rs" do |data|
if /^(use |fn |mod |pub |macro_rules|impl|#!?\[)/.match(data)
Language["Rust"]
elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data)
Language["RenderScript"]
end
end
disambiguate ".sc" do |data|
if /\^(this|super)\./.match(data) || /^\s*(\+|\*)\s*\w+\s*{/.match(data) || /^\s*~\w+\s*=\./.match(data)
Language["SuperCollider"]
elsif /^\s*import (scala|java)\./.match(data) || /^\s*val\s+\w+\s*=/.match(data) || /^\s*class\b/.match(data)
Language["Scala"]
end
end
disambiguate ".sql" do |data|
if /^\\i\b|AS \$\$|LANGUAGE '+plpgsql'+/i.match(data) || /SECURITY (DEFINER|INVOKER)/i.match(data) || /BEGIN( WORK| TRANSACTION)?;/i.match(data)
#Postgres
Language["PLpgSQL"]
@@ -256,65 +353,20 @@ module Linguist
end
end
disambiguate "D", "DTrace", "Makefile" do |data|
if /^module /.match(data)
Language["D"]
elsif /^((dtrace:::)?BEGIN|provider |#pragma (D (option|attributes)|ident)\s)/.match(data)
Language["DTrace"]
elsif /(\/.*:( .* \\)$| : \\$|^ : |: \\$)/.match(data)
Language["Makefile"]
end
end
disambiguate "OCaml", "Standard ML" do |data|
if /(^\s*module)|let rec |match\s+(\S+\s)+with/.match(data)
Language["OCaml"]
elsif /=> |case\s+(\S+\s)+of/.match(data)
Language["Standard ML"]
end
end
disambiguate "NL", "NewLisp" do |data|
if /^(b|g)[0-9]+ /.match(data)
Language["NL"]
disambiguate ".ts" do |data|
if data.include?("<TS ")
Language["XML"]
else
Language["NewLisp"]
Language["TypeScript"]
end
end
disambiguate "Rust", "RenderScript" do |data|
if /^(use |fn |mod |pub |macro_rules|impl|#!?\[)/.match(data)
Language["Rust"]
elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data)
Language["RenderScript"]
end
end
disambiguate "Common Lisp", "Lex", "Groff", "PicoLisp" do |data|
if /\(def(un|macro)\s/.match(data)
Language["Common Lisp"]
elsif /^(%[%{}]xs|<.*>)/.match(data)
Language["Lex"]
elsif /^\.[a-z][a-z](\s|$)/i.match(data)
Language["Groff"]
elsif /^\((de|class|rel|code|data|must)\s/.match(data)
Language["PicoLisp"]
end
end
disambiguate "Groff", "Nemerle" do |data|
if /^[.']/.match(data)
Language["Groff"]
elsif /^(module|namespace|using)\s/.match(data)
Language["Nemerle"]
end
end
disambiguate "GAS", "Groff" do |data|
if /^[.'][a-z][a-z](\s|$)/i.match(data)
Language["Groff"]
elsif /((^|\s)move?[. ])|\.(include|globa?l)\s/.match(data)
Language["GAS"]
disambiguate ".tst" do |data|
if (data.include?("gap> "))
Language["GAP"]
# Heads up - we don't usually write heuristics like this (with no regex match)
else
Language["Scilab"]
end
end
end

View File

@@ -150,7 +150,8 @@ module Linguist
#
# Returns the Language or nil if none was found.
def self.find_by_name(name)
name && @name_index[name.downcase]
return nil if name.to_s.empty?
name && (@name_index[name.downcase] || @name_index[name.split(',').first.downcase])
end
# Public: Look up Language by one of its aliases.
@@ -164,7 +165,8 @@ module Linguist
#
# Returns the Language or nil if none was found.
def self.find_by_alias(name)
name && @alias_index[name.downcase]
return nil if name.to_s.empty?
name && (@alias_index[name.downcase] || @alias_index[name.split(',').first.downcase])
end
# Public: Look up Languages by filename.
@@ -240,7 +242,8 @@ module Linguist
#
# Returns the Language or nil if none was found.
def self.[](name)
name && @index[name.downcase]
return nil if name.to_s.empty?
name && (@index[name.downcase] || @index[name.split(',').first.downcase])
end
# Public: A List of popular languages

View File

@@ -8,7 +8,8 @@
# Use "text" if a mode does not exist.
# wrap - Boolean wrap to enable line wrapping (default: false)
# extensions - An Array of associated extensions (the first one is
# considered the primary extension)
# considered the primary extension, the others should be
# listed alphabetically)
# interpreters - An Array of associated interpreters
# searchable - Boolean flag to enable searching (defaults to true)
# search_term - Deprecated: Some languages maybe indexed under a
@@ -49,6 +50,7 @@ AMPL:
color: "#E6EFBB"
extensions:
- .ampl
- .mod
tm_scope: source.ampl
ace_mode: text
@@ -140,7 +142,7 @@ Agda:
Alloy:
type: programming # 'modeling' would be more appropiate
color: "#cc5c24"
color: "#64C800"
extensions:
- .als
ace_mode: text
@@ -181,6 +183,7 @@ AppleScript:
interpreters:
- osascript
ace_mode: applescript
color: "#101F1F"
Arc:
type: programming
@@ -213,7 +216,7 @@ AspectJ:
color: "#a957b0"
extensions:
- .aj
tm_scope: none
tm_scope: source.aspectj
ace_mode: text
Assembly:
@@ -225,6 +228,7 @@ Assembly:
extensions:
- .asm
- .a51
- .inc
- .nasm
tm_scope: source.asm.x86
ace_mode: assembly_x86
@@ -287,6 +291,7 @@ Batchfile:
- .cmd
tm_scope: source.dosbatch
ace_mode: batchfile
color: "#C1F12E"
Befunge:
type: programming
@@ -301,6 +306,7 @@ Bison:
extensions:
- .bison
ace_mode: text
color: "#6A463F"
BitBake:
type: programming
@@ -390,6 +396,7 @@ C#:
- csharp
extensions:
- .cs
- .cake
- .cshtml
- .csx
@@ -411,6 +418,7 @@ C++:
- .hh
- .hpp
- .hxx
- .inc
- .inl
- .ipp
- .tcc
@@ -498,6 +506,13 @@ Chapel:
- .chpl
ace_mode: text
Charity:
type: programming
extensions:
- .ch
tm_scope: none
ace_mode: text
ChucK:
type: programming
extensions:
@@ -529,6 +544,14 @@ Clean:
tm_scope: none
ace_mode: text
Click:
type: programming
color: "#E4E6F3"
extensions:
- .click
tm_scope: source.click
ace_mode: text
Clojure:
type: programming
ace_mode: clojure
@@ -557,6 +580,7 @@ CoffeeScript:
extensions:
- .coffee
- ._coffee
- .cake
- .cjsx
- .cson
- .iced
@@ -606,6 +630,7 @@ Common Lisp:
- .lsp
- .ny
- .podsl
- .sexp
interpreters:
- lisp
- sbcl
@@ -616,7 +641,7 @@ Common Lisp:
Component Pascal:
type: programming
color: "#b0ce4e"
color: "#B0CE4E"
extensions:
- .cp
- .cps
@@ -667,7 +692,7 @@ Crystal:
extensions:
- .cr
ace_mode: ruby
tm_scope: source.ruby
tm_scope: source.crystal
interpreters:
- crystal
@@ -679,6 +704,7 @@ Cucumber:
aliases:
- gherkin
ace_mode: text
color: "#5B2063"
Cuda:
type: programming
@@ -687,6 +713,7 @@ Cuda:
- .cuh
tm_scope: source.cuda-c++
ace_mode: c_cpp
color: "#3A4E3A"
Cycript:
type: programming
@@ -708,7 +735,7 @@ Cython:
D:
type: programming
color: "#fcd46d"
color: "#ba595e"
extensions:
- .d
- .di
@@ -740,6 +767,14 @@ DM:
tm_scope: source.c++
ace_mode: c_cpp
DNS Zone:
type: data
extensions:
- .zone
- .arpa
tm_scope: text.zone_file
ace_mode: text
DTrace:
type: programming
aliases:
@@ -771,7 +806,6 @@ Dart:
Diff:
type: data
color: "#88dddd"
extensions:
- .diff
- .patch
@@ -824,6 +858,14 @@ ECL:
tm_scope: none
ace_mode: text
ECLiPSe:
type: programming
group: prolog
extensions:
- .ecl
tm_scope: source.prolog.eclipse
ace_mode: prolog
Eagle:
type: markup
color: "#814C05"
@@ -857,6 +899,8 @@ Elixir:
ace_mode: elixir
filenames:
- mix.lock
interpreters:
- elixir
Elm:
type: programming
@@ -899,6 +943,8 @@ Erlang:
- .es
- .escript
- .hrl
- .xrl
- .yrl
filenames:
- rebar.config
- rebar.config.lock
@@ -984,6 +1030,7 @@ Formatted:
type: data
extensions:
- .for
- .eam.fs
tm_scope: none
ace_mode: text
@@ -1001,6 +1048,16 @@ Forth:
- .fs
ace_mode: forth
FreeMarker:
type: programming
color: "#0050b2"
aliases:
- ftl
extensions:
- .ftl
tm_scope: text.html.ftl
ace_mode: ftl
Frege:
type: programming
color: "#00cafe"
@@ -1258,6 +1315,14 @@ Groovy Server Pages:
tm_scope: text.html.jsp
ace_mode: jsp
HCL:
type: programming
extensions:
- .hcl
- .tf
ace_mode: ruby
tm_scope: source.ruby
HTML:
type: markup
tm_scope: text.html.basic
@@ -1269,6 +1334,7 @@ HTML:
- .html
- .htm
- .html.hl
- .inc
- .st
- .xht
- .xhtml
@@ -1281,11 +1347,22 @@ HTML+Django:
- .mustache
- .jinja
aliases:
- django
- html+django/jinja
- html+jinja
- htmldjango
ace_mode: django
HTML+EEX:
type: markup
tm_scope: text.html.elixir
group: HTML
aliases:
- eex
extensions:
- .eex
ace_mode: text
HTML+ERB:
type: markup
tm_scope: text.html.erb
@@ -1295,7 +1372,7 @@ HTML+ERB:
extensions:
- .erb
- .erb.deface
ace_mode: html_ruby
ace_mode: text
HTML+PHP:
type: markup
@@ -1319,6 +1396,7 @@ Hack:
- .hh
- .php
tm_scope: text.html.php
color: "#878787"
Haml:
group: HTML
@@ -1327,10 +1405,12 @@ Haml:
- .haml
- .haml.deface
ace_mode: haml
color: "#ECE2A9"
Handlebars:
type: markup
color: "#01a9d6"
group: HTML
aliases:
- hbs
- htmlbars
@@ -1345,7 +1425,7 @@ Harbour:
color: "#0e60e3"
extensions:
- .hb
tm_scope: none
tm_scope: source.harbour
ace_mode: text
Haskell:
@@ -1359,7 +1439,7 @@ Haskell:
Haxe:
type: programming
ace_mode: haxe
color: "#f7941e"
color: "#df7900"
extensions:
- .hx
- .hxsl
@@ -1438,7 +1518,7 @@ Inform 7:
extensions:
- .ni
- .i7x
tm_scope: source.Inform7
tm_scope: source.inform7
aliases:
- i7
- inform7
@@ -1475,6 +1555,14 @@ Isabelle:
tm_scope: source.isabelle.theory
ace_mode: text
Isabelle ROOT:
type: programming
group: Isabelle
filenames:
- ROOT
tm_scope: source.isabelle.root
ace_mode: text
J:
type: programming
color: "#9EEDFF"
@@ -1501,7 +1589,9 @@ JSON:
searchable: false
extensions:
- .json
- .geojson
- .lock
- .topojson
filenames:
- .jshintrc
- composer.lock
@@ -1529,12 +1619,20 @@ JSONiq:
- .jq
tm_scope: source.jq
JSX:
type: programming
group: JavaScript
extensions:
- .jsx
tm_scope: source.js.jsx
ace_mode: javascript
Jade:
group: HTML
type: markup
extensions:
- .jade
tm_scope: source.jade
tm_scope: text.jade
ace_mode: jade
Jasmin:
@@ -1579,10 +1677,10 @@ JavaScript:
- .gs
- .jake
- .jsb
- .jscad
- .jsfl
- .jsm
- .jss
- .jsx
- .njs
- .pac
- .sjs
@@ -1614,6 +1712,18 @@ Julia:
color: "#a270ba"
ace_mode: julia
Jupyter Notebook:
type: markup
ace_mode: json
tm_scope: source.json
color: "#DA5B0B"
extensions:
- .ipynb
filenames:
- Notebook
aliases:
- IPython Notebook
KRL:
type: programming
color: "#28431f"
@@ -1626,6 +1736,8 @@ KiCad:
type: programming
extensions:
- .sch
- .brd
- .kicad_pcb
tm_scope: none
ace_mode: text
@@ -1638,7 +1750,7 @@ Kit:
Kotlin:
type: programming
color: "#EA4DFA"
color: "#F18E33"
extensions:
- .kt
- .ktm
@@ -1660,6 +1772,7 @@ LLVM:
extensions:
- .ll
ace_mode: text
color: "#185619"
LOLCODE:
type: programming
@@ -1674,6 +1787,7 @@ LSL:
ace_mode: lsl
extensions:
- .lsl
- .lslp
interpreters:
- lsl
color: '#3d9970'
@@ -1682,8 +1796,8 @@ LabVIEW:
type: programming
extensions:
- .lvproj
tm_scope: none
ace_mode: text
tm_scope: text.xml
ace_mode: xml
Lasso:
type: programming
@@ -1722,6 +1836,7 @@ Less:
- .less
tm_scope: source.css.less
ace_mode: less
color: "#A1D9A1"
Lex:
type: programming
@@ -1759,6 +1874,13 @@ Linker Script:
tm_scope: none
ace_mode: text
Linux Kernel Module:
type: data
extensions:
- .mod
tm_scope: none
ace_mode: text
Liquid:
type: markup
extensions:
@@ -1866,6 +1988,15 @@ M:
tm_scope: source.lisp
ace_mode: lisp
MAXScript:
type: programming
color: "#00a6a6"
extensions:
- .ms
- .mcr
tm_scope: source.maxscript
ace_mode: text
MTML:
type: markup
color: "#b7e1f4"
@@ -1898,6 +2029,7 @@ Makefile:
- GNUmakefile
- Kbuild
- Makefile
- Makefile.inc
- makefile
interpreters:
- make
@@ -1923,6 +2055,7 @@ Markdown:
- .mkdown
- .ron
tm_scope: source.gfm
color: "#083FA1"
Mask:
type: markup
@@ -1939,6 +2072,7 @@ Mathematica:
- .cdf
- .m
- .ma
- .mt
- .nb
- .nbp
- .wl
@@ -1950,6 +2084,8 @@ Mathematica:
Matlab:
type: programming
color: "#bb92ac"
aliases:
- octave
extensions:
- .matlab
- .m
@@ -1983,6 +2119,7 @@ MediaWiki:
wrap: true
extensions:
- .mediawiki
- .wiki
tm_scope: text.html.mediawiki
ace_mode: text
@@ -1998,6 +2135,14 @@ Mercury:
tm_scope: source.mercury
ace_mode: prolog
Metal:
type: programming
color: "#8f14e9"
extensions:
- .metal
tm_scope: source.c++
ace_mode: c_cpp
MiniD: # Legacy
type: programming
searchable: false
@@ -2025,6 +2170,13 @@ Modelica:
tm_scope: source.modelica
ace_mode: text
Modula-2:
type: programming
extensions:
- .mod
tm_scope: source.modula2
ace_mode: text
Module Management System:
type: programming
extensions:
@@ -2064,6 +2216,14 @@ Myghty:
tm_scope: none
ace_mode: text
NCL:
type: programming
color: "#28431f"
extensions:
- .ncl
tm_scope: source.ncl
ace_mode: text
NL:
type: data
extensions:
@@ -2135,6 +2295,7 @@ Nginx:
aliases:
- nginx configuration file
ace_mode: text
color: "#9469E9"
Nimrod:
type: programming
@@ -2193,6 +2354,7 @@ NumPy:
- .numsc
tm_scope: none
ace_mode: text
color: "#9C8AF9"
OCaml:
type: programming
@@ -2357,9 +2519,11 @@ PHP:
- .aw
- .ctp
- .fcgi
- .inc
- .php3
- .php4
- .php5
- .phps
- .phpt
filenames:
- Phakefile
@@ -2373,8 +2537,10 @@ PLSQL:
type: programming
ace_mode: sql
tm_scope: source.plsql.oracle
color: "#dad8d8"
extensions:
- .pls
- .pck
- .pkb
- .pks
- .plb
@@ -2439,11 +2605,12 @@ Parrot Internal Representation:
Pascal:
type: programming
color: "#b0ce4e"
color: "#E3F171"
extensions:
- .pas
- .dfm
- .dpr
- .inc
- .lpr
- .pp
ace_mode: pascal
@@ -2487,9 +2654,16 @@ Perl6:
- Rexfile
interpreters:
- perl6
tm_scope: source.perl.6
tm_scope: source.perl6fe
ace_mode: perl
Pickle:
type: data
extensions:
- .pkl
tm_scope: none
ace_mode: text
PicoLisp:
type: programming
extensions:
@@ -2534,6 +2708,13 @@ PogoScript:
tm_scope: source.pogoscript
ace_mode: text
Pony:
type: programming
extensions:
- .pony
tm_scope: source.pony
ace_mode: text
PostScript:
type: markup
extensions:
@@ -2566,11 +2747,11 @@ Prolog:
color: "#74283c"
extensions:
- .pl
- .ecl
- .pro
- .prolog
interpreters:
- swipl
tm_scope: source.prolog
ace_mode: prolog
Propeller Spin:
@@ -2601,7 +2782,7 @@ Public Key:
Puppet:
type: programming
color: "#332A77"
color: "#302B6D"
extensions:
- .pp
filenames:
@@ -2630,7 +2811,7 @@ PureScript:
color: "#1D222D"
extensions:
- .purs
tm_scope: source.haskell
tm_scope: source.purescript
ace_mode: haskell
Python:
@@ -2692,7 +2873,7 @@ QMake:
R:
type: programming
color: "#198ce7"
color: "#198CE7"
aliases:
- R
- Rscript
@@ -2708,7 +2889,7 @@ R:
ace_mode: r
RAML:
type: data
type: markup
ace_mode: yaml
tm_scope: source.yaml
color: "#77d9fb"
@@ -2722,6 +2903,7 @@ RDoc:
extensions:
- .rdoc
tm_scope: text.rdoc
color: "#8E84BF"
REALbasic:
type: programming
@@ -2751,7 +2933,7 @@ RMarkdown:
ace_mode: markdown
extensions:
- .rmd
tm_scope: none
tm_scope: source.gfm
Racket:
type: programming
@@ -2768,7 +2950,7 @@ Racket:
Ragel in Ruby Host:
type: programming
color: "#e17600"
color: "#9d5200"
extensions:
- .rl
aliases:
@@ -2817,6 +2999,17 @@ Redcode:
tm_scope: none
ace_mode: text
Ren'Py:
type: programming
group: Python
aliases:
- renpy
color: "#ff7f7f"
extensions:
- .rpy
tm_scope: source.renpy
ace_mode: python
RenderScript:
type: programming
extensions:
@@ -2881,6 +3074,7 @@ Ruby:
- .pryrc
- Appraisals
- Berksfile
- Brewfile
- Buildfile
- Deliverfile
- Fastfile
@@ -2901,6 +3095,7 @@ Rust:
color: "#dea584"
extensions:
- .rs
- .rs.in
ace_mode: rust
SAS:
@@ -2918,6 +3113,26 @@ SCSS:
ace_mode: scss
extensions:
- .scss
color: "#CF649A"
SMT:
type: programming
extensions:
- .smt2
- .smt
interpreters:
- boolector
- cvc4
- mathsat5
- opensmt
- smtinterpol
- smt-rat
- stp
- verit
- yices2
- z3
tm_scope: source.smt
ace_mode: text
SPARQL:
type: data
@@ -2944,6 +3159,7 @@ SQL:
- .sql
- .cql
- .ddl
- .inc
- .prc
- .tab
- .udf
@@ -3000,11 +3216,12 @@ Sass:
extensions:
- .sass
ace_mode: sass
color: "#CF649A"
Scala:
type: programming
ace_mode: scala
color: "#7dd3b0"
color: "#DC322F"
extensions:
- .scala
- .sbt
@@ -3109,6 +3326,7 @@ Slim:
color: "#ff8f77"
extensions:
- .slim
tm_scope: text.slim
ace_mode: text
Smali:
@@ -3142,6 +3360,7 @@ SourcePawn:
- sourcemod
extensions:
- .sp
- .inc
- .sma
tm_scope: source.sp
ace_mode: text
@@ -3154,6 +3373,14 @@ Squirrel:
tm_scope: source.c++
ace_mode: c_cpp
Stan:
type: programming
color: "#b2011d"
extensions:
- .stan
ace_mode: text
tm_scope: source.stan
Standard ML:
type: programming
color: "#dc566d"
@@ -3191,9 +3418,12 @@ SuperCollider:
type: programming
color: "#46390b"
extensions:
- .scd
- .sc
tm_scope: none
- .scd
interpreters:
- sclang
- scsynth
tm_scope: source.supercollider
ace_mode: text
Swift:
@@ -3286,6 +3516,7 @@ Text:
extensions:
- .txt
- .fr
- .ncl
tm_scope: none
ace_mode: text
@@ -3335,6 +3566,7 @@ TypeScript:
- ts
extensions:
- .ts
- .tsx
tm_scope: source.ts
ace_mode: typescript
@@ -3350,7 +3582,6 @@ Unified Parallel C:
Unity3D Asset:
type: data
ace_mode: yaml
color: "#ab69a1"
extensions:
- .anim
- .asset
@@ -3368,6 +3599,17 @@ UnrealScript:
tm_scope: source.java
ace_mode: java
UrWeb:
type: programming
aliases:
- Ur/Web
- Ur
extensions:
- .ur
- .urs
tm_scope: source.ur
ace_mode: text
VCL:
group: Perl
type: programming
@@ -3450,6 +3692,14 @@ Volt:
tm_scope: source.d
ace_mode: d
Vue:
type: markup
color: "#2c3e50"
extensions:
- .vue
tm_scope: text.html.vue
ace_mode: html
Web Ontology Language:
type: markup
color: "#9cc9dd"
@@ -3465,6 +3715,16 @@ WebIDL:
tm_scope: source.webidl
ace_mode: text
X10:
type: programming
aliases:
- xten
ace_mode: text
extensions:
- .x10
color: "#4B6BEF"
tm_scope: source.x10
XC:
type: programming
color: "#99DA07"
@@ -3487,6 +3747,7 @@ XML:
- .ccxml
- .clixml
- .cproject
- .csl
- .csproj
- .ct
- .dita
@@ -3502,10 +3763,12 @@ XML:
- .iml
- .ivy
- .jelly
- .jsproj
- .kml
- .launch
- .mdpolicy
- .mm
- .mod
- .mxml
- .nproj
- .nuspec
@@ -3531,6 +3794,7 @@ XML:
- .tmSnippet
- .tmTheme
- .ts
- .tsx
- .ui
- .urdf
- .vbproj
@@ -3549,6 +3813,7 @@ XML:
- .xliff
- .xmi
- .xml.dist
- .xproj
- .xsd
- .xul
- .zcml
@@ -3561,6 +3826,14 @@ XML:
- Web.config
- packages.config
XPages:
type: programming
extensions:
- .xsp-config
- .xsp.metadata
tm_scope: none
ace_mode: xml
XProc:
type: programming
extensions:
@@ -3597,6 +3870,7 @@ XSLT:
- .xsl
tm_scope: text.xml.xsl
ace_mode: xml
color: "#EB8CEB"
Xojo:
type: programming
@@ -3625,9 +3899,18 @@ YAML:
- .yml
- .reek
- .rviz
- .syntax
- .yaml
- .yaml-tmlanguage
ace_mode: yaml
YANG:
type: data
extensions:
- .yang
tm_scope: source.yang
ace_mode: text
Yacc:
type: programming
extensions:
@@ -3636,6 +3919,7 @@ Yacc:
- .yy
tm_scope: source.bison
ace_mode: text
color: "#4B6C4B"
Zephir:
type: programming
@@ -3675,7 +3959,6 @@ eC:
edn:
type: data
ace_mode: clojure
color: "#db5855"
extensions:
- .edn
tm_scope: source.clojure
@@ -3717,7 +4000,10 @@ reStructuredText:
extensions:
- .rst
- .rest
- .rest.txt
- .rst.txt
ace_mode: text
color: "#B3BCBC"
wisp:
type: programming
@@ -3730,7 +4016,13 @@ wisp:
xBase:
type: programming
color: "#403a40"
aliases:
- advpl
- clipper
- foxpro
extensions:
- .prg
tm_scope: none
- .ch
- .prw
tm_scope: source.harbour
ace_mode: text

View File

@@ -4,7 +4,11 @@ require 'rugged'
module Linguist
class LazyBlob
GIT_ATTR = ['linguist-documentation', 'linguist-language', 'linguist-vendored']
GIT_ATTR = ['linguist-documentation',
'linguist-language',
'linguist-vendored',
'linguist-generated']
GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true }
GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS)
@@ -31,14 +35,6 @@ module Linguist
name, GIT_ATTR, GIT_ATTR_FLAGS)
end
def vendored?
if attr = git_attributes['linguist-vendored']
return boolean_attribute(attr)
else
return super
end
end
def documentation?
if attr = git_attributes['linguist-documentation']
boolean_attribute(attr)
@@ -47,6 +43,22 @@ module Linguist
end
end
def generated?
if attr = git_attributes['linguist-generated']
boolean_attribute(attr)
else
super
end
end
def vendored?
if attr = git_attributes['linguist-vendored']
return boolean_attribute(attr)
else
super
end
end
def language
return @language if defined?(@language)
@@ -67,11 +79,15 @@ module Linguist
@size
end
def cleanup!
@data.clear if @data
end
protected
# Returns true if the attribute is present and not the string "false".
def boolean_attribute(attr)
attr != "false"
def boolean_attribute(attribute)
attribute != "false"
end
def load_blob!

View File

@@ -126,12 +126,13 @@ module Linguist
end
protected
MAX_TREE_SIZE = 100_000
def compute_stats(old_commit_oid, cache = nil)
return {} if current_tree.count_recursive(MAX_TREE_SIZE) >= MAX_TREE_SIZE
old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
read_index
diff = Rugged::Tree.diff(repository, old_tree, current_tree)
# Clear file map and fetch full diff if any .gitattributes files are changed
@@ -150,14 +151,18 @@ module Linguist
next if delta.binary
if [:added, :modified].include? delta.status
# Skip submodules
# Skip submodules and symlinks
mode = delta.new_file[:mode]
next if (mode & 040000) != 0
mode_format = (mode & 0170000)
next if mode_format == 0120000 || mode_format == 040000 || mode_format == 0160000
blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8))
next unless blob.include_in_language_stats?
file_map[new] = [blob.language.group.name, blob.size]
if blob.include_in_language_stats?
file_map[new] = [blob.language.group.name, blob.size]
end
blob.cleanup!
end
end

View File

@@ -1,8 +1,19 @@
module Linguist
module Strategy
class Modeline
EmacsModeline = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i
VimModeline = /vim:\s*set\s*(?:ft|filetype)=(\w+):/i
EMACS_MODELINE = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i
# First form vim modeline
# [text]{white}{vi:|vim:|ex:}[white]{options}
# ex: 'vim: syntax=perl'
VIM_MODELINE_1 = /(?:vim|vi|ex):\s*(?:ft|filetype|syntax)=(\w+)\s?/i
# Second form vim modeline (compatible with some versions of Vi)
# [text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
# ex: 'vim set syntax=perl:'
VIM_MODELINE_2 = /(?:vim|vi|Vim|ex):\s*se(?:t)?.*\s(?:ft|filetype|syntax)=(\w+)\s?.*:/i
MODELINES = [EMACS_MODELINE, VIM_MODELINE_1, VIM_MODELINE_2]
# Public: Detects language based on Vim and Emacs modelines
#
@@ -22,7 +33,7 @@ module Linguist
#
# Returns a String or nil
def self.modeline(data)
match = data.match(EmacsModeline) || data.match(VimModeline)
match = MODELINES.map { |regex| data.match(regex) }.reject(&:nil?).first
match[1] if match
end
end

View File

@@ -86,17 +86,17 @@ module Linguist
if s.peek(1) == "\""
s.getch
else
s.skip_until(/[^\\]"/)
s.skip_until(/(?<!\\)"/)
end
elsif s.scan(/'/)
if s.peek(1) == "'"
s.getch
else
s.skip_until(/[^\\]'/)
s.skip_until(/(?<!\\)'/)
end
# Skip number literals
elsif s.scan(/(0x)?\d(\d|\.)*/)
elsif s.scan(/(0x\h(\h|\.)*|\d(\d|\.)*)([uU][lL]{0,2}|([eE][-+]\d*)?[fFlL]*)/)
# SGML style brackets
elsif token = s.scan(/<[^\s<>][^<>]*>/)

View File

@@ -70,6 +70,7 @@
- 3rd[-_]?party/
- vendors?/
- extern(al)?/
- (^|/)[Vv]+endor/
# Debian packaging
- ^debian/
@@ -77,6 +78,9 @@
# Haxelib projects often contain a neko bytecode file named run.n
- run.n$
# Bootstrap Datepicker
- bootstrap-datepicker/
## Commonly Bundled JavaScript frameworks ##
# jQuery
@@ -87,6 +91,34 @@
- (^|/)jquery\-ui(\-\d\.\d+(\.\d+)?)?(\.\w+)?\.(js|css)$
- (^|/)jquery\.(ui|effects)\.([^.]*)\.(js|css)$
# jQuery Gantt
- jquery.fn.gantt.js
# jQuery fancyBox
- jquery.fancybox.(js|css)
# Fuel UX
- fuelux.js
# jQuery File Upload
- (^|/)jquery\.fileupload(-\w+)?\.js$
# Slick
- (^|/)slick\.\w+.js$
# Leaflet plugins
- (^|/)Leaflet\.Coordinates-\d+\.\d+\.\d+\.src\.js$
- leaflet.draw-src.js
- leaflet.draw.css
- Control.FullScreen.css
- Control.FullScreen.js
- leaflet.spin.js
- wicket-leaflet.js
# Sublime Text workspace files
- .sublime-project
- .sublime-workspace
# Prototype
- (^|/)prototype(.*)\.js$
- (^|/)effects\.js$
@@ -121,7 +153,7 @@
- (^|/)Chart\.js$
# Codemirror
- (^|/)[Cc]ode[Mm]irror/(lib|mode|theme|addon|keymap)
- (^|/)[Cc]ode[Mm]irror/(\d+\.\d+/)?(lib|mode|theme|addon|keymap|demo)
# SyntaxHighlighter - http://alexgorbatchev.com/
- (^|/)shBrush([^.]*)\.js$
@@ -163,6 +195,11 @@
## Obj-C ##
# Xcode
- \.xctemplate/
- \.imageset/
# Carthage
- ^Carthage/
@@ -172,6 +209,17 @@
# Sparkle
- (^|/)Sparkle/
# Crashlytics
- Crashlytics.framework/
# Fabric
- Fabric.framework/
# git config files
- gitattributes$
- gitignore$
- gitmodules$
## Groovy ##
# Gradle
@@ -216,21 +264,9 @@
# Html5shiv
- (^|/)html5shiv\.js$
# Samples folders
- ^[Ss]amples/
# LICENSE, README, git config files
- ^COPYING$
- LICENSE$
- License$
- gitattributes$
- gitignore$
- gitmodules$
- ^README$
- ^readme$
# Test fixtures
- ^[Tt]ests?/fixtures/
- ^[Ss]pecs?/fixtures/
# PhoneGap/Cordova
- (^|/)cordova([^.]*)\.js$

View File

@@ -1,3 +1,3 @@
module Linguist
VERSION = "4.5.6"
VERSION = "4.7.5"
end

58
samples/AMPL/CT2.mod Normal file
View File

@@ -0,0 +1,58 @@
param num_beams; # number of beams
param num_rows >= 1, integer; # number of rows
param num_cols >= 1, integer; # number of columns
set BEAMS := 1 .. num_beams; # set of beams
set ROWS := 1 .. num_rows; # set of rows
set COLUMNS := 1 .. num_cols; # set of columns
# values for entries of each beam
param beam_values {BEAMS, ROWS, COLUMNS} >= 0;
# values of tumor
param tumor_values {ROWS, COLUMNS} >= 0;
# values of critical area
param critical_values {ROWS, COLUMNS} >= 0;
# critical maximum dosage requirement
param critical_max;
# tumor minimum dosage requirement
param tumor_min;
# dosage scalar of each beam
var X {i in BEAMS} >= 0;
# define the tumor area which includes the locations where tumor exists
set tumor_area := {k in ROWS, h in COLUMNS: tumor_values[k,h] > 0};
# define critical area
set critical_area := {k in ROWS, h in COLUMNS: critical_values[k,h] > 0};
var S {(k,h) in tumor_area} >= 0;
var T {(k,h) in critical_area} >= 0;
# maximize total dosage in tumor area
maximize total_tumor_dosage: sum {i in BEAMS} sum {(k,h) in tumor_area} X[i] * beam_values[i,k,h];
# minimize total dosage in critical area
minimize total_critical_dosage: sum {i in BEAMS} sum {(k,h) in critical_area} X[i] * beam_values[i,k,h];
# minimize total tumor slack
minimize total_tumor_slack: sum {(k,h) in tumor_area} S[k,h];
# minimize total critical area slack
minimize total_critical_slack: sum {(k,h) in critical_area} T[k,h];
# total dosage at each tumor location [k,h] should be >= min tumor dosage with slack variable
subject to tumor_limit {(k,h) in tumor_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == tumor_min - S[k,h];
# total dosage at each critical location [k,h] should be = max critical dosage with slack variable
subject to critical_limit {(k,h) in critical_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == critical_max + T[k,h];

View File

@@ -0,0 +1,245 @@
push r2
dint
nop
bis #MPYDLYWRTEN,&MPY32CTL0
bic #MPYDLY32,&MPY32CTL0
mov #SUMEXT,r13
clr r12
mov @r15+,r4
mov @r15+,r5
mov @r15+,r6
mov @r15+,r7
mov @r15+,r8
mov @r15+,r9
mov @r15+,r10
mov @r15+,r11
sub #2*8,r15
/* SELF_STEP_FIRST */
mov r4,&MPY32L
mov r5,&MPY32H
mov r4,&OP2L
mov r5,&OP2H
/* COLUMN_END */
mov &RES0,2*0(r14)
mov &RES1,2*(0+1)(r14)
mov &RES2,&RES0
mov &RES3,&RES1
mov r12,&RES2
clr &RES3
/* STEP_1 */
mov r4,&MAC32L
mov r5,&MAC32H
mov r6,&OP2L
mov r7,&OP2H
add &SUMEXT,r12
mov r6,&OP2L
mov r7,&OP2H
/* COLUMN_END */
mov &RES0,2*2(r14)
add @r13,r12
mov &RES1,2*(2+1)(r14)
mov &RES2,&RES0
mov &RES3,&RES1
mov r12,&RES2
clr &RES3
clr r12
/* STEP_1 */
mov r4,&MAC32L
mov r5,&MAC32H
mov r8,&OP2L
mov r9,&OP2H
add &SUMEXT,r12
mov r8,&OP2L
mov r9,&OP2H
/* SELF_STEP */
mov r6,&MAC32L
mov r7,&MAC32H
add @r13,r12
mov r6,&OP2L
mov r7,&OP2H
/* COLUMN_END */
mov &RES0,2*4(r14)
add @r13,r12
mov &RES1,2*(4+1)(r14)
mov &RES2,&RES0
mov &RES3,&RES1
mov r12,&RES2
clr &RES3
clr r12
/* STEP_1 */
mov r4,&MAC32L
mov r5,&MAC32H
mov r10,&OP2L
mov r11,&OP2H
add &SUMEXT,r12
mov r10,&OP2L
mov r11,&OP2H
/* STEP_2MORE */
mov r6,&MAC32L
mov r7,&MAC32H
add @r13,r12
mov r8,&OP2L
mov r9,&OP2H
add &SUMEXT,r12
mov r8,&OP2L
mov r9,&OP2H
/* COLUMN_END */
mov &RES0,2*6(r14)
add @r13,r12
mov &RES1,2*(6+1)(r14)
mov &RES2,&RES0
mov &RES3,&RES1
mov r12,&RES2
clr &RES3
clr r12
/* STEP_1 */
mov r4,&MAC32L
mov r5,&MAC32H
mov 2*8(r15),&OP2L
mov 2*9(r15),&OP2H
add &SUMEXT,r12
mov 2*8(r15),&OP2L
mov 2*9(r15),&OP2H
/* STEP_2MORE */
mov r6,&MAC32L
mov r7,&MAC32H
add @r13,r12
mov r10,&OP2L
mov r11,&OP2H
add &SUMEXT,r12
mov r10,&OP2L
mov r11,&OP2H
/* SELF_STEP */
mov r8,&MAC32L
mov r9,&MAC32H
add @r13,r12
mov r8,&OP2L
mov r9,&OP2H
/* COLUMN_END */
mov &RES0,2*8(r14)
add @r13,r12
mov &RES1,2*(8+1)(r14)
mov &RES2,&RES0
mov &RES3,&RES1
mov r12,&RES2
clr &RES3
clr r12
mov 2*8(r15),r4
mov 2*(8+1)(r15),r5
/* STEP_1 */
mov r6,&MAC32L
mov r7,&MAC32H
mov r4,&OP2L
mov r5,&OP2H
add &SUMEXT,r12
mov r4,&OP2L
mov r5,&OP2H
/* STEP_2MORE */
mov r8,&MAC32L
mov r9,&MAC32H
add @r13,r12
mov r10,&OP2L
mov r11,&OP2H
add &SUMEXT,r12
mov r10,&OP2L
mov r11,&OP2H
/* COLUMN_END */
mov &RES0,2*10(r14)
add @r13,r12
mov &RES1,2*(10+1)(r14)
mov &RES2,&RES0
mov &RES3,&RES1
mov r12,&RES2
clr &RES3
clr r12
/* STEP_1 */
mov r8,&MAC32L
mov r9,&MAC32H
mov r4,&OP2L
mov r5,&OP2H
add &SUMEXT,r12
mov r4,&OP2L
mov r5,&OP2H
/* SELF_STEP */
mov r10,&MAC32L
mov r11,&MAC32H
add @r13,r12
mov r10,&OP2L
mov r11,&OP2H
/* COLUMN_END */
mov &RES0,2*12(r14)
add @r13,r12
mov &RES1,2*(12+1)(r14)
mov &RES2,&RES0
mov &RES3,&RES1
mov r12,&RES2
clr &RES3
clr r12
/* STEP_1 */
mov r10,&MAC32L
mov r11,&MAC32H
mov r4,&OP2L
mov r5,&OP2H
add &SUMEXT,r12
mov r4,&OP2L
mov r5,&OP2H
/* COLUMN_END */
mov &RES0,2*14(r14)
add @r13,r12
mov &RES1,2*(14+1)(r14)
mov &RES2,&RES0
mov &RES3,&RES1
mov r12,&RES2
clr &RES3
clr r12
/* SELF_STEP_1 */
mov r4,&MAC32L
mov r5,&MAC32H
mov r4,&OP2L
mov r5,&OP2H
/* COLUMN_END */
mov &RES0,2*16(r14)
add @r13,r12
mov &RES1,2*(16+1)(r14)
mov &RES2,&RES0
mov &RES3,&RES1
mov r12,&RES2
clr &RES3
clr r12
/* END */
mov &RES0,2*18(r14)
mov &RES1,2*(18+1)(r14)
pop r2
eint

170
samples/Assembly/lib.inc Normal file
View File

@@ -0,0 +1,170 @@
; ------------------------------------------------------------------------
; 显示 AL 中的数字
; ------------------------------------------------------------------------
DispAL:
push ecx
push edx
push edi
mov edi, [dwDispPos]
mov ah, 0Fh ; 0000b: 黑底 1111b: 白字
mov dl, al
shr al, 4
mov ecx, 2
.begin:
and al, 01111b
cmp al, 9
ja .1
add al, '0'
jmp .2
.1:
sub al, 0Ah
add al, 'A'
.2:
mov [gs:edi], ax
add edi, 2
mov al, dl
loop .begin
;add edi, 2
mov [dwDispPos], edi
pop edi
pop edx
pop ecx
ret
; DispAL 结束-------------------------------------------------------------
; ------------------------------------------------------------------------
; 显示一个整形数
; ------------------------------------------------------------------------
DispInt:
mov eax, [esp + 4]
shr eax, 24
call DispAL
mov eax, [esp + 4]
shr eax, 16
call DispAL
mov eax, [esp + 4]
shr eax, 8
call DispAL
mov eax, [esp + 4]
call DispAL
mov ah, 07h ; 0000b: 黑底 0111b: 灰字
mov al, 'h'
push edi
mov edi, [dwDispPos]
mov [gs:edi], ax
add edi, 4
mov [dwDispPos], edi
pop edi
ret
; DispInt 结束------------------------------------------------------------
; ------------------------------------------------------------------------
; 显示一个字符串
; ------------------------------------------------------------------------
DispStr:
push ebp
mov ebp, esp
push ebx
push esi
push edi
mov esi, [ebp + 8] ; pszInfo
mov edi, [dwDispPos]
mov ah, 0Fh
.1:
lodsb
test al, al
jz .2
cmp al, 0Ah ; 是回车吗?
jnz .3
push eax
mov eax, edi
mov bl, 160
div bl
and eax, 0FFh
inc eax
mov bl, 160
mul bl
mov edi, eax
pop eax
jmp .1
.3:
mov [gs:edi], ax
add edi, 2
jmp .1
.2:
mov [dwDispPos], edi
pop edi
pop esi
pop ebx
pop ebp
ret
; DispStr 结束------------------------------------------------------------
; ------------------------------------------------------------------------
; 换行
; ------------------------------------------------------------------------
DispReturn:
push szReturn
call DispStr ;printf("\n");
add esp, 4
ret
; DispReturn 结束---------------------------------------------------------
; ------------------------------------------------------------------------
; 内存拷贝,仿 memcpy
; ------------------------------------------------------------------------
; void* MemCpy(void* es:pDest, void* ds:pSrc, int iSize);
; ------------------------------------------------------------------------
MemCpy:
push ebp
mov ebp, esp
push esi
push edi
push ecx
mov edi, [ebp + 8] ; Destination
mov esi, [ebp + 12] ; Source
mov ecx, [ebp + 16] ; Counter
.1:
cmp ecx, 0 ; 判断计数器
jz .2 ; 计数器为零时跳出
mov al, [ds:esi] ;
inc esi ;
; 逐字节移动
mov byte [es:edi], al ;
inc edi ;
dec ecx ; 计数器减一
jmp .1 ; 循环
.2:
mov eax, [ebp + 8] ; 返回值
pop ecx
pop edi
pop esi
mov esp, ebp
pop ebp
ret ; 函数结束,返回
; MemCpy 结束-------------------------------------------------------------

321
samples/Assembly/macros.inc Normal file
View File

@@ -0,0 +1,321 @@
BLARGG_MACROS_INCLUDED = 1
; Allows extra error checking with modified version
; of ca65. Otherwise acts like a constant of 0.
ADDR = 0
; Switches to Segment and places Line there.
; Line can be an .align directive, .res, .byte, etc.
; Examples:
; seg_data BSS, .align 256
; seg_data RODATA, {message: .byte "Test",0}
.macro seg_data Segment, Line
.pushseg
.segment .string(Segment)
Line
.popseg
.endmacro
; Reserves Size bytes in Segment for Name.
; If Size is omitted, reserves one byte.
.macro seg_res Segment, Name, Size
.ifblank Size
seg_data Segment, Name: .res 1
.else
seg_data Segment, Name: .res Size
.endif
.endmacro
; Shortcuts for zeropage, bss, and stack
.define zp_res seg_res ZEROPAGE,
.define nv_res seg_res NVRAM,
.define bss_res seg_res BSS,
.define sp_res seg_res STACK,
.define zp_byte zp_res
; Copies byte from Src to Addr. If Src begins with #,
; it sets Addr to the immediate value.
; Out: A = byte copied
; Preserved: X, Y
.macro mov Addr, Src
lda Src
sta Addr
.endmacro
; Copies word from Src to Addr. If Src begins with #,
; it sets Addr the immediate value.
; Out: A = high byte of word
; Preserved: X, Y
.macro movw Addr, Src
.if .match( .left( 1, {Src} ), # )
lda #<(.right( .tcount( {Src} )-1, {Src} ))
sta Addr
lda #>(.right( .tcount( {Src} )-1, {Src} ))
sta 1+(Addr)
.else
lda Src
sta Addr
lda 1+(Src)
sta 1+(Addr)
.endif
.endmacro
; Increments 16-bit value at Addr.
; Out: EQ/NE based on resulting 16-bit value
; Preserved: A, X, Y
.macro incw Addr
.local @Skip
inc Addr
bne @Skip
inc 1+(Addr)
@Skip:
.endmacro
; Adds Src to word at Addr.
; Out: A = high byte of result, carry set appropriately
; Preserved: X, Y
.macro addw Addr, Src
.if .match( .left( 1, {Src} ), # )
addw_ Addr,(.right( .tcount( {Src} )-1, {Src} ))
.else
lda Addr
clc
adc Src
sta Addr
lda 1+(Addr)
adc 1+(Src)
sta 1+(Addr)
.endif
.endmacro
.macro addw_ Addr, Imm
lda Addr
clc
adc #<Imm
sta Addr
;.if (Imm >> 8) <> 0
lda 1+(Addr)
adc #>Imm
sta 1+(Addr)
;.else
; .local @Skip
; bcc @Skip
; inc 1+(Addr)
;@Skip:
;.endif
.endmacro
; Splits list of words into tables of low and high bytes
; Example: split_words foo, {$1234, $5678}
; expands to:
; foo_l: $34, $78
; foo_h: $12, $56
; foo_count = 2
.macro split_words Label, Words
.ident (.concat (.string(Label), "_l")): .lobytes Words
.ident (.concat (.string(Label), "_h")): .hibytes Words
.ident (.concat (.string(Label), "_count")) = * - .ident (.concat (.string(Label), "_h"))
.endmacro
.macro SELECT Bool, True, False, Extra
.ifndef Bool
False Extra
.elseif Bool <> 0
True Extra
.else
False Extra
.endif
.endmacro
.macro DEFAULT Name, Value
.ifndef Name
Name = Value
.endif
.endmacro
.ifp02
; 6502 doesn't define these alternate names
.define blt bcc
.define bge bcs
.endif
.define jlt jcc
.define jge jcs
; Jxx Target = Bxx Target, except it can go farther than
; 128 bytes. Implemented via branch around a JMP.
; Don't use ca65's longbranch, because they fail for @labels
;.macpack longbranch
.macro jeq Target
bne *+5
jmp Target
.endmacro
.macro jne Target
beq *+5
jmp Target
.endmacro
.macro jmi Target
bpl *+5
jmp Target
.endmacro
.macro jpl Target
bmi *+5
jmp Target
.endmacro
.macro jcs Target
bcc *+5
jmp Target
.endmacro
.macro jcc Target
bcs *+5
jmp Target
.endmacro
.macro jvs Target
bvc *+5
jmp Target
.endmacro
.macro jvc Target
bvs *+5
jmp Target
.endmacro
; Passes constant data to routine in addr
; Preserved: A, X, Y
.macro jsr_with_addr routine,data
.local Addr
pha
lda #<Addr
sta addr
lda #>Addr
sta addr+1
pla
jsr routine
seg_data RODATA,{Addr: data}
.endmacro
; Calls routine multiple times, with A having the
; value 'start' the first time, 'start+step' the
; second time, up to 'end' for the last time.
.macro for_loop routine,start,end,step
.local @for_loop
lda #start
@for_loop:
pha
jsr routine
pla
clc
adc #step
cmp #<((end)+(step))
bne @for_loop
.endmacro
; Calls routine n times. The value of A in the routine
; counts from 0 to n-1.
.macro loop_n_times routine,n
for_loop routine,0,n-1,+1
.endmacro
; Same as for_loop, except uses 16-bit value in YX.
; -256 <= step <= 255
.macro for_loop16 routine,start,end,step
.if (step) < -256 || (step) > 255
.error "Step must be within -256 to 255"
.endif
.local @for_loop_skip
.local @for_loop
ldy #>(start)
lda #<(start)
@for_loop:
tax
pha
tya
pha
jsr routine
pla
tay
pla
clc
adc #step
.if (step) > 0
bcc @for_loop_skip
iny
.else
bcs @for_loop_skip
dey
.endif
@for_loop_skip:
cmp #<((end)+(step))
bne @for_loop
cpy #>((end)+(step))
bne @for_loop
.endmacro
; Stores byte at addr
; Preserved: X, Y
.macro setb addr, byte
lda #byte
sta addr
.endmacro
; Stores word at addr
; Preserved: X, Y
.macro setw addr, word
lda #<(word)
sta addr
lda #>(word)
sta addr+1
.endmacro
; Loads XY with 16-bit immediate or value at address
.macro ldxy Arg
.if .match( .left( 1, {Arg} ), # )
ldy #<(.right( .tcount( {Arg} )-1, {Arg} ))
ldx #>(.right( .tcount( {Arg} )-1, {Arg} ))
.else
ldy (Arg)
ldx (Arg)+1
.endif
.endmacro
; Increments XY as 16-bit register, in CONSTANT time.
; Z flag set based on entire result.
; Preserved: A
; Time: 7 clocks
.macro inxy
iny ; 2
beq *+4 ; 3
; -1
bne *+3 ; 3
; -1
inx ; 2
.endmacro
; Negates A and adds it to operand
.macro subaf Operand
eor #$FF
sec
adc Operand
.endmacro
; Initializes CPU registers to reasonable values
; Preserved: A, Y
.macro init_cpu_regs
sei
cld ; unnecessary on NES, but might help on clone
ldx #$FF
txs
.ifndef BUILD_NSF
inx
stx PPUCTRL
.endif
.endmacro

86
samples/C#/build.cake Normal file
View File

@@ -0,0 +1,86 @@
///////////////////////////////////////////////////////////////////////////////
// ARGUMENTS
///////////////////////////////////////////////////////////////////////////////
var target = Argument<string>("target", "Default");
var configuration = Argument<string>("configuration", "Release");
///////////////////////////////////////////////////////////////////////////////
// GLOBAL VARIABLES
///////////////////////////////////////////////////////////////////////////////
var solutions = GetFiles("./**/*.sln");
var solutionPaths = solutions.Select(solution => solution.GetDirectory());
///////////////////////////////////////////////////////////////////////////////
// SETUP / TEARDOWN
///////////////////////////////////////////////////////////////////////////////
Setup(() =>
{
// Executed BEFORE the first task.
Information("Running tasks...");
});
Teardown(() =>
{
// Executed AFTER the last task.
Information("Finished running tasks.");
});
///////////////////////////////////////////////////////////////////////////////
// TASK DEFINITIONS
///////////////////////////////////////////////////////////////////////////////
Task("Clean")
.Does(() =>
{
// Clean solution directories.
foreach(var path in solutionPaths)
{
Information("Cleaning {0}", path);
CleanDirectories(path + "/**/bin/" + configuration);
CleanDirectories(path + "/**/obj/" + configuration);
}
});
Task("Restore")
.Does(() =>
{
// Restore all NuGet packages.
foreach(var solution in solutions)
{
Information("Restoring {0}...", solution);
NuGetRestore(solution);
}
});
Task("Build")
.IsDependentOn("Clean")
.IsDependentOn("Restore")
.Does(() =>
{
// Build all solutions.
foreach(var solution in solutions)
{
Information("Building {0}", solution);
MSBuild(solution, settings =>
settings.SetPlatformTarget(PlatformTarget.MSIL)
.WithProperty("TreatWarningsAsErrors","true")
.WithTarget("Build")
.SetConfiguration(configuration));
}
});
///////////////////////////////////////////////////////////////////////////////
// TARGETS
///////////////////////////////////////////////////////////////////////////////
Task("Default")
.IsDependentOn("Build");
///////////////////////////////////////////////////////////////////////////////
// EXECUTION
///////////////////////////////////////////////////////////////////////////////
RunTarget(target);

View File

@@ -0,0 +1,57 @@
//===- ClasspathVMSystem/Properties.cpp -----------------------------------===//
//===--------------------- GNU classpath gnu/classpath/VMSystemProperties -===//
//
// The VMKit project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <sys/utsname.h>
#include "types.h"
#include "Classpath.h"
#include "JavaArray.h"
#include "JavaClass.h"
#include "JavaObject.h"
#include "JavaThread.h"
#include "JavaUpcalls.h"
#include "Jnjvm.h"
#include "SetProperties.inc"
using namespace j3;
extern "C" {
JNIEXPORT void JNICALL Java_gnu_classpath_VMSystemProperties_preInit(
#ifdef NATIVE_JNI
JNIEnv *env,
jclass clazz,
#endif
JavaObject* prop) {
llvm_gcroot(prop, 0);
BEGIN_NATIVE_EXCEPTION(0)
setProperties(prop);
END_NATIVE_EXCEPTION
}
extern "C" void Java_gnu_classpath_VMSystemProperties_postInit__Ljava_util_Properties_2(JavaObject* prop) {
llvm_gcroot(prop, 0);
BEGIN_NATIVE_EXCEPTION(0)
setCommandLineProperties(prop);
END_NATIVE_EXCEPTION
}
}

2764
samples/C++/initClasses.inc Normal file

File diff suppressed because it is too large Load Diff

34
samples/C++/instances.inc Normal file
View File

@@ -0,0 +1,34 @@
#include "QPBO.h"
#ifdef _MSC_VER
#pragma warning(disable: 4661)
#endif
// Instantiations
template class QPBO<int>;
template class QPBO<float>;
template class QPBO<double>;
template <>
inline void QPBO<int>::get_type_information(char*& type_name, char*& type_format)
{
type_name = "int";
type_format = "d";
}
template <>
inline void QPBO<float>::get_type_information(char*& type_name, char*& type_format)
{
type_name = "float";
type_format = "f";
}
template <>
inline void QPBO<double>::get_type_information(char*& type_name, char*& type_format)
{
type_name = "double";
type_format = "Lf";
}

View File

@@ -0,0 +1,6 @@
%
% Some very badly written Charity
%
data LA(A) -> D = ss: A -> D
| ff: -> D.

133
samples/Click/sr2.click Normal file
View File

@@ -0,0 +1,133 @@
rates :: AvailableRates
elementclass sr2 {
$sr2_ip, $sr2_nm, $wireless_mac, $gateway, $probes|
arp :: ARPTable();
lt :: LinkTable(IP $sr2_ip);
gw :: SR2GatewaySelector(ETHTYPE 0x062c,
IP $sr2_ip,
ETH $wireless_mac,
LT lt,
ARP arp,
PERIOD 15,
GW $gateway);
gw -> SR2SetChecksum -> [0] output;
set_gw :: SR2SetGateway(SEL gw);
es :: SR2ETTStat(ETHTYPE 0x0641,
ETH $wireless_mac,
IP $sr2_ip,
PERIOD 30000,
TAU 300000,
ARP arp,
PROBES $probes,
ETT metric,
RT rates);
metric :: SR2ETTMetric(LT lt);
forwarder :: SR2Forwarder(ETHTYPE 0x0643,
IP $sr2_ip,
ETH $wireless_mac,
ARP arp,
LT lt);
querier :: SR2Querier(ETH $wireless_mac,
SR forwarder,
LT lt,
ROUTE_DAMPENING true,
TIME_BEFORE_SWITCH 5,
DEBUG true);
query_forwarder :: SR2MetricFlood(ETHTYPE 0x0644,
IP $sr2_ip,
ETH $wireless_mac,
LT lt,
ARP arp,
DEBUG false);
query_responder :: SR2QueryResponder(ETHTYPE 0x0645,
IP $sr2_ip,
ETH $wireless_mac,
LT lt,
ARP arp,
DEBUG true);
query_responder -> SR2SetChecksum -> [0] output;
query_forwarder -> SR2SetChecksum -> SR2Print(forwarding) -> [0] output;
query_forwarder [1] -> query_responder;
data_ck :: SR2SetChecksum()
input [1]
-> host_cl :: IPClassifier(dst net $sr2_ip mask $sr2_nm,
-)
-> querier
-> data_ck;
host_cl [1] -> [0] set_gw [0] -> querier;
forwarder[0]
-> dt ::DecIPTTL
-> data_ck
-> [2] output;
dt[1]
-> Print(ttl-error)
-> ICMPError($sr2_ip, timeexceeded, 0)
-> querier;
// queries
querier [1] -> [1] query_forwarder;
es -> SetTimestamp() -> [1] output;
forwarder[1] //ip packets to me
-> SR2StripHeader()
-> CheckIPHeader()
-> from_gw_cl :: IPClassifier(src net $sr2_ip mask $sr2_nm,
-)
-> [3] output;
from_gw_cl [1] -> [1] set_gw [1] -> [3] output;
input [0]
-> ncl :: Classifier(
12/0643 , //sr2_forwarder
12/0644 , //sr2
12/0645 , //replies
12/0641 , //sr2_es
12/062c , //sr2_gw
);
ncl[0] -> SR2CheckHeader() -> [0] forwarder;
ncl[1] -> SR2CheckHeader() -> PrintSR(query) -> query_forwarder
ncl[2] -> SR2CheckHeader() -> query_responder;
ncl[3] -> es;
ncl[4] -> SR2CheckHeader() -> gw;
}
Idle -> s :: sr2(2.0.0.1, 255.0.0.0, 00:00:00:00:00:01, false, "12 60 12 1500") -> Discard;
Idle -> [1] s;
s[1] -> Discard;
s[2] -> Discard;
s[3] -> Discard;

View File

@@ -0,0 +1,142 @@
// This Click configuration implements a firewall and NAT, roughly based on the
// mazu-nat.click example.
//
// This example assumes there is one interface that is IP-aliased. In this
// example, eth0 and eth0:0 have IP addresses 66.68.65.90 and 192.168.1.1,
// respectively. There is a local network, 192.168.1.0/24, and an upstream
// gateway, 66.58.65.89. Traffic from the local network is NATed.
//
// Connections can be initiated from the NAT box itself, also.
//
// For bugs, suggestions, and, corrections, please email me.
//
// Author: Thomer M. Gil (click@thomer.com)
AddressInfo(
eth0-in 192.168.1.1 192.168.1.0/24 00:0d:87:9d:1c:e9,
eth0-ex 66.58.65.90 00:0d:87:9d:1c:e9,
gw-addr 66.58.65.89 00:20:6f:14:54:c2
);
elementclass SniffGatewayDevice {
$device |
from :: FromDevice($device)
-> t1 :: Tee
-> output;
input -> q :: Queue(1024)
-> t2 :: PullTee
-> to :: ToDevice($device);
t1[1] -> ToHostSniffers;
t2[1] -> ToHostSniffers($device);
ScheduleInfo(from .1, to 1);
}
device :: SniffGatewayDevice(eth0);
arpq_in :: ARPQuerier(eth0-in) -> device;
ip_to_extern :: GetIPAddress(16)
-> CheckIPHeader
-> EtherEncap(0x800, eth0-ex, gw-addr)
-> device;
ip_to_host :: EtherEncap(0x800, gw-addr, eth0-ex)
-> ToHost;
ip_to_intern :: GetIPAddress(16)
-> CheckIPHeader
-> arpq_in;
arp_class :: Classifier(
12/0806 20/0001, // [0] ARP requests
12/0806 20/0002, // [1] ARP replies to host
12/0800); // [2] IP packets
device -> arp_class;
// ARP crap
arp_class[0] -> ARPResponder(eth0-in, eth0-ex) -> device;
arp_class[1] -> arp_t :: Tee;
arp_t[0] -> ToHost;
arp_t[1] -> [1]arpq_in;
// IP packets
arp_class[2] -> Strip(14)
-> CheckIPHeader
-> ipclass :: IPClassifier(dst host eth0-ex,
dst host eth0-in,
src net eth0-in);
// Define pattern NAT
iprw :: IPRewriterPatterns(NAT eth0-ex 50000-65535 - -);
// Rewriting rules for UDP/TCP packets
// output[0] rewritten to go into the wild
// output[1] rewritten to come back from the wild or no match
rw :: IPRewriter(pattern NAT 0 1,
pass 1);
// Rewriting rules for ICMP packets
irw :: ICMPPingRewriter(eth0-ex, -);
irw[0] -> ip_to_extern;
irw[1] -> icmp_me_or_intern :: IPClassifier(dst host eth0-ex, -);
icmp_me_or_intern[0] -> ip_to_host;
icmp_me_or_intern[1] -> ip_to_intern;
// Rewriting rules for ICMP error packets
ierw :: ICMPRewriter(rw irw);
ierw[0] -> icmp_me_or_intern;
ierw[1] -> icmp_me_or_intern;
// Packets directed at eth0-ex.
// Send it through IPRewriter(pass). If there was a mapping, it will be
// rewritten such that dst is eth0-in:net, otherwise dst will still be for
// eth0-ex.
ipclass[0] -> [1]rw;
// packets that were rewritten, heading into the wild world.
rw[0] -> ip_to_extern;
// packets that come back from the wild or are not part of an established
// connection.
rw[1] -> established_class :: IPClassifier(dst host eth0-ex,
dst net eth0-in);
// not established yet or returning packets for a connection that was
// established from this host itself.
established_class[0] ->
firewall :: IPClassifier(dst tcp port ssh,
dst tcp port smtp,
dst tcp port domain,
dst udp port domain,
icmp type echo-reply,
proto icmp,
port > 4095,
-);
firewall[0] -> ip_to_host; // ssh
firewall[1] -> ip_to_host; // smtp
firewall[2] -> ip_to_host; // domain (t)
firewall[3] -> ip_to_host; // domain (u)
firewall[4] -> [0]irw; // icmp reply
firewall[5] -> [0]ierw; // other icmp
firewall[6] -> ip_to_host; // port > 4095, probably for connection
// originating from host itself
firewall[7] -> Discard; // don't allow incoming for port <= 4095
// established connection
established_class[1] -> ip_to_intern;
// To eth0-in. Only accept from inside network.
ipclass[1] -> IPClassifier(src net eth0-in) -> ip_to_host;
// Packets from eth0-in:net either stay on local network or go to the wild.
// Those that go into the wild need to go through the appropriate rewriting
// element. (Either UDP/TCP rewriter or ICMP rewriter.)
ipclass[2] -> inter_class :: IPClassifier(dst net eth0-in, -);
inter_class[0] -> ip_to_intern;
inter_class[1] -> ip_udp_class :: IPClassifier(tcp or udp,
icmp type echo);
ip_udp_class[0] -> [0]rw;
ip_udp_class[1] -> [0]irw;

View File

@@ -0,0 +1,17 @@
fs = require 'fs'
{print} = require 'sys'
{spawn} = require 'child_process'
build = (callback) ->
coffee = spawn 'coffee', ['-c', '-o', '.', '.']
coffee.stderr.on 'data', (data) ->
process.stderr.write data.toString()
coffee.stdout.on 'data', (data) ->
print data.toString()
coffee.on 'exit', (code) ->
callback?() if code is 0
task 'build', 'Build from source', ->
build()

View File

@@ -0,0 +1,2 @@
((exe_name hello)
(link_order (world hello)))

View File

@@ -0,0 +1,103 @@
(:TURTLE
(:@PREFIX "rdf:" "<http://www.w3.org/1999/02/22-rdf-syntax-ns#>")
(:@PREFIX "owl:" "<http://www.w3.org/2002/07/owl#>")
(:@PREFIX "dc:" "<http://purl.org/dc/elements/1.1/>")
(:@PREFIX "xsd:" "<http://www.w3.org/2001/XMLSchema#>")
(:@PREFIX "rdfs:" "<http://www.w3.org/2000/01/rdf-schema#>")
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/channel>")
(:PREDICATE-OBJECT-LIST
(:URIREF #1="<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>")
(:OBJECTS
(:QNAME "rdfs:Class")))
(:PREDICATE-OBJECT-LIST
(:QNAME "rdfs:comment")
(:OBJECTS
(:STRING "An RSS information channel.")))
(:PREDICATE-OBJECT-LIST
(:QNAME "rdfs:isDefinedBy")
(:OBJECTS
(:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST
(:QNAME "rdfs:label")
(:OBJECTS
(:STRING "Channel"))))
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/description>")
(:PREDICATE-OBJECT-LIST
(:URIREF #1#)
(:OBJECTS
(:QNAME "rdf:Property")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
(:OBJECTS (:STRING "A short text description of the subject.")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Description")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:description"))))
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/image>")
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS image.")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Image"))))
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/item>")
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS item.")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Item"))))
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/items>")
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
(:OBJECTS
(:STRING "Points to a list of rss:item elements that are members of the subject channel.")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Items"))))
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/link>")
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
(:OBJECTS (:STRING "The URL to which an HTML rendering of the subject will link.")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Link")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier"))))
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/name>")
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
(:OBJECTS (:STRING "The text input field's (variable) name.")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Name"))))
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/textinput>")
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS text input.")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Text Input"))))
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/title>")
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
(:OBJECTS (:STRING "A descriptive title for the channel.")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Title")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:title"))))
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/url>")
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
(:OBJECTS
(:STRING
"The URL of the image to used in the 'src' attribute of the channel's image tag when rendered as HTML.")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "URL")))
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier")))))

View File

@@ -0,0 +1,13 @@
$ORIGIN 0.0.0.c.2.1.0.3.0.0.2.1.e.f.f.3.ip6.arpa.
$TTL 60
@ IN SOA ns root (
2002042901 ; SERIAL
7200 ; REFRESH
600 ; RETRY
36000000 ; EXPIRE
120 ; MINIMUM
)
NS ns.example.com.
c.a.7.e.d.7.e.f.f.f.0.2.8.0.a.0 PTR sip01.example.com.

View File

@@ -0,0 +1,12 @@
$TTL 3d
@ IN SOA root.localhost. root.sneaky.net. (
2015042907 ; serial
3d ; refresh
1h ; retry
12d ; expire
2h ; negative response TTL
)
IN NS root.localhost.
IN NS localhost. ; secondary name server is preferably externally maintained
www IN A 3.141.59.26

View File

@@ -0,0 +1,856 @@
Nonterminals
grammar expr_list
expr container_expr block_expr access_expr
no_parens_expr no_parens_zero_expr no_parens_one_expr no_parens_one_ambig_expr
bracket_expr bracket_at_expr bracket_arg matched_expr unmatched_expr max_expr
unmatched_op_expr matched_op_expr no_parens_op_expr no_parens_many_expr
comp_op_eol at_op_eol unary_op_eol and_op_eol or_op_eol capture_op_eol
add_op_eol mult_op_eol two_op_eol three_op_eol pipe_op_eol stab_op_eol
arrow_op_eol match_op_eol when_op_eol in_op_eol in_match_op_eol
type_op_eol rel_op_eol
open_paren close_paren empty_paren eoe
list list_args open_bracket close_bracket
tuple open_curly close_curly
bit_string open_bit close_bit
map map_op map_close map_args map_expr struct_op
assoc_op_eol assoc_expr assoc_base assoc_update assoc_update_kw assoc
container_args_base container_args
call_args_parens_expr call_args_parens_base call_args_parens parens_call
call_args_no_parens_one call_args_no_parens_ambig call_args_no_parens_expr
call_args_no_parens_comma_expr call_args_no_parens_all call_args_no_parens_many
call_args_no_parens_many_strict
stab stab_eoe stab_expr stab_op_eol_and_expr stab_parens_many
kw_eol kw_base kw call_args_no_parens_kw_expr call_args_no_parens_kw
dot_op dot_alias dot_alias_container
dot_identifier dot_op_identifier dot_do_identifier
dot_paren_identifier dot_bracket_identifier
do_block fn_eoe do_eoe end_eoe block_eoe block_item block_list
.
Terminals
identifier kw_identifier kw_identifier_safe kw_identifier_unsafe bracket_identifier
paren_identifier do_identifier block_identifier
fn 'end' aliases
number atom atom_safe atom_unsafe bin_string list_string sigil
dot_call_op op_identifier
comp_op at_op unary_op and_op or_op arrow_op match_op in_op in_match_op
type_op dual_op add_op mult_op two_op three_op pipe_op stab_op when_op assoc_op
capture_op rel_op
'true' 'false' 'nil' 'do' eol ';' ',' '.'
'(' ')' '[' ']' '{' '}' '<<' '>>' '%{}' '%'
.
Rootsymbol grammar.
%% Two shift/reduce conflicts coming from call_args_parens.
Expect 2.
%% Changes in ops and precedence should be reflected on lib/elixir/lib/macro.ex
%% Note though the operator => in practice has lower precedence than all others,
%% its entry in the table is only to support the %{user | foo => bar} syntax.
Left 5 do.
Right 10 stab_op_eol. %% ->
Left 20 ','.
Nonassoc 30 capture_op_eol. %% &
Left 40 in_match_op_eol. %% <-, \\ (allowed in matches along =)
Right 50 when_op_eol. %% when
Right 60 type_op_eol. %% ::
Right 70 pipe_op_eol. %% |
Right 80 assoc_op_eol. %% =>
Right 90 match_op_eol. %% =
Left 130 or_op_eol. %% ||, |||, or
Left 140 and_op_eol. %% &&, &&&, and
Left 150 comp_op_eol. %% ==, !=, =~, ===, !==
Left 160 rel_op_eol. %% <, >, <=, >=
Left 170 arrow_op_eol. %% |>, <<<, >>>, ~>>, <<~, ~>, <~, <~>, <|>
Left 180 in_op_eol. %% in
Left 190 three_op_eol. %% ^^^
Right 200 two_op_eol. %% ++, --, .., <>
Left 210 add_op_eol. %% +, -
Left 220 mult_op_eol. %% *, /
Nonassoc 300 unary_op_eol. %% +, -, !, ^, not, ~~~
Left 310 dot_call_op.
Left 310 dot_op. %% .
Nonassoc 320 at_op_eol. %% @
Nonassoc 330 dot_identifier.
%%% MAIN FLOW OF EXPRESSIONS
grammar -> eoe : nil.
grammar -> expr_list : to_block('$1').
grammar -> eoe expr_list : to_block('$2').
grammar -> expr_list eoe : to_block('$1').
grammar -> eoe expr_list eoe : to_block('$2').
grammar -> '$empty' : nil.
% Note expressions are on reverse order
expr_list -> expr : ['$1'].
expr_list -> expr_list eoe expr : ['$3'|'$1'].
expr -> matched_expr : '$1'.
expr -> no_parens_expr : '$1'.
expr -> unmatched_expr : '$1'.
%% In Elixir we have three main call syntaxes: with parentheses,
%% without parentheses and with do blocks. They are represented
%% in the AST as matched, no_parens and unmatched.
%%
%% Calls without parentheses are further divided according to how
%% problematic they are:
%%
%% (a) no_parens_one: a call with one unproblematic argument
%% (e.g. `f a` or `f g a` and similar) (includes unary operators)
%%
%% (b) no_parens_many: a call with several arguments (e.g. `f a, b`)
%%
%% (c) no_parens_one_ambig: a call with one argument which is
%% itself a no_parens_many or no_parens_one_ambig (e.g. `f g a, b`
%% or `f g h a, b` and similar)
%%
%% Note, in particular, that no_parens_one_ambig expressions are
%% ambiguous and are interpreted such that the outer function has
%% arity 1 (e.g. `f g a, b` is interpreted as `f(g(a, b))` rather
%% than `f(g(a), b)`). Hence the name, no_parens_one_ambig.
%%
%% The distinction is required because we can't, for example, have
%% a function call with a do block as argument inside another do
%% block call, unless there are parentheses:
%%
%% if if true do true else false end do #=> invalid
%% if(if true do true else false end) do #=> valid
%%
%% Similarly, it is not possible to nest calls without parentheses
%% if their arity is more than 1:
%%
%% foo a, bar b, c #=> invalid
%% foo(a, bar b, c) #=> invalid
%% foo bar a, b #=> valid
%% foo a, bar(b, c) #=> valid
%%
%% So the different grammar rules need to take into account
%% if calls without parentheses are do blocks in particular
%% segments and act accordingly.
matched_expr -> matched_expr matched_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')).
matched_expr -> unary_op_eol matched_expr : build_unary_op('$1', '$2').
matched_expr -> at_op_eol matched_expr : build_unary_op('$1', '$2').
matched_expr -> capture_op_eol matched_expr : build_unary_op('$1', '$2').
matched_expr -> no_parens_one_expr : '$1'.
matched_expr -> no_parens_zero_expr : '$1'.
matched_expr -> access_expr : '$1'.
matched_expr -> access_expr kw_identifier : throw_invalid_kw_identifier('$2').
unmatched_expr -> matched_expr unmatched_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')).
unmatched_expr -> unmatched_expr matched_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')).
unmatched_expr -> unmatched_expr unmatched_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')).
unmatched_expr -> unmatched_expr no_parens_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')).
unmatched_expr -> unary_op_eol expr : build_unary_op('$1', '$2').
unmatched_expr -> at_op_eol expr : build_unary_op('$1', '$2').
unmatched_expr -> capture_op_eol expr : build_unary_op('$1', '$2').
unmatched_expr -> block_expr : '$1'.
no_parens_expr -> matched_expr no_parens_op_expr : build_op(element(1, '$2'), '$1', element(2, '$2')).
no_parens_expr -> unary_op_eol no_parens_expr : build_unary_op('$1', '$2').
no_parens_expr -> at_op_eol no_parens_expr : build_unary_op('$1', '$2').
no_parens_expr -> capture_op_eol no_parens_expr : build_unary_op('$1', '$2').
no_parens_expr -> no_parens_one_ambig_expr : '$1'.
no_parens_expr -> no_parens_many_expr : '$1'.
block_expr -> parens_call call_args_parens do_block : build_identifier('$1', '$2' ++ '$3').
block_expr -> parens_call call_args_parens call_args_parens do_block : build_nested_parens('$1', '$2', '$3' ++ '$4').
block_expr -> dot_do_identifier do_block : build_identifier('$1', '$2').
block_expr -> dot_identifier call_args_no_parens_all do_block : build_identifier('$1', '$2' ++ '$3').
matched_op_expr -> match_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> add_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> mult_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> two_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> three_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> and_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> or_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> in_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> in_match_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> type_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> when_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> pipe_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> comp_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> rel_op_eol matched_expr : {'$1', '$2'}.
matched_op_expr -> arrow_op_eol matched_expr : {'$1', '$2'}.
%% Warn for no parens subset
matched_op_expr -> arrow_op_eol no_parens_one_expr : warn_pipe('$1', '$2'), {'$1', '$2'}.
unmatched_op_expr -> match_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> add_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> mult_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> two_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> three_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> and_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> or_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> in_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> in_match_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> type_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> when_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> pipe_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> comp_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> rel_op_eol unmatched_expr : {'$1', '$2'}.
unmatched_op_expr -> arrow_op_eol unmatched_expr : {'$1', '$2'}.
no_parens_op_expr -> match_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> add_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> mult_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> two_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> three_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> and_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> or_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> in_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> in_match_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> type_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> when_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> pipe_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> comp_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> rel_op_eol no_parens_expr : {'$1', '$2'}.
no_parens_op_expr -> arrow_op_eol no_parens_expr : {'$1', '$2'}.
%% Warn for no parens subset
no_parens_op_expr -> arrow_op_eol no_parens_one_ambig_expr : warn_pipe('$1', '$2'), {'$1', '$2'}.
no_parens_op_expr -> arrow_op_eol no_parens_many_expr : warn_pipe('$1', '$2'), {'$1', '$2'}.
%% Allow when (and only when) with keywords
no_parens_op_expr -> when_op_eol call_args_no_parens_kw : {'$1', '$2'}.
no_parens_one_ambig_expr -> dot_op_identifier call_args_no_parens_ambig : build_identifier('$1', '$2').
no_parens_one_ambig_expr -> dot_identifier call_args_no_parens_ambig : build_identifier('$1', '$2').
no_parens_many_expr -> dot_op_identifier call_args_no_parens_many_strict : build_identifier('$1', '$2').
no_parens_many_expr -> dot_identifier call_args_no_parens_many_strict : build_identifier('$1', '$2').
no_parens_one_expr -> dot_op_identifier call_args_no_parens_one : build_identifier('$1', '$2').
no_parens_one_expr -> dot_identifier call_args_no_parens_one : build_identifier('$1', '$2').
no_parens_zero_expr -> dot_do_identifier : build_identifier('$1', nil).
no_parens_zero_expr -> dot_identifier : build_identifier('$1', nil).
%% From this point on, we just have constructs that can be
%% used with the access syntax. Notice that (dot_)identifier
%% is not included in this list simply because the tokenizer
%% marks identifiers followed by brackets as bracket_identifier.
access_expr -> bracket_at_expr : '$1'.
access_expr -> bracket_expr : '$1'.
access_expr -> at_op_eol number : build_unary_op('$1', ?exprs('$2')).
access_expr -> unary_op_eol number : build_unary_op('$1', ?exprs('$2')).
access_expr -> capture_op_eol number : build_unary_op('$1', ?exprs('$2')).
access_expr -> fn_eoe stab end_eoe : build_fn('$1', reverse('$2')).
access_expr -> open_paren stab close_paren : build_stab(reverse('$2')).
access_expr -> open_paren stab ';' close_paren : build_stab(reverse('$2')).
access_expr -> open_paren ';' stab ';' close_paren : build_stab(reverse('$3')).
access_expr -> open_paren ';' stab close_paren : build_stab(reverse('$3')).
access_expr -> open_paren ';' close_paren : build_stab([]).
access_expr -> empty_paren : nil.
access_expr -> number : ?exprs('$1').
access_expr -> list : element(1, '$1').
access_expr -> map : '$1'.
access_expr -> tuple : '$1'.
access_expr -> 'true' : ?id('$1').
access_expr -> 'false' : ?id('$1').
access_expr -> 'nil' : ?id('$1').
access_expr -> bin_string : build_bin_string('$1').
access_expr -> list_string : build_list_string('$1').
access_expr -> bit_string : '$1'.
access_expr -> sigil : build_sigil('$1').
access_expr -> max_expr : '$1'.
%% Aliases and properly formed calls. Used by map_expr.
max_expr -> atom : ?exprs('$1').
max_expr -> atom_safe : build_quoted_atom('$1', true).
max_expr -> atom_unsafe : build_quoted_atom('$1', false).
max_expr -> parens_call call_args_parens : build_identifier('$1', '$2').
max_expr -> parens_call call_args_parens call_args_parens : build_nested_parens('$1', '$2', '$3').
max_expr -> dot_alias : '$1'.
bracket_arg -> open_bracket kw close_bracket : build_list('$1', '$2').
bracket_arg -> open_bracket container_expr close_bracket : build_list('$1', '$2').
bracket_arg -> open_bracket container_expr ',' close_bracket : build_list('$1', '$2').
bracket_expr -> dot_bracket_identifier bracket_arg : build_access(build_identifier('$1', nil), '$2').
bracket_expr -> access_expr bracket_arg : build_access('$1', '$2').
bracket_at_expr -> at_op_eol dot_bracket_identifier bracket_arg :
build_access(build_unary_op('$1', build_identifier('$2', nil)), '$3').
bracket_at_expr -> at_op_eol access_expr bracket_arg :
build_access(build_unary_op('$1', '$2'), '$3').
%% Blocks
do_block -> do_eoe 'end' : [[{do, nil}]].
do_block -> do_eoe stab end_eoe : [[{do, build_stab(reverse('$2'))}]].
do_block -> do_eoe block_list 'end' : [[{do, nil}|'$2']].
do_block -> do_eoe stab_eoe block_list 'end' : [[{do, build_stab(reverse('$2'))}|'$3']].
eoe -> eol : '$1'.
eoe -> ';' : '$1'.
eoe -> eol ';' : '$1'.
fn_eoe -> 'fn' : '$1'.
fn_eoe -> 'fn' eoe : '$1'.
do_eoe -> 'do' : '$1'.
do_eoe -> 'do' eoe : '$1'.
end_eoe -> 'end' : '$1'.
end_eoe -> eoe 'end' : '$2'.
block_eoe -> block_identifier : '$1'.
block_eoe -> block_identifier eoe : '$1'.
stab -> stab_expr : ['$1'].
stab -> stab eoe stab_expr : ['$3'|'$1'].
stab_eoe -> stab : '$1'.
stab_eoe -> stab eoe : '$1'.
%% Here, `element(1, Token)` is the stab operator,
%% while `element(2, Token)` is the expression.
stab_expr -> expr :
'$1'.
stab_expr -> stab_op_eol_and_expr :
build_op(element(1, '$1'), [], element(2, '$1')).
stab_expr -> empty_paren stab_op_eol_and_expr :
build_op(element(1, '$2'), [], element(2, '$2')).
stab_expr -> call_args_no_parens_all stab_op_eol_and_expr :
build_op(element(1, '$2'), unwrap_when(unwrap_splice('$1')), element(2, '$2')).
stab_expr -> stab_parens_many stab_op_eol_and_expr :
build_op(element(1, '$2'), unwrap_splice('$1'), element(2, '$2')).
stab_expr -> stab_parens_many when_op expr stab_op_eol_and_expr :
build_op(element(1, '$4'), [{'when', meta_from_token('$2'), unwrap_splice('$1') ++ ['$3']}], element(2, '$4')).
stab_op_eol_and_expr -> stab_op_eol expr : {'$1', '$2'}.
stab_op_eol_and_expr -> stab_op_eol : warn_empty_stab_clause('$1'), {'$1', nil}.
block_item -> block_eoe stab_eoe : {?exprs('$1'), build_stab(reverse('$2'))}.
block_item -> block_eoe : {?exprs('$1'), nil}.
block_list -> block_item : ['$1'].
block_list -> block_item block_list : ['$1'|'$2'].
%% Helpers
open_paren -> '(' : '$1'.
open_paren -> '(' eol : '$1'.
close_paren -> ')' : '$1'.
close_paren -> eol ')' : '$2'.
empty_paren -> open_paren ')' : '$1'.
open_bracket -> '[' : '$1'.
open_bracket -> '[' eol : '$1'.
close_bracket -> ']' : '$1'.
close_bracket -> eol ']' : '$2'.
open_bit -> '<<' : '$1'.
open_bit -> '<<' eol : '$1'.
close_bit -> '>>' : '$1'.
close_bit -> eol '>>' : '$2'.
open_curly -> '{' : '$1'.
open_curly -> '{' eol : '$1'.
close_curly -> '}' : '$1'.
close_curly -> eol '}' : '$2'.
% Operators
add_op_eol -> add_op : '$1'.
add_op_eol -> add_op eol : '$1'.
add_op_eol -> dual_op : '$1'.
add_op_eol -> dual_op eol : '$1'.
mult_op_eol -> mult_op : '$1'.
mult_op_eol -> mult_op eol : '$1'.
two_op_eol -> two_op : '$1'.
two_op_eol -> two_op eol : '$1'.
three_op_eol -> three_op : '$1'.
three_op_eol -> three_op eol : '$1'.
pipe_op_eol -> pipe_op : '$1'.
pipe_op_eol -> pipe_op eol : '$1'.
capture_op_eol -> capture_op : '$1'.
capture_op_eol -> capture_op eol : '$1'.
unary_op_eol -> unary_op : '$1'.
unary_op_eol -> unary_op eol : '$1'.
unary_op_eol -> dual_op : '$1'.
unary_op_eol -> dual_op eol : '$1'.
match_op_eol -> match_op : '$1'.
match_op_eol -> match_op eol : '$1'.
and_op_eol -> and_op : '$1'.
and_op_eol -> and_op eol : '$1'.
or_op_eol -> or_op : '$1'.
or_op_eol -> or_op eol : '$1'.
in_op_eol -> in_op : '$1'.
in_op_eol -> in_op eol : '$1'.
in_match_op_eol -> in_match_op : '$1'.
in_match_op_eol -> in_match_op eol : '$1'.
type_op_eol -> type_op : '$1'.
type_op_eol -> type_op eol : '$1'.
when_op_eol -> when_op : '$1'.
when_op_eol -> when_op eol : '$1'.
stab_op_eol -> stab_op : '$1'.
stab_op_eol -> stab_op eol : '$1'.
at_op_eol -> at_op : '$1'.
at_op_eol -> at_op eol : '$1'.
comp_op_eol -> comp_op : '$1'.
comp_op_eol -> comp_op eol : '$1'.
rel_op_eol -> rel_op : '$1'.
rel_op_eol -> rel_op eol : '$1'.
arrow_op_eol -> arrow_op : '$1'.
arrow_op_eol -> arrow_op eol : '$1'.
% Dot operator
dot_op -> '.' : '$1'.
dot_op -> '.' eol : '$1'.
dot_identifier -> identifier : '$1'.
dot_identifier -> matched_expr dot_op identifier : build_dot('$2', '$1', '$3').
dot_alias -> aliases : {'__aliases__', meta_from_token('$1', 0), ?exprs('$1')}.
dot_alias -> matched_expr dot_op aliases : build_dot_alias('$2', '$1', '$3').
dot_alias -> matched_expr dot_op dot_alias_container : build_dot_container('$2', '$1', '$3').
dot_alias_container -> open_curly '}' : [].
dot_alias_container -> open_curly container_args close_curly : '$2'.
dot_op_identifier -> op_identifier : '$1'.
dot_op_identifier -> matched_expr dot_op op_identifier : build_dot('$2', '$1', '$3').
dot_do_identifier -> do_identifier : '$1'.
dot_do_identifier -> matched_expr dot_op do_identifier : build_dot('$2', '$1', '$3').
dot_bracket_identifier -> bracket_identifier : '$1'.
dot_bracket_identifier -> matched_expr dot_op bracket_identifier : build_dot('$2', '$1', '$3').
dot_paren_identifier -> paren_identifier : '$1'.
dot_paren_identifier -> matched_expr dot_op paren_identifier : build_dot('$2', '$1', '$3').
parens_call -> dot_paren_identifier : '$1'.
parens_call -> matched_expr dot_call_op : {'.', meta_from_token('$2'), ['$1']}. % Fun/local calls
% Function calls with no parentheses
call_args_no_parens_expr -> matched_expr : '$1'.
call_args_no_parens_expr -> no_parens_expr : throw_no_parens_many_strict('$1').
call_args_no_parens_comma_expr -> matched_expr ',' call_args_no_parens_expr : ['$3', '$1'].
call_args_no_parens_comma_expr -> call_args_no_parens_comma_expr ',' call_args_no_parens_expr : ['$3'|'$1'].
call_args_no_parens_all -> call_args_no_parens_one : '$1'.
call_args_no_parens_all -> call_args_no_parens_ambig : '$1'.
call_args_no_parens_all -> call_args_no_parens_many : '$1'.
call_args_no_parens_one -> call_args_no_parens_kw : ['$1'].
call_args_no_parens_one -> matched_expr : ['$1'].
call_args_no_parens_ambig -> no_parens_expr : ['$1'].
call_args_no_parens_many -> matched_expr ',' call_args_no_parens_kw : ['$1', '$3'].
call_args_no_parens_many -> call_args_no_parens_comma_expr : reverse('$1').
call_args_no_parens_many -> call_args_no_parens_comma_expr ',' call_args_no_parens_kw : reverse(['$3'|'$1']).
call_args_no_parens_many_strict -> call_args_no_parens_many : '$1'.
call_args_no_parens_many_strict -> open_paren call_args_no_parens_kw close_paren : throw_no_parens_strict('$1').
call_args_no_parens_many_strict -> open_paren call_args_no_parens_many close_paren : throw_no_parens_strict('$1').
stab_parens_many -> open_paren call_args_no_parens_kw close_paren : ['$2'].
stab_parens_many -> open_paren call_args_no_parens_many close_paren : '$2'.
% Containers
container_expr -> matched_expr : '$1'.
container_expr -> unmatched_expr : '$1'.
container_expr -> no_parens_expr : throw_no_parens_container_strict('$1').
container_args_base -> container_expr : ['$1'].
container_args_base -> container_args_base ',' container_expr : ['$3'|'$1'].
container_args -> container_args_base : lists:reverse('$1').
container_args -> container_args_base ',' : lists:reverse('$1').
container_args -> container_args_base ',' kw : lists:reverse(['$3'|'$1']).
% Function calls with parentheses
call_args_parens_expr -> matched_expr : '$1'.
call_args_parens_expr -> unmatched_expr : '$1'.
call_args_parens_expr -> no_parens_expr : throw_no_parens_many_strict('$1').
call_args_parens_base -> call_args_parens_expr : ['$1'].
call_args_parens_base -> call_args_parens_base ',' call_args_parens_expr : ['$3'|'$1'].
call_args_parens -> empty_paren : [].
call_args_parens -> open_paren no_parens_expr close_paren : ['$2'].
call_args_parens -> open_paren kw close_paren : ['$2'].
call_args_parens -> open_paren call_args_parens_base close_paren : reverse('$2').
call_args_parens -> open_paren call_args_parens_base ',' kw close_paren : reverse(['$4'|'$2']).
% KV
kw_eol -> kw_identifier : ?exprs('$1').
kw_eol -> kw_identifier eol : ?exprs('$1').
kw_eol -> kw_identifier_safe : build_quoted_atom('$1', true).
kw_eol -> kw_identifier_safe eol : build_quoted_atom('$1', true).
kw_eol -> kw_identifier_unsafe : build_quoted_atom('$1', false).
kw_eol -> kw_identifier_unsafe eol : build_quoted_atom('$1', false).
kw_base -> kw_eol container_expr : [{'$1', '$2'}].
kw_base -> kw_base ',' kw_eol container_expr : [{'$3', '$4'}|'$1'].
kw -> kw_base : reverse('$1').
kw -> kw_base ',' : reverse('$1').
call_args_no_parens_kw_expr -> kw_eol matched_expr : {'$1', '$2'}.
call_args_no_parens_kw_expr -> kw_eol no_parens_expr : {'$1', '$2'}.
call_args_no_parens_kw -> call_args_no_parens_kw_expr : ['$1'].
call_args_no_parens_kw -> call_args_no_parens_kw_expr ',' call_args_no_parens_kw : ['$1'|'$3'].
% Lists
list_args -> kw : '$1'.
list_args -> container_args_base : reverse('$1').
list_args -> container_args_base ',' : reverse('$1').
list_args -> container_args_base ',' kw : reverse('$1', '$3').
list -> open_bracket ']' : build_list('$1', []).
list -> open_bracket list_args close_bracket : build_list('$1', '$2').
% Tuple
tuple -> open_curly '}' : build_tuple('$1', []).
tuple -> open_curly container_args close_curly : build_tuple('$1', '$2').
% Bitstrings
bit_string -> open_bit '>>' : build_bit('$1', []).
bit_string -> open_bit container_args close_bit : build_bit('$1', '$2').
% Map and structs
%% Allow unquote/@something/aliases inside maps and structs.
map_expr -> max_expr : '$1'.
map_expr -> dot_identifier : build_identifier('$1', nil).
map_expr -> at_op_eol map_expr : build_unary_op('$1', '$2').
assoc_op_eol -> assoc_op : '$1'.
assoc_op_eol -> assoc_op eol : '$1'.
assoc_expr -> matched_expr assoc_op_eol matched_expr : {'$1', '$3'}.
assoc_expr -> unmatched_expr assoc_op_eol unmatched_expr : {'$1', '$3'}.
assoc_expr -> matched_expr assoc_op_eol unmatched_expr : {'$1', '$3'}.
assoc_expr -> unmatched_expr assoc_op_eol matched_expr : {'$1', '$3'}.
assoc_expr -> map_expr : '$1'.
assoc_update -> matched_expr pipe_op_eol assoc_expr : {'$2', '$1', ['$3']}.
assoc_update -> unmatched_expr pipe_op_eol assoc_expr : {'$2', '$1', ['$3']}.
assoc_update_kw -> matched_expr pipe_op_eol kw : {'$2', '$1', '$3'}.
assoc_update_kw -> unmatched_expr pipe_op_eol kw : {'$2', '$1', '$3'}.
assoc_base -> assoc_expr : ['$1'].
assoc_base -> assoc_base ',' assoc_expr : ['$3'|'$1'].
assoc -> assoc_base : reverse('$1').
assoc -> assoc_base ',' : reverse('$1').
map_op -> '%{}' : '$1'.
map_op -> '%{}' eol : '$1'.
map_close -> kw close_curly : '$1'.
map_close -> assoc close_curly : '$1'.
map_close -> assoc_base ',' kw close_curly : reverse('$1', '$3').
map_args -> open_curly '}' : build_map('$1', []).
map_args -> open_curly map_close : build_map('$1', '$2').
map_args -> open_curly assoc_update close_curly : build_map_update('$1', '$2', []).
map_args -> open_curly assoc_update ',' close_curly : build_map_update('$1', '$2', []).
map_args -> open_curly assoc_update ',' map_close : build_map_update('$1', '$2', '$4').
map_args -> open_curly assoc_update_kw close_curly : build_map_update('$1', '$2', []).
struct_op -> '%' : '$1'.
map -> map_op map_args : '$2'.
map -> struct_op map_expr map_args : {'%', meta_from_token('$1'), ['$2', '$3']}.
map -> struct_op map_expr eol map_args : {'%', meta_from_token('$1'), ['$2', '$4']}.
Erlang code.
-define(file(), get(elixir_parser_file)).
-define(id(Token), element(1, Token)).
-define(location(Token), element(2, Token)).
-define(exprs(Token), element(3, Token)).
-define(meta(Node), element(2, Node)).
-define(rearrange_uop(Op), (Op == 'not' orelse Op == '!')).
%% The following directive is needed for (significantly) faster
%% compilation of the generated .erl file by the HiPE compiler
-compile([{hipe, [{regalloc, linear_scan}]}]).
-import(lists, [reverse/1, reverse/2]).
meta_from_token(Token, Counter) -> [{counter, Counter}|meta_from_token(Token)].
meta_from_token(Token) -> meta_from_location(?location(Token)).
meta_from_location({Line, Column, EndColumn})
when is_integer(Line), is_integer(Column), is_integer(EndColumn) -> [{line, Line}].
%% Operators
build_op({_Kind, Location, 'in'}, {UOp, _, [Left]}, Right) when ?rearrange_uop(UOp) ->
{UOp, meta_from_location(Location), [{'in', meta_from_location(Location), [Left, Right]}]};
build_op({_Kind, Location, Op}, Left, Right) ->
{Op, meta_from_location(Location), [Left, Right]}.
build_unary_op({_Kind, Location, Op}, Expr) ->
{Op, meta_from_location(Location), [Expr]}.
build_list(Marker, Args) ->
{Args, ?location(Marker)}.
build_tuple(_Marker, [Left, Right]) ->
{Left, Right};
build_tuple(Marker, Args) ->
{'{}', meta_from_token(Marker), Args}.
build_bit(Marker, Args) ->
{'<<>>', meta_from_token(Marker), Args}.
build_map(Marker, Args) ->
{'%{}', meta_from_token(Marker), Args}.
build_map_update(Marker, {Pipe, Left, Right}, Extra) ->
{'%{}', meta_from_token(Marker), [build_op(Pipe, Left, Right ++ Extra)]}.
%% Blocks
build_block([{Op, _, [_]}]=Exprs) when ?rearrange_uop(Op) -> {'__block__', [], Exprs};
build_block([{unquote_splicing, _, Args}]=Exprs) when
length(Args) =< 2 -> {'__block__', [], Exprs};
build_block([Expr]) -> Expr;
build_block(Exprs) -> {'__block__', [], Exprs}.
%% Dots
build_dot_alias(Dot, {'__aliases__', _, Left}, {'aliases', _, Right}) ->
{'__aliases__', meta_from_token(Dot), Left ++ Right};
build_dot_alias(_Dot, Atom, {'aliases', _, _} = Token) when is_atom(Atom) ->
throw_bad_atom(Token);
build_dot_alias(Dot, Other, {'aliases', _, Right}) ->
{'__aliases__', meta_from_token(Dot), [Other|Right]}.
build_dot_container(Dot, Left, Right) ->
Meta = meta_from_token(Dot),
{{'.', Meta, [Left, '{}']}, Meta, Right}.
build_dot(Dot, Left, Right) ->
{'.', meta_from_token(Dot), [Left, extract_identifier(Right)]}.
extract_identifier({Kind, _, Identifier}) when
Kind == identifier; Kind == bracket_identifier; Kind == paren_identifier;
Kind == do_identifier; Kind == op_identifier ->
Identifier.
%% Identifiers
build_nested_parens(Dot, Args1, Args2) ->
Identifier = build_identifier(Dot, Args1),
Meta = ?meta(Identifier),
{Identifier, Meta, Args2}.
build_identifier({'.', Meta, _} = Dot, Args) ->
FArgs = case Args of
nil -> [];
_ -> Args
end,
{Dot, Meta, FArgs};
build_identifier({op_identifier, Location, Identifier}, [Arg]) ->
{Identifier, [{ambiguous_op, nil}|meta_from_location(Location)], [Arg]};
build_identifier({_, Location, Identifier}, Args) ->
{Identifier, meta_from_location(Location), Args}.
%% Fn
build_fn(Op, [{'->', _, [_, _]}|_] = Stab) ->
{fn, meta_from_token(Op), build_stab(Stab)};
build_fn(Op, _Stab) ->
throw(meta_from_token(Op), "expected clauses to be defined with -> inside: ", "'fn'").
%% Access
build_access(Expr, {List, Location}) ->
Meta = meta_from_location(Location),
{{'.', Meta, ['Elixir.Access', get]}, Meta, [Expr, List]}.
%% Interpolation aware
build_sigil({sigil, Location, Sigil, Parts, Modifiers}) ->
Meta = meta_from_location(Location),
{list_to_atom("sigil_" ++ [Sigil]), Meta, [{'<<>>', Meta, string_parts(Parts)}, Modifiers]}.
build_bin_string({bin_string, _Location, [H]}) when is_binary(H) ->
H;
build_bin_string({bin_string, Location, Args}) ->
{'<<>>', meta_from_location(Location), string_parts(Args)}.
build_list_string({list_string, _Location, [H]}) when is_binary(H) ->
elixir_utils:characters_to_list(H);
build_list_string({list_string, Location, Args}) ->
Meta = meta_from_location(Location),
{{'.', Meta, ['Elixir.String', to_char_list]}, Meta, [{'<<>>', Meta, string_parts(Args)}]}.
build_quoted_atom({_, _Location, [H]}, Safe) when is_binary(H) ->
Op = binary_to_atom_op(Safe), erlang:Op(H, utf8);
build_quoted_atom({_, Location, Args}, Safe) ->
Meta = meta_from_location(Location),
{{'.', Meta, [erlang, binary_to_atom_op(Safe)]}, Meta, [{'<<>>', Meta, string_parts(Args)}, utf8]}.
binary_to_atom_op(true) -> binary_to_existing_atom;
binary_to_atom_op(false) -> binary_to_atom.
string_parts(Parts) ->
[string_part(Part) || Part <- Parts].
string_part(Binary) when is_binary(Binary) ->
Binary;
string_part({Location, Tokens}) ->
Form = string_tokens_parse(Tokens),
Meta = meta_from_location(Location),
{'::', Meta, [{{'.', Meta, ['Elixir.Kernel', to_string]}, Meta, [Form]}, {binary, Meta, nil}]}.
string_tokens_parse(Tokens) ->
case parse(Tokens) of
{ok, Forms} -> Forms;
{error, _} = Error -> throw(Error)
end.
%% Keywords
build_stab([{'->', Meta, [Left, Right]}|T]) ->
build_stab(Meta, T, Left, [Right], []);
build_stab(Else) ->
build_block(Else).
build_stab(Old, [{'->', New, [Left, Right]}|T], Marker, Temp, Acc) ->
H = {'->', Old, [Marker, build_block(reverse(Temp))]},
build_stab(New, T, Left, [Right], [H|Acc]);
build_stab(Meta, [H|T], Marker, Temp, Acc) ->
build_stab(Meta, T, Marker, [H|Temp], Acc);
build_stab(Meta, [], Marker, Temp, Acc) ->
H = {'->', Meta, [Marker, build_block(reverse(Temp))]},
reverse([H|Acc]).
%% Every time the parser sees a (unquote_splicing())
%% it assumes that a block is being spliced, wrapping
%% the splicing in a __block__. But in the stab clause,
%% we can have (unquote_splicing(1, 2, 3)) -> :ok, in such
%% case, we don't actually want the block, since it is
%% an arg style call. unwrap_splice unwraps the splice
%% from such blocks.
unwrap_splice([{'__block__', [], [{unquote_splicing, _, _}] = Splice}]) ->
Splice;
unwrap_splice(Other) -> Other.
unwrap_when(Args) ->
case elixir_utils:split_last(Args) of
{Start, {'when', Meta, [_, _] = End}} ->
[{'when', Meta, Start ++ End}];
{_, _} ->
Args
end.
to_block([One]) -> One;
to_block(Other) -> {'__block__', [], reverse(Other)}.
%% Warnings and errors
throw(Meta, Error, Token) ->
Line =
case lists:keyfind(line, 1, Meta) of
{line, L} -> L;
false -> 0
end,
throw({error, {Line, ?MODULE, [Error, Token]}}).
throw_bad_atom(Token) ->
throw(meta_from_token(Token), "atom cannot be followed by an alias. If the '.' was meant to be "
"part of the atom's name, the atom name must be quoted. Syntax error before: ", "'.'").
throw_no_parens_strict(Token) ->
throw(meta_from_token(Token), "unexpected parentheses. If you are making a "
"function call, do not insert spaces between the function name and the "
"opening parentheses. Syntax error before: ", "'('").
throw_no_parens_many_strict(Node) ->
throw(?meta(Node),
"unexpected comma. Parentheses are required to solve ambiguity in nested calls.\n\n"
"This error happens when you have nested function calls without parentheses. "
"For example:\n\n"
" one a, two b, c, d\n\n"
"In the example above, we don't know if the parameters \"c\" and \"d\" apply "
"to the function \"one\" or \"two\". You can solve this by explicitly adding "
"parentheses:\n\n"
" one a, two(b, c, d)\n\n"
"Elixir cannot compile otherwise. Syntax error before: ", "','").
throw_no_parens_container_strict(Node) ->
throw(?meta(Node),
"unexpected comma. Parentheses are required to solve ambiguity inside containers.\n\n"
"This error may happen when you forget a comma in a list or other container:\n\n"
" [a, b c, d]\n\n"
"Or when you have ambiguous calls:\n\n"
" [one, two three, four, five]\n\n"
"In the example above, we don't know if the parameters \"four\" and \"five\" "
"belongs to the list or the function \"two\". You can solve this by explicitly "
"adding parentheses:\n\n"
" [one, two(three, four), five]\n\n"
"Elixir cannot compile otherwise. Syntax error before: ", "','").
throw_invalid_kw_identifier({_, _, do} = Token) ->
throw(meta_from_token(Token), elixir_tokenizer:invalid_do_error("unexpected keyword \"do:\""), "'do:'");
throw_invalid_kw_identifier({_, _, KW} = Token) ->
throw(meta_from_token(Token), "syntax error before: ", "'" ++ atom_to_list(KW) ++ "':").
%% TODO: Make those warnings errors.
warn_empty_stab_clause({stab_op, {Line, _Begin, _End}, '->'}) ->
elixir_errors:warn(Line, ?file(),
"an expression is always required on the right side of ->. "
"Please provide a value after ->").
warn_pipe({arrow_op, {Line, _Begin, _End}, Op}, {_, [_|_], [_|_]}) ->
elixir_errors:warn(Line, ?file(),
io_lib:format(
"you are piping into a function call without parentheses, which may be ambiguous. "
"Please wrap the function you are piping into in parentheses. For example:\n\n"
" foo 1 ~ts bar 2 ~ts baz 3\n\n"
"Should be written as:\n\n"
" foo(1) ~ts bar(2) ~ts baz(3)\n",
[Op, Op, Op, Op]
)
);
warn_pipe(_Token, _) ->
ok.

256
samples/Erlang/lfe_scan.xrl Normal file
View File

@@ -0,0 +1,256 @@
%% Copyright (c) 2008-2013 Robert Virding
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%% File : lfe_scan.xrl
%% Author : Robert Virding
%% Purpose : Token definitions for Lisp Flavoured Erlang.
Definitions.
B = [01]
O = [0-7]
D = [0-9]
H = [0-9a-fA-F]
B36 = [0-9a-zA-Z]
U = [A-Z]
L = [a-z]
A = ({U}|{L})
DEL = [][()}{";\000-\s]
SYM = [^][()}{";\000-\s\177-\237]
SSYM = [^][()}{"|;#`',\000-\s\177-\237]
WS = ([\000-\s]|;[^\n]*)
Rules.
%% Bracketed Comments using #| foo |#
#{D}*\|[^\|]*\|+([^#\|][^\|]*\|+)*# :
block_comment(string:substr(TokenChars, 3)).
%% Separators
' : {token,{'\'',TokenLine}}.
` : {token,{'`',TokenLine}}.
, : {token,{',',TokenLine}}.
,@ : {token,{',@',TokenLine}}.
\. : {token,{'.',TokenLine}}.
[][()}{] : {token,{list_to_atom(TokenChars),TokenLine}}.
#{D}*[bB]\( : {token,{'#B(',TokenLine}}.
#{D}*[mM]\( : {token,{'#M(',TokenLine}}.
#{D}*\( : {token,{'#(',TokenLine}}.
#{D}*\. : {token,{'#.',TokenLine}}.
#{D}*` : {token,{'#`',TokenLine}}.
#{D}*; : {token,{'#;',TokenLine}}.
#{D}*, : {token,{'#,',TokenLine}}.
#{D}*,@ : {token,{'#,@',TokenLine}}.
%% Characters
#{D}*\\(x{H}+|.) : char_token(skip_past(TokenChars, $\\, $\\), TokenLine).
%% Based numbers
#{D}*\*{SYM}+ : base_token(skip_past(TokenChars, $*, $*), 2, TokenLine).
#{D}*[bB]{SYM}+ : base_token(skip_past(TokenChars, $b, $B), 2, TokenLine).
#{D}*[oO]{SYM}+ : base_token(skip_past(TokenChars, $o, $O), 8, TokenLine).
#{D}*[dD]{SYM}+ : base_token(skip_past(TokenChars, $d, $D), 10, TokenLine).
#{D}*[xX]{SYM}+ : base_token(skip_past(TokenChars, $x, $X), 16, TokenLine).
#{D}*[rR]{SYM}+ :
%% Scan over digit chars to get base.
{Base,[_|Ds]} = base1(tl(TokenChars), 10, 0),
base_token(Ds, Base, TokenLine).
%% String
"(\\x{H}+;|\\.|[^"\\])*" :
%% Strip quotes.
S = string:substr(TokenChars, 2, TokenLen - 2),
{token,{string,TokenLine,chars(S)}}.
%% Binary string
#"(\\x{H}+;|\\.|[^"\\])*" :
%% Strip quotes.
S = string:substr(TokenChars, 3, TokenLen - 3),
Bin = unicode:characters_to_binary(chars(S), utf8, utf8),
{token,{binary,TokenLine,Bin}}.
%% Symbols
\|(\\x{H}+;|\\.|[^|\\])*\| :
%% Strip quotes.
S = string:substr(TokenChars, 2, TokenLen - 2),
symbol_token(chars(S), TokenLine).
%% Funs
#'{SSYM}{SYM}*/{D}+ :
%% Strip sharpsign single-quote.
FunStr = string:substr(TokenChars,3),
{token,{'#\'',TokenLine,FunStr}}.
%% Atoms
[+-]?{D}+ :
case catch {ok,list_to_integer(TokenChars)} of
{ok,I} -> {token,{number,TokenLine,I}};
_ -> {error,"illegal integer"}
end.
[+-]?{D}+\.{D}+([eE][+-]?{D}+)? :
case catch {ok,list_to_float(TokenChars)} of
{ok,F} -> {token,{number,TokenLine,F}};
_ -> {error,"illegal float"}
end.
{SSYM}{SYM}* :
symbol_token(TokenChars, TokenLine).
{WS}+ : skip_token.
Erlang code.
%% Copyright (c) 2008-2013 Robert Virding
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%% File : lfe_scan.erl
%% Author : Robert Virding
%% Purpose : Token definitions for Lisp Flavoured Erlang.
-export([start_symbol_char/1,symbol_char/1]).
-import(string, [substr/2,substr/3]).
%% start_symbol_char(Char) -> true | false.
%% symbol_char(Char) -> true | false.
%% Define start symbol chars and symbol chars.
start_symbol_char($#) -> false;
start_symbol_char($`) -> false;
start_symbol_char($') -> false; %'
start_symbol_char($,) -> false;
start_symbol_char($|) -> false; %Symbol quote character
start_symbol_char(C) -> symbol_char(C).
symbol_char($() -> false;
symbol_char($)) -> false;
symbol_char($[) -> false;
symbol_char($]) -> false;
symbol_char(${) -> false;
symbol_char($}) -> false;
symbol_char($") -> false;
symbol_char($;) -> false;
symbol_char(C) -> ((C > $\s) and (C =< $~)) orelse (C > $\240).
%% symbol_token(Chars, Line) -> {token,{symbol,Line,Symbol}} | {error,E}.
%% Build a symbol from list of legal characters, else error.
symbol_token(Cs, L) ->
case catch {ok,list_to_atom(Cs)} of
{ok,S} -> {token,{symbol,L,S}};
_ -> {error,"illegal symbol"}
end.
%% base_token(Chars, Base, Line) -> Integer.
%% Convert a string of Base characters into a number. We only allow
%% base betqeen 2 and 36, and an optional sign character first.
base_token(_, B, _) when B < 2; B > 36 ->
{error,"illegal number base"};
base_token([$+|Cs], B, L) -> base_token(Cs, B, +1, L);
base_token([$-|Cs], B, L) -> base_token(Cs, B, -1, L);
base_token(Cs, B, L) -> base_token(Cs, B, +1, L).
base_token(Cs, B, S, L) ->
case base1(Cs, B, 0) of
{N,[]} -> {token,{number,L,S*N}};
{_,_} -> {error,"illegal based number"}
end.
base1([C|Cs], Base, SoFar) when C >= $0, C =< $9, C < Base + $0 ->
Next = SoFar * Base + (C - $0),
base1(Cs, Base, Next);
base1([C|Cs], Base, SoFar) when C >= $a, C =< $z, C < Base + $a - 10 ->
Next = SoFar * Base + (C - $a + 10),
base1(Cs, Base, Next);
base1([C|Cs], Base, SoFar) when C >= $A, C =< $Z, C < Base + $A - 10 ->
Next = SoFar * Base + (C - $A + 10),
base1(Cs, Base, Next);
base1([C|Cs], _Base, SoFar) -> {SoFar,[C|Cs]};
base1([], _Base, N) -> {N,[]}.
-define(IS_UNICODE(C), ((C >= 0) and (C =< 16#10FFFF))).
%% char_token(InputChars, Line) -> {token,{number,L,N}} | {error,E}.
%% Convert an input string into the corresponding character. For a
%% sequence of hex characters we check resultant is code is in the
%% unicode range.
char_token([$x,C|Cs], L) ->
case base1([C|Cs], 16, 0) of
{N,[]} when ?IS_UNICODE(N) -> {token,{number,L,N}};
_ -> {error,"illegal character"}
end;
char_token([C], L) -> {token,{number,L,C}}.
%% chars(InputChars) -> Chars.
%% Convert an input string into the corresponding string characters.
%% We know that the input string is correct.
chars([$\\,$x,C|Cs0]) ->
case hex_char(C) of
true ->
case base1([C|Cs0], 16, 0) of
{N,[$;|Cs1]} -> [N|chars(Cs1)];
_Other -> [escape_char($x)|chars([C|Cs0])]
end;
false -> [escape_char($x)|chars([C|Cs0])]
end;
chars([$\\,C|Cs]) -> [escape_char(C)|chars(Cs)];
chars([C|Cs]) -> [C|chars(Cs)];
chars([]) -> [].
hex_char(C) when C >= $0, C =< $9 -> true;
hex_char(C) when C >= $a, C =< $f -> true;
hex_char(C) when C >= $A, C =< $F -> true;
hex_char(_) -> false.
escape_char($b) -> $\b; %\b = BS
escape_char($t) -> $\t; %\t = TAB
escape_char($n) -> $\n; %\n = LF
escape_char($v) -> $\v; %\v = VT
escape_char($f) -> $\f; %\f = FF
escape_char($r) -> $\r; %\r = CR
escape_char($e) -> $\e; %\e = ESC
escape_char($s) -> $\s; %\s = SPC
escape_char($d) -> $\d; %\d = DEL
escape_char(C) -> C.
%% Block Comment:
%% Provide a sensible error when people attempt to include nested
%% comments because currently the parser cannot process them without
%% a rebuild. But simply exploding on a '#|' is not going to be that
%% helpful.
block_comment(TokenChars) ->
%% Check we're not opening another comment block.
case string:str(TokenChars, "#|") of
0 -> skip_token; %% No nesting found
_ -> {error, "illegal nested block comment"}
end.
%% skip_until(String, Char1, Char2) -> String.
%% skip_past(String, Char1, Char2) -> String.
%% skip_until([C|_]=Cs, C1, C2) when C =:= C1 ; C =:= C2 -> Cs;
%% skip_until([_|Cs], C1, C2) -> skip_until(Cs, C1, C2);
%% skip_until([], _, _) -> [].
skip_past([C|Cs], C1, C2) when C =:= C1 ; C =:= C2 -> Cs;
skip_past([_|Cs], C1, C2) -> skip_past(Cs, C1, C2);
skip_past([], _, _) -> [].

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,31 @@
<#import "layout.ftl" as layout>
<#assign results = [
{
"title": "Example Result",
"description": "Lorem ipsum dolor sit amet, pede id pellentesque, sollicitudin turpis sed in sed sed, libero dictum."
}
] />
<@layout.page title="FreeMarker Example">
<#if results?size == 0>
There were no results.
<#else>
<ul>
<#list results as result>
<li>
<strong>${result.title}</strong>
<p>${result.description}</p>
</li>
</#list>
</ul>
</#if>
<#-- This is a FreeMarker comment -->
<@currentTime />
</@layout.page>
<#macro currentTime>
${.now?string.full}
</#macro>

View File

@@ -0,0 +1,32 @@
<#ftl strip_text=true />
<#macro page title>
<!doctype html>
<html lang="${.lang}">
<head>
<title>${title}</title>
<@metaTags />
</head>
<body>
<#nested />
<@footer />
</body>
</html>
</#macro>
<#---
Default meta tags
-->
<#macro metaTags>
<#compress>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="format-detection" content="telephone=no">
</#compress>
</#macro>
<#macro footer>
<p>This page is using FreeMarker v${.version}</p>
</#macro>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

6
samples/HCL/example.hcl Normal file
View File

@@ -0,0 +1,6 @@
consul = "1.2.3.4"
// This is a comment
template "foo" {
bar = "zip"
}

13
samples/HCL/example.tf Normal file
View File

@@ -0,0 +1,13 @@
resource "aws_instance" "web" {
// Copies the myapp.conf file to /etc/myapp.conf
provisioner "file" {
source = "conf/myapp.conf"
destination = "/etc/myapp.conf"
}
// Copies the configs.d folder to /etc/configs.d
provisioner "file" {
source = "conf/configs.d"
destination = "/etc"
}
}

View File

@@ -0,0 +1,26 @@
<h1>Listing Books</h1>
<table>
<tr>
<th>Title</th>
<th>Summary</th>
<th></th>
<th></th>
<th></th>
</tr>
<%= for book <- @books do %>
<tr>
<%# comment %>
<td><%= book.title %></td>
<td><%= book.content %></td>
<td><%= link "Show", to: book_path(@conn, :show, book) %></td>
<td><%= link "Edit", to: book_path(@conn, :edit, book) %></td>
<td><%= link "Delete", to: book_path(@conn, :delete, book), method: :delete, data: [confirm: "Are you sure?"] %></td>
</tr>
<% end %>
</table>
<br />
<%= link "New book", to: book_path(@conn, :new) %>

31
samples/HTML/rpanel.inc Normal file
View File

@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" charset="UTF-8" type="text/css" href="main.css">
<meta charset="UTF-8">
</head>
<body>
<div id="panel_header_main_form">
<p id="panel_header_main_form_title">Поддержка:</p>
</div>
<table>
<tbody>
<tr>
<td>
<p>Москва:</p>
</td>
<td>
<p>+7-902-7-800-807</p>
</td>
</tr>
<tr>
<td>
<p>Регионы:</p>
</td>
<td>
<p>+7-902-7-800-807</p>
</td>
</tr>
</tbody>
</table>
</body>

5
samples/HTML/tailDel.inc Normal file
View File

@@ -0,0 +1,5 @@
</UL>
<P><A HREF="devices.html">Supported Targets</A></P>
</BODY>
</HEAD>

View File

@@ -1,6 +1,74 @@
Version 1 of Trivial Extension by Andrew Plotkin begins here.
Version 2 of Trivial Extension by Andrew Plotkin begins here.
"This is the rubric of the extension."
"provided for the Linguist package by Andrew Plotkin"
[Note the two special quoted lines above.]
A cow is a kind of animal. A cow can be purple.
Understand "cow" as a cow.
Understand "purple" as a purple cow.
Check pushing a cow:
instead say "Cow-tipping, at your age?[paragraph break]Inconceivable."
[Here are the possible levels of heading:]
Volume One
Text-line is always "A line of text."
Book 2
Part the third - indented headings still count
Chapter IV - not for release
[Heading labels are case-insensitive.]
section foobar
[A line beginning "Volume" that does not have blank lines before and after it is *not* a header line. So the following should all be part of section foobar. Sadly, the "Volume is..." line gets colored as a header, because Atom's regexp model can't recognize "thing with blank lines before and after"!]
Measure is a kind of value.
Volume is a measure. Length is a measure.
Area is a measure.
[And now some Inform 6 inclusions.]
To say em -- running on:
(- style underline; -).
To say /em -- running on:
(- style roman; -).
Include (-
! Inform 6 comments start with a ! mark and run to the end of the line.
Global cowcount;
[ inform6func arg;
print "Here is some text; ", (address) 'dictword', ".^";
cowcount++; ! increment this variable
];
Object i6cow
with name 'cow' 'animal',
with description "It looks like a cow.",
has animate scenery;
-) after "Global Variables" in "Output.i6t".
Trivial Extension ends here.
---- DOCUMENTATION ----
Everything after the "---- DOCUMENTATION ----" line is documentation, so it should have the comment style.
However, tab-indented lines are sample Inform code within the documentation:
Horns are a kind of thing. Every cow has horns.
say "Moo[if the noun is purple] indigo[end if]."
So we need to allow for that.

View File

@@ -2,11 +2,61 @@
Include Trivial Extension by Andrew Plotkin.
Volume 1 - overview
Chapter - setting the scene
The Kitchen is a room.
[This kitchen is modelled after the one in Zork, although it lacks the detail to establish this to the player.]
[Comment: this kitchen is modelled after the one in Zork, although it lacks the detail to establish this to the player.]
Section - the kitchen table
The spicerack is a container in the Kitchen.
Table of Spices
Name Flavor
"cinnamon" 5
"nutmeg" 4
"szechuan pepper" 8
The description of the spicerack is "It's mostly empty."
Chapter - a character
A purple cow called Gelett is in the Kitchen.
[This comment spans multiple lines..
...and this line contains [nested square[] brackets]...
...which is legal in Inform 7.]
Instead of examining Gelett:
say "You'd rather see than be one."
Instead of examining Gelett:
say "You'd rather see than be one."
Check smelling Gelett:
say "This text contains several lines.
A blank line is displayed as a paragraph break,
but a simple line break is not.";
stop the action.
Section - cow catching
Gelett has a number called the mooness.
Instead of taking Gelett:
increment the mooness of Gelett;
if the mooness of Gelett is one:
say "Gelett moos once.";
else:
say "Gelett moos [mooness of Gelett in words] times.";
Volume 2 - the turn cycle
Every turn:
say "A turn passes[one of][or] placidly[or] idly[or] tediously[at random]."

File diff suppressed because it is too large Load Diff

82
samples/JSON/geo.geojson Normal file
View File

@@ -0,0 +1,82 @@
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"name": "Australia Post - North Ryde BC",
"geo": [-33.787792, 151.13288],
"streetAddress": "11 Waterloo Road",
"addressLocality": "Macquarie Park",
"addressRegion": "New South Wales",
"addressCountry": "Australia",
"postalCode": "2113"
},
"geometry": {
"type": "Point",
"coordinates": [151.13288, -33.787792, 0]
}
},
{
"type": "Feature",
"properties": {
"name": "George Weston Foods Limited",
"geo": [-37.8263884, 144.9105381],
"streetAddress": "Level 3, 187 Todd Road",
"addressLocality": "Port Melbourne",
"addressRegion": "Victoria",
"addressCountry": "Australia",
"postalCode": "3207"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[144.9097088901841, -37.82622654171794, 0],
[144.9099724266943, -37.82679388891783, 0],
[144.9110127325916, -37.82651526396403, 0],
[144.9112227645738, -37.82655667152123, 0],
[144.9113739439796, -37.82618552508767, 0],
[144.9112740633105, -37.82615750100924, 0],
[144.9111355846674, -37.82584493693527, 0],
[144.9097088901841, -37.82622654171794, 0]
]
]
}
},
{
"type": "Feature",
"properties": {
"name": "George Weston Foods Limited",
"geo": [-37.05202791502396, 144.2085614999388],
"streetAddress": "67 Richards Road",
"addressLocality": "Castlemaine",
"addressRegion": "Victoria",
"addressCountry": "Australia",
"postalCode": "3450"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[144.2052428913937, -37.04906391287216, 0],
[144.205540392692, -37.05049727485623, 0],
[144.2059800881858, -37.05066835966983, 0],
[144.206490656024, -37.05279538900776, 0],
[144.2064525845008, -37.05366195881602, 0],
[144.2084322301922, -37.0538920493147, 0],
[144.2084811895712, -37.05266519735124, 0],
[144.2079784002005, -37.05041270555773, 0],
[144.2074017905817, -37.04817406993293, 0],
[144.2061363939852, -37.04834972871226, 0],
[144.2052428913937, -37.04906391287216, 0]
]
]
}
}
]
}

File diff suppressed because one or more lines are too long

23
samples/JSX/sample.jsx Normal file
View File

@@ -0,0 +1,23 @@
'use strict';
const React = require('react')
module.exports = React.createClass({
render: function() {
let {feeds, log} = this.props;
log.info(feeds);
return <div className="feed-list">
<h3>News Feed's</h3>
<ul>
{feeds.map(function(feed) {
return <li key={feed.name} className={feed.fetched ? 'loaded' : 'loading'}>
{feed.data && feed.data.length > 0 ?
<span>{feed.name} <span className='light'>({feed.data.length})</span></span>
: 'feed.name' }
</li>
})}
</ul>
</div>;
}
});

View File

@@ -0,0 +1,625 @@
// This is a generated file. Not intended for manual editing.
package org.intellij.grammar.parser;
import com.intellij.lang.PsiBuilder;
import com.intellij.lang.PsiBuilder.Marker;
import static org.intellij.grammar.psi.BnfTypes.*;
import static org.intellij.grammar.parser.GeneratedParserUtilBase.*;
import com.intellij.psi.tree.IElementType;
import com.intellij.lang.ASTNode;
import com.intellij.psi.tree.TokenSet;
import com.intellij.lang.PsiParser;
import com.intellij.lang.LightPsiParser;
@SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"})
public class GrammarParser implements PsiParser, LightPsiParser {
public ASTNode parse(IElementType t, PsiBuilder b) {
parseLight(t, b);
return b.getTreeBuilt();
}
public void parseLight(IElementType t, PsiBuilder b) {
boolean r;
b = adapt_builder_(t, b, this, EXTENDS_SETS_);
Marker m = enter_section_(b, 0, _COLLAPSE_, null);
if (t == BNF_ATTR) {
r = attr(b, 0);
}
else if (t == BNF_ATTR_PATTERN) {
r = attr_pattern(b, 0);
}
else if (t == BNF_ATTR_VALUE) {
r = attr_value(b, 0);
}
else if (t == BNF_ATTRS) {
r = attrs(b, 0);
}
else if (t == BNF_CHOICE) {
r = choice(b, 0);
}
else if (t == BNF_EXPRESSION) {
r = expression(b, 0);
}
else if (t == BNF_LITERAL_EXPRESSION) {
r = literal_expression(b, 0);
}
else if (t == BNF_MODIFIER) {
r = modifier(b, 0);
}
else if (t == BNF_PAREN_EXPRESSION) {
r = paren_expression(b, 0);
}
else if (t == BNF_PREDICATE) {
r = predicate(b, 0);
}
else if (t == BNF_PREDICATE_SIGN) {
r = predicate_sign(b, 0);
}
else if (t == BNF_QUANTIFIED) {
r = quantified(b, 0);
}
else if (t == BNF_QUANTIFIER) {
r = quantifier(b, 0);
}
else if (t == BNF_REFERENCE_OR_TOKEN) {
r = reference_or_token(b, 0);
}
else if (t == BNF_RULE) {
r = rule(b, 0);
}
else if (t == BNF_SEQUENCE) {
r = sequence(b, 0);
}
else if (t == BNF_STRING_LITERAL_EXPRESSION) {
r = string_literal_expression(b, 0);
}
else {
r = parse_root_(t, b, 0);
}
exit_section_(b, 0, m, t, r, true, TRUE_CONDITION);
}
protected boolean parse_root_(IElementType t, PsiBuilder b, int l) {
return grammar(b, l + 1);
}
public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[] {
create_token_set_(BNF_LITERAL_EXPRESSION, BNF_STRING_LITERAL_EXPRESSION),
create_token_set_(BNF_CHOICE, BNF_EXPRESSION, BNF_LITERAL_EXPRESSION, BNF_PAREN_EXPRESSION,
BNF_PREDICATE, BNF_QUANTIFIED, BNF_REFERENCE_OR_TOKEN, BNF_SEQUENCE,
BNF_STRING_LITERAL_EXPRESSION),
};
/* ********************************************************** */
// id attr_pattern? '=' attr_value ';'?
public static boolean attr(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attr")) return false;
boolean r, p;
Marker m = enter_section_(b, l, _NONE_, "<attr>");
r = consumeToken(b, BNF_ID);
p = r; // pin = 1
r = r && report_error_(b, attr_1(b, l + 1));
r = p && report_error_(b, consumeToken(b, BNF_OP_EQ)) && r;
r = p && report_error_(b, attr_value(b, l + 1)) && r;
r = p && attr_4(b, l + 1) && r;
exit_section_(b, l, m, BNF_ATTR, r, p, attr_recover_until_parser_);
return r || p;
}
// attr_pattern?
private static boolean attr_1(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attr_1")) return false;
attr_pattern(b, l + 1);
return true;
}
// ';'?
private static boolean attr_4(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attr_4")) return false;
consumeToken(b, BNF_SEMICOLON);
return true;
}
/* ********************************************************** */
// '(' string ')'
public static boolean attr_pattern(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attr_pattern")) return false;
if (!nextTokenIs(b, BNF_LEFT_PAREN)) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, BNF_LEFT_PAREN);
r = r && consumeToken(b, BNF_STRING);
r = r && consumeToken(b, BNF_RIGHT_PAREN);
exit_section_(b, m, BNF_ATTR_PATTERN, r);
return r;
}
/* ********************************************************** */
// !'}'
static boolean attr_recover_until(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attr_recover_until")) return false;
boolean r;
Marker m = enter_section_(b, l, _NOT_, null);
r = !consumeToken(b, BNF_RIGHT_BRACE);
exit_section_(b, l, m, null, r, false, null);
return r;
}
/* ********************************************************** */
// (reference_or_token | literal_expression) !'='
public static boolean attr_value(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attr_value")) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, "<attr value>");
r = attr_value_0(b, l + 1);
r = r && attr_value_1(b, l + 1);
exit_section_(b, l, m, BNF_ATTR_VALUE, r, false, null);
return r;
}
// reference_or_token | literal_expression
private static boolean attr_value_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attr_value_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = reference_or_token(b, l + 1);
if (!r) r = literal_expression(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
// !'='
private static boolean attr_value_1(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attr_value_1")) return false;
boolean r;
Marker m = enter_section_(b, l, _NOT_, null);
r = !consumeToken(b, BNF_OP_EQ);
exit_section_(b, l, m, null, r, false, null);
return r;
}
/* ********************************************************** */
// '{' attr* '}'
public static boolean attrs(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attrs")) return false;
if (!nextTokenIs(b, BNF_LEFT_BRACE)) return false;
boolean r, p;
Marker m = enter_section_(b, l, _NONE_, null);
r = consumeToken(b, BNF_LEFT_BRACE);
p = r; // pin = 1
r = r && report_error_(b, attrs_1(b, l + 1));
r = p && consumeToken(b, BNF_RIGHT_BRACE) && r;
exit_section_(b, l, m, BNF_ATTRS, r, p, null);
return r || p;
}
// attr*
private static boolean attrs_1(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "attrs_1")) return false;
int c = current_position_(b);
while (true) {
if (!attr(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "attrs_1", c)) break;
c = current_position_(b);
}
return true;
}
/* ********************************************************** */
// '{' sequence ('|' sequence)* '}' | sequence choice_tail*
public static boolean choice(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "choice")) return false;
boolean r;
Marker m = enter_section_(b, l, _COLLAPSE_, "<choice>");
r = choice_0(b, l + 1);
if (!r) r = choice_1(b, l + 1);
exit_section_(b, l, m, BNF_CHOICE, r, false, null);
return r;
}
// '{' sequence ('|' sequence)* '}'
private static boolean choice_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "choice_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, BNF_LEFT_BRACE);
r = r && sequence(b, l + 1);
r = r && choice_0_2(b, l + 1);
r = r && consumeToken(b, BNF_RIGHT_BRACE);
exit_section_(b, m, null, r);
return r;
}
// ('|' sequence)*
private static boolean choice_0_2(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "choice_0_2")) return false;
int c = current_position_(b);
while (true) {
if (!choice_0_2_0(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "choice_0_2", c)) break;
c = current_position_(b);
}
return true;
}
// '|' sequence
private static boolean choice_0_2_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "choice_0_2_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, BNF_OP_OR);
r = r && sequence(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
// sequence choice_tail*
private static boolean choice_1(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "choice_1")) return false;
boolean r;
Marker m = enter_section_(b);
r = sequence(b, l + 1);
r = r && choice_1_1(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
// choice_tail*
private static boolean choice_1_1(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "choice_1_1")) return false;
int c = current_position_(b);
while (true) {
if (!choice_tail(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "choice_1_1", c)) break;
c = current_position_(b);
}
return true;
}
/* ********************************************************** */
// '|' sequence
static boolean choice_tail(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "choice_tail")) return false;
if (!nextTokenIs(b, BNF_OP_OR)) return false;
boolean r, p;
Marker m = enter_section_(b, l, _NONE_, null);
r = consumeToken(b, BNF_OP_OR);
p = r; // pin = 1
r = r && sequence(b, l + 1);
exit_section_(b, l, m, null, r, p, null);
return r || p;
}
/* ********************************************************** */
// choice?
public static boolean expression(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "expression")) return false;
Marker m = enter_section_(b, l, _COLLAPSE_, "<expression>");
choice(b, l + 1);
exit_section_(b, l, m, BNF_EXPRESSION, true, false, null);
return true;
}
/* ********************************************************** */
// (attrs | rule) *
static boolean grammar(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "grammar")) return false;
int c = current_position_(b);
while (true) {
if (!grammar_0(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "grammar", c)) break;
c = current_position_(b);
}
return true;
}
// attrs | rule
private static boolean grammar_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "grammar_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = attrs(b, l + 1);
if (!r) r = rule(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
/* ********************************************************** */
// string_literal_expression | number
public static boolean literal_expression(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "literal_expression")) return false;
if (!nextTokenIs(b, "<literal expression>", BNF_NUMBER, BNF_STRING)) return false;
boolean r;
Marker m = enter_section_(b, l, _COLLAPSE_, "<literal expression>");
r = string_literal_expression(b, l + 1);
if (!r) r = consumeToken(b, BNF_NUMBER);
exit_section_(b, l, m, BNF_LITERAL_EXPRESSION, r, false, null);
return r;
}
/* ********************************************************** */
// 'private' | 'external' | 'wrapped'
public static boolean modifier(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "modifier")) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, "<modifier>");
r = consumeToken(b, "private");
if (!r) r = consumeToken(b, "external");
if (!r) r = consumeToken(b, "wrapped");
exit_section_(b, l, m, BNF_MODIFIER, r, false, null);
return r;
}
/* ********************************************************** */
// quantified | predicate
static boolean option(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "option")) return false;
boolean r;
Marker m = enter_section_(b);
r = quantified(b, l + 1);
if (!r) r = predicate(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
/* ********************************************************** */
// '(' expression ')'
public static boolean paren_expression(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "paren_expression")) return false;
if (!nextTokenIs(b, BNF_LEFT_PAREN)) return false;
boolean r, p;
Marker m = enter_section_(b, l, _NONE_, null);
r = consumeToken(b, BNF_LEFT_PAREN);
p = r; // pin = 1
r = r && report_error_(b, expression(b, l + 1));
r = p && consumeToken(b, BNF_RIGHT_PAREN) && r;
exit_section_(b, l, m, BNF_PAREN_EXPRESSION, r, p, null);
return r || p;
}
/* ********************************************************** */
// predicate_sign simple
public static boolean predicate(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "predicate")) return false;
if (!nextTokenIs(b, "<predicate>", BNF_OP_NOT, BNF_OP_AND)) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, "<predicate>");
r = predicate_sign(b, l + 1);
r = r && simple(b, l + 1);
exit_section_(b, l, m, BNF_PREDICATE, r, false, null);
return r;
}
/* ********************************************************** */
// '&' | '!'
public static boolean predicate_sign(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "predicate_sign")) return false;
if (!nextTokenIs(b, "<predicate sign>", BNF_OP_NOT, BNF_OP_AND)) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, "<predicate sign>");
r = consumeToken(b, BNF_OP_AND);
if (!r) r = consumeToken(b, BNF_OP_NOT);
exit_section_(b, l, m, BNF_PREDICATE_SIGN, r, false, null);
return r;
}
/* ********************************************************** */
// '[' expression ']' | simple quantifier?
public static boolean quantified(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "quantified")) return false;
boolean r;
Marker m = enter_section_(b, l, _COLLAPSE_, "<quantified>");
r = quantified_0(b, l + 1);
if (!r) r = quantified_1(b, l + 1);
exit_section_(b, l, m, BNF_QUANTIFIED, r, false, null);
return r;
}
// '[' expression ']'
private static boolean quantified_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "quantified_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, BNF_LEFT_BRACKET);
r = r && expression(b, l + 1);
r = r && consumeToken(b, BNF_RIGHT_BRACKET);
exit_section_(b, m, null, r);
return r;
}
// simple quantifier?
private static boolean quantified_1(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "quantified_1")) return false;
boolean r;
Marker m = enter_section_(b);
r = simple(b, l + 1);
r = r && quantified_1_1(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
// quantifier?
private static boolean quantified_1_1(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "quantified_1_1")) return false;
quantifier(b, l + 1);
return true;
}
/* ********************************************************** */
// '?' | '+' | '*'
public static boolean quantifier(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "quantifier")) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, "<quantifier>");
r = consumeToken(b, BNF_OP_OPT);
if (!r) r = consumeToken(b, BNF_OP_ONEMORE);
if (!r) r = consumeToken(b, BNF_OP_ZEROMORE);
exit_section_(b, l, m, BNF_QUANTIFIER, r, false, null);
return r;
}
/* ********************************************************** */
// id
public static boolean reference_or_token(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "reference_or_token")) return false;
if (!nextTokenIs(b, BNF_ID)) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, BNF_ID);
exit_section_(b, m, BNF_REFERENCE_OR_TOKEN, r);
return r;
}
/* ********************************************************** */
// modifier* id '::=' expression attrs? ';'?
public static boolean rule(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "rule")) return false;
boolean r, p;
Marker m = enter_section_(b, l, _NONE_, "<rule>");
r = rule_0(b, l + 1);
r = r && consumeToken(b, BNF_ID);
r = r && consumeToken(b, BNF_OP_IS);
p = r; // pin = 3
r = r && report_error_(b, expression(b, l + 1));
r = p && report_error_(b, rule_4(b, l + 1)) && r;
r = p && rule_5(b, l + 1) && r;
exit_section_(b, l, m, BNF_RULE, r, p, rule_recover_until_parser_);
return r || p;
}
// modifier*
private static boolean rule_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "rule_0")) return false;
int c = current_position_(b);
while (true) {
if (!modifier(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "rule_0", c)) break;
c = current_position_(b);
}
return true;
}
// attrs?
private static boolean rule_4(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "rule_4")) return false;
attrs(b, l + 1);
return true;
}
// ';'?
private static boolean rule_5(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "rule_5")) return false;
consumeToken(b, BNF_SEMICOLON);
return true;
}
/* ********************************************************** */
// !'{'
static boolean rule_recover_until(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "rule_recover_until")) return false;
boolean r;
Marker m = enter_section_(b, l, _NOT_, null);
r = !consumeToken(b, BNF_LEFT_BRACE);
exit_section_(b, l, m, null, r, false, null);
return r;
}
/* ********************************************************** */
// option +
public static boolean sequence(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "sequence")) return false;
boolean r;
Marker m = enter_section_(b, l, _COLLAPSE_, "<sequence>");
r = option(b, l + 1);
int c = current_position_(b);
while (r) {
if (!option(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "sequence", c)) break;
c = current_position_(b);
}
exit_section_(b, l, m, BNF_SEQUENCE, r, false, null);
return r;
}
/* ********************************************************** */
// !(modifier* id '::=' ) reference_or_token | literal_expression | paren_expression
static boolean simple(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "simple")) return false;
boolean r;
Marker m = enter_section_(b);
r = simple_0(b, l + 1);
if (!r) r = literal_expression(b, l + 1);
if (!r) r = paren_expression(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
// !(modifier* id '::=' ) reference_or_token
private static boolean simple_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "simple_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = simple_0_0(b, l + 1);
r = r && reference_or_token(b, l + 1);
exit_section_(b, m, null, r);
return r;
}
// !(modifier* id '::=' )
private static boolean simple_0_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "simple_0_0")) return false;
boolean r;
Marker m = enter_section_(b, l, _NOT_, null);
r = !simple_0_0_0(b, l + 1);
exit_section_(b, l, m, null, r, false, null);
return r;
}
// modifier* id '::='
private static boolean simple_0_0_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "simple_0_0_0")) return false;
boolean r;
Marker m = enter_section_(b);
r = simple_0_0_0_0(b, l + 1);
r = r && consumeToken(b, BNF_ID);
r = r && consumeToken(b, BNF_OP_IS);
exit_section_(b, m, null, r);
return r;
}
// modifier*
private static boolean simple_0_0_0_0(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "simple_0_0_0_0")) return false;
int c = current_position_(b);
while (true) {
if (!modifier(b, l + 1)) break;
if (!empty_element_parsed_guard_(b, "simple_0_0_0_0", c)) break;
c = current_position_(b);
}
return true;
}
/* ********************************************************** */
// string
public static boolean string_literal_expression(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "string_literal_expression")) return false;
if (!nextTokenIs(b, BNF_STRING)) return false;
boolean r;
Marker m = enter_section_(b);
r = consumeToken(b, BNF_STRING);
exit_section_(b, m, BNF_STRING_LITERAL_EXPRESSION, r);
return r;
}
final static Parser attr_recover_until_parser_ = new Parser() {
public boolean parse(PsiBuilder b, int l) {
return attr_recover_until(b, l + 1);
}
};
final static Parser rule_recover_until_parser_ = new Parser() {
public boolean parse(PsiBuilder b, int l) {
return rule_recover_until(b, l + 1);
}
};
}

View File

@@ -0,0 +1,482 @@
/* The following code was generated by JFlex 1.4.3 on 28/01/16 11:27 */
package test;
import com.intellij.lexer.*;
import com.intellij.psi.tree.IElementType;
import static org.intellij.grammar.psi.BnfTypes.*;
/**
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 28/01/16 11:27 from the specification file
* <tt>/home/abigail/code/intellij-grammar-kit-test/src/test/_GrammarLexer.flex</tt>
*/
public class _GrammarLexer implements FlexLexer {
/** initial size of the lookahead buffer */
private static final int ZZ_BUFFERSIZE = 16384;
/** lexical states */
public static final int YYINITIAL = 0;
/**
* ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
* ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
* at the beginning of a line
* l is of the form l = 2*k, k a non negative integer
*/
private static final int ZZ_LEXSTATE[] = {
0, 0
};
/**
* Translates characters to character classes
*/
private static final String ZZ_CMAP_PACKED =
"\11\0\1\1\1\1\1\0\1\1\1\1\22\0\1\1\101\0\1\13"+
"\1\0\1\3\1\14\1\0\1\10\1\0\1\2\3\0\1\12\1\7"+
"\3\0\1\6\1\4\1\5\1\11\uff8a\0";
/**
* Translates characters to character classes
*/
private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
/**
* Translates DFA states to action switch labels.
*/
private static final int [] ZZ_ACTION = zzUnpackAction();
private static final String ZZ_ACTION_PACKED_0 =
"\1\0\1\1\1\2\3\1\1\3\10\0\1\4\1\5";
private static int [] zzUnpackAction() {
int [] result = new int[17];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
}
private static int zzUnpackAction(String packed, int offset, int [] result) {
int i = 0; /* index in packed string */
int j = offset; /* index in unpacked array */
int l = packed.length();
while (i < l) {
int count = packed.charAt(i++);
int value = packed.charAt(i++);
do result[j++] = value; while (--count > 0);
}
return j;
}
/**
* Translates a state to a row index in the transition table
*/
private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 =
"\0\0\0\15\0\32\0\47\0\64\0\101\0\15\0\116"+
"\0\133\0\150\0\165\0\202\0\217\0\234\0\251\0\15"+
"\0\15";
private static int [] zzUnpackRowMap() {
int [] result = new int[17];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
}
private static int zzUnpackRowMap(String packed, int offset, int [] result) {
int i = 0; /* index in packed string */
int j = offset; /* index in unpacked array */
int l = packed.length();
while (i < l) {
int high = packed.charAt(i++) << 16;
result[j++] = high | packed.charAt(i++);
}
return j;
}
/**
* The transition table of the DFA
*/
private static final int [] ZZ_TRANS = zzUnpackTrans();
private static final String ZZ_TRANS_PACKED_0 =
"\1\2\1\3\1\4\1\2\1\5\2\2\1\6\5\2"+
"\16\0\1\3\16\0\1\7\16\0\1\10\20\0\1\11"+
"\11\0\1\12\20\0\1\13\4\0\1\14\25\0\1\15"+
"\10\0\1\16\21\0\1\17\10\0\1\20\12\0\1\21"+
"\6\0";
private static int [] zzUnpackTrans() {
int [] result = new int[182];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
}
private static int zzUnpackTrans(String packed, int offset, int [] result) {
int i = 0; /* index in packed string */
int j = offset; /* index in unpacked array */
int l = packed.length();
while (i < l) {
int count = packed.charAt(i++);
int value = packed.charAt(i++);
value--;
do result[j++] = value; while (--count > 0);
}
return j;
}
/* error codes */
private static final int ZZ_UNKNOWN_ERROR = 0;
private static final int ZZ_NO_MATCH = 1;
private static final int ZZ_PUSHBACK_2BIG = 2;
private static final char[] EMPTY_BUFFER = new char[0];
private static final int YYEOF = -1;
private static java.io.Reader zzReader = null; // Fake
/* error messages for the codes above */
private static final String ZZ_ERROR_MSG[] = {
"Unkown internal scanner error",
"Error: could not match input",
"Error: pushback value was too large"
};
/**
* ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
*/
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\1\0\1\11\4\1\1\11\10\0\2\11";
private static int [] zzUnpackAttribute() {
int [] result = new int[17];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
}
private static int zzUnpackAttribute(String packed, int offset, int [] result) {
int i = 0; /* index in packed string */
int j = offset; /* index in unpacked array */
int l = packed.length();
while (i < l) {
int count = packed.charAt(i++);
int value = packed.charAt(i++);
do result[j++] = value; while (--count > 0);
}
return j;
}
/** the current state of the DFA */
private int zzState;
/** the current lexical state */
private int zzLexicalState = YYINITIAL;
/** this buffer contains the current text to be matched and is
the source of the yytext() string */
private CharSequence zzBuffer = "";
/** this buffer may contains the current text array to be matched when it is cheap to acquire it */
private char[] zzBufferArray;
/** the textposition at the last accepting state */
private int zzMarkedPos;
/** the textposition at the last state to be included in yytext */
private int zzPushbackPos;
/** the current text position in the buffer */
private int zzCurrentPos;
/** startRead marks the beginning of the yytext() string in the buffer */
private int zzStartRead;
/** endRead marks the last character in the buffer, that has been read
from input */
private int zzEndRead;
/**
* zzAtBOL == true <=> the scanner is currently at the beginning of a line
*/
private boolean zzAtBOL = true;
/** zzAtEOF == true <=> the scanner is at the EOF */
private boolean zzAtEOF;
/* user code: */
public _GrammarLexer() {
this((java.io.Reader)null);
}
/**
* Creates a new scanner
*
* @param in the java.io.Reader to read input from.
*/
public _GrammarLexer(java.io.Reader in) {
this.zzReader = in;
}
/**
* Unpacks the compressed character translation table.
*
* @param packed the packed character translation table
* @return the unpacked character translation table
*/
private static char [] zzUnpackCMap(String packed) {
char [] map = new char[0x10000];
int i = 0; /* index in packed string */
int j = 0; /* index in unpacked array */
while (i < 52) {
int count = packed.charAt(i++);
char value = packed.charAt(i++);
do map[j++] = value; while (--count > 0);
}
return map;
}
public final int getTokenStart(){
return zzStartRead;
}
public final int getTokenEnd(){
return getTokenStart() + yylength();
}
public void reset(CharSequence buffer, int start, int end,int initialState){
zzBuffer = buffer;
zzBufferArray = com.intellij.util.text.CharArrayUtil.fromSequenceWithoutCopying(buffer);
zzCurrentPos = zzMarkedPos = zzStartRead = start;
zzPushbackPos = 0;
zzAtEOF = false;
zzAtBOL = true;
zzEndRead = end;
yybegin(initialState);
}
/**
* Refills the input buffer.
*
* @return <code>false</code>, iff there was new input.
*
* @exception java.io.IOException if any I/O-Error occurs
*/
private boolean zzRefill() throws java.io.IOException {
return true;
}
/**
* Returns the current lexical state.
*/
public final int yystate() {
return zzLexicalState;
}
/**
* Enters a new lexical state
*
* @param newState the new lexical state
*/
public final void yybegin(int newState) {
zzLexicalState = newState;
}
/**
* Returns the text matched by the current regular expression.
*/
public final CharSequence yytext() {
return zzBuffer.subSequence(zzStartRead, zzMarkedPos);
}
/**
* Returns the character at position <tt>pos</tt> from the
* matched text.
*
* It is equivalent to yytext().charAt(pos), but faster
*
* @param pos the position of the character to fetch.
* A value from 0 to yylength()-1.
*
* @return the character at position pos
*/
public final char yycharat(int pos) {
return zzBufferArray != null ? zzBufferArray[zzStartRead+pos]:zzBuffer.charAt(zzStartRead+pos);
}
/**
* Returns the length of the matched text region.
*/
public final int yylength() {
return zzMarkedPos-zzStartRead;
}
/**
* Reports an error that occured while scanning.
*
* In a wellformed scanner (no or only correct usage of
* yypushback(int) and a match-all fallback rule) this method
* will only be called with things that "Can't Possibly Happen".
* If this method is called, something is seriously wrong
* (e.g. a JFlex bug producing a faulty scanner etc.).
*
* Usual syntax/scanner level error handling should be done
* in error fallback rules.
*
* @param errorCode the code of the errormessage to display
*/
private void zzScanError(int errorCode) {
String message;
try {
message = ZZ_ERROR_MSG[errorCode];
}
catch (ArrayIndexOutOfBoundsException e) {
message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
}
throw new Error(message);
}
/**
* Pushes the specified amount of characters back into the input stream.
*
* They will be read again by then next call of the scanning method
*
* @param number the number of characters to be read again.
* This number must not be greater than yylength()!
*/
public void yypushback(int number) {
if ( number > yylength() )
zzScanError(ZZ_PUSHBACK_2BIG);
zzMarkedPos -= number;
}
/**
* Resumes scanning until the next regular expression is matched,
* the end of input is encountered or an I/O-Error occurs.
*
* @return the next token
* @exception java.io.IOException if any I/O-Error occurs
*/
public IElementType advance() throws java.io.IOException {
int zzInput;
int zzAction;
// cached fields:
int zzCurrentPosL;
int zzMarkedPosL;
int zzEndReadL = zzEndRead;
CharSequence zzBufferL = zzBuffer;
char[] zzBufferArrayL = zzBufferArray;
char [] zzCMapL = ZZ_CMAP;
int [] zzTransL = ZZ_TRANS;
int [] zzRowMapL = ZZ_ROWMAP;
int [] zzAttrL = ZZ_ATTRIBUTE;
while (true) {
zzMarkedPosL = zzMarkedPos;
zzAction = -1;
zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
zzState = ZZ_LEXSTATE[zzLexicalState];
zzForAction: {
while (true) {
if (zzCurrentPosL < zzEndReadL)
zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
else if (zzAtEOF) {
zzInput = YYEOF;
break zzForAction;
}
else {
// store back cached positions
zzCurrentPos = zzCurrentPosL;
zzMarkedPos = zzMarkedPosL;
boolean eof = zzRefill();
// get translated positions and possibly new buffer
zzCurrentPosL = zzCurrentPos;
zzMarkedPosL = zzMarkedPos;
zzBufferL = zzBuffer;
zzEndReadL = zzEndRead;
if (eof) {
zzInput = YYEOF;
break zzForAction;
}
else {
zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
}
}
int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
if (zzNext == -1) break zzForAction;
zzState = zzNext;
int zzAttributes = zzAttrL[zzState];
if ( (zzAttributes & 1) == 1 ) {
zzAction = zzState;
zzMarkedPosL = zzCurrentPosL;
if ( (zzAttributes & 8) == 8 ) break zzForAction;
}
}
}
// store back cached position
zzMarkedPos = zzMarkedPosL;
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
case 1:
{ return com.intellij.psi.TokenType.BAD_CHARACTER;
}
case 6: break;
case 4:
{ return BNF_STRING;
}
case 7: break;
case 5:
{ return BNF_NUMBER;
}
case 8: break;
case 3:
{ return BNF_ID;
}
case 9: break;
case 2:
{ return com.intellij.psi.TokenType.WHITE_SPACE;
}
case 10: break;
default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
return null;
}
else {
zzScanError(ZZ_NO_MATCH);
}
}
}
}
}

View File

@@ -0,0 +1,19 @@
// title : OpenJSCAD.org Logo
// author : Rene K. Mueller
// license : MIT License
// revision : 0.003
// tags : Logo,Intersection,Sphere,Cube
// file : logo.jscad
function main() {
return union(
difference(
cube({size: 3, center: true}),
sphere({r:2, center: true})
),
intersection(
sphere({r: 1.3, center: true}),
cube({size: 2.1, center: true})
)
).translate([0,0,1.5]).scale(10);
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,928 @@
(kicad_pcb (version 4) (host pcbnew "(2014-08-05 BZR 5054)-product")
(general
(links 36)
(no_connects 0)
(area 146.9984 92.8984 164.465656 112.3572)
(thickness 1.6)
(drawings 0)
(tracks 108)
(zones 0)
(modules 12)
(nets 54)
)
(page A4)
(layers
(0 F.Cu signal)
(31 B.Cu signal)
(32 B.Adhes user)
(33 F.Adhes user)
(34 B.Paste user)
(35 F.Paste user)
(36 B.SilkS user)
(37 F.SilkS user)
(38 B.Mask user)
(39 F.Mask user)
(40 Dwgs.User user)
(41 Cmts.User user)
(42 Eco1.User user)
(43 Eco2.User user)
(44 Edge.Cuts user)
(45 Margin user)
(46 B.CrtYd user)
(47 F.CrtYd user)
(48 B.Fab user)
(49 F.Fab user)
)
(setup
(last_trace_width 0.1016)
(trace_clearance 0.1016)
(zone_clearance 0.2032)
(zone_45_only no)
(trace_min 0.1016)
(segment_width 0.2)
(edge_width 0.1)
(via_size 0.889)
(via_drill 0.635)
(via_min_size 0.889)
(via_min_drill 0.508)
(uvia_size 0.508)
(uvia_drill 0.127)
(uvias_allowed no)
(uvia_min_size 0.508)
(uvia_min_drill 0.127)
(pcb_text_width 0.3)
(pcb_text_size 1.5 1.5)
(mod_edge_width 0.15)
(mod_text_size 1 1)
(mod_text_width 0.15)
(pad_size 0.2 0.2)
(pad_drill 0)
(pad_to_mask_clearance 0)
(aux_axis_origin 0 0)
(visible_elements FFFCFF7F)
(pcbplotparams
(layerselection 0x00000_00000001)
(usegerberextensions false)
(excludeedgelayer true)
(linewidth 0.100000)
(plotframeref false)
(viasonmask false)
(mode 1)
(useauxorigin false)
(hpglpennumber 1)
(hpglpenspeed 20)
(hpglpendiameter 15)
(hpglpenoverlay 2)
(psnegative false)
(psa4output false)
(plotreference true)
(plotvalue true)
(plotinvisibletext false)
(padsonsilk false)
(subtractmaskfromsilk false)
(outputformat 5)
(mirror true)
(drillshape 0)
(scaleselection 1)
(outputdirectory pdfs/))
)
(net 0 "")
(net 1 "Net-(C1-Pad1)")
(net 2 GND)
(net 3 "Net-(C2-Pad1)")
(net 4 "Net-(C3-Pad1)")
(net 5 "Net-(C4-Pad2)")
(net 6 "Net-(D1-Pad1)")
(net 7 +BATT)
(net 8 SWDIO)
(net 9 SWCLK)
(net 10 LED)
(net 11 "Net-(U1-PadC1)")
(net 12 "Net-(U1-PadD1)")
(net 13 "Net-(U1-PadG1)")
(net 14 "Net-(U1-PadE2)")
(net 15 "Net-(U1-PadF2)")
(net 16 "Net-(U1-PadG2)")
(net 17 "Net-(U1-PadE3)")
(net 18 "Net-(U1-PadF3)")
(net 19 "Net-(U1-PadG3)")
(net 20 "Net-(U1-PadH4)")
(net 21 "Net-(U1-PadA5)")
(net 22 "Net-(U1-PadB5)")
(net 23 "Net-(U1-PadC5)")
(net 24 "Net-(U1-PadH5)")
(net 25 "Net-(U1-PadA6)")
(net 26 "Net-(U1-PadB6)")
(net 27 "Net-(U1-PadC6)")
(net 28 "Net-(U1-PadH6)")
(net 29 "Net-(U1-PadA7)")
(net 30 "Net-(U1-PadB7)")
(net 31 "Net-(U1-PadC7)")
(net 32 "Net-(U1-PadE7)")
(net 33 "Net-(U1-PadF7)")
(net 34 "Net-(U1-PadG7)")
(net 35 "Net-(U1-PadH7)")
(net 36 "Net-(U1-PadA8)")
(net 37 "Net-(U1-PadD8)")
(net 38 "Net-(U1-PadE8)")
(net 39 "Net-(U1-PadF8)")
(net 40 "Net-(U1-PadG8)")
(net 41 "Net-(U1-PadH8)")
(net 42 "Net-(U1-PadE9)")
(net 43 "Net-(U1-PadF9)")
(net 44 "Net-(U1-PadH1)")
(net 45 "Net-(U1-PadJ3)")
(net 46 "Net-(U1-PadJ4)")
(net 47 "Net-(U1-PadJ5)")
(net 48 "Net-(U1-PadJ6)")
(net 49 "Net-(U1-PadJ7)")
(net 50 "Net-(U1-PadJ8)")
(net 51 "Net-(U1-PadH9)")
(net 52 "Net-(C5-Pad1)")
(net 53 "Net-(ANT1-Pad2)")
(net_class Default "This is the default net class."
(clearance 0.1016)
(trace_width 0.1016)
(via_dia 0.889)
(via_drill 0.635)
(uvia_dia 0.508)
(uvia_drill 0.127)
(add_net +BATT)
(add_net LED)
(add_net "Net-(C1-Pad1)")
(add_net "Net-(C2-Pad1)")
(add_net "Net-(C3-Pad1)")
(add_net "Net-(C4-Pad2)")
(add_net "Net-(C5-Pad1)")
(add_net "Net-(D1-Pad1)")
(add_net "Net-(U1-PadA5)")
(add_net "Net-(U1-PadA6)")
(add_net "Net-(U1-PadA7)")
(add_net "Net-(U1-PadA8)")
(add_net "Net-(U1-PadB5)")
(add_net "Net-(U1-PadB6)")
(add_net "Net-(U1-PadB7)")
(add_net "Net-(U1-PadC1)")
(add_net "Net-(U1-PadC5)")
(add_net "Net-(U1-PadC6)")
(add_net "Net-(U1-PadC7)")
(add_net "Net-(U1-PadD1)")
(add_net "Net-(U1-PadD8)")
(add_net "Net-(U1-PadE2)")
(add_net "Net-(U1-PadE3)")
(add_net "Net-(U1-PadE7)")
(add_net "Net-(U1-PadE8)")
(add_net "Net-(U1-PadE9)")
(add_net "Net-(U1-PadF2)")
(add_net "Net-(U1-PadF3)")
(add_net "Net-(U1-PadF7)")
(add_net "Net-(U1-PadF8)")
(add_net "Net-(U1-PadF9)")
(add_net "Net-(U1-PadG1)")
(add_net "Net-(U1-PadG2)")
(add_net "Net-(U1-PadG3)")
(add_net "Net-(U1-PadG7)")
(add_net "Net-(U1-PadG8)")
(add_net "Net-(U1-PadH1)")
(add_net "Net-(U1-PadH4)")
(add_net "Net-(U1-PadH5)")
(add_net "Net-(U1-PadH6)")
(add_net "Net-(U1-PadH7)")
(add_net "Net-(U1-PadH8)")
(add_net "Net-(U1-PadH9)")
(add_net "Net-(U1-PadJ3)")
(add_net "Net-(U1-PadJ4)")
(add_net "Net-(U1-PadJ5)")
(add_net "Net-(U1-PadJ6)")
(add_net "Net-(U1-PadJ7)")
(add_net "Net-(U1-PadJ8)")
(add_net SWCLK)
(add_net SWDIO)
)
(net_class ANT ""
(clearance 0.1016)
(trace_width 0.254)
(via_dia 0.889)
(via_drill 0.635)
(uvia_dia 0.508)
(uvia_drill 0.127)
(add_net GND)
(add_net "Net-(ANT1-Pad2)")
)
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B59067)
(at 153.75 102.5 270)
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
(tags "capacitor 0402")
(path /54B59137)
(attr smd)
(fp_text reference C1 (at 0 -1.7 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 12p (at 0 1.7 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
(pad 1 smd rect (at -0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 "Net-(C1-Pad1)"))
(pad 2 smd rect (at 0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(model Capacitors_SMD/C_0402.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B58E0D)
(at 159.004 100.711)
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
(tags "capacitor 0402")
(path /54B591B6)
(attr smd)
(fp_text reference C2 (at 0 -1.7) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 12p (at 0 1.7) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
(pad 1 smd rect (at -0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 3 "Net-(C2-Pad1)"))
(pad 2 smd rect (at 0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(model Capacitors_SMD/C_0402.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B59E9D)
(at 159.004 102.1588)
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
(tags "capacitor 0402")
(path /54B58D67)
(attr smd)
(fp_text reference C3 (at 0 -1.7) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 100n (at 0 1.7) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
(pad 1 smd rect (at -0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 4 "Net-(C3-Pad1)"))
(pad 2 smd rect (at 0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(model Capacitors_SMD/C_0402.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B58E25)
(at 154.15 106.55 90)
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
(tags "capacitor 0402")
(path /54B58DD5)
(attr smd)
(fp_text reference C4 (at 0 -1.7 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 100n (at 0 1.7 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
(pad 1 smd rect (at -0.55 0 90) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 2 smd rect (at 0.55 0 90) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 5 "Net-(C4-Pad2)"))
(model Capacitors_SMD/C_0402.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module SMD_Packages:SMD-0805 (layer F.Cu) (tedit 54B58D88) (tstamp 54B58E32)
(at 162.0266 104.9782 90)
(path /54B599BA)
(attr smd)
(fp_text reference D1 (at 0 -0.3175 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value LED (at 0 0.381 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.15))
(fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.15))
(fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.15))
(fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.15))
(fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.15))
(fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.15))
(fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.15))
(pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers F.Cu F.Paste F.Mask)
(net 6 "Net-(D1-Pad1)"))
(pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(model SMD_Packages/SMD-0805.wrl
(at (xyz 0 0 0))
(scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
(rotate (xyz 0 0 0))
)
)
(module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 54B58D8A) (tstamp 54B58E41)
(at 156.7942 109.1946 180)
(descr "Through hole pin header")
(tags "pin header")
(path /54B593BB)
(fp_text reference P1 (at 0 -2.286 180) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value CONN_01X04 (at 0 0 180) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.54 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.15))
(fp_line (start -2.54 -1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.15))
(fp_line (start -5.08 -1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.15))
(fp_line (start 5.08 1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.15))
(fp_line (start -2.54 -1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.15))
(fp_line (start -5.08 -1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.15))
(fp_line (start -5.08 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.15))
(pad 1 thru_hole rect (at -3.81 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 2 GND))
(pad 2 thru_hole oval (at -1.27 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 7 +BATT))
(pad 3 thru_hole oval (at 1.27 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 8 SWDIO))
(pad 4 thru_hole oval (at 3.81 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 9 SWCLK))
(model Pin_Headers/Pin_Header_Straight_1x04.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 54B59E20)
(at 160.0454 105.0544 270)
(descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)")
(tags "resistor 0603")
(path /54B59A45)
(attr smd)
(fp_text reference R1 (at 0 -1.9 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value R (at 0 1.9 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15))
(fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15))
(pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask)
(net 10 LED))
(pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask)
(net 6 "Net-(D1-Pad1)"))
(model Resistors_SMD/R_0603.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Crystals_Oscillators_SMD:CX2520DB (layer F.Cu) (tedit 544FEDED) (tstamp 54B58E9A)
(at 156.1084 101.3714)
(path /54B5903E)
(fp_text reference X1 (at 0 -2.25) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value CRYSTAL (at 0 2.5) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.25 1) (end 1.25 1) (layer F.SilkS) (width 0.15))
(fp_line (start 1.25 1) (end 1.25 -1) (layer F.SilkS) (width 0.15))
(fp_line (start 1.25 -1) (end -1.25 -1) (layer F.SilkS) (width 0.15))
(fp_line (start -1.25 -1) (end -1.25 1) (layer F.SilkS) (width 0.15))
(pad 1 smd rect (at -0.9 0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask)
(net 1 "Net-(C1-Pad1)"))
(pad 2 smd rect (at 0.9 -0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask)
(net 3 "Net-(C2-Pad1)"))
(pad 3 smd rect (at 0.9 0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at -0.9 -0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask))
)
(module NRF51:WLCSP62 (layer F.Cu) (tedit 54B59368) (tstamp 54B59DAD)
(at 156.9212 105.1306)
(path /54B58C30)
(fp_text reference U1 (at 0 3.2) (layer F.SilkS)
(effects (font (size 1.2 1.2) (thickness 0.2)))
)
(fp_text value nRF51x22-CEAA (at 0 -3.2) (layer F.SilkS)
(effects (font (size 1.2 1.2) (thickness 0.2)))
)
(fp_line (start -1.6 -2) (end -2 -1.6) (layer F.SilkS) (width 0.2))
(fp_line (start -2 -1.6) (end -2 2) (layer F.SilkS) (width 0.2))
(fp_line (start -2 2) (end 2 2) (layer F.SilkS) (width 0.2))
(fp_line (start 2 2) (end 2 -2) (layer F.SilkS) (width 0.2))
(fp_line (start 2 -2) (end -1.6 -2) (layer F.SilkS) (width 0.2))
(pad A1 smd circle (at -1.6 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 7 +BATT))
(pad B1 smd circle (at -1.6 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad C1 smd circle (at -1.6 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 11 "Net-(U1-PadC1)"))
(pad D1 smd circle (at -1.6 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 12 "Net-(U1-PadD1)"))
(pad E1 smd circle (at -1.6 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 52 "Net-(C5-Pad1)"))
(pad F1 smd circle (at -1.6 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 5 "Net-(C4-Pad2)"))
(pad G1 smd circle (at -1.6 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 13 "Net-(U1-PadG1)"))
(pad H1 smd circle (at -1.6 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 44 "Net-(U1-PadH1)"))
(pad A2 smd circle (at -1.2 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 1 "Net-(C1-Pad1)"))
(pad E2 smd circle (at -1.2 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 14 "Net-(U1-PadE2)"))
(pad F2 smd circle (at -1.2 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 15 "Net-(U1-PadF2)"))
(pad G2 smd circle (at -1.2 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 16 "Net-(U1-PadG2)"))
(pad H2 smd circle (at -1.2 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 9 SWCLK))
(pad J2 smd circle (at -1.2 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 8 SWDIO))
(pad A3 smd circle (at -0.8 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 3 "Net-(C2-Pad1)"))
(pad E3 smd circle (at -0.8 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 17 "Net-(U1-PadE3)"))
(pad F3 smd circle (at -0.8 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 18 "Net-(U1-PadF3)"))
(pad G3 smd circle (at -0.8 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 19 "Net-(U1-PadG3)"))
(pad H3 smd circle (at -0.8 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad J3 smd circle (at -0.8 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 45 "Net-(U1-PadJ3)"))
(pad A4 smd circle (at -0.4 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 4 "Net-(C3-Pad1)"))
(pad B4 smd circle (at -0.4 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad G4 smd circle (at -0.4 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad H4 smd circle (at -0.4 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 20 "Net-(U1-PadH4)"))
(pad J4 smd circle (at -0.4 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 46 "Net-(U1-PadJ4)"))
(pad A5 smd circle (at 0 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 21 "Net-(U1-PadA5)"))
(pad B5 smd circle (at 0 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 22 "Net-(U1-PadB5)"))
(pad C5 smd circle (at 0 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 23 "Net-(U1-PadC5)"))
(pad G5 smd circle (at 0 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad H5 smd circle (at 0 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 24 "Net-(U1-PadH5)"))
(pad J5 smd circle (at 0 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 47 "Net-(U1-PadJ5)"))
(pad A6 smd circle (at 0.4 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 25 "Net-(U1-PadA6)"))
(pad B6 smd circle (at 0.4 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 26 "Net-(U1-PadB6)"))
(pad C6 smd circle (at 0.4 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 27 "Net-(U1-PadC6)"))
(pad G6 smd circle (at 0.4 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad H6 smd circle (at 0.4 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 28 "Net-(U1-PadH6)"))
(pad J6 smd circle (at 0.4 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 48 "Net-(U1-PadJ6)"))
(pad A7 smd circle (at 0.8 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 29 "Net-(U1-PadA7)"))
(pad B7 smd circle (at 0.8 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 30 "Net-(U1-PadB7)"))
(pad C7 smd circle (at 0.8 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 31 "Net-(U1-PadC7)"))
(pad D7 smd circle (at 0.8 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad E7 smd circle (at 0.8 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 32 "Net-(U1-PadE7)"))
(pad F7 smd circle (at 0.8 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 33 "Net-(U1-PadF7)"))
(pad G7 smd circle (at 0.8 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 34 "Net-(U1-PadG7)"))
(pad H7 smd circle (at 0.8 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 35 "Net-(U1-PadH7)"))
(pad J7 smd circle (at 0.8 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 49 "Net-(U1-PadJ7)"))
(pad A8 smd circle (at 1.2 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 36 "Net-(U1-PadA8)"))
(pad B8 smd circle (at 1.2 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 7 +BATT))
(pad C8 smd circle (at 1.2 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad D8 smd circle (at 1.2 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 37 "Net-(U1-PadD8)"))
(pad E8 smd circle (at 1.2 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 38 "Net-(U1-PadE8)"))
(pad F8 smd circle (at 1.2 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 39 "Net-(U1-PadF8)"))
(pad G8 smd circle (at 1.2 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 40 "Net-(U1-PadG8)"))
(pad H8 smd circle (at 1.2 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 41 "Net-(U1-PadH8)"))
(pad J8 smd circle (at 1.2 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 50 "Net-(U1-PadJ8)"))
(pad A9 smd circle (at 1.6 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask))
(pad B9 smd circle (at 1.6 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 7 +BATT))
(pad C9 smd circle (at 1.6 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad D9 smd circle (at 1.6 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 10 LED))
(pad E9 smd circle (at 1.6 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 42 "Net-(U1-PadE9)"))
(pad F9 smd circle (at 1.6 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 43 "Net-(U1-PadF9)"))
(pad G9 smd circle (at 1.6 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad H9 smd circle (at 1.6 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 51 "Net-(U1-PadH9)"))
)
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 55048D3E)
(at 153 106.55 270)
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
(tags "capacitor 0402")
(path /550483E1)
(attr smd)
(fp_text reference C5 (at 0 -1.7 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 2n2 (at 0 1.7 270) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
(pad 1 smd rect (at -0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 52 "Net-(C5-Pad1)"))
(pad 2 smd rect (at 0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(model Capacitors_SMD.3dshapes/C_0402.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module ANT:ANT-2.4GHz (layer F.Cu) (tedit 54517711) (tstamp 55049531)
(at 149.35 106.95 90)
(path /55047C3D)
(fp_text reference ANT1 (at -2.5 1.5 90) (layer F.SilkS)
(effects (font (size 0.4 0.4) (thickness 0.04)))
)
(fp_text value ANT-2.4GHz (at -2 2 90) (layer F.SilkS)
(effects (font (size 0.4 0.4) (thickness 0.04)))
)
(pad 1 smd rect (at 0 0 90) (size 0.9 4.9) (layers F.Cu)
(net 2 GND))
(pad 3 smd rect (at 2.05 -2.7 90) (size 5 0.5) (layers F.Cu))
(pad 2 smd rect (at 2.1 0 90) (size 0.5 4.9) (layers F.Cu)
(net 53 "Net-(ANT1-Pad2)"))
(pad 3 smd rect (at 4.3 -1.13 90) (size 0.5 2.64) (layers F.Cu))
(pad 3 smd rect (at 6.8 -1.13 90) (size 0.5 2.64) (layers F.Cu))
(pad 3 smd rect (at 5.55 -0.06 90) (size 2 0.5) (layers F.Cu))
(pad 3 smd rect (at 7.9 -2.7 90) (size 2.7 0.5) (layers F.Cu))
(pad 3 smd rect (at 12.6 -2.7 90) (size 2.7 0.5) (layers F.Cu))
(pad 3 smd rect (at 9 -1.13 90) (size 0.5 2.64) (layers F.Cu))
(pad 3 smd rect (at 11.5 -1.13 90) (size 0.5 2.64) (layers F.Cu))
(pad 3 smd rect (at 10.25 -0.06 90) (size 2 0.5) (layers F.Cu))
(pad 3 smd rect (at 13.7 -0.48 90) (size 0.5 3.94) (layers F.Cu))
)
(module NRF51:BAL-NRF02D3 (layer F.Cu) (tedit 550C7CF1) (tstamp 55048D47)
(at 153.65 104.55 180)
(path /550480A2)
(fp_text reference U2 (at 0 1.95 180) (layer F.SilkS)
(effects (font (size 1.2 1.2) (thickness 0.2)))
)
(fp_text value BAL-NRF02D3 (at 0 -1.95 180) (layer F.SilkS)
(effects (font (size 1.2 1.2) (thickness 0.2)))
)
(fp_circle (center 0.75 -1.25) (end 1 -1.25) (layer F.SilkS) (width 0.15))
(fp_line (start -1 -0.75) (end -1 0.75) (layer F.SilkS) (width 0.2))
(fp_line (start -1 0.75) (end 1 0.75) (layer F.SilkS) (width 0.2))
(fp_line (start 1 0.75) (end 1 -0.75) (layer F.SilkS) (width 0.2))
(fp_line (start 1 -0.75) (end -1 -0.75) (layer F.SilkS) (width 0.2))
(pad A3 smd circle (at -0.5 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 12 "Net-(U1-PadD1)"))
(pad B3 smd circle (at -0.5 0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 11 "Net-(U1-PadC1)"))
(pad A2 smd circle (at 0 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 52 "Net-(C5-Pad1)"))
(pad A1 smd circle (at 0.5 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 53 "Net-(ANT1-Pad2)"))
(pad B1 smd circle (at 0.5 0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
)
(segment (start 155.7212 102.5342) (end 155.2084 102.0214) (width 0.1016) (layer F.Cu) (net 1))
(segment (start 155.7212 103.5306) (end 155.7212 102.5342) (width 0.1016) (layer F.Cu) (net 1))
(segment (start 155.137 101.95) (end 155.2084 102.0214) (width 0.1016) (layer F.Cu) (net 1) (tstamp 55048FFD))
(segment (start 153.75 101.95) (end 155.137 101.95) (width 0.1016) (layer F.Cu) (net 1))
(segment (start 156.947646 104.7306) (end 156.7306 104.7306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 156.7306 104.7306) (end 156.5212 104.5212) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 156.5212 104.5212) (end 156.5212 104.072021) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 156.5212 104.072021) (end 156.5212 103.9306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 156.1212 106.3306) (end 156.5212 105.9306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 156.5212 105.9306) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 157.3212 105.9306) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 157.7212 104.7306) (end 156.947646 104.7306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 156.5212 103.9306) (end 155.3212 103.9306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 156.9212 104.757046) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 156.947646 104.7306) (end 156.9212 104.757046) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 157.7212 104.7306) (end 158.1212 104.3306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 158.1212 104.3306) (end 158.5212 104.3306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 161.2265 103.4796) (end 161.7726 104.0257) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 159.3722 103.4796) (end 161.2265 103.4796) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 161.7726 104.0257) (end 162.0266 104.0257) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 159.554 101.0626) (end 159.554 102.1588) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 159.554 100.711) (end 159.554 101.0626) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 159.3722 102.6922) (end 159.3722 103.4796) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 159.554 102.5104) (end 159.3722 102.6922) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 159.554 102.1588) (end 159.554 102.5104) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 159.3722 103.621021) (end 159.3722 103.4796) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 158.5212 104.3306) (end 158.662621 104.3306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 158.662621 104.3306) (end 159.3722 103.621021) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 155.0306 103.9306) (end 154.15 103.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55048FDD))
(segment (start 154.15 103.05) (end 153.75 103.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55048FEF))
(segment (start 155.3212 103.9306) (end 155.0306 103.9306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 154.15 107.1) (end 153 107.1) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 160.6042 108.3542) (end 160.6042 109.1946) (width 0.1016) (layer F.Cu) (net 2) (tstamp 5504935E))
(segment (start 158.5212 105.9306) (end 159.05 105.9306) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 160.85 105.05) (end 159.4 105.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049373))
(segment (start 159.4 105.05) (end 159.05 105.4) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049377))
(segment (start 159.05 105.4) (end 159.05 105.9306) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049378))
(segment (start 161.8743 104.0257) (end 160.85 105.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049366))
(segment (start 162.0266 104.0257) (end 161.8743 104.0257) (width 0.1016) (layer F.Cu) (net 2))
(segment (start 149.5 107.1) (end 149.35 106.95) (width 0.1016) (layer F.Cu) (net 2) (tstamp 5504964A) (status 30))
(segment (start 149.5 107.1) (end 149.35 106.95) (width 0.254) (layer F.Cu) (net 2) (tstamp 5504967F) (status 30))
(segment (start 153 107.1) (end 149.5 107.1) (width 0.254) (layer F.Cu) (net 2) (status 20))
(segment (start 158.4436 100.7214) (end 158.454 100.711) (width 0.1016) (layer F.Cu) (net 3))
(segment (start 157.0084 100.7214) (end 158.4436 100.7214) (width 0.1016) (layer F.Cu) (net 3))
(segment (start 156.6786 100.7214) (end 157.0084 100.7214) (width 0.1016) (layer F.Cu) (net 3))
(segment (start 156.1084 101.2916) (end 156.6786 100.7214) (width 0.1016) (layer F.Cu) (net 3))
(segment (start 156.1084 103.5178) (end 156.1084 101.2916) (width 0.1016) (layer F.Cu) (net 3))
(segment (start 156.1212 103.5306) (end 156.1084 103.5178) (width 0.1016) (layer F.Cu) (net 3))
(segment (start 156.5212 103.389179) (end 157.014979 102.8954) (width 0.1016) (layer F.Cu) (net 4))
(segment (start 156.5212 103.5306) (end 156.5212 103.389179) (width 0.1016) (layer F.Cu) (net 4))
(segment (start 157.6674 102.8954) (end 158.404 102.1588) (width 0.1016) (layer F.Cu) (net 4))
(segment (start 158.404 102.1588) (end 158.454 102.1588) (width 0.1016) (layer F.Cu) (net 4))
(segment (start 157.014979 102.8954) (end 157.6674 102.8954) (width 0.1016) (layer F.Cu) (net 4))
(segment (start 154.45 106) (end 154.9194 105.5306) (width 0.1016) (layer F.Cu) (net 5) (tstamp 5504901F))
(segment (start 154.9194 105.5306) (end 155.3212 105.5306) (width 0.1016) (layer F.Cu) (net 5) (tstamp 55049021))
(segment (start 154.15 106) (end 154.45 106) (width 0.1016) (layer F.Cu) (net 5))
(segment (start 160.1717 105.9307) (end 160.0454 105.8044) (width 0.1016) (layer F.Cu) (net 6))
(segment (start 162.0266 105.9307) (end 160.1717 105.9307) (width 0.1016) (layer F.Cu) (net 6))
(segment (start 159 99.9) (end 159.05 99.9) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 159.35 99.6) (end 161.2 99.6) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 158.25 111.15) (end 158.0642 110.9642) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 159.05 99.9) (end 159.35 99.6) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 161.2 99.6) (end 163.35 101.75) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 163.35 101.75) (end 163.35 110.35) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 163.35 110.35) (end 162.55 111.15) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 158.0642 110.9642) (end 158.0642 109.1946) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 162.55 111.15) (end 158.25 111.15) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 158.5212 103.9306) (end 158.1212 103.9306) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 158.0642 109.347) (end 158.0642 109.1946) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 159 99.9) (end 159 103.593221) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 158.662621 103.9306) (end 158.5212 103.9306) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 154.1 99.6) (end 158.7 99.6) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 153 102.3) (end 153 100.7) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 153.2 102.5) (end 153 102.3) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 158.7 99.6) (end 159 99.9) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 154.2906 102.5) (end 153.2 102.5) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 159 103.593221) (end 158.662621 103.9306) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 153 100.7) (end 154.1 99.6) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 155.3212 103.5306) (end 154.2906 102.5) (width 0.1016) (layer F.Cu) (net 7))
(segment (start 155.7212 108.9976) (end 155.5242 109.1946) (width 0.1016) (layer F.Cu) (net 8))
(segment (start 155.7212 106.7306) (end 155.7212 108.9976) (width 0.1016) (layer F.Cu) (net 8))
(segment (start 152.9842 109.0676) (end 152.9842 109.1946) (width 0.1016) (layer F.Cu) (net 9))
(segment (start 152.9842 109.1946) (end 152.9842 109.0422) (width 0.1016) (layer F.Cu) (net 9))
(segment (start 155.2018 106.85) (end 155.7212 106.3306) (width 0.1016) (layer F.Cu) (net 9) (tstamp 55049280))
(segment (start 155.1 106.95) (end 155.2 106.85) (width 0.1016) (layer F.Cu) (net 9))
(segment (start 155.1 107.35) (end 155.1 106.95) (width 0.1016) (layer F.Cu) (net 9))
(segment (start 154.55 107.9) (end 155.1 107.35) (width 0.1016) (layer F.Cu) (net 9))
(segment (start 154.1264 107.9) (end 154.55 107.9) (width 0.1016) (layer F.Cu) (net 9))
(segment (start 152.9842 109.0422) (end 154.1264 107.9) (width 0.1016) (layer F.Cu) (net 9))
(segment (start 155.2 106.85) (end 155.2018 106.85) (width 0.1016) (layer F.Cu) (net 9))
(segment (start 160.0454 104.3044) (end 159.4938 104.3044) (width 0.1016) (layer F.Cu) (net 10))
(segment (start 158.662621 104.7306) (end 158.5212 104.7306) (width 0.1016) (layer F.Cu) (net 10))
(segment (start 159.0676 104.7306) (end 158.662621 104.7306) (width 0.1016) (layer F.Cu) (net 10))
(segment (start 159.4938 104.3044) (end 159.0676 104.7306) (width 0.1016) (layer F.Cu) (net 10))
(segment (start 154.1806 104.3306) (end 154.15 104.3) (width 0.1016) (layer F.Cu) (net 11) (tstamp 5504938B))
(segment (start 155.3212 104.3306) (end 154.1806 104.3306) (width 0.1016) (layer F.Cu) (net 11))
(segment (start 154.2194 104.7306) (end 154.15 104.8) (width 0.1016) (layer F.Cu) (net 12) (tstamp 55049388))
(segment (start 155.3212 104.7306) (end 154.2194 104.7306) (width 0.1016) (layer F.Cu) (net 12))
(segment (start 155.3212 105.1306) (end 154.7194 105.1306) (width 0.1016) (layer F.Cu) (net 52))
(segment (start 154.7194 105.1306) (end 154.6 105.25) (width 0.1016) (layer F.Cu) (net 52))
(segment (start 154.6 105.25) (end 153.65 105.25) (width 0.1016) (layer F.Cu) (net 52))
(segment (start 153.65 105.25) (end 153.65 104.8) (width 0.1016) (layer F.Cu) (net 52) (tstamp 5504901A))
(segment (start 153.6 105.3) (end 153.65 105.25) (width 0.1016) (layer F.Cu) (net 52) (tstamp 55049386))
(segment (start 153 105.9) (end 153.6 105.3) (width 0.1016) (layer F.Cu) (net 52) (tstamp 55049018))
(segment (start 153 106) (end 153 105.9) (width 0.1016) (layer F.Cu) (net 52))
(segment (start 149.4 104.8) (end 149.35 104.85) (width 0.1016) (layer F.Cu) (net 53) (tstamp 55049543) (status 30))
(segment (start 153.1 104.85) (end 153.15 104.8) (width 0.254) (layer F.Cu) (net 53) (tstamp 550495A4))
(segment (start 149.35 104.85) (end 153.1 104.85) (width 0.254) (layer F.Cu) (net 53) (status 10))
(zone (net 2) (net_name GND) (layer F.Cu) (tstamp 550C7F83) (hatch edge 0.508)
(connect_pads (clearance 0.2032))
(min_thickness 0.1524)
(fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5))
(polygon
(pts
(xy 164 111.85) (xy 151.5 111.85) (xy 151.5 97.15) (xy 164 97.15)
)
)
(filled_polygon
(pts
(xy 163.9238 111.318437) (xy 163.468437 111.7738) (xy 152.031563 111.7738) (xy 151.5762 111.318437) (xy 151.5762 107.6794)
(xy 151.744424 107.6794) (xy 151.855576 107.6794) (xy 151.958267 107.636864) (xy 152.036864 107.558267) (xy 152.0794 107.455576)
(xy 152.0794 107.02112) (xy 152.00955 106.95127) (xy 151.5762 106.95127) (xy 151.5762 106.94873) (xy 152.00955 106.94873)
(xy 152.0794 106.87888) (xy 152.0794 106.444424) (xy 152.036864 106.341733) (xy 151.958267 106.263136) (xy 151.855576 106.2206)
(xy 151.744424 106.2206) (xy 151.5762 106.2206) (xy 151.5762 105.3794) (xy 151.855576 105.3794) (xy 151.958267 105.336864)
(xy 152.036864 105.258267) (xy 152.037637 105.2564) (xy 153.1 105.2564) (xy 153.195652 105.237373) (xy 153.012426 105.4206)
(xy 152.694424 105.4206) (xy 152.591733 105.463136) (xy 152.513136 105.541733) (xy 152.4706 105.644424) (xy 152.4706 105.755576)
(xy 152.4706 106.355576) (xy 152.513136 106.458267) (xy 152.591733 106.536864) (xy 152.623446 106.55) (xy 152.591733 106.563136)
(xy 152.513136 106.641733) (xy 152.4706 106.744424) (xy 152.4706 107.02888) (xy 152.54045 107.09873) (xy 152.99873 107.09873)
(xy 152.99873 107.07873) (xy 153.00127 107.07873) (xy 153.00127 107.09873) (xy 153.45955 107.09873) (xy 153.5294 107.02888)
(xy 153.5294 106.744424) (xy 153.486864 106.641733) (xy 153.408267 106.563136) (xy 153.376553 106.55) (xy 153.408267 106.536864)
(xy 153.486864 106.458267) (xy 153.5294 106.355576) (xy 153.5294 106.244424) (xy 153.5294 105.837574) (xy 153.6206 105.746374)
(xy 153.6206 105.755576) (xy 153.6206 106.355576) (xy 153.663136 106.458267) (xy 153.741733 106.536864) (xy 153.773446 106.55)
(xy 153.741733 106.563136) (xy 153.663136 106.641733) (xy 153.6206 106.744424) (xy 153.6206 107.02888) (xy 153.69045 107.09873)
(xy 154.14873 107.09873) (xy 154.14873 107.07873) (xy 154.15127 107.07873) (xy 154.15127 107.09873) (xy 154.60955 107.09873)
(xy 154.6794 107.02888) (xy 154.6794 106.744424) (xy 154.636864 106.641733) (xy 154.558267 106.563136) (xy 154.526553 106.55)
(xy 154.558267 106.536864) (xy 154.636864 106.458267) (xy 154.6794 106.355576) (xy 154.6794 106.244424) (xy 154.6794 106.236217)
(xy 154.683487 106.233487) (xy 154.7968 106.120174) (xy 154.7968 106.634168) (xy 154.872829 106.710197) (xy 154.866513 106.716513)
(xy 154.794935 106.823638) (xy 154.7698 106.95) (xy 154.7698 107.213226) (xy 154.6794 107.303626) (xy 154.6794 107.17112)
(xy 154.60955 107.10127) (xy 154.15127 107.10127) (xy 154.15127 107.12127) (xy 154.14873 107.12127) (xy 154.14873 107.10127)
(xy 153.69045 107.10127) (xy 153.6206 107.17112) (xy 153.6206 107.455576) (xy 153.663136 107.558267) (xy 153.741733 107.636864)
(xy 153.844424 107.6794) (xy 153.880026 107.6794) (xy 153.5294 108.030025) (xy 153.5294 107.455576) (xy 153.5294 107.17112)
(xy 153.45955 107.10127) (xy 153.00127 107.10127) (xy 153.00127 107.60955) (xy 153.07112 107.6794) (xy 153.194424 107.6794)
(xy 153.305576 107.6794) (xy 153.408267 107.636864) (xy 153.486864 107.558267) (xy 153.5294 107.455576) (xy 153.5294 108.030025)
(xy 153.527705 108.03172) (xy 153.421607 107.960828) (xy 152.99873 107.876712) (xy 152.99873 107.60955) (xy 152.99873 107.10127)
(xy 152.54045 107.10127) (xy 152.4706 107.17112) (xy 152.4706 107.455576) (xy 152.513136 107.558267) (xy 152.591733 107.636864)
(xy 152.694424 107.6794) (xy 152.805576 107.6794) (xy 152.92888 107.6794) (xy 152.99873 107.60955) (xy 152.99873 107.876712)
(xy 152.9842 107.873822) (xy 152.546793 107.960828) (xy 152.175977 108.208599) (xy 151.928206 108.579415) (xy 151.8412 109.016822)
(xy 151.8412 109.372378) (xy 151.928206 109.809785) (xy 152.175977 110.180601) (xy 152.546793 110.428372) (xy 152.9842 110.515378)
(xy 153.421607 110.428372) (xy 153.792423 110.180601) (xy 154.040194 109.809785) (xy 154.1272 109.372378) (xy 154.1272 109.016822)
(xy 154.040194 108.579415) (xy 153.989631 108.503742) (xy 154.263173 108.2302) (xy 154.55 108.2302) (xy 154.676362 108.205065)
(xy 154.783487 108.133487) (xy 155.333483 107.583489) (xy 155.333486 107.583487) (xy 155.333487 107.583487) (xy 155.391 107.497411)
(xy 155.391 107.900317) (xy 155.086793 107.960828) (xy 154.715977 108.208599) (xy 154.468206 108.579415) (xy 154.3812 109.016822)
(xy 154.3812 109.372378) (xy 154.468206 109.809785) (xy 154.715977 110.180601) (xy 155.086793 110.428372) (xy 155.5242 110.515378)
(xy 155.961607 110.428372) (xy 156.332423 110.180601) (xy 156.580194 109.809785) (xy 156.6672 109.372378) (xy 156.6672 109.016822)
(xy 156.580194 108.579415) (xy 156.332423 108.208599) (xy 156.0514 108.020825) (xy 156.0514 107.2532) (xy 158.434168 107.2532)
(xy 159.0532 106.634168) (xy 159.0532 105.0608) (xy 159.0676 105.0608) (xy 159.193962 105.035665) (xy 159.301087 104.964087)
(xy 159.463138 104.802035) (xy 159.539824 104.8338) (xy 159.650976 104.8338) (xy 160.550976 104.8338) (xy 160.653667 104.791264)
(xy 160.732264 104.712667) (xy 160.7748 104.609976) (xy 160.7748 104.498824) (xy 160.7748 103.998824) (xy 160.732264 103.896133)
(xy 160.653667 103.817536) (xy 160.550976 103.775) (xy 160.439824 103.775) (xy 160.1334 103.775) (xy 160.1334 102.464376)
(xy 160.1334 102.353224) (xy 160.1334 102.22992) (xy 160.1334 102.08768) (xy 160.1334 101.964376) (xy 160.1334 101.853224)
(xy 160.1334 101.016576) (xy 160.1334 100.905424) (xy 160.1334 100.78212) (xy 160.1334 100.63988) (xy 160.1334 100.516576)
(xy 160.1334 100.405424) (xy 160.090864 100.302733) (xy 160.012267 100.224136) (xy 159.909576 100.1816) (xy 159.62512 100.1816)
(xy 159.55527 100.25145) (xy 159.55527 100.70973) (xy 160.06355 100.70973) (xy 160.1334 100.63988) (xy 160.1334 100.78212)
(xy 160.06355 100.71227) (xy 159.55527 100.71227) (xy 159.55527 101.17055) (xy 159.62512 101.2404) (xy 159.909576 101.2404)
(xy 160.012267 101.197864) (xy 160.090864 101.119267) (xy 160.1334 101.016576) (xy 160.1334 101.853224) (xy 160.090864 101.750533)
(xy 160.012267 101.671936) (xy 159.909576 101.6294) (xy 159.62512 101.6294) (xy 159.55527 101.69925) (xy 159.55527 102.15753)
(xy 160.06355 102.15753) (xy 160.1334 102.08768) (xy 160.1334 102.22992) (xy 160.06355 102.16007) (xy 159.55527 102.16007)
(xy 159.55527 102.61835) (xy 159.62512 102.6882) (xy 159.909576 102.6882) (xy 160.012267 102.645664) (xy 160.090864 102.567067)
(xy 160.1334 102.464376) (xy 160.1334 103.775) (xy 159.539824 103.775) (xy 159.437133 103.817536) (xy 159.358536 103.896133)
(xy 159.316 103.998824) (xy 159.316 104.033704) (xy 159.260313 104.070913) (xy 159.0532 104.278026) (xy 159.0532 104.006995)
(xy 159.233487 103.826708) (xy 159.305065 103.719583) (xy 159.3302 103.593221) (xy 159.330201 103.593221) (xy 159.3302 103.593215)
(xy 159.3302 102.6882) (xy 159.48288 102.6882) (xy 159.55273 102.61835) (xy 159.55273 102.16007) (xy 159.53273 102.16007)
(xy 159.53273 102.15753) (xy 159.55273 102.15753) (xy 159.55273 101.69925) (xy 159.48288 101.6294) (xy 159.3302 101.6294)
(xy 159.3302 101.2404) (xy 159.48288 101.2404) (xy 159.55273 101.17055) (xy 159.55273 100.71227) (xy 159.53273 100.71227)
(xy 159.53273 100.70973) (xy 159.55273 100.70973) (xy 159.55273 100.25145) (xy 159.48288 100.1816) (xy 159.3302 100.1816)
(xy 159.3302 100.086774) (xy 159.486774 99.9302) (xy 161.063226 99.9302) (xy 163.0198 101.886774) (xy 163.0198 110.213226)
(xy 163.0045 110.228526) (xy 163.0045 106.430776) (xy 163.0045 106.319624) (xy 163.0045 105.430624) (xy 163.0045 104.525776)
(xy 163.0045 104.09682) (xy 163.0045 103.95458) (xy 163.0045 103.525624) (xy 162.961964 103.422933) (xy 162.883367 103.344336)
(xy 162.780676 103.3018) (xy 162.669524 103.3018) (xy 162.09772 103.3018) (xy 162.02787 103.37165) (xy 162.02787 104.02443)
(xy 162.93465 104.02443) (xy 163.0045 103.95458) (xy 163.0045 104.09682) (xy 162.93465 104.02697) (xy 162.02787 104.02697)
(xy 162.02787 104.67975) (xy 162.09772 104.7496) (xy 162.669524 104.7496) (xy 162.780676 104.7496) (xy 162.883367 104.707064)
(xy 162.961964 104.628467) (xy 163.0045 104.525776) (xy 163.0045 105.430624) (xy 162.961964 105.327933) (xy 162.883367 105.249336)
(xy 162.780676 105.2068) (xy 162.669524 105.2068) (xy 162.02533 105.2068) (xy 162.02533 104.67975) (xy 162.02533 104.02697)
(xy 162.02533 104.02443) (xy 162.02533 103.37165) (xy 161.95548 103.3018) (xy 161.383676 103.3018) (xy 161.272524 103.3018)
(xy 161.169833 103.344336) (xy 161.091236 103.422933) (xy 161.0487 103.525624) (xy 161.0487 103.95458) (xy 161.11855 104.02443)
(xy 162.02533 104.02443) (xy 162.02533 104.02697) (xy 161.11855 104.02697) (xy 161.0487 104.09682) (xy 161.0487 104.525776)
(xy 161.091236 104.628467) (xy 161.169833 104.707064) (xy 161.272524 104.7496) (xy 161.383676 104.7496) (xy 161.95548 104.7496)
(xy 162.02533 104.67975) (xy 162.02533 105.2068) (xy 161.272524 105.2068) (xy 161.169833 105.249336) (xy 161.091236 105.327933)
(xy 161.0487 105.430624) (xy 161.0487 105.541776) (xy 161.0487 105.6005) (xy 160.7748 105.6005) (xy 160.7748 105.498824)
(xy 160.732264 105.396133) (xy 160.653667 105.317536) (xy 160.550976 105.275) (xy 160.439824 105.275) (xy 159.539824 105.275)
(xy 159.437133 105.317536) (xy 159.358536 105.396133) (xy 159.316 105.498824) (xy 159.316 105.609976) (xy 159.316 106.109976)
(xy 159.358536 106.212667) (xy 159.437133 106.291264) (xy 159.539824 106.3338) (xy 159.650976 106.3338) (xy 160.550976 106.3338)
(xy 160.653667 106.291264) (xy 160.684031 106.2609) (xy 161.0487 106.2609) (xy 161.0487 106.430776) (xy 161.091236 106.533467)
(xy 161.169833 106.612064) (xy 161.272524 106.6546) (xy 161.383676 106.6546) (xy 162.780676 106.6546) (xy 162.883367 106.612064)
(xy 162.961964 106.533467) (xy 163.0045 106.430776) (xy 163.0045 110.228526) (xy 162.413226 110.8198) (xy 161.7472 110.8198)
(xy 161.7472 110.266176) (xy 161.7472 110.155024) (xy 161.7472 109.26572) (xy 161.7472 109.12348) (xy 161.7472 108.234176)
(xy 161.7472 108.123024) (xy 161.704664 108.020333) (xy 161.626067 107.941736) (xy 161.523376 107.8992) (xy 160.67532 107.8992)
(xy 160.60547 107.96905) (xy 160.60547 109.19333) (xy 161.67735 109.19333) (xy 161.7472 109.12348) (xy 161.7472 109.26572)
(xy 161.67735 109.19587) (xy 160.60547 109.19587) (xy 160.60547 110.42015) (xy 160.67532 110.49) (xy 161.523376 110.49)
(xy 161.626067 110.447464) (xy 161.704664 110.368867) (xy 161.7472 110.266176) (xy 161.7472 110.8198) (xy 160.60293 110.8198)
(xy 160.60293 110.42015) (xy 160.60293 109.19587) (xy 160.60293 109.19333) (xy 160.60293 107.96905) (xy 160.53308 107.8992)
(xy 159.685024 107.8992) (xy 159.582333 107.941736) (xy 159.503736 108.020333) (xy 159.4612 108.123024) (xy 159.4612 108.234176)
(xy 159.4612 109.12348) (xy 159.53105 109.19333) (xy 160.60293 109.19333) (xy 160.60293 109.19587) (xy 159.53105 109.19587)
(xy 159.4612 109.26572) (xy 159.4612 110.155024) (xy 159.4612 110.266176) (xy 159.503736 110.368867) (xy 159.582333 110.447464)
(xy 159.685024 110.49) (xy 160.53308 110.49) (xy 160.60293 110.42015) (xy 160.60293 110.8198) (xy 158.3944 110.8198)
(xy 158.3944 110.449696) (xy 158.501607 110.428372) (xy 158.872423 110.180601) (xy 159.120194 109.809785) (xy 159.2072 109.372378)
(xy 159.2072 109.016822) (xy 159.120194 108.579415) (xy 158.872423 108.208599) (xy 158.501607 107.960828) (xy 158.0642 107.873822)
(xy 157.626793 107.960828) (xy 157.255977 108.208599) (xy 157.008206 108.579415) (xy 156.9212 109.016822) (xy 156.9212 109.372378)
(xy 157.008206 109.809785) (xy 157.255977 110.180601) (xy 157.626793 110.428372) (xy 157.734 110.449696) (xy 157.734 110.9642)
(xy 157.759135 111.090562) (xy 157.830713 111.197687) (xy 158.016513 111.383487) (xy 158.123638 111.455065) (xy 158.25 111.480201)
(xy 158.25 111.4802) (xy 158.250005 111.4802) (xy 162.55 111.4802) (xy 162.676362 111.455065) (xy 162.783487 111.383487)
(xy 163.583487 110.583487) (xy 163.655065 110.476362) (xy 163.6802 110.35) (xy 163.680201 110.35) (xy 163.6802 110.349994)
(xy 163.6802 101.75) (xy 163.655065 101.623638) (xy 163.583487 101.516513) (xy 161.433487 99.366513) (xy 161.326362 99.294935)
(xy 161.2 99.2698) (xy 159.35 99.2698) (xy 159.223638 99.294935) (xy 159.116513 99.366513) (xy 159.025 99.458026)
(xy 158.933487 99.366513) (xy 158.826362 99.294935) (xy 158.7 99.2698) (xy 154.100005 99.2698) (xy 154.1 99.269799)
(xy 153.973638 99.294935) (xy 153.866513 99.366513) (xy 152.766513 100.466513) (xy 152.694935 100.573638) (xy 152.6698 100.7)
(xy 152.6698 102.3) (xy 152.694935 102.426362) (xy 152.766513 102.533487) (xy 152.96651 102.733483) (xy 152.966513 102.733487)
(xy 152.966514 102.733487) (xy 153.073638 102.805065) (xy 153.2 102.830201) (xy 153.2 102.8302) (xy 153.200005 102.8302)
(xy 153.2206 102.8302) (xy 153.2206 102.97888) (xy 153.29045 103.04873) (xy 153.74873 103.04873) (xy 153.74873 103.02873)
(xy 153.75127 103.02873) (xy 153.75127 103.04873) (xy 154.20955 103.04873) (xy 154.2794 102.97888) (xy 154.2794 102.955773)
(xy 154.868129 103.544502) (xy 154.7968 103.615832) (xy 154.7968 104.0004) (xy 154.387007 104.0004) (xy 154.365194 103.978548)
(xy 154.2794 103.942923) (xy 154.2794 103.405576) (xy 154.2794 103.12112) (xy 154.20955 103.05127) (xy 153.75127 103.05127)
(xy 153.75127 103.55955) (xy 153.82112 103.6294) (xy 153.944424 103.6294) (xy 154.055576 103.6294) (xy 154.158267 103.586864)
(xy 154.236864 103.508267) (xy 154.2794 103.405576) (xy 154.2794 103.942923) (xy 154.225798 103.920666) (xy 154.074864 103.920534)
(xy 153.935368 103.978173) (xy 153.887912 104.025544) (xy 153.74873 103.886362) (xy 153.74873 103.55955) (xy 153.74873 103.05127)
(xy 153.29045 103.05127) (xy 153.2206 103.12112) (xy 153.2206 103.405576) (xy 153.263136 103.508267) (xy 153.341733 103.586864)
(xy 153.444424 103.6294) (xy 153.555576 103.6294) (xy 153.67888 103.6294) (xy 153.74873 103.55955) (xy 153.74873 103.886362)
(xy 153.675 103.812632) (xy 153.412173 104.075458) (xy 153.376346 104.076713) (xy 153.376346 103.986301) (xy 153.239069 103.92356)
(xy 153.088231 103.91813) (xy 152.946798 103.970835) (xy 152.923654 103.986301) (xy 152.926759 104.074963) (xy 153.15 104.298204)
(xy 153.373241 104.074963) (xy 153.376346 103.986301) (xy 153.376346 104.076713) (xy 153.375037 104.076759) (xy 153.151796 104.3)
(xy 153.165938 104.314142) (xy 153.164142 104.315938) (xy 153.15 104.301796) (xy 153.135857 104.315938) (xy 153.134061 104.314142)
(xy 153.148204 104.3) (xy 152.924963 104.076759) (xy 152.836301 104.073654) (xy 152.77356 104.210931) (xy 152.76813 104.361769)
(xy 152.798624 104.4436) (xy 152.037637 104.4436) (xy 152.036864 104.441733) (xy 151.958267 104.363136) (xy 151.855576 104.3206)
(xy 151.744424 104.3206) (xy 151.5762 104.3206) (xy 151.5762 97.681563) (xy 152.031563 97.2262) (xy 163.468437 97.2262)
(xy 163.9238 97.681563) (xy 163.9238 111.318437)
)
)
)
(zone (net 0) (net_name "") (layer F.Cu) (tstamp 550C7E3B) (hatch edge 0.508)
(connect_pads (clearance 0.2032))
(min_thickness 0.1524)
(keepout (tracks allowed) (vias allowed) (copperpour not_allowed))
(fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5))
(polygon
(pts
(xy 153.9 104.55) (xy 153.45 104.55) (xy 153.45 104.1) (xy 153.9 104.1)
)
)
)
(zone (net 0) (net_name "") (layer F.Cu) (tstamp 550C7E43) (hatch edge 0.508)
(connect_pads (clearance 0.2032))
(min_thickness 0.1524)
(keepout (tracks allowed) (vias allowed) (copperpour not_allowed))
(fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5))
(polygon
(pts
(xy 158.85 107.05) (xy 155 107.05) (xy 155 103.2) (xy 158.85 103.2)
)
)
)
)

14069
samples/KiCad/tc14badge.brd Normal file

File diff suppressed because it is too large Load Diff

74
samples/LSL/LSL.lslp Normal file
View File

@@ -0,0 +1,74 @@
/*
Testing syntax highlighting
for the Linden Scripting Language
*/
integer someIntNormal = 3672;
integer someIntHex = 0x00000000;
integer someIntMath = PI_BY_TWO;
integer event = 5673;// 'event' is invalid.illegal
key someKeyTexture = TEXTURE_DEFAULT;
string someStringSpecial = EOF;
some_user_defined_function_without_return_type(string inputAsString)
{
llSay(PUBLIC_CHANNEL, inputAsString);
}
string user_defined_function_returning_a_string(key inputAsKey)
{
return (string)inputAsKey;
}
default
{
state_entry()
{
key someKey = NULL_KEY;
someKey = llGetOwner();
string someString = user_defined_function_returning_a_string(someKey);
some_user_defined_function_without_return_type(someString);
}
touch_start(integer num_detected)
{
list agentsInRegion = llGetAgentList(AGENT_LIST_REGION, []);
integer numOfAgents = llGetListLength(agentsInRegion);
integer index; // defaults to 0
for (; index <= numOfAgents - 1; index++) // for each agent in region
{
llRegionSayTo(llList2Key(agentsInRegion, index), PUBLIC_CHANNEL, "Hello, Avatar!");
}
}
touch_end(integer num_detected)
{
someIntNormal = 3672;
someIntHex = 0x00000000;
someIntMath = PI_BY_TWO;
event = 5673;// 'event' is invalid.illegal
someKeyTexture = TEXTURE_DEFAULT;
someStringSpecial = EOF;
llSetInventoryPermMask("some item", MASK_NEXT, PERM_ALL);// 'llSetInventoryPermMask' is reserved.godmode
llWhisper(PUBLIC_CHANNEL, "Leaving \"default\" now...");
state other;
}
}
state other
{
state_entry()
{
llWhisper(PUBLIC_CHANNEL, "Entered \"state other\", returning to \"default\" again...");
state default;
}
}

View File

@@ -0,0 +1,2 @@
/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcm4334x.ko
/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_pno.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_ip.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_custom_gpio.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_sched.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_wq.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/aiutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmevent.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmwifi_channels.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/hndpmu.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/linux_osl.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/sbutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/siutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_android.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfgp2p.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg_btcoex.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wldev_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_linux_mon.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_platdev.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cdc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_wlfc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_sdio.o

View File

@@ -0,0 +1,2 @@
fs/mbcache.ko
fs/mbcache.o

View File

@@ -0,0 +1,2 @@
crypto/md5.ko
crypto/md5.o

View File

@@ -0,0 +1,29 @@
-- Taken from an example from Autodesk's MAXScript reference:
-- http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_84E24969_C175_4389_B9A6_3B2699B66785_htm
macroscript MoveToSurface
category: "HowTo"
(
fn g_filter o = superclassof o == Geometryclass
fn find_intersection z_node node_to_z = (
local testRay = ray node_to_z.pos [0,0,-1]
local nodeMaxZ = z_node.max.z
testRay.pos.z = nodeMaxZ + 0.0001 * abs nodeMaxZ
intersectRay z_node testRay
)
on isEnabled return selection.count > 0
on Execute do (
target_mesh = pickObject message:"Pick Target Surface:" filter:g_filter
if isValidNode target_mesh then (
undo "MoveToSurface" on (
for i in selection do (
int_point = find_intersection target_mesh i
if int_point != undefined then i.pos = int_point.pos
)--end i loop
)--end undo
)--end if
)--end execute
)--end script

View File

@@ -0,0 +1,53 @@
-- Taken from an example from Autodesk's MAXScript reference:
-- http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_0876DF46_FAA3_4131_838D_5739A67FF2C1_htm
macroscript FreeSpline category:"HowTo" tooltip:"FreeSpline" (
local old_pos
local new_spline
local second_knot_set
fn get_mouse_pos pen_pos old_pen_pos = (
if old_pos == undefined then old_pos = old_pen_pos
if distance pen_pos old_pos > 10 then
(
if second_knot_set then
addKnot new_spline 1 #smooth #curve pen_pos
else
(
setKnotPoint new_spline 1 2 pen_pos
second_knot_set = true
)
old_pos = pen_pos
updateShape new_spline
)-- end if
)-- end fn
fn draw_new_line old_pen_pos = (
pickPoint mouseMoveCallback:#(get_mouse_pos,old_pen_pos)
)
undo"Free Spline"on(
new_spline = splineShape ()
old_pen_pos = pickPoint ()
if old_pen_pos == #RightClick then
delete new_spline
else
(
select new_spline
new_spline.pos = old_pen_pos
addNewSpline new_spline
addKnot new_spline 1 #smooth #curve old_pen_pos
addKnot new_spline 1 #smooth #curve old_pen_pos
second_knot_set = false
draw_new_line old_pen_pos
q = querybox "Close Spline?" title:"Free Spline"
if q then
(
close new_spline 1
updateshape new_spline
)
select new_spline
)--end else
)--end undo
)--end script

View File

@@ -0,0 +1,64 @@
-- Taken from a 3-part tutorial from Autodesk's MAXScript reference
-- Source: http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_6B5EDC11_A154_4AA7_A972_A11AC36949E9_htm
fn ColourToHex col = (
local theComponents = #(bit.intAsHex col.r, bit.intAsHex col.g, bit.intAsHex col.b)
local theValue = "#"
for i in theComponents do
theValue += (if i.count == 1 then "0" else "") + i
theValue
)
local st = timestamp()
local theFileName = (getDir #userscripts + "\\PolygonRendering3.svg")
local theSVGfile = createFile theFileName
format "<svg xmlns=\"http://www.w3.org/2000/svg\"\n" to:theSVGfile
format "\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\">\n" to:theSVGfile
local theViewTM = viewport.getTM()
theViewTM.row4 = [0,0,0]
local theViewTM2 = viewport.getTM()
local theViewSize = getViewSize()
local theViewScale = getViewSize()
theViewScale.x /= 1024.0
theViewScale.y /= 1024.0
local theStrokeThickness = 3
gw.setTransform (matrix3 1)
for o in Geometry where not o.isHiddenInVpt and classof o != TargetObject do (
local theStrokeColour = white
local theFillColour = o.wirecolor
local theMesh = snapshotAsMesh o
for f = 1 to theMesh.numfaces do (
local theNormal = normalize (getFaceNormal theMesh f)
if (theNormal*theViewTM).z > 0 do
(
local theFace = getFace theMesh f
local v1 = gw.transPoint (getVert theMesh theFace.x)
local v2 = gw.transPoint (getVert theMesh theFace.y)
local v3 = gw.transPoint (getVert theMesh theFace.z)
v1.x /= theViewScale.x
v1.y /= theViewScale.y
v2.x /= theViewScale.x
v2.y /= theViewScale.y
v3.x /= theViewScale.x
v3.y /= theViewScale.y
format "\t<polygon points='%,% %,% %,%' \n" v1.x v1.y v2.x v2.y v3.x v3.y to:theSVGfile
format "\tstyle='stroke:%; fill:%; stroke-width:%'/>\n" (ColourToHex theStrokeColour) (ColourToHex theFillColour) theStrokeThickness to:theSVGfile
)--end if normal positive
)--end f loop
)--end o loop
format "</svg>\n" to:theSVGfile
close theSVGfile
local theSVGMap = VectorMap vectorFile:theFileName alphasource:0
local theBitmap = bitmap theViewSize.x theViewSize.y
renderMap theSVGMap into:theBitmap filter:true
display theBitmap
format "Render Time: % sec.\n" ((timestamp()-st)/1000.0)

View File

@@ -0,0 +1,22 @@
fn CalculateVolumeAndCentreOfMass obj =
(
local Volume= 0.0
local Centre= [0.0, 0.0, 0.0]
local theMesh = snapshotasmesh obj
local numFaces = theMesh.numfaces
for i = 1 to numFaces do
(
local Face= getFace theMesh i
local vert2 = getVert theMesh Face.z
local vert1 = getVert theMesh Face.y
local vert0 = getVert theMesh Face.x
local dV = Dot (Cross (vert1 - vert0) (vert2 - vert0)) vert0
Volume+= dV
Centre+= (vert0 + vert1 + vert2) * dV
)
delete theMesh
Volume /= 6
Centre /= 24
Centre /= Volume
#(Volume,Centre)
)

View File

@@ -0,0 +1,31 @@
# $OpenBSD: Makefile.inc,v 1.2 2003/11/14 20:09:20 drahn Exp $
# $NetBSD: Makefile.inc,v 1.1 1996/09/30 16:34:59 ws Exp $
.if !defined(__stand_makefile_inc)
__stand_makefile_inc=1
KERN_AS= library
S=$(.CURDIR)/../../../$(R)
.if !make(libdep) && !make(sadep) && !make(salibdir) && !make(kernlibdir) && !make(obj) && !defined(NOMACHINE)
.BEGIN:
@([ -h machine ] || ln -s $(S)/arch/$(MACHINE)/include machine)
.endif
#
EXTRACFLAGS= -msoft-float
REAL_VIRT?= -v
ENTRY?= _start
INCLUDES+= -I. -I$(.OBJDIR) -I$(.CURDIR)/.. -I$(S)/arch -I$(S)
INCLUDES+= -I$(S)/lib/libsa
DEFS+= -DSTANDALONE
CFLAGS+= $(INCLUDES) $(DEFS) $(EXTRACFLAGS)
CFLAGS+= -fno-stack-protector
LDFLAGS?= -X -N -Ttext $(RELOC) -e $(ENTRY)
cleandir:
rm -rf lib machine
.endif

View File

@@ -0,0 +1 @@
Test[1 + 2, 3, TestID -> "One plus two"]

View File

@@ -0,0 +1 @@
Test["a" <> "b", "ab", TestID -> "Concat \"a\" and \"b\""]

View File

@@ -0,0 +1,5 @@
TestSuite[
{ "TestArithmetic.mt"
, "TestString.mt"
}
]

View File

@@ -0,0 +1,694 @@
= Name =
'''nginx_tcp_proxy_module''' - support TCP proxy with Nginx
= Installation =
Download the latest stable version of the release tarball of this module from [http://github.com/yaoweibin/nginx_tcp_proxy_module github]
Grab the nginx source code from [http://nginx.org/ nginx.org], for example, the version 1.2.1 (see nginx compatibility), and then build the source with this module:
<geshi lang="bash">
$ wget 'http://nginx.org/download/nginx-1.2.1.tar.gz'
$ tar -xzvf nginx-1.2.1.tar.gz
$ cd nginx-1.2.1/
$ patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
$ ./configure --add-module=/path/to/nginx_tcp_proxy_module
$ make
$ make install
</geshi>
= Synopsis =
<geshi lang="nginx">
http {
server {
listen 80;
location /status {
tcp_check_status;
}
}
}
</geshi>
<geshi lang="nginx">
#You can also include tcp_proxy.conf file individually
#include /path/to/tcp_proxy.conf;
tcp {
upstream cluster {
# simple round-robin
server 192.168.0.1:80;
server 192.168.0.2:80;
check interval=3000 rise=2 fall=5 timeout=1000;
#check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello;
#check interval=3000 rise=2 fall=5 timeout=1000 type=http;
#check_http_send "GET / HTTP/1.0\r\n\r\n";
#check_http_expect_alive http_2xx http_3xx;
}
server {
listen 8888;
proxy_pass cluster;
}
}
</geshi>
= Description =
This module actually include many modules: ngx_tcp_module, ngx_tcp_core_module, ngx_tcp_upstream_module, ngx_tcp_proxy_module, ngx_tcp_websocket_module, ngx_tcp_ssl_module, ngx_tcp_upstream_ip_hash_module. All these modules work together to support TCP proxy with Nginx. I also added other features: ip_hash, upstream server health check, status monitor.
The motivation of writing these modules is Nginx's high performance and robustness. At first, I developed this module just for general TCP proxy. And now, this module is frequently used in websocket reverse proxying.
Note, You can't use the same listening port with HTTP modules.
= Directives =
== ngx_tcp_moodule ==
=== tcp ===
'''syntax:''' ''tcp {...}''
'''default:''' ''none''
'''context:''' ''main''
'''description:''' All the tcp related directives are contained in the tcp block.
'''ngx_tcp_core_moodule'''
=== server ===
'''syntax:''' ''server {...}''
'''default:''' ''none''
'''context:''' ''tcp''
'''description:''' All the specific server directives are contained in the server block.
=== listen ===
'''syntax:''' ''listen address:port [ bind | ssl | default]''
'''default:''' ''none''
'''context:''' ''server''
'''description:''' The same as [http://wiki.nginx.org/NginxMailCoreModule#listen listen]. The parameter of default means the default server if you have several server blocks with the same port.
=== access_log ===
'''syntax:''' ''access_log path [buffer=size] | off''
'''default:''' ''access_log logs/tcp_access.log''
'''context:''' ''tcp, server''
'''description:''' Set the access.log. Each record's format is like this:
<pre>
log_time worker_process_pid client_ip host_ip accept_time upstream_ip bytes_read bytes_write
2011/08/02 06:19:07 [5972] 127.0.0.1 0.0.0.0:1982 2011/08/02 06:18:19 172.19.0.129:80 80 236305
</pre>
* ''log_time'': The current time when writing this log. The log action is called when the proxy session is closed.
* ''worker_process_pid'': the pid of worker process
* ''client_ip'': the client ip
* ''host_ip'': the server ip and port
* ''accept_time'': the time when the server accepts client's connection
* ''upstream_ip'': the upstream server's ip
* ''bytes_read'': the bytes read from client
* ''bytes_write'': the bytes written to client
=== allow ===
'''syntax:''' ''allow [ address | CIDR | all ]''
'''default:''' ''none''
'''context:''' ''server''
'''description:''' Directive grants access for the network or addresses indicated.
=== deny ===
'''syntax:''' ''deny [ address | CIDR | all ]''
'''default:''' ''none''
'''context:''' ''server''
'''description:''' Directive grants access for the network or addresses indicated.
=== so_keepalive ===
'''syntax:''' ''so_keepalive on|off''
'''default:''' ''off''
'''context:''' ''main, server''
'''description:''' The same as [http://wiki.nginx.org/NginxMailCoreModule#so_keepalive so_keepalive].
=== tcp_nodelay ===
'''syntax:''' ''tcp_nodelay on|off''
'''default:''' ''on''
'''context:''' ''main, server''
'''description:''' The same as [http://wiki.nginx.org/NginxHttpCoreModule#tcp_nodelay tcp_nodelay].
=== timeout ===
'''syntax:''' ''timeout milliseconds''
'''default:''' ''60000''
'''context:''' ''main, server''
'''description:''' set the timeout value with clients.
=== server_name ===
'''syntax:''' ''server_name name''
'''default:''' ''The name of the host, obtained through gethostname()''
'''context:''' ''tcp, server''
'''description:''' The same as [http://wiki.nginx.org/NginxMailCoreModule#server_name server_name]. You can specify several server name in different server block with the same port. They can be used in websocket module.
=== resolver ===
'''syntax:''' ''resolver address''
'''default:''' ''none''
'''context:''' ''tcp, server''
'''description:''' DNS server
=== resolver_timeout ===
'''syntax:''' ''resolver_timeout time''
'''default:''' ''30s''
'''context:''' ''tcp, server''
'''description:''' Resolver timeout in seconds.
== ngx_tcp_upstream_module ==
=== upstream ===
'''syntax:''' ''upstream {...}''
'''default:''' ''none''
'''context:''' ''tcp''
'''description:''' All the upstream directives are contained in this block. The upstream server will be dispatched with round robin by default.
=== server ===
'''syntax:''' ''server name [parameters]''
'''default:''' ''none''
'''context:''' ''upstream''
'''description:''' Most of the parameters are the same as [http://wiki.nginx.org/NginxHttpUpstreamModule#server server]. Default port is 80.
=== check ===
'''syntax:''' ''check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [type=tcp|ssl_hello|smtp|mysql|pop3|imap]''
'''default:''' ''none, if parameters omitted, default parameters are interval=30000 fall=5 rise=2 timeout=1000''
'''context:''' ''upstream''
'''description:''' Add the health check for the upstream servers. At present, the check method is a simple tcp connect.
The parameters' meanings are:
* ''interval'': the check request's interval time.
* ''fall''(fall_count): After fall_count check failures, the server is marked down.
* ''rise''(rise_count): After rise_count check success, the server is marked up.
* ''timeout'': the check request's timeout.
* ''type'': the check protocol type:
# ''tcp'' is a simple tcp socket connect and peek one byte.
# ''ssl_hello'' sends a client ssl hello packet and receives the server ssl hello packet.
# ''http'' sends a http request packet, receives and parses the http response to diagnose if the upstream server is alive.
# ''smtp'' sends a smtp request packet, receives and parses the smtp response to diagnose if the upstream server is alive. The response begins with '2' should be an OK response.
# ''mysql'' connects to the mysql server, receives the greeting response to diagnose if the upstream server is alive.
# ''pop3'' receives and parses the pop3 response to diagnose if the upstream server is alive. The response begins with '+' should be an OK response.
# ''imap'' connects to the imap server, receives the greeting response to diagnose if the upstream server is alive.
=== check_http_send ===
'''syntax:''' ''check_http_send http_packet''
'''default:''' ''"GET / HTTP/1.0\r\n\r\n"''
'''context:''' ''upstream''
'''description:''' If you set the check type is http, then the check function will sends this http packet to check the upstream server.
=== check_http_expect_alive ===
'''syntax:''' ''check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]''
'''default:''' ''http_2xx | http_3xx''
'''context:''' ''upstream''
'''description:''' These status codes indicate the upstream server's http response is OK, the backend is alive.
=== check_smtp_send ===
'''syntax:''' ''check_smtp_send smtp_packet''
'''default:''' ''"HELO smtp.localdomain\r\n"''
'''context:''' ''upstream''
'''description:''' If you set the check type is smtp, then the check function will sends this smtp packet to check the upstream server.
=== check_smtp_expect_alive ===
'''syntax:''' ''check_smtp_expect_alive [smtp_2xx | smtp_3xx | smtp_4xx | smtp_5xx]''
'''default:''' ''smtp_2xx''
'''context:''' ''upstream''
'''description:''' These status codes indicate the upstream server's smtp response is OK, the backend is alive.
=== check_shm_size ===
'''syntax:''' ''check_shm_size size''
'''default:''' ''(number_of_checked_upstream_blocks + 1) * pagesize''
'''context:''' ''tcp''
'''description:''' If you store hundreds of servers in one upstream block, the shared memory for health check may be not enough, you can enlarged it by this directive.
=== tcp_check_status ===
'''syntax:''' ''tcp_check_status''
'''default:''' ''none''
'''context:''' ''location''
'''description:''' Display the health checking servers' status by HTTP. This directive is set in the http block.
The table field meanings are:
* ''Index'': The server index in the check table
* ''Name'' : The upstream server name
* ''Status'': The marked status of the server.
* ''Busyness'': The number of connections which are connecting to the server.
* ''Rise counts'': Count the successful checking
* ''Fall counts'': Count the unsuccessful checking
* ''Access counts'': Count the times accessing to this server
* ''Check type'': The type of the check packet
'''ngx_tcp_upstream_busyness_module'''
=== busyness ===
'''syntax:''' ''busyness''
'''default:''' ''none''
'''context:''' ''upstream''
'''description:''' the upstream server will be dispatched by backend servers' busyness.
'''ngx_tcp_upstream_ip_hash_module'''
=== ip_hash ===
'''syntax:''' ''ip_hash''
'''default:''' ''none''
'''context:''' ''upstream''
'''description:''' the upstream server will be dispatched by ip_hash.
== ngx_tcp_proxy_module ==
=== proxy_pass ===
'''syntax:''' ''proxy_pass host:port''
'''default:''' ''none''
'''context:''' ''server''
'''description:''' proxy the request to the backend server. Default port is 80.
=== proxy_buffer ===
'''syntax:''' ''proxy_buffer size''
'''default:''' ''4k''
'''context:''' ''tcp, server''
'''description:''' set the size of proxy buffer.
=== proxy_connect_timeout ===
'''syntax:''' ''proxy_connect_timeout miliseconds''
'''default:''' ''60000''
'''context:''' ''tcp, server''
'''description:''' set the timeout value of connection to backends.
=== proxy_read_timeout ===
'''syntax:''' ''proxy_read_timeout miliseconds''
'''default:''' ''60000''
'''context:''' ''tcp, server''
'''description:''' set the timeout value of reading from backends.
=== proxy_send_timeout ===
'''syntax:''' ''proxy_send_timeout miliseconds''
'''default:''' ''60000''
'''context:''' ''tcp, server''
'''description:''' set the timeout value of sending to backends.
== ngx_tcp_websocket_module ==
=== websocket_pass ===
'''syntax:''' ''websocket_pass [path] host:port''
'''default:''' ''none''
'''context:''' ''server''
'''description:''' proxy the websocket request to the backend server. Default port is 80. You can specify several different paths in the same server block.
=== websocket_buffer ===
'''syntax:''' ''websocket_buffer size''
'''default:''' ''4k''
'''context:''' ''tcp, server''
'''description:''' set the size of proxy buffer.
=== websocket_connect_timeout ===
'''syntax:''' ''websocket_connect_timeout miliseconds''
'''default:''' ''60000''
'''context:''' ''tcp, server''
'''description:''' set the timeout value of connection to backends.
=== websocket_read_timeout ===
'''syntax:''' ''websocket_read_timeout miliseconds''
'''default:''' ''60000''
'''context:''' ''tcp, server''
'''description:''' set the timeout value of reading from backends. Your timeout will be the minimum of this and the *timeout* parameter, so if you want a long timeout for your websockets, make sure to set both paramaters.
=== websocket_send_timeout ===
'''syntax:''' ''websocket_send_timeout miliseconds''
'''default:''' ''60000''
'''context:''' ''tcp, server''
'''description:''' set the timeout value of sending to backends.
== ngx_tcp_ssl_module ==
The default config file includes this ngx_tcp_ssl_module. If you want to just compile nginx without ngx_tcp_ssl_module, copy the ngx_tcp_proxy_module/config_without_ssl to ngx_tcp_proxy_module/config, reconfigrure and compile nginx.
=== ssl ===
'''syntax:''' ''ssl [on|off] ''
'''default:''' ''ssl off''
'''context:''' ''tcp, server''
Enables SSL for a server.
=== ssl_certificate ===
'''syntax:''' ''ssl_certificate file''
'''default:''' ''ssl_certificate cert.pem''
'''context:''' ''tcp, server''
This directive specifies the file containing the certificate, in PEM format. This file can contain also other certificates and the server private key.
=== ssl_certificate_key ===
'''syntax:''' ''ssl_certificate_key file''
'''default:''' ''ssl_certificate_key cert.pem''
'''context:''' ''tcp, server''
This directive specifies the file containing the private key, in PEM format.
=== ssl_client_certificate ===
'''syntax:''' ''ssl_client_certificate file''
'''default:''' ''none''
'''context:''' ''tcp, server''
This directive specifies the file containing the CA (root) certificate, in PEM format, that is used for validating client certificates.
=== ssl_dhparam ===
'''syntax:''' ''ssl_dhparam file''
'''default:''' ''none''
'''context:''' ''tcp, server''
This directive specifies a file containing Diffie-Hellman key agreement protocol cryptographic parameters, in PEM format, utilized for exchanging session keys between server and client.
=== ssl_ciphers ===
'''syntax:''' ''ssl_ciphers openssl_cipherlist_spec''
'''default:''' ''ssl_ciphers HIGH:!aNULL:!MD5''
'''context:''' ''tcp, server''
This directive describes the list of cipher suites the server supports for establishing a secure connection. Cipher suites are specified in the [http://openssl.org/docs/apps/ciphers.html OpenSSL] cipherlist format, for example:
<geshi lang="nginx">
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
</geshi>
The complete cipherlist supported by the currently installed version of OpenSSL in your platform can be obtained by issuing the command:
<pre>
openssl ciphers
</pre>
=== ssl_crl ===
'''syntax:''' ''ssl_crl file''
'''default:''' ''none''
'''context:''' ''tcp, server''
This directive specifies the filename of a Certificate Revocation List, in PEM format, which is used to check the revocation status of certificates.
=== ssl_prefer_server_ciphers ===
'''syntax:''' ''ssl_prefer_server_ciphers [on|off] ''
'''default:''' ''ssl_prefer_server_ciphers off''
'''context:''' ''tcp, server''
The server requires that the cipher suite list for protocols SSLv3 and TLSv1 are to be preferred over the client supported cipher suite list.
=== ssl_protocols ===
'''syntax:''' ''ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]''
'''default:''' ''ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2''
'''context:''' ''tcp, server''
This directive enables the protocol versions specified.
=== ssl_verify_client ===
'''syntax:''' ''ssl_verify_client on|off|optional''
'''default:''' ''ssl_verify_client off''
'''context:''' ''tcp, server''
This directive enables the verification of the client identity. Parameter 'optional' checks the client identity using its certificate in case it was made available to the server.
=== ssl_verify_depth ===
'''syntax:''' ''ssl_verify_depth number''
'''default:''' ''ssl_verify_depth 1''
'''context:''' ''tcp, server''
This directive sets how deep the server should go in the client provided certificate chain in order to verify the client identity.
=== ssl_session_cache ===
'''syntax:''' ''ssl_session_cache off|none|builtin:size and/or shared:name:size''
'''default:''' ''ssl_session_cache off''
'''context:''' ''tcp, server''
The directive sets the types and sizes of caches to store the SSL sessions.
The cache types are:
* off -- Hard off: nginx says explicitly to a client that sessions can not reused.
* none -- Soft off: nginx says to a client that session can be resued, but nginx actually never reuses them. This is workaround for some mail clients as ssl_session_cache may be used in mail proxy as well as in HTTP server.
* builtin -- the OpenSSL builtin cache, is used inside one worker process only. The cache size is assigned in the number of the sessions. Note: there appears to be a memory fragmentation issue using this method, please take that into consideration when using this. See "References" below.
* shared -- the cache is shared between all worker processes. The size of the cache is assigned in bytes: 1 MB cache can contain roughly 4000 sessions. Each shared cache must be given an arbitrary name. A shared cache with a given name can be used in several virtual hosts.
It's possible to use both types of cache &mdash; builtin and shared &mdash; simultaneously, for example:
<geshi lang="nginx">
ssl_session_cache builtin:1000 shared:SSL:10m;
</geshi>
Bear in mind however, that using only shared cache, i.e., without builtin, should be more effective.
=== ssl_session_timeout ===
'''syntax:''' ''ssl_session_timeout time''
'''default:''' ''ssl_session_timeout 5m''
'''context:''' ''tcp, server''
This directive defines the maximum time during which the client can re-use the previously negotiated cryptographic parameters of the secure session that is stored in the SSL cache.
= Compatibility =
* My test bed is 0.7.65+
= Notes =
The http_response_parse.rl and smtp_response_parse.rl are [http://www.complang.org/ragel/ ragel] scripts , you can edit the script and compile it like this:
<geshi lang="bash">
$ ragel -G2 http_response_parse.rl
$ ragel -G2 smtp_response_parse.rl
</geshi>
= TODO =
* refact this module, make it more extendable for adding third-party modules
* manipulate header like http module's proxy_set_header
* built-in variable support
* custom log format
* syslog support
* FTP/IRC proxying
= Known Issues =
* This module can't use the same listening port with the HTTP module.
= Changelogs =
== v0.2.0 ==
* add ssl proxy module
* add websocket proxy module
* add upstream busyness module
* add tcp access log module
== v0.19 ==
* add many check methods
== v0.1 ==
* first release
= Authors =
Weibin Yao(姚伟斌) ''yaoweibin at gmail dot com''
= Copyright & License =
This README template copy from [http://github.com/agentzh agentzh].
I borrowed a lot of code from upstream and mail module from the nginx 0.7.* core. This part of code is copyrighted by Igor Sysoev. And the health check part is borrowed the design of Jack Lindamood's healthcheck module [http://github.com/cep21/healthcheck_nginx_upstreams healthcheck_nginx_upstreams];
This module is licensed under the BSD license.
Copyright (C) 2013 by Weibin Yao <yaoweibin@gmail.com>.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@@ -0,0 +1,99 @@
// Copyright 2014 Isis Innovation Limited and the authors of InfiniTAM
#include <metal_stdlib>
#include "../../DeviceAgnostic/ITMSceneReconstructionEngine.h"
#include "../../DeviceAgnostic/ITMVisualisationEngine.h"
#include "ITMVisualisationEngine_Metal.h"
using namespace metal;
kernel void genericRaycastVH_device(DEVICEPTR(Vector4f) *pointsRay [[ buffer(0) ]],
const CONSTPTR(ITMVoxel) *voxelData [[ buffer(1) ]],
const CONSTPTR(typename ITMVoxelIndex::IndexData) *voxelIndex [[ buffer(2) ]],
const CONSTPTR(Vector2f) *minmaxdata [[ buffer(3) ]],
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(4) ]],
uint2 threadIdx [[ thread_position_in_threadgroup ]],
uint2 blockIdx [[ threadgroup_position_in_grid ]],
uint2 blockDim [[ threads_per_threadgroup ]])
{
int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y;
if (x >= params->imgSize.x || y >= params->imgSize.y) return;
int locId = x + y * params->imgSize.x;
int locId2 = (int)floor((float)x / minmaximg_subsample) + (int)floor((float)y / minmaximg_subsample) * params->imgSize.x;
castRay<ITMVoxel, ITMVoxelIndex>(pointsRay[locId], x, y, voxelData, voxelIndex, params->invM, params->invProjParams,
params->voxelSizes.y, params->lightSource.w, minmaxdata[locId2]);
}
kernel void genericRaycastVGMissingPoints_device(DEVICEPTR(Vector4f) *forwardProjection [[ buffer(0) ]],
const CONSTPTR(int) *fwdProjMissingPoints [[ buffer(1) ]],
const CONSTPTR(ITMVoxel) *voxelData [[ buffer(2) ]],
const CONSTPTR(typename ITMVoxelIndex::IndexData) *voxelIndex [[ buffer(3) ]],
const CONSTPTR(Vector2f) *minmaxdata [[ buffer(4) ]],
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(5) ]],
uint2 threadIdx [[ thread_position_in_threadgroup ]],
uint2 blockIdx [[ threadgroup_position_in_grid ]],
uint2 blockDim [[ threads_per_threadgroup ]])
{
int pointId = threadIdx.x + blockIdx.x * blockDim.x;
if (pointId >= params->imgSize.z) return;
int locId = fwdProjMissingPoints[pointId];
int y = locId / params->imgSize.x, x = locId - y * params->imgSize.x;
int locId2 = (int)floor((float)x / minmaximg_subsample) + (int)floor((float)y / minmaximg_subsample) * params->imgSize.x;
castRay<ITMVoxel, ITMVoxelIndex>(forwardProjection[locId], x, y, voxelData, voxelIndex, params->invM, params->invProjParams,
params->voxelSizes.y, params->lightSource.w, minmaxdata[locId2]);
}
kernel void renderICP_device(const CONSTPTR(Vector4f) *pointsRay [[ buffer(0) ]],
DEVICEPTR(Vector4f) *pointsMap [[ buffer(1) ]],
DEVICEPTR(Vector4f) *normalsMap [[ buffer(2) ]],
DEVICEPTR(Vector4u) *outRendering [[ buffer(3) ]],
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(4) ]],
uint2 threadIdx [[ thread_position_in_threadgroup ]],
uint2 blockIdx [[ threadgroup_position_in_grid ]],
uint2 blockDim [[ threads_per_threadgroup ]])
{
int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y;
if (x >= params->imgSize.x || y >= params->imgSize.y) return;
processPixelICP<false>(outRendering, pointsMap, normalsMap, pointsRay, params->imgSize.xy, x, y, params->voxelSizes.x, TO_VECTOR3(params->lightSource));
}
kernel void renderForward_device(DEVICEPTR(Vector4u) *outRendering [[ buffer(0) ]],
const CONSTPTR(Vector4f) *pointsRay [[ buffer(1) ]],
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(2) ]],
uint2 threadIdx [[ thread_position_in_threadgroup ]],
uint2 blockIdx [[ threadgroup_position_in_grid ]],
uint2 blockDim [[ threads_per_threadgroup ]])
{
int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y;
if (x >= params->imgSize.x || y >= params->imgSize.y) return;
processPixelForwardRender<false>(outRendering, pointsRay, params->imgSize.xy, x, y, params->voxelSizes.x, TO_VECTOR3(params->lightSource));
}
kernel void forwardProject_device(DEVICEPTR(Vector4f) *forwardProjection [[ buffer(0) ]],
const CONSTPTR(Vector4f) *pointsRay [[ buffer(1) ]],
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(2) ]],
uint2 threadIdx [[ thread_position_in_threadgroup ]],
uint2 blockIdx [[ threadgroup_position_in_grid ]],
uint2 blockDim [[ threads_per_threadgroup ]])
{
int x = (threadIdx.x + blockIdx.x * blockDim.x), y = (threadIdx.y + blockIdx.y * blockDim.y);
if (x >= params->imgSize.x || y >= params->imgSize.y) return;
int locId = x + y * params->imgSize.x;
Vector4f pixel = pointsRay[locId];
int locId_new = forwardProjectPixel(pixel * params->voxelSizes.x, params->M, params->projParams, params->imgSize.xy);
if (locId_new >= 0) forwardProjection[locId_new] = pixel;
}

View File

@@ -0,0 +1,26 @@
within ModelicaByExample.PackageExamples;
package NestedPackages
"An example of how packages can be used to organize things"
package Types
type Rabbits = Real(quantity="Rabbits", min=0);
type Wolves = Real(quantity="Wolves", min=0);
type RabbitReproduction = Real(quantity="Rabbit Reproduction", min=0);
type RabbitFatalities = Real(quantity="Rabbit Fatalities", min=0);
type WolfReproduction = Real(quantity="Wolf Reproduction", min=0);
type WolfFatalities = Real(quantity="Wolf Fatalities", min=0);
end Types;
model LotkaVolterra "Lotka-Volterra with types"
parameter Types.RabbitReproduction alpha=0.1;
parameter Types.RabbitFatalities beta=0.02;
parameter Types.WolfReproduction gamma=0.4;
parameter Types.WolfFatalities delta=0.02;
parameter Types.Rabbits x0=10;
parameter Types.Wolves y0=10;
Types.Rabbits x(start=x0);
Types.Wolves y(start=y0);
equation
der(x) = x*(alpha-beta*y);
der(y) = -y*(gamma-delta*x);
end LotkaVolterra;
end NestedPackages;

View File

@@ -0,0 +1,24 @@
within ModelicaByExample.PackageExamples;
model NewtonCooling
"Cooling example importing physical types from the Modelica Standard Library"
import Modelica.SIunits.Temperature;
import Modelica.SIunits.Mass;
import Modelica.SIunits.Area;
import ConvectionCoefficient = Modelica.SIunits.CoefficientOfHeatTransfer;
import SpecificHeat = Modelica.SIunits.SpecificHeatCapacity;
// Parameters
parameter Temperature T_inf=300.0 "Ambient temperature";
parameter Temperature T0=280.0 "Initial temperature";
parameter ConvectionCoefficient h=0.7 "Convective cooling coefficient";
parameter Area A=1.0 "Surface area";
parameter Mass m=0.1 "Mass of thermal capacitance";
parameter SpecificHeat c_p=1.2 "Specific heat";
// Variables
Temperature T "Temperature";
initial equation
T = T0 "Specify initial value for T";
equation
m*c_p*der(T) = h*A*(T_inf-T) "Newton's law of cooling";
end NewtonCooling;

View File

@@ -0,0 +1,47 @@
within ModelicaByExample.Subsystems.Pendula;
model Pendulum "A single individual pendulum"
import Modelica.Mechanics.MultiBody.Parts;
import Modelica.Mechanics.MultiBody.Joints;
parameter Modelica.SIunits.Position x;
parameter Modelica.SIunits.Mass m "Mass of mass point";
parameter Modelica.SIunits.Angle phi "Initial angle";
parameter Modelica.SIunits.Length L "String length";
parameter Modelica.SIunits.Diameter d=0.01;
Parts.Fixed ground(r={0,0,x}, animation=false)
annotation (Placement(
transformation(
extent={{-10,-10},{10,10}},
rotation=270, origin={0,60})));
Parts.PointMass ball(m=m, sphereDiameter=5*d)
annotation (Placement(transformation(extent={{-10,-90},{10,-70}})));
Parts.BodyCylinder string(density=0, r={0,L,0}, diameter=d)
annotation (Placement(transformation(
extent={{-10,-10},{10,10}},
rotation=90,
origin={0,-30})));
Joints.Revolute revolute(phi(fixed=true, start=phi),
cylinderDiameter=d/2, animation=false)
annotation (Placement(
transformation(
extent={{-10,-10},{10,10}},
rotation=90,
origin={0,20})));
equation
connect(string.frame_a, ball.frame_a) annotation (Line(
points={{0,-40},{0,-40},{0,-80}},
color={95,95,95},
thickness=0.5,
smooth=Smooth.None));
connect(revolute.frame_b, ground.frame_b) annotation (Line(
points={{0,30},{0,40},{0,40},{0,50}},
color={95,95,95},
thickness=0.5,
smooth=Smooth.None));
connect(revolute.frame_a, string.frame_b) annotation (Line(
points={{0,10},{0,10},{0,-20},{0,-20}},
color={95,95,95},
thickness=0.5,
smooth=Smooth.None));
end Pendulum;

16
samples/Modelica/RLC.mo Normal file
View File

@@ -0,0 +1,16 @@
within ModelicaByExample.PackageExamples;
model RLC "An RLC circuit referencing types from the Modelica Standard Library"
parameter Modelica.SIunits.Voltage Vb=24 "Battery voltage";
parameter Modelica.SIunits.Inductance L = 1;
parameter Modelica.SIunits.Resistance R = 100;
parameter Modelica.SIunits.Capacitance C = 1e-3;
Modelica.SIunits.Voltage V;
Modelica.SIunits.Current i_L;
Modelica.SIunits.Current i_R;
Modelica.SIunits.Current i_C;
equation
i_R = V/R;
i_C = C*der(V);
i_L=i_R+i_C;
L*der(i_L) = (Vb-V);
end RLC;

View File

@@ -0,0 +1,29 @@
within ModelicaByExample.PackageExamples;
model SecondOrderSystem
"A second order rotational system importing types from Modelica Standard Library"
import Modelica.SIunits.*;
parameter Angle phi1_init = 0;
parameter Angle phi2_init = 1;
parameter AngularVelocity omega1_init = 0;
parameter AngularVelocity omega2_init = 0;
parameter Inertia J1=0.4;
parameter Inertia J2=1.0;
parameter RotationalSpringConstant k1=11;
parameter RotationalSpringConstant k2=5;
parameter RotationalDampingConstant d1=0.2;
parameter RotationalDampingConstant d2=1.0;
Angle phi1;
Angle phi2;
AngularVelocity omega1;
AngularVelocity omega2;
initial equation
phi1 = phi1_init;
phi2 = phi2_init;
omega1 = omega1_init;
omega2 = omega2_init;
equation
omega1 = der(phi1);
omega2 = der(phi2);
J1*der(omega1) = k1*(phi2-phi1)+d1*der(phi2-phi1);
J2*der(omega2) = k1*(phi1-phi2)+d1*der(phi1-phi2)-k2*phi2-d2*der(phi2);
end SecondOrderSystem;

View File

@@ -0,0 +1,19 @@
within ModelicaByExample.Subsystems.Pendula;
model System "A system of pendula"
import Modelica.Constants.g_n;
import Modelica.Constants.pi;
parameter Integer n=15 "Number of pendula";
parameter Modelica.SIunits.Position x[n] = linspace(0,(n-1)*0.05,n);
parameter Modelica.SIunits.Time T = 54;
parameter Modelica.SIunits.Time X = 30;
parameter Modelica.SIunits.Length lengths[n] = { g_n*(T/(2*pi*(X+(n-i))))^2 for i in 1:n};
parameter Modelica.SIunits.Angle phi0 = 0.5;
Pendulum pendulum[n](x=x, each m=1, each phi=phi0, L=lengths)
annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
inner Modelica.Mechanics.MultiBody.World world
annotation (Placement(transformation(extent={{-80,-60},{-60,-40}})));
annotation (experiment(StopTime=54,
Interval=9e-3, Tolerance=1e-008));
end System;

View File

@@ -0,0 +1,4 @@
within ;
package ModelicaByExample
annotation (uses(Modelica(version="3.2.1")));
end ModelicaByExample;

View File

@@ -0,0 +1,3 @@
within ModelicaByExample;
package PackageExamples "Examples of using packages"
end PackageExamples;

View File

@@ -0,0 +1,3 @@
within ModelicaByExample.Subsystems;
package GearSubsystemModel "Build a subsystem model representing a gear with backlash"
end GearSubsystemModel;

View File

@@ -0,0 +1,3 @@
within ModelicaByExample.Subsystems;
package Pendula "Example of using arrays of subsystems to build complete systems"
end Pendula;

View File

@@ -0,0 +1,329 @@
IMPLEMENTATION MODULE HuffChan;
(*
This module shows how to redefine standard IO file functions. It provides
functions for reading and writing packed files opened in Raw mode.
*)
IMPORT IOChan, IOLink, ChanConsts, IOConsts, SYSTEM, Strings;
FROM Storage IMPORT ALLOCATE, DEALLOCATE;
CONST
rbldFrq = 512; (* means: every 512 bytes rebuild table *)
TYPE
charTap = POINTER TO ARRAY [0..MAX(INTEGER)-1] OF CHAR;
smbTp = POINTER TO smbT;
smbT = RECORD (* Huffman's tree *)
ch : CHAR;
n : CARDINAL; (* frequncy of char ch *)
left,right,next : smbTp;
END;
tblT = RECORD (* bit sequence for code *)
vl : CARDINAL; (* bit sequence *)
cnt : INTEGER; (* it length *)
END;
lclDataT = RECORD (* channel's local data *)
tRoot : smbTp;
htbl : ARRAY [0..255] OF tblT; (* code -> bit sequence table *)
ftbl : ARRAY [0..255] OF CARDINAL; (* frequncey table *)
wBf,rb1,rb2 : CARDINAL;
wbc,rbc,smc : INTEGER;
chid : IOChan.ChanId;
END;
lclDataTp = POINTER TO lclDataT;
charp = POINTER TO CHAR;
VAR
did : IOLink.DeviceId;
ldt : lclDataTp;
PROCEDURE Shf(a:CARDINAL; b : INTEGER) : CARDINAL; (* shl a,b (or shr) *)
BEGIN
RETURN SYSTEM.CAST(CARDINAL,SYSTEM.SHIFT(SYSTEM.CAST(BITSET,a),b));
END Shf;
PROCEDURE wrDword(a:CARDINAL); (* write 4 bytes to file *)
BEGIN
IOChan.RawWrite(ldt^.chid,SYSTEM.ADR(a),4);
END wrDword;
PROCEDURE rdDword() : CARDINAL; (* read 4 bytes from file *)
VAR
a,z : CARDINAL;
BEGIN
a:=0;
IOChan.RawRead(ldt^.chid,SYSTEM.ADR(a),4,z);
RETURN a;
END rdDword;
PROCEDURE wrSmb(ch : CHAR); (* write bit sequence for code ch *)
VAR
v,h : CARDINAL;
b,c : INTEGER;
BEGIN
WITH ldt^ DO
v:=htbl[ORD(ch)].vl;
c:=htbl[ORD(ch)].cnt;
IF c+wbc<=32 THEN
wBf:=Shf(wBf,c);
wBf:=wBf+v;
wbc:=wbc+c;
IF wbc=32 THEN
wrDword(wBf);
wBf:=0; wbc:=0;
END;
RETURN;
END;
b:=c+wbc-32;
h:=Shf(v,-b);
wBf:=Shf(wBf,32-wbc)+h;
wrDword(wBf);
wBf:=v-Shf(h,b);
wbc:=b;
END;
END wrSmb;
PROCEDURE flush(); (* write data in buffer *)
BEGIN
WITH ldt^ DO
wBf:=Shf(wBf,32-wbc);
wrDword(wBf);
END;
END flush;
PROCEDURE getSym() : CHAR; (* find code for first bit sequence in buffer *)
VAR
t,i : CARDINAL;
b : INTEGER;
BEGIN
WITH ldt^ DO
IF rbc<=32 THEN
rb2:=rdDword();
t:=Shf(rb2,-rbc);
IF rbc=32 THEN t:=0; END;
rb1:=rb1+t;
rb2:=Shf(rb2,32-rbc);
IF rbc=0 THEN rb2:=0; END;
rbc:=rbc+32;
END;
FOR i:=0 TO 255 DO
t:=Shf(rb1,htbl[i].cnt-32);
IF t=htbl[i].vl THEN
rb1:=Shf(rb1,htbl[i].cnt);
b:=32-htbl[i].cnt;
t:=Shf(rb2,-b);
rb1:=rb1+t;
rb2:=Shf(rb2,32-b);
rbc:=rbc+b-32;
RETURN CHR(i);
END;
END;
END;
END getSym;
PROCEDURE Insert(s : smbTp); (* insert new character in Huffman's tree *)
VAR
cr : smbTp;
BEGIN
WITH ldt^ DO
IF tRoot=NIL THEN
cr:=tRoot;
tRoot:=s;
s^.next:=cr;
RETURN;
ELSIF tRoot^.n<=s^.n THEN
cr:=tRoot;
tRoot:=s;
s^.next:=cr;
RETURN;
END;
cr:=tRoot;
WHILE (cr^.next<>NIL) & (cr^.next^.n>s^.n) DO
cr:=cr^.next;
END;
s^.next:=cr^.next;
cr^.next:=s;
END;
END Insert;
PROCEDURE BuildTree(); (* build Huffman's tree *)
VAR
cr,ocr,ncr : smbTp;
BEGIN
WITH ldt^ DO
LOOP
ocr:=NIL; cr:=tRoot;
WHILE cr^.next^.next<>NIL DO
ocr:=cr; cr:=cr^.next;
END;
NEW(ncr);
ncr^.n:=cr^.n+cr^.next^.n;
ncr^.left:=cr;
ncr^.right:=cr^.next;
IF ocr<>NIL THEN
ocr^.next:=NIL;
Insert(ncr);
ELSE
tRoot:=NIL;
Insert(ncr);
EXIT;
END;
END;
END;
END BuildTree;
PROCEDURE BuildTable(cr: smbTp; vl,n: CARDINAL); (* build table: code -> bit sequence *)
BEGIN
WITH ldt^ DO
IF cr^.left=NIL THEN
htbl[ORD(cr^.ch)].vl:=vl;
htbl[ORD(cr^.ch)].cnt:=n;
DISPOSE(cr);
RETURN;
END;
vl:=vl*2;
BuildTable(cr^.left,vl,n+1);
BuildTable(cr^.right,vl+1,n+1);
DISPOSE(cr);
END;
END BuildTable;
PROCEDURE clcTab(); (* build code/bitseq. table from frequency table *)
VAR
i : CARDINAL;
s : smbTp;
BEGIN
WITH ldt^ DO
tRoot:=NIL;
FOR i:=0 TO 255 DO
NEW(s);
s^.ch:=CHR(i);
s^.n:=ftbl[i];
s^.left:=NIL; s^.right:=NIL; s^.next:=NIL;
Insert(s);
END;
BuildTree();
BuildTable(tRoot,0,0);
END;
END clcTab;
PROCEDURE iniHuf();
VAR
i : CARDINAL;
BEGIN
WITH ldt^ DO
FOR i:=0 TO 255 DO
ftbl[i]:=1;
END;
wBf:=0; wbc:=0; rb1:=0; rb2:=0; rbc:=0;
smc:=0;
clcTab();
END;
END iniHuf;
PROCEDURE RawWrite(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS;
len: CARDINAL);
VAR
i : CARDINAL;
ch : CHAR;
cht : charTap;
BEGIN
IF len = 0 THEN RETURN; END;
ldt:=SYSTEM.CAST(lclDataTp,x^.cd);
cht:=SYSTEM.CAST(charTap,buf);
WITH ldt^ DO
FOR i:=0 TO len-1 DO
ch:=cht^[i];
wrSmb(ch);
IF ch = 377C THEN wrSmb(ch); END;
ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1;
IF smc=rbldFrq THEN
clcTab();
smc:=0;
END;
END;
END;
x^.result:=IOChan.ReadResult(ldt^.chid);
END RawWrite;
PROCEDURE RawRead(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS;
blen: CARDINAL; VAR len: CARDINAL);
VAR
i : CARDINAL;
cht : charTap;
ch : CHAR;
BEGIN
ldt:=SYSTEM.CAST(lclDataTp,x^.cd);
cht:=SYSTEM.CAST(charTap,buf);
IF (blen=0) OR (x^.result<>IOConsts.allRight) THEN len:=0; RETURN; END;
WITH ldt^ DO
FOR i:=0 TO blen-1 DO
ch:=getSym();
IF ch = 377C THEN
ch:=getSym();
IF ch = 0C THEN
x^.result:=IOConsts.endOfInput;
len:=i; cht^[i]:=0C;
RETURN;
END;
END;
cht^[i]:=ch;
ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1;
IF smc=rbldFrq THEN
clcTab();
smc:=0;
END;
END;
len:=blen;
END;
END RawRead;
PROCEDURE CreateAlias(VAR cid: ChanId; io: ChanId; VAR res: OpenResults);
VAR
x : IOLink.DeviceTablePtr;
BEGIN
IOLink.MakeChan(did,cid);
IF cid = IOChan.InvalidChan() THEN
res:=ChanConsts.outOfChans
ELSE
NEW(ldt);
IF ldt=NIL THEN
IOLink.UnMakeChan(did,cid);
res:=ChanConsts.outOfChans;
RETURN;
END;
x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,"");
ldt^.chid:=io;
x^.cd:=ldt;
x^.doRawWrite:=RawWrite;
x^.doRawRead:=RawRead;
res:=ChanConsts.opened;
iniHuf();
x^.result:=IOConsts.allRight;
END;
END CreateAlias;
PROCEDURE DeleteAlias(VAR cid: ChanId);
VAR
x : IOLink.DeviceTablePtr;
BEGIN
x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,"");
ldt:=x^.cd;
IF ldt^.rbc=0 THEN
wrSmb(377C);
wrSmb(0C);
flush();
END;
DISPOSE(ldt);
IOLink.UnMakeChan(did,cid);
END DeleteAlias;
BEGIN
IOLink.AllocateDeviceId(did);
END HuffChan.

View File

@@ -0,0 +1,109 @@
undef("PrnOscPat_driver")
function PrnOscPat_driver(eof[*][*][*]:numeric, eof_ts[*][*]:numeric, kPOP[1]:integer)
; =================================================================
; compute Principal Oscillation Patterns (POPs)
; =================================================================
local dim_ts, dim_eof, neof, ntim, nlat, mlon, dnam_ts, dnam_eof, neof, j \
, cov0, cov1, cov0_inverse, A, z, Z, pr, pi, zr, zi, mean, stdev \
, evlr, eigi, eigr
begin
dim_ts = dimsizes(eof_ts) ; (neof,ntim)
dim_eof = dimsizes(eof) ; (neof,nlat,mlon)
ntim = dim_ts(1)
neof = dim_eof(0)
nlat = dim_eof(1)
mlon = dim_eof(2)
dnam_ts = getvardims(eof_ts) ; dimension names
dnam_eof= getvardims(eof) ; used at end for meta data
; =================================================================
; lag-0 and lag-1 matrices
; =================================================================
if (get_ncl_version().eq."6.1.2") then ; bug in 6.1.2
cov0 = covcorm(eof_ts,(/1,0/)) ; lag-0 covariance matrix
else
cov0 = covcorm(eof_ts,(/0,1/)) ; lag-0 covariance matrix (n x n)
end if
; either
cov1 = covcorm_xy(eof_ts, eof_ts, (/0,1,0/)) ; lag-1
;cov1 = covcorm_xy(eof_ts(:,0:ntim-2) \ ; alternative, brute force
; ,eof_ts(:,1:ntim-1), (/0,0,0/))
;printVarSummary(cov1)
; =================================================================
; matrix A contains information for evolution of the POP system.
; POPs are eigenvectors of A.
; =================================================================
cov0_inverse = inverse_matrix(cov0)
A = cov1#inverse_matrix(cov0) ; [*][*] => neof x neof
; =================================================================
; NCL 6.1.1 of dgeevx: evlr(2,2,N,N) ; (left(0)/right(1), real(0)/imag(1),:,:)
; Eigenvalues are returned as attributes: eigi = evlr@eigi ; eigr = evlr@eigr
; =================================================================
evlr = dgeevx_lapack(A, "B", "V", "V", "B", False)
; =================================================================
; POP time series from eigenvalues and right eigenvectors
; =================================================================
;PR = (/ evlr(1,0,:,:) /) ; right ev (1), real part (0)
;PI = (/ evlr(1,1,:,:) /) ; right ev (1), imag part (1)
; kPOP is what we want; use righteigenvector
pr = (/ evlr(1,0,kPOP-1,:) /) ; right ev (1), real part (0), row 'kPOP-1'
pi = (/ evlr(1,1,kPOP-1,:) /) ; right ev (1), imag part (1), row 'kPOP-1'
z = inverse_matrix( (/ (/sum(pr*pr), sum(pr*pi)/) \
, (/sum(pr*pi), sum(pi*pi)/) /))#(/pr,pi/)#eof_ts
; complex conjugate
z = (/z(0,:), -z(1,:)/) ; real & imag series
z = dim_rmvmean_n(z,1)
mean = dim_avg_n(z,1) ; calculate mean
stdev= dim_stddev_n(z,1) ; calculate stdev
z = dim_standardize_n(z,1,1) ; standardize time series
z!0 = "nPOP" ; add meta data
z!1 = dnam_ts(1)
z&nPOP = (/0,1/)
z&$dnam_ts(1)$ = eof_ts&$dnam_ts(1)$
z@stdev = stdev
z@mean = mean
z@long_name = "POP timeseries"
;printVarSummary(z)
; =================================================================
; POP spatial patterns
; =================================================================
zr = pr(0)*eof(0,:,:) ; construct POP spatial domain
zi = pi(0)*eof(0,:,:)
do j=1,neof-1
zr = zr + pr(j)*eof(j,:,:)
zi = zi + pi(j)*eof(j,:,:)
end do
Z = (/zr*stdev(0), -zi*stdev(1)/) ; scale patterns by time series stdev
Z!0 = "nPOP" ; add meta data
Z!1 = dnam_eof(1)
Z!2 = dnam_eof(2)
Z&nPOP = (/0,1/)
Z&$dnam_eof(1)$ = eof&$dnam_eof(1)$
Z&$dnam_eof(2)$ = eof&$dnam_eof(2)$
Z@long_name = "POP pattern"
;printVarSummary(Z)
; =================================================================
; return POP time series and POP spatial patterns as a
; variable of type 'list' which contains 2 variables
; =================================================================
return( [/z, Z/] ) ; this is type "list"
end

View File

@@ -0,0 +1,115 @@
;*************************************************
; WRF static: panel different variables
;************************************************
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl"
begin
;************************************************
; open file and read in data
;************************************************
f = addfile("static.wrfsi.nc", "r")
;************************************************
; Read variables
;************************************************
use = f->use(0,0,:,:) ; land use dominant category
stl = f->stl(0,0,:,:) ; top layer (0-30cm) dom cat soiltype
sbl = f->sbl(0,0,:,:) ; bottom layer (30-90cm) dom cat soiltype
lat2d = f->lat(0,0,:,:)
lon2d = f->lon(0,0,:,:)
lsMask= f->lnd(0,0,:,:) ; land (1) water (0) mas
;************************************************
; Use mask function to set all ocean areas to _FillValue
;************************************************
use = mask(use,lsMask,1)
stl = mask(stl,lsMask,1)
sbl = mask(sbl,lsMask,1)
;************************************************
; Associate 2D coordinates with variables for plotting
;************************************************
use@lat2d = lat2d
use@lon2d = lon2d
stl@lat2d = lat2d
stl@lon2d = lon2d
sbl@lat2d = lat2d
sbl@lon2d = lon2d
;************************************************
; The file should be examined via: ncdump -v grid_type static.wrsi
; This will print the print type. then enter below.
;************************************************
projection = "mercator"
;************************************************
; create plots
;************************************************
wks = gsn_open_wks("ps" ,"WRF_static") ; ps,pdf,x11,ncgm,eps
gsn_define_colormap(wks ,"BlAqGrYeOrReVi200"); choose colormap
res = True ; plot mods desired
res@gsnSpreadColors = True ; use full range of colormap
res@cnFillOn = True ; color plot desired
res@cnLinesOn = False ; turn off contour lines
res@cnLineLabelsOn = False ; turn off contour labels
res@cnLevelSpacingF = 1 ; manually specify interval
res@cnFillMode = "RasterFill" ; activate raster mode
res@lbLabelAutoStride = True ; let NCL figure lb stride
;************************************************
; Turn on lat / lon labeling
;************************************************
;;res@pmTickMarkDisplayMode = "Always" ; turn on tickmarks
dimll = dimsizes(lat2d)
nlat = dimll(0)
mlon = dimll(1)
res@mpProjection = projection
res@mpLimitMode = "Corners"
res@mpLeftCornerLatF = lat2d(0,0)
res@mpLeftCornerLonF = lon2d(0,0)
res@mpRightCornerLatF = lat2d(nlat-1,mlon-1)
res@mpRightCornerLonF = lon2d(nlat-1,mlon-1)
res@mpCenterLonF = f->LoV ; set center logitude
if (projection.eq."LambertConformal") then
res@mpLambertParallel1F = f->Latin1
res@mpLambertParallel2F = f->Latin2
res@mpLambertMeridianF = f->LoV
end if
res@mpFillOn = False ; turn off map fill
res@mpOutlineDrawOrder = "PostDraw" ; draw continental outline last
res@mpOutlineBoundarySets = "GeophysicalAndUSStates" ; state boundaries
;;res@tfDoNDCOverlay = True ; True only for 'native' grid
res@gsnAddCyclic = False ; data are not cyclic
;************************************************
; allocate array for 3 plots
;************************************************
plts = new (3,"graphic")
;************************************************
; Tell NCL not to draw or advance frame for individual plots
;************************************************
res@gsnDraw = False ; (a) do not draw
res@gsnFrame = False ; (b) do not advance 'frame'
plts(0) = gsn_csm_contour_map(wks,use,res)
plts(1) = gsn_csm_contour_map(wks,stl,res)
plts(2) = gsn_csm_contour_map(wks,sbl,res)
;************************************************
; create panel: panel plots have their own set of resources
;************************************************
resP = True ; modify the panel plot
resP@txString = "Land Use and Soil Type"
resP@gsnMaximize = True ; maximize panel area
resP@gsnPanelRowSpec = True ; specify 1 top, 2 lower level
gsn_panel(wks,plts,(/1,2/),resP) ; now draw as one plot
end

160
samples/NCL/WRF_track_1.ncl Normal file
View File

@@ -0,0 +1,160 @@
;********************************************************
; Plot storm stracks from wrfout files.
;********************************************************
;
; JUN-18-2005
; So-Young Ha (MMM/NCAR)
; SEP-01-2006
; Slightly modified by Mary Haley to add some extra comments.
; ===========================================
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
begin
; DATES
date = (/1512,1600,1612,1700,1712,1800,1812,1900/)
ndate = dimsizes(date)
sdate = sprinti("%4.0i",date)
; Experiment name (for legend)
EXP = (/"EXP_I"/) ; (/"EXP_I","EXP_II","EXP_III"/)
nexp = dimsizes(EXP)
; To get lat/lon info.
a = addfile("wrfout_d01_2003-07-15_00:00:00.nc","r")
lat2d = a->XLAT(0,:,:)
lon2d = a->XLONG(0,:,:)
dimll = dimsizes(lat2d)
nlat = dimll(0)
mlon = dimll(1)
; Sea Level Pressure
slp = wrf_user_getvar(a,"slp",0)
dims = dimsizes(slp)
; Array for track
time = new(ndate,string)
imin = new(ndate,integer)
jmin = new(ndate,integer)
smin = new(ndate,integer)
; =======
; ndate
; =======
fs = systemfunc("ls wrfout*00")
nfs= dimsizes(fs)
if(nfs .ne. ndate) then
print("Check input data:"+nfs+" .ne. "+ndate)
end if
do ifs=0,nfs-1
f = addfile(fs(ifs)+".nc","r")
time(ifs) = wrf_user_list_times(f)
; print(time(ifs))
slp2d = wrf_user_getvar(f,"slp",0)
; We need to convert 2-D array to 1-D array to find the minima.
slp1d = ndtooned(slp2d)
smin(ifs) = minind(slp1d)
; Convert the index for 1-D array back to the indeces for 2-D array.
minij = ind_resolve(ind(slp1d.eq.min(slp2d)),dims)
imin(ifs) = minij(0,0)
jmin(ifs) = minij(0,1)
; print(time(ifs)+" : "+min(slp2d)+" ("+imin(ifs)+","+jmin(ifs)+")")
end do
;
; Graphics section
wks=gsn_open_wks("ps","track") ; Open PS file.
gsn_define_colormap(wks,"BlGrYeOrReVi200") ; Change color map.
res = True
res@gsnDraw = False ; Turn off draw.
res@gsnFrame = False ; Turn off frame advance.
res@gsnMaximize = True ; Maximize plot in frame.
res@tiMainString = "Hurricane Isabel" ; Main title
WRF_map_c(a,res,0) ; Set up map resources
; (plot options)
plot = gsn_csm_map(wks,res) ; Create a map.
; Set up resources for polymarkers.
gsres = True
gsres@gsMarkerIndex = 16 ; filled dot
;gsres@gsMarkerSizeF = 0.005 ; default - 0.007
cols = (/5,160,40/)
; Set up resources for polylines.
res_lines = True
res_lines@gsLineThicknessF = 3. ; 3x as thick
dot = new(ndate,graphic) ; Make sure each gsn_add_polyxxx call
line = new(ndate,graphic) ; is assigned to a unique variable.
; Loop through each date and add polylines to the plot.
do i = 0,ndate-2
res_lines@gsLineColor = cols(0)
xx=(/lon2d(imin(i),jmin(i)),lon2d(imin(i+1),jmin(i+1))/)
yy=(/lat2d(imin(i),jmin(i)),lat2d(imin(i+1),jmin(i+1))/)
line(i) = gsn_add_polyline(wks,plot,xx,yy,res_lines)
end do
lon1d = ndtooned(lon2d)
lat1d = ndtooned(lat2d)
; Loop through each date and add polymarkers to the plot.
do i = 0,ndate-1
print("dot:"+lon1d(smin(i))+","+lat1d(smin(i)))
gsres@gsMarkerColor = cols(0)
dot(i)=gsn_add_polymarker(wks,plot,lon1d(smin(i)),lat1d(smin(i)),gsres)
end do
; Date (Legend)
txres = True
txres@txFontHeightF = 0.015
txres@txFontColor = cols(0)
txid1 = new(ndate,graphic)
; Loop through each date and draw a text string on the plot.
do i = 0, ndate-1
txres@txJust = "CenterRight"
ix = smin(i) - 4
print("Eye:"+ix)
if(i.eq.1) then
txres@txJust = "CenterLeft"
ix = ix + 8
end if
txid1(i) = gsn_add_text(wks,plot,sdate(i),lon1d(ix),lat1d(ix),txres)
end do
; Add marker and text for legend. (Or you can just use "pmLegend" instead.)
txres@txJust = "CenterLeft"
txid2 = new(nexp,graphic)
pmid2 = new(nexp,graphic)
do i = 0,nexp-1
gsres@gsMarkerColor = cols(i)
txres@txFontColor = cols(i)
ii = ((/129,119,109/)) ; ilat
jj = ((/110,110,110/)) ; jlon
ji = ii*mlon+jj ; col x row
pmid2(i) = gsn_add_polymarker(wks,plot,lon1d(ji(i)),lat1d(ji(i)),gsres)
txid2(i) = gsn_add_text(wks,plot,EXP(i),lon1d(ji(i)+5),lat1d(ji(i)),txres)
end do
draw(plot)
frame(wks)
end

129
samples/NCL/cru_8.ncl Normal file
View File

@@ -0,0 +1,129 @@
;*****************************************************
; cru_8.ncl
;
; Concepts illustrated:
; - Plotting CRU (Climate Research Unit)/ BADC data
; - Selecting a sub-period
; - calculating a climatology
; - Drawing raster contours; very basic graphics
;
;*****************************************************
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" ; not needed 6.20 onward
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
; create references (pointers) to the files
diri = "./"
fcld = addfile(diri+"cru_ts3.21.1901.2012.cld.dat.nc", "r")
fdtr = addfile(diri+"cru_ts3.21.1901.2012.dtr.dat.nc", "r")
ffrs = addfile(diri+"cru_ts3.21.1901.2012.frs.dat.nc", "r")
fpet = addfile(diri+"cru_ts3.21.1901.2012.pet.dat.nc", "r")
fpre = addfile(diri+"cru_ts3.21.1901.2012.pre.dat.nc", "r")
ftmn = addfile(diri+"cru_ts3.21.1901.2012.tmn.dat.nc", "r")
ftmp = addfile(diri+"cru_ts3.21.1901.2012.tmp.dat.nc", "r")
ftmx = addfile(diri+"cru_ts3.21.1901.2012.tmx.dat.nc", "r")
fvap = addfile(diri+"cru_ts3.21.1901.2012.vap.dat.nc", "r")
fwet = addfile(diri+"cru_ts3.21.1901.2012.wet.dat.nc", "r")
; specify start & last dates (arbitrary)
ymStrt = 199101
ymLast = 200012
; get index values of start/lat dates
time = fcld->time
yyyymm = cd_calendar(time, -1)
ntStrt = ind(yyyymm.eq.ymStrt) ; index values
ntLast = ind(yyyymm.eq.ymLast)
; read time segment
cld = fcld->cld(ntStrt:ntLast,:,:)
dtr = fdtr->dtr(ntStrt:ntLast,:,:)
frs = ffrs->frs(ntStrt:ntLast,:,:)
pet = fpet->pet(ntStrt:ntLast,:,:)
pre = fpre->pre(ntStrt:ntLast,:,:)
tmn = ftmn->tmn(ntStrt:ntLast,:,:)
tmp = ftmp->tmp(ntStrt:ntLast,:,:)
tmx = ftmx->tmx(ntStrt:ntLast,:,:)
vap = fvap->vap(ntStrt:ntLast,:,:)
wet = fwet->wet(ntStrt:ntLast,:,:)
printVarSummary(cld) ; [time | 120] x [lat | 360] x [lon | 720]
; calculate monthly climatologies
cldclm = clmMonTLL(cld)
dtrclm = clmMonTLL(dtr)
frsclm = clmMonTLL(frs)
petclm = clmMonTLL(pet)
preclm = clmMonTLL(pre)
tmnclm = clmMonTLL(tmn)
tmpclm = clmMonTLL(tmp)
tmxclm = clmMonTLL(tmx)
vapclm = clmMonTLL(vap)
wetclm = clmMonTLL(wet)
printVarSummary(cldclm) ; [month | 12] x [lat | 360] x [lon | 720]
;************************************
; create plots ... very simple
;************************************
nt = 6
month = "July"
yrStrt = ymStrt/100
yrLast = ymLast/100
title = month+": "+yrStrt+"-"+yrLast
wks = gsn_open_wks("ps","cru") ; open a ps file
gsn_define_colormap(wks,"ncl_default") ; choose colormap; not needed 6.20 onward
plot = new(2,graphic) ; create graphic array
res = True
res@cnFillOn = True ; turn on color fill; not needed 6.20 onward
res@cnFillMode = "RasterFill" ; Raster Mode
res@cnLinesOn = False ; Turn off contour lines
res@gsnDraw = False ; do not draw picture
res@gsnFrame = False ; do not advance frame
res@lbOrientation = "Vertical" ; vertical label bar
resp = True
resp@gsnMaximize = True ; make ps, eps, pdf large
resp@txString = title+": CLD, FRS"
plot(0)=gsn_csm_contour_map_ce(wks,cldclm(nt,:,:),res)
plot(1)=gsn_csm_contour_map_ce(wks,frsclm(nt,:,:),res)
gsn_panel(wks,plot,(/2,1/),resp)
resp@txString = title+": PET, VAP"
plot(0)=gsn_csm_contour_map_ce(wks,petclm(nt,:,:),res)
plot(1)=gsn_csm_contour_map_ce(wks,vapclm(nt,:,:),res)
gsn_panel(wks,plot,(/2,1/),resp)
resp@txString = title+": TMN, TMX"
plot(0)=gsn_csm_contour_map_ce(wks,tmnclm(nt,:,:),res)
plot(1)=gsn_csm_contour_map_ce(wks,tmxclm(nt,:,:),res)
gsn_panel(wks,plot,(/2,1/),resp)
resp@txString = title+": TMP, DTR"
plot(0)=gsn_csm_contour_map_ce(wks,tmpclm(nt,:,:),res)
plot(1)=gsn_csm_contour_map_ce(wks,dtrclm(nt,:,:),res)
gsn_panel(wks,plot,(/2,1/),resp)
resp@txString = title+": WET, PRE"
plot(0)=gsn_csm_contour_map_ce(wks,wetclm(nt,:,:),res)
;colors = (/ ... /)
;res@cnFillPalette = colors ; optional: distinct colors for categories
res@cnLevelSelectionMode = "ExplicitLevels" ; use unequal spacing
res@cnLevels = (/2.0,10,25,37.5,50,75,100,125,150,175,200,300,400,500,750/)
plot(1)=gsn_csm_contour_map_ce(wks,preclm(nt,:,:),res)
gsn_panel(wks,plot,(/2,1/),resp)

View File

@@ -0,0 +1,20 @@
;******************** Inputs Regarding Input and Output Data *************************************
;netCDFFilePath = "NULL-MYD04_L2.051-MIL2ASAE.0022-AERONET_AOD_L2.2-20112106165049.nc"
;outputFilePath = "plot-output"
;******************* Inputs Regarding Data Structure ***********************************************
;lPlotVariablesList = "mean_AERONET_AOD_L2_2_AOD0558intrp_Ames,mean_MIL2ASAE_0022_AOD0866b_Ames"
;rPlotVariablesList = "medn_MYD04_L2_051_AOD0550dpbl_l_Ames"
;xDimName = "time"
;xDimSize = 365
;******************* Inputs Regarding the View Annotations ****************************************
;title = "MAPSS Time Series"
;yLAxisLabel = "Mean AOD"
;yRAxisLabel = "Median AOD"
;*******************END INPUTS ********************************************************************

128
samples/NCL/hdf4sds_7.ncl Normal file
View File

@@ -0,0 +1,128 @@
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
;**************************************************************
; User Input
;***************************************************************
; INPUT
diri = "./" ; input directory
fili = "wv_LV3_MET08_20050102_12345678_L00013712E00013712.hdf"
pltDir = "./" ; directory for plot output
sfx = get_file_suffix(fili,1)
;pltName = sfx@fBase ; output graphic name
pltName = "hdf4sds"
pltType = "ps"
;***************************************************************
; End User Input
;***************************************************************
;***************************************************************
; Open SEVIRI L3 'wv' HDF file
;***************************************************************
; Note the rather unusual data format: flag *prepended* to data value
;***************************************************************
; integer twc_lv3 ( fakeDim0, fakeDim1 )
; long_name : total water vapour column + flag
; units : fmmmm
; format : I4
; valid_range : ( 10000, 38000 )
; _FillValue : -99
; legend_01 : f = flag
; legend_02 : f = 1 averaged level 2 values
; legend_03 : f = 2 interpolated from averaged level 2 values
; legend_04 : f = 3 gaps filled with NVAP climatology
; legend_05 : mmmm = water vapour column in mm * 100. as integer
; legend_06 : Example: 11025 means: flag = 1, 10.25 mm water vapour column
; min_lat : -74.75
; max_lat : 61.75
; min_lon : -75.25
; max_lon : 75.25
; dlat : 0.5
; dlon : 0.5
;---------------------------------------------------------------
f = addfile (diri+fili, "r")
ifx = f->twc_lv3 ; fmmmm (integer)
printVarSummary(ifx)
flag = ifx/10000 ; extract flag
ix = ifx - flag*10000 ; extract mmmm
x = ix*0.01 ; scale
; create meta data for 'x'
dimx = dimsizes(x)
nlat = dimx(0) ; grid size x(nlat,mlon)
mlon = dimx(1)
lat = fspan(ifx@min_lat, ifx@max_lat, nlat)
lat@units = "degrees_north"
lon = fspan(ifx@min_lon, ifx@max_lon, mlon)
lon@units = "degrees_east"
x!0 = "lat"
x!1 = "lon"
x&lat = lat
x&lon = lon
x@long_name = "SEVIRI: Total Water Vapor"
x@units = "mm"
delete( [/ifx, ix/] ) ; no longer needed
;***************************************************************
; Create plot
;***************************************************************
wks = gsn_open_wks(pltType, pltDir+pltName)
plot = new (2, "graphic")
res = True ; plot mods desired
res@gsnAddCyclic = False ; data noty global
res@gsnDraw = False
res@gsnFrame = False
res@cnFillOn = True ; turn on color fill
res@cnLinesOn = False ; turn of contour lines
res@cnFillMode = "RasterFill" ; Raster Mode
res@cnLinesOn = False ; Turn off contour lines
res@cnLineLabelsOn = False ; Turn off contour lines
res@cnMissingValFillColor= "background" ; "foreground"
res@mpCenterLonF = 0.5*(min(x&lon) + max(x&lon))
res@mpMinLatF = min(x&lat)
res@mpMaxLatF = max(x&lat)
res@mpMinLonF = min(x&lon)
res@mpMaxLonF = max(x&lon)
;res@lbOrientation = "Vertical"
plot(0) = gsn_csm_contour_map_ce(wks,x, res)
; plot flag
copy_VarCoords(x, flag)
flag@long_name = "Flag"
flag@units = "1=avg(L2), 2=int(L2), 3=NVAP"
print(flag&lat+" "+flag(:,{30}))
res@cnLevelSelectionMode = "ManualLevels" ; set manual contour levels
res@cnMinLevelValF = 2 ; set min contour level
res@cnMaxLevelValF = 3 ; one less than max
res@cnLevelSpacingF = 1 ; set contour spacing
res@lbLabelStrings = ispan(1,3,1) ; 1, 2, 3
res@lbLabelPosition = "Center" ; label position
res@lbLabelAlignment = "BoxCenters"
res@gsnLeftString = ""
res@gsnRightString = ""
res@gsnCenterString = "flag: 1=avg(L2), 2=int(L2), 3=NVAP"
plot(1) = gsn_csm_contour_map_ce(wks,flag, res)
resP = True ; modify the panel plot
resP@txString = fili
resP@gsnMaximize = True
gsn_panel(wks,plot,(/1,2/),resP) ; now draw as one plot

125
samples/NCL/mask_12.ncl Normal file
View File

@@ -0,0 +1,125 @@
;----------------------------------------------------------------------
; mask_12.ncl
;
; Concepts illustrated:
; - Using a worldwide shapefile to create a land/ocean mask
; - Masking a data array based on a geographical area
; - Attaching shapefile polylines to a map plot
; - Attaching lat/lon points to a map using gsn_coordinates
;----------------------------------------------------------------------
; Downloaded GSHHS shapefiles from:
;
; http://www.ngdc.noaa.gov/mgg/shorelines/data/gshhg/latest/
;
; Used the "coarsest" one: "GSHHS_shp/c/GSHHS_c_L1.shp".
;----------------------------------------------------------------------
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "./shapefile_mask_data.ncl"
;----------------------------------------------------------------------
; Main code
;----------------------------------------------------------------------
begin
WRITE_MASK = True
DEBUG = False
;---Read data to plot and mask
dir = "$NCARG_ROOT/lib/ncarg/data/cdf/"
cdf_prefix = "uv300"
cdf_file = dir + cdf_prefix + ".nc"
fin = addfile(cdf_file,"r")
u = fin->U(1,:,:)
;
; Create a mask array the same size as "u", using
; lat/lon data read off a shapefile.
;
shpfile = "GSHHS_shp/c/GSHHS_c_L1.shp"
opt = True
opt@return_mask = True
land_mask = shapefile_mask_data(u,shpfile,opt)
;---Mask "u" against land and ocean.
u_land_mask = where(land_mask.eq.1,u,u@_FillValue)
u_ocean_mask = where(land_mask.eq.0,u,u@_FillValue)
copy_VarMeta(u,u_land_mask)
copy_VarMeta(u,u_ocean_mask)
;---Start the graphics
wks = gsn_open_wks("ps","mask")
res = True
res@gsnMaximize = True ; maximize plot in frame
res@gsnDraw = False ; don't draw plot yet
res@gsnFrame = False ; don't advance frame yet
res@cnFillOn = True
res@cnLineLabelsOn = False
res@cnLinesOn = False
;---Make sure both plots have same contour levels
mnmxint = nice_mnmxintvl(min(u),max(u),25,False)
res@cnLevelSelectionMode = "ManualLevels"
res@cnMinLevelValF = mnmxint(0)
res@cnMaxLevelValF = mnmxint(1)
res@cnLevelSpacingF = mnmxint(2)
res@lbLabelBarOn = False
res@gsnAddCyclic = False
res@mpFillOn = False
res@mpOutlineOn = False
res@gsnRightString = ""
res@gsnLeftString = ""
;---Create plot of original data and attach shapefile outlines
res@tiMainString = "Original data with shapefile outlines"
map_data = gsn_csm_contour_map(wks,u,res)
dum1 = gsn_add_shapefile_polylines(wks,map_data,shpfile,False)
;---Create plots of masked data
res@tiMainString = "Original data masked against land"
map_land_mask = gsn_csm_contour_map(wks,u_land_mask,res)
res@tiMainString = "Original data masked against ocean"
map_ocean_mask = gsn_csm_contour_map(wks,u_ocean_mask,res)
if(DEBUG) then
mkres = True
; mkres@gsMarkerSizeF = 0.007
mkres@gsnCoordsAttach = True
gsn_coordinates(wks,map_data,u,mkres)
mkres@gsnCoordsNonMissingColor = "yellow"
mkres@gsnCoordsMissingColor = "black"
gsn_coordinates(wks,map_land_mask,u_land_mask,mkres)
gsn_coordinates(wks,map_ocean_mask,u_ocean_mask,mkres)
end if
;---Add shapefile outlines
dum2 = gsn_add_shapefile_polylines(wks,map_land_mask,shpfile,False)
dum3 = gsn_add_shapefile_polylines(wks,map_ocean_mask,shpfile,False)
;---Draw all three plots on one page
pres = True
pres@gsnMaximize = True
pres@gsnPanelLabelBar = True
gsn_panel(wks,(/map_data,map_land_mask,map_ocean_mask/),(/3,1/),pres)
if(WRITE_MASK) then
delete(fin) ; Close file before we open again.
;
; Make copy of file so we don't overwrite original.
; This is not necessary, but it's safer.
;
new_cdf_file = cdf_prefix + "_with_mask.nc"
system("/bin/cp " + cdf_file + " " + new_cdf_file)
finout = addfile(new_cdf_file,"w")
filevardef(finout, "land_mask", typeof(land_mask), (/ "lat", "lon" /) )
finout->land_mask = (/land_mask/)
end if
end

115
samples/NCL/mcsst_1.ncl Normal file
View File

@@ -0,0 +1,115 @@
;*****************************************************
; mcsst_1.ncl
;
; Concepts illustrated:
; - Plotting NAVO MCSST data
; - Using fbindirread to read in fortran binary data
; - Converting "byte" data to "float"
; - Adding meta data (attributes and coordinates) to a variable
; - Adding gray to an existing color map
; - Spanning all but the last two colors in a color map for contour fill
; - Drawing raster contours
;
;*****************************************************
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
;***************************************
; type of data available on file
;***************************************
; ipar=0 Weekly Binned Sea Surface Temperature
; ipar=1 Number of Points in Bin
; ipar=2 Weekly Binned Sea Surface Temperature Anomaly
; ipar=3 Interpolated Sea Surface Temperature
; ipar=4 Interpolated Sea Surface Temperature Anomaly
;***************************************
begin
ipar = 3
fname = "2001311d18N16.dat"
tmp = fbindirread(fname,ipar,(/1024,2048/),"byte")
;***************************************
; convert to float and then change to true SST
;***************************************
xslope = 0.15
if(ipar.eq.4.or.ipar.eq.2)then ; anom has different intercept
yint = -20.0
end if
if(ipar.eq.3.or.ipar.eq.0)then
yint = -3.0
end if
sst = new((/1024,2048/),"float") ; create float var
sst = tmp*xslope+yint ; convert to float
delete(tmp) ; delete unecessary array
;***************************************
; assign missing values. The original missing value was zero, but since it was
; not assigned in NCL, it was not recognized. The new missing values are
; listed below. These will be changed later.
;***************************************
if(ipar.eq.4)then
sst@_FillValue = -20
end if
if(ipar.eq.3.or.ipar.eq.0)then
sst@_FillValue = -3
end if
;***************************************
; create coordinate variables
;***************************************
nlat = 1024
dy = 180./nlat
lat = (90. -(ispan(0,1023,1)*dy))-dy/2
lat!0 = "lat"
lat&lat = lat
lat@units = "degrees_north"
nlon = 2048
dx = 360./nlon
lon = (ispan(0,2047,1)*dx)+dx/2-180. ; note -180. added by sjm to align
lon!0 = "lon"
lon&lon = lon
lon@units = "degrees_east"
;***************************************
; fill out the netCDF data model
;***************************************
sst!0 = "lat" ; name dimensions
sst!1 = "lon" ; ditto
sst = sst(::-1,:) ; reverse lat orientation
sst@long_name = "NAVO MCSST" ; assign long_name
sst@units = "deg C" ; assign units
sst&lat = lat ; assign lat cv
sst&lon = lon ; assign lon cv
sst@_FillValue = -999. ; assign missing value
;***************************************
; get year and day from filename
;***************************************
res = True ; plot mods desired
title = stringtochar(fname) ; parse file name to get date
year = title(0:3)
jday = title(4:6)
res@gsnCenterString = year+" "+jday ; create center string
;***************************************
; create plot
;***************************************
wks = gsn_open_wks("ps","mcsst") ; open workstation (plot destination)
gsn_define_colormap(wks,"BlGrYeOrReVi200") ; choose colormap
;
; This will not be necessary in V6.1.0 and later. Named colors can
; be used without having to first add them to the color map.
;
d = NhlNewColor(wks,0.8,0.8,0.8) ; add gray to colormap
res@cnFillOn = True ; turn on color
res@gsnSpreadColors = True ; use full range of colormap
res@gsnSpreadColorStart = 2 ; start at color 2
res@gsnSpreadColorEnd = -3 ; don't use added gray
res@cnLinesOn = False ; no contour lines
res@cnFillDrawOrder = "PreDraw" ; draw contours before continents
res@gsnMaximize = True ; maximize plot
; For a grid this size, it is better to use raster mode. It will be
; significantly faster, and will not go over NCL's 16mb default plot size.
res@cnFillMode = "RasterFill" ; turn on raster mode
plot = gsn_csm_contour_map_ce(wks,sst,res) ; contour the variable
end

3
samples/NCL/primero.ncl Normal file
View File

@@ -0,0 +1,3 @@
val=102
a=val/4.
print(a)

172
samples/NCL/topo_9.ncl Normal file
View File

@@ -0,0 +1,172 @@
;----------------------------------------------------------------------
; topo_9.ncl
;
; Concepts illustrated:
; - Recreating a jpeg topographic image as an NCL map object
; - Zooming in on a jpeg image
; - Drawing a box around an area of interest on a map
; - Attaching polylines to a map
; - Using "overlay" to overlay multiple contour plots
; - Using more than 256 colors per frame
; - Using functions for cleaner code
;----------------------------------------------------------------------
; NOTE: This example will only work with NCL V6.1.0 and later.
;
; This script recreates a JPEG image that was converted to a NetCDF
; file with color separated bands using the open source tool
; "gdal_translate":
;
; gdal_translate -ot Int16 -of netCDF EarthMap_2500x1250.jpg \
; EarthMap_2500x1250.nc
;----------------------------------------------------------------------
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
;----------------------------------------------------------------------
; This function imports a JPEG image that's on the whole globe,
; and recreates it as an NCL map object that is zoomed in on the
; southern tip of Africa.
;----------------------------------------------------------------------
undef("recreate_jpeg_image")
function recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon)
begin
orig_jpg_filename = "EarthMap_2500x1250.jpg"
nc_filename = "EarthMap_2500x1250.nc"
;--You could use a system call to do the NetCDF conversion
; cmd = "gdal_translate -ot Int16 -of netCDF " + jpeg_filename + \
; " " + nc_filename)
; system(cmd)
;---Read the three bands of data
f = addfile(nc_filename,"r")
Band1 = where(f->Band1.gt.255, 255, f->Band1) ; red channel
Band2 = where(f->Band2.gt.255, 255, f->Band2) ; green channel
Band3 = where(f->Band3.gt.255, 255, f->Band3) ; blue channel
band_dims = dimsizes(Band3)
nlat = band_dims(0)
nlon = band_dims(1)
print("dimensions of image = " + nlat + " x " + nlon)
;
; Add lat/lon data so we can overlay on a map, and/or
; overlay contours. We know the image is global,
; cylindrical equidistant, and centered about lon=0.
;
lat = fspan( -90, 90,nlat)
lon = fspan(-180,180,nlon)
lat@units = "degrees_north"
lon@units = "degrees_east"
Band1!0 = "lat"
Band1!1 = "lon"
Band2!0 = "lat"
Band2!1 = "lon"
Band3!0 = "lat"
Band3!1 = "lon"
Band1&lat = lat
Band1&lon = lon
Band2&lat = lat
Band2&lon = lon
Band3&lat = lat
Band3&lon = lon
res = True
res@gsnMaximize = True
res@gsnFrame = False ; Don't draw or advance
res@gsnDraw = False ; frame yet.
res@cnFillOn = True
res@cnFillMode = "RasterFill" ; Raster fill can be faster
res@cnLevelSelectionMode = "EqualSpacedLevels"
res@cnMaxLevelCount = 254
res@cnFillBackgroundColor = (/ 1., 1., 1., 1./)
res@cnLinesOn = False ; Turn off contour lines .
res@cnLineLabelsOn = False ; Turn off contour labels
res@cnInfoLabelOn = False ; Turn off info label
res@lbLabelBarOn = False ; Turn off labelbar
res@gsnRightString = "" ; Turn off subtitles
res@gsnLeftString = ""
res@pmTickMarkDisplayMode = "Always"
;---Construct RGBA colormaps...
ramp = fspan(0., 1., 255)
reds = new((/255, 4/), float)
greens = new((/255, 4/), float)
blues = new((/255, 4/), float)
reds = 0
greens = 0
blues = 0
reds(:,0) = ramp
greens(:,1) = ramp
blues(:,2) = ramp
; The red contour map is plotted fully opaque; the green and blue
; are plotted completely transparent. When overlain, the colors
; combine (rather magically).
reds(:,3) = 1.
greens(:,3) = 0
blues(:,3) = 0
res@cnFillColors = greens
greenMap = gsn_csm_contour(wks, Band2, res)
res@cnFillColors = blues
blueMap = gsn_csm_contour(wks, Band3, res)
;---This will be our base, so make it a map plot.
res@cnFillColors = reds
res@gsnAddCyclic = False
res@mpFillOn = False
;---Zoom in on area of interest
res@mpMinLatF = minlat
res@mpMaxLatF = maxlat
res@mpMinLonF = minlon
res@mpMaxLonF = maxlon
redMap = gsn_csm_contour_map(wks, Band1, res)
;---Overlay everything to create the topo map
overlay(redMap, greenMap)
overlay(redMap, blueMap)
return(redMap)
end
;----------------------------------------------------------------------
; Main code
;----------------------------------------------------------------------
begin
;---Recreating jpeg images only works for X11 and PNG.
wks = gsn_open_wks("png","topo")
;---Southern part of Africa
minlat = -40
maxlat = 5
minlon = 10
maxlon = 40
map = recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon)
;---Overlay a red box
lonbox = (/ 15, 35, 35, 15, 15/)
latbox = (/-30,-30,-10,-10,-30/)
lnres = True
lnres@gsLineColor = "red" ; red box
lnres@gsLineThicknessF = 4.0 ; make box thicker
box = gsn_add_polyline(wks,map,lonbox,latbox,lnres)
draw(map) ; Drawing the map will draw the red box
frame(wks)
end

Some files were not shown because too many files have changed in this diff Show More