Compare commits

...

190 Commits

Author SHA1 Message Date
Colin Seymour
15e2b74dec Release v6.0.0 (#4002)
* Update all submodules

* Ensure always using lastest docker image

* Allow passing in GEM_VERSION from env

This is useful to building test gems in a cache friendly way using:
`GEM_VERSION=$(git describe --tags 2>/dev/null | sed 's/-/./g' | sed
's/v//') bundle exec rake build_gem`

* Update submodules one last time

* Set version 6.0.0
2018-01-26 13:12:12 +00:00
gauravsavadi
969333610c Replacing MATLAB Language bundle (#4000)
* Updated readme to new MATLAB language grammar

* added MATLAB language grammer

* Update .gitmodules

* Update .gitmodules

* Update grammars.yml
2018-01-26 07:10:21 +00:00
Vicent Martí
8438c6cd3e compiler: Do not output empty grammars (#4001) 2018-01-25 14:49:03 +01:00
Dylan Simon
60f748d47b Add .x as XDR/RPCGEN (#3472)
* Add .x as XDR/RPCGEN

XDR/RPC language as documented in RFC5531, RFC4506.
Samples are from glibc and RFCs.

* Add Logos samples

https://github.com/JonasGessner/NoCarrier/blob/master/NoCarrier.x - MIT
cf31f4e466/llvm-gcc-R3/gcc/testsuite/objc/execute/string1.x - GPL2
f6415578fa/perapp-plugin/Tweak.x - GPL3
d1b3e83888/NCHax.x - Apache

* Add disambiguate heuristics for .x

* Add RPC to vendor/README.md
2018-01-25 09:15:09 +00:00
Seppe Stas
8da6ddf9d9 Override languages being included by language statistics (#3807)
* Add detectable key to languages

This key allows to override the language being included in the
language stats of a repository.

* Make detectable override-able using .gitattributes

* Mention `linguist-detectable` in README

* Remove detectable key from languages

Reverts changes in 0f7c0df5.

* Update commit hash to the one that was merged

PR #3806 changed the commit hash. The original commit was not
actually merged into the test/attributes branch.

* Fix check to ensure detectable is defined

* Add include in language stats tests when detectable set

* Ignore detectable when vendored, documentation or overridden

* Add documentation on detectable override in README

* Improve documentation on detectable override in README
2018-01-23 12:17:48 +00:00
Rajendra arora
fef7a12c85 Added Travis-ci build passing markup icon (#3995) 2018-01-20 18:52:26 +00:00
Vicent Martí
b80ca35b75 Update release docs with grammars tarball instructions (#3994) 2018-01-19 12:12:02 +01:00
Vicent Martí
c8171322f5 script: Add build-grammars-tarball (#3992) 2018-01-18 18:23:55 +01:00
Colin Seymour
4c1e61892a Bump escape_utils to ~> 1.2.0 (#3981)
There are very few changes between 1.1.x and 1.2.x, and I can't see any
that would indicate this would break anything. It does however fix
https://github.com/github/linguist/issues/3797 and
https://github.com/github/linguist/issues/3649 thus allowing peeps to
install Linguist on Windows using rubyinstaller2.
2018-01-18 09:53:50 +00:00
Paul Chaignon
4db659dede Whitelist hideFromUser key in grammars (#3989)
hideFromuser is an undocumented key from TextMate to hide some
grammars from the user.
2018-01-16 10:49:33 +01:00
Colin Seymour
ed73a72cbe Add issue and pull request templates (#3972)
* Add issue and pull request templates

* Implement feedback

* Request new and old grammar refs

* Add note about vendor, documentation, and generated lists

* Implement @Alhadis's suggestions
2018-01-15 10:11:53 +00:00
Brandon Elam Barker
512f077da8 adding the .kojo extension for Scala (#3960) 2018-01-13 09:38:34 +00:00
Josh Padnick
3260b06241 Format .tfvars file as HashiCorp Config Language. (#3885)
* Format .tfvars file as HashiCorp Config Language.

* Add sample terraform.tfvars file to demonstrate HCL rendering.
2018-01-12 17:27:41 +00:00
BRAMILLE Sébastien
ef3b0b6af3 Add solidity language (#3973)
* add solidity language

* add solidity color

* move samples to test fixtures

they're not used by the bayesian classifier

* Update languages.yml

* Rename RefundVault.sol to RefundVault.solidity

* Rename pygments-example.sol to pygments-example.solidity

* Change color from #383838 to #AA6746

`Color #383838 is too close to ["3F3F3F", "383838"]`

* Fix test

* Remove test/fixtures and add samples

* Remove extension

* Remove sample file
2018-01-12 17:26:51 +00:00
Colin Seymour
434023460e Revert "Check generated Jest snap file" (#3984)
* Revert "Remove Arduino as a language (#3933)"

This reverts commit 8e628ecc36.

* Revert "Check generated Jest snap file (#3874)"

This reverts commit ca714340e8.
2018-01-12 11:49:02 +00:00
oldmud0
8e628ecc36 Remove Arduino as a language (#3933)
* Remove Arduino as a language

* Move Arduino samples to C++

* Move .ino entry to its correct place
2018-01-11 10:48:19 +00:00
Yuya Takeyama
ca714340e8 Check generated Jest snap file (#3874)
* Check generated Jest snap file

* Check file name rule first

ref: https://github.com/github/linguist/pull/3874/files#r146168309

* Check extension first

It must be cheaper
ref: https://github.com/github/linguist/pull/3874/files#r146168426
2018-01-11 09:25:13 +00:00
DoctorWhoof
a4e6fc78c8 Added a few Monkey2 examples (#3811)
* Added Monkey2 (extension .monkey2) example

This compiles with the most up to date Monkey2 release (V1.1.06).

* Sorting example in Monkey2

* Add files via upload

* Gui example using the MojoX module
2018-01-11 09:23:54 +00:00
Egor Zhdan
db1d4f7893 Add Materialize.css to the vendor list (#3943) 2018-01-11 09:48:49 +01:00
Paolo Di Tommaso
bee7e55618 Add Nextflow language support (#3870)
* Added nextflow language
* Added main.nf to list of filenames
* Fixed duplicate groovy scope
* Removed hello-world example
* Update grammar submodule
* Removed main.nf from filenames
* Added nextflow.config example
2018-01-09 12:47:59 +01:00
Ashe Connor
5fbe9c0902 Allow classifier to run on symlinks as usual (#3948)
* Fixups for symlink detection, incl. test

* assert the heuristics return none for symlink
2018-01-08 09:01:16 +11:00
Paul Chaignon
a840668599 perl6 alias for Perl 6 (#3977)
Many repository rely on `perl6` as a Markdown key for code snippet
highlighting. The new Perl 6 name breaks this behavior as it requires
`perl-6` as the Markdown key.
2018-01-07 21:32:55 +01:00
Paul Chaignon
38cb8871ba Update URL for HTTP grammar (#3966) 2018-01-01 21:57:13 +01:00
Colin Seymour
d0b906f128 Update README and CONTRIBUTING documentation (#3955)
* Add more troubleshooting info

* Add more updates

* A lot more words and reformatting

* Few more tweaks

* Add how it works on GitHub.com

* More clarifications

* Feedback tweaks

* Add missing run

* Learn grammar
2017-12-21 13:17:20 +00:00
Ashe Connor
d4c2d83af9 Do not traverse symlinks in heuristics (#3946) 2017-12-12 21:53:36 +11:00
Ashe Connor
0b81b21983 Grammar compiler invocation fix (#3945)
* Correct grammar-compiler invocation in build_gem

/cc @vmg

* || true so we can release with broken grammars
2017-12-12 09:41:21 +01:00
Colin Seymour
1a769c4665 Handle repo cleanup race more elegantly (#3930)
* Don't attempt to get pwd for error message

* Print error instead of raising exception

This is more user-friendly too.

* Switch back to raise, but rescue it too

* Refactor
2017-12-11 12:37:21 +00:00
Vicent Martí
e7e64bf39a compiler: Add error output to the compiler (#3935) 2017-12-04 19:20:38 +01:00
Paul Chaignon
e4b9430024 Vendor CSS files in font-awesome directory (#3932) 2017-12-02 15:24:05 +01:00
Paul Chaignon
a76805e40d Improve Prolog .pro heuristic to avoid false positives (#3931)
The `[a:-b]` syntax for index selection in arrays is valid in IDL and
matches the heuristic for Prolog. Update the Prolog heuristic to
exclude `[`.
2017-12-02 15:08:19 +01:00
Ashe Connor
8d27845f8c drop max token len to 32 (#3925) 2017-12-01 19:33:50 +11:00
Ashe Connor
9a8ab45b6f Limit tokens to 64 characters or less (#3922) 2017-12-01 13:41:59 +11:00
Vicent Martí
e335d48625 New Grammars Compiler (#3915)
* grammars: Update several grammars with compat issues

* [WIP] Add new grammar conversion tools

* Wrap in a Docker script

* Proper Dockerfile support

* Add Javadoc grammar

* Remove NPM package.json

* Remove superfluous test

This is now always checked by the grammars compiler

* Update JSyntax grammar to new submodule

* Approve Javadoc license

* grammars: Remove checked-in dependencies

* grammars: Add regex checks to the compiler

* grammars: Point Oz to its actual submodule

* grammars: Refactor compiler to group errors by repo

* grammars: Cleanups to error reporting
2017-11-30 16:15:48 +01:00
NachoSoto
4f46155c05 Add Carthage/Build to generated list so it doesn't show in PR diffs (#3920)
Equivalent to #3865, but for Carthage.
2017-11-29 14:26:23 +00:00
NachoSoto
38901d51d2 Changed Carthage vendor regex to allow folder in any subdirectory (#3921)
In monorepro projects, it's not uncommon for `Carthage` to not be in the root directory.
2017-11-29 14:25:04 +00:00
Shai Mishali
ded0dc74e0 Add Cocoapods to generated list so it doesn't show in PR diffs (#3865)
* Add Cocoapods to generated list so it doesn't show in PR diffs

* Removed Cocoapods from vendor.yml

* Enhance regex to match only Cocoapod's Pods folder

* Adds additional test cases for generated Pods folder
2017-11-28 11:04:18 +00:00
Colin Seymour
c5d1bb5370 Unvendor tools/ (#3919)
* Unvendor tools/

* Remove test
2017-11-28 10:52:02 +00:00
Andrey Sitnik
c8ca48856b Add PostCSS syntaxes support (#3916) 2017-11-26 16:21:10 +11:00
John Gardner
7be6fb0138 Test Perl before Turing when running heuristics (#3880)
* Test Perl before Turing when running heuristics

* Revise order of Perl 5 and 6 in `.t` heuristic

See: https://github.com/github/linguist/pull/3880#issuecomment-340319500

* Combine patterns for disambiguating Perl
2017-11-17 21:25:56 +11:00
wesdawg
8c516655bc Add YARA language (#3877)
* Add YARA language grammars

* Add YARA to languages.yml

* Add YARA samples

* Add YARA to README
2017-11-16 12:16:33 +11:00
Michael R. Crusoe
9dceffce2f Add the Common Workflow Language standard (#3902)
* Add the language for the Common Workflow Language standards

* add CWL grammer

* add MIT licensed CWL sample

* script/set-language-ids --update for CWL
2017-11-16 12:15:55 +11:00
Ashe Connor
33be70eb28 Fix failing edges on leading commas in args (#3905) 2017-11-16 11:44:51 +11:00
Jingwen
9c4dc3047c Add BUILD.bazel to Python filenames (#3907)
BUILD.bazel and BUILD are used by Bazel, and both are valid filenames. BUILD.bazel is used in favor of BUILD if it exists.

https://stackoverflow.com/a/43205770/521209
2017-11-15 10:04:36 +00:00
Pratik Karki
d8e5f3c965 Add color for LFE language. (#3895)
* 'Add color to LFE'

* Test passing color for LFE

* Let LFE be independent rather than grouping to Erlang
2017-11-14 07:35:12 +00:00
Ashe Connor
71bf640a47 Release v5.3.3 (#3903)
* Add self to maintainers

* bump to v5.3.3
2017-11-13 18:17:38 +11:00
Ashe Connor
c9b3d19c6f Lexer crash fix (#3900)
* input may return 0 for EOF

Stops overruns into fread from nothing.

* remove two trailing contexts

* fix up sgml tokens
2017-11-10 22:11:32 +11:00
Alex Arslan
0f4955e5d5 Update Julia definitions to use Atom instead of TextMate (#3871) 2017-11-09 19:39:37 +11:00
Paul Chaignon
d968b0e9ee Improve heuristic for XML/TypeScript (#3883)
The heuristic for XML .ts files might match TypeScript generics
starting with TS
2017-11-04 11:16:44 +01:00
Ashe Connor
1f5ed3b3fe Release v5.3.2 (#3882)
* update grammar submodules

* bump to 5.3.2
2017-11-01 10:01:03 +10:00
Robert Koeninger
297be948d1 Set color for Idris language (#3866) 2017-10-31 16:27:21 +00:00
Charles Milette
b4492e7205 Add support for Edje Data Collections (#3879)
* Add support for Edje Data Collections

Fixes #3876

* Add EDC in grammars list
2017-10-31 16:26:44 +00:00
Paul Chaignon
c05bc99004 Vendor a few big JS libraries (#3861) 2017-10-31 15:12:02 +01:00
Ashe Connor
99eaf5faf9 Replace the tokenizer with a flex-based scanner (#3846)
* Lex everything except SGML, multiline, SHEBANG

* Prepend SHEBANG#! to tokens

* Support SGML tag/attribute extraction

* Multiline comments

* WIP cont'd; productionifying

* Compile before test

* Add extension to gemspec

* Add flex task to build lexer

* Reentrant extra data storage

* regenerate lexer

* use prefix

* rebuild lexer on linux

* Optimise a number of operations:

* Don't read and split the entire file if we only ever use the first/last n
  lines

* Only consider the first 50KiB when using heuristics/classifying.  This can
  save a *lot* of time; running a large number of regexes over 1MiB of text
  takes a while.

* Memoize File.size/read/stat; re-reading in a 500KiB file every time `data` is
  called adds up a lot.

* Use single regex for C++

* act like #lines

* [1][-2..-1] => nil, ffs

* k may not be set
2017-10-31 11:06:56 +11:00
Cesar Tessarin
21babbceb1 Fix Perl 5 and 6 disambiguation bug (#3860)
* Add test to demonstrate Perl syntax detection bug

A Perl 5 .pm file containing the word `module` or `class`, even with
an explicit `use 5.*` statement, is recognized as Perl 6 code.

* Improve Perl 5 and Perl 6 disambiguation

The heuristics for Perl 5 and 6 `.pm` files disambiguation was done
searching for keywords which can appear in both languages (`class` and
`module`) in addition to the `use` statement check.

Due to Perl 6 being tested first, code containing those words would
always be interpreted as Perl 6.

Test order was thus reversed, testing for Perl 5 first. Since Perl 6
code would never contain a `use 5.*` statement, this does no harm to
Perl 6 detection while fixing the problem to Perl 5.

Fixes: #3637
2017-10-23 10:16:56 +01:00
Paul Chaignon
15885701cd Tests for Ruby 2.4 must pass (#3862) 2017-10-17 11:08:04 +02:00
Ashe Connor
9b942086f7 Release v5.3.1 (#3864)
* Fix Perl/Pod disambiguation
2017-10-17 19:31:20 +11:00
Ashe Connor
93cd47822f Only recognise Pod for .pod files (#3863)
We uncomplicate matters by removing ".pod" from the Perl definition
entirely.
2017-10-17 19:05:20 +11:00
Colin Seymour
ea3e79a631 Release v5.3.0 (#3859)
* Update grammars

* Update haskell scopes to match updated grammar

* Bump version to 5.3.0
2017-10-15 09:52:27 +01:00
Maickel Hubner
0af9a35ff1 Create association with OpenEdge .w files (#3648)
* Update heuristics.rb

* Update languages.yml

* Create consmov.w

* Create menu.w

* Switch out large samples for smaller ones

* Relax regex
2017-10-14 18:12:16 +01:00
Codecat
44048c9ba8 Add Angelscript language (#3844)
* Add AngelScript scriping language

* Add AngelScript sample

* Initial implementation of Angelscript

* Update Angelscript tm_scope and ace_mode

* Move Angelscript after ANTLR

* Updated grammar list

* Alphabetical sorting for Angelscript

* Angelscript grammar license is unlicense

* Add ActionScript samples

* Added a heuristic for .as files

* Whitelist sublime-angelscript license hash

* Added heuristic test for Angelscript and Actionscript

* Remove .acs from Angelscript file extensions
2017-10-14 17:34:12 +01:00
Chris Llanwarne
e51b5ec9b7 Add WDL language support (#3858)
* Add WDL language support

* Add ace mode
2017-10-14 17:12:47 +01:00
Colin Seymour
a47008ea00 Ping @lildude from now on (#3856) 2017-10-13 17:49:04 +01:00
Dan Moore
a0b38e8207 Don't count VCL as Perl for statistics. (#3857)
* Don't count VCL as Perl for statistics.

While the Varnish-specific language was apparently inspired by C and Perl, there's no reason to group it as Perl for repo statistics.

* Re-adding color for VCL.

Which was accidentally removed as part of https://github.com/github/linguist/pull/2298/files#diff-3552b1a64ad2071983c4d91349075c75L3223
2017-10-12 15:42:31 -04:00
Colin Seymour
10dfe9f296 Fix typo in script/add-grammar (#3853) 2017-10-10 18:26:26 +01:00
Ján Neščivera
0b9c05f989 added VS Code workspace files to vendored path (#3723) 2017-10-08 17:32:01 +01:00
Paul Chaignon
95dca67e2b New repository for TypeScript grammar (#3730) 2017-10-06 13:27:14 +01:00
Adædra
e98728595b Change Ruby grammar source (#3782)
* Move the Ruby grammar to use Atom's one
2017-09-21 09:52:10 +01:00
Kerem
4cd558c374 Added natvis extension to XML (#3789)
* natvis extension added to xml.

* Added sample natvis file from the Chromium project.
2017-09-17 13:31:02 +01:00
John Gardner
adf6206ef5 Register "buildozer.spec" as an INI filename (#3817)
Resolves #3814.
2017-09-17 13:29:49 +01:00
Shan Mahanama
c2d558b71d Add Ballerina language (#3818)
* Add Ballerina language

* Add missing file

* Update color

* Update with required changes

* Update sub-module
2017-09-17 13:29:12 +01:00
Nate Whetsell
78c58f956e Update Ace modes for Csound languages (#3822) 2017-09-17 13:27:24 +01:00
Agustin Mendez
fc1404985a Add DataWeave language (#3804)
* Add DataWeave language

* Add Licence

* Update to latest DataWeave revision
2017-09-07 15:28:46 +01:00
Adeel Mujahid
5d48ccd757 Classify some project files as XML (#3696)
Also added disambiguation rule for `.proj` and `.user`.

##### CSCFG

https://github.com/search?utf8=%E2%9C%93&q=extension%3Acscfg+NOT+nothack&type=Code
(16.7K hits)

##### CSDEF

https://github.com/search?utf8=%E2%9C%93&q=extension%3Acsdef+NOT+nothack&type=Code
(12.7K hits)

##### CCPROJ

https://github.com/search?utf8=%E2%9C%93&q=extension%3Accproj+NOT+nothack&type=Code
(5K hits)

##### DEPPROJ

https://github.com/search?utf8=%E2%9C%93&q=extension%3Adepproj+NOT+nothack&type=Code
(505 hits)

##### NDPROJ

https://github.com/search?utf8=%E2%9C%93&q=extension%3Andproj+NOT+nothack&type=Code
(194 hits)

##### PROJ

https://github.com/search?utf8=%E2%9C%93&q=extension%3Aproj+%28project+OR+Property+OR+Import+OR+xml+OR+xmlns%29&type=Code
(35K hits)

##### SHPROJ

https://github.com/search?utf8=%E2%9C%93&q=extension%3Ashproj+NOT+nothack&type=Code
(13K hits)
2017-09-07 10:04:09 +01:00
Abigail
3530a18e46 Add .clang-tidy filename for YAML (#3767)
.clang-tidy is the filename used for clang-tidy's configuration file.
clang-tidy is a clang-based C++ "linter" tool. For more info, see:
https://clang.llvm.org/extra/clang-tidy/
2017-09-07 10:01:10 +01:00
Marciano C. Preciado
ae8f4f9228 Make Matlab's Color More Appropriate (#3771)
Purple is not an affiliated color of Matlab or Mathworks. Change the color to better reflect the color theme of the Matlab sofware and logo.
2017-09-07 09:59:19 +01:00
Robert Koeninger
7c34d38786 Updated color for Ceylon language (#3780)
* Updated color for Ceylon language

* Adjusting Ceylon color due to its proximity to Clarion color

* Made Ceylon color darker to avoid collision

* Used more accurate color

* Specified tm_scope for Ceylon
2017-09-07 09:58:30 +01:00
Bradley Meck
38bc5fd336 added .mjs extension to JavaScript (#3783)
* added .mjs extension to JavaScript

* add missing newline at end of file

* add example from https://github.com/bmeck/composable-ast-walker/blob/master/example/constant_fold.mjs
2017-09-07 09:56:36 +01:00
Anthony D. Green
6b06e47c67 Create VBAllInOne.vb (#3785)
Adding the test file the Visual Basic compiler team uses to verify parsing and other features.
2017-09-07 09:55:20 +01:00
Mat Mariani
061712ff78 Added syntax highlighting for Squirrel (#3791)
* Added syntax highlighting for Squirrel

https://github.com/search?utf8=%E2%9C%93&q=extension%3Anut+NOT+nothack&t
ype=Code

Squirrel is already detected by GitHub but has no syntax
highlighting.

* removed duplicate `source.nut`
2017-09-07 09:53:25 +01:00
Seppe Stas
7707585d5e Change KiCad Board language to KiCad Legacy Layout (#3799)
* Change KiCad Board language to KiCad Legacy Layout

KiCad .brd files and .kicad_pcb files have the same purpose, they are both source files for PCB layouts. Having one of the file types named "KiCad Board" and the other one "KiCad Layout" can cause confusion since it implies they are not the same thing.

The [.brd files use the old, legacy layout format](http://kicad-pcb.org/help/file-formats/#_native_file_formats) that is [not actively used anymore](https://github.com/search?utf8=%E2%9C%93&q=language%3A%22KiCad+Board%22&type=Repositories&ref=advsearch&l=KiCad+Board&l=). Having it come before the KiCad Layout language in the Language Selection list and not having it flagged as legacy can cause people to select it when searching for KiCad layout files.

* Change KiCad sample according to changes in 4b306f34

* Update vendor/README.md using script/list-grammars
2017-09-07 09:52:27 +01:00
DoctorWhoof
fa7d433886 Added ".monkey2" extension to Monkey Programming Language (#3809)
The latest Monkey Programming Language extension is ".monkey2". The language description is available at "http://monkeycoder.co.nz".
2017-09-07 09:39:52 +01:00
PatrickJS
998e24cf36 Add ".gql" as a GraphQL file extension (#3813) 2017-09-07 09:38:42 +01:00
John Gardner
63ff51e2ed Add test to keep grammar-list synced with submodules (#3793)
* Add test to check if grammar list is outdated

* Update grammar list

* Fix duplicate punctuation in error messages
2017-08-24 21:13:30 +10:00
Colin Seymour
b541b53b78 Byebug requires Ruby 2.2 (#3790)
Also don't attempt to install it during testing.
2017-08-24 10:17:12 +01:00
Hardmath123
a878620a8e Add nearley language definition. (#3781) 2017-08-17 18:03:38 +01:00
John Gardner
5633fd3668 Fix classification of bogus "markup" languages (#3751)
* Reclassify Protocol Buffer as a data-type language

References: #3740

* Fix classification of bogus "markup" languages

* Fix category of the ironically-named "Pure Data"

Ironically and *appropriately* named, might I add.
2017-08-16 22:48:51 +10:00
Colin Seymour
9d0af0da40 Update to charlock_holmes 0.7.5 (#3778)
This fixes https://github.com/github/linguist/issues/3777
2017-08-16 10:08:33 +01:00
Colin Seymour
edabdc75a5 Bump version: 5.2.0 (#3765) 2017-08-10 14:54:09 +01:00
Wade Urry
6db7736860 Add flow-typed to vendor.yml (#3741) 2017-08-09 11:25:27 +01:00
John Gardner
dd3d8586c5 Refine definition of KiCad (#3743)
* Refine definition of KiCad language

* Add ".sch" as a registered Scheme extension

* Add more meaningful samples from real repositories
2017-08-08 18:47:26 +10:00
John Gardner
f1daf6192c Add Adobe Font Metrics to recognised filetypes (#3731)
* Add Adobe Font Metrics to recognised filetypes

* Reduce filesizes of AFM samples

* Add a self-generated, unpruned AFM sample
2017-08-08 18:30:37 +10:00
Paul Chaignon
2c41df376f Switch grammar for Reason (#3732) 2017-08-06 11:00:35 +02:00
James Dennes
3391dcce6a Make Language methods more resilient to non-String input (#3752)
* Add failing test for finding with non-String input

Show the failing behaviour of find_by_alias, find_by_name, and []
when non-String input is provided.

* Return nil rather than erroring on non-String input
2017-08-02 14:07:44 +02:00
John Gardner
f75c5707a6 Add support for Gerber files (#3744)
* Add grammar for PCB/Gerber Images

* Add language definition for Gerber files

* Fix rogue punctuation and rip chunks off Gerber
2017-08-02 22:00:16 +10:00
John Gardner
25de4e0ae2 Add Printer Font ASCII to recognised PostScript extensions (#3734)
* Register Adobe Type 1 fonts as PostScript files

* Add logic for recognising generated PFA files

* Extend list of PostScript generators
2017-08-02 21:58:40 +10:00
Yuki Izumi
7451424f12 Allow POD with Perl shebangs (#3735)
* Allow perl interpreter for Pod too

* Use precise dist

* This is a tautology

* Update heuristic to accept candidate input

* Minor rename
2017-07-31 13:39:20 +10:00
John Gardner
b94e018c3a Change Haskell's colour to use official branding (#3728)
Resolves github/linguist#3727.
2017-07-22 14:21:22 +01:00
Jared Harper
4dcf223c8e Support for C++ files generated by protobuf/grpc (#3640)
* Support for C++ files generated by protobuf/grpc

This changeset includes a sample generated file.

[grpc](http://grpc.io) is a high performance, open-source universal
RPC framework.

* Account for older gRPC protobuf plugin message
2017-07-22 14:20:55 +01:00
Santiago M. Mola
329f80d245 fix classifier tests (#3709)
test_classify_ambiguous_languages was not running any test, since
it was looking only for languages that are ambiguous on
filename for known filenames (rather than ambiguous for filename
or extension).

Note that test time and assertions.
Before:
  Finished in 0.149294s, 40.1892 runs/s, 46.8874 assertions/s.
After:
  Finished in 3.043109s, 1.9717 runs/s, 224.7702 assertions/s.
2017-07-22 14:20:15 +01:00
Santiago M. Mola
085604948e Add support for XPM. (#3706)
* .xpm and .pm extensions associated with XPM.

* .pm is disambiguated by searching the /* XPM */ string.
  This is how `file` performs detection and should work with
  every XPM3 file (most XPM generated by software later than 1991).

Added XPM samples:

* stick-unfocus.xpm: extracted from Fluxbox (MIT License)
  0c13ddc0c8/data/styles/Emerge/pixmaps/stick-unfocus.xpm

* cc-public_domain_mark_white.pm: public domain image from
  https://commons.wikimedia.org/wiki/File:Cc-public_domain_mark_white.svg
  converted to XPM with ImageMagick (convert input.svg output.xpm).
2017-07-22 14:19:22 +01:00
Colin Seymour
e60384b018 Release v5.1.0 (#3725)
* sublime-spintools now has a license so no need for whitelist

* Bump version: 5.0.12

* Use the more apt release of v5.1.0
2017-07-22 14:16:16 +01:00
Santiago M. Mola
470a82d9f5 shell: add more interpreters (#3708)
* ash: only interpreter, extension is more commonly used for
  Kingdom of Loathing scripting, e.g. github.com/twistedmage/assorted-kol-scripts

* dash: only interpreter, extension is more commonly used for
  dashboarding-related stuff

* ksh: extension was already present

* mksh

* pdksh
2017-07-20 10:33:28 +01:00
Santiago M. Mola
37979b26b0 improve .ms disambiguation (Unix Assembly / MAXScript) (#3707)
A few MAXScript files were misclassified as Unix Assembly.
Some of them can be found at github.com/davestewart/maxscript

* This commit changes the heuristic which looked for labels
  such as ".LG7E0:" to actually match the full label including
  the colon. This reduced the number of MAXScript files
  misclassified as Unix Assembly, without any new Unix Assembly
  misclassified so far.

* add MAXScript sample rolloutCreator.ms, extrated from MIT repo:
  https://github.com/davestewart/maxscript/blob/master/3D/3ds2ae/02_resources/max%20scripts/3ds%20ax%20scripts/rolloutCreator.ms
2017-07-10 10:03:12 +01:00
Santiago M. Mola
1a6df12902 fix Coq sample JsNumber.v (#3710)
It was fetched as HTML from GitHub instead of raw.
2017-07-10 09:41:36 +01:00
John Gardner
24e196df4e Add NCSA to license whitelist (#3714)
References:
* https://github.com/github/linguist/pull/3689#issuecomment-313665976
2017-07-08 00:59:05 +10:00
James Adams
8d178bfaed Improve Pan language support (#3691)
* Add a larger set of sample files for Pan

This is a fairly good cross section of Pan based on code from:
* https://github.com/quattor/template-library-examples
* https://github.com/quattor/template-library-core

* Add Pan language grammar
2017-07-03 18:49:15 +02:00
Chris Wilkinson
e9ec699931 Add xspec as XML file extension (#3702) 2017-07-03 18:39:39 +02:00
John Gardner
9a6c3f2c4d Register "cpanfile" as a Perl filename (#3704) 2017-07-03 20:45:20 +10:00
Theodore Dubois
648720301d Add misclassified C sample (#3652)
This sample is misclassified as Objective-C.
2017-06-30 17:11:50 +01:00
David Aylaian
c552e25bd7 Add C sample (#3698)
* Add C sample

Sample was incorrectly being identified as C++

* Changed asm.h license to the Unlicense

* Changed asm.h license to Apache 2.0
2017-06-30 09:32:16 +01:00
Justin Lecher
d5c8db3fb9 Add new language for the Easybuild framework (#3466)
The hpcugent/easybuild-framework is a python framework for the installation
of application in an HPC context. The actual package build description are
written in python but having .eb as extension.

Signed-off-by: Justin Lecher <jlec@gentoo.org>
2017-06-26 09:07:36 +01:00
Mahmoud Samir Fayed
632bcdc1ad Added Ring Language Support (#3662)
* update .gitmodules

* Update grammars.yml

* Create hello.ring

* Create Natural.ring

* Create weblib.ring

* vendor/grammars/language-ring

* fix order in grammars.yml

* remove two files from samples

* delete hello.ring

* Update languages.yml - add the R

* Create hello.ring

* Create natural.ring

* Create weblib.ring

* Create grammars.yml

* Create .gitmodules

* Create languages.yml

* Create languages.yml

* Create language-ring.txt

* Update .gitmodules

Prefer HTTPS links.

* Update hello.ring

Sample file from "real" applications (under permissive license) to train the Bayesian classifier.

* Update languages.yml

* Update weblib.ring

Reduce the file size

* Update .gitmodules

* Update .gitmodules

* Update .gitmodules

* Update .gitmodules

* Update submodule : language-ring

* Update weblib.ring

Sample : Using the web library.

* Create weighthistory

Add Sample

* Rename weighthistory to weighthistory.ring

* Update weblib.ring
2017-06-24 16:22:01 +01:00
Colby Pines
6b221172c0 Update vendor.yml: skeleton.css (#3682) 2017-06-24 13:19:43 +02:00
Robert Koeninger
6f0d801375 Added syntax definition for Fantom language (#3660)
* Added mgiannini/sublime-factor as a submodule

Provided better color for Fantom
Added license for sublime-fantom
Specified tm_scope for Fantom

* Redirected submodule for Fantom to fork with updated grammar

* Triggering build

* Updating sublime-fantom submodule

* Updated submodule sublime-fantom

* Adding Fantom samples
2017-06-21 09:29:13 +02:00
John Gardner
128abe3533 Fix spelling of Perl 6 (#3672)
Resolves #3671.
2017-06-20 19:39:39 +10:00
Colin Seymour
9312353d20 Improve running from cloned repo docs (#3669)
* Improve running from cloned repo docs
2017-06-20 10:29:17 +02:00
John Gardner
b6460f8ed6 Add recognition and classification of WebAssembly (#3650) 2017-05-30 18:02:03 +10:00
andretshurotshka
60f864a138 Support for Type Language (#3593)
* Support for Type Language

* Update Type Language

* Add one more sample for Type Language

* Update Type Language grammar
2017-05-29 06:46:56 +01:00
Colin Seymour
ca6121e3ea Update MD5 digest for testing under Ruby 2.4 (#3643)
* Update md5 sums for Ruby 2.4

Ruby 2.4 deprecated Fixnum & Bignum into Integer. This means the MD5 digests for the integers in our tests have a class of Integer instead of Fixnum which means we need to update the digests specifically for 2.4.

* Use Gem::Version for safer version comparison
2017-05-26 08:16:12 +01:00
Colin Seymour
7c17b1f10c Bump to v5.0.11 (#3642) 2017-05-25 16:12:34 +01:00
Paul Chaignon
d490fc303f Support for CWeb language (#3592)
Move .w file extension for CWeb to its own entry.
2017-05-25 09:22:40 +01:00
Michael Hadley
20fdac95f6 Add Closure Templates (#3634)
* Add Closure Templates to languages.yml

* Run script/add-grammar

* Add sample

* Run script/set-language-ids

* Add codemirror_mime_type
2017-05-25 09:15:32 +01:00
Colin Seymour
234ee8b6d2 Update location of Reason grammar (#3639) 2017-05-25 08:59:02 +01:00
Ross Kirsling
58ab593a64 Switch Dart grammars (Sublime → Atom). (#3633) 2017-05-20 17:41:46 +01:00
John Gardner
ec1f6a4cd6 Add ".nr" as a Roff file extension (#3630) 2017-05-18 03:03:47 +10:00
Colin Seymour
3eea8212f4 Revert "Use Textmate's HAML grammar" (#3629)
* Revert "Use Textmate's HAML grammar (#3627)"

This reverts commit a1e09ae3e6.

* Add back missing grammar sources
2017-05-16 15:58:39 +01:00
Vicent Martí
a1e09ae3e6 Use Textmate's HAML grammar (#3627)
* Use Textmate's HAML grammar

* Whitelist license
2017-05-16 12:46:04 +02:00
Robert Koeninger
c1f76c26e5 Add Shen grammar to vendor/README.md (#3626)
* Added sublime-shen as submodule

* Specified tm_scope in languages.yml

* Imported copy of license

* Added Shen grammar repo to vendor/README.md
2017-05-16 08:12:45 +01:00
Robert Koeninger
0983f62e02 Add syntax grammar for Shen language (#3625)
* Added sublime-shen as submodule

* Specified tm_scope in languages.yml

* Imported copy of license
2017-05-15 15:06:09 +01:00
Samuel Gunadi
190e54c020 Add comp, tesc, and tese as GLSL extensions (#3614)
* Add comp, tesc, and tese as GLSL file extensions

* Add GLSL compute shader sample

* Add GLSL tessellation control shader sample

* Add GLSL tessellation evaluation shader sample

* Remove .comp from GLSL extensions

We have to be sure that most of the .comp files on GitHub are indeed GLSL compute shaders.

* Remove GLSL compute shader sample
2017-05-15 09:05:07 +01:00
Lucas Bajolet
ded651159d Add Pep8 Assembly language (#2070)
Pep/8 is a toy assembly language used in some universities for teaching
the basics of assembly and low-level programming.

Signed-off-by: Lucas Bajolet <lucas.bajolet@gmail.com>
2017-05-15 09:02:06 +01:00
Serghei Iakovlev
acbab53198 Update Zephir links (#3608) 2017-05-10 15:56:21 +01:00
Simen Bekkhus
fba4babdcd Don't show npm lockfiles by default (#3611) 2017-05-10 15:55:16 +01:00
Colin Seymour
eb6a213921 Revert "Revert "Switch the PHP grammar to the upstream repo (#3575)"" (#3616)
* Revert "Revert "Switch the PHP grammar to the upstream repo (#3575)" (#3603)"

This reverts commit e93f41f097.
2017-05-10 15:53:15 +01:00
Colin Seymour
5e2c79e950 Bump version to v5.0.10 (#3604) 2017-05-05 18:49:35 +01:00
Colin Seymour
e93f41f097 Revert "Switch the PHP grammar to the upstream repo (#3575)" (#3603)
* Revert "Switch the PHP grammar to the upstream repo (#3575)"

Manually reverting this as it breaks PHP syntax highlighting on
github.com.

* Update submodule ref
2017-05-05 17:11:29 +01:00
Colin Seymour
994bc1f135 Release v5.0.9 (#3597)
* Update all grammars

* Update atom-language-clean grammar to match

* Don't update reason grammer

There seems to be a problem with the 1.3.5 release in that the conversion isn't producing a reason entry so doesn't match whats in grammar.yml

* Bump version to 5.0.9

* Update grammars

* Don't update javascript grammar

The current grammar has a known issue and is pending the fix in https://github.com/atom/language-javascript/pull/497
2017-05-03 14:49:26 +01:00
John Gardner
44f03e64c1 Merge heuristics for disambiguating ".t" files (#3587)
References: github/linguist#3546
2017-04-29 11:15:39 +02:00
Jacob Elder
4166f2e89d Clarify support for generated code (#3588)
* Clarify support for generated code

* Incorporate feedback

* TIL about how .gitattributes matching works
2017-04-28 16:20:22 -07:00
John Gardner
1a8f19c6f2 Fix numbering of ordered lists (#3586) 2017-04-28 14:02:38 -07:00
Santiago M. Mola
c0e242358a Fix heuristics after rename (#3556)
* fix Roff detection in heuristics

This affects extensions .l, .ms, .n and .rno.

Groff was renamed to Roff in 673aeb32b9851cc58429c4b598c876292aaf70c7,
but heuristic was not updated.

* replace FORTRAN with Fortran

It was already renamed in most places since 4fd8fce08574809aa58e9771e2a9da5d135127be
heuristics.rb was missing though.

* fix caseness of GCC Machine Description
2017-04-26 15:31:36 -07:00
thesave
eb38c8dcf8 [Add Language] Jolie (#3574)
* added support for Jolie language

* added support for Jolie language

* added samples for Jolie
2017-04-26 11:04:25 -07:00
Trent Schafer
f146b4afbd New extension support for PL/SQL language (#2735)
* Add additional PL/SQL file extensions

* Add PL/SQL samples for .ddl and .prc

* Fix sort order of PL/SQL extensions

* Restore vendor/grammars/assembly.

* Restore `pls` as primary PL/SQL extension

* Add tpb to go with tps
2017-04-26 11:03:01 -07:00
Nicolas Garnier
db15d0f5d2 Added MJML as an XML extension (#3582) 2017-04-26 19:24:57 +10:00
Michael Grafnetter
e6d57c771d Add .admx and .adml as extensions for XML (#3580)
* Add .admx and .adml as extensions for XML

* Fixed the order of extensions
2017-04-24 09:55:22 -07:00
Nathan Phillip Brink
eef0335c5f Clarify description of implicit alias. (#3578)
* Clarify description of implicit alias.

I was trying to look up the alias to use for DNS Zone. From the docs
the alias I should use would be dns zone, but in reality it is dns-zone.
This change updates the comments to describe how to derive the
implicit name of a given alias.

* Further clarify description of implicit alias.

@pchaigno requested replacing the Ruby with English.
2017-04-24 09:54:37 -07:00
Christoph Pojer
461c27c066 Revert "Added Jest snapshot test files as generated src (#3572)" (#3579)
This reverts commit f38d6bd124.
2017-04-22 14:20:54 +02:00
Matvei Stefarov
59d67d6743 Treat vstemplate and vsixmanifest as XML (#3517) 2017-04-22 09:25:50 +01:00
Sandy Armstrong
7aeeb82d3d Treat Xamarin .workbook files as markdown (#3500)
* Treat Xamarin .workbook files as markdown

Xamarin Workbook files are interactive coding documents for C#, serialized as
markdown files. They include a YAML front matter header block with some
metadata. Interactive code cells are included as `csharp` fenced code blocks.

An example can be found here:
https://github.com/xamarin/Workbooks/blob/master/csharp/csharp6/csharp6.workbook

Treated as markdown, it would appear like so:
https://gist.github.com/sandyarmstrong/e331dfeaf89cbce89043a1c31faa1297

* Add .workbook sample

Source: https://github.com/xamarin/Workbooks/blob/master/csharp/csharp6/csharp6.workbook
2017-04-20 15:29:17 +01:00
Christophe Coevoet
c98ca20076 Switch the PHP grammar to the upstream repo (#3575)
* Switch the PHP grammar to the upstream repo

* Update all URLs pointing to the PHP grammar bundle
2017-04-20 14:40:44 +01:00
Paul Chaignon
4e0b5f02aa Fix usage line in binary (#3564)
Linguist cannot work on any directory; it needs to be a Git
repository.
2017-04-20 10:18:03 +01:00
Tim Jones
8da7cb805e Add .cginc extension to HLSL language (#3491)
* Add .cginc extension to HLSL language

* Move extension to correct position

* Add representative sample .cginc file
2017-04-20 09:48:48 +01:00
Dorian
e5e81a8560 Add .irbc and Rakefile to matching ruby filenames (#3457) 2017-04-20 09:41:31 +01:00
Tim Jones
dd53fa1585 Add ShaderLab language (#3490)
* Add ShaderLab language

* Update HLSL and ShaderLab grammars to latest version

* Add .shader extension back to GLSL language

* Add sample GLSL .shader files

Note that these are copies of existing GLSL samples, renamed to have
the .shader extension.
2017-04-20 09:04:08 +01:00
Daniel F Moisset
354a8f079a Add suport for python typeshed (.pyi) extension (#3548) 2017-04-20 09:01:41 +01:00
Hank Brekke
f38d6bd124 Added Jest snapshot test files as generated src (#3572) 2017-04-20 08:58:39 +01:00
Santiago M. Mola
e80b92e407 Fix heuristic for Unix Assembly with .ms extension (#3550) 2017-04-06 22:01:42 +10:00
Martin Nowak
fa6ae1116f better heuristic distinction of .d files (#3145)
* fix benchmark

- require json for Hash.to_json

* better heuristic distinction of .d files

- properly recongnize dtrace probes
- recongnize \ in Makefile paths
- recongnize single line `file.ext : dep.ext` make targets
- recognize D module, import, function, and unittest declarations
- add more representative D samples

D changed from 31.2% to 28.1%
DTrace changed from 33.5% to 32.5%
Makefile changed from 35.3% to 39.4%

See
https://gist.github.com/MartinNowak/fda24fdef64f2dbb05c5a5ceabf22bd3
for the scraper used to get a test corpus.
2017-03-30 18:25:53 +01:00
Yuki Izumi
b7e27a9f58 .pod disambiguation heuristic fix (#3541)
Look for any line starting with "=\w+", not full lines, otherwise we
miss e.g. "=head1 HEADING".
2017-03-27 14:10:17 +11:00
Javier Honduvilla Coto
69ba4c5586 Update the Instrumenter doc ... (#3530)
... with an instance of the given`Instrumenter` instead of the class itself.
2017-03-23 06:11:45 +01:00
Rafer Hazen
c39d7fd6e8 Add data-engineering staff to maintainers list (#3533) 2017-03-22 07:06:58 -06:00
Yuki Izumi
44ed47cea1 Release v5.0.8 (#3535) 2017-03-22 16:41:36 +11:00
Yuki Izumi
de51cb08d2 Add .mdwn for Markdown (#3534) 2017-03-22 16:28:59 +11:00
Ronald Wampler
3dd2d08190 Add .mdown as an extension for Markdown (#3525)
* Add `.mdown` as an extension for Markdown

* Add `.mdown` sample
2017-03-22 16:14:54 +11:00
Yuki Izumi
3b625e1954 Release v5.0.7 (#3524)
* grammar update
* Release v5.0.7
2017-03-20 14:13:04 +11:00
Yuki Izumi
5c6f690b97 Prefer Markdown over GCC Machine Description (#3523)
* Add minimal Markdown sample
* Heuristic defaults to Markdown on no match
* Allow Linguist to detect empty blobs
2017-03-20 13:07:54 +11:00
Michael Rawlings
3bbfc907f3 [Add Language] Marko (#3519)
* add marko

* update marko
2017-03-17 09:46:20 +00:00
Colin Seymour
053b8bca97 GitHub.com now uses gitattributes overrides for syntax highlighting (#3518)
See https://github.com/github/linguist/issues/1792#issuecomment-286379822 for more details.
2017-03-15 22:42:08 -07:00
Yves Siegrist
7fb3db6203 Add .eye files to be used as ruby (#3509)
Usually files that are used for [eye](https://github.com/kostya/eye) have the file extension `.eye`.
A eye definition file always contains ruby code.
2017-03-13 17:22:56 -07:00
Liav Turkia
ba09394f85 Added a demos folder and updated regexes (#3512)
I added a check for case-sensitivity to the regex's. In my repositories, I have both a Docs and Demos folder and those wouldn't have been matched before. Now, they would.
2017-03-13 17:20:36 -07:00
Paul Chaignon
c59c88f16e Update grammar whitelist (#3510)
* Remove a few hashes for grammars with BSD licenses

There was an error in Licensee v8.8.2, which caused it to not
recognize some BSD licenses. v8.8.3 fixes it.

* Update submodules

Remove 2 grammars from the whitelist because their licenses were
added to a LICENSE file which a proper format (one that Licensee
detects).

MagicPython now supports all scopes that were previously supported
by language-python.
2017-03-13 17:19:06 -07:00
Brandon Black
8a6e74799a Merge branch 'master' of https://github.com/github/linguist 2017-03-13 17:13:48 -07:00
Brandon Black
4268769d2e adjusting travis config 2017-03-13 17:13:24 -07:00
NN
6601864084 Add wixproj as XML (#3511)
* Add wixproj as XML

WiX uses wixproj for projects.

* Add wixproj sample
2017-03-13 17:01:58 -07:00
Paul Chaignon
d57aa37fb7 Grammar for OpenSCAD from Textmate bundle (#3502) 2017-03-13 17:00:27 -07:00
Karl Pettersson
e72347fd98 Add alias for pandoc (#3493) 2017-03-13 16:59:35 -07:00
Brandon Black
1b429ea46b updating rubies 2017-03-10 00:00:19 -08:00
Paul Chaignon
9468ad4947 Fix grammar hashes (#3504)
* Update Licensee hashes for grammar licenses

Licensee v8.8 changed the way licenses are normalized, thus changing hashes for
some grammars

* Update Licensee

Prevent automatic updates to major releases
2017-03-09 23:57:35 -08:00
Nate Whetsell
733ef63193 Add Jison (#3488) 2017-02-22 00:24:50 -08:00
Brandon Black
9ca6a5841e Release v5.0.6 (#3489)
* grammar update

* bumping linguist version

* fixes for grammar updates
2017-02-21 23:13:15 -08:00
Brandon Black
41ace5fba0 using fork for php.tmbundle since updates are broken 2017-02-21 17:13:55 -08:00
Alex Arslan
cc4295b3b3 Update URL for Julia TextMate repo (#3487) 2017-02-21 17:05:59 -08:00
doug tangren
1e4ce80fd9 add support for detecting bazel WORKSPACE files (#3459)
* add support for detecting bazel WORKSPACE files

* Update languages.yml
2017-02-21 16:48:44 -08:00
Brandon Black
74a71fd90d fixing merge conflict 2017-02-21 16:28:34 -08:00
TingPing
9b08318456 Add Meson language (#3463) 2017-02-21 16:24:58 -08:00
Tim Jones
fa5b6b03dc Add grammar for HLSL (High Level Shading Language) (#3469) 2017-02-21 16:05:25 -08:00
Garen Torikian
cb59296fe0 Like ^docs?, sometimes one sample is enough (#3485) 2017-02-20 10:29:30 -08:00
Eloy Durán
f1be771611 Disambiguate TypeScript with tsx extension. (#3464)
Using the technique as discussed in #2761.
2017-02-20 10:17:18 +00:00
Alex Louden
b66fcb2529 Improve Terraform (.tf) / HCL (.hcl) syntax highlighting (#3392)
* Add Terraform grammar, and change .tf and .hcl files from using Ruby to Terraform sublime syntax

* Expand Terraform sample to demonstrate more language features

* Revert terraform sample change

* Add terraform sample - Dokku AWS deploy

* Updated to latest Terraform

* Update terraform string interpolation

* Update terraform to latest
2017-02-20 10:09:59 +00:00
Paul Chaignon
d58cbc68a6 Support for the P4 language
P4 is a language to describe the processing pipeline of network devices
2017-02-15 06:53:46 +01:00
507 changed files with 41997 additions and 2199 deletions

26
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,26 @@
<!--- Provide a general summary of the issue in the Title above -->
## Preliminary Steps
Please confirm you have...
- [ ] reviewed [How Linguist Works](https://github.com/github/linguist#how-linguist-works),
- [ ] reviewed the [Troubleshooting](https://github.com/github/linguist#troubleshooting) docs,
- [ ] considered implementing an [override](https://github.com/github/linguist#overrides),
- [ ] verified an issue has not already been logged for your issue ([linguist issues](https://github.com/issues?utf8=%E2%9C%93&q=is%3Aissue+repo%3Agithub/linguist)).
<!-- Please review these preliminary steps before logging your issue. You may find the information referenced may answer or explain the behaviour you are seeing. It'll help us to know you've reviewed this information. -->
## Problem Description
<!--- Provide a more detailed introduction to the issue itself, and why you consider it to be a bug -->
### URL of the affected repository:
### Last modified on:
<!-- YYYY-MM-DD -->
### Expected language:
<!-- expected language -->
### Detected language:
<!-- detected language -->

46
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,46 @@
<!--- Briefly describe what you're changing. -->
## Description
<!--- If necessary, go into depth of what this pull request is doing. -->
## Checklist:
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] **I am associating a language with a new file extension.**
- [ ] The new extension is used in hundreds of repositories on GitHub.com
- Search results for each extension:
<!-- Replace FOOBAR with the new extension, and KEYWORDS with keywords unique to the language. Repeat for each extension added. -->
- https://github.com/search?utf8=%E2%9C%93&type=Code&ref=searchresults&q=extension%3AFOOBAR+KEYWORDS+NOT+nothack
- [ ] I have included a real-world usage sample for all extensions added in this PR:
- Sample source(s):
- [URL to each sample source, if applicable]
- Sample license(s):
- [ ] I have included a change to the heuristics to distinguish my language from others using the same extension.
- [ ] **I am adding a new language.**
- [ ] The extension of the new language is used in hundreds of repositories on GitHub.com.
- Search results for each extension:
<!-- Replace FOOBAR with the new extension, and KEYWORDS with keywords unique to the language. Repeat for each extension added. -->
- https://github.com/search?utf8=%E2%9C%93&type=Code&ref=searchresults&q=extension%3AFOOBAR+KEYWORDS+NOT+nothack
- [ ] I have included a real-world usage sample for all extensions added in this PR:
- Sample source(s):
- [URL to each sample source, if applicable]
- Sample license(s):
- [ ] I have included a syntax highlighting grammar.
- [ ] I have included a change to the heuristics to distinguish my language from others using the same extension.
- [ ] **I am fixing a misclassified language**
- [ ] I have included a new sample for the misclassified language:
- Sample source(s):
- [URL to each sample source, if applicable]
- Sample license(s):
- [ ] I have included a change to the heuristics to distinguish my language from others using the same extension.
- [ ] **I am changing the source of a syntax highlighting grammar**
<!-- Update the Lightshow URLs below to show the new and old grammars in action. -->
- Old: https://github-lightshow.herokuapp.com/
- New: https://github-lightshow.herokuapp.com/
- [ ] **I am adding new or changing current functionality**
<!-- This includes modifying the vendor, documentation, and generated lists. -->
- [ ] I have added or updated the tests for the new or changed functionality.

3
.gitignore vendored
View File

@@ -8,3 +8,6 @@ lib/linguist/samples.json
/node_modules
test/fixtures/ace_modes.json
/vendor/gems/
/tmp
*.bundle
*.so

138
.gitmodules vendored
View File

@@ -67,9 +67,6 @@
[submodule "vendor/grammars/language-javascript"]
path = vendor/grammars/language-javascript
url = https://github.com/atom/language-javascript
[submodule "vendor/grammars/language-python"]
path = vendor/grammars/language-python
url = https://github.com/atom/language-python
[submodule "vendor/grammars/language-shellscript"]
path = vendor/grammars/language-shellscript
url = https://github.com/atom/language-shellscript
@@ -115,9 +112,6 @@
[submodule "vendor/grammars/fancy-tmbundle"]
path = vendor/grammars/fancy-tmbundle
url = https://github.com/fancy-lang/fancy-tmbundle
[submodule "vendor/grammars/dart-sublime-bundle"]
path = vendor/grammars/dart-sublime-bundle
url = https://github.com/guillermooo/dart-sublime-bundle
[submodule "vendor/grammars/sublimetext-cuda-cpp"]
path = vendor/grammars/sublimetext-cuda-cpp
url = https://github.com/harrism/sublimetext-cuda-cpp
@@ -175,9 +169,6 @@
[submodule "vendor/grammars/Agda.tmbundle"]
path = vendor/grammars/Agda.tmbundle
url = https://github.com/mokus0/Agda.tmbundle
[submodule "vendor/grammars/Julia.tmbundle"]
path = vendor/grammars/Julia.tmbundle
url = https://github.com/nanoant/Julia.tmbundle
[submodule "vendor/grammars/ooc.tmbundle"]
path = vendor/grammars/ooc.tmbundle
url = https://github.com/nilium/ooc.tmbundle
@@ -310,9 +301,6 @@
[submodule "vendor/grammars/make.tmbundle"]
path = vendor/grammars/make.tmbundle
url = https://github.com/textmate/make.tmbundle
[submodule "vendor/grammars/matlab.tmbundle"]
path = vendor/grammars/matlab.tmbundle
url = https://github.com/textmate/matlab.tmbundle
[submodule "vendor/grammars/maven.tmbundle"]
path = vendor/grammars/maven.tmbundle
url = https://github.com/textmate/maven.tmbundle
@@ -390,7 +378,7 @@
url = https://github.com/textmate/c.tmbundle
[submodule "vendor/grammars/zephir-sublime"]
path = vendor/grammars/zephir-sublime
url = https://github.com/vmg/zephir-sublime
url = https://github.com/phalcon/zephir-sublime
[submodule "vendor/grammars/llvm.tmbundle"]
path = vendor/grammars/llvm.tmbundle
url = https://github.com/whitequark/llvm.tmbundle
@@ -406,10 +394,6 @@
[submodule "vendor/grammars/sublime_cobol"]
path = vendor/grammars/sublime_cobol
url = https://bitbucket.org/bitlang/sublime_cobol
[submodule "vendor/grammars/ruby.tmbundle"]
path = vendor/grammars/ruby.tmbundle
url = https://github.com/aroben/ruby.tmbundle
branch = pl
[submodule "vendor/grammars/IDL-Syntax"]
path = vendor/grammars/IDL-Syntax
url = https://github.com/andik/IDL-Syntax
@@ -425,9 +409,6 @@
[submodule "vendor/grammars/sublime-bsv"]
path = vendor/grammars/sublime-bsv
url = https://github.com/thotypous/sublime-bsv
[submodule "vendor/grammars/Sublime-HTTP"]
path = vendor/grammars/Sublime-HTTP
url = https://github.com/httpspec/sublime-highlighting
[submodule "vendor/grammars/sass-textmate-bundle"]
path = vendor/grammars/sass-textmate-bundle
url = https://github.com/nathos/sass-textmate-bundle
@@ -452,9 +433,6 @@
[submodule "vendor/grammars/sublime-golo"]
path = vendor/grammars/sublime-golo
url = https://github.com/TypeUnsafe/sublime-golo
[submodule "vendor/grammars/JSyntax"]
path = vendor/grammars/JSyntax
url = https://github.com/bcj/JSyntax
[submodule "vendor/grammars/TXL"]
path = vendor/grammars/TXL
url = https://github.com/MikeHoffert/Sublime-Text-TXL-syntax
@@ -575,9 +553,6 @@
[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
@@ -800,9 +775,6 @@
[submodule "vendor/grammars/atom-language-perl6"]
path = vendor/grammars/atom-language-perl6
url = https://github.com/perl6/atom-language-perl6
[submodule "vendor/grammars/reason"]
path = vendor/grammars/reason
url = https://github.com/facebook/reason
[submodule "vendor/grammars/language-xcompose"]
path = vendor/grammars/language-xcompose
url = https://github.com/samcv/language-xcompose
@@ -818,3 +790,111 @@
[submodule "vendor/grammars/language-regexp"]
path = vendor/grammars/language-regexp
url = https://github.com/Alhadis/language-regexp
[submodule "vendor/grammars/Terraform.tmLanguage"]
path = vendor/grammars/Terraform.tmLanguage
url = https://github.com/alexlouden/Terraform.tmLanguage
[submodule "vendor/grammars/shaders-tmLanguage"]
path = vendor/grammars/shaders-tmLanguage
url = https://github.com/tgjones/shaders-tmLanguage
[submodule "vendor/grammars/language-meson"]
path = vendor/grammars/language-meson
url = https://github.com/TingPing/language-meson
[submodule "vendor/grammars/atom-language-p4"]
path = vendor/grammars/atom-language-p4
url = https://github.com/TakeshiTseng/atom-language-p4
[submodule "vendor/grammars/language-jison"]
path = vendor/grammars/language-jison
url = https://github.com/cdibbs/language-jison
[submodule "vendor/grammars/openscad.tmbundle"]
path = vendor/grammars/openscad.tmbundle
url = https://github.com/tbuser/openscad.tmbundle
[submodule "vendor/grammars/marko-tmbundle"]
path = vendor/grammars/marko-tmbundle
url = https://github.com/marko-js/marko-tmbundle
[submodule "vendor/grammars/language-jolie"]
path = vendor/grammars/language-jolie
url = https://github.com/fmontesi/language-jolie
[submodule "vendor/grammars/language-typelanguage"]
path = vendor/grammars/language-typelanguage
url = https://github.com/goodmind/language-typelanguage
[submodule "vendor/grammars/sublime-shen"]
path = vendor/grammars/sublime-shen
url = https://github.com/rkoeninger/sublime-shen
[submodule "vendor/grammars/Sublime-Pep8"]
path = vendor/grammars/Sublime-Pep8
url = https://github.com/R4PaSs/Sublime-Pep8
[submodule "vendor/grammars/dartlang"]
path = vendor/grammars/dartlang
url = https://github.com/dart-atom/dartlang
[submodule "vendor/grammars/language-closure-templates"]
path = vendor/grammars/language-closure-templates
url = https://github.com/mthadley/language-closure-templates
[submodule "vendor/grammars/language-webassembly"]
path = vendor/grammars/language-webassembly
url = https://github.com/Alhadis/language-webassembly
[submodule "vendor/grammars/language-ring"]
path = vendor/grammars/language-ring
url = https://github.com/MahmoudFayed/atom-language-ring
[submodule "vendor/grammars/sublime-fantom"]
path = vendor/grammars/sublime-fantom
url = https://github.com/rkoeninger/sublime-fantom
[submodule "vendor/grammars/language-pan"]
path = vendor/grammars/language-pan
url = https://github.com/quattor/language-pan
[submodule "vendor/grammars/language-pcb"]
path = vendor/grammars/language-pcb
url = https://github.com/Alhadis/language-pcb
[submodule "vendor/grammars/language-reason"]
path = vendor/grammars/language-reason
url = https://github.com/reasonml-editor/language-reason
[submodule "vendor/grammars/sublime-nearley"]
path = vendor/grammars/sublime-nearley
url = https://github.com/Hardmath123/sublime-nearley
[submodule "vendor/grammars/data-weave-tmLanguage"]
path = vendor/grammars/data-weave-tmLanguage
url = https://github.com/mulesoft-labs/data-weave-tmLanguage
[submodule "vendor/grammars/squirrel-language"]
path = vendor/grammars/squirrel-language
url = https://github.com/mathewmariani/squirrel-language
[submodule "vendor/grammars/language-ballerina"]
path = vendor/grammars/language-ballerina
url = https://github.com/ballerinalang/plugin-vscode
[submodule "vendor/grammars/language-yara"]
path = vendor/grammars/language-yara
url = https://github.com/blacktop/language-yara
[submodule "vendor/grammars/language-ruby"]
path = vendor/grammars/language-ruby
url = https://github.com/atom/language-ruby
[submodule "vendor/grammars/sublime-angelscript"]
path = vendor/grammars/sublime-angelscript
url = https://github.com/wronex/sublime-angelscript
[submodule "vendor/grammars/TypeScript-TmLanguage"]
path = vendor/grammars/TypeScript-TmLanguage
url = https://github.com/Microsoft/TypeScript-TmLanguage
[submodule "vendor/grammars/wdl-sublime-syntax-highlighter"]
path = vendor/grammars/wdl-sublime-syntax-highlighter
url = https://github.com/broadinstitute/wdl-sublime-syntax-highlighter
[submodule "vendor/grammars/atom-language-julia"]
path = vendor/grammars/atom-language-julia
url = https://github.com/JuliaEditorSupport/atom-language-julia
[submodule "vendor/grammars/language-cwl"]
path = vendor/grammars/language-cwl
url = https://github.com/manabuishii/language-cwl
[submodule "vendor/grammars/Syntax-highlighting-for-PostCSS"]
path = vendor/grammars/Syntax-highlighting-for-PostCSS
url = https://github.com/hudochenkov/Syntax-highlighting-for-PostCSS
[submodule "vendor/grammars/MATLAB-Language-grammar"]
path = vendor/grammars/MATLAB-Language-grammar
url = https://github.com/mathworks/MATLAB-Language-grammar
[submodule "vendor/grammars/javadoc.tmbundle"]
path = vendor/grammars/javadoc.tmbundle
url = https://github.com/textmate/javadoc.tmbundle
[submodule "vendor/grammars/JSyntax"]
path = vendor/grammars/JSyntax
url = https://github.com/tikkanz/JSyntax
[submodule "vendor/grammars/Sublime-HTTP"]
path = vendor/grammars/Sublime-HTTP
url = https://github.com/samsalisbury/Sublime-HTTP
[submodule "vendor/grammars/atom-language-nextflow"]
path = vendor/grammars/atom-language-nextflow
url = https://github.com/nextflow-io/atom-language-nextflow

View File

@@ -1,20 +1,32 @@
language: ruby
sudo: false
addons:
apt:
packages:
- libicu-dev
- libicu48
before_install: script/travis/before_install
script:
- bundle exec rake
- script/licensed verify
rvm:
- 2.0.0
- 2.1
- 2.2
- 2.3.3
- 2.4.0
notifications:
disabled: true
git:
submodules: false
depth: 3
cache: bundler
dist: precise
bundler_args: --without debug

View File

@@ -4,21 +4,46 @@ Hi there! We're thrilled that you'd like to contribute to this project. Your hel
The majority of contributions won't need to touch any Ruby code at all.
## Getting started
Before you can start contributing to Linguist, you'll need to set up your environment first. Clone the repo and run `script/bootstrap` to install its dependencies.
git clone https://github.com/github/linguist.git
cd linguist/
script/bootstrap
To run Linguist from the cloned repository, you will need to generate the code samples first:
bundle exec rake samples
Run this command each time a [sample][samples] has been modified.
To run Linguist from the cloned repository:
bundle exec bin/linguist --breakdown
### Dependencies
Linguist uses the [`charlock_holmes`](https://github.com/brianmario/charlock_holmes) character encoding detection library which in turn uses [ICU](http://site.icu-project.org/), and the libgit2 bindings for Ruby provided by [`rugged`](https://github.com/libgit2/rugged). These components have their own dependencies - `icu4c`, and `cmake` and `pkg-config` respectively - which you may need to install before you can install Linguist.
For example, on macOS with [Homebrew](http://brew.sh/): `brew install cmake pkg-config icu4c` and on Ubuntu: `apt-get install cmake pkg-config libicu-dev`.
## 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.
1. Add your extension to the language entry in [`languages.yml`][languages], keeping the extensions in alphabetical and case-sensitive (uppercase before lowercase) order, with the exception of the primary extension; the primary extension should be first.
1. Add at least one sample for your extension to the [samples directory][samples] in the correct subdirectory. We'd prefer examples of real-world code showing common usage. The more representative of the structure of the language, the better.
1. 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.
If you are adding a sample, please state clearly the license covering the code in the sample, and if possible, link to the original source of the sample.
In addition, if this extension is already listed in [`languages.yml`][languages] then sometimes a few more steps will need to be taken:
Additionally, if this extension is already listed in [`languages.yml`][languages] and associated with another language, 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 **@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.
1. Make sure that example `.yourextension` files are present in the [samples directory][samples] for each language that uses `.yourextension`.
1. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.yourextension` files. (ping **@lildude** to help with this) to ensure we're not misclassifying files.
1. 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
@@ -27,47 +52,61 @@ We try only to add languages once they have some usage on GitHub. In most cases
To add support for a new language:
0. Add an entry for your language to [`languages.yml`][languages]. Omit the `language_id` field for now.
0. Add a grammar for your language: `script/add-grammar https://github.com/JaneSmith/MyGrammar`. Please only add grammars that have [one of these licenses][licenses].
0. Add samples for your language to the [samples directory][samples] in the correct subdirectory.
0. Add a `language_id` for your language using `script/set-language-ids`. **You should only ever need to run `script/set-language-ids --update`. Anything other than this risks breaking GitHub search :cry:**
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.
1. Add an entry for your language to [`languages.yml`][languages]. Omit the `language_id` field for now.
1. Add a syntax-highlighting grammar for your language using: `script/add-grammar https://github.com/JaneSmith/MyGrammar`
This command will analyze the grammar and, if no problems are found, add it to the repository. If problems are found, please report them to the grammar maintainer as you will not be able to add the grammar if problems are found.
**Please only add grammars that have [one of these licenses][licenses].**
1. Add samples for your language to the [samples directory][samples] in the correct subdirectory.
1. Add a `language_id` for your language using `script/set-language-ids`.
**You should only ever need to run `script/set-language-ids --update`. Anything other than this risks breaking GitHub search :cry:**
1. Open a pull request, linking to a [GitHub search results](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage.
Please state clearly the license covering the code in the samples. Link directly to the original source if possible.
In addition, if your new language defines an extension that's already listed in [`languages.yml`][languages] (such as `.foo`) then sometimes a few more steps will need to be taken:
0. Make sure that example `.foo` files are present in the [samples directory][samples] for each language that uses `.foo`.
0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.foo` files. (ping **@bkeepers** to help with this) to ensure we're not misclassifying files.
0. If the Bayesian classifier does a bad job with the sample `.foo` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help.
1. Make sure that example `.foo` files are present in the [samples directory][samples] for each language that uses `.foo`.
1. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.foo` files. (ping **@lildude** to help with this) to ensure we're not misclassifying files.
1. If the Bayesian classifier does a bad job with the sample `.foo` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help.
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.
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.
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 TextMate `scopeName`. This scope name 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.
Assuming your code is being detected as the right language, in most cases syntax highlighting problems are due to a bug in the language grammar rather than a bug in Linguist. [`vendor/README.md`][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](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.
## Changing the source of a syntax highlighting grammar
We'd like to ensure Linguist and GitHub.com are using the latest and greatest grammars that are consistent with the current usage but understand that sometimes a grammar can lag behind the evolution of a language or even stop being developed. This often results in someone grasping the opportunity to create a newer and better and more actively maintained grammar, and we'd love to use it and pass on it's functionality to our users.
Switching the source of a grammar is really easy:
script/add-grammar --replace MyGrammar https://github.com/PeterPan/MyGrammar
This command will analyze the grammar and, if no problems are found, add it to the repository. If problems are found, please report these problems to the grammar maintainer as you will not be able to add the grammar if problems are found.
**Please only add grammars that have [one of these licenses][licenses].**
Please then open a pull request for the updated grammar.
## Testing
For development you are going to want to checkout out the source. To get it, clone the repo and run [Bundler](http://gembundler.com/) to install its dependencies.
git clone https://github.com/github/linguist.git
cd linguist/
script/bootstrap
To run the tests:
You can run the tests locally with:
bundle exec rake test
@@ -80,39 +119,44 @@ Here's our current build status: [![Build Status](https://api.travis-ci.org/gith
Linguist is maintained with :heart: by:
- **@Alhadis**
- **@brandonblack** (GitHub staff)
- **@BenEddy** (GitHub staff)
- **@Caged** (GitHub staff)
- **@grantr** (GitHub staff)
- **@kivikakk** (GitHub staff)
- **@larsbrinkhoff**
- **@lildude** (GitHub staff)
- **@lizzhale** (GitHub staff)
- **@mikemcquaid** (GitHub staff)
- **@pchaigno**
- **@rafer** (GitHub staff)
- **@shreyasjoshis** (GitHub staff)
As Linguist is a production dependency for GitHub we have a couple of workflow restrictions:
- Anyone with commit rights can merge Pull Requests provided that there is a :+1: from a GitHub member of staff
- Anyone with commit rights can merge Pull Requests provided that there is a :+1: from a GitHub staff member.
- Releases are performed by GitHub staff so we can ensure GitHub.com always stays up to date with the latest release of Linguist and there are no regressions in production.
### Releasing
If you are the current maintainer of this gem:
0. Create a branch for the release: `git checkout -b cut-release-vxx.xx.xx`
0. Make sure your local dependencies are up to date: `script/bootstrap`
0. If grammar submodules have not been updated recently, update them: `git submodule update --remote && git commit -a`
0. Ensure that samples are updated: `bundle exec rake samples`
0. Ensure that tests are green: `bundle exec rake test`
0. Bump gem version in `lib/linguist/version.rb`, [like this](https://github.com/github/linguist/commit/8d2ea90a5ba3b2fe6e1508b7155aa4632eea2985).
0. Make a PR to github/linguist, [like this](https://github.com/github/linguist/pull/1238).
0. Build a local gem: `bundle exec rake build_gem`
0. Test the gem:
0. Bump the Gemfile and Gemfile.lock versions for an app which relies on this gem
0. Install the new gem locally
0. Test behavior locally, branch deploy, whatever needs to happen
0. Merge github/linguist PR
0. Tag and push: `git tag vx.xx.xx; git push --tags`
0. Push to rubygems.org -- `gem push github-linguist-3.0.0.gem`
1. Create a branch for the release: `git checkout -b cut-release-vxx.xx.xx`
1. Make sure your local dependencies are up to date: `script/bootstrap`
1. If grammar submodules have not been updated recently, update them: `git submodule update --remote && git commit -a`
1. Ensure that samples are updated: `bundle exec rake samples`
1. Ensure that tests are green: `bundle exec rake test`
1. Bump gem version in `lib/linguist/version.rb`, [like this](https://github.com/github/linguist/commit/8d2ea90a5ba3b2fe6e1508b7155aa4632eea2985).
1. Make a PR to github/linguist, [like this](https://github.com/github/linguist/pull/1238).
1. Build a local gem: `bundle exec rake build_gem`
1. Test the gem:
1. Bump the Gemfile and Gemfile.lock versions for an app which relies on this gem
1. Install the new gem locally
1. Test behavior locally, branch deploy, whatever needs to happen
1. Merge github/linguist PR
1. Tag and push: `git tag vx.xx.xx; git push --tags`
1. Create a GitHub release with the pushed tag (https://github.com/github/linguist/releases/new)
1. Build a grammars tarball (`./script/build-grammars-tarball`) and attach it to the GitHub release
1. Push to rubygems.org -- `gem push github-linguist-3.0.0.gem`
[grammars]: /grammars.yml
[grammars]: /vendor/README.md
[languages]: /lib/linguist/languages.yml
[licenses]: https://github.com/github/linguist/blob/257425141d4e2a5232786bf0b13c901ada075f93/vendor/licenses/config.yml#L2-L11
[samples]: /samples

View File

@@ -1,3 +1,6 @@
source 'https://rubygems.org'
gemspec :name => "github-linguist"
gem 'byebug' if RUBY_VERSION >= '2.0'
group :debug do
gem 'byebug' if RUBY_VERSION >= '2.2'
end

189
README.md
View File

@@ -1,45 +1,139 @@
# Linguist
[![Build Status](https://travis-ci.org/github/linguist.svg?branch=master)](https://travis-ci.org/github/linguist)
[issues]: https://github.com/github/linguist/issues
[new-issue]: https://github.com/github/linguist/issues/new
This library is used on GitHub.com to detect blob languages, ignore binary or vendored files, suppress generated files in diffs, and generate language breakdown graphs.
See [Troubleshooting](#troubleshooting) and [`CONTRIBUTING.md`](/CONTRIBUTING.md) before filing an issue or creating a pull request.
See [Troubleshooting](#troubleshooting) and [`CONTRIBUTING.md`](CONTRIBUTING.md) before filing an issue or creating a pull request.
## How Linguist works
Linguist takes the list of languages it knows from [`languages.yml`](/lib/linguist/languages.yml) and uses a number of methods to try and determine the language used by each file, and the overall repository breakdown.
Linguist starts by going through all the files in a repository and excludes all files that it determines to be binary data, [vendored code](#vendored-code), [generated code](#generated-code), [documentation](#documentation), or are defined as `data` (e.g. SQL) or `prose` (e.g. Markdown) languages, whilst taking into account any [overrides](#overrides).
If an [explicit language override](#using-gitattributes) has been used, that language is used for the matching files. The language of each remaining file is then determined using the following strategies, in order, with each step either identifying the precise language or reducing the number of likely languages passed down to the next strategy:
- Vim or Emacs modeline,
- commonly used filename,
- shell shebang,
- file extension,
- heuristics,
- naïve Bayesian classification
The result of this analysis is used to produce the language stats bar which displays the 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.
![language stats bar](https://cloud.githubusercontent.com/assets/173/5562290/48e24654-8ddf-11e4-8fe7-735b0ce3a0d3.png)
### How Linguist works on GitHub.com
When you push changes to a repository on GitHub.com, a low priority background job is enqueued to analyze your repository as explained above. The results of this analysis are cached for the lifetime of your repository and are only updated when the repository is updated. As this analysis is performed by a low priority background job, it can take a while, particularly during busy periods, for your language statistics bar to reflect your changes.
## Usage
Install the gem:
$ gem install github-linguist
#### Dependencies
Linguist uses the [`charlock_holmes`](https://github.com/brianmario/charlock_holmes) character encoding detection library which in turn uses [ICU](http://site.icu-project.org/), and the libgit2 bindings for Ruby provided by [`rugged`](https://github.com/libgit2/rugged). These components have their own dependencies - `icu4c`, and `cmake` and `pkg-config` respectively - which you may need to install before you can install Linguist.
For example, on macOS with [Homebrew](http://brew.sh/): `brew install cmake pkg-config icu4c` and on Ubuntu: `apt-get install cmake pkg-config libicu-dev`.
### Application usage
Linguist can be used in your application as follows:
```ruby
require 'rugged'
require 'linguist'
repo = Rugged::Repository.new('.')
project = Linguist::Repository.new(repo, repo.head.target_id)
project.language #=> "Ruby"
project.languages #=> { "Ruby" => 119387 }
```
### Command line usage
A repository's languages stats can also be assessed from the command line using the `linguist` executable. Without any options, `linguist` will output the breakdown that correlates to what is shown in the language stats bar. The `--breakdown` flag will additionally show the breakdown of files by language.
You can try running `linguist` on the root directory in this repository itself:
```console
$ bundle exec bin/linguist --breakdown
68.57% Ruby
22.90% C
6.93% Go
1.21% Lex
0.39% Shell
Ruby:
Gemfile
Rakefile
bin/git-linguist
bin/linguist
ext/linguist/extconf.rb
github-linguist.gemspec
lib/linguist.rb
```
## Troubleshooting
### My repository is detected as the wrong language
![language stats bar](https://cloud.githubusercontent.com/assets/173/5562290/48e24654-8ddf-11e4-8fe7-735b0ce3a0d3.png)
If the language stats bar 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:
1. Click on the name of the language in the stats bar to see a list of the files that are identified as that language.
Keep in mind this performs a search so the [code search restrictions](https://help.github.com/articles/searching-code/#considerations-for-code-search) may result in files identified in the language statistics not appearing in the search results. [Installing Linguist locally](#usage) and running it from the [command line](#command-line-usage) will give you accurate results.
1. If you see files that you didn't write in the search results, 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.
1. If the files are 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. You can also use the [manual overrides](#overrides) feature to correctly classify them in your repository.
1. 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.
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](/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.
Keep in mind that the repository language stats are only [updated when you push changes](#how-linguist-works-on-github-com), and the results are cached for the lifetime of your repository. If you have not made any changes to your repository in a while, you may find pushing another change will correct the stats.
### My repository isn't showing my language
Linguist does not consider [vendored code](#vendored-code), [generated code](#generated-code), [documentation](#documentation), or `data` (e.g. SQL) or `prose` (e.g. Markdown) languages (as defined by the `type` attribute in [`languages.yml`](/lib/linguist/languages.yml)) when calculating the repository language statistics.
If the language statistics bar is not showing your language at all, it could be for a few reasons:
1. Linguist doesn't know about your language.
1. The extension you have chosen is not associated with your language in [`languages.yml`](/lib/linguist/languages.yml).
1. All the files in your repository fall into one of the categories listed above that Linguist excludes by default.
If Linguist doesn't know about the language or the extension you're using, consider [contributing](CONTRIBUTING.md) to Linguist by opening a pull request to add support for your language or extension. For everything else, you can use the [manual overrides](#overrides) feature to tell Linguist to include your files in the language statistics.
### There's a problem with the syntax highlighting of a file
Linguist detects the language of a file but the actual syntax-highlighting is powered by a set of language grammars which are included in this project as a set of submodules [and may be found here](https://github.com/github/linguist/blob/master/vendor/README.md).
Linguist detects the language of a file but the actual syntax-highlighting is powered by a set of language grammars which are included in this project as a set of submodules [as listed here](/vendor/README.md).
If you experience an issue with the syntax-highlighting on GitHub, **please report the issue to the upstream grammar repository, not here.** Grammars are updated every time we build the Linguist gem so upstream bug fixes are automatically incorporated as they are fixed.
If you experience an issue with the syntax-highlighting on GitHub, **please report the issue to the upstream grammar repository, not here.** Grammars are updated every time we build the Linguist gem and so upstream bug fixes are automatically incorporated as they are fixed.
## Overrides
Linguist supports a number of different custom overrides strategies for language definitions and vendored paths.
Linguist supports a number of different custom override strategies for language definitions and file paths.
### Using gitattributes
Add a `.gitattributes` file to your project and use standard git-style path matchers for the files you want to override to set `linguist-documentation`, `linguist-language`, and `linguist-vendored`. `.gitattributes` will be used to determine language statistics, but will not be used to syntax highlight files. To manually set syntax highlighting, use [Vim or Emacs modelines](#using-emacs-or-vim-modelines).
Add a `.gitattributes` file to your project and use standard git-style path matchers for the files you want to override using the `linguist-documentation`, `linguist-language`, `linguist-vendored`, `linguist-generated` and `linguist-detectable` attributes. `.gitattributes` will be used to determine language statistics and will be used to syntax highlight files. You can also manually set syntax highlighting using [Vim or Emacs modelines](#using-emacs-or-vim-modelines).
```
$ 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 code
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 [`vendor.yml`](/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.
@@ -49,7 +143,9 @@ special-vendored-path/* linguist-vendored
jquery.js linguist-vendored=false
```
Just like vendored files, Linguist excludes documentation files from your project's language stats. [lib/linguist/documentation.yml](lib/linguist/documentation.yml) lists common documentation paths and excludes them from the language statistics for your repository.
#### Documentation
Just like vendored files, Linguist excludes documentation files from your project's language stats. [`documentation.yml`](/lib/linguist/documentation.yml) lists common documentation paths and excludes them from the language statistics for your repository.
Use the `linguist-documentation` attribute to mark or unmark paths as documentation.
@@ -59,19 +155,33 @@ project-docs/* linguist-documentation
docs/formatter.rb linguist-documentation=false
```
#### Generated file detection
#### Generated code
Not all plain text files are true source files. Generated files like minified js and compiled CoffeeScript can be detected and excluded from language stats. As an added bonus, unlike vendored and documentation files, these files are suppressed in diffs.
Not all plain text files are true source files. Generated files like minified JavaScript and compiled CoffeeScript can be detected and excluded from language stats. As an added bonus, unlike vendored and documentation files, these files are suppressed in diffs. [`generated.rb`](/lib/linguist/generated.rb) lists common generated paths and excludes them from the language statistics of your repository.
```ruby
Linguist::FileBlob.new("underscore.min.js").generated? # => true
Use the `linguist-generated` attribute to mark or unmark paths as generated.
```
$ cat .gitattributes
Api.elm linguist-generated=true
```
See [Linguist::Generated#generated?](https://github.com/github/linguist/blob/master/lib/linguist/generated.rb).
#### Detectable
Only programming languages are included in the language statistics. Languages of a different type (as defined in [`languages.yml`](/lib/linguist/languages.yml)) are not "detectable" causing them not to be included in the language statistics.
Use the `linguist-detectable` attribute to mark or unmark paths as detectable.
```
$ cat .gitattributes
*.kicad_pcb linguist-detectable=true
*.sch linguist-detectable=true
tools/export_bom.py linguist-detectable=false
```
### Using Emacs or Vim modelines
Alternatively, you can use Vim or Emacs style modelines to set the language for a single file. Modelines can be placed anywhere within a file and are respected when determining how to syntax-highlight a file on GitHub.com
If you do not want to use `.gitattributes` to override the syntax highlighting used on GitHub.com, you can use Vim or Emacs style modelines to set the language for a single file. Modelines can be placed anywhere within a file and are respected when determining how to syntax-highlight a file on GitHub.com
##### Vim
```
@@ -87,52 +197,15 @@ vim: set ft=cpp:
-*- mode: php;-*-
```
## Usage
Install the gem:
```
$ gem install github-linguist
```
Then use it in your application:
```ruby
require 'rugged'
require 'linguist'
repo = Rugged::Repository.new('.')
project = Linguist::Repository.new(repo, repo.head.target_id)
project.language #=> "Ruby"
project.languages #=> { "Ruby" => 119387 }
```
These stats are also printed out by the `linguist` executable. You can use the
`--breakdown` flag, and the binary will also output the breakdown of files by language.
You can try running `linguist` on the root directory in this repository itself:
```
$ bundle exec linguist --breakdown
100.00% Ruby
Ruby:
Gemfile
Rakefile
bin/linguist
github-linguist.gemspec
lib/linguist.rb
```
## Contributing
Please check out our [contributing guidelines](CONTRIBUTING.md).
## License
The language grammars included in this gem are covered by their repositories'
respective licenses. `grammars.yml` specifies the repository for each grammar.
respective licenses. [`vendor/README.md`](/vendor/README.md) lists the repository for each grammar.
All other files are covered by the MIT license, see `LICENSE`.

View File

@@ -1,16 +1,24 @@
require 'bundler/setup'
require 'rake/clean'
require 'rake/testtask'
require 'rake/extensiontask'
require 'yaml'
require 'yajl'
require 'open-uri'
require 'json'
task :default => :test
Rake::TestTask.new
gem_spec = Gem::Specification.load('github-linguist.gemspec')
Rake::ExtensionTask.new('linguist', gem_spec) do |ext|
ext.lib_dir = File.join('lib', 'linguist')
end
# Extend test task to check for samples and fetch latest Ace modes
task :test => [:check_samples, :fetch_ace_modes]
task :test => [:compile, :check_samples, :fetch_ace_modes]
desc "Check that we have samples.json generated"
task :check_samples do
@@ -33,15 +41,22 @@ task :fetch_ace_modes do
end
end
task :samples do
task :samples => :compile do
require 'linguist/samples'
json = Yajl.dump(Linguist::Samples.data, :pretty => true)
File.write 'lib/linguist/samples.json', json
end
task :flex do
if `flex -V` !~ /^flex \d+\.\d+\.\d+/
fail "flex not detected"
end
system "cd ext/linguist && flex tokenizer.l"
end
task :build_gem => :samples do
rm_rf "grammars"
sh "script/convert-grammars"
sh "script/grammar-compiler compile -o grammars || true"
languages = YAML.load_file("lib/linguist/languages.yml")
File.write("lib/linguist/languages.json", Yajl.dump(languages))
`gem build github-linguist.gemspec`

View File

@@ -117,9 +117,8 @@ def git_linguist(args)
end
parser.parse!(args)
git_dir = `git rev-parse --git-dir`.strip
raise "git-linguist must be run in a Git repository (#{Dir.pwd})" unless $?.success?
raise "git-linguist must be run in a Git repository" unless $?.success?
wrapper = GitLinguist.new(git_dir, commit, incremental)
case args.pop
@@ -141,6 +140,10 @@ def git_linguist(args)
$stderr.print(parser.help)
exit 1
end
rescue Exception => e
$stderr.puts e.message
$stderr.puts e.backtrace
exit 1
end
git_linguist(ARGV)

View File

@@ -75,7 +75,7 @@ elsif File.file?(path)
else
abort <<-HELP
Linguist v#{Linguist::VERSION}
Detect language type for a file, or, given a directory, determine language breakdown.
Detect language type for a file, or, given a repository, determine language breakdown.
Usage: linguist <path>
linguist <path> [--breakdown] [--json]

3
ext/linguist/extconf.rb Normal file
View File

@@ -0,0 +1,3 @@
require 'mkmf'
dir_config('linguist')
create_makefile('linguist/linguist')

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,336 @@
#ifndef linguist_yyHEADER_H
#define linguist_yyHEADER_H 1
#define linguist_yyIN_HEADER 1
#line 6 "lex.linguist_yy.h"
#define YY_INT_ALIGNED short int
/* A lexical scanner generated by flex */
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
/* First, we deal with platform-specific or compiler-specific issues. */
/* begin standard C headers. */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
/* end standard C headers. */
/* flex integer type definitions */
#ifndef FLEXINT_H
#define FLEXINT_H
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
* if you want the limit (max/min) macros for int types.
*/
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif
#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
typedef uint64_t flex_uint64_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t;
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;
#endif /* ! C99 */
/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN (-128)
#endif
#ifndef INT16_MIN
#define INT16_MIN (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX (4294967295U)
#endif
#endif /* ! FLEXINT_H */
#ifdef __cplusplus
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else /* ! __cplusplus */
/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)
#define YY_USE_CONST
#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif
/* An opaque pointer. */
#ifndef YY_TYPEDEF_YY_SCANNER_T
#define YY_TYPEDEF_YY_SCANNER_T
typedef void* yyscan_t;
#endif
/* For convenience, these vars (plus the bison vars far below)
are macros in the reentrant scanner. */
#define yyin yyg->yyin_r
#define yyout yyg->yyout_r
#define yyextra yyg->yyextra_r
#define yyleng yyg->yyleng_r
#define yytext yyg->yytext_r
#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
#define yy_flex_debug yyg->yy_flex_debug_r
/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
#endif
#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif
#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif
#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
{
FILE *yy_input_file;
char *yy_ch_buf; /* input buffer */
char *yy_buf_pos; /* current position in input buffer */
/* Size of input buffer in bytes, not including room for EOB
* characters.
*/
yy_size_t yy_buf_size;
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
yy_size_t yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
* delete it.
*/
int yy_is_our_buffer;
/* Whether this is an "interactive" input source; if so, and
* if we're using stdio for input, then we want to use getc()
* instead of fread(), to make sure we stop fetching input after
* each newline.
*/
int yy_is_interactive;
/* Whether we're considered to be at the beginning of a line.
* If so, '^' rules will be active on the next match, otherwise
* not.
*/
int yy_at_bol;
int yy_bs_lineno; /**< The line count. */
int yy_bs_column; /**< The column count. */
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
int yy_fill_buffer;
int yy_buffer_status;
};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
void linguist_yyrestart (FILE *input_file ,yyscan_t yyscanner );
void linguist_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
YY_BUFFER_STATE linguist_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
void linguist_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
void linguist_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
void linguist_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
void linguist_yypop_buffer_state (yyscan_t yyscanner );
YY_BUFFER_STATE linguist_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
YY_BUFFER_STATE linguist_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
YY_BUFFER_STATE linguist_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
void *linguist_yyalloc (yy_size_t ,yyscan_t yyscanner );
void *linguist_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
void linguist_yyfree (void * ,yyscan_t yyscanner );
/* Begin user sect3 */
#define yytext_ptr yytext_r
#ifdef YY_HEADER_EXPORT_START_CONDITIONS
#define INITIAL 0
#define sgml 1
#define c_comment 2
#define xml_comment 3
#define haskell_comment 4
#define ocaml_comment 5
#define python_dcomment 6
#define python_scomment 7
#endif
#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
* down here because we want the user's section 1 to have been scanned first.
* The user has a chance to override it with an option.
*/
#include <unistd.h>
#endif
#define YY_EXTRA_TYPE struct tokenizer_extra *
int linguist_yylex_init (yyscan_t* scanner);
int linguist_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */
int linguist_yylex_destroy (yyscan_t yyscanner );
int linguist_yyget_debug (yyscan_t yyscanner );
void linguist_yyset_debug (int debug_flag ,yyscan_t yyscanner );
YY_EXTRA_TYPE linguist_yyget_extra (yyscan_t yyscanner );
void linguist_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
FILE *linguist_yyget_in (yyscan_t yyscanner );
void linguist_yyset_in (FILE * in_str ,yyscan_t yyscanner );
FILE *linguist_yyget_out (yyscan_t yyscanner );
void linguist_yyset_out (FILE * out_str ,yyscan_t yyscanner );
yy_size_t linguist_yyget_leng (yyscan_t yyscanner );
char *linguist_yyget_text (yyscan_t yyscanner );
int linguist_yyget_lineno (yyscan_t yyscanner );
void linguist_yyset_lineno (int line_number ,yyscan_t yyscanner );
/* Macros after this point can all be overridden by user definitions in
* section 1.
*/
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int linguist_yywrap (yyscan_t yyscanner );
#else
extern int linguist_yywrap (yyscan_t yyscanner );
#endif
#endif
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
#endif
#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
#endif
#ifndef YY_NO_INPUT
#endif
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif
/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1
extern int linguist_yylex (yyscan_t yyscanner);
#define YY_DECL int linguist_yylex (yyscan_t yyscanner)
#endif /* !YY_DECL */
/* yy_get_previous_state - get the state just before the EOB char was reached */
#undef YY_NEW_FILE
#undef YY_FLUSH_BUFFER
#undef yy_set_bol
#undef yy_new_buffer
#undef yy_set_interactive
#undef YY_DO_BEFORE_ACTION
#ifdef YY_DECL_IS_OURS
#undef YY_DECL_IS_OURS
#undef YY_DECL
#endif
#line 118 "tokenizer.l"
#line 335 "lex.linguist_yy.h"
#undef linguist_yyIN_HEADER
#endif /* linguist_yyHEADER_H */

75
ext/linguist/linguist.c Normal file
View File

@@ -0,0 +1,75 @@
#include "ruby.h"
#include "linguist.h"
#include "lex.linguist_yy.h"
// Anything longer is unlikely to be useful.
#define MAX_TOKEN_LEN 32
int linguist_yywrap(yyscan_t yyscanner) {
return 1;
}
static VALUE rb_tokenizer_extract_tokens(VALUE self, VALUE rb_data) {
YY_BUFFER_STATE buf;
yyscan_t scanner;
struct tokenizer_extra extra;
VALUE ary, s;
long len;
int r;
Check_Type(rb_data, T_STRING);
len = RSTRING_LEN(rb_data);
if (len > 100000)
len = 100000;
linguist_yylex_init_extra(&extra, &scanner);
buf = linguist_yy_scan_bytes(RSTRING_PTR(rb_data), (int) len, scanner);
ary = rb_ary_new();
do {
extra.type = NO_ACTION;
extra.token = NULL;
r = linguist_yylex(scanner);
switch (extra.type) {
case NO_ACTION:
break;
case REGULAR_TOKEN:
len = strlen(extra.token);
if (len <= MAX_TOKEN_LEN)
rb_ary_push(ary, rb_str_new(extra.token, len));
free(extra.token);
break;
case SHEBANG_TOKEN:
len = strlen(extra.token);
if (len <= MAX_TOKEN_LEN) {
s = rb_str_new2("SHEBANG#!");
rb_str_cat(s, extra.token, len);
rb_ary_push(ary, s);
}
free(extra.token);
break;
case SGML_TOKEN:
len = strlen(extra.token);
if (len <= MAX_TOKEN_LEN) {
s = rb_str_new(extra.token, len);
rb_str_cat2(s, ">");
rb_ary_push(ary, s);
}
free(extra.token);
break;
}
} while (r);
linguist_yy_delete_buffer(buf, scanner);
linguist_yylex_destroy(scanner);
return ary;
}
__attribute__((visibility("default"))) void Init_linguist() {
VALUE rb_mLinguist = rb_define_module("Linguist");
VALUE rb_cTokenizer = rb_define_class_under(rb_mLinguist, "Tokenizer", rb_cObject);
rb_define_method(rb_cTokenizer, "extract_tokens", rb_tokenizer_extract_tokens, 1);
}

11
ext/linguist/linguist.h Normal file
View File

@@ -0,0 +1,11 @@
enum tokenizer_type {
NO_ACTION,
REGULAR_TOKEN,
SHEBANG_TOKEN,
SGML_TOKEN,
};
struct tokenizer_extra {
char *token;
enum tokenizer_type type;
};

119
ext/linguist/tokenizer.l Normal file
View File

@@ -0,0 +1,119 @@
%{
#include "linguist.h"
#define feed_token(tok, typ) do { \
yyextra->token = (tok); \
yyextra->type = (typ); \
} while (0)
#define eat_until_eol() do { \
int c; \
while ((c = input(yyscanner)) != '\n' && c != EOF && c); \
if (c == EOF || !c) \
return 0; \
} while (0)
#define eat_until_unescaped(q) do { \
int c; \
while ((c = input(yyscanner)) != EOF && c) { \
if (c == '\n') \
break; \
if (c == '\\') { \
c = input(yyscanner); \
if (c == EOF || !c) \
return 0; \
} else if (c == q) \
break; \
} \
if (c == EOF || !c) \
return 0; \
} while (0)
%}
%option never-interactive yywrap reentrant nounput warn nodefault header-file="lex.linguist_yy.h" extra-type="struct tokenizer_extra *" prefix="linguist_yy"
%x sgml c_comment xml_comment haskell_comment ocaml_comment python_dcomment python_scomment
%%
^#![ \t]*([[:alnum:]_\/]*\/)?env([ \t]+([^ \t=]*=[^ \t]*))*[ \t]+[[:alpha:]_]+ {
const char *off = strrchr(yytext, ' ');
if (!off)
off = yytext;
else
++off;
feed_token(strdup(off), SHEBANG_TOKEN);
eat_until_eol();
return 1;
}
^#![ \t]*[[:alpha:]_\/]+ {
const char *off = strrchr(yytext, '/');
if (!off)
off = yytext;
else
++off;
if (strcmp(off, "env") == 0) {
eat_until_eol();
} else {
feed_token(strdup(off), SHEBANG_TOKEN);
eat_until_eol();
return 1;
}
}
^[ \t]*(\/\/|--|\#|%|\")" ".* { /* nothing */ }
"/*" { BEGIN(c_comment); }
/* See below for xml_comment start. */
"{-" { BEGIN(haskell_comment); }
"(*" { BEGIN(ocaml_comment); }
"\"\"\"" { BEGIN(python_dcomment); }
"'''" { BEGIN(python_scomment); }
<c_comment,xml_comment,haskell_comment,ocaml_comment,python_dcomment,python_scomment>.|\n { /* nothing */ }
<c_comment>"*/" { BEGIN(INITIAL); }
<xml_comment>"-->" { BEGIN(INITIAL); }
<haskell_comment>"-}" { BEGIN(INITIAL); }
<ocaml_comment>"*)" { BEGIN(INITIAL); }
<python_dcomment>"\"\"\"" { BEGIN(INITIAL); }
<python_scomment>"'''" { BEGIN(INITIAL); }
\"\"|'' { /* nothing */ }
\" { eat_until_unescaped('"'); }
' { eat_until_unescaped('\''); }
(0x[0-9a-fA-F]([0-9a-fA-F]|\.)*|[0-9]([0-9]|\.)*)([uU][lL]{0,2}|([eE][-+][0-9]*)?[fFlL]*) { /* nothing */ }
\<[[:alnum:]_!./?-]+ {
if (strcmp(yytext, "<!--") == 0) {
BEGIN(xml_comment);
} else {
feed_token(strdup(yytext), SGML_TOKEN);
BEGIN(sgml);
return 1;
}
}
<sgml>[[:alnum:]_]+=\" { feed_token(strndup(yytext, strlen(yytext) - 1), REGULAR_TOKEN); eat_until_unescaped('"'); return 1; }
<sgml>[[:alnum:]_]+=' { feed_token(strndup(yytext, strlen(yytext) - 1), REGULAR_TOKEN); eat_until_unescaped('\''); return 1; }
<sgml>[[:alnum:]_]+=[[:alnum:]_]* { feed_token(strdup(yytext), REGULAR_TOKEN); *(strchr(yyextra->token, '=') + 1) = 0; return 1; }
<sgml>[[:alnum:]_]+ { feed_token(strdup(yytext), REGULAR_TOKEN); return 1; }
<sgml>\> { BEGIN(INITIAL); }
<sgml>.|\n { /* nothing */ }
;|\{|\}|\(|\)|\[|\] { feed_token(strdup(yytext), REGULAR_TOKEN); return 1; }
[[:alnum:]_.@#/*]+ {
if (strncmp(yytext, "/*", 2) == 0) {
if (strlen(yytext) >= 4 && strcmp(yytext + strlen(yytext) - 2, "*/") == 0) {
/* nothing */
} else {
BEGIN(c_comment);
}
} else {
feed_token(strdup(yytext), REGULAR_TOKEN);
return 1;
}
}
\<\<?|\+|\-|\*|\/|%|&&?|\|\|? { feed_token(strdup(yytext), REGULAR_TOKEN); return 1; }
.|\n { /* nothing */ }
%%

View File

@@ -2,7 +2,7 @@ require File.expand_path('../lib/linguist/version', __FILE__)
Gem::Specification.new do |s|
s.name = 'github-linguist'
s.version = Linguist::VERSION
s.version = ENV['GEM_VERSION'] || Linguist::VERSION
s.summary = "GitHub Language detection"
s.description = 'We use this library at GitHub to detect blob languages, highlight code, ignore binary files, suppress generated files in diffs, and generate language breakdown graphs.'
@@ -10,15 +10,17 @@ Gem::Specification.new do |s|
s.homepage = "https://github.com/github/linguist"
s.license = "MIT"
s.files = Dir['lib/**/*'] + Dir['grammars/*'] + ['LICENSE']
s.files = Dir['lib/**/*'] + Dir['ext/**/*'] + Dir['grammars/*'] + ['LICENSE']
s.executables = ['linguist', 'git-linguist']
s.extensions = ['ext/linguist/extconf.rb']
s.add_dependency 'charlock_holmes', '~> 0.7.3'
s.add_dependency 'escape_utils', '~> 1.1.0'
s.add_dependency 'charlock_holmes', '~> 0.7.5'
s.add_dependency 'escape_utils', '~> 1.2.0'
s.add_dependency 'mime-types', '>= 1.19'
s.add_dependency 'rugged', '>= 0.25.1'
s.add_development_dependency 'minitest', '>= 5.0'
s.add_development_dependency 'rake-compiler', '~> 0.9'
s.add_development_dependency 'mocha'
s.add_development_dependency 'plist', '~>3.1'
s.add_development_dependency 'pry'
@@ -26,5 +28,5 @@ Gem::Specification.new do |s|
s.add_development_dependency 'yajl-ruby'
s.add_development_dependency 'color-proximity', '~> 0.2.1'
s.add_development_dependency 'licensed'
s.add_development_dependency 'licensee', '>= 8.6.0'
s.add_development_dependency 'licensee', '~> 8.8.0'
end

View File

@@ -1,4 +1,3 @@
---
https://bitbucket.org/Clams/sublimesystemverilog/get/default.tar.gz:
- source.systemverilog
- source.ucfconstraints
@@ -45,17 +44,19 @@ vendor/grammars/Isabelle.tmbundle:
- source.isabelle.theory
vendor/grammars/JSyntax:
- source.j
vendor/grammars/Julia.tmbundle:
- source.julia
vendor/grammars/Lean.tmbundle:
- source.lean
vendor/grammars/LiveScript.tmbundle:
- source.livescript
vendor/grammars/MATLAB-Language-grammar:
- source.matlab
vendor/grammars/MQL5-sublime:
- source.mql5
vendor/grammars/MagicPython:
- source.python
- source.regexp.python
- text.python.console
- text.python.traceback
vendor/grammars/Modelica:
- source.modelica
vendor/grammars/NSIS:
@@ -98,6 +99,8 @@ vendor/grammars/Sublime-Modula-2:
- source.modula2
vendor/grammars/Sublime-Nit:
- source.nit
vendor/grammars/Sublime-Pep8/:
- source.pep8
vendor/grammars/Sublime-QML:
- source.qml
vendor/grammars/Sublime-REBOL:
@@ -126,12 +129,22 @@ vendor/grammars/SublimePuppet:
- source.puppet
vendor/grammars/SublimeXtend:
- source.xtend
vendor/grammars/Syntax-highlighting-for-PostCSS:
- source.css.postcss.sugarss
- source.postcss
vendor/grammars/TLA:
- source.tla
vendor/grammars/TXL:
- source.txl
vendor/grammars/Terraform.tmLanguage:
- source.terraform
vendor/grammars/Textmate-Gosu-Bundle:
- source.gosu.2
vendor/grammars/TypeScript-TmLanguage:
- source.ts
- source.tsx
- text.error-list
- text.find-refs
vendor/grammars/UrWeb-Language-Definition:
- source.ur
vendor/grammars/VBDotNetSyntax:
@@ -180,6 +193,15 @@ vendor/grammars/atom-language-1c-bsl:
- source.sdbl
vendor/grammars/atom-language-clean:
- source.clean
- text.restructuredtext.clean
vendor/grammars/atom-language-julia:
- source.julia
- source.julia.console
vendor/grammars/atom-language-nextflow:
- source.nextflow
- source.nextflow-groovy
vendor/grammars/atom-language-p4:
- source.p4
vendor/grammars/atom-language-perl6:
- source.meta-info
- source.perl6fe
@@ -220,7 +242,6 @@ vendor/grammars/capnproto.tmbundle:
vendor/grammars/carto-atom:
- source.css.mss
vendor/grammars/ceylon-sublimetext:
- module.ceylon
- source.ceylon
vendor/grammars/chapel-tmbundle:
- source.chapel
@@ -241,11 +262,11 @@ vendor/grammars/cython:
- source.cython
vendor/grammars/d.tmbundle:
- source.d
vendor/grammars/dart-sublime-bundle:
vendor/grammars/dartlang:
- source.dart
- source.pubspec
- text.dart-analysis-output
- text.dart-doccomments
- source.yaml-ext
vendor/grammars/data-weave-tmLanguage:
- source.data-weave
vendor/grammars/desktop.tmbundle:
- source.desktop
vendor/grammars/diff.tmbundle:
@@ -327,6 +348,8 @@ vendor/grammars/java.tmbundle:
- source.java-properties
- text.html.jsp
- text.junit-test-report
vendor/grammars/javadoc.tmbundle:
- text.html.javadoc
vendor/grammars/javascript-objective-j.tmbundle:
- source.js.objj
vendor/grammars/jflex.tmbundle:
@@ -344,6 +367,8 @@ vendor/grammars/language-asn1:
vendor/grammars/language-babel:
- source.js.jsx
- source.regexp.babel
vendor/grammars/language-ballerina:
- source.ballerina
vendor/grammars/language-batchfile:
- source.batchfile
vendor/grammars/language-blade:
@@ -352,6 +377,8 @@ vendor/grammars/language-click:
- source.click
vendor/grammars/language-clojure:
- source.clojure
vendor/grammars/language-closure-templates:
- text.html.soy
vendor/grammars/language-coffee-script:
- source.coffee
- source.litcoffee
@@ -369,9 +396,12 @@ vendor/grammars/language-csound:
- source.csound-score
vendor/grammars/language-css:
- source.css
vendor/grammars/language-cwl:
- source.cwl
vendor/grammars/language-emacs-lisp:
- source.emacs.lisp
vendor/grammars/language-fontforge:
- source.afm
- source.fontforge
- source.opentype
- text.sfd
@@ -385,6 +415,7 @@ vendor/grammars/language-haml:
- text.haml
- text.hamlc
vendor/grammars/language-haskell:
- annotation.liquidhaskell.haskell
- hint.haskell
- hint.message.haskell
- hint.type.haskell
@@ -392,6 +423,7 @@ vendor/grammars/language-haskell:
- source.cabal
- source.haskell
- source.hsc2hs
- source.hsig
- text.tex.latex.haskell
vendor/grammars/language-inform7:
- source.inform7
@@ -399,6 +431,13 @@ vendor/grammars/language-javascript:
- source.js
- source.js.regexp
- source.js.regexp.replacement
- source.jsdoc
vendor/grammars/language-jison:
- source.jison
- source.jisonlex
- source.jisonlex-injection
vendor/grammars/language-jolie:
- source.jolie
vendor/grammars/language-jsoniq:
- source.jq
- source.xq
@@ -406,24 +445,36 @@ vendor/grammars/language-less:
- source.css.less
vendor/grammars/language-maxscript:
- source.maxscript
vendor/grammars/language-meson:
- source.meson
vendor/grammars/language-ncl:
- source.ncl
vendor/grammars/language-ninja:
- source.ninja
vendor/grammars/language-pan:
- source.pan
vendor/grammars/language-pcb:
- source.gerber
- source.pcb.board
- source.pcb.schematic
- source.pcb.sexp
vendor/grammars/language-povray:
- source.pov-ray sdl
vendor/grammars/language-python:
- text.python.console
- text.python.traceback
vendor/grammars/language-reason:
- source.reason
- source.reason.hover.type
vendor/grammars/language-regexp:
- source.regexp
- source.regexp.comment
- source.regexp.extended
vendor/grammars/language-renpy:
- source.renpy
vendor/grammars/language-restructuredtext:
- text.restructuredtext
vendor/grammars/language-ring:
- source.ring
vendor/grammars/language-roff:
- source.ditroff
- source.ditroff.desc
- source.ideal
- source.pic
- text.roff
@@ -431,6 +482,10 @@ vendor/grammars/language-roff:
vendor/grammars/language-rpm-spec:
- source.changelogs.rpm-spec
- source.rpm-spec
vendor/grammars/language-ruby:
- source.ruby
- source.ruby.gemfile
- text.html.erb
vendor/grammars/language-shellscript:
- source.shell
- text.shell-session
@@ -440,11 +495,15 @@ vendor/grammars/language-toc-wow:
- source.toc
vendor/grammars/language-turing:
- source.turing
vendor/grammars/language-typelanguage:
- source.tl
vendor/grammars/language-viml:
- source.viml
vendor/grammars/language-wavefront:
- source.wavefront.mtl
- source.wavefront.obj
vendor/grammars/language-webassembly:
- source.webassembly
vendor/grammars/language-xbase:
- source.harbour
vendor/grammars/language-xcompose:
@@ -453,6 +512,8 @@ vendor/grammars/language-yaml:
- source.yaml
vendor/grammars/language-yang:
- source.yang
vendor/grammars/language-yara:
- source.yara
vendor/grammars/latex.tmbundle:
- text.bibtex
- text.log.latex
@@ -478,11 +539,10 @@ vendor/grammars/make.tmbundle:
- source.makefile
vendor/grammars/mako-tmbundle:
- text.html.mako
vendor/grammars/marko-tmbundle:
- text.marko
vendor/grammars/mathematica-tmbundle:
- source.mathematica
vendor/grammars/matlab.tmbundle:
- source.matlab
- source.octave
vendor/grammars/maven.tmbundle:
- text.xml.pom
vendor/grammars/mediawiki.tmbundle:
@@ -515,7 +575,9 @@ vendor/grammars/ooc.tmbundle:
- source.ooc
vendor/grammars/opa.tmbundle:
- source.opa
vendor/grammars/oz-tmbundle/Syntaxes/Oz.tmLanguage:
vendor/grammars/openscad.tmbundle:
- source.scad
vendor/grammars/oz-tmbundle:
- source.oz
vendor/grammars/parrot:
- source.parrot.pir
@@ -550,13 +612,8 @@ vendor/grammars/r.tmbundle:
- text.tex.latex.rd
vendor/grammars/rascal-syntax-highlighting:
- source.rascal
vendor/grammars/reason:
- source.reason
vendor/grammars/ruby-slim.tmbundle:
- text.slim
vendor/grammars/ruby.tmbundle:
- source.ruby
- text.html.erb
vendor/grammars/sas.tmbundle:
- source.SASLog
- source.sas
@@ -571,6 +628,9 @@ vendor/grammars/scilab.tmbundle:
- source.scilab
vendor/grammars/secondlife-lsl:
- source.lsl
vendor/grammars/shaders-tmLanguage:
- source.hlsl
- source.shaderlab
vendor/grammars/smali-sublime:
- source.smali
vendor/grammars/smalltalk-tmbundle:
@@ -579,6 +639,8 @@ vendor/grammars/sourcepawn:
- source.sp
vendor/grammars/sql.tmbundle:
- source.sql
vendor/grammars/squirrel-language:
- source.nut
vendor/grammars/st2-zonefile:
- text.zone_file
vendor/grammars/standard-ml.tmbundle:
@@ -586,6 +648,8 @@ vendor/grammars/standard-ml.tmbundle:
- source.ml
vendor/grammars/sublime-MuPAD:
- source.mupad
vendor/grammars/sublime-angelscript:
- source.angelscript
vendor/grammars/sublime-aspectj:
- source.aspectj
vendor/grammars/sublime-autoit:
@@ -598,6 +662,8 @@ vendor/grammars/sublime-cirru:
- source.cirru
vendor/grammars/sublime-clips:
- source.clips
vendor/grammars/sublime-fantom:
- source.fan
vendor/grammars/sublime-glsl:
- source.essl
- source.glsl
@@ -605,6 +671,8 @@ vendor/grammars/sublime-golo:
- source.golo
vendor/grammars/sublime-mask:
- source.mask
vendor/grammars/sublime-nearley:
- source.ne
vendor/grammars/sublime-netlinx:
- source.netlinx
- source.netlinx.erb
@@ -619,6 +687,8 @@ vendor/grammars/sublime-rexx:
- source.rexx
vendor/grammars/sublime-robot-plugin:
- text.robot
vendor/grammars/sublime-shen:
- source.shen
vendor/grammars/sublime-spintools:
- source.regexp.spin
- source.spin
@@ -628,11 +698,6 @@ vendor/grammars/sublime-terra:
- source.terra
vendor/grammars/sublime-text-ox:
- source.ox
vendor/grammars/sublime-typescript:
- source.ts
- source.tsx
- text.error-list
- text.find-refs
vendor/grammars/sublime-varnish:
- source.varnish.vcl
vendor/grammars/sublime_cobol:
@@ -665,6 +730,8 @@ vendor/grammars/vhdl:
- source.vhdl
vendor/grammars/vue-syntax-highlight:
- text.html.vue
vendor/grammars/wdl-sublime-syntax-highlighter:
- source.wdl
vendor/grammars/xc.tmbundle:
- source.xc
vendor/grammars/xml.tmbundle:

View File

@@ -15,9 +15,9 @@ class << Linguist
# see Linguist::LazyBlob and Linguist::FileBlob for examples
#
# Returns Language or nil.
def detect(blob)
def detect(blob, allow_empty: false)
# Bail early if the blob is binary or empty.
return nil if blob.likely_binary? || blob.binary? || blob.empty?
return nil if blob.likely_binary? || blob.binary? || (!allow_empty && blob.empty?)
Linguist.instrument("linguist.detection", :blob => blob) do
# Call each strategy until one candidate is returned.
@@ -74,7 +74,7 @@ class << Linguist
# end
# end
#
# Linguist.instrumenter = CustomInstrumenter
# Linguist.instrumenter = CustomInstrumenter.new
#
# The instrumenter must conform to the `ActiveSupport::Notifications`
# interface, which defines `#instrument` and accepts:

View File

@@ -11,11 +11,13 @@ module Linguist
#
# path - A path String (does not necessarily exists on the file system).
# content - Content of the file.
# symlink - Whether the file is a symlink.
#
# Returns a Blob.
def initialize(path, content)
def initialize(path, content, symlink: false)
@path = path
@content = content
@symlink = symlink
end
# Public: Filename
@@ -69,5 +71,12 @@ module Linguist
"." + segments[index..-1].join(".")
end
end
# Public: Is this a symlink?
#
# Returns true or false.
def symlink?
@symlink
end
end
end

View File

@@ -275,10 +275,8 @@ module Linguist
# also--importantly--without having to duplicate many (potentially
# large) strings.
begin
encoded_newlines = ["\r\n", "\r", "\n"].
map { |nl| nl.encode(ruby_encoding, "ASCII-8BIT").force_encoding(data.encoding) }
data.split(Regexp.union(encoded_newlines), -1)
data.split(encoded_newlines_re, -1)
rescue Encoding::ConverterNotFoundError
# The data is not splittable in the detected encoding. Assume it's
# one big line.
@@ -289,6 +287,51 @@ module Linguist
end
end
def encoded_newlines_re
@encoded_newlines_re ||= Regexp.union(["\r\n", "\r", "\n"].
map { |nl| nl.encode(ruby_encoding, "ASCII-8BIT").force_encoding(data.encoding) })
end
def first_lines(n)
return lines[0...n] if defined? @lines
return [] unless viewable? && data
i, c = 0, 0
while c < n && j = data.index(encoded_newlines_re, i)
i = j + $&.length
c += 1
end
data[0...i].split(encoded_newlines_re, -1)
end
def last_lines(n)
if defined? @lines
if n >= @lines.length
@lines
else
lines[-n..-1]
end
end
return [] unless viewable? && data
no_eol = true
i, c = data.length, 0
k = i
while c < n && j = data.rindex(encoded_newlines_re, i - 1)
if c == 0 && j + $&.length == i
no_eol = false
n += 1
end
i = j
k = j + $&.length
c += 1
end
r = data[k..-1].split(encoded_newlines_re, -1)
r.pop if !no_eol
r
end
# Public: Get number of lines of code
#
# Requires Blob#data
@@ -340,7 +383,10 @@ module Linguist
!vendored? &&
!documentation? &&
!generated? &&
language && DETECTABLE_TYPES.include?(language.type)
language && ( defined?(detectable?) && !detectable?.nil? ?
detectable? :
DETECTABLE_TYPES.include?(language.type)
)
end
end
end

View File

@@ -3,6 +3,8 @@ require 'linguist/tokenizer'
module Linguist
# Language bayesian classifier.
class Classifier
CLASSIFIER_CONSIDER_BYTES = 50 * 1024
# Public: Use the classifier to detect language of the blob.
#
# blob - An object that quacks like a blob.
@@ -17,7 +19,7 @@ module Linguist
# Returns an Array of Language objects, most probable first.
def self.call(blob, possible_languages)
language_names = possible_languages.map(&:name)
classify(Samples.cache, blob.data, language_names).map do |name, _|
classify(Samples.cache, blob.data[0...CLASSIFIER_CONSIDER_BYTES], language_names).map do |name, _|
Language[name] # Return the actual Language objects
end
end

View File

@@ -9,11 +9,12 @@
## Documentation directories ##
- ^docs?/
- ^[Dd]ocs?/
- (^|/)[Dd]ocumentation/
- (^|/)javadoc/
- ^man/
- (^|/)[Jj]avadoc/
- ^[Mm]an/
- ^[Ee]xamples/
- ^[Dd]emos?/
## Documentation files ##
@@ -27,4 +28,4 @@
- (^|/)[Rr]eadme(\.|$)
# Samples folders
- ^[Ss]amples/
- ^[Ss]amples?/

View File

@@ -23,21 +23,26 @@ module Linguist
#
# Returns a String like '100644'
def mode
File.stat(@fullpath).mode.to_s(8)
@mode ||= File.stat(@fullpath).mode.to_s(8)
end
def symlink?
return @symlink if defined? @symlink
@symlink = (File.symlink?(@fullpath) rescue false)
end
# Public: Read file contents.
#
# Returns a String.
def data
File.read(@fullpath)
@data ||= File.read(@fullpath)
end
# Public: Get byte size
#
# Returns an Integer.
def size
File.size(@fullpath)
@size ||= File.size(@fullpath)
end
end
end

View File

@@ -52,12 +52,14 @@ module Linguist
# Return true or false
def generated?
xcode_file? ||
cocoapods? ||
carthage_build? ||
generated_net_designer_file? ||
generated_net_specflow_feature_file? ||
composer_lock? ||
node_modules? ||
go_vendor? ||
npm_shrinkwrap? ||
npm_shrinkwrap_or_package_lock? ||
godeps? ||
generated_by_zephir? ||
minified_files? ||
@@ -81,7 +83,8 @@ module Linguist
generated_grammarkit? ||
generated_roxygen2? ||
generated_jison? ||
generated_yarn_lock?
generated_yarn_lock? ||
generated_grpc_cpp?
end
# Internal: Is the blob an Xcode file?
@@ -94,6 +97,20 @@ module Linguist
['.nib', '.xcworkspacedata', '.xcuserstate'].include?(extname)
end
# Internal: Is the blob part of Pods/, which contains dependencies not meant for humans in pull requests.
#
# Returns true or false.
def cocoapods?
!!name.match(/(^Pods|\/Pods)\//)
end
# Internal: Is the blob part of Carthage/Build/, which contains dependencies not meant for humans in pull requests.
#
# Returns true or false.
def carthage_build?
!!name.match(/(^|\/)Carthage\/Build\//)
end
# Internal: Is the blob minified files?
#
# Consider a file minified if the average line length is
@@ -243,7 +260,11 @@ module Linguist
#
# Returns true or false.
def generated_postscript?
return false unless ['.ps', '.eps'].include? extname
return false unless ['.ps', '.eps', '.pfa'].include? extname
# Type 1 and Type 42 fonts converted to PostScript are stored as hex-encoded byte streams; these
# streams are always preceded the `eexec` operator (if Type 1), or the `/sfnts` key (if Type 42).
return true if data =~ /(\n|\r\n|\r)\s*(?:currentfile eexec\s+|\/sfnts\s+\[\1<)\h{8,}\1/
# We analyze the "%%Creator:" comment, which contains the author/generator
# of the file. If there is one, it should be in one of the first few lines.
@@ -253,10 +274,12 @@ module Linguist
# Most generators write their version number, while human authors' or companies'
# names don't contain numbers. So look if the line contains digits. Also
# look for some special cases without version numbers.
return creator =~ /[0-9]/ ||
creator.include?("mpage") ||
creator.include?("draw") ||
creator.include?("ImageMagick")
return true if creator =~ /[0-9]|draw|mpage|ImageMagick|inkscape|MATLAB/ ||
creator =~ /PCBNEW|pnmtops|\(Unknown\)|Serif Affinity|Filterimage -tops/
# EAGLE doesn't include a version number when it generates PostScript.
# However, it does prepend its name to the document's "%%Title" field.
!!creator.include?("EAGLE") and lines[0..4].find {|line| line =~ /^%%Title: EAGLE Drawing /}
end
def generated_go?
@@ -326,11 +349,11 @@ module Linguist
!!name.match(/vendor\/((?!-)[-0-9A-Za-z]+(?<!-)\.)+(com|edu|gov|in|me|net|org|fm|io)/)
end
# Internal: Is the blob a generated npm shrinkwrap file?
# Internal: Is the blob a generated npm shrinkwrap or package lock file?
#
# Returns true or false.
def npm_shrinkwrap?
!!name.match(/npm-shrinkwrap\.json/)
def npm_shrinkwrap_or_package_lock?
name.match(/npm-shrinkwrap\.json/) || name.match(/package-lock\.json/)
end
# Internal: Is the blob part of Godeps/,
@@ -489,5 +512,18 @@ module Linguist
return false unless lines.count > 0
return lines[0].include?("# THIS IS AN AUTOGENERATED FILE")
end
# Internal: Is this a protobuf/grpc-generated C++ file?
#
# A generated file contains:
# // Generated by the gRPC C++ plugin.
# on the first line.
#
# Return true or false
def generated_grpc_cpp?
return false unless %w{.cpp .hpp .h .cc}.include? extname
return false unless lines.count > 1
return lines[0].start_with?("// Generated by the gRPC")
end
end
end

View File

@@ -1,6 +1,8 @@
module Linguist
# A collection of simple heuristics that can be used to better analyze languages.
class Heuristics
HEURISTICS_CONSIDER_BYTES = 50 * 1024
# Public: Use heuristics to detect language of the blob.
#
# blob - An object that quacks like a blob.
@@ -14,12 +16,13 @@ module Linguist
#
# Returns an Array of languages, or empty if none matched or were inconclusive.
def self.call(blob, candidates)
data = blob.data
return [] if blob.symlink?
data = blob.data[0...HEURISTICS_CONSIDER_BYTES]
@heuristics.each do |heuristic|
if heuristic.matches?(blob.name)
languages = Array(heuristic.call(data))
return languages if languages.any? || languages.all? { |l| candidates.include?(l) }
if heuristic.matches?(blob.name, candidates)
return Array(heuristic.call(data))
end
end
@@ -28,7 +31,8 @@ module Linguist
# Internal: Define a new heuristic.
#
# languages - String names of languages to disambiguate.
# exts_and_langs - String names of file extensions and languages to
# disambiguate.
# heuristic - Block which takes data as an argument and returns a Language or nil.
#
# Examples
@@ -41,23 +45,28 @@ module Linguist
# end
# end
#
def self.disambiguate(*extensions, &heuristic)
@heuristics << new(extensions, &heuristic)
def self.disambiguate(*exts_and_langs, &heuristic)
@heuristics << new(exts_and_langs, &heuristic)
end
# Internal: Array of defined heuristics
@heuristics = []
# Internal
def initialize(extensions, &heuristic)
@extensions = extensions
def initialize(exts_and_langs, &heuristic)
@exts_and_langs, @candidates = exts_and_langs.partition {|e| e =~ /\A\./}
@heuristic = heuristic
end
# Internal: Check if this heuristic matches the candidate languages.
def matches?(filename)
# Internal: Check if this heuristic matches the candidate filenames or
# languages.
def matches?(filename, candidates)
filename = filename.downcase
@extensions.any? { |ext| filename.end_with?(ext) }
candidates = candidates.compact.map(&:name)
@exts_and_langs.any? { |ext| filename.end_with?(ext) } ||
(candidates.any? &&
(@candidates - candidates == [] &&
candidates - @candidates == []))
end
# Internal: Perform the heuristic
@@ -66,7 +75,25 @@ module Linguist
end
# Common heuristics
CPlusPlusRegex = Regexp.union(
/^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>/,
/^\s*template\s*</,
/^[ \t]*try/,
/^[ \t]*catch\s*\(/,
/^[ \t]*(class|(using[ \t]+)?namespace)\s+\w+/,
/^[ \t]*(private|public|protected):$/,
/std::\w+/)
ObjectiveCRegex = /^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])/
Perl5Regex = /\buse\s+(?:strict\b|v?5\.)/
Perl6Regex = /^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)/
disambiguate ".as" do |data|
if /^\s*(package\s+[a-z0-9_\.]+|import\s+[a-zA-Z0-9_\.]+;|class\s+[A-Za-z0-9_]+\s+extends\s+[A-Za-z0-9_]+)/.match(data)
Language["ActionScript"]
else
Language["AngelScript"]
end
end
disambiguate ".asc" do |data|
if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data)
@@ -125,11 +152,18 @@ module Linguist
end
disambiguate ".d" do |data|
if /^module /.match(data)
# see http://dlang.org/spec/grammar
# ModuleDeclaration | ImportDeclaration | FuncDeclaration | unittest
if /^module\s+[\w.]*\s*;|import\s+[\w\s,.:]*;|\w+\s+\w+\s*\(.*\)(?:\(.*\))?\s*{[^}]*}|unittest\s*(?:\(.*\))?\s*{[^}]*}/.match(data)
Language["D"]
elsif /^((dtrace:::)?BEGIN|provider |#pragma (D (option|attributes)|ident)\s)/.match(data)
# see http://dtrace.org/guide/chp-prog.html, http://dtrace.org/guide/chp-profile.html, http://dtrace.org/guide/chp-opt.html
elsif /^(\w+:\w*:\w*:\w*|BEGIN|END|provider\s+|(tick|profile)-\w+\s+{[^}]*}|#pragma\s+D\s+(option|attributes|depends_on)\s|#pragma\s+ident\s)/.match(data)
Language["DTrace"]
elsif /(\/.*:( .* \\)$| : \\$|^ : |: \\$)/.match(data)
# path/target : dependency \
# target : \
# : dependency
# path/file.ext1 : some/path/../file.ext2
elsif /([\/\\].*:\s+.*\s\\$|: \\$|^ : |^[\w\s\/\\.]+\w+\.\w+\s*:\s+[\w\s\/\\.]+\w+\.\w+)/.match(data)
Language["Makefile"]
end
end
@@ -158,7 +192,7 @@ module Linguist
elsif data.include?("flowop")
Language["Filebench WML"]
elsif fortran_rx.match(data)
Language["FORTRAN"]
Language["Fortran"]
end
end
@@ -166,7 +200,7 @@ module Linguist
if /^: /.match(data)
Language["Forth"]
elsif fortran_rx.match(data)
Language["FORTRAN"]
Language["Fortran"]
end
end
@@ -199,8 +233,7 @@ module Linguist
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))
elsif CPlusPlusRegex.match(data)
Language["C++"]
end
end
@@ -219,7 +252,7 @@ module Linguist
elsif /^(%[%{}]xs|<.*>)/.match(data)
Language["Lex"]
elsif /^\.[a-z][a-z](\s|$)/i.match(data)
Language["Groff"]
Language["Roff"]
elsif /^\((de|class|rel|code|data|must)\s/.match(data)
Language["PicoLisp"]
end
@@ -263,7 +296,9 @@ module Linguist
if /(^[-a-z0-9=#!\*\[|>])|<\//i.match(data) || data.empty?
Language["Markdown"]
elsif /^(;;|\(define_)/.match(data)
Language["GCC machine description"]
Language["GCC Machine Description"]
else
Language["Markdown"]
end
end
@@ -287,9 +322,9 @@ module Linguist
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"]
Language["Roff"]
elsif /(?<!\S)\.(include|globa?l)\s/.match(data) || /(?<!\/\*)(\A|\n)\s*\.[A-Za-z][_A-Za-z0-9]*:/.match(data.gsub(/"([^\\"]|\\.)*"|'([^\\']|\\.)*'|\\\s*(?:--.*)?\n/, ""))
Language["Unix Assembly"]
else
Language["MAXScript"]
end
@@ -297,7 +332,7 @@ module Linguist
disambiguate ".n" do |data|
if /^[.']/.match(data)
Language["Groff"]
Language["Roff"]
elsif /^(module|namespace|using)\s/.match(data)
Language["Nemerle"]
end
@@ -328,31 +363,25 @@ module Linguist
disambiguate ".pl" do |data|
if /^[^#]*:-/.match(data)
Language["Prolog"]
elsif /use strict|use\s+v?5\./.match(data)
elsif Perl5Regex.match(data)
Language["Perl"]
elsif /^(use v6|(my )?class|module)/.match(data)
Language["Perl6"]
elsif Perl6Regex.match(data)
Language["Perl 6"]
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
disambiguate ".pm" do |data|
if Perl5Regex.match(data)
Language["Perl"]
elsif Perl6Regex.match(data)
Language["Perl 6"]
elsif /^\s*\/\* XPM \*\//.match(data)
Language["XPM"]
end
end
disambiguate ".pro" do |data|
if /^[^#]+:-/.match(data)
if /^[^\[#]+:-/.match(data)
Language["Prolog"]
elsif data.include?("last_client=")
Language["INI"]
@@ -383,7 +412,7 @@ module Linguist
if /^\.!|^\.end lit(?:eral)?\b/i.match(data)
Language["RUNOFF"]
elsif /^\.\\" /.match(data)
Language["Groff"]
Language["Roff"]
end
end
@@ -434,10 +463,12 @@ module Linguist
end
disambiguate ".t" do |data|
if /^\s*%|^\s*var\s+\w+\s*:\s*\w+/.match(data)
if Perl5Regex.match(data)
Language["Perl"]
elsif Perl6Regex.match(data)
Language["Perl 6"]
elsif /^\s*%[ \t]+|^\s*var\s+\w+\s*:=\s*\w+/.match(data)
Language["Turing"]
elsif /^\s*use\s+v6\s*;/.match(data)
Language["Perl6"]
end
end
@@ -450,7 +481,7 @@ module Linguist
end
disambiguate ".ts" do |data|
if data.include?("<TS")
if /<TS\b/.match(data)
Language["XML"]
else
Language["TypeScript"]
@@ -465,5 +496,30 @@ module Linguist
Language["Scilab"]
end
end
disambiguate ".tsx" do |data|
if /^\s*(import.+(from\s+|require\()['"]react|\/\/\/\s*<reference\s)/.match(data)
Language["TypeScript"]
elsif /^\s*<\?xml\s+version/i.match(data)
Language["XML"]
end
end
disambiguate ".w" do |data|
if (data.include?("&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS"))
Language["OpenEdge ABL"]
elsif /^@(<|\w+\.)/.match(data)
Language["CWeb"]
end
end
disambiguate ".x" do |data|
if /\b(program|version)\s+\w+\s*{|\bunion\s+\w+\s+switch\s*\(/.match(data)
Language["RPC"]
elsif /^%(end|ctor|hook|group)\b/.match(data)
Language["Logos"]
end
end
end
end

View File

@@ -109,8 +109,8 @@ module Linguist
#
# Returns the Language or nil if none was found.
def self.find_by_name(name)
return nil if name.to_s.empty?
name && (@name_index[name.downcase] || @name_index[name.split(',').first.downcase])
return nil if !name.is_a?(String) || name.to_s.empty?
name && (@name_index[name.downcase] || @name_index[name.split(',', 2).first.downcase])
end
# Public: Look up Language by one of its aliases.
@@ -124,8 +124,8 @@ module Linguist
#
# Returns the Language or nil if none was found.
def self.find_by_alias(name)
return nil if name.to_s.empty?
name && (@alias_index[name.downcase] || @alias_index[name.split(',').first.downcase])
return nil if !name.is_a?(String) || name.to_s.empty?
name && (@alias_index[name.downcase] || @alias_index[name.split(',', 2).first.downcase])
end
# Public: Look up Languages by filename.
@@ -214,15 +214,12 @@ module Linguist
#
# Returns the Language or nil if none was found.
def self.[](name)
return nil if name.to_s.empty?
return nil if !name.is_a?(String) || name.to_s.empty?
lang = @index[name.downcase]
return lang if lang
name = name.split(',').first
return nil if name.to_s.empty?
@index[name.downcase]
@index[name.split(',', 2).first.downcase]
end
# Public: A List of popular languages

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,8 @@ module Linguist
GIT_ATTR = ['linguist-documentation',
'linguist-language',
'linguist-vendored',
'linguist-generated']
'linguist-generated',
'linguist-detectable']
GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true }
GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS)
@@ -70,6 +71,14 @@ module Linguist
end
end
def detectable?
if attr = git_attributes['linguist-detectable']
return boolean_attribute(attr)
else
nil
end
end
def data
load_blob!
@data
@@ -80,6 +89,11 @@ module Linguist
@size
end
def symlink?
# We don't create LazyBlobs for symlinks.
false
end
def cleanup!
@data.clear if @data
end

View File

@@ -11,6 +11,8 @@ module Linguist
# Returns an Array with one Language if the blob has a shebang with a valid
# interpreter, or empty if there is no shebang.
def self.call(blob, _ = nil)
return [] if blob.symlink?
Language.find_by_interpreter interpreter(blob.data)
end

View File

@@ -109,8 +109,10 @@ module Linguist
# Returns an Array with one Language if the blob has a Vim or Emacs modeline
# that matches a Language name or alias. Returns an empty array if no match.
def self.call(blob, _ = nil)
header = blob.lines.first(SEARCH_SCOPE).join("\n")
footer = blob.lines.last(SEARCH_SCOPE).join("\n")
return [] if blob.symlink?
header = blob.first_lines(SEARCH_SCOPE).join("\n")
footer = blob.last_lines(SEARCH_SCOPE).join("\n")
Array(Language.find_by_alias(modeline(header + footer)))
end

View File

@@ -1,4 +1,5 @@
require 'strscan'
require 'linguist/linguist'
module Linguist
# Generic programming language tokenizer.
@@ -15,191 +16,5 @@ module Linguist
def self.tokenize(data)
new.extract_tokens(data)
end
# Read up to 100KB
BYTE_LIMIT = 100_000
# Start state on token, ignore anything till the next newline
SINGLE_LINE_COMMENTS = [
'//', # C
'--', # Ada, Haskell, AppleScript
'#', # Ruby
'%', # Tex
'"', # Vim
]
# Start state on opening token, ignore anything until the closing
# token is reached.
MULTI_LINE_COMMENTS = [
['/*', '*/'], # C
['<!--', '-->'], # XML
['{-', '-}'], # Haskell
['(*', '*)'], # Coq
['"""', '"""'], # Python
["'''", "'''"] # Python
]
START_SINGLE_LINE_COMMENT = Regexp.compile(SINGLE_LINE_COMMENTS.map { |c|
"\s*#{Regexp.escape(c)} "
}.join("|"))
START_MULTI_LINE_COMMENT = Regexp.compile(MULTI_LINE_COMMENTS.map { |c|
Regexp.escape(c[0])
}.join("|"))
# Internal: Extract generic tokens from data.
#
# data - String to scan.
#
# Examples
#
# extract_tokens("printf('Hello')")
# # => ['printf', '(', ')']
#
# Returns Array of token Strings.
def extract_tokens(data)
s = StringScanner.new(data)
tokens = []
until s.eos?
break if s.pos >= BYTE_LIMIT
if token = s.scan(/^#!.+$/)
if name = extract_shebang(token)
tokens << "SHEBANG#!#{name}"
end
# Single line comment
elsif s.beginning_of_line? && token = s.scan(START_SINGLE_LINE_COMMENT)
# tokens << token.strip
s.skip_until(/\n|\Z/)
# Multiline comments
elsif token = s.scan(START_MULTI_LINE_COMMENT)
# tokens << token
close_token = MULTI_LINE_COMMENTS.assoc(token)[1]
s.skip_until(Regexp.compile(Regexp.escape(close_token)))
# tokens << close_token
# Skip single or double quoted strings
elsif s.scan(/"/)
if s.peek(1) == "\""
s.getch
else
s.skip_until(/(?<!\\)"/)
end
elsif s.scan(/'/)
if s.peek(1) == "'"
s.getch
else
s.skip_until(/(?<!\\)'/)
end
# Skip number literals
elsif s.scan(/(0x\h(\h|\.)*|\d(\d|\.)*)([uU][lL]{0,2}|([eE][-+]\d*)?[fFlL]*)/)
# SGML style brackets
elsif token = s.scan(/<[^\s<>][^<>]*>/)
extract_sgml_tokens(token).each { |t| tokens << t }
# Common programming punctuation
elsif token = s.scan(/;|\{|\}|\(|\)|\[|\]/)
tokens << token
# Regular token
elsif token = s.scan(/[\w\.@#\/\*]+/)
tokens << token
# Common operators
elsif token = s.scan(/<<?|\+|\-|\*|\/|%|&&?|\|\|?/)
tokens << token
else
s.getch
end
end
tokens
end
# Internal: Extract normalized shebang command token.
#
# Examples
#
# extract_shebang("#!/usr/bin/ruby")
# # => "ruby"
#
# extract_shebang("#!/usr/bin/env node")
# # => "node"
#
# extract_shebang("#!/usr/bin/env A=B foo=bar awk -f")
# # => "awk"
#
# Returns String token or nil it couldn't be parsed.
def extract_shebang(data)
s = StringScanner.new(data)
if path = s.scan(/^#!\s*\S+/)
script = path.split('/').last
if script == 'env'
s.scan(/\s+/)
s.scan(/.*=[^\s]+\s+/)
script = s.scan(/\S+/)
end
script = script[/[^\d]+/, 0] if script
return script
end
nil
end
# Internal: Extract tokens from inside SGML tag.
#
# data - SGML tag String.
#
# Examples
#
# extract_sgml_tokens("<a href='' class=foo>")
# # => ["<a>", "href="]
#
# Returns Array of token Strings.
def extract_sgml_tokens(data)
s = StringScanner.new(data)
tokens = []
until s.eos?
# Emit start token
if token = s.scan(/<\/?[^\s>]+/)
tokens << "#{token}>"
# Emit attributes with trailing =
elsif token = s.scan(/\w+=/)
tokens << token
# Then skip over attribute value
if s.scan(/"/)
s.skip_until(/[^\\]"/)
elsif s.scan(/'/)
s.skip_until(/[^\\]'/)
else
s.skip_until(/\w+/)
end
# Emit lone attributes
elsif token = s.scan(/\w+/)
tokens << token
# Stop at the end of the tag
elsif s.scan(/>/)
s.terminate
else
s.getch
end
end
tokens
end
end
end

View File

@@ -19,9 +19,7 @@
- (^|/)dist/
# C deps
# https://github.com/joyent/node
- ^deps/
- ^tools/
- (^|/)configure$
- (^|/)config.guess$
- (^|/)config.sub$
@@ -65,6 +63,7 @@
# Font Awesome
- (^|/)font-awesome\.(css|less|scss|styl)$
- (^|/)font-awesome/.*\.(css|less|scss|styl)$
# Foundation css
- (^|/)foundation\.(css|less|scss|styl)$
@@ -72,12 +71,21 @@
# Normalize.css
- (^|/)normalize\.(css|less|scss|styl)$
# Skeleton.css
- (^|/)skeleton\.(css|less|scss|styl)$
# Bourbon css
- (^|/)[Bb]ourbon/.*\.(css|less|scss|styl)$
# Animate.css
- (^|/)animate\.(css|less|scss|styl)$
# Materialize.css
- (^|/)materialize\.(css|less|scss|styl|js)$
# Select2
- (^|/)select2/.*\.(css|scss|js)$
# Vendored dependencies
- third[-_]?party/
- 3rd[-_]?party/
@@ -116,6 +124,15 @@
# jQuery File Upload
- (^|/)jquery\.fileupload(-\w+)?\.js$
# jQuery dataTables
- jquery.dataTables.js
# bootboxjs
- bootbox.js
# pdf-worker
- pdf.worker.js
# Slick
- (^|/)slick\.\w+.js$
@@ -132,6 +149,9 @@
- .sublime-project
- .sublime-workspace
# VS Code workspace files
- .vscode
# Prototype
- (^|/)prototype(.*)\.js$
- (^|/)effects\.js$
@@ -188,6 +208,9 @@
# React
- (^|/)react(-[^.]*)?\.js$
# flow-typed
- (^|/)flow-typed/.*\.js$
# Modernizr
- (^|/)modernizr\-\d\.\d+(\.\d+)?\.js$
- (^|/)modernizr\.custom\.\d+\.js$
@@ -221,10 +244,7 @@
- \.imageset/
# Carthage
- ^Carthage/
# Cocoapods
- ^Pods/
- (^|/)Carthage/
# Sparkle
- (^|/)Sparkle/

View File

@@ -1,3 +1,3 @@
module Linguist
VERSION = "5.0.5"
VERSION = "6.0.0"
end

View File

@@ -1,7 +0,0 @@
{
"repository": "https://github.com/github/linguist",
"dependencies": {
"season": "~>5.4"
},
"license": "MIT"
}

View File

@@ -0,0 +1,35 @@
// A sample for Actionscript.
package foobar
{
import flash.display.MovieClip;
class Bar
{
public function getNumber():Number
{
return 10;
}
}
class Foo extends Bar
{
private var ourNumber:Number = 25;
override public function getNumber():Number
{
return ourNumber;
}
}
class Main extends MovieClip
{
public function Main()
{
var x:Bar = new Bar();
var y:Foo = new Foo();
trace(x.getNumber());
trace(y.getNumber());
}
}
}

View File

@@ -0,0 +1,13 @@
package mypackage
{
public class Hello
{
/* Let's say hello!
* This is just a test script for Linguist's Actionscript detection.
*/
public function sayHello():void
{
trace("Hello, world");
}
}
}

View File

@@ -0,0 +1,69 @@
StartFontMetrics 2.0
Comment Generated by FontForge 20170719
Comment Creation Date: Sun Jul 23 19:47:25 2017
FontName OpenSansCondensed-Bold
FullName Open Sans Condensed Bold
FamilyName Open Sans Condensed
Weight Bold
Notice (Digitized data copyright (c) 2010-2011, Google Corporation.)
ItalicAngle 0
IsFixedPitch false
UnderlinePosition -205
UnderlineThickness 102
Version 1.11
EncodingScheme ISO10646-1
FontBBox -667 -290 1046 1062
CapHeight 714
XHeight 544
Ascender 760
Descender -240
StartCharMetrics 939
C 32 ; WX 247 ; N space ; B 0 0 0 0 ;
C 33 ; WX 270 ; N exclam ; B 54 -14 216 714 ;
C 34 ; WX 445 ; N quotedbl ; B 59 456 388 714 ;
C 35 ; WX 543 ; N numbersign ; B 20 0 525 714 ;
C 36 ; WX 462 ; N dollar ; B 36 -59 427 760 ;
C 37 ; WX 758 ; N percent ; B 30 -9 729 725 ;
C 38 ; WX 581 ; N ampersand ; B 28 -10 572 725 ;
C 39 ; WX 246 ; N quotesingle ; B 59 456 188 714 ;
C -1 ; WX 462 ; N six.os ; B 36 -10 427 724 ;
C -1 ; WX 420 ; N seven.os ; B 19 -170 402 544 ;
C -1 ; WX 462 ; N eight.os ; B 35 -10 429 724 ;
C -1 ; WX 461 ; N nine.os ; B 33 -182 424 564 ;
C -1 ; WX 496 ; N g.alt ; B 36 -241 442 555 ;
C -1 ; WX 496 ; N gcircumflex.alt ; B 36 -241 442 767 ;
C -1 ; WX 496 ; N gbreve.alt ; B 36 -241 442 766 ;
C -1 ; WX 496 ; N gdot.alt ; B 36 -241 442 756 ;
C -1 ; WX 496 ; N gcommaaccent.alt ; B 36 -241 442 767 ;
C -1 ; WX 0 ; N cyrotmarkcomb ; B -203 591 203 714 ;
EndCharMetrics
StartKernData
StartKernPairs 15878
KPX quotedbl uni1ECA 20
KPX quotedbl uni1EC8 20
KPX quotedbl Idotaccent 20
KPX quotedbl Iogonek 20
KPX quotedbl Imacron 20
KPX quotedbl Idieresis 20
KPX quotedbl Icircumflex 20
KPX quotedbl Iacute 20
KPX quotedbl Igrave 20
KPX quotedbl I 20
KPX quotedbl uni1EF9 20
KPX quoteleft q -20
KPX quoteleft o -20
KPX quoteleft g -9
KPX quoteleft e -20
KPX quoteleft d -20
KPX quoteleft c -20
KPX quoteleft Z 20
KPX Delta C -9
KPX Delta A -20
KPX Delta question 20
KPX Delta period -41
KPX Delta comma -41
KPX Delta quotesingle 41
KPX Delta quotedbl 41
EndKernPairs
EndKernData
EndFontMetrics

View File

@@ -0,0 +1,464 @@
StartFontMetrics 2.0
Comment Generated by FontForge 20170719
Comment Creation Date: Sun Jul 23 19:52:19 2017
FontName SpecialElite-Regular
FullName Special Elite
FamilyName Special Elite
Weight Book
Notice (Copyright (c) 2010 by Brian J. Bonislawsky DBA Astigmatic (AOETI). All rights reserved. Available under the Apache 2.0 licence.http://www.apache.org/licenses/LICENSE-2.0.html)
ItalicAngle 0
IsFixedPitch false
UnderlinePosition -133
UnderlineThickness 20
Version 1.000
EncodingScheme ISO10646-1
FontBBox -33 -322 1052 959
CapHeight 714
XHeight 487
Ascender 688
Descender -225
StartCharMetrics 371
C 32 ; WX 292 ; N space ; B 0 0 0 0 ;
C 33 ; WX 276 ; N exclam ; B 73 0 207 702 ;
C 34 ; WX 352 ; N quotedbl ; B 48 449 295 704 ;
C 35 ; WX 554 ; N numbersign ; B 31 -2 524 713 ;
C 36 ; WX 526 ; N dollar ; B 31 -201 498 919 ;
C 37 ; WX 666 ; N percent ; B 32 -186 642 872 ;
C 38 ; WX 676 ; N ampersand ; B 31 -5 645 705 ;
C 39 ; WX 196 ; N quotesingle ; B 48 449 143 703 ;
C 40 ; WX 279 ; N parenleft ; B 55 -71 243 757 ;
C 41 ; WX 281 ; N parenright ; B 37 -59 229 770 ;
C 42 ; WX 522 ; N asterisk ; B 32 276 493 707 ;
C 43 ; WX 496 ; N plus ; B 29 131 465 560 ;
C 44 ; WX 336 ; N comma ; B 39 -197 290 251 ;
C 45 ; WX 636 ; N hyphen ; B 63 273 573 397 ;
C 46 ; WX 349 ; N period ; B 52 -3 298 245 ;
C 47 ; WX 557 ; N slash ; B 23 -41 536 760 ;
C 48 ; WX 610 ; N zero ; B 55 0 560 720 ;
C 49 ; WX 569 ; N one ; B 27 -12 572 712 ;
C 50 ; WX 573 ; N two ; B 50 -25 541 680 ;
C 51 ; WX 557 ; N three ; B 44 -25 514 694 ;
C 52 ; WX 612 ; N four ; B 15 4 584 708 ;
C 53 ; WX 537 ; N five ; B 47 0 505 690 ;
C 54 ; WX 588 ; N six ; B 48 -10 548 707 ;
C 55 ; WX 555 ; N seven ; B 15 -34 549 734 ;
C 56 ; WX 598 ; N eight ; B 51 1 551 720 ;
C 57 ; WX 584 ; N nine ; B 48 -2 539 715 ;
C 58 ; WX 343 ; N colon ; B 51 -3 297 518 ;
C 59 ; WX 328 ; N semicolon ; B 45 -197 297 518 ;
C 60 ; WX 463 ; N less ; B 31 120 401 565 ;
C 61 ; WX 636 ; N equal ; B 63 186 573 513 ;
C 62 ; WX 463 ; N greater ; B 62 120 433 565 ;
C 63 ; WX 470 ; N question ; B 34 2 442 729 ;
C 64 ; WX 665 ; N at ; B 46 -4 618 680 ;
C 65 ; WX 549 ; N A ; B -1 -16 550 703 ;
C 66 ; WX 604 ; N B ; B 29 -6 557 704 ;
C 67 ; WX 579 ; N C ; B 46 -13 531 700 ;
C 68 ; WX 622 ; N D ; B 36 -17 579 713 ;
C 69 ; WX 638 ; N E ; B 38 -16 587 691 ;
C 70 ; WX 605 ; N F ; B 29 -9 595 709 ;
C 71 ; WX 615 ; N G ; B 45 -3 586 710 ;
C 72 ; WX 652 ; N H ; B 40 -20 622 690 ;
C 73 ; WX 495 ; N I ; B 26 -24 469 710 ;
C 74 ; WX 541 ; N J ; B 16 -3 539 703 ;
C 75 ; WX 582 ; N K ; B 28 -5 584 711 ;
C 76 ; WX 602 ; N L ; B 23 -14 583 718 ;
C 77 ; WX 697 ; N M ; B 46 -10 655 704 ;
C 78 ; WX 627 ; N N ; B 41 -15 595 700 ;
C 79 ; WX 616 ; N O ; B 42 -30 574 702 ;
C 80 ; WX 553 ; N P ; B 30 -12 527 689 ;
C 81 ; WX 602 ; N Q ; B 42 -98 571 711 ;
C 82 ; WX 636 ; N R ; B 14 -9 624 706 ;
C 83 ; WX 588 ; N S ; B 51 -13 547 690 ;
C 84 ; WX 594 ; N T ; B 25 1 564 707 ;
C 85 ; WX 621 ; N U ; B 24 -6 611 710 ;
C 86 ; WX 611 ; N V ; B -1 -15 614 726 ;
C 87 ; WX 643 ; N W ; B 8 0 614 689 ;
C 88 ; WX 582 ; N X ; B 3 -1 580 697 ;
C 89 ; WX 561 ; N Y ; B -21 -2 562 719 ;
C 90 ; WX 592 ; N Z ; B 49 -1 551 709 ;
C 91 ; WX 312 ; N bracketleft ; B 85 -72 297 754 ;
C 92 ; WX 557 ; N backslash ; B 21 -41 534 760 ;
C 249 ; WX 639 ; N ugrave ; B 5 -28 624 679 ;
C 250 ; WX 639 ; N uacute ; B 5 -28 624 682 ;
C 251 ; WX 639 ; N ucircumflex ; B 5 -28 624 691 ;
C 252 ; WX 639 ; N udieresis ; B 5 -28 624 649 ;
C 253 ; WX 592 ; N yacute ; B 0 -232 596 666 ;
C 254 ; WX 552 ; N thorn ; B -33 -221 512 699 ;
C 255 ; WX 592 ; N ydieresis ; B 0 -232 596 643 ;
C -1 ; WX 549 ; N Amacron ; B -1 -16 550 809 ;
C -1 ; WX 565 ; N amacron ; B 38 -6 561 619 ;
C -1 ; WX 549 ; N Abreve ; B -1 -16 550 890 ;
C -1 ; WX 565 ; N abreve ; B 38 -6 561 686 ;
C -1 ; WX 549 ; N Aogonek ; B -1 -138 589 703 ;
C -1 ; WX 565 ; N aogonek ; B 38 -118 624 502 ;
C -1 ; WX 579 ; N Cacute ; B 46 -13 531 900 ;
C -1 ; WX 547 ; N cacute ; B 39 -22 506 693 ;
C -1 ; WX 579 ; N Ccircumflex ; B 46 -13 531 890 ;
C -1 ; WX 547 ; N ccircumflex ; B 39 -22 506 689 ;
C -1 ; WX 579 ; N Cdotaccent ; B 46 -13 531 859 ;
C -1 ; WX 547 ; N cdotaccent ; B 39 -22 506 657 ;
C -1 ; WX 579 ; N Ccaron ; B 46 -13 531 918 ;
C -1 ; WX 547 ; N ccaron ; B 39 -22 506 710 ;
C -1 ; WX 622 ; N Dcaron ; B 36 -17 579 924 ;
C -1 ; WX 750 ; N dcaron ; B 40 -26 716 704 ;
C -1 ; WX 623 ; N Dcroat ; B 36 -17 580 713 ;
C -1 ; WX 603 ; N dcroat ; B 40 -26 597 714 ;
C -1 ; WX 638 ; N Emacron ; B 38 -16 587 798 ;
C -1 ; WX 543 ; N emacron ; B 40 -23 501 616 ;
C -1 ; WX 638 ; N Ebreve ; B 38 -16 587 876 ;
C -1 ; WX 543 ; N ebreve ; B 40 -23 501 683 ;
C -1 ; WX 638 ; N Edotaccent ; B 38 -16 587 848 ;
C -1 ; WX 543 ; N edotaccent ; B 40 -23 501 659 ;
C -1 ; WX 638 ; N Eogonek ; B 38 -113 610 691 ;
C -1 ; WX 543 ; N eogonek ; B 40 -145 501 499 ;
C -1 ; WX 638 ; N Ecaron ; B 38 -16 587 913 ;
C -1 ; WX 543 ; N ecaron ; B 40 -23 501 714 ;
C -1 ; WX 615 ; N Gcircumflex ; B 45 -3 586 906 ;
C -1 ; WX 583 ; N gcircumflex ; B 42 -224 562 676 ;
C -1 ; WX 615 ; N Gbreve ; B 45 -3 586 899 ;
C -1 ; WX 583 ; N gbreve ; B 42 -224 562 667 ;
C -1 ; WX 615 ; N Gdotaccent ; B 45 -3 586 871 ;
C -1 ; WX 583 ; N gdotaccent ; B 42 -224 562 637 ;
C -1 ; WX 615 ; N Gcommaaccent ; B 45 -253 586 710 ;
C -1 ; WX 583 ; N gcommaaccent ; B 42 -224 562 734 ;
C -1 ; WX 652 ; N Hcircumflex ; B 40 -20 622 897 ;
C -1 ; WX 616 ; N hcircumflex ; B 5 -29 601 688 ;
C -1 ; WX 652 ; N Hbar ; B 40 -20 622 690 ;
C -1 ; WX 616 ; N hbar ; B 5 -29 601 683 ;
C -1 ; WX 495 ; N Itilde ; B 26 -24 469 859 ;
C -1 ; WX 568 ; N itilde ; B 36 -42 568 615 ;
C -1 ; WX 495 ; N Imacron ; B 26 -24 469 819 ;
C -1 ; WX 568 ; N imacron ; B 36 -42 568 585 ;
C -1 ; WX 495 ; N Ibreve ; B 26 -24 469 901 ;
C -1 ; WX 568 ; N ibreve ; B 36 -42 568 661 ;
C -1 ; WX 495 ; N Iogonek ; B 26 -154 469 710 ;
C -1 ; WX 568 ; N iogonek ; B 36 -149 568 674 ;
C -1 ; WX 495 ; N Idotaccent ; B 26 -24 469 873 ;
C -1 ; WX 568 ; N dotlessi ; B 36 -42 568 468 ;
C -1 ; WX 1036 ; N IJ ; B 26 -24 1034 710 ;
C -1 ; WX 983 ; N ij ; B 36 -236 913 683 ;
C -1 ; WX 541 ; N Jcircumflex ; B 16 -3 539 913 ;
C -1 ; WX 415 ; N jcircumflex ; B -12 -236 405 699 ;
C -1 ; WX 582 ; N Kcommaaccent ; B 28 -253 584 711 ;
C -1 ; WX 620 ; N kcommaaccent ; B 11 -253 600 683 ;
C -1 ; WX 620 ; N kgreenlandic ; B 11 -28 600 482 ;
C -1 ; WX 602 ; N Lacute ; B 23 -14 583 923 ;
C -1 ; WX 540 ; N lacute ; B 4 -28 538 902 ;
C -1 ; WX 602 ; N Lcommaaccent ; B 23 -267 583 718 ;
C -1 ; WX 540 ; N lcommaaccent ; B 4 -267 538 682 ;
C -1 ; WX 602 ; N Lcaron ; B 23 -14 583 794 ;
C -1 ; WX 582 ; N lcaron ; B 4 -28 549 704 ;
C -1 ; WX 781 ; N Ldot ; B 23 -14 748 718 ;
C -1 ; WX 571 ; N ldotaccent ; B 4 -28 538 682 ;
C -1 ; WX 603 ; N Lslash ; B 24 -14 584 718 ;
C -1 ; WX 541 ; N lslash ; B 4 -28 538 682 ;
C -1 ; WX 627 ; N Nacute ; B 41 -15 595 894 ;
C -1 ; WX 632 ; N nacute ; B 32 -23 612 696 ;
C -1 ; WX 627 ; N Ncommaaccent ; B 41 -268 595 700 ;
C -1 ; WX 632 ; N ncommaaccent ; B 32 -268 612 491 ;
C -1 ; WX 627 ; N Ncaron ; B 41 -15 595 900 ;
C -1 ; WX 632 ; N ncaron ; B 32 -23 612 712 ;
C -1 ; WX 815 ; N napostrophe ; B 34 -23 795 704 ;
C -1 ; WX 627 ; N Eng ; B 41 -320 595 700 ;
C -1 ; WX 605 ; N eng ; B 32 -322 534 491 ;
C -1 ; WX 616 ; N Omacron ; B 42 -30 574 815 ;
C -1 ; WX 583 ; N omacron ; B 40 -34 543 598 ;
C -1 ; WX 616 ; N Obreve ; B 42 -30 574 891 ;
C -1 ; WX 583 ; N obreve ; B 40 -34 543 675 ;
C -1 ; WX 616 ; N Ohungarumlaut ; B 42 -30 574 907 ;
C -1 ; WX 583 ; N ohungarumlaut ; B 40 -34 545 693 ;
C -1 ; WX 1018 ; N OE ; B 42 -30 967 702 ;
C -1 ; WX 958 ; N oe ; B 40 -34 916 499 ;
C -1 ; WX 636 ; N Racute ; B 14 -9 624 910 ;
C -1 ; WX 579 ; N racute ; B 28 -16 566 693 ;
C -1 ; WX 636 ; N Rcommaaccent ; B 14 -268 624 706 ;
C -1 ; WX 579 ; N rcommaaccent ; B 28 -272 566 495 ;
C -1 ; WX 636 ; N Rcaron ; B 14 -9 624 927 ;
C -1 ; WX 579 ; N rcaron ; B 28 -16 566 698 ;
C -1 ; WX 588 ; N Sacute ; B 51 -13 547 900 ;
C -1 ; WX 519 ; N sacute ; B 48 -31 481 713 ;
C -1 ; WX 588 ; N Scircumflex ; B 51 -13 547 904 ;
C -1 ; WX 519 ; N scircumflex ; B 48 -31 481 710 ;
C -1 ; WX 588 ; N Scedilla ; B 51 -145 547 690 ;
C -1 ; WX 519 ; N scedilla ; B 48 -145 481 496 ;
C -1 ; WX 588 ; N Scaron ; B 51 -13 547 904 ;
C -1 ; WX 519 ; N scaron ; B 48 -31 481 710 ;
C -1 ; WX 594 ; N Tcommaaccent ; B 25 -263 564 707 ;
C -1 ; WX 510 ; N tcommaaccent ; B 0 -282 488 694 ;
C -1 ; WX 594 ; N Tcaron ; B 25 1 564 920 ;
C -1 ; WX 713 ; N tcaron ; B 0 -34 680 704 ;
C -1 ; WX 594 ; N Tbar ; B 25 1 564 707 ;
C -1 ; WX 510 ; N tbar ; B 0 -34 488 694 ;
C -1 ; WX 621 ; N Utilde ; B 24 -6 611 850 ;
C -1 ; WX 638 ; N utilde ; B 5 -28 624 636 ;
C -1 ; WX 621 ; N Umacron ; B 24 -6 611 811 ;
C -1 ; WX 638 ; N umacron ; B 5 -28 624 587 ;
C -1 ; WX 621 ; N Ubreve ; B 24 -6 611 888 ;
C -1 ; WX 638 ; N ubreve ; B 5 -28 624 665 ;
C -1 ; WX 621 ; N Uring ; B 24 -6 611 959 ;
C -1 ; WX 638 ; N uring ; B 5 -28 624 738 ;
C -1 ; WX 621 ; N Uhungarumlaut ; B 24 -6 611 918 ;
C -1 ; WX 638 ; N uhungarumlaut ; B 5 -28 624 691 ;
C -1 ; WX 621 ; N Uogonek ; B 24 -136 611 710 ;
C -1 ; WX 638 ; N uogonek ; B 5 -147 671 487 ;
C -1 ; WX 643 ; N Wcircumflex ; B 8 0 614 901 ;
C -1 ; WX 678 ; N wcircumflex ; B 5 -10 674 685 ;
C -1 ; WX 561 ; N Ycircumflex ; B -21 -2 562 934 ;
C -1 ; WX 592 ; N ycircumflex ; B 0 -232 596 691 ;
C -1 ; WX 561 ; N Ydieresis ; B -21 -2 562 885 ;
C -1 ; WX 592 ; N Zacute ; B 49 -1 551 905 ;
C -1 ; WX 528 ; N zacute ; B 45 -22 487 684 ;
C -1 ; WX 592 ; N Zdotaccent ; B 49 -1 551 866 ;
C -1 ; WX 528 ; N zdotaccent ; B 45 -22 487 632 ;
C -1 ; WX 592 ; N Zcaron ; B 49 -1 551 917 ;
C -1 ; WX 528 ; N zcaron ; B 45 -22 487 688 ;
C -1 ; WX 915 ; N AEacute ; B -11 -16 864 904 ;
C -1 ; WX 888 ; N aeacute ; B 38 -23 846 670 ;
C -1 ; WX 617 ; N Oslashacute ; B 43 -41 574 912 ;
C -1 ; WX 583 ; N oslashacute ; B 40 -73 543 697 ;
C -1 ; WX 415 ; N dotlessj ; B -12 -236 344 478 ;
C -1 ; WX 281 ; N circumflex ; B 0 558 282 746 ;
C -1 ; WX 281 ; N caron ; B 0 558 282 746 ;
C -1 ; WX 281 ; N breve ; B 0 585 282 746 ;
C -1 ; WX 132 ; N dotaccent ; B 0 600 133 729 ;
C -1 ; WX 214 ; N ring ; B 0 547 215 780 ;
C -1 ; WX 211 ; N ogonek ; B 0 -145 212 13 ;
C -1 ; WX 283 ; N tilde ; B 0 583 284 701 ;
C -1 ; WX 352 ; N hungarumlaut ; B 0 591 353 763 ;
C -1 ; WX 185 ; N uni0312 ; B 28 474 152 694 ;
C -1 ; WX 185 ; N uni0315 ; B 38 470 162 690 ;
C -1 ; WX 192 ; N uni0326 ; B 32 -253 156 -33 ;
C -1 ; WX 666 ; N mu ; B 24 -219 643 487 ;
C -1 ; WX 643 ; N Wgrave ; B 8 0 614 895 ;
C -1 ; WX 678 ; N wgrave ; B 5 -10 674 688 ;
C -1 ; WX 643 ; N Wacute ; B 8 0 614 898 ;
C -1 ; WX 678 ; N wacute ; B 5 -10 674 682 ;
C -1 ; WX 643 ; N Wdieresis ; B 8 0 614 868 ;
C -1 ; WX 678 ; N wdieresis ; B 5 -10 674 649 ;
C -1 ; WX 561 ; N Ygrave ; B -21 -2 562 900 ;
C -1 ; WX 592 ; N ygrave ; B 0 -232 596 666 ;
C -1 ; WX 611 ; N endash ; B 50 270 551 391 ;
C -1 ; WX 1113 ; N emdash ; B 51 270 1052 391 ;
C -1 ; WX 265 ; N quoteleft ; B 41 390 217 704 ;
C -1 ; WX 264 ; N quoteright ; B 54 390 230 704 ;
C -1 ; WX 274 ; N quotesinglbase ; B 46 -138 223 176 ;
C -1 ; WX 470 ; N quotedblleft ; B 41 390 422 704 ;
C -1 ; WX 469 ; N quotedblright ; B 54 390 436 704 ;
C -1 ; WX 479 ; N quotedblbase ; B 46 -138 428 176 ;
C -1 ; WX 389 ; N dagger ; B 30 -16 359 724 ;
C -1 ; WX 396 ; N daggerdbl ; B 35 -16 364 728 ;
C -1 ; WX 316 ; N bullet ; B 50 246 266 479 ;
C -1 ; WX 1063 ; N ellipsis ; B 52 -3 1016 245 ;
C -1 ; WX 897 ; N perthousand ; B 33 -230 873 828 ;
C -1 ; WX 296 ; N guilsinglleft ; B 44 149 232 434 ;
C -1 ; WX 295 ; N guilsinglright ; B 63 149 251 434 ;
C -1 ; WX 486 ; N fraction ; B -11 -53 501 748 ;
C -1 ; WX 732 ; N Euro ; B 31 71 683 590 ;
C -1 ; WX 757 ; N trademark ; B 60 303 703 693 ;
C -1 ; WX 585 ; N partialdiff ; B 36 -47 553 772 ;
C -1 ; WX 564 ; N product ; B 26 -17 534 707 ;
C -1 ; WX 577 ; N minus ; B 63 282 514 395 ;
C -1 ; WX 565 ; N approxequal ; B 59 137 513 522 ;
C -1 ; WX 593 ; N notequal ; B 44 71 554 644 ;
C -1 ; WX 1041 ; N fi ; B 20 -42 1041 702 ;
C -1 ; WX 1013 ; N fl ; B 20 -29 1011 702 ;
C -1 ; WX 292 ; N .notdef ; B 0 0 0 0 ;
C -1 ; WX 0 ; N .null ; B 0 0 0 0 ;
C -1 ; WX 292 ; N nonmarkingreturn ; B 0 0 0 0 ;
EndCharMetrics
StartKernData
StartKernPairs 6408
KPX quotedbl period -104
KPX quotedbl comma -103
KPX quotedbl Jcircumflex -34
KPX quotedbl Aogonek -31
KPX quotedbl Abreve -31
KPX quotedbl Amacron -31
KPX quotedbl AEacute -31
KPX quotedbl Aacute -31
KPX quotedbl Acircumflex -31
KPX quotedbl Atilde -31
KPX quotedbl Agrave -31
KPX quotedbl Aring -31
KPX quotedbl Adieresis -31
KPX quotedbl AE -31
KPX quotedbl J -34
KPX quotedbl A -31
KPX quotedbl quotedblbase -117
KPX quotedbl quotesinglbase -117
KPX quotedbl ellipsis -104
KPX quotedbl slash -73
KPX quotedbl ampersand -22
KPX quotedbl four -27
KPX ampersand Ycircumflex -40
KPX ampersand Ygrave -40
KPX ampersand Ydieresis -40
KPX ampersand Yacute -40
KPX ampersand Y -40
KPX ampersand V -36
KPX quotesingle period -97
KPX quotesingle comma -97
KPX quotesingle Jcircumflex -34
KPX quotesingle Aogonek -31
KPX quotesingle Abreve -31
KPX quotesingle Amacron -31
KPX hyphen T -28
KPX hyphen one -68
KPX hyphen B -25
KPX hyphen seven -56
KPX slash rcommaaccent -27
KPX slash ncommaaccent -29
KPX slash gcommaaccent -61
KPX slash Jcircumflex -29
KPX slash iogonek -26
KPX slash ibreve -26
KPX slash imacron -26
KPX slash itilde -26
KPX slash oslashacute -54
KPX slash nacute -29
KPX slash eng -29
KPX slash ncaron -29
KPX slash racute -27
KPX slash scedilla -43
KPX slash scircumflex -43
KPX slash sacute -43
KPX slash rcaron -27
KPX slash ohungarumlaut -54
KPX slash obreve -54
KPX slash omacron -54
KPX slash wgrave -23
KPX slash wcircumflex -23
KPX slash wdieresis -23
KPX slash wacute -23
KPX slash zdotaccent -41
KPX J ebreve -32
KPX J emacron -32
KPX J edieresis -32
KPX J ecircumflex -32
KPX J egrave -32
KPX J eacute -32
KPX J e -32
KPX J Aogonek -34
KPX J Abreve -34
KPX J Amacron -34
KPX J AEacute -34
KPX J Aacute -34
KPX J Acircumflex -34
KPX J Atilde -34
KPX J Agrave -34
KPX J Aring -34
KPX J Adieresis -34
KPX J AE -34
KPX J A -34
KPX J comma -29
KPX J period -30
KPX J v -29
KPX J hyphen -30
KPX J quotedblbase -34
KPX J quotesinglbase -34
KPX J guilsinglright -25
KPX J guilsinglleft -25
KPX J emdash -30
KPX J endash -30
KPX J guillemotright -25
KPX J guillemotleft -25
KPX J germandbls -36
KPX J ellipsis -30
KPX J slash -34
KPX J p -28
KPX J m -35
KPX J b 54
KPX K ycircumflex -60
KPX K ygrave -60
KPX K ydieresis -60
KPX K yacute -60
KPX K y -60
KPX K wgrave -36
KPX K wcircumflex -36
KPX K wdieresis -36
KPX K wacute -36
KPX K w -36
KPX K uogonek -25
KPX K uhungarumlaut -25
KPX K uring -25
KPX K ubreve -25
KPX K umacron -25
KPX K utilde -25
KPX K udieresis -25
KPX K ucircumflex -25
KPX K ugrave -25
KPX K uacute -25
KPX K u -25
KPX K q -23
KPX K oslashacute -28
KPX K ohungarumlaut -28
KPX K obreve -28
KPX K omacron -28
KPX K otilde -28
KPX K odieresis -28
KPX K ocircumflex -28
KPX K ograve -28
KPX K oacute -28
KPX K eth -28
KPX K oe -28
KPX K oslash -28
KPX K o -28
KPX K dcaron -24
KPX K d -24
KPX K ccaron -27
KPX K cdotaccent -27
KPX K ccircumflex -27
KPX K cacute -27
KPX K ccedilla -27
KPX K c -27
KPX K ecaron -27
KPX K eogonek -27
KPX K edotaccent -27
KPX K ebreve -27
KPX K emacron -27
KPX K edieresis -27
KPX K ecircumflex -27
KPX K egrave -27
KPX K eacute -27
KPX K e -27
KPX K v -49
KPX K hyphen -38
KPX K guilsinglleft -24
KPX K emdash -38
KPX K endash -38
KPX K guillemotleft -24
KPX K b 49
KPX L ycircumflex -36
KPX L ygrave -36
KPX L ydieresis -36
KPX L yacute -36
KPX L y -36
KPX L wgrave -23
KPX L wcircumflex -23
KPX L wdieresis -23
KPX L wacute -23
KPX L w -23
KPX L V -43
KPX L Tcommaaccent -36
KPX L Tbar -36
KPX L Tcaron -36
KPX L T -36
KPX L quoteright -49
KPX L v -32
KPX L quoteleft -54
KPX L quotedblright -49
KPX L quotedblleft -54
KPX L trademark -29
KPX L backslash -50
KPX L asterisk -30
KPX trademark Aring -24
KPX trademark Adieresis -24
KPX trademark Yacute 29
KPX trademark AE -24
KPX trademark Y 29
KPX trademark A -24
KPX trademark b 31
EndKernPairs
EndKernData
EndFontMetrics

View File

@@ -0,0 +1,23 @@
StartFontMetrics 2.0
Comment Generated by FontForge 20170719
Comment Creation Date: Sun Jul 23 23:14:02 2017
FontName Greek_Lambda_Character-Regular
FullName Greek_Lambda_Character Regular
FamilyName Greek_Lambda_Character
Weight Regular
Notice (NONE. NADA. PUBLIC DOMAIN, BOI)
ItalicAngle 0
IsFixedPitch false
UnderlinePosition -175
UnderlineThickness 90
Version 020.017
EncodingScheme ISO10646-1
FontBBox 33 -177 566 760
StartCharMetrics 5
C 13 ; WX 602 ; N uni000D ; B 0 0 0 0 ;
C 32 ; WX 602 ; N space ; B 0 0 0 0 ;
C -1 ; WX 602 ; N lambda ; B 33 0 566 760 ;
C -1 ; WX 602 ; N .notdef ; B 50 -177 551 706 ;
C -1 ; WX 0 ; N NULL ; B 0 0 0 0 ;
EndCharMetrics
EndFontMetrics

View File

@@ -0,0 +1,77 @@
/*
* This is a sample script.
*/
#include "BotManagerInterface.acs"
BotManager::BotManager g_BotManager( @CreateDumbBot );
CConCommand@ m_pAddBot;
void PluginInit()
{
g_BotManager.PluginInit();
@m_pAddBot = @CConCommand( "addbot", "Adds a new bot with the given name", @AddBotCallback );
}
void AddBotCallback( const CCommand@ args )
{
if( args.ArgC() < 2 )
{
g_Game.AlertMessage( at_console, "Usage: addbot <name>" );
return;
}
BotManager::BaseBot@ pBot = g_BotManager.CreateBot( args[ 1 ] );
if( pBot !is null )
{
g_Game.AlertMessage( at_console, "Created bot " + args[ 1 ] + "\n" );
}
else
{
g_Game.AlertMessage( at_console, "Could not create bot\n" );
}
}
final class DumbBot : BotManager::BaseBot
{
DumbBot( CBasePlayer@ pPlayer )
{
super( pPlayer );
}
void Think()
{
BotManager::BaseBot::Think();
// If the bot is dead and can be respawned, send a button press
if( Player.pev.deadflag >= DEAD_RESPAWNABLE )
{
Player.pev.button |= IN_ATTACK;
}
else
Player.pev.button &= ~IN_ATTACK;
KeyValueBuffer@ pInfoBuffer = g_EngineFuncs.GetInfoKeyBuffer( Player.edict() );
pInfoBuffer.SetValue( "topcolor", Math.RandomLong( 0, 255 ) );
pInfoBuffer.SetValue( "bottomcolor", Math.RandomLong( 0, 255 ) );
if( Math.RandomLong( 0, 100 ) > 10 )
Player.pev.button |= IN_ATTACK;
else
Player.pev.button &= ~IN_ATTACK;
for( uint uiIndex = 0; uiIndex < 3; ++uiIndex )
{
m_vecVelocity[ uiIndex ] = Math.RandomLong( -50, 50 );
}
}
}
BotManager::BaseBot@ CreateDumbBot( CBasePlayer@ pPlayer )
{
return @DumbBot( pPlayer );
}

View File

@@ -0,0 +1,396 @@
// Sample script.
// Source: https://github.com/codecat/ssbd-payload
array<WorldScript::PayloadBeginTrigger@> g_payloadBeginTriggers;
array<WorldScript::PayloadTeamForcefield@> g_teamForceFields;
[GameMode]
class Payload : TeamVersusGameMode
{
[Editable]
UnitFeed PayloadUnit;
[Editable]
UnitFeed FirstNode;
[Editable default=10]
int PrepareTime;
[Editable default=300]
int TimeLimit;
[Editable default=90]
int TimeAddCheckpoint;
[Editable default=2]
float TimeOvertime;
[Editable default=1000]
int TimePayloadHeal;
[Editable default=1]
int PayloadHeal;
PayloadBehavior@ m_payload;
int m_tmStarting;
int m_tmStarted;
int m_tmLimitCustom;
int m_tmOvertime;
int m_tmInOvertime;
PayloadHUD@ m_payloadHUD;
PayloadClassSwitchWindow@ m_switchClass;
array<SValue@>@ m_switchedSidesData;
Payload(Scene@ scene)
{
super(scene);
m_tmRespawnCountdown = 5000;
@m_payloadHUD = PayloadHUD(m_guiBuilder);
@m_switchTeam = PayloadTeamSwitchWindow(m_guiBuilder);
@m_switchClass = PayloadClassSwitchWindow(m_guiBuilder);
}
void UpdateFrame(int ms, GameInput& gameInput, MenuInput& menuInput) override
{
TeamVersusGameMode::UpdateFrame(ms, gameInput, menuInput);
m_payloadHUD.Update(ms);
if (Network::IsServer())
{
uint64 tmNow = CurrPlaytimeLevel();
if (m_tmStarting == 0)
{
if (GetPlayersInTeam(0) > 0 && GetPlayersInTeam(1) > 0)
{
m_tmStarting = tmNow;
(Network::Message("GameStarting") << m_tmStarting).SendToAll();
}
}
if (m_tmStarting > 0 && m_tmStarted == 0 && tmNow - m_tmStarting > PrepareTime * 1000)
{
m_tmStarted = tmNow;
(Network::Message("GameStarted") << m_tmStarted).SendToAll();
for (uint i = 0; i < g_payloadBeginTriggers.length(); i++)
{
WorldScript@ ws = WorldScript::GetWorldScript(g_scene, g_payloadBeginTriggers[i]);
ws.Execute();
}
}
}
if (!m_ended && m_tmStarted > 0)
CheckTimeReached(ms);
}
string NameForTeam(int index) override
{
if (index == 0)
return "Defenders";
else if (index == 1)
return "Attackers";
return "Unknown";
}
void CheckTimeReached(int dt)
{
// Check if time limit is not reached yet
if (m_tmLimitCustom - (CurrPlaytimeLevel() - m_tmStarted) > 0)
{
// Don't need to continue checking
m_tmOvertime = 0;
m_tmInOvertime = 0;
return;
}
// Count how long we're in overtime for later time limit fixing when we reach a checkpoint
if (m_tmOvertime > 0)
m_tmInOvertime += dt;
// Check if there are any attackers still inside
if (m_payload.AttackersInside() > 0)
{
// We have overtime
m_tmOvertime = int(TimeOvertime * 1000);
return;
}
// If we have overtime
if (m_tmOvertime > 0)
{
// Decrease timer
m_tmOvertime -= dt;
if (m_tmOvertime <= 0)
{
// Overtime countdown reached, time limit reached
TimeReached();
}
}
else
{
// No overtime, so time limit is reached
TimeReached();
}
}
void TimeReached()
{
if (!Network::IsServer())
return;
(Network::Message("TimeReached")).SendToAll();
SetWinner(false);
}
bool ShouldFreezeControls() override
{
return m_switchClass.m_visible
|| TeamVersusGameMode::ShouldFreezeControls();
}
bool ShouldDisplayCursor() override
{
return m_switchClass.m_visible
|| TeamVersusGameMode::ShouldDisplayCursor();
}
bool CanSwitchTeams() override
{
return m_tmStarted == 0;
}
PlayerRecord@ CreatePlayerRecord() override
{
return PayloadPlayerRecord();
}
int GetPlayerClassCount(PlayerClass playerClass, TeamVersusScore@ team)
{
if (team is null)
return 0;
int ret = 0;
for (uint i = 0; i < team.m_players.length(); i++)
{
if (team.m_players[i].peer == 255)
continue;
auto record = cast<PayloadPlayerRecord>(team.m_players[i]);
if (record.playerClass == playerClass)
ret++;
}
return ret;
}
void PlayerClassesUpdated()
{
m_switchClass.PlayerClassesUpdated();
}
void SetWinner(bool attackers)
{
if (attackers)
print("Attackers win!");
else
print("Defenders win!");
m_payloadHUD.Winner(attackers);
EndMatch();
}
void DisplayPlayerName(int idt, SpriteBatch& sb, PlayerRecord@ record, PlayerHusk@ plr, vec2 pos) override
{
TeamVersusGameMode::DisplayPlayerName(idt, sb, record, plr, pos);
m_payloadHUD.DisplayPlayerName(idt, sb, cast<PayloadPlayerRecord>(record), plr, pos);
}
void RenderFrame(int idt, SpriteBatch& sb) override
{
Player@ player = GetLocalPlayer();
if (player !is null)
{
PlayerHealgun@ healgun = cast<PlayerHealgun>(player.m_currWeapon);
if (healgun !is null)
healgun.RenderMarkers(idt, sb);
}
TeamVersusGameMode::RenderFrame(idt, sb);
}
void RenderWidgets(PlayerRecord@ player, int idt, SpriteBatch& sb) override
{
m_payloadHUD.Draw(sb, idt);
TeamVersusGameMode::RenderWidgets(player, idt, sb);
m_switchClass.Draw(sb, idt);
}
void GoNextMap() override
{
if (m_switchedSidesData !is null)
{
TeamVersusGameMode::GoNextMap();
return;
}
ChangeLevel(GetCurrentLevelFilename());
}
void SpawnPlayers() override
{
if (m_switchedSidesData is null)
{
TeamVersusGameMode::SpawnPlayers();
return;
}
if (Network::IsServer())
{
for (uint i = 0; i < m_switchedSidesData.length(); i += 2)
{
uint peer = uint(m_switchedSidesData[i].GetInteger());
uint team = uint(m_switchedSidesData[i + 1].GetInteger());
TeamVersusScore@ joinScore = FindTeamScore(team);
if (joinScore is m_teamScores[0])
@joinScore = m_teamScores[1];
else
@joinScore = m_teamScores[0];
for (uint j = 0; j < g_players.length(); j++)
{
if (g_players[j].peer != peer)
continue;
SpawnPlayer(j, vec2(), 0, joinScore.m_team);
break;
}
}
}
}
void Save(SValueBuilder& builder) override
{
if (m_switchedSidesData is null)
{
builder.PushArray("teams");
for (uint i = 0; i < g_players.length(); i++)
{
if (g_players[i].peer == 255)
continue;
builder.PushInteger(g_players[i].peer);
builder.PushInteger(g_players[i].team);
}
builder.PopArray();
}
TeamVersusGameMode::Save(builder);
}
void Start(uint8 peer, SValue@ save, StartMode sMode) override
{
if (save !is null)
@m_switchedSidesData = GetParamArray(UnitPtr(), save, "teams", false);
TeamVersusGameMode::Start(peer, save, sMode);
m_tmLimit = 0; // infinite time limit as far as VersusGameMode is concerned
m_tmLimitCustom = TimeLimit * 1000; // 5 minutes by default
@m_payload = cast<PayloadBehavior>(PayloadUnit.FetchFirst().GetScriptBehavior());
if (m_payload is null)
PrintError("PayloadUnit is not a PayloadBehavior!");
UnitPtr unitFirstNode = FirstNode.FetchFirst();
if (unitFirstNode.IsValid())
{
auto node = cast<WorldScript::PayloadNode>(unitFirstNode.GetScriptBehavior());
if (node !is null)
@m_payload.m_targetNode = node;
else
PrintError("First target node is not a PayloadNode script!");
}
else
PrintError("First target node was not set!");
WorldScript::PayloadNode@ prevNode;
float totalDistance = 0.0f;
UnitPtr unitNode = unitFirstNode;
while (unitNode.IsValid())
{
auto node = cast<WorldScript::PayloadNode>(unitNode.GetScriptBehavior());
if (node is null)
break;
unitNode = node.NextNode.FetchFirst();
@node.m_prevNode = prevNode;
@node.m_nextNode = cast<WorldScript::PayloadNode>(unitNode.GetScriptBehavior());
if (prevNode !is null)
totalDistance += dist(prevNode.Position, node.Position);
@prevNode = node;
}
float currDistance = 0.0f;
auto distNode = cast<WorldScript::PayloadNode>(unitFirstNode.GetScriptBehavior());
while (distNode !is null)
{
if (distNode.m_prevNode is null)
distNode.m_locationFactor = 0.0f;
else
{
currDistance += dist(distNode.m_prevNode.Position, distNode.Position);
distNode.m_locationFactor = currDistance / totalDistance;
}
@distNode = distNode.m_nextNode;
}
m_payloadHUD.AddCheckpoints();
}
void SpawnPlayer(int i, vec2 pos = vec2(), int unitId = 0, uint team = 0) override
{
TeamVersusGameMode::SpawnPlayer(i, pos, unitId, team);
PayloadPlayerRecord@ record = cast<PayloadPlayerRecord>(g_players[i]);
record.HandlePlayerClass();
if (g_players[i].local)
{
//TODO: This doesn't work well
bool localAttackers = (team == HashString("player_1"));
for (uint j = 0; j < g_teamForceFields.length(); j++)
{
bool hasCollision = (localAttackers != g_teamForceFields[j].Attackers);
auto units = g_teamForceFields[j].Units.FetchAll();
for (uint k = 0; k < units.length(); k++)
{
PhysicsBody@ body = units[k].GetPhysicsBody();
if (body is null)
{
PrintError("PhysicsBody for unit " + units[k].GetDebugName() + "is null");
continue;
}
body.SetActive(hasCollision);
}
}
}
}
}

View File

@@ -0,0 +1,16 @@
import ballerina.lang.messages;
import ballerina.net.http;
import ballerina.doc;
@doc:Description {value:"By default Ballerina assumes that the service is to be exposed via HTTP/1.1 using the system default port and that all requests coming to the HTTP server will be delivered to this service."}
service<http> helloWorld {
@doc:Description {value:"All resources are invoked with an argument of type message, the built-in reference type representing a network invocation."}
resource sayHello (message m) {
// Creates an empty message.
message response = {};
// A util method that can be used to set string payload.
messages:setStringPayload(response, "Hello, World!");
// Reply keyword sends the response back to the client.
reply response;
}
}

View File

@@ -0,0 +1,6 @@
import ballerina.lang.system;
function main (string[] args) {
system:println("Hello, World!");
}

View File

@@ -0,0 +1,31 @@
import ballerina.lang.system;
function main (string[] args) {
// JSON string value.
json j1 = "Apple";
system:println(j1);
// JSON number value.
json j2 = 5.36;
system:println(j2);
// JSON true value.
json j3 = true;
system:println(j3);
// JSON false value.
json j4 = false;
system:println(j4);
// JSON null value.
json j5 = null;
//JSON Objects.
json j6 = {name:"apple", color:"red", price:j2};
system:println(j6);
//JSON Arrays. They are arrays of any JSON value.
json j7 = [1, false, null, "foo",
{first:"John", last:"Pala"}];
system:println(j7);
}

28
samples/Ballerina/var.bal Normal file
View File

@@ -0,0 +1,28 @@
import ballerina.lang.system;
function divideBy10 (int d) (int, int) {
return d / 10, d % 10;
}
function main (string[] args) {
//Here the variable type is inferred type from the initial value. This is same as "int k = 5";
var k = 5;
system:println(10 + k);
//Here the type of the 'strVar' is 'string'.
var strVar = "Hello!";
system:println(strVar);
//Multiple assignment with 'var' allows you to define the variable then and there.
//Variable type is inferred from the right-hand side.
var q, r = divideBy10(6);
system:println("06/10: " + "quotient=" + q + " " +
"remainder=" + r);
//To ignore a particular return value in a multiple assignment statement, use '_'.
var q1, _ = divideBy10(57);
system:println("57/10: " + "quotient=" + q1);
var _, r1 = divideBy10(9);
system:println("09/10: " + "remainder=" + r1);
}

26
samples/Ballerina/xml.bal Normal file
View File

@@ -0,0 +1,26 @@
import ballerina.lang.system;
function main (string[] args) {
// XML element. Can only have one root element.
xml x1 = xml `<book>The Lost World</book>`;
system:println(x1);
// XML text
xml x2 = xml `Hello, world!`;
system:println(x2);
// XML comment
xml x3 = xml `<!--I am a comment-->`;
system:println(x3);
// XML processing instruction
xml x4 = xml `<?target data?>`;
system:println(x4);
// Multiple XML items can be combined to form a sequence of XML. The resulting sequence is again an XML on its own.
xml x5 = x1 + x2 + x3 + x4;
system:println("\nResulting XML sequence:");
system:println(x5);
}

2
samples/C++/grpc.pb.cc Normal file
View File

@@ -0,0 +1,2 @@
// Generated by the gRPC protobuf plugin.
// If you make any local change, they will be lost.

125
samples/C++/hello.grpc.pb.h Normal file
View File

@@ -0,0 +1,125 @@
// Generated by the gRPC C++ plugin.
// If you make any local change, they will be lost.
// source: hello.proto
#ifndef GRPC_hello_2eproto__INCLUDED
#define GRPC_hello_2eproto__INCLUDED
#include "hello.pb.h"
#include <grpc++/impl/codegen/async_stream.h>
#include <grpc++/impl/codegen/async_unary_call.h>
#include <grpc++/impl/codegen/method_handler_impl.h>
#include <grpc++/impl/codegen/proto_utils.h>
#include <grpc++/impl/codegen/rpc_method.h>
#include <grpc++/impl/codegen/service_type.h>
#include <grpc++/impl/codegen/status.h>
#include <grpc++/impl/codegen/stub_options.h>
#include <grpc++/impl/codegen/sync_stream.h>
namespace grpc {
class CompletionQueue;
class Channel;
class RpcService;
class ServerCompletionQueue;
class ServerContext;
} // namespace grpc
class HelloService final {
public:
class StubInterface {
public:
virtual ~StubInterface() {}
virtual ::grpc::Status SayHello(::grpc::ClientContext* context, const ::HelloRequest& request, ::HelloResponse* response) = 0;
std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::HelloResponse>> AsyncSayHello(::grpc::ClientContext* context, const ::HelloRequest& request, ::grpc::CompletionQueue* cq) {
return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::HelloResponse>>(AsyncSayHelloRaw(context, request, cq));
}
private:
virtual ::grpc::ClientAsyncResponseReaderInterface< ::HelloResponse>* AsyncSayHelloRaw(::grpc::ClientContext* context, const ::HelloRequest& request, ::grpc::CompletionQueue* cq) = 0;
};
class Stub final : public StubInterface {
public:
Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel);
::grpc::Status SayHello(::grpc::ClientContext* context, const ::HelloRequest& request, ::HelloResponse* response) override;
std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::HelloResponse>> AsyncSayHello(::grpc::ClientContext* context, const ::HelloRequest& request, ::grpc::CompletionQueue* cq) {
return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::HelloResponse>>(AsyncSayHelloRaw(context, request, cq));
}
private:
std::shared_ptr< ::grpc::ChannelInterface> channel_;
::grpc::ClientAsyncResponseReader< ::HelloResponse>* AsyncSayHelloRaw(::grpc::ClientContext* context, const ::HelloRequest& request, ::grpc::CompletionQueue* cq) override;
const ::grpc::RpcMethod rpcmethod_SayHello_;
};
static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
class Service : public ::grpc::Service {
public:
Service();
virtual ~Service();
virtual ::grpc::Status SayHello(::grpc::ServerContext* context, const ::HelloRequest* request, ::HelloResponse* response);
};
template <class BaseClass>
class WithAsyncMethod_SayHello : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service *service) {}
public:
WithAsyncMethod_SayHello() {
::grpc::Service::MarkMethodAsync(0);
}
~WithAsyncMethod_SayHello() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
::grpc::Status SayHello(::grpc::ServerContext* context, const ::HelloRequest* request, ::HelloResponse* response) final override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
void RequestSayHello(::grpc::ServerContext* context, ::HelloRequest* request, ::grpc::ServerAsyncResponseWriter< ::HelloResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
}
};
typedef WithAsyncMethod_SayHello<Service > AsyncService;
template <class BaseClass>
class WithGenericMethod_SayHello : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service *service) {}
public:
WithGenericMethod_SayHello() {
::grpc::Service::MarkMethodGeneric(0);
}
~WithGenericMethod_SayHello() override {
BaseClassMustBeDerivedFromService(this);
}
// disable synchronous version of this method
::grpc::Status SayHello(::grpc::ServerContext* context, const ::HelloRequest* request, ::HelloResponse* response) final override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
};
template <class BaseClass>
class WithStreamedUnaryMethod_SayHello : public BaseClass {
private:
void BaseClassMustBeDerivedFromService(const Service *service) {}
public:
WithStreamedUnaryMethod_SayHello() {
::grpc::Service::MarkMethodStreamed(0,
new ::grpc::StreamedUnaryHandler< ::HelloRequest, ::HelloResponse>(std::bind(&WithStreamedUnaryMethod_SayHello<BaseClass>::StreamedSayHello, this, std::placeholders::_1, std::placeholders::_2)));
}
~WithStreamedUnaryMethod_SayHello() override {
BaseClassMustBeDerivedFromService(this);
}
// disable regular version of this method
::grpc::Status SayHello(::grpc::ServerContext* context, const ::HelloRequest* request, ::HelloResponse* response) final override {
abort();
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
}
// replace default version of method with streamed unary
virtual ::grpc::Status StreamedSayHello(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::HelloRequest,::HelloResponse>* server_unary_streamer) = 0;
};
typedef WithStreamedUnaryMethod_SayHello<Service > StreamedUnaryService;
typedef Service SplitStreamedService;
typedef WithStreamedUnaryMethod_SayHello<Service > StreamedService;
};
#endif // GRPC_hello_2eproto__INCLUDED

27
samples/C/asm.h Normal file
View File

@@ -0,0 +1,27 @@
/* CarbonOS System/Kernel
* Copyright 2015-2017 David Aylaian
* Licensed under Apache 2.0: https://github.com/DavidAylaian/CarbonOS/blob/master/LICENSE.md
*/
#ifndef ASM_H
#define ASM_H
#include <stdint.h>
// macros for enabling and disabling interrupts
#define enable() asm("sti");
#define disable() asm("cli");
// inb instruction
uint8_t inb (uint16_t port) {
uint8_t val;
asm volatile ("inb %0, %1" : "=a"(val): "Nd"(port));
return val;
}
// outb instruction
void outb (uint16_t port, uint8_t val) {
asm volatile ("outb %1, %0" : : "a"(val), "Nd"(port));
}
#endif

25
samples/C/cpuid.h Normal file
View File

@@ -0,0 +1,25 @@
#ifndef CPUID_H
#define CPUID_H
#include "misc.h"
static inline void do_cpuid(dword_t *eax, dword_t *ebx, dword_t *ecx, dword_t *edx) {
dword_t leaf = *eax;
switch (leaf) {
case 0:
*eax = 0x01; // we support barely anything
*ebx = 0x756e6547; // Genu
*edx = 0x49656e69; // ineI
*ecx = 0x6c65746e; // ntel
break;
default: // if leaf is too high, use highest supported leaf
case 1:
*eax = 0x0; // say nothing about cpu model number
*ebx = 0x0; // processor number 0, flushes 0 bytes on clflush
*ecx = 0b00000000000000000000000000000000; // we support none of the features in ecx
*edx = 0b00000000000000000000000000000000; // we also support none of the features in edx
break;
}
}
#endif

404
samples/CWeb/sat-life.w Normal file
View File

@@ -0,0 +1,404 @@
\datethis
@*Intro. This program generates clauses for the transition relation
from time $t$ to time $t+1$ in Conway's Game of Life, assuming that
all of the potentially live cells at time $t$ belong to a pattern
that's specified in |stdin|. The pattern is defined by one or more
lines representing rows of cells, where each line has `\..' in a
cell that's guaranteed to be dead at time~$t$, otherwise it has `\.*'.
The time is specified separately as a command-line parameter.
The Boolean variable for cell $(x,y)$ at time $t$ is named by its
so-called ``xty code,'' namely by the decimal value of~$x$, followed
by a code letter for~$t$, followed by the decimal value of~$y$. For
example, if $x=10$ and $y=11$ and $t=0$, the variable that indicates
liveness of the cell is \.{10a11}; and the corresponding variable
for $t=1$ is \.{10b11}.
Up to 19 auxiliary variables are used together with each xty code,
in order to construct clauses that define the successor state.
The names of these variables are obtained by appending one of
the following two-character combinations to the xty code:
\.{A2}, \.{A3}, \.{A4},
\.{B1}, \.{B2}, \.{B3}, \.{B4},
\.{C1}, \.{C2}, \.{C3}, \.{C4},
\.{D1}, \.{D2},
\.{E1}, \.{E2},
\.{F1}, \.{F2},
\.{G1}, \.{G2}.
These variables are derived from the Bailleux--Boufkhad method
of encoding cardinality constraints:
The auxiliary variable \.{A$k$} stands for the condition
``at least $k$ of the eight neighbors are alive.'' Similarly,
\.{B$k$} stands for ``at least $k$ of the first four neighbors
are alive,'' and \.{C$k$} accounts for the other four neighbors.
Codes \.D, \.E, \.F, and~\.G refer to pairs of neighbors.
Thus, for instance, \.{10a11C2} means that at least two of the
last four neighbors of cell $(10,11)$ are alive.
Those auxiliary variables receive values by means of up to 77 clauses per cell.
For example, if $u$ and~$v$ are the neighbors of cell~$z$ that correspond
to a pairing of type~\.D, there are six clauses
$$\bar u d_1,\quad
\bar v d_1,\quad
\bar u\bar v d_2,\quad
u v\bar d_1,\quad
u\bar d_2,\quad
v\bar d_2.$$
The sixteen clauses
$$\displaylines{\hfill
\bar d_1b_1,\quad
\bar e_1b_1,\quad
\bar d_2b_2,\quad
\bar d_1\bar e_1b_2,\quad
\bar e_2b_2,\quad
\bar d_2\bar e_1b_3,\quad
\bar d_1\bar e_2b_3,\quad
\bar d_2\bar e_2b_4,
\hfill\cr\hfill
d_1e_1\bar b_1,\quad
d_1e_2\bar b_2,\quad
d_2e_1\bar b_2,\quad
d_1\bar b_3,\quad
d_2e_2\bar b_3,\quad
e_1\bar b_3,\quad
d_2\bar b_4,\quad
e_2\bar b_4
\hfill}$$
define $b$ variables from $d$'s and $e$'s; and another sixteen
define $c$'s from $f$'s and $g$'s in the same fashion.
A similar set of 21 clauses will define the $a$'s from the $b$'s and $c$'s.
Once the $a$'s are defined, thus essentially counting the
live neighbors of cell $z$, the next
state~$z'$ is defined by five further clauses
$$\bar a_4\bar z',\quad
a_2\bar z',\quad
a_3z\bar z',\quad
\bar a_3a_4z',\quad
\bar a_2a_4\bar zz'.$$
For example, the last of these states that $z'$ will be true
(i.e., that cell $z$ will be alive at time $t+1$) if
$z$ is alive at time~$t$ and has $\ge2$ live neighbors
but not $\ge4$.
Nearby cells can share auxiliary variables, according to a tricky scheme that
is worked out below. In consequence, the actual number of auxiliary variables
and clauses per cell is reduced from 19 and $77+5$ to 13 and $57+5$,
respectively, except at the boundaries.
@ So here's the overall outline of the program.
@d maxx 50 /* maximum number of lines in the pattern supplied by |stdin| */
@d maxy 50 /* maximum number of columns per line in |stdin| */
@c
#include <stdio.h>
#include <stdlib.h>
char p[maxx+2][maxy+2]; /* is cell $(x,y)$ potentially alive? */
char have_b[maxx+2][maxy+2]; /* did we already generate $b(x,y)$? */
char have_d[maxx+2][maxy+2]; /* did we already generate $d(x,y)$? */
char have_e[maxx+2][maxy+4]; /* did we already generate $e(x,y)$? */
char have_f[maxx+4][maxy+2]; /* did we already generate $f(x-2,y)$? */
int tt; /* time as given on the command line */
int xmax,ymax; /* the number of rows and columns in the input pattern */
int xmin=maxx,ymin=maxy; /* limits in the other direction */
char timecode[]="abcdefghijklmnopqrstuvwxyz"@|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"@|
"!\"#$%&'()*+,-./:;<=>?@@[\\]^_`{|}~"; /* codes for $0\le t\le83$ */
@q$@>
char buf[maxy+2]; /* input buffer */
unsigned int clause[4]; /* clauses are assembled here */
int clauseptr; /* this many literals are in the current clause */
@<Subroutines@>@;
main(int argc,char*argv[]) {
register int j,k,x,y;
@<Process the command line@>;
@<Input the pattern@>;
for (x=xmin-1;x<=xmax+1;x++) for (y=ymin-1;y<=ymax+1;y++) {
@<If cell $(x,y)$ is obviously dead at time $t+1$, |continue|@>;
a(x,y);
zprime(x,y);
}
}
@ @<Process the command line@>=
if (argc!=2 || sscanf(argv[1],"%d",&tt)!=1) {
fprintf(stderr,"Usage: %s t\n",argv[0]);
exit(-1);
}
if (tt<0 || tt>82) {
fprintf(stderr,"The time should be between 0 and 82 (not %d)!\n",tt);
exit(-2);
}
@ @<Input the pattern@>=
for (x=1;;x++) {
if (!fgets(buf,maxy+2,stdin)) break;
if (x>maxx) {
fprintf(stderr,"Sorry, the pattern should have at most %d rows!\n",maxx);
exit(-3);
}
for (y=1;buf[y-1]!='\n';y++) {
if (y>maxy) {
fprintf(stderr,"Sorry, the pattern should have at most %d columns!\n",
maxy);
exit(-4);
}
if (buf[y-1]=='*') {
p[x][y]=1;
if (y>ymax) ymax=y;
if (y<ymin) ymin=y;
if (x>xmax) xmax=x;
if (x<xmin) xmin=x;
}@+else if (buf[y-1]!='.') {
fprintf(stderr,"Unexpected character `%c' found in the pattern!\n",
buf[y-1]);
exit(-5);
}
}
}
@ @d pp(xx,yy) ((xx)>=0 && (yy)>=0? p[xx][yy]: 0)
@<If cell $(x,y)$ is obviously dead at time $t+1$, |continue|@>=
if (pp(x-1,y-1)+pp(x-1,y)+pp(x-1,y+1)+
pp(x,y-1)+p[x][y]+p[x][y+1]+
pp(x+1,y-1)+p[x+1][y]+p[x+1][y+1]<3) continue;
@ Clauses are assembled in the |clause| array (surprise), where we
put encoded literals.
The code for a literal is an unsigned 32-bit quantity, where the leading
bit is 1 if the literal should be complemented. The next three bits
specify the type of the literal (0 thru 7 for plain and \.A--\.G);
the next three bits specify an integer~$k$; and the next bit is zero.
That leaves room for two 12-bit fields, which specify $x$ and $y$.
Type 0 literals have $k=0$ for the ordinary xty code. However, the
value $k=1$ indicates that the time code should be for $t+1$ instead of~$t$.
And $k=2$ denotes a special ``tautology'' literal, which is always true.
If the tautology literal is complemented, we omit it from the clause;
otherwise we omit the entire clause.
Finally, $k=7$ denotes an auxiliary literal, used to avoid
clauses of length~4.
Here's a subroutine that outputs the current clause and resets
the |clause| array.
@d taut (2<<25)
@d sign (1U<<31)
@<Sub...@>=
void outclause(void) {
register int c,k,x,y,p;
for (p=0;p<clauseptr;p++)
if (clause[p]==taut) goto done;
for (p=0;p<clauseptr;p++) if (clause[p]!=taut+sign) {
if (clause[p]>>31) printf(" ~");@+else printf(" ");
c=(clause[p]>>28)&0x7;
k=(clause[p]>>25)&0x7;
x=(clause[p]>>12)&0xfff;
y=clause[p]&0xfff;
if (c) printf("%d%c%d%c%d",
x,timecode[tt],y,c+'@@',k);
else if (k==7) printf("%d%c%dx",
x,timecode[tt],y);
else printf("%d%c%d",
x,timecode[tt+k],y);
}
printf("\n");
done: clauseptr=0;
}
@ And here's another, which puts a type-0 literal into |clause|.
@<Sub...@>=
void applit(int x,int y,int bar,int k) {
if (k==0 && (x<xmin || x>xmax || y<ymin || y>ymax || p[x][y]==0))
clause[clauseptr++]=(bar? 0: sign)+taut;
else clause[clauseptr++]=(bar? sign:0)+(k<<25)+(x<<12)+y;
}
@ The |d| and |e| subroutines are called for only one-fourth
of all cell addresses $(x,y)$. Indeed, one can show that
$x$ is always odd, and that $y\bmod4<2$.
Therefore we remember if we've seen $(x,y)$ before.
Slight trick: If |yy| is not in range, we avoid generating the
clause $\bar d_k$ twice.
@d newlit(x,y,c,k) clause[clauseptr++]=((c)<<28)+((k)<<25)+((x)<<12)+(y)
@d newcomplit(x,y,c,k)
clause[clauseptr++]=sign+((c)<<28)+((k)<<25)+((x)<<12)+(y)
@<Sub...@>=
void d(int x,int y) {
register x1=x-1,x2=x,yy=y+1;
if (have_d[x][y]!=tt+1) {
applit(x1,yy,1,0),newlit(x,y,4,1),outclause();
applit(x2,yy,1,0),newlit(x,y,4,1),outclause();
applit(x1,yy,1,0),applit(x2,yy,1,0),newlit(x,y,4,2),outclause();
applit(x1,yy,0,0),applit(x2,yy,0,0),newcomplit(x,y,4,1),outclause();
applit(x1,yy,0,0),newcomplit(x,y,4,2),outclause();
if (yy>=ymin && yy<=ymax)
applit(x2,yy,0,0),newcomplit(x,y,4,2),outclause();
have_d[x][y]=tt+1;
}
}
@#
void e(int x,int y) {
register x1=x-1,x2=x,yy=y-1;
if (have_e[x][y]!=tt+1) {
applit(x1,yy,1,0),newlit(x,y,5,1),outclause();
applit(x2,yy,1,0),newlit(x,y,5,1),outclause();
applit(x1,yy,1,0),applit(x2,yy,1,0),newlit(x,y,5,2),outclause();
applit(x1,yy,0,0),applit(x2,yy,0,0),newcomplit(x,y,5,1),outclause();
applit(x1,yy,0,0),newcomplit(x,y,5,2),outclause();
if (yy>=ymin && yy<=ymax)
applit(x2,yy,0,0),newcomplit(x,y,5,2),outclause();
have_e[x][y]=tt+1;
}
}
@ The |f| subroutine can't be shared quite so often. But we
do save a factor of~2, because $x+y$ is always even.
@<Sub...@>=
void f(int x,int y) {
register xx=x-1,y1=y,y2=y+1;
if (have_f[x][y]!=tt+1) {
applit(xx,y1,1,0),newlit(x,y,6,1),outclause();
applit(xx,y2,1,0),newlit(x,y,6,1),outclause();
applit(xx,y1,1,0),applit(xx,y2,1,0),newlit(x,y,6,2),outclause();
applit(xx,y1,0,0),applit(xx,y2,0,0),newcomplit(x,y,6,1),outclause();
applit(xx,y1,0,0),newcomplit(x,y,6,2),outclause();
if (xx>=xmin && xx<=xmax)
applit(xx,y2,0,0),newcomplit(x,y,6,2),outclause();
have_f[x][y]=tt+1;
}
}
@ The |g| subroutine cleans up the dregs, by somewhat tediously
locating the two neighbors that weren't handled by |d|, |e|, or~|f|.
No sharing is possible here.
@<Sub...@>=
void g(int x,int y) {
register x1,x2,y1,y2;
if (x&1) x1=x-1,y1=y,x2=x+1,y2=y^1;
else x1=x+1,y1=y,x2=x-1,y2=y-1+((y&1)<<1);
applit(x1,y1,1,0),newlit(x,y,7,1),outclause();
applit(x2,y2,1,0),newlit(x,y,7,1),outclause();
applit(x1,y1,1,0),applit(x2,y2,1,0),newlit(x,y,7,2),outclause();
applit(x1,y1,0,0),applit(x2,y2,0,0),newcomplit(x,y,7,1),outclause();
applit(x1,y1,0,0),newcomplit(x,y,7,2),outclause();
applit(x2,y2,0,0),newcomplit(x,y,7,2),outclause();
}
@ Fortunately the |b| subroutine {\it can\/} be shared (since |x| is always
odd), thus saving half of the sixteen clauses generated.
@<Sub...@>=
void b(int x,int y) {
register j,k,xx=x,y1=y-(y&2),y2=y+(y&2);
if (have_b[x][y]!=tt+1) {
d(xx,y1);
e(xx,y2);
for (j=0;j<3;j++) for (k=0;k<3;k++) if (j+k) {
if (j) newcomplit(xx,y1,4,j); /* $\bar d_j$ */
if (k) newcomplit(xx,y2,5,k); /* $\bar e_k$ */
newlit(x,y,2,j+k); /* $b_{j+k}$ */
outclause();
if (j) newlit(xx,y1,4,3-j); /* $d_{3-j}$ */
if (k) newlit(xx,y2,5,3-k); /* $e_{3-k}$ */
newcomplit(x,y,2,5-j-k); /* $\bar b_{5-j-k}$ */
outclause();
}
have_b[x][y]=tt+1;
}
}
@ The (unshared) |c| subroutine handles the other four neighbors,
by working with |f| and |g| instead of |d| and~|e|.
If |y=0|, the overlap rules set |y1=-1|, which can be problematic.
I've decided to avoid this case by omitting |f| when it is
guaranteed to be zero.
@<Sub...@>=
void c(int x,int y) {
register j,k,x1,y1;
if (x&1) x1=x+2,y1=(y-1)|1;
else x1=x,y1=y&-2;
g(x,y);
if (x1-1<xmin || x1-1>xmax || y1+1<ymin || y1>ymax)
@<Set |c| equal to |g|@>@;
else {
f(x1,y1);
for (j=0;j<3;j++) for (k=0;k<3;k++) if (j+k) {
if (j) newcomplit(x1,y1,6,j); /* $\bar f_j$ */
if (k) newcomplit(x,y,7,k); /* $\bar g_k$ */
newlit(x,y,3,j+k); /* $c_{j+k}$ */
outclause();
if (j) newlit(x1,y1,6,3-j); /* $f_{3-j}$ */
if (k) newlit(x,y,7,3-k); /* $g_{3-k}$ */
newcomplit(x,y,3,5-j-k); /* $\bar c_{5-j-k}$ */
outclause();
}
}
}
@ @<Set |c| equal to |g|@>=
{
for (k=1;k<3;k++) {
newcomplit(x,y,7,k),newlit(x,y,3,k),outclause(); /* $\bar g_k\lor c_k$ */
newlit(x,y,7,k),newcomplit(x,y,3,k),outclause(); /* $g_k\lor\bar c_k$ */
}
newcomplit(x,y,3,3),outclause(); /* $\bar c_3$ */
newcomplit(x,y,3,4),outclause(); /* $\bar c_4$ */
}
@ Totals over all eight neighbors are then deduced by the |a|
subroutine.
@<Sub...@>=
void a(int x,int y) {
register j,k,xx=x|1;
b(xx,y);
c(x,y);
for (j=0;j<5;j++) for (k=0;k<5;k++) if (j+k>1 && j+k<5) {
if (j) newcomplit(xx,y,2,j); /* $\bar b_j$ */
if (k) newcomplit(x,y,3,k); /* $\bar c_k$ */
newlit(x,y,1,j+k); /* $a_{j+k}$ */
outclause();
}
for (j=0;j<5;j++) for (k=0;k<5;k++) if (j+k>2 && j+k<6 && j*k) {
if (j) newlit(xx,y,2,j); /* $b_j$ */
if (k) newlit(x,y,3,k); /* $c_k$ */
newcomplit(x,y,1,j+k-1); /* $\bar a_{j+k-1}$ */
outclause();
}
}
@ Finally, as mentioned at the beginning, $z'$ is determined
from $z$, $a_2$, $a_3$, and $a_4$.
I actually generate six clauses, not five, in order to stick to
{\mc 3SAT}.
@<Sub...@>=
void zprime(int x,int y) {
newcomplit(x,y,1,4),applit(x,y,1,1),outclause(); /* $\bar a_4\bar z'$ */
newlit(x,y,1,2),applit(x,y,1,1),outclause(); /* $a_2\bar z'$ */
newlit(x,y,1,3),applit(x,y,0,0),applit(x,y,1,1),outclause();
/* $a_3z\bar z'$ */
newcomplit(x,y,1,3),newlit(x,y,1,4),applit(x,y,0,1),outclause();
/* $\bar a_3a_4z'$ */
applit(x,y,0,7),newcomplit(x,y,1,2),newlit(x,y,1,4),outclause();
/* $x\bar a_2a_4$ */
applit(x,y,1,7),applit(x,y,1,0),applit(x,y,0,1),outclause();
/* $\bar x\bar zz'$ */
}
@*Index.

View File

@@ -0,0 +1,24 @@
{namespace Exmaple}
/**
* Example
*/
{template .foo}
{@param count: string}
{@param? name: int}
{if isNonnull($name)}
<h1>{$name}</h1>
{/if}
<div class="content">
{switch count}
{case 0}
{call Empty.view}
{param count: $count /}
{/call}
{default}
<h2>Wow, so many!</h2>
{/switch}
</div>
{/template}

View File

@@ -0,0 +1,36 @@
#!/usr/bin/env cwl-runner
# Originally from
# https://github.com/Duke-GCB/GGR-cwl/blob/54e897263a702ff1074c8ac814b4bf7205d140dd/utils/trunk-peak-score.cwl
# Released under the MIT License:
# https://github.com/Duke-GCB/GGR-cwl/blob/54e897263a702ff1074c8ac814b4bf7205d140dd/LICENSE
# Converted to CWL v1.0 syntax using
# https://github.com/common-workflow-language/cwl-upgrader
# and polished by Michael R. Crusoe <mrc@commonwl.org>
# All modifications also released under the MIT License
cwlVersion: v1.0
class: CommandLineTool
doc: Trunk scores in ENCODE bed6+4 files
hints:
DockerRequirement:
dockerPull: dukegcb/workflow-utils
inputs:
peaks:
type: File
sep:
type: string
default: \t
outputs:
trunked_scores_peaks:
type: stdout
baseCommand: awk
arguments:
- -F $(inputs.sep)
- BEGIN{OFS=FS}$5>1000{$5=1000}{print}
- $(inputs.peaks.path)
stdout: $(inputs.peaks.nameroot).trunked_scores$(inputs.peaks.nameext)

File diff suppressed because it is too large Load Diff

440
samples/D/aa.d Normal file
View File

@@ -0,0 +1,440 @@
/**
* Implementation of associative arrays.
*
* Copyright: Martin Nowak 2015 -.
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Authors: Martin Nowak
*/
module core.aa;
import core.memory : GC;
private
{
// grow threshold
enum GROW_NUM = 4;
enum GROW_DEN = 5;
// shrink threshold
enum SHRINK_NUM = 1;
enum SHRINK_DEN = 8;
// grow factor
enum GROW_FAC = 4;
// growing the AA doubles it's size, so the shrink threshold must be
// smaller than half the grow threshold to have a hysteresis
static assert(GROW_FAC * SHRINK_NUM * GROW_DEN < GROW_NUM * SHRINK_DEN);
// initial load factor (for literals), mean of both thresholds
enum INIT_NUM = (GROW_DEN * SHRINK_NUM + GROW_NUM * SHRINK_DEN) / 2;
enum INIT_DEN = SHRINK_DEN * GROW_DEN;
// magic hash constants to distinguish empty, deleted, and filled buckets
enum HASH_EMPTY = 0;
enum HASH_DELETED = 0x1;
enum HASH_FILLED_MARK = size_t(1) << 8 * size_t.sizeof - 1;
}
enum INIT_NUM_BUCKETS = 8;
struct AA(Key, Val)
{
this(size_t sz)
{
impl = new Impl(nextpow2(sz));
}
@property bool empty() const pure nothrow @safe @nogc
{
return !length;
}
@property size_t length() const pure nothrow @safe @nogc
{
return impl is null ? 0 : impl.length;
}
void opIndexAssign(Val val, in Key key)
{
// lazily alloc implementation
if (impl is null)
impl = new Impl(INIT_NUM_BUCKETS);
// get hash and bucket for key
immutable hash = calcHash(key);
// found a value => assignment
if (auto p = impl.findSlotLookup(hash, key))
{
p.entry.val = val;
return;
}
auto p = findSlotInsert(hash);
if (p.deleted)
--deleted;
// check load factor and possibly grow
else if (++used * GROW_DEN > dim * GROW_NUM)
{
grow();
p = findSlotInsert(hash);
assert(p.empty);
}
// update search cache and allocate entry
firstUsed = min(firstUsed, cast(uint)(p - buckets.ptr));
p.hash = hash;
p.entry = new Impl.Entry(key, val); // TODO: move
return;
}
ref inout(Val) opIndex(in Key key) inout @trusted
{
auto p = opIn_r(key);
assert(p !is null);
return *p;
}
inout(Val)* opIn_r(in Key key) inout @trusted
{
if (empty)
return null;
immutable hash = calcHash(key);
if (auto p = findSlotLookup(hash, key))
return &p.entry.val;
return null;
}
bool remove(in Key key)
{
if (empty)
return false;
immutable hash = calcHash(key);
if (auto p = findSlotLookup(hash, key))
{
// clear entry
p.hash = HASH_DELETED;
p.entry = null;
++deleted;
if (length * SHRINK_DEN < dim * SHRINK_NUM)
shrink();
return true;
}
return false;
}
Val get(in Key key, lazy Val val)
{
auto p = opIn_r(key);
return p is null ? val : *p;
}
ref Val getOrSet(in Key key, lazy Val val)
{
// lazily alloc implementation
if (impl is null)
impl = new Impl(INIT_NUM_BUCKETS);
// get hash and bucket for key
immutable hash = calcHash(key);
// found a value => assignment
if (auto p = impl.findSlotLookup(hash, key))
return p.entry.val;
auto p = findSlotInsert(hash);
if (p.deleted)
--deleted;
// check load factor and possibly grow
else if (++used * GROW_DEN > dim * GROW_NUM)
{
grow();
p = findSlotInsert(hash);
assert(p.empty);
}
// update search cache and allocate entry
firstUsed = min(firstUsed, cast(uint)(p - buckets.ptr));
p.hash = hash;
p.entry = new Impl.Entry(key, val);
return p.entry.val;
}
/**
Convert the AA to the type of the builtin language AA.
*/
Val[Key] toBuiltinAA() pure nothrow
{
return cast(Val[Key]) _aaFromCoreAA(impl, rtInterface);
}
private:
private this(inout(Impl)* impl) inout
{
this.impl = impl;
}
ref Val getLValue(in Key key)
{
// lazily alloc implementation
if (impl is null)
impl = new Impl(INIT_NUM_BUCKETS);
// get hash and bucket for key
immutable hash = calcHash(key);
// found a value => assignment
if (auto p = impl.findSlotLookup(hash, key))
return p.entry.val;
auto p = findSlotInsert(hash);
if (p.deleted)
--deleted;
// check load factor and possibly grow
else if (++used * GROW_DEN > dim * GROW_NUM)
{
grow();
p = findSlotInsert(hash);
assert(p.empty);
}
// update search cache and allocate entry
firstUsed = min(firstUsed, cast(uint)(p - buckets.ptr));
p.hash = hash;
p.entry = new Impl.Entry(key); // TODO: move
return p.entry.val;
}
static struct Impl
{
this(size_t sz)
{
buckets = allocBuckets(sz);
}
@property size_t length() const pure nothrow @nogc
{
assert(used >= deleted);
return used - deleted;
}
@property size_t dim() const pure nothrow @nogc
{
return buckets.length;
}
@property size_t mask() const pure nothrow @nogc
{
return dim - 1;
}
// find the first slot to insert a value with hash
inout(Bucket)* findSlotInsert(size_t hash) inout pure nothrow @nogc
{
for (size_t i = hash & mask, j = 1;; ++j)
{
if (!buckets[i].filled)
return &buckets[i];
i = (i + j) & mask;
}
}
// lookup a key
inout(Bucket)* findSlotLookup(size_t hash, in Key key) inout
{
for (size_t i = hash & mask, j = 1;; ++j)
{
if (buckets[i].hash == hash && key == buckets[i].entry.key)
return &buckets[i];
else if (buckets[i].empty)
return null;
i = (i + j) & mask;
}
}
void grow()
{
// If there are so many deleted entries, that growing would push us
// below the shrink threshold, we just purge deleted entries instead.
if (length * SHRINK_DEN < GROW_FAC * dim * SHRINK_NUM)
resize(dim);
else
resize(GROW_FAC * dim);
}
void shrink()
{
if (dim > INIT_NUM_BUCKETS)
resize(dim / GROW_FAC);
}
void resize(size_t ndim) pure nothrow
{
auto obuckets = buckets;
buckets = allocBuckets(ndim);
foreach (ref b; obuckets)
if (b.filled)
*findSlotInsert(b.hash) = b;
firstUsed = 0;
used -= deleted;
deleted = 0;
GC.free(obuckets.ptr); // safe to free b/c impossible to reference
}
static struct Entry
{
Key key;
Val val;
}
static struct Bucket
{
size_t hash;
Entry* entry;
@property bool empty() const
{
return hash == HASH_EMPTY;
}
@property bool deleted() const
{
return hash == HASH_DELETED;
}
@property bool filled() const
{
return cast(ptrdiff_t) hash < 0;
}
}
Bucket[] allocBuckets(size_t dim) @trusted pure nothrow
{
enum attr = GC.BlkAttr.NO_INTERIOR;
immutable sz = dim * Bucket.sizeof;
return (cast(Bucket*) GC.calloc(sz, attr))[0 .. dim];
}
Bucket[] buckets;
uint used;
uint deleted;
uint firstUsed;
}
RTInterface* rtInterface()() pure nothrow @nogc
{
static size_t aaLen(in void* pimpl) pure nothrow @nogc
{
auto aa = const(AA)(cast(const(Impl)*) pimpl);
return aa.length;
}
static void* aaGetY(void** pimpl, in void* pkey)
{
auto aa = AA(cast(Impl*)*pimpl);
auto res = &aa.getLValue(*cast(const(Key*)) pkey);
*pimpl = aa.impl; // might have changed
return res;
}
static inout(void)* aaInX(inout void* pimpl, in void* pkey)
{
auto aa = inout(AA)(cast(inout(Impl)*) pimpl);
return aa.opIn_r(*cast(const(Key*)) pkey);
}
static bool aaDelX(void* pimpl, in void* pkey)
{
auto aa = AA(cast(Impl*) pimpl);
return aa.remove(*cast(const(Key*)) pkey);
}
static immutable vtbl = RTInterface(&aaLen, &aaGetY, &aaInX, &aaDelX);
return cast(RTInterface*)&vtbl;
}
static size_t calcHash(in ref Key key)
{
return hashOf(key) | HASH_FILLED_MARK;
}
Impl* impl;
alias impl this;
}
package extern (C) void* _aaFromCoreAA(void* impl, RTInterface* rtIntf) pure nothrow;
private:
struct RTInterface
{
alias AA = void*;
size_t function(in AA aa) pure nothrow @nogc len;
void* function(AA* aa, in void* pkey) getY;
inout(void)* function(inout AA aa, in void* pkey) inX;
bool function(AA aa, in void* pkey) delX;
}
unittest
{
AA!(int, int) aa;
assert(aa.length == 0);
aa[0] = 1;
assert(aa.length == 1 && aa[0] == 1);
aa[1] = 2;
assert(aa.length == 2 && aa[1] == 2);
import core.stdc.stdio;
int[int] rtaa = aa.toBuiltinAA();
assert(rtaa.length == 2);
puts("length");
assert(rtaa[0] == 1);
assert(rtaa[1] == 2);
rtaa[2] = 3;
assert(aa[2] == 3);
}
unittest
{
auto aa = AA!(int, int)(3);
aa[0] = 0;
aa[1] = 1;
aa[2] = 2;
assert(aa.length == 3);
}
//==============================================================================
// Helper functions
//------------------------------------------------------------------------------
size_t nextpow2(in size_t n) pure nothrow @nogc
{
import core.bitop : bsr;
if (n < 2)
return 1;
return size_t(1) << bsr(n - 1) + 1;
}
pure nothrow @nogc unittest
{
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
foreach (const n, const pow2; [1, 1, 2, 4, 4, 8, 8, 8, 8, 16])
assert(nextpow2(n) == pow2);
}
T min(T)(T a, T b) pure nothrow @nogc
{
return a < b ? a : b;
}
T max(T)(T a, T b) pure nothrow @nogc
{
return b < a ? a : b;
}

187
samples/D/arrayops.d Normal file
View File

@@ -0,0 +1,187 @@
/**
* Benchmark for array ops.
*
* Copyright: Copyright Martin Nowak 2016 -.
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Authors: Martin Nowak
*/
import core.cpuid, std.algorithm, std.datetime, std.meta, std.stdio, std.string,
std.range;
float[6] getLatencies(T, string op)()
{
enum N = (64 * (1 << 6) + 64) * T.sizeof;
auto a = Array!T(N), b = Array!T(N), c = Array!T(N);
float[6] latencies = float.max;
foreach (i, ref latency; latencies)
{
auto len = 1 << i;
foreach (_; 1 .. 32)
{
a[] = 24;
b[] = 4;
c[] = 2;
auto sw = StopWatch(AutoStart.yes);
foreach (off; size_t(0) .. size_t(64))
{
off = off * len + off;
enum op = op.replace("const", "2").replace("a",
"a[off .. off + len]").replace("b",
"b[off .. off + len]").replace("c", "c[off .. off + len]");
mixin(op ~ ";");
}
latency = min(latency, sw.peek.nsecs);
}
}
float[6] res = latencies[] / 1024;
return res;
}
float[4] getThroughput(T, string op)()
{
enum N = (40 * 1024 * 1024 + 64 * T.sizeof) / T.sizeof;
auto a = Array!T(N), b = Array!T(N), c = Array!T(N);
float[4] latencies = float.max;
size_t[4] lengths = [
8 * 1024 / T.sizeof, 32 * 1024 / T.sizeof, 512 * 1024 / T.sizeof, 32 * 1024 * 1024 / T
.sizeof
];
foreach (i, ref latency; latencies)
{
auto len = lengths[i] / 64;
foreach (_; 1 .. 4)
{
a[] = 24;
b[] = 4;
c[] = 2;
auto sw = StopWatch(AutoStart.yes);
foreach (off; size_t(0) .. size_t(64))
{
off = off * len + off;
enum op = op.replace("const", "2").replace("a",
"a[off .. off + len]").replace("b",
"b[off .. off + len]").replace("c", "c[off .. off + len]");
mixin(op ~ ";");
}
immutable nsecs = sw.peek.nsecs;
runMasked({latency = min(latency, nsecs);});
}
}
float[4] throughputs = void;
runMasked({throughputs = T.sizeof * lengths[] / latencies[];});
return throughputs;
}
string[] genOps()
{
string[] ops;
foreach (op1; ["+", "-", "*", "/"])
{
ops ~= "a " ~ op1 ~ "= b";
ops ~= "a " ~ op1 ~ "= const";
foreach (op2; ["+", "-", "*", "/"])
{
ops ~= "a " ~ op1 ~ "= b " ~ op2 ~ " c";
ops ~= "a " ~ op1 ~ "= b " ~ op2 ~ " const";
}
}
return ops;
}
void runOp(string op)()
{
foreach (T; AliasSeq!(ubyte, ushort, uint, ulong, byte, short, int, long, float,
double))
writefln("%s, %s, %(%.2f, %), %(%s, %)", T.stringof, op,
getLatencies!(T, op), getThroughput!(T, op));
}
struct Array(T)
{
import core.stdc.stdlib : free, malloc;
this(size_t n)
{
ary = (cast(T*) malloc(T.sizeof * n))[0 .. n];
}
~this()
{
free(ary.ptr);
}
T[] ary;
alias ary this;
}
version (X86)
version = SSE;
else version (X86_64)
version = SSE;
else
static assert(0, "unimplemented");
version (SSE)
{
uint mxcsr()
{
uint ret = void;
asm
{
stmxcsr ret;
}
return ret;
}
void mxcsr(uint val)
{
asm
{
ldmxcsr val;
}
}
// http://softpixel.com/~cwright/programming/simd/sse.php
enum FPU_EXCEPTION_MASKS = 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 7;
enum FPU_EXCEPTION_FLAGS = 1 << 5 | 1 << 4 | 1 << 3 | 1 << 2 | 1 << 1 | 1 << 0;
void maskFPUExceptions()
{
mxcsr = mxcsr | FPU_EXCEPTION_MASKS;
}
void unmaskFPUExceptions()
{
mxcsr = mxcsr & ~FPU_EXCEPTION_MASKS;
}
uint FPUExceptionFlags()
{
return mxcsr & FPU_EXCEPTION_FLAGS;
}
void clearFPUExceptionFlags()
{
mxcsr = mxcsr & ~FPU_EXCEPTION_FLAGS;
}
}
void runMasked(scope void delegate() dg)
{
assert(FPUExceptionFlags == 0);
maskFPUExceptions;
dg();
clearFPUExceptionFlags;
unmaskFPUExceptions;
}
void main()
{
unmaskFPUExceptions;
writefln("type, op, %(latency%s, %), %-(throughput%s, %)", iota(6)
.map!(i => 1 << i), ["8KB", "32KB", "512KB", "32MB"]);
foreach (op; mixin("AliasSeq!(%(%s, %))".format(genOps)))
runOp!op;
maskFPUExceptions;
}

3
samples/D/function.d Normal file
View File

@@ -0,0 +1,3 @@
void foo()
{
}

6
samples/D/hello_world.d Normal file
View File

@@ -0,0 +1,6 @@
import std.stdio;
void main()
{
writeln("Hello World");
}

7
samples/D/template.d Normal file
View File

@@ -0,0 +1,7 @@
template Fib(size_t N)
{
static if (N < 2)
enum Fib = size_t(1);
else
enum Fib = Fib!(N - 2) + Fib!(N - 1);
}

View File

@@ -0,0 +1,3 @@
void bar(T)(T t)
{
}

3
samples/D/unittest1.d Normal file
View File

@@ -0,0 +1,3 @@
unittest
{
}

3
samples/D/unittest2.d Normal file
View File

@@ -0,0 +1,3 @@
unittest("optional name")
{
}

View File

@@ -0,0 +1,12 @@
fun SQL(literals, parts) = ''
---
[
SQL `SELECT * FROM table WHERE id = $(1) AND name = $('a')`,
SQL `$('p')`,
SQL `$('a')$('b')`,
SQL `$('a')---$('b')`,
SQL `---$('a')---$('b')---`,
SQL `$('p')bbb`,
SQL `aaa$('p')`,
SQL `aaa$('p')bbb`
]

View File

@@ -0,0 +1,9 @@
%dw 2.0
var number = 1234
fun foo(func,name="Mariano") = func(name)
input payload application/test arg="value"
output application/json
---
{
foo: "bar"
}

View File

@@ -0,0 +1,27 @@
%dw 2.0
var x=(param1, param2) -> { "$param1": param2 }
var y=(param1, param2 = "c") -> { "$param1": param2 }
var toUser = (user) -> { name: user.name, lastName: user.lastName }
fun z(param1, param2) = { "$param1": param2 }
var a = { name: "Mariano" , toUser: ((param1, param2) -> { "$param1": param2 }) }
var applyFirst = (array, func) -> (func(array[0]) ++ array[1 to -1])
var nested = (array, func) -> (a) -> (b) -> (c) -> array map func(a ++ b ++ c)
fun f2(a1, a2) = ""
fun f3(a1:String, a2:Number):String = a1
fun f4(a1:String, a2:(a:Number) -> Number):String = a1
---
result: {
a: x("a", "b"),
b: y("a"),
c: y("a", "b"),
users: { (in1 map ((user) -> { user: (toUser(user) ++ user) })) },
d: z("a", "b"),
e: a.toUser("name","Mariano"),
f: a.toUser("name","Mariano").name,
f: applyFirst("mariano", (s) -> upper(s) ),
g: [] map (s) -> upper(s),
h: 1 f2 2
}

View File

@@ -0,0 +1,36 @@
%dw 2.0
---
{
"boolean":{
"true" : true,
"false": false
},
"Number": {
"int": 123,
"decimal": 123.23
},
"string": {
"singleQuote" : 'A String',
"doubleQuote" : "A String"
},
"regex": /foo/,
"date": {
a: |2003-10-01|,
b: |2005-045|,
c: |2003-W14-3|,
d: |23:57:59|,
e: |23:57:30.700|,
f: |23:50:30Z|,
g: |+13:00|,
h: |Z|,
i: |-02:00|,
j: |2005-06-02T15:10:16|,
k: |2005-06-02T15:10:16Z|,
l: |2005-06-02T15:10:16+03:00|,
m: |P12Y7M11D|,
n: |P12Y5M|,
o: |P45DT9H20M8S|,
p: |PT9H20M8S|
}
}

View File

@@ -0,0 +1,33 @@
{
// Regex Pattern Matching (Can be named or unnamed)
a: in0.phones map $ match {
case matches /\+(\d+)\s\((\d+)\)\s(\d+\-\d+)/ -> { country: $[0], area: $[1], number: $[2] }
case matches /\((\d+)\)\s(\d+\-\d+)/ -> { area: $[1], number: $[2] }
case phone matches /\((\d+)\)\s(\d+\-\d+)/ -> { area: phone[1], number: phone[2] }
},
// Type Pattern Matching (Can be named or unnamed)
b: in0.object match {
case is Object -> { object: $ }
case is Number -> { number: $ }
// This is how you name variables if needed
case y is Boolean -> { boolean: y }
},
// Literal Pattern Matching (Can be named or unnamed)
c: in0.value match {
case "Emiliano" -> { string: $ }
case 123 -> { number: $ }
// This is how you name variables if needed
case value: "Mariano" -> { name: value }
},
// Boolean Expression Pattern Matching (Always named)
d: in0.value match {
case x if x > 30 -> { biggerThan30: x }
case x if x == 9 -> { nine: x }
},
// Default matches
e: in0.value match {
case "Emiliano" -> "string"
case 3.14 -> number
else -> "1234"
}
}

View File

@@ -0,0 +1,20 @@
# not really (there's an EB_bzip2 easyblock), but fine for use in unit tests
easyblock = 'ConfigureMake'
name = 'bzip2'
version = '1.0.6'
homepage = 'http://www.bzip.org/'
description = """bzip2 is a freely available, patent free, high-quality data compressor. It typically
compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical
compressors), whilst being around twice as fast at compression and six times faster at decompression."""
toolchain = {'name': 'GCC', 'version': '4.9.2'}
toolchainopts = {'pic': True}
sources = [SOURCE_TAR_GZ]
source_urls = ['http://www.bzip.org/%(version)s']
builddependencies = [('gzip', '1.6')]
moduleclass = 'tools'

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,97 @@
/*
* Author: Robert Koeninger
* License: WTFPL (http://www.wtfpl.net/)
*/
class Spelling {
** Load sample text and offer corrections for input
static Void main(Str[] args) {
text := File.os("big.txt").readAllStr
counts := Str:Int[:] { def = 0 }
text.split.each |word| { counts[word] += 1 }
args.each |arg| { echo(correction(counts, arg)) }
}
static const Range letters := Range.makeInclusive(97, 122)
** Most probable spelling correction for `word`.
static Str correction(Str:Int counts, Str word) {
candidates(counts, word).max |x, y| { counts[x] <=> counts[y] }
}
** Generate possible spelling corrections for `word`.
static Str[] candidates(Str:Int counts, Str word) {
result := known(counts, Str[word])
if (result.size > 0) return result
result = known(counts, edits1(word))
if (result.size > 0) return result
result = known(counts, edits2(word))
if (result.size > 0) return result
return Str[word]
}
** The subset of `words` that appear in the map of `counts`.
static Str[] known(Str:Int counts, Str[] words) {
words.findAll |word, i| { counts[word] > 0 }.unique
}
** All edits that are one edit away from `word`.
static Str[] edits1(Str word) {
edits := Str[,]
for (i := 0; i < word.size; ++i) {
edits.add(delete(word, i))
if (i < word.size - 2) {
edits.add(transpose(word, i))
}
edits.addAll(replace(word, i))
edits.addAll(insert(word, i))
}
edits = edits.unique
edits.remove(word)
return edits
}
** Word with `i`th letter removed.
static Str delete(Str word, Int i) {
left := word.getRange(Range.makeExclusive(0, i))
right := word.getRange(Range.makeExclusive(i + 1, word.size))
return left + right
}
** Word with `i`th and `i+1`st letter swapped.
static Str transpose(Str word, Int i) {
left := word.getRange(Range.makeExclusive(0, i))
right := word.getRange(Range.makeExclusive(i, word.size))
first := right.get(0).toChar
second := right.get(1).toChar
rest := right.getRange(Range.makeExclusive(2, right.size))
return left + second + first + rest
}
** Word with `i`th letter replaced with every other letter.
static Str[] replace(Str word, Int i) {
left := word.getRange(Range.makeExclusive(0, i))
right := word.getRange(Range.makeExclusive(i + 1, word.size))
return letters.map |ch| { left + ch.toChar + right }
}
** Word with each letter inserted at `i`.
static Str[] insert(Str word, Int i) {
left := word.getRange(Range.makeExclusive(0, i))
right := word.getRange(Range.makeExclusive(i, word.size))
return letters.map |ch| { left + ch.toChar + right }
}
** All edits that are two edits away from `word`.
static Str[] edits2(Str word) {
(Str[])(edits1(word).map |w| { edits1(w) }.flatten)
}
}

View File

@@ -0,0 +1,50 @@
/*
* Author: Robert Koeninger
* License: WTFPL (http://www.wtfpl.net/)
*/
mixin Expr
{
abstract Obj? eval()
}
class Constant : Expr
{
Obj? value
new make(Obj? value) { this.value = value }
override Obj? eval() { value }
}
enum class Op
{
plus,
minus
}
class Infix : Expr
{
Op op
Expr left
Expr right
new make(Op op, Expr left, Expr right)
{
this.op = op
this.left = left
this.right = right
}
override Obj? eval()
{
switch (op)
{
case Op.plus:
return (Int)left.eval() + (Int)right.eval()
case Op.minus:
return (Int)left.eval() - (Int)right.eval()
default:
throw Err("undefined Op")
}
}
}

161
samples/GLSL/SyLens.shader Normal file
View File

@@ -0,0 +1,161 @@
#version 120
/*
Original Lens Distortion Algorithm from SSontech (Syntheyes)
http://www.ssontech.com/content/lensalg.htm
r2 is radius squared.
r2 = image_aspect*image_aspect*u*u + v*v
f = 1 + r2*(k + kcube*sqrt(r2))
u' = f*u
v' = f*v
*/
// Controls
uniform float kCoeff, kCube, uShift, vShift;
uniform float chroma_red, chroma_green, chroma_blue;
uniform bool apply_disto;
// Uniform inputs
uniform sampler2D input1;
uniform float adsk_input1_w, adsk_input1_h, adsk_input1_aspect, adsk_input1_frameratio;
uniform float adsk_result_w, adsk_result_h;
float distortion_f(float r) {
float f = 1 + (r*r)*(kCoeff + kCube * r);
return f;
}
float inverse_f(float r)
{
// Build a lookup table on the radius, as a fixed-size table.
// We will use a vec3 since we will store the multipled number in the Z coordinate.
// So to recap: x will be the radius, y will be the f(x) distortion, and Z will be x * y;
vec3[48] lut;
// Since out LUT is shader-global check if it's been computed alrite
// Flame has no overflow bbox so we can safely max out at the image edge, plus some cushion
float max_r = sqrt((adsk_input1_frameratio * adsk_input1_frameratio) + 1) + 0.1;
float incr = max_r / 48;
float lut_r = 0;
float f;
for(int i=0; i < 48; i++) {
f = distortion_f(lut_r);
lut[i] = vec3(lut_r, f, lut_r * f);
lut_r += incr;
}
float t;
// Now find the nehgbouring elements
// only iterate to 46 since we will need
// 47 as i+1
for(int i=0; i < 47; i++) {
if(lut[i].z < r && lut[i+1].z > r) {
// BAM! our value is between these two segments
// get the T interpolant and mix
t = (r - lut[i].z) / (lut[i+1].z - lut[i]).z;
return mix(lut[i].y, lut[i+1].y, t );
}
}
}
float aberrate(float f, float chroma)
{
return f + (f * chroma);
}
vec3 chromaticize_and_invert(float f)
{
vec3 rgb_f = vec3(aberrate(f, chroma_red), aberrate(f, chroma_green), aberrate(f, chroma_blue));
// We need to DIVIDE by F when we redistort, and x / y == x * (1 / y)
if(apply_disto) {
rgb_f = 1 / rgb_f;
}
return rgb_f;
}
void main(void)
{
vec2 px, uv;
float f = 1;
float r = 1;
px = gl_FragCoord.xy;
// Make sure we are still centered
px.x -= (adsk_result_w - adsk_input1_w) / 2;
px.y -= (adsk_result_h - adsk_input1_h) / 2;
// Push the destination coordinates into the [0..1] range
uv.x = px.x / adsk_input1_w;
uv.y = px.y / adsk_input1_h;
// And to Syntheyes UV which are [1..-1] on both X and Y
uv.x = (uv.x *2 ) - 1;
uv.y = (uv.y *2 ) - 1;
// Add UV shifts
uv.x += uShift;
uv.y += vShift;
// Make the X value the aspect value, so that the X coordinates go to [-aspect..aspect]
uv.x = uv.x * adsk_input1_frameratio;
// Compute the radius
r = sqrt(uv.x*uv.x + uv.y*uv.y);
// If we are redistorting, account for the oversize plate in the input, assume that
// the input aspect is the same
if(apply_disto) {
r = r / (float(adsk_input1_w) / float(adsk_result_w));
}
// Apply or remove disto, per channel honoring chromatic aberration
if(apply_disto) {
f = inverse_f(r);
} else {
f = distortion_f(r);
}
vec2[3] rgb_uvs = vec2[](uv, uv, uv);
// Compute distortions per component
vec3 rgb_f = chromaticize_and_invert(f);
// Apply the disto coefficients, per component
rgb_uvs[0] = rgb_uvs[0] * rgb_f.rr;
rgb_uvs[1] = rgb_uvs[1] * rgb_f.gg;
rgb_uvs[2] = rgb_uvs[2] * rgb_f.bb;
// Convert all the UVs back to the texture space, per color component
for(int i=0; i < 3; i++) {
uv = rgb_uvs[i];
// Back from [-aspect..aspect] to [-1..1]
uv.x = uv.x / adsk_input1_frameratio;
// Remove UV shifts
uv.x -= uShift;
uv.y -= vShift;
// Back to OGL UV
uv.x = (uv.x + 1) / 2;
uv.y = (uv.y + 1) / 2;
rgb_uvs[i] = uv;
}
// Sample the input plate, per component
vec4 sampled;
sampled.r = texture2D(input1, rgb_uvs[0]).r;
sampled.g = texture2D(input1, rgb_uvs[1]).g;
sampled.b = texture2D(input1, rgb_uvs[2]).b;
// and assign to the output
gl_FragColor.rgba = vec4(sampled.rgb, 1.0 );
}

View File

@@ -0,0 +1,630 @@
//// High quality (Some browsers may freeze or crash)
//#define HIGHQUALITY
//// Medium quality (Should be fine on all systems, works on Intel HD2000 on Win7 but quite slow)
//#define MEDIUMQUALITY
//// Defaults
//#define REFLECTIONS
#define SHADOWS
//#define GRASS
//#define SMALL_WAVES
#define RAGGED_LEAVES
//#define DETAILED_NOISE
//#define LIGHT_AA // 2 sample SSAA
//#define HEAVY_AA // 2x2 RG SSAA
//#define TONEMAP
//// Configurations
#ifdef MEDIUMQUALITY
#define SHADOWS
#define SMALL_WAVES
#define RAGGED_LEAVES
#define TONEMAP
#endif
#ifdef HIGHQUALITY
#define REFLECTIONS
#define SHADOWS
//#define GRASS
#define SMALL_WAVES
#define RAGGED_LEAVES
#define DETAILED_NOISE
#define LIGHT_AA
#define TONEMAP
#endif
// Constants
const float eps = 1e-5;
const float PI = 3.14159265359;
const vec3 sunDir = vec3(0.79057,-0.47434, 0.0);
const vec3 skyCol = vec3(0.3, 0.5, 0.8);
const vec3 sandCol = vec3(0.9, 0.8, 0.5);
const vec3 treeCol = vec3(0.8, 0.65, 0.3);
const vec3 grassCol = vec3(0.4, 0.5, 0.18);
const vec3 leavesCol = vec3(0.3, 0.6, 0.2);
const vec3 leavesPos = vec3(-5.1,13.4, 0.0);
#ifdef TONEMAP
const vec3 sunCol = vec3(1.8, 1.7, 1.6);
#else
const vec3 sunCol = vec3(0.9, 0.85, 0.8);
#endif
const float exposure = 1.1; // Only used when tonemapping
// Description : Array and textureless GLSL 2D/3D/4D simplex
// noise functions.
// Author : Ian McEwan, Ashima Arts.
// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
// Distributed under the MIT License. See LICENSE file.
// https://github.com/ashima/webgl-noise
vec3 mod289(vec3 x) {
return x - floor(x * (1.0 / 289.0)) * 289.0;
}
vec4 mod289(vec4 x) {
return x - floor(x * (1.0 / 289.0)) * 289.0;
}
vec4 permute(vec4 x) {
return mod289(((x*34.0)+1.0)*x);
}
vec4 taylorInvSqrt(vec4 r) {
return 1.79284291400159 - 0.85373472095314 * r;
}
float snoise(vec3 v) {
const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;
const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
// First corner
vec3 i = floor(v + dot(v, C.yyy) );
vec3 x0 = v - i + dot(i, C.xxx) ;
// Other corners
vec3 g = step(x0.yzx, x0.xyz);
vec3 l = 1.0 - g;
vec3 i1 = min( g.xyz, l.zxy );
vec3 i2 = max( g.xyz, l.zxy );
// x0 = x0 - 0.0 + 0.0 * C.xxx;
// x1 = x0 - i1 + 1.0 * C.xxx;
// x2 = x0 - i2 + 2.0 * C.xxx;
// x3 = x0 - 1.0 + 3.0 * C.xxx;
vec3 x1 = x0 - i1 + C.xxx;
vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y
vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y
// Permutations
i = mod289(i);
vec4 p = permute( permute( permute(
i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
+ i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
+ i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
// Gradients: 7x7 points over a square, mapped onto an octahedron.
// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
float n_ = 0.142857142857; // 1.0/7.0
vec3 ns = n_ * D.wyz - D.xzx;
vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)
vec4 x_ = floor(j * ns.z);
vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)
vec4 x = x_ *ns.x + ns.yyyy;
vec4 y = y_ *ns.x + ns.yyyy;
vec4 h = 1.0 - abs(x) - abs(y);
vec4 b0 = vec4( x.xy, y.xy );
vec4 b1 = vec4( x.zw, y.zw );
//vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
//vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
vec4 s0 = floor(b0)*2.0 + 1.0;
vec4 s1 = floor(b1)*2.0 + 1.0;
vec4 sh = -step(h, vec4(0.0));
vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
vec3 p0 = vec3(a0.xy,h.x);
vec3 p1 = vec3(a0.zw,h.y);
vec3 p2 = vec3(a1.xy,h.z);
vec3 p3 = vec3(a1.zw,h.w);
//Normalise gradients
vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
p0 *= norm.x;
p1 *= norm.y;
p2 *= norm.z;
p3 *= norm.w;
// Mix final noise value
vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
m = m * m;
return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),
dot(p2,x2), dot(p3,x3) ) );
}
// Main
float fbm(vec3 p)
{
float final = snoise(p);
p *= 1.94; final += snoise(p) * 0.5;
#ifdef DETAILED_NOISE
p *= 3.75; final += snoise(p) * 0.25;
return final / 1.75;
#else
return final / 1.5;
#endif
}
float waterHeight(vec3 p)
{
float d = length(p.xz);
float h = sin(d * 1.5 + iGlobalTime * 3.0) * 12.0 / d; // Island waves
#ifdef SMALL_WAVES
h += fbm(p*0.5); // Other waves
#endif
return h;
}
vec3 bump(vec3 pos, vec3 rayDir)
{
float s = 2.0;
// Fade out waves to reduce aliasing
float dist = dot(pos, rayDir);
s *= dist < 2.0 ? 1.0 : 1.4142 / sqrt(dist);
// Calculate normal from heightmap
vec2 e = vec2(1e-2, 0.0);
vec3 p = vec3(pos.x, iGlobalTime*0.5, pos.z)*0.7;
float m = waterHeight(p)*s;
return normalize(vec3(
waterHeight(p+e.xyy)*s-m,
1.0,
waterHeight(p+e.yxy)*s-m
));
}
// Ray intersections
vec4 intersectSphere(vec3 rpos, vec3 rdir, vec3 pos, float rad)
{
vec3 op = pos - rpos;
float b = dot(op, rdir);
float det = b*b - dot(op, op) + rad*rad;
if (det > 0.0)
{
det = sqrt(det);
float t = b - det;
if (t > eps)
return vec4(-normalize(rpos+rdir*t-pos), t);
}
return vec4(0.0);
}
vec4 intersectCylinder(vec3 rpos, vec3 rdir, vec3 pos, float rad)
{
vec3 op = pos - rpos;
vec2 rdir2 = normalize(rdir.yz);
float b = dot(op.yz, rdir2);
float det = b*b - dot(op.yz, op.yz) + rad*rad;
if (det > 0.0)
{
det = sqrt(det);
float t = b - det;
if (t > eps)
return vec4(-normalize(rpos.yz+rdir2*t-pos.yz), 0.0, t);
t = b + det;
if (t > eps)
return vec4(-normalize(rpos.yz+rdir2*t-pos.yz), 0.0, t);
}
return vec4(0.0);
}
vec4 intersectPlane(vec3 rayPos, vec3 rayDir, vec3 n, float d)
{
float t = -(dot(rayPos, n) + d) / dot(rayDir, n);
return vec4(n * sign(dot(rayDir, n)), t);
}
// Helper functions
vec3 rotate(vec3 p, float theta)
{
float c = cos(theta), s = sin(theta);
return vec3(p.x * c + p.z * s, p.y,
p.z * c - p.x * s);
}
float impulse(float k, float x) // by iq
{
float h = k*x;
return h * exp(1.0 - h);
}
// Raymarched parts of scene
float grass(vec3 pos)
{
float h = length(pos - vec3(0.0, -7.0, 0.0)) - 8.0;
if (h > 2.0) return h; // Optimization (Avoid noise if too far away)
return h + snoise(pos * 3.0) * 0.1 + pos.y * 0.9;
}
float tree(vec3 pos)
{
pos.y -= 0.5;
float s = sin(pos.y*0.03);
float c = cos(pos.y*0.03);
mat2 m = mat2(c, -s, s, c);
vec3 p = vec3(m*pos.xy, pos.z);
float width = 1.0 - pos.y * 0.02 - clamp(sin(pos.y * 8.0) * 0.1, 0.05, 0.1);
return max(length(p.xz) - width, pos.y - 12.5);
}
vec2 scene(vec3 pos)
{
float vtree = tree(pos);
#ifdef GRASS
float vgrass = grass(pos);
float v = min(vtree, vgrass);
#else
float v = vtree;
#endif
return vec2(v, v == vtree ? 2.0 : 1.0);
}
vec3 normal(vec3 pos)
{
vec2 eps = vec2(1e-3, 0.0);
float h = scene(pos).x;
return normalize(vec3(
scene(pos-eps.xyy).x-h,
scene(pos-eps.yxy).x-h,
scene(pos-eps.yyx).x-h
));
}
float plantsShadow(vec3 rayPos, vec3 rayDir)
{
// Soft shadow taken from iq
float k = 6.0;
float t = 0.0;
float s = 1.0;
for (int i = 0; i < 30; i++)
{
vec3 pos = rayPos+rayDir*t;
vec2 res = scene(pos);
if (res.x < 0.001) return 0.0;
s = min(s, k*res.x/t);
t += max(res.x, 0.01);
}
return s*s*(3.0 - 2.0*s);
}
// Ray-traced parts of scene
vec4 intersectWater(vec3 rayPos, vec3 rayDir)
{
float h = sin(20.5 + iGlobalTime * 2.0) * 0.03;
float t = -(rayPos.y + 2.5 + h) / rayDir.y;
return vec4(0.0, 1.0, 0.0, t);
}
vec4 intersectSand(vec3 rayPos, vec3 rayDir)
{
return intersectSphere(rayPos, rayDir, vec3(0.0,-24.1,0.0), 24.1);
}
vec4 intersectTreasure(vec3 rayPos, vec3 rayDir)
{
return vec4(0.0);
}
vec4 intersectLeaf(vec3 rayPos, vec3 rayDir, float openAmount)
{
vec3 dir = normalize(vec3(0.0, 1.0, openAmount));
float offset = 0.0;
vec4 res = intersectPlane(rayPos, rayDir, dir, 0.0);
vec3 pos = rayPos+rayDir*res.w;
#ifdef RAGGED_LEAVES
offset = snoise(pos*0.8) * 0.3;
#endif
if (pos.y > 0.0 || length(pos * vec3(0.9, 2.0, 1.0)) > 4.0 - offset) res.w = 0.0;
vec4 res2 = intersectPlane(rayPos, rayDir, vec3(dir.xy, -dir.z), 0.0);
pos = rayPos+rayDir*res2.w;
#ifdef RAGGED_LEAVES
offset = snoise(pos*0.8) * 0.3;
#endif
if (pos.y > 0.0 || length(pos * vec3(0.9, 2.0, 1.0)) > 4.0 - offset) res2.w = 0.0;
if (res2.w > 0.0 && res2.w < res.w || res.w <= 0.0)
res = res2;
return res;
}
vec4 leaves(vec3 rayPos, vec3 rayDir)
{
float t = 1e20;
vec3 n = vec3(0.0);
rayPos -= leavesPos;
float sway = impulse(15.0, fract(iGlobalTime / PI * 0.125));
float upDownSway = sway * -sin(iGlobalTime) * 0.06;
float openAmount = sway * max(-cos(iGlobalTime) * 0.4, 0.0);
float angleOffset = -0.1;
for (float k = 0.0; k < 6.2; k += 0.75)
{
// Left-right
float alpha = k + (k - PI) * sway * 0.015;
vec3 p = rotate(rayPos, alpha);
vec3 d = rotate(rayDir, alpha);
// Up-down
angleOffset *= -1.0;
float theta = -0.4 +
angleOffset +
cos(k) * 0.35 +
upDownSway +
sin(iGlobalTime+k*10.0) * 0.03 * (sway + 0.2);
p = rotate(p.xzy, theta).xzy;
d = rotate(d.xzy, theta).xzy;
// Shift
p -= vec3(5.4, 0.0, 0.0);
// Intersect individual leaf
vec4 res = intersectLeaf(p, d, 1.0+openAmount);
if (res.w > 0.0 && res.w < t)
{
t = res.w;
n = res.xyz;
}
}
return vec4(n, t);
}
// Lighting
float shadow(vec3 rayPos, vec3 rayDir)
{
float s = 1.0;
// Intersect sand
//vec4 resSand = intersectSand(rayPos, rayDir);
//if (resSand.w > 0.0) return 0.0;
// Intersect plants
s = min(s, plantsShadow(rayPos, rayDir));
if (s < 0.0001) return 0.0;
// Intersect leaves
vec4 resLeaves = leaves(rayPos, rayDir);
if (resLeaves.w > 0.0 && resLeaves.w < 1e7) return 0.0;
return s;
}
vec3 light(vec3 p, vec3 n)
{
float s = 1.0;
#ifdef SHADOWS
s = shadow(p-sunDir*0.01, -sunDir);
#endif
vec3 col = sunCol * min(max(dot(n, sunDir), 0.0), s);
col += skyCol * (-n.y * 0.5 + 0.5) * 0.3;
return col;
}
vec3 lightLeaves(vec3 p, vec3 n)
{
float s = 1.0;
#ifdef SHADOWS
s = shadow(p-sunDir*0.01, -sunDir);
#endif
float ao = min(length(p - leavesPos) * 0.1, 1.0);
float ns = dot(n, sunDir);
float d = sqrt(max(ns, 0.0));
vec3 col = sunCol * min(d, s);
col += sunCol * max(-ns, 0.0) * vec3(0.3, 0.3, 0.1) * ao;
col += skyCol * (-n.y * 0.5 + 0.5) * 0.3 * ao;
return col;
}
vec3 sky(vec3 n)
{
return skyCol * (1.0 - n.y * 0.8);
}
// Ray-marching
vec4 plants(vec3 rayPos, vec3 rayDir)
{
float t = 0.0;
for (int i = 0; i < 40; i++)
{
vec3 pos = rayPos+rayDir*t;
vec2 res = scene(pos);
float h = res.x;
if (h < 0.001)
{
vec3 col = res.y == 2.0 ? treeCol : grassCol;
float uvFact = res.y == 2.0 ? 1.0 : 10.0;
vec3 n = normal(pos);
vec2 uv = vec2(n.x, pos.y * 0.5) * 0.2 * uvFact;
vec3 tex = texture2D(iChannel0, uv).rgb * 0.6 + 0.4;
float ao = min(length(pos - leavesPos) * 0.1, 1.0);
return vec4(col * light(pos, n) * ao * tex, t);
}
t += h;
}
return vec4(sky(rayDir), 1e8);
}
// Final combination
vec3 traceReflection(vec3 rayPos, vec3 rayDir)
{
vec3 col = vec3(0.0);
float t = 1e20;
// Intersect plants
vec4 resPlants = plants(rayPos, rayDir);
if (resPlants.w > 0.0 && resPlants.w < t)
{
t = resPlants.w;
col = resPlants.xyz;
}
// Intersect leaves
vec4 resLeaves = leaves(rayPos, rayDir);
if (resLeaves.w > 0.0 && resLeaves.w < t)
{
vec3 pos = rayPos + rayDir * resLeaves.w;
vec2 uv = (pos.xz - leavesPos.xz) * 0.3;
float tex = texture2D(iChannel0, uv).r * 0.6 + 0.5;
t = resLeaves.w;
col = leavesCol * lightLeaves(pos, resLeaves.xyz) * tex;
}
if (t > 1e7) return sky(rayDir);
return col;
}
vec3 trace(vec3 rayPos, vec3 rayDir)
{
vec3 col = vec3(0.0);
float t = 1e20;
// Intersect sand
vec4 resSand = intersectSand(rayPos, rayDir);
if (resSand.w > 0.0)
{
vec3 pos = rayPos + rayDir * resSand.w;
t = resSand.w;
col = sandCol * light(pos, resSand.xyz);
}
// Intersect treasure chest
vec4 resTreasure = intersectTreasure(rayPos, rayDir);
if (resTreasure.w > 0.0 && resTreasure.w < t)
{
vec3 pos = rayPos + rayDir * resTreasure.w;
t = resTreasure.w;
col = leavesCol * light(pos, resTreasure.xyz);
}
// Intersect leaves
vec4 resLeaves = leaves(rayPos, rayDir);
if (resLeaves.w > 0.0 && resLeaves.w < t)
{
vec3 pos = rayPos + rayDir * resLeaves.w;
vec2 uv = (pos.xz - leavesPos.xz) * 0.3;
float tex = texture2D(iChannel0, uv).r * 0.6 + 0.5;
t = resLeaves.w;
col = leavesCol * lightLeaves(pos, resLeaves.xyz) * tex;
}
// Intersect plants
vec4 resPlants = plants(rayPos, rayDir);
if (resPlants.w > 0.0 && resPlants.w < t)
{
t = resPlants.w;
col = resPlants.xyz;
}
// Intersect water
vec4 resWater = intersectWater(rayPos, rayDir);
if (resWater.w > 0.0 && resWater.w < t)
{
vec3 pos = rayPos + rayDir * resWater.w;
float dist = t - resWater.w;
vec3 n = bump(pos, rayDir);
float ct = -min(dot(n,rayDir), 0.0);
float fresnel = 0.9 - 0.9 * pow(1.0 - ct, 5.0);
vec3 trans = col * exp(-dist * vec3(1.0, 0.7, 0.4) * 3.0);
vec3 reflDir = normalize(reflect(rayDir, n));
vec3 refl = sky(reflDir);
#ifdef REFLECTIONS
if (dot(pos, rayDir) < -2.0)
refl = traceReflection(pos, reflDir).rgb;
#endif
t = resWater.t;
col = mix(refl, trans, fresnel);
}
if (t > 1e7) return sky(rayDir);
return col;
}
// Ray-generation
vec3 camera(vec2 px)
{
vec2 rd = (px / iResolution.yy - vec2(iResolution.x/iResolution.y*0.5-0.5, 0.0)) * 2.0 - 1.0;
float t = sin(iGlobalTime * 0.1) * 0.2;
vec3 rayDir = normalize(vec3(rd.x, rd.y, 1.0));
vec3 rayPos = vec3(0.0, 3.0, -18.0);
return trace(rayPos, rayDir);
}
void main(void)
{
#ifdef HEAVY_AA
vec3 col = camera(gl_FragCoord.xy+vec2(0.0,0.5))*0.25;
col += camera(gl_FragCoord.xy+vec2(0.25,0.0))*0.25;
col += camera(gl_FragCoord.xy+vec2(0.5,0.75))*0.25;
col += camera(gl_FragCoord.xy+vec2(0.75,0.25))*0.25;
#else
vec3 col = camera(gl_FragCoord.xy);
#ifdef LIGHT_AA
col = col * 0.5 + camera(gl_FragCoord.xy+vec2(0.5,0.5))*0.5;
#endif
#endif
#ifdef TONEMAP
// Optimized Haarm-Peter Duikers curve
vec3 x = max(vec3(0.0),col*exposure-0.004);
col = (x*(6.2*x+.5))/(x*(6.2*x+1.7)+0.06);
#else
col = pow(col, vec3(0.4545));
#endif
gl_FragColor = vec4(col, 1.0);
}

View File

@@ -0,0 +1,98 @@
/**
* The MIT License (MIT)
*
* Copyright (c) 2016 Sascha Willems
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#version 450
#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable
// PN patch data
struct PnPatch
{
float b210;
float b120;
float b021;
float b012;
float b102;
float b201;
float b111;
float n110;
float n011;
float n101;
};
// tessellation levels
layout (binding = 0) uniform UBO
{
float tessLevel;
} ubo;
layout(vertices=3) out;
layout(location = 0) in vec3 inNormal[];
layout(location = 1) in vec2 inUV[];
layout(location = 0) out vec3 outNormal[3];
layout(location = 3) out vec2 outUV[3];
layout(location = 6) out PnPatch outPatch[3];
float wij(int i, int j)
{
return dot(gl_in[j].gl_Position.xyz - gl_in[i].gl_Position.xyz, inNormal[i]);
}
float vij(int i, int j)
{
vec3 Pj_minus_Pi = gl_in[j].gl_Position.xyz
- gl_in[i].gl_Position.xyz;
vec3 Ni_plus_Nj = inNormal[i]+inNormal[j];
return 2.0*dot(Pj_minus_Pi, Ni_plus_Nj)/dot(Pj_minus_Pi, Pj_minus_Pi);
}
void main()
{
// get data
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
outNormal[gl_InvocationID] = inNormal[gl_InvocationID];
outUV[gl_InvocationID] = inUV[gl_InvocationID];
// set base
float P0 = gl_in[0].gl_Position[gl_InvocationID];
float P1 = gl_in[1].gl_Position[gl_InvocationID];
float P2 = gl_in[2].gl_Position[gl_InvocationID];
float N0 = inNormal[0][gl_InvocationID];
float N1 = inNormal[1][gl_InvocationID];
float N2 = inNormal[2][gl_InvocationID];
// compute control points
outPatch[gl_InvocationID].b210 = (2.0*P0 + P1 - wij(0,1)*N0)/3.0;
outPatch[gl_InvocationID].b120 = (2.0*P1 + P0 - wij(1,0)*N1)/3.0;
outPatch[gl_InvocationID].b021 = (2.0*P1 + P2 - wij(1,2)*N1)/3.0;
outPatch[gl_InvocationID].b012 = (2.0*P2 + P1 - wij(2,1)*N2)/3.0;
outPatch[gl_InvocationID].b102 = (2.0*P2 + P0 - wij(2,0)*N2)/3.0;
outPatch[gl_InvocationID].b201 = (2.0*P0 + P2 - wij(0,2)*N0)/3.0;
float E = ( outPatch[gl_InvocationID].b210
+ outPatch[gl_InvocationID].b120
+ outPatch[gl_InvocationID].b021
+ outPatch[gl_InvocationID].b012
+ outPatch[gl_InvocationID].b102
+ outPatch[gl_InvocationID].b201 ) / 6.0;
float V = (P0 + P1 + P2)/3.0;
outPatch[gl_InvocationID].b111 = E + (E - V)*0.5;
outPatch[gl_InvocationID].n110 = N0+N1-vij(0,1)*(P1-P0);
outPatch[gl_InvocationID].n011 = N1+N2-vij(1,2)*(P2-P1);
outPatch[gl_InvocationID].n101 = N2+N0-vij(2,0)*(P0-P2);
// set tess levels
gl_TessLevelOuter[gl_InvocationID] = ubo.tessLevel;
gl_TessLevelInner[0] = ubo.tessLevel;
}

View File

@@ -0,0 +1,103 @@
/**
* The MIT License (MIT)
*
* Copyright (c) 2016 Sascha Willems
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#version 450
#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable
// PN patch data
struct PnPatch
{
float b210;
float b120;
float b021;
float b012;
float b102;
float b201;
float b111;
float n110;
float n011;
float n101;
};
layout (binding = 1) uniform UBO
{
mat4 projection;
mat4 model;
float tessAlpha;
} ubo;
layout(triangles, fractional_odd_spacing, ccw) in;
layout(location = 0) in vec3 iNormal[];
layout(location = 3) in vec2 iTexCoord[];
layout(location = 6) in PnPatch iPnPatch[];
layout(location = 0) out vec3 oNormal;
layout(location = 1) out vec2 oTexCoord;
#define uvw gl_TessCoord
void main()
{
vec3 uvwSquared = uvw * uvw;
vec3 uvwCubed = uvwSquared * uvw;
// extract control points
vec3 b210 = vec3(iPnPatch[0].b210, iPnPatch[1].b210, iPnPatch[2].b210);
vec3 b120 = vec3(iPnPatch[0].b120, iPnPatch[1].b120, iPnPatch[2].b120);
vec3 b021 = vec3(iPnPatch[0].b021, iPnPatch[1].b021, iPnPatch[2].b021);
vec3 b012 = vec3(iPnPatch[0].b012, iPnPatch[1].b012, iPnPatch[2].b012);
vec3 b102 = vec3(iPnPatch[0].b102, iPnPatch[1].b102, iPnPatch[2].b102);
vec3 b201 = vec3(iPnPatch[0].b201, iPnPatch[1].b201, iPnPatch[2].b201);
vec3 b111 = vec3(iPnPatch[0].b111, iPnPatch[1].b111, iPnPatch[2].b111);
// extract control normals
vec3 n110 = normalize(vec3(iPnPatch[0].n110, iPnPatch[1].n110, iPnPatch[2].n110));
vec3 n011 = normalize(vec3(iPnPatch[0].n011, iPnPatch[1].n011, iPnPatch[2].n011));
vec3 n101 = normalize(vec3(iPnPatch[0].n101, iPnPatch[1].n101, iPnPatch[2].n101));
// compute texcoords
oTexCoord = gl_TessCoord[2]*iTexCoord[0] + gl_TessCoord[0]*iTexCoord[1] + gl_TessCoord[1]*iTexCoord[2];
// normal
// Barycentric normal
vec3 barNormal = gl_TessCoord[2]*iNormal[0] + gl_TessCoord[0]*iNormal[1] + gl_TessCoord[1]*iNormal[2];
vec3 pnNormal = iNormal[0]*uvwSquared[2] + iNormal[1]*uvwSquared[0] + iNormal[2]*uvwSquared[1]
+ n110*uvw[2]*uvw[0] + n011*uvw[0]*uvw[1]+ n101*uvw[2]*uvw[1];
oNormal = ubo.tessAlpha*pnNormal + (1.0-ubo.tessAlpha) * barNormal;
// compute interpolated pos
vec3 barPos = gl_TessCoord[2]*gl_in[0].gl_Position.xyz
+ gl_TessCoord[0]*gl_in[1].gl_Position.xyz
+ gl_TessCoord[1]*gl_in[2].gl_Position.xyz;
// save some computations
uvwSquared *= 3.0;
// compute PN position
vec3 pnPos = gl_in[0].gl_Position.xyz*uvwCubed[2]
+ gl_in[1].gl_Position.xyz*uvwCubed[0]
+ gl_in[2].gl_Position.xyz*uvwCubed[1]
+ b210*uvwSquared[2]*uvw[0]
+ b120*uvwSquared[0]*uvw[2]
+ b201*uvwSquared[2]*uvw[1]
+ b021*uvwSquared[0]*uvw[1]
+ b102*uvwSquared[1]*uvw[2]
+ b012*uvwSquared[1]*uvw[0]
+ b111*6.0*uvw[0]*uvw[1]*uvw[2];
// final position and normal
vec3 finalPos = (1.0-ubo.tessAlpha)*barPos + ubo.tessAlpha*pnPos;
gl_Position = ubo.projection * ubo.model * vec4(finalPos,1.0);
}

View File

@@ -0,0 +1,313 @@
G04 #@! TF.FileFunction,Copper,L2,Bot,Signal*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (2016-07-14 BZR 6980)-product) date Sunday, 23 April 2017 'PMt' 23:49:01*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
%ADD11C,0.175000*%
%ADD12R,1.727200X2.032000*%
%ADD13O,1.727200X2.032000*%
%ADD14R,2.032000X1.727200*%
%ADD15O,2.032000X1.727200*%
%ADD16C,1.300000*%
%ADD17C,2.800000*%
%ADD18C,0.685800*%
%ADD19C,0.800000*%
%ADD20C,0.400000*%
%ADD21C,0.800000*%
%ADD22C,0.300000*%
%ADD23C,0.500000*%
%ADD24C,0.180000*%
G04 APERTURE END LIST*
D10*
D11*
X162816666Y-95670833D02*
X162883333Y-95637500D01*
X163016666Y-95637500D01*
X163083333Y-95670833D01*
X163150000Y-95737500D01*
X163183333Y-95804166D01*
X163183333Y-95937500D01*
X163150000Y-96004166D01*
X163083333Y-96070833D01*
X163016666Y-96104166D01*
X162883333Y-96104166D01*
X162816666Y-96070833D01*
X162950000Y-95404166D02*
X163116666Y-95437500D01*
X163283333Y-95537500D01*
X163383333Y-95704166D01*
X163416666Y-95870833D01*
X157450000Y-95870833D01*
X157483333Y-95837500D01*
X157550000Y-95804166D01*
X156816666Y-95504166D02*
X156950000Y-95504166D01*
X157016666Y-95537500D01*
X157050000Y-95570833D01*
X157116666Y-95670833D01*
X157150000Y-95804166D01*
X157150000Y-96070833D01*
X157116666Y-96137500D01*
X157083333Y-96170833D01*
X157016666Y-96204166D01*
X156883333Y-96204166D01*
X156816666Y-96170833D01*
X156783333Y-96137500D01*
X156750000Y-96070833D01*
X156750000Y-95904166D01*
X156783333Y-95837500D01*
X156816666Y-95804166D01*
X156883333Y-95770833D01*
X157016666Y-95770833D01*
X157083333Y-95804166D01*
X157116666Y-95837500D01*
X157150000Y-95904166D01*
X156450000Y-95937500D02*
X155916666Y-95937500D01*
X155616666Y-96170833D02*
X155516666Y-96204166D01*
X155350000Y-96204166D01*
X155283333Y-96170833D01*
X155250000Y-96137500D01*
X155216666Y-96070833D01*
X155216666Y-96004166D01*
X155250000Y-95937500D01*
X155283333Y-95904166D01*
X155350000Y-95870833D01*
X155483333Y-95837500D01*
X155550000Y-95804166D01*
X155583333Y-95770833D01*
X155616666Y-95704166D01*
X155616666Y-95637500D01*
X155583333Y-95570833D01*
X155550000Y-95537500D01*
X155483333Y-95504166D01*
X155316666Y-95504166D01*
X155216666Y-95537500D01*
X155016666Y-95737500D02*
X154750000Y-95737500D01*
X154916666Y-95504166D02*
X154916666Y-96104166D01*
X154883333Y-96170833D01*
X154816666Y-96204166D01*
X154750000Y-96204166D01*
X154216666Y-95737500D02*
X154216666Y-96204166D01*
X154516666Y-95737500D02*
X154516666Y-96104166D01*
X154483333Y-96170833D01*
X154416666Y-96204166D01*
X154316666Y-96204166D01*
X154250000Y-96170833D01*
X154216666Y-96137500D01*
X153583333Y-96204166D02*
X153583333Y-95504166D01*
X153583333Y-96170833D02*
X153650000Y-96204166D01*
X153783333Y-96204166D01*
X156883333Y-96795833D01*
X156850000Y-96762500D01*
X156883333Y-96729166D01*
X156883333Y-96795833D01*
X156450000Y-97429166D02*
X156516666Y-97395833D01*
X156550000Y-97329166D01*
X156550000Y-96729166D01*
X156183333Y-96962500D02*
X155650000Y-97162500D01*
X156183333Y-97362500D01*
X154883333Y-96729166D02*
X154483333Y-96729166D01*
X154683333Y-97429166D02*
X154683333Y-96729166D01*
X154250000Y-97429166D02*
X154250000Y-96962500D01*
X154250000Y-97095833D02*
X154216666Y-97029166D01*
X154183333Y-96995833D01*
X154116666Y-96962500D01*
X154050000Y-96962500D01*
X153516666Y-97429166D02*
X153516666Y-97062500D01*
X153550000Y-96995833D01*
X153616666Y-96962500D01*
X153750000Y-96962500D01*
X153816666Y-96995833D01*
X153516666Y-97395833D02*
X153583333Y-97429166D01*
X153750000Y-97429166D01*
X153816666Y-97395833D01*
X153850000Y-97329166D01*
X153850000Y-97262500D01*
X153816666Y-97195833D01*
X153750000Y-97162500D01*
X153583333Y-97162500D01*
X153516666Y-97129166D01*
X153183333Y-96962500D02*
X153183333Y-97662500D01*
X153183333Y-96995833D02*
X153116666Y-96962500D01*
X152983333Y-96962500D01*
X152916666Y-96995833D01*
X152883333Y-97029166D01*
X152850000Y-97095833D01*
X152850000Y-97295833D01*
X152883333Y-97362500D01*
X152916666Y-97395833D01*
X152983333Y-97429166D01*
X153116666Y-97429166D01*
X153183333Y-97395833D01*
X152550000Y-97429166D02*
X152550000Y-96962500D01*
X152550000Y-96729166D02*
X152583333Y-96762500D01*
X152550000Y-96795833D01*
X152516666Y-96762500D01*
X152550000Y-96729166D01*
X152550000Y-96795833D01*
X151950000Y-97395833D02*
X152016666Y-97429166D01*
X152150000Y-97429166D01*
X152216666Y-97395833D01*
X152250000Y-97329166D01*
X152250000Y-97062500D01*
X152216666Y-96995833D01*
X152150000Y-96962500D01*
X152016666Y-96962500D01*
X151950000Y-96995833D01*
X151916666Y-97062500D01*
X151916666Y-97129166D01*
X152250000Y-97195833D01*
X151616666Y-97429166D02*
X151616666Y-96962500D01*
X151616666Y-97095833D02*
X151583333Y-97029166D01*
X151550000Y-96995833D01*
X151483333Y-96962500D01*
X151416666Y-96962500D01*
D12*
X175640000Y-81600000D03*
D13*
X173100000Y-81600000D03*
X170560000Y-81600000D03*
D14*
X184000000Y-86460000D03*
D15*
X184000000Y-89000000D03*
X184000000Y-91540000D03*
D16*
X152900000Y-88350000D03*
X152900000Y-90350000D03*
X152900000Y-92850000D03*
X152900000Y-85850000D03*
D17*
X150800000Y-83500000D03*
X150800000Y-95200000D03*
D18*
X173700000Y-89200000D03*
X162300004Y-87000000D03*
X159600000Y-82700000D03*
X161700000Y-94600000D03*
X176200000Y-96600000D03*
X179600000Y-91700000D03*
X158100000Y-83900000D03*
X168600000Y-89399998D03*
X167200000Y-85000000D03*
X159600000Y-81100000D03*
X163800000Y-81100000D03*
D19*
X159300000Y-87400000D03*
X167300000Y-96600000D03*
X167300000Y-94500000D03*
X160900000Y-87400000D03*
D18*
X174900000Y-90299999D03*
X174900000Y-85300000D03*
D19*
X166500002Y-90900000D03*
X177200000Y-90200000D03*
X168000000Y-87400000D03*
X173800000Y-87400000D03*
D18*
X154500000Y-89792900D03*
X154500000Y-88907100D03*
D20*
X167200000Y-87999998D02*
X168257101Y-89057099D01*
X167200000Y-85000000D02*
X167200000Y-87999998D01*
X168257101Y-89057099D02*
X168600000Y-89399998D01*
D21*
X163800000Y-81100000D02*
X159600000Y-81100000D01*
D22*
X159300000Y-87965685D02*
X159300000Y-87400000D01*
X159300000Y-88600000D02*
X159300000Y-87965685D01*
X167300000Y-96600000D02*
X159300000Y-88600000D01*
X167300000Y-94500000D02*
X160900000Y-88100000D01*
X160900000Y-88100000D02*
X160900000Y-87400000D01*
D23*
X174900000Y-85300000D02*
X174900000Y-90299999D01*
D22*
X177200000Y-90200000D02*
X175300000Y-92100000D01*
X175300000Y-92100000D02*
X167700002Y-92100000D01*
X167700002Y-92100000D02*
X166500002Y-90900000D01*
X173800000Y-87400000D02*
X168000000Y-87400000D01*
X154500000Y-88907100D02*
X154342900Y-88907100D01*
X154342900Y-88907100D02*
X152900000Y-90350000D01*
D24*
G36*
X159316814Y-80416329D02*
X159076741Y-80576741D01*
X158916329Y-80816814D01*
X158860000Y-81100000D01*
X158916329Y-81383186D01*
X159076741Y-81623259D01*
X159316814Y-81783671D01*
X159600000Y-81840000D01*
X163800000Y-81840000D01*
X164083186Y-81783671D01*
X176823872Y-82748661D01*
X176850260Y-82616000D01*
X176850260Y-82265373D01*
X151860838Y-81760869D01*
X151114549Y-81487287D01*
X150320374Y-81520123D01*
X149739162Y-81760869D01*
X149586248Y-82054317D01*
X148415000Y-82054317D01*
X148415000Y-81040874D01*
X148467041Y-80779242D01*
X148592092Y-80592091D01*
X148779241Y-80467042D01*
X149040874Y-80415000D01*
X159323495Y-80415000D01*
X159316814Y-80416329D01*
X159316814Y-80416329D01*
G37*
X159316814Y-80416329D02*
X159076741Y-80576741D01*
X158916329Y-80816814D01*
X158860000Y-81100000D01*
X158916329Y-81383186D01*
X159076741Y-81623259D01*
X159323495Y-80415000D01*
X159316814Y-80416329D01*
M02*

View File

@@ -0,0 +1,40 @@
G04 #@! TF.FileFunction,Soldermask,Bot*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (2016-07-14 BZR 6980)-product) date Sunday, 23 April 2017 'PMt' 23:49:01*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
%ADD11R,1.727200X2.032000*%
%ADD12O,1.727200X2.032000*%
%ADD13R,2.032000X1.727200*%
%ADD14O,2.032000X1.727200*%
%ADD15C,1.300000*%
%ADD16C,2.800000*%
%ADD17C,1.200000*%
G04 APERTURE END LIST*
D10*
D11*
X175640000Y-81600000D03*
D12*
X173100000Y-81600000D03*
X170560000Y-81600000D03*
D13*
X184000000Y-86460000D03*
D14*
X184000000Y-89000000D03*
X184000000Y-91540000D03*
D15*
X152900000Y-88350000D03*
X152900000Y-90350000D03*
X152900000Y-92850000D03*
X152900000Y-85850000D03*
D16*
X150800000Y-83500000D03*
X150800000Y-95200000D03*
D17*
X150800000Y-87100000D03*
X150800000Y-91600000D03*
M02*

View File

@@ -0,0 +1,245 @@
G04 #@! TF.FileFunction,Legend,Bot*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (2016-07-14 BZR 6980)-product) date Sunday, 23 April 2017 'PMt' 23:49:01*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
%ADD11C,0.175000*%
%ADD12C,0.375000*%
%ADD13C,0.254000*%
%ADD14R,1.727200X2.032000*%
%ADD15O,1.727200X2.032000*%
%ADD16R,2.032000X1.727200*%
%ADD17O,2.032000X1.727200*%
%ADD18C,1.300000*%
%ADD19C,2.800000*%
%ADD20C,1.200000*%
G04 APERTURE END LIST*
D10*
D11*
X164233333Y-82450000D02*
X164133333Y-82483333D01*
X164100000Y-82516666D01*
X164066666Y-82583333D01*
X164066666Y-82683333D01*
X164100000Y-82750000D01*
X164133333Y-82783333D01*
X164200000Y-82816666D01*
X164466666Y-82816666D01*
X164466666Y-82116666D01*
X164233333Y-82116666D01*
X164166666Y-82150000D01*
X164133333Y-82183333D01*
X164100000Y-82250000D01*
X164100000Y-82316666D01*
X164133333Y-82383333D01*
X164166666Y-82416666D01*
X164233333Y-82450000D01*
X164466666Y-82450000D01*
X163666666Y-82816666D02*
X163733333Y-82783333D01*
X163766666Y-82750000D01*
X163800000Y-82683333D01*
X163800000Y-82483333D01*
X163766666Y-82416666D01*
X163733333Y-82383333D01*
X163666666Y-82350000D01*
X163566666Y-82350000D01*
X163500000Y-82383333D01*
X163466666Y-82416666D01*
X163433333Y-82483333D01*
X163433333Y-82683333D01*
X163466666Y-82750000D01*
X163500000Y-82783333D01*
X163566666Y-82816666D01*
X163666666Y-82816666D01*
X162833333Y-82816666D02*
X162833333Y-82450000D01*
X162866666Y-82383333D01*
X162933333Y-82350000D01*
X163066666Y-82350000D01*
X163133333Y-82383333D01*
X162833333Y-82783333D02*
X162900000Y-82816666D01*
X163066666Y-82816666D01*
X163133333Y-82783333D01*
X163166666Y-82716666D01*
X163166666Y-82650000D01*
X163133333Y-82583333D01*
X163066666Y-82550000D01*
X162900000Y-82550000D01*
X162833333Y-82516666D01*
X162500000Y-82816666D02*
X162500000Y-82350000D01*
X162500000Y-82483333D02*
X162466666Y-82416666D01*
X162433333Y-82383333D01*
X162366666Y-82350000D01*
X162300000Y-82350000D01*
X161766666Y-82816666D02*
X161766666Y-82116666D01*
X161766666Y-82783333D02*
X161833333Y-82816666D01*
X161966666Y-82816666D01*
X162033333Y-82783333D01*
X162066666Y-82750000D01*
X162100000Y-82683333D01*
X162100000Y-82483333D01*
X162066666Y-82416666D01*
X162033333Y-82383333D01*
X161966666Y-82350000D01*
X161833333Y-82350000D01*
X161766666Y-82383333D01*
X160933333Y-82350000D02*
X160433333Y-82350000D01*
X160733333Y-82050000D02*
X160933333Y-82950000D01*
X160500000Y-82650000D02*
X161000000Y-82650000D01*
X160700000Y-82950000D02*
X160500000Y-82050000D01*
D12*
X181899107Y-86482142D02*
X180756250Y-86482142D01*
X181327678Y-87053571D02*
X181327678Y-85910714D01*
X179327678Y-85553571D02*
X180041964Y-85553571D01*
X180113392Y-86267857D01*
X180041964Y-86196428D01*
X179899107Y-86125000D01*
X179541964Y-86125000D01*
X179399107Y-86196428D01*
X179327678Y-86267857D01*
X179256250Y-86410714D01*
X179256250Y-86767857D01*
X179327678Y-86910714D01*
X179399107Y-86982142D01*
X179541964Y-87053571D01*
X179899107Y-87053571D01*
X180041964Y-86982142D01*
X180113392Y-86910714D01*
X178827678Y-85553571D02*
X178327678Y-87053571D01*
X177827678Y-85553571D01*
X176184821Y-87053571D02*
X176184821Y-85553571D01*
X175827678Y-85553571D01*
X175613392Y-85625000D01*
X175470535Y-85767857D01*
X175399107Y-85910714D01*
X175327678Y-86196428D01*
X175327678Y-86410714D01*
X175399107Y-86696428D01*
X175470535Y-86839285D01*
X175613392Y-86982142D01*
X175827678Y-87053571D01*
X176184821Y-87053571D01*
X174684821Y-86267857D02*
X174184821Y-86267857D01*
X173970535Y-87053571D02*
X174684821Y-87053571D01*
X174684821Y-85553571D01*
X173970535Y-85553571D01*
X173541964Y-85553571D02*
X173041964Y-87053571D01*
X172541964Y-85553571D01*
X181041964Y-89678571D02*
X181541964Y-88964285D01*
X181899107Y-89678571D02*
X181899107Y-88178571D01*
X181327678Y-88178571D01*
X181184821Y-88250000D01*
X181113392Y-88321428D01*
X181041964Y-88464285D01*
X181041964Y-88678571D01*
X181113392Y-88821428D01*
X181184821Y-88892857D01*
X181327678Y-88964285D01*
X181899107Y-88964285D01*
X180541964Y-88178571D02*
X179541964Y-89678571D01*
X179541964Y-88178571D02*
X180541964Y-89678571D01*
X179184821Y-88178571D02*
X178327678Y-88178571D01*
X178756250Y-89678571D02*
X178756250Y-88178571D01*
X177970535Y-88178571D02*
X176970535Y-89678571D01*
X176970535Y-88178571D02*
X177970535Y-89678571D01*
X181113392Y-90875000D02*
X181256250Y-90803571D01*
X181470535Y-90803571D01*
X181684821Y-90875000D01*
X181827678Y-91017857D01*
X181899107Y-91160714D01*
X181970535Y-91446428D01*
X181970535Y-91660714D01*
X181899107Y-91946428D01*
X181827678Y-92089285D01*
X181684821Y-92232142D01*
X181470535Y-92303571D01*
X181327678Y-92303571D01*
X181113392Y-92232142D01*
X181041964Y-92160714D01*
X181041964Y-91660714D01*
X181327678Y-91660714D01*
X180399107Y-92303571D02*
X180399107Y-90803571D01*
X179541964Y-92303571D01*
X179541964Y-90803571D01*
X178827678Y-92303571D02*
X178827678Y-90803571D01*
X178470535Y-90803571D01*
X178256250Y-90875000D01*
X178113392Y-91017857D01*
X178041964Y-91160714D01*
X177970535Y-91446428D01*
X177970535Y-91660714D01*
X178041964Y-91946428D01*
X178113392Y-92089285D01*
X178256250Y-92232142D01*
X178470535Y-92303571D01*
X178827678Y-92303571D01*
D13*
G36*
X164873000Y-87373000D02*
X154627000Y-87373000D01*
X154627000Y-83127000D01*
X164873000Y-83127000D01*
X164873000Y-87373000D01*
X164873000Y-87373000D01*
G37*
X164873000Y-87373000D02*
X154627000Y-87373000D01*
X154627000Y-83127000D01*
X164873000Y-83127000D01*
X164873000Y-87373000D01*
%LPC*%
D14*
X175640000Y-81600000D03*
D15*
X173100000Y-81600000D03*
X170560000Y-81600000D03*
D16*
X184000000Y-86460000D03*
D17*
X184000000Y-89000000D03*
X184000000Y-91540000D03*
D18*
X152900000Y-88350000D03*
X152900000Y-90350000D03*
X152900000Y-92850000D03*
X152900000Y-85850000D03*
D19*
X150800000Y-83500000D03*
X150800000Y-95200000D03*
D20*
X150800000Y-87100000D03*
X150800000Y-91600000D03*
M02*

View File

@@ -0,0 +1,571 @@
G04 #@! TF.FileFunction,Copper,L1,Top,Signal*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (2016-07-14 BZR 6980)-product) date Sunday, 23 April 2017 'PMt' 23:49:01*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
%ADD11R,0.800000X0.750000*%
%ADD12R,0.750000X0.800000*%
%ADD13R,1.198880X1.198880*%
%ADD14R,1.727200X2.032000*%
%ADD15O,1.727200X2.032000*%
%ADD16R,0.500000X0.900000*%
%ADD17R,0.450000X1.750000*%
%ADD18R,1.060000X0.650000*%
%ADD19R,2.032000X1.727200*%
%ADD20O,2.032000X1.727200*%
%ADD21R,0.900000X0.500000*%
%ADD22C,1.300000*%
%ADD23C,2.800000*%
%ADD24C,0.685800*%
%ADD25C,0.800000*%
%ADD26C,0.500000*%
%ADD27C,0.300000*%
%ADD28C,0.400000*%
%ADD29C,0.800000*%
%ADD30C,0.250000*%
%ADD31C,0.180000*%
%ADD32C,0.160000*%
G04 APERTURE END LIST*
D10*
D11*
X165350000Y-82700000D03*
X163850000Y-82700000D03*
X162350000Y-82700000D03*
X160850000Y-82700000D03*
D12*
X172700000Y-87350000D03*
X172700000Y-88850000D03*
D11*
X181100000Y-90600000D03*
X179600000Y-90600000D03*
D13*
X168800000Y-94500000D03*
X168800000Y-96598040D03*
X170800000Y-94500000D03*
X170800000Y-96598040D03*
X172800000Y-94500000D03*
X172800000Y-96598040D03*
D14*
X175640000Y-81600000D03*
D15*
X173100000Y-81600000D03*
X170560000Y-81600000D03*
D16*
X181100000Y-89000000D03*
X179600000Y-89000000D03*
X179600000Y-87300000D03*
X181100000Y-87300000D03*
D17*
X156775000Y-92600000D03*
X157425000Y-92600000D03*
X158075000Y-92600000D03*
X158725000Y-92600000D03*
X159375000Y-92600000D03*
X160025000Y-92600000D03*
X160675000Y-92600000D03*
X161325000Y-92600000D03*
X161975000Y-92600000D03*
X162625000Y-92600000D03*
X163275000Y-92600000D03*
X163925000Y-92600000D03*
X164575000Y-92600000D03*
X165225000Y-92600000D03*
X165225000Y-85400000D03*
X164575000Y-85400000D03*
X163925000Y-85400000D03*
X163275000Y-85400000D03*
X162625000Y-85400000D03*
X161975000Y-85400000D03*
X161325000Y-85400000D03*
X160675000Y-85400000D03*
X160025000Y-85400000D03*
X159375000Y-85400000D03*
X158725000Y-85400000D03*
X158075000Y-85400000D03*
X157425000Y-85400000D03*
X156775000Y-85400000D03*
D18*
X175000000Y-87150000D03*
X175000000Y-88100000D03*
X175000000Y-89050000D03*
X177200000Y-89050000D03*
X177200000Y-87150000D03*
D19*
X184000000Y-86460000D03*
D20*
X184000000Y-89000000D03*
X184000000Y-91540000D03*
D13*
X174900000Y-94501960D03*
X174900000Y-96600000D03*
D11*
X159000000Y-94600000D03*
X160500000Y-94600000D03*
X162350000Y-81100000D03*
X160850000Y-81100000D03*
D21*
X171150000Y-88600000D03*
X171150000Y-90100000D03*
X169550000Y-88600000D03*
X169550000Y-90100000D03*
X168800000Y-91300000D03*
X168800000Y-92800000D03*
X170800000Y-91300000D03*
X170800000Y-92800000D03*
X172800000Y-91300000D03*
X172800000Y-92800000D03*
X174900000Y-91300000D03*
X174900000Y-92800000D03*
X176600000Y-91300000D03*
X176600000Y-92800000D03*
D22*
X152900000Y-88350000D03*
X152900000Y-90350000D03*
X152900000Y-92850000D03*
X152900000Y-85850000D03*
D23*
X150800000Y-83500000D03*
X150800000Y-95200000D03*
D24*
X173700000Y-89200000D03*
X162300004Y-87000000D03*
X159600000Y-82700000D03*
X161700000Y-94600000D03*
X176200000Y-96600000D03*
X179600000Y-91700000D03*
X158100000Y-83900000D03*
X168600000Y-89399998D03*
X167200000Y-85000000D03*
X159600000Y-81100000D03*
X163800000Y-81100000D03*
D25*
X159300000Y-87400000D03*
X167300000Y-96600000D03*
X167300000Y-94500000D03*
X160900000Y-87400000D03*
D24*
X174900000Y-90299999D03*
X174900000Y-85300000D03*
D25*
X166500002Y-90900000D03*
X177200000Y-90200000D03*
X168000000Y-87400000D03*
X173800000Y-87400000D03*
D24*
X154500000Y-89792900D03*
X154500000Y-88907100D03*
D26*
X165325000Y-82700000D02*
X165325000Y-83475000D01*
X165325000Y-83475000D02*
X164900000Y-83900000D01*
X164900000Y-83900000D02*
X164250677Y-83900000D01*
X163947598Y-84375049D02*
X163927410Y-84395237D01*
X164250677Y-83900000D02*
X163947598Y-84203079D01*
X163947598Y-84203079D02*
X163947598Y-84375049D01*
X163927410Y-84395237D02*
X163927410Y-85400000D01*
D27*
X165325000Y-82700000D02*
X165325000Y-82826415D01*
D26*
X165350000Y-82700000D02*
X165325000Y-82700000D01*
X172700000Y-88850000D02*
X173350000Y-88850000D01*
X173350000Y-88850000D02*
X173700000Y-89200000D01*
X175000000Y-89050000D02*
X173850000Y-89050000D01*
X173850000Y-89050000D02*
X173700000Y-89200000D01*
X175000000Y-88100000D02*
X175000000Y-89050000D01*
X163850000Y-82700000D02*
X163850000Y-83378030D01*
X163850000Y-83378030D02*
X163295188Y-83932842D01*
X163275000Y-84125000D02*
X163295188Y-84104812D01*
X163295188Y-84104812D02*
X163295188Y-83932842D01*
X163275000Y-85400000D02*
X163275000Y-84125000D01*
X160850000Y-82700000D02*
X160850000Y-83575000D01*
X160850000Y-83575000D02*
X160875000Y-83600000D01*
X160875000Y-83600000D02*
X160900000Y-83600000D01*
X161325000Y-85400000D02*
X161325000Y-84025000D01*
X161325000Y-84025000D02*
X160900000Y-83600000D01*
X160675000Y-92600000D02*
X160675000Y-93800000D01*
X160500000Y-94600000D02*
X160500000Y-93975000D01*
X160500000Y-93975000D02*
X160675000Y-93800000D01*
X163275000Y-85400000D02*
X163275000Y-86509937D01*
X163275000Y-86509937D02*
X162784937Y-87000000D01*
X162784937Y-87000000D02*
X162300004Y-87000000D01*
X161325000Y-86509929D02*
X161815071Y-87000000D01*
X161325000Y-85400000D02*
X161325000Y-86509929D01*
X161815071Y-87000000D02*
X162300004Y-87000000D01*
X159700000Y-82700000D02*
X159600000Y-82700000D01*
X160850000Y-82700000D02*
X159700000Y-82700000D01*
X160850000Y-82700000D02*
X160850000Y-81100000D01*
X160500000Y-94600000D02*
X161700000Y-94600000D01*
X158075000Y-85400000D02*
X158075000Y-83925000D01*
X158075000Y-83925000D02*
X158100000Y-83900000D01*
X158075000Y-85400000D02*
X158725000Y-85400000D01*
X179600000Y-90600000D02*
X179600000Y-91700000D01*
X174900000Y-96600000D02*
X176200000Y-96600000D01*
X172800000Y-96598040D02*
X174898040Y-96598040D01*
X174898040Y-96598040D02*
X174900000Y-96600000D01*
X169250000Y-85000000D02*
X170560000Y-83690000D01*
X170560000Y-83690000D02*
X170560000Y-81600000D01*
X167200000Y-85000000D02*
X169250000Y-85000000D01*
X168600000Y-90500000D02*
X168600000Y-89399998D01*
X168800000Y-91300000D02*
X168800000Y-90700000D01*
X168800000Y-90700000D02*
X168600000Y-90500000D01*
D28*
X170500000Y-88600000D02*
X171150000Y-88600000D01*
D26*
X169550000Y-88600000D02*
X170500000Y-88600000D01*
X168600000Y-89399998D02*
X168750002Y-89399998D01*
X168750002Y-89399998D02*
X169550000Y-88600000D01*
X162350000Y-82700000D02*
X162350000Y-83575000D01*
X162350000Y-83575000D02*
X161977410Y-83947590D01*
X161977410Y-83947590D02*
X161977410Y-85400000D01*
D29*
X162350000Y-81100000D02*
X163800000Y-81100000D01*
D30*
X174222599Y-89677401D02*
X175726921Y-89677401D01*
X175726921Y-89677401D02*
X176250000Y-89154322D01*
X176250000Y-89154322D02*
X176250000Y-88675000D01*
X176250000Y-88675000D02*
X177200000Y-87725000D01*
X177200000Y-87725000D02*
X177200000Y-87150000D01*
D26*
X177200000Y-87150000D02*
X179450000Y-87150000D01*
X179450000Y-87150000D02*
X179600000Y-87300000D01*
X159000000Y-94600000D02*
X159000000Y-94000000D01*
X159000000Y-94000000D02*
X158725000Y-93725000D01*
X158725000Y-93725000D02*
X158725000Y-92600000D01*
D28*
X174222599Y-89677401D02*
X173800000Y-90100000D01*
X159600000Y-96600000D02*
X159000000Y-96000000D01*
D27*
X181100000Y-87300000D02*
X181100000Y-89000000D01*
X181100000Y-90600000D02*
X181100000Y-89000000D01*
X181100000Y-89000000D02*
X184000000Y-89000000D01*
D26*
X168800000Y-94500000D02*
X168800000Y-92800000D01*
X168800000Y-96598040D02*
X167301960Y-96598040D01*
X167301960Y-96598040D02*
X167300000Y-96600000D01*
D27*
X159300000Y-87400000D02*
X160025000Y-86675000D01*
X160025000Y-86675000D02*
X160025000Y-85400000D01*
D26*
X170800000Y-92800000D02*
X170800000Y-94500000D01*
X167300000Y-94500000D02*
X167300000Y-95065685D01*
X167300000Y-95065685D02*
X167734314Y-95499999D01*
X167734314Y-95499999D02*
X167876797Y-95499999D01*
X167876797Y-95499999D02*
X167878639Y-95501841D01*
X167878639Y-95501841D02*
X170603241Y-95501841D01*
X170603241Y-95501841D02*
X170800000Y-95698600D01*
X170800000Y-95698600D02*
X170800000Y-96598040D01*
D27*
X160675000Y-85400000D02*
X160675000Y-86400000D01*
X160900000Y-86900000D02*
X160675000Y-86675000D01*
X160675000Y-86675000D02*
X160675000Y-86400000D01*
X160900000Y-87400000D02*
X160900000Y-86900000D01*
D26*
X172800000Y-92800000D02*
X172800000Y-94500000D01*
D27*
X175640000Y-81600000D02*
X175640000Y-84560000D01*
X175640000Y-84560000D02*
X174900000Y-85300000D01*
D26*
X176600000Y-91300000D02*
X175599999Y-90299999D01*
X175599999Y-90299999D02*
X174900000Y-90299999D01*
D29*
X175640000Y-81600000D02*
X180803600Y-81600000D01*
X180803600Y-81600000D02*
X184000000Y-84796400D01*
X184000000Y-84796400D02*
X184000000Y-86460000D01*
D26*
X174900000Y-92800000D02*
X174900000Y-94501960D01*
D27*
X165934317Y-90900000D02*
X166500002Y-90900000D01*
X159900000Y-90900000D02*
X165934317Y-90900000D01*
X159375000Y-91425000D02*
X159900000Y-90900000D01*
X159375000Y-92600000D02*
X159375000Y-91425000D01*
X177200000Y-90200000D02*
X177200000Y-89050000D01*
X177200000Y-89050000D02*
X179550000Y-89050000D01*
X179550000Y-89050000D02*
X179600000Y-89000000D01*
X166000000Y-89400000D02*
X167600001Y-87799999D01*
X158400000Y-89400000D02*
X166000000Y-89400000D01*
X167600001Y-87799999D02*
X168000000Y-87400000D01*
X156775000Y-91025000D02*
X158400000Y-89400000D01*
X175000000Y-87150000D02*
X174050000Y-87150000D01*
X174050000Y-87150000D02*
X173800000Y-87400000D01*
X156775000Y-91025000D02*
X156800000Y-91000000D01*
X156775000Y-92600000D02*
X156775000Y-91025000D01*
D26*
X169550000Y-90100000D02*
X169600000Y-90100000D01*
X169600000Y-90100000D02*
X170800000Y-91300000D01*
X174900000Y-91300000D02*
X175100000Y-91300000D01*
X175100000Y-91300000D02*
X176600000Y-92800000D01*
X171150000Y-90100000D02*
X171600000Y-90100000D01*
X171600000Y-90100000D02*
X172800000Y-91300000D01*
D27*
X154500000Y-89792900D02*
X154342900Y-89792900D01*
X154342900Y-89792900D02*
X152900000Y-88350000D01*
X157560197Y-89599999D02*
X154692901Y-89599999D01*
X154692901Y-89599999D02*
X154500000Y-89792900D01*
X165225000Y-86712500D02*
X165150000Y-86787500D01*
X165225000Y-85400000D02*
X165225000Y-86712500D01*
X165150000Y-86787500D02*
X165150000Y-87703552D01*
X165150000Y-87703552D02*
X163905962Y-88947590D01*
X163905962Y-88947590D02*
X158212605Y-88947591D01*
X158212605Y-88947591D02*
X157560197Y-89599999D01*
X157353101Y-89100001D02*
X154692901Y-89100001D01*
X154692901Y-89100001D02*
X154500000Y-88907100D01*
X164650000Y-86787500D02*
X164650000Y-87496448D01*
X158005501Y-88447601D02*
X157353101Y-89100001D01*
X164575000Y-85400000D02*
X164575000Y-86712500D01*
X164575000Y-86712500D02*
X164650000Y-86787500D01*
X164650000Y-87496448D02*
X163698847Y-88447601D01*
X163698847Y-88447601D02*
X158005501Y-88447601D01*
D31*
G36*
X161443040Y-80386260D02*
X161404451Y-80479422D01*
X161363152Y-80451826D01*
X161250000Y-80429319D01*
X160450000Y-80429319D01*
X160336848Y-80451826D01*
X160240922Y-80515922D01*
X160176826Y-80611848D01*
X160154319Y-80725000D01*
X160154319Y-81475000D01*
X160176826Y-81588152D01*
X160240922Y-81684078D01*
X160310000Y-81730235D01*
X160310000Y-82069765D01*
X160240922Y-82115922D01*
X160211470Y-82160000D01*
X159949905Y-82160000D01*
X159726444Y-82067210D01*
X159474661Y-82066991D01*
X159241959Y-82163141D01*
X159063767Y-82341023D01*
X158967210Y-82573556D01*
X158966991Y-82825339D01*
X159063141Y-83058041D01*
X159241023Y-83236233D01*
X159473556Y-83332790D01*
X159725339Y-83333009D01*
X159950439Y-83240000D01*
X160211470Y-83240000D01*
X160240922Y-83284078D01*
X160310000Y-83330235D01*
X160310000Y-83575000D01*
X160351105Y-83781649D01*
X160468162Y-83956838D01*
X160493160Y-83981835D01*
X160493162Y-83981838D01*
X160568503Y-84032179D01*
X160765644Y-84229319D01*
X160450000Y-84229319D01*
X160350000Y-84249210D01*
X160250000Y-84229319D01*
X159800000Y-84229319D01*
X159700000Y-84249210D01*
X159600000Y-84229319D01*
X159150000Y-84229319D01*
X159050000Y-84249210D01*
X158950000Y-84229319D01*
X158648548Y-84229319D01*
X158732790Y-84026444D01*
X172906000Y-81774000D01*
X172906000Y-81426000D01*
X172926000Y-81426000D01*
X172926000Y-81406000D01*
X173274000Y-81406000D01*
X173274000Y-81426000D01*
X173274000Y-81426000D01*
G37*
X173274000Y-81426000D02*
X180070000Y-89624732D01*
X180070000Y-89953439D01*
X180000000Y-89939515D01*
X179200000Y-89939515D01*
X179090750Y-89961246D01*
X178998132Y-90023132D01*
X178936246Y-90115750D01*
X172926000Y-81774000D01*
X172906000Y-81774000D01*
X172906000Y-81426000D01*
X172926000Y-81426000D01*
X172926000Y-81406000D01*
X173274000Y-81406000D01*
X173274000Y-81426000D01*
D31*
G36*
X181810000Y-87900000D02*
X181816851Y-87934442D01*
X181836360Y-87963640D01*
X181865558Y-87983149D01*
X181900000Y-87990000D01*
X185210000Y-87990000D01*
X185210000Y-89910000D01*
X182100000Y-89910000D01*
X182065558Y-89916851D01*
X182036360Y-89936360D01*
X182016851Y-89965558D01*
X182010000Y-90000000D01*
X182010000Y-91310000D01*
X180490000Y-91310000D01*
X180490000Y-86190000D01*
X181810000Y-86190000D01*
X181810000Y-87900000D01*
X181810000Y-87900000D01*
G37*
X181810000Y-87900000D02*
X181816851Y-87934442D01*
X181836360Y-87963640D01*
X181865558Y-87983149D01*
X181900000Y-87990000D01*
X185210000Y-87990000D01*
X185210000Y-89910000D01*
X182100000Y-89910000D01*
X182065558Y-89916851D01*
X182036360Y-89936360D01*
X182016851Y-89965558D01*
X182010000Y-90000000D01*
X182010000Y-91310000D01*
X180490000Y-91310000D01*
X180490000Y-86190000D01*
X181810000Y-86190000D01*
X181810000Y-87900000D01*
M02*

View File

@@ -0,0 +1,128 @@
G04 #@! TF.FileFunction,Soldermask,Top*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (2016-07-14 BZR 6980)-product) date Sunday, 23 April 2017 'PMt' 23:49:01*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
%ADD11R,0.800000X0.750000*%
%ADD12R,0.750000X0.800000*%
%ADD13R,1.198880X1.198880*%
%ADD14R,1.727200X2.032000*%
%ADD15O,1.727200X2.032000*%
%ADD16R,0.500000X0.900000*%
%ADD17R,0.450000X1.750000*%
%ADD18R,1.060000X0.650000*%
%ADD19R,2.032000X1.727200*%
%ADD20O,2.032000X1.727200*%
%ADD21R,0.900000X0.500000*%
%ADD22C,1.300000*%
%ADD23C,2.800000*%
%ADD24C,1.200000*%
G04 APERTURE END LIST*
D10*
D11*
X165350000Y-82700000D03*
X163850000Y-82700000D03*
X162350000Y-82700000D03*
X160850000Y-82700000D03*
D12*
X172700000Y-87350000D03*
X172700000Y-88850000D03*
D11*
X181100000Y-90600000D03*
X179600000Y-90600000D03*
D13*
X168800000Y-94500000D03*
X168800000Y-96598040D03*
X170800000Y-94500000D03*
X170800000Y-96598040D03*
X172800000Y-94500000D03*
X172800000Y-96598040D03*
D14*
X175640000Y-81600000D03*
D15*
X173100000Y-81600000D03*
X170560000Y-81600000D03*
D16*
X181100000Y-89000000D03*
X179600000Y-89000000D03*
X179600000Y-87300000D03*
X181100000Y-87300000D03*
D17*
X156775000Y-92600000D03*
X157425000Y-92600000D03*
X158075000Y-92600000D03*
X158725000Y-92600000D03*
X159375000Y-92600000D03*
X160025000Y-92600000D03*
X160675000Y-92600000D03*
X161325000Y-92600000D03*
X161975000Y-92600000D03*
X162625000Y-92600000D03*
X163275000Y-92600000D03*
X163925000Y-92600000D03*
X164575000Y-92600000D03*
X165225000Y-92600000D03*
X165225000Y-85400000D03*
X164575000Y-85400000D03*
X163925000Y-85400000D03*
X163275000Y-85400000D03*
X162625000Y-85400000D03*
X161975000Y-85400000D03*
X161325000Y-85400000D03*
X160675000Y-85400000D03*
X160025000Y-85400000D03*
X159375000Y-85400000D03*
X158725000Y-85400000D03*
X158075000Y-85400000D03*
X157425000Y-85400000D03*
X156775000Y-85400000D03*
D18*
X175000000Y-87150000D03*
X175000000Y-88100000D03*
X175000000Y-89050000D03*
X177200000Y-89050000D03*
X177200000Y-87150000D03*
D19*
X184000000Y-86460000D03*
D20*
X184000000Y-89000000D03*
X184000000Y-91540000D03*
D13*
X174900000Y-94501960D03*
X174900000Y-96600000D03*
D11*
X159000000Y-94600000D03*
X160500000Y-94600000D03*
X162350000Y-81100000D03*
X160850000Y-81100000D03*
D21*
X171150000Y-88600000D03*
X171150000Y-90100000D03*
X169550000Y-88600000D03*
X169550000Y-90100000D03*
X168800000Y-91300000D03*
X168800000Y-92800000D03*
X170800000Y-91300000D03*
X170800000Y-92800000D03*
X172800000Y-91300000D03*
X172800000Y-92800000D03*
X174900000Y-91300000D03*
X174900000Y-92800000D03*
X176600000Y-91300000D03*
X176600000Y-92800000D03*
D22*
X152900000Y-88350000D03*
X152900000Y-90350000D03*
X152900000Y-92850000D03*
X152900000Y-85850000D03*
D23*
X150800000Y-83500000D03*
X150800000Y-95200000D03*
D24*
X150800000Y-87100000D03*
X150800000Y-91600000D03*
M02*

View File

@@ -0,0 +1,12 @@
G04 #@! TF.FileFunction,Paste,Top*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (2016-07-14 BZR 6980)-product) date Sunday, 23 April 2017 'PMt' 23:49:01*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
G04 APERTURE END LIST*
D10*
M02*

View File

@@ -0,0 +1,255 @@
G04 #@! TF.FileFunction,Legend,Top*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (2016-07-14 BZR 6980)-product) date Sunday, 23 April 2017 'PMt' 23:49:01*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
%ADD11C,0.200000*%
%ADD12C,0.500000*%
%ADD13C,0.175000*%
%ADD14C,0.120000*%
%ADD15R,0.800000X0.750000*%
%ADD16R,0.750000X0.800000*%
%ADD17R,1.198880X1.198880*%
%ADD18R,1.727200X2.032000*%
%ADD19O,1.727200X2.032000*%
%ADD20R,0.500000X0.900000*%
%ADD21R,0.450000X1.750000*%
%ADD22R,1.060000X0.650000*%
%ADD23R,2.032000X1.727200*%
%ADD24O,2.032000X1.727200*%
%ADD25R,0.900000X0.500000*%
%ADD26C,1.300000*%
%ADD27C,2.800000*%
%ADD28C,1.200000*%
G04 APERTURE END LIST*
D10*
D11*
X181000000Y-96250000D02*
X181000000Y-96750000D01*
X180750000Y-96500000D02*
X181250000Y-96500000D01*
X180750000Y-97250000D02*
X181250000Y-97250000D01*
D12*
X156000000Y-92800000D02*
G75*
G03X156000000Y-92800000I-200000J0D01*
G01*
D13*
X174800000Y-84116666D02*
X174800000Y-83416666D01*
X174966666Y-83416666D01*
X175066666Y-83450000D01*
X175133333Y-83516666D01*
X175166666Y-83583333D01*
X175200000Y-83716666D01*
X175200000Y-83816666D01*
X175166666Y-83950000D01*
X175133333Y-84016666D01*
X175066666Y-84083333D01*
X174966666Y-84116666D01*
X174800000Y-84116666D01*
X175500000Y-83750000D02*
X175733333Y-83750000D01*
X157483333Y-97316666D02*
X161783333Y-96816666D01*
X162450000Y-97116666D02*
X162783333Y-97116666D01*
X162383333Y-97316666D02*
X162616666Y-96616666D01*
X162850000Y-97316666D01*
D10*
X164950000Y-83300000D02*
X164250000Y-83300000D01*
X164250000Y-82100000D02*
X164950000Y-82100000D01*
X161950000Y-83300000D02*
X161250000Y-83300000D01*
X161250000Y-82100000D02*
X161950000Y-82100000D01*
X173300000Y-87750000D02*
X173300000Y-88450000D01*
X172100000Y-88450000D02*
X172100000Y-87750000D01*
X180700000Y-91200000D02*
X180000000Y-91200000D01*
X180000000Y-90000000D02*
X180700000Y-90000000D01*
X169550000Y-97149020D02*
X169550000Y-94449020D01*
X168050000Y-97149020D02*
X168050000Y-94449020D01*
X168950000Y-95649020D02*
X168700000Y-95649020D01*
X168700000Y-95649020D02*
X168850000Y-95799020D01*
X168450000Y-95899020D02*
X169150000Y-95899020D01*
X168800000Y-95549020D02*
X168800000Y-95199020D01*
X168800000Y-95899020D02*
X168450000Y-95549020D01*
X168450000Y-95549020D02*
X169150000Y-95549020D01*
X169150000Y-95549020D02*
X168800000Y-95899020D01*
X171550000Y-97149020D02*
X171550000Y-94449020D01*
X170050000Y-97149020D02*
X170050000Y-94449020D01*
X170950000Y-95649020D02*
X170700000Y-95649020D01*
X170700000Y-95649020D02*
X170850000Y-95799020D01*
X170450000Y-95899020D02*
X171150000Y-95899020D01*
X170800000Y-95549020D02*
X170800000Y-95199020D01*
X175900000Y-86400000D02*
G75*
G03X175900000Y-86400000I-100000J0D01*
G01*
X176350000Y-86650000D02*
X175850000Y-86650000D01*
X176350000Y-89550000D02*
X176350000Y-86650000D01*
X175850000Y-89550000D02*
X176350000Y-89550000D01*
X175850000Y-86650000D02*
X175850000Y-89550000D01*
X182730000Y-87730000D02*
X182730000Y-92810000D01*
X182730000Y-92810000D02*
X185270000Y-92810000D01*
X185270000Y-92810000D02*
X185270000Y-87730000D01*
X185550000Y-84910000D02*
X185550000Y-86460000D01*
X185270000Y-87730000D02*
X182730000Y-87730000D01*
X175580000Y-92550000D01*
X175920000Y-92550000D02*
X175920000Y-91550000D01*
X177280000Y-91550000D02*
X177280000Y-92550000D01*
D10*
X148000000Y-95350000D02*
X148000000Y-83350000D01*
X134100000Y-83350000D02*
X152800000Y-83350000D01*
X134100000Y-95350000D02*
X134100000Y-83350000D01*
X152900000Y-95350000D02*
X141352380Y-88850000D02*
X140352380Y-88850000D01*
X140495238Y-88945238D01*
X140590476Y-89040476D01*
X140638095Y-89135714D01*
%LPC*%
D15*
X165350000Y-82700000D03*
X163850000Y-82700000D03*
X162350000Y-82700000D03*
X160850000Y-82700000D03*
D16*
X172700000Y-87350000D03*
X172700000Y-88850000D03*
D15*
X181100000Y-90600000D03*
X179600000Y-90600000D03*
D17*
X168800000Y-94500000D03*
X168800000Y-96598040D03*
X170800000Y-94500000D03*
X170800000Y-96598040D03*
X172800000Y-94500000D03*
X172800000Y-96598040D03*
D18*
X175640000Y-81600000D03*
D19*
X173100000Y-81600000D03*
X170560000Y-81600000D03*
D20*
X181100000Y-89000000D03*
X179600000Y-89000000D03*
X179600000Y-87300000D03*
X181100000Y-87300000D03*
D21*
X156775000Y-92600000D03*
X157425000Y-92600000D03*
X158075000Y-92600000D03*
X158725000Y-92600000D03*
X159375000Y-92600000D03*
X160025000Y-92600000D03*
X160675000Y-92600000D03*
X161325000Y-92600000D03*
X161975000Y-92600000D03*
X162625000Y-92600000D03*
X163275000Y-92600000D03*
X163925000Y-92600000D03*
X164575000Y-92600000D03*
X165225000Y-92600000D03*
X165225000Y-85400000D03*
X164575000Y-85400000D03*
X163925000Y-85400000D03*
X163275000Y-85400000D03*
X162625000Y-85400000D03*
X161975000Y-85400000D03*
X161325000Y-85400000D03*
X160675000Y-85400000D03*
X160025000Y-85400000D03*
X159375000Y-85400000D03*
X158725000Y-85400000D03*
X158075000Y-85400000D03*
X157425000Y-85400000D03*
X156775000Y-85400000D03*
D22*
X175000000Y-87150000D03*
X175000000Y-88100000D03*
X175000000Y-89050000D03*
X177200000Y-89050000D03*
X177200000Y-87150000D03*
D23*
X184000000Y-86460000D03*
D24*
X184000000Y-89000000D03*
X184000000Y-91540000D03*
D17*
X174900000Y-94501960D03*
X174900000Y-96600000D03*
D15*
X159000000Y-94600000D03*
X160500000Y-94600000D03*
X162350000Y-81100000D03*
X160850000Y-81100000D03*
D25*
X171150000Y-88600000D03*
X171150000Y-90100000D03*
X169550000Y-88600000D03*
X169550000Y-90100000D03*
X168800000Y-91300000D03*
X168800000Y-92800000D03*
X170800000Y-91300000D03*
X170800000Y-92800000D03*
X172800000Y-91300000D03*
X172800000Y-92800000D03*
X174900000Y-91300000D03*
X174900000Y-92800000D03*
X176600000Y-91300000D03*
X176600000Y-92800000D03*
D26*
X152900000Y-88350000D03*
X152900000Y-90350000D03*
X152900000Y-92850000D03*
X152900000Y-85850000D03*
D27*
X150800000Y-83500000D03*
X150800000Y-95200000D03*
D28*
X150800000Y-87100000D03*
X150800000Y-91600000D03*
M02*

View File

@@ -0,0 +1,60 @@
G04 #@! TF.FileFunction,Paste,Bot*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.4-stable) date 03/23/17 03:26:40*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.100000*%
%ADD11R,1.100000X2.400000*%
%ADD12O,1.100000X2.400000*%
%ADD13R,2.000000X2.032000*%
%ADD14R,1.727200X2.032000*%
G04 APERTURE END LIST*
D10*
D11*
X153000000Y-135000000D03*
D12*
X151000000Y-135000000D03*
X149000000Y-135000000D03*
X147000000Y-135000000D03*
X145000000Y-135000000D03*
X143000000Y-135000000D03*
X141000000Y-135000000D03*
X139000000Y-135000000D03*
X139000000Y-119000000D03*
X141000000Y-119000000D03*
X143000000Y-119000000D03*
X145000000Y-119000000D03*
X147000000Y-119000000D03*
X149000000Y-119000000D03*
X151000000Y-119000000D03*
X153000000Y-119000000D03*
D13*
X94500000Y-125500000D03*
X97040000Y-125500000D03*
X99580000Y-125500000D03*
X94500000Y-128500000D03*
X97040000Y-128500000D03*
X99580000Y-128500000D03*
X94500000Y-131500000D03*
X97040000Y-131500000D03*
X99580000Y-131500000D03*
X94500000Y-134500000D03*
X97040000Y-134500000D03*
X99580000Y-134500000D03*
X97040000Y-137500000D03*
X99580000Y-137500000D03*
D14*
X94500000Y-140500000D03*
D13*
X97040000Y-140500000D03*
X99580000Y-140500000D03*
X94500000Y-143500000D03*
X97040000Y-143500000D03*
X99580000Y-143500000D03*
X94500000Y-146500000D03*
X97040000Y-146500000D03*
X99580000Y-146500000D03*
M02*

View File

@@ -0,0 +1,26 @@
G04 MADE WITH FRITZING*
G04 WWW.FRITZING.ORG*
G04 DOUBLE SIDED*
G04 HOLES PLATED*
G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
%ASAXBY*%
%FSLAX23Y23*%
%MOIN*%
%OFA0B0*%
%SFA1.0B1.0*%
%ADD10R,1.267940X2.408830*%
%ADD11C,0.008000*%
%ADD10C,0.008*%
%LNCONTOUR*%
G90*
G70*
G54D10*
G54D11*
X4Y2405D02*
X1264Y2405D01*
X1264Y4D01*
X4Y4D01*
X4Y2405D01*
D02*
G04 End of contour*
M02*

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,210 @@
G04 #@! TF.FileFunction,Soldermask,Bot*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.6-e0-6349~53~ubuntu16.04.1) date Sat Jul 1 03:26:18 2017*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.100000*%
%ADD11C,0.150000*%
%ADD12C,2.000000*%
%ADD13O,2.000000X2.000000*%
%ADD14R,2.400000X1.924000*%
%ADD15O,2.400000X1.924000*%
%ADD16R,1.700000X1.700000*%
%ADD17C,1.700000*%
%ADD18C,2.398980*%
%ADD19R,2.300000X2.400000*%
%ADD20C,2.300000*%
%ADD21R,2.127200X2.127200*%
%ADD22O,2.127200X2.127200*%
%ADD23C,1.400760*%
%ADD24C,1.797000*%
%ADD25C,2.000200*%
G04 APERTURE END LIST*
D10*
D11*
X196250000Y-118000000D02*
X113000000Y-118000000D01*
X196250000Y-52750000D02*
X196250000Y-118000000D01*
X113000000Y-52750000D02*
X196250000Y-52750000D01*
X113000000Y-118000000D02*
X113000000Y-52750000D01*
D12*
X145400000Y-68800000D03*
D13*
X145400000Y-58640000D03*
D14*
X189230000Y-61468000D03*
D15*
X191770000Y-61468000D03*
X189230000Y-74168000D03*
X189230000Y-109728000D03*
X191770000Y-109728000D03*
X191770000Y-97028000D03*
D14*
X118110000Y-61468000D03*
D15*
X120650000Y-61468000D03*
X118110000Y-64008000D03*
X120650000Y-64008000D03*
X118110000Y-66548000D03*
X120650000Y-66548000D03*
X118110000Y-69088000D03*
X120650000Y-69088000D03*
X118110000Y-71628000D03*
X120650000Y-71628000D03*
X118110000Y-74168000D03*
X120650000Y-74168000D03*
X118110000Y-76708000D03*
X120650000Y-76708000D03*
X118110000Y-79248000D03*
X120650000Y-79248000D03*
X118110000Y-81788000D03*
X120650000Y-81788000D03*
X118110000Y-84328000D03*
X120650000Y-84328000D03*
X118110000Y-86868000D03*
X120650000Y-86868000D03*
X118110000Y-89408000D03*
X120650000Y-89408000D03*
X118110000Y-91948000D03*
X120650000Y-91948000D03*
X118110000Y-94488000D03*
X120650000Y-94488000D03*
X118110000Y-97028000D03*
X120650000Y-97028000D03*
X118110000Y-99568000D03*
X120650000Y-99568000D03*
X118110000Y-102108000D03*
X120650000Y-102108000D03*
X118110000Y-104648000D03*
X120650000Y-104648000D03*
X118110000Y-107188000D03*
X120650000Y-107188000D03*
X118110000Y-109728000D03*
X120650000Y-109728000D03*
D16*
X135255000Y-64008000D03*
D17*
X135255000Y-61508000D03*
D18*
X164465000Y-85471000D03*
X164465000Y-77851000D03*
D19*
X136017000Y-72644000D03*
D20*
X133477000Y-72644000D03*
D19*
X173863000Y-72644000D03*
D20*
X176403000Y-72644000D03*
D19*
X136017000Y-96139000D03*
D20*
X133477000Y-96139000D03*
D19*
X173863000Y-96012000D03*
D20*
X176403000Y-96012000D03*
D21*
X127007800Y-61542700D03*
D22*
X129547800Y-61542700D03*
X127007800Y-64082700D03*
X129547800Y-64082700D03*
D23*
X166243000Y-67056000D03*
X164973000Y-68326000D03*
X164973000Y-65786000D03*
X128143000Y-71374000D03*
X129413000Y-72644000D03*
X126873000Y-72644000D03*
X181737000Y-73914000D03*
X180467000Y-72644000D03*
X183007000Y-72644000D03*
X128143000Y-94742000D03*
X129413000Y-96012000D03*
X126873000Y-96012000D03*
X181737000Y-97282000D03*
X180467000Y-96012000D03*
X183007000Y-96012000D03*
D18*
X134239000Y-85344000D03*
X134239000Y-77724000D03*
X145415000Y-85344000D03*
X145415000Y-77724000D03*
X175641000Y-85217000D03*
X175641000Y-77597000D03*
X145415000Y-108966000D03*
X145415000Y-101346000D03*
X134239000Y-108458000D03*
X134239000Y-100838000D03*
X175641000Y-108585000D03*
X175641000Y-100965000D03*
X164465000Y-108839000D03*
X164465000Y-101219000D03*
X169164000Y-62611000D03*
X161544000Y-62611000D03*
X169164000Y-59563000D03*
X161544000Y-59563000D03*
X129921000Y-85217000D03*
X129921000Y-77597000D03*
X126365000Y-85217000D03*
X126365000Y-77597000D03*
X180086000Y-85217000D03*
X180086000Y-77597000D03*
X183515000Y-85217000D03*
X183515000Y-77597000D03*
X129921000Y-108458000D03*
X129921000Y-100838000D03*
X126365000Y-108458000D03*
X126365000Y-100838000D03*
X179959000Y-108585000D03*
X179959000Y-100965000D03*
X183515000Y-108585000D03*
X183515000Y-100965000D03*
D12*
X155000000Y-99000000D03*
D13*
X155000000Y-88840000D03*
D24*
X137287000Y-77724000D03*
X142367000Y-77724000D03*
X137287000Y-85344000D03*
X142367000Y-85344000D03*
X148463000Y-77724000D03*
X153543000Y-77724000D03*
X148463000Y-85344000D03*
X153543000Y-85344000D03*
X172593000Y-85344000D03*
X167513000Y-85344000D03*
X172593000Y-77724000D03*
X167513000Y-77724000D03*
X161417000Y-85344000D03*
X156337000Y-85344000D03*
X161417000Y-77724000D03*
X156337000Y-77724000D03*
X148463000Y-101219000D03*
X153543000Y-101219000D03*
X148463000Y-108839000D03*
X153543000Y-108839000D03*
X137287000Y-101219000D03*
X142367000Y-101219000D03*
X137287000Y-108839000D03*
X142367000Y-108839000D03*
X172593000Y-108712000D03*
X167513000Y-108712000D03*
X172593000Y-101092000D03*
X167513000Y-101092000D03*
X161417000Y-108712000D03*
X156337000Y-108712000D03*
X161417000Y-101092000D03*
X156337000Y-101092000D03*
D25*
X157178971Y-64124429D03*
X150828971Y-64124429D03*
M02*

View File

@@ -0,0 +1,22 @@
G04 #@! TF.FileFunction,Profile,NP*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.6-e0-6349~53~ubuntu16.04.1) date Sat Jul 1 03:26:18 2017*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.100000*%
%ADD11C,0.150000*%
G04 APERTURE END LIST*
D10*
D11*
X196250000Y-118000000D02*
X113000000Y-118000000D01*
X196250000Y-52750000D02*
X196250000Y-118000000D01*
X113000000Y-52750000D02*
X196250000Y-52750000D01*
X113000000Y-118000000D02*
X113000000Y-52750000D01*
M02*

View File

@@ -0,0 +1,287 @@
G04 #@! TF.FileFunction,Copper,L1,Top,Signal*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.6-e0-6349~53~ubuntu16.04.1) date Sat Jul 1 03:26:18 2017*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.100000*%
%ADD11C,0.150000*%
%ADD12C,1.600000*%
%ADD13O,1.600000X1.600000*%
%ADD14R,2.000000X1.524000*%
%ADD15O,2.000000X1.524000*%
%ADD16R,1.300000X1.300000*%
%ADD17C,1.300000*%
%ADD18C,1.998980*%
%ADD19R,1.900000X2.000000*%
%ADD20C,1.900000*%
%ADD21C,1.000000*%
%ADD22R,1.727200X1.727200*%
%ADD23O,1.727200X1.727200*%
%ADD24C,1.000760*%
%ADD25C,1.397000*%
%ADD26C,1.600200*%
%ADD27C,1.270000*%
%ADD28C,0.304800*%
G04 APERTURE END LIST*
D10*
D11*
X196250000Y-118000000D02*
X113000000Y-118000000D01*
X196250000Y-52750000D02*
X196250000Y-118000000D01*
X113000000Y-52750000D02*
X196250000Y-52750000D01*
X113000000Y-118000000D02*
X113000000Y-52750000D01*
D12*
X145400000Y-68800000D03*
D13*
X145400000Y-58640000D03*
D14*
X189230000Y-61468000D03*
D15*
X191770000Y-61468000D03*
X189230000Y-74168000D03*
X191770000Y-64008000D03*
X189230000Y-76708000D03*
X191770000Y-66548000D03*
X189230000Y-79248000D03*
X191770000Y-69088000D03*
X189230000Y-81788000D03*
X191770000Y-71628000D03*
X189230000Y-84328000D03*
X191770000Y-74168000D03*
X189230000Y-86868000D03*
X191770000Y-76708000D03*
X189230000Y-89408000D03*
X191770000Y-79248000D03*
X189230000Y-91948000D03*
X191770000Y-81788000D03*
X189230000Y-94488000D03*
X191770000Y-84328000D03*
X189230000Y-97028000D03*
X191770000Y-86868000D03*
X189230000Y-99568000D03*
X191770000Y-89408000D03*
X191770000Y-91948000D03*
X189230000Y-102108000D03*
X191770000Y-94488000D03*
X191770000Y-99568000D03*
X191770000Y-102108000D03*
X191770000Y-104648000D03*
X191770000Y-107188000D03*
X189230000Y-104648000D03*
X189230000Y-107188000D03*
X189230000Y-64008000D03*
X189230000Y-66548000D03*
X189230000Y-69088000D03*
X189230000Y-71628000D03*
X189230000Y-109728000D03*
X191770000Y-109728000D03*
X191770000Y-97028000D03*
D14*
X118110000Y-61468000D03*
D15*
X120650000Y-61468000D03*
X118110000Y-64008000D03*
X120650000Y-64008000D03*
X118110000Y-66548000D03*
X120650000Y-66548000D03*
X118110000Y-69088000D03*
X120650000Y-69088000D03*
X118110000Y-71628000D03*
X120650000Y-71628000D03*
X118110000Y-74168000D03*
X120650000Y-74168000D03*
X118110000Y-76708000D03*
X120650000Y-76708000D03*
X118110000Y-79248000D03*
X120650000Y-79248000D03*
X118110000Y-81788000D03*
X120650000Y-81788000D03*
X118110000Y-84328000D03*
X120650000Y-84328000D03*
X118110000Y-86868000D03*
X120650000Y-86868000D03*
X118110000Y-89408000D03*
X120650000Y-89408000D03*
X118110000Y-91948000D03*
X120650000Y-91948000D03*
X118110000Y-94488000D03*
X120650000Y-94488000D03*
X118110000Y-97028000D03*
X120650000Y-97028000D03*
X118110000Y-99568000D03*
X120650000Y-99568000D03*
X118110000Y-102108000D03*
X120650000Y-102108000D03*
X118110000Y-104648000D03*
X120650000Y-104648000D03*
X118110000Y-107188000D03*
X120650000Y-107188000D03*
X118110000Y-109728000D03*
X120650000Y-109728000D03*
D16*
X135255000Y-64008000D03*
D17*
X135255000Y-61508000D03*
D18*
X164465000Y-85471000D03*
X164465000Y-77851000D03*
D19*
X136017000Y-72644000D03*
D20*
X133477000Y-72644000D03*
D19*
X173863000Y-72644000D03*
D20*
X176403000Y-72644000D03*
D19*
X136017000Y-96139000D03*
D20*
X133477000Y-96139000D03*
D19*
X173863000Y-96012000D03*
D20*
X176403000Y-96012000D03*
D21*
X125250000Y-112250000D03*
X160500000Y-70500000D03*
X167250000Y-92250000D03*
D22*
X127007800Y-61542700D03*
D23*
X129547800Y-61542700D03*
X127007800Y-64082700D03*
X129547800Y-64082700D03*
D24*
X166243000Y-67056000D03*
X164973000Y-68326000D03*
X164973000Y-65786000D03*
X128143000Y-71374000D03*
X129413000Y-72644000D03*
X126873000Y-72644000D03*
X181737000Y-73914000D03*
X180467000Y-72644000D03*
X183007000Y-72644000D03*
X128143000Y-94742000D03*
X129413000Y-96012000D03*
X126873000Y-96012000D03*
X181737000Y-97282000D03*
X180467000Y-96012000D03*
X183007000Y-96012000D03*
D18*
X134239000Y-85344000D03*
X134239000Y-77724000D03*
X145415000Y-85344000D03*
X145415000Y-77724000D03*
X175641000Y-85217000D03*
X175641000Y-77597000D03*
X145415000Y-108966000D03*
X145415000Y-101346000D03*
X134239000Y-108458000D03*
X134239000Y-100838000D03*
X175641000Y-108585000D03*
X175641000Y-100965000D03*
X164465000Y-108839000D03*
X164465000Y-101219000D03*
X169164000Y-62611000D03*
X161544000Y-62611000D03*
X169164000Y-59563000D03*
X161544000Y-59563000D03*
X129921000Y-85217000D03*
X129921000Y-77597000D03*
X126365000Y-85217000D03*
X126365000Y-77597000D03*
X180086000Y-85217000D03*
X180086000Y-77597000D03*
X183515000Y-85217000D03*
X183515000Y-77597000D03*
X129921000Y-108458000D03*
X129921000Y-100838000D03*
X126365000Y-108458000D03*
X126365000Y-100838000D03*
X179959000Y-108585000D03*
X179959000Y-100965000D03*
X183515000Y-108585000D03*
X183515000Y-100965000D03*
D12*
X155000000Y-99000000D03*
D13*
X155000000Y-88840000D03*
D25*
X137287000Y-77724000D03*
X142367000Y-77724000D03*
X137287000Y-85344000D03*
X142367000Y-85344000D03*
X148463000Y-77724000D03*
X153543000Y-77724000D03*
X148463000Y-85344000D03*
X153543000Y-85344000D03*
X172593000Y-85344000D03*
X167513000Y-85344000D03*
X172593000Y-77724000D03*
X167513000Y-77724000D03*
X161417000Y-85344000D03*
X156337000Y-85344000D03*
X161417000Y-77724000D03*
X156337000Y-77724000D03*
X148463000Y-101219000D03*
X153543000Y-101219000D03*
X148463000Y-108839000D03*
X153543000Y-108839000D03*
X137287000Y-101219000D03*
X142367000Y-101219000D03*
X137287000Y-108839000D03*
X142367000Y-108839000D03*
X172593000Y-108712000D03*
X167513000Y-108712000D03*
X172593000Y-101092000D03*
X167513000Y-101092000D03*
X161417000Y-108712000D03*
X156337000Y-108712000D03*
X161417000Y-101092000D03*
X156337000Y-101092000D03*
D26*
X157178971Y-64124429D03*
X150828971Y-64124429D03*
D27*
X137287000Y-80137000D03*
X137287000Y-83439000D03*
X148336000Y-79629000D03*
X148463000Y-83185000D03*
X172593000Y-80137000D03*
X172593000Y-83312000D03*
X161417000Y-80010000D03*
X161417000Y-83439000D03*
X137287000Y-103505000D03*
X137287000Y-106680000D03*
X172593000Y-103378000D03*
X172593000Y-106934000D03*
X148463000Y-103505000D03*
X148463000Y-106934000D03*
X161417000Y-103759000D03*
X161417000Y-106934000D03*
D28*
X137287000Y-83439000D02*
X137287000Y-80137000D01*
X148336000Y-83058000D02*
X148336000Y-79629000D01*
X148463000Y-83185000D02*
X148336000Y-83058000D01*
X172593000Y-83312000D02*
X172593000Y-80137000D01*
X161417000Y-83439000D02*
X161417000Y-80010000D01*
X137287000Y-106680000D02*
X137287000Y-103505000D01*
X172593000Y-106934000D02*
X172593000Y-103378000D01*
X148463000Y-106934000D02*
X148463000Y-103505000D01*
X161417000Y-106934000D02*
X161417000Y-103759000D01*
M02*

View File

@@ -0,0 +1,249 @@
G04 #@! TF.FileFunction,Soldermask,Top*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.6-e0-6349~53~ubuntu16.04.1) date Sat Jul 1 03:26:18 2017*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.100000*%
%ADD11C,0.150000*%
%ADD12C,2.000000*%
%ADD13O,2.000000X2.000000*%
%ADD14R,2.400000X1.924000*%
%ADD15O,2.400000X1.924000*%
%ADD16R,1.700000X1.700000*%
%ADD17C,1.700000*%
%ADD18C,2.398980*%
%ADD19R,2.300000X2.400000*%
%ADD20C,2.300000*%
%ADD21C,4.000000*%
%ADD22R,2.127200X2.127200*%
%ADD23O,2.127200X2.127200*%
%ADD24C,1.400760*%
%ADD25C,1.797000*%
%ADD26C,2.000200*%
G04 APERTURE END LIST*
D10*
D11*
X196250000Y-118000000D02*
X113000000Y-118000000D01*
X196250000Y-52750000D02*
X196250000Y-118000000D01*
X113000000Y-52750000D02*
X196250000Y-52750000D01*
X113000000Y-118000000D02*
X113000000Y-52750000D01*
D12*
X145400000Y-68800000D03*
D13*
X145400000Y-58640000D03*
D14*
X189230000Y-61468000D03*
D15*
X191770000Y-61468000D03*
X189230000Y-74168000D03*
X191770000Y-64008000D03*
X189230000Y-76708000D03*
X191770000Y-66548000D03*
X189230000Y-79248000D03*
X191770000Y-69088000D03*
X189230000Y-81788000D03*
X191770000Y-71628000D03*
X189230000Y-84328000D03*
X191770000Y-74168000D03*
X189230000Y-86868000D03*
X191770000Y-76708000D03*
X189230000Y-89408000D03*
X191770000Y-79248000D03*
X189230000Y-91948000D03*
X191770000Y-81788000D03*
X189230000Y-94488000D03*
X191770000Y-84328000D03*
X189230000Y-97028000D03*
X191770000Y-86868000D03*
X189230000Y-99568000D03*
X191770000Y-89408000D03*
X191770000Y-91948000D03*
X189230000Y-102108000D03*
X191770000Y-94488000D03*
X191770000Y-99568000D03*
X191770000Y-102108000D03*
X191770000Y-104648000D03*
X191770000Y-107188000D03*
X189230000Y-104648000D03*
X189230000Y-107188000D03*
X189230000Y-64008000D03*
X189230000Y-66548000D03*
X189230000Y-69088000D03*
X189230000Y-71628000D03*
X189230000Y-109728000D03*
X191770000Y-109728000D03*
X191770000Y-97028000D03*
D14*
X118110000Y-61468000D03*
D15*
X120650000Y-61468000D03*
X118110000Y-64008000D03*
X120650000Y-64008000D03*
X118110000Y-66548000D03*
X120650000Y-66548000D03*
X118110000Y-69088000D03*
X120650000Y-69088000D03*
X118110000Y-71628000D03*
X120650000Y-71628000D03*
X118110000Y-74168000D03*
X120650000Y-74168000D03*
X118110000Y-76708000D03*
X120650000Y-76708000D03*
X118110000Y-79248000D03*
X120650000Y-79248000D03*
X118110000Y-81788000D03*
X120650000Y-81788000D03*
X118110000Y-84328000D03*
X120650000Y-84328000D03*
X118110000Y-86868000D03*
X120650000Y-86868000D03*
X118110000Y-89408000D03*
X120650000Y-89408000D03*
X118110000Y-91948000D03*
X120650000Y-91948000D03*
X118110000Y-94488000D03*
X120650000Y-94488000D03*
X118110000Y-97028000D03*
X120650000Y-97028000D03*
X118110000Y-99568000D03*
X120650000Y-99568000D03*
X118110000Y-102108000D03*
X120650000Y-102108000D03*
X118110000Y-104648000D03*
X120650000Y-104648000D03*
X118110000Y-107188000D03*
X120650000Y-107188000D03*
X118110000Y-109728000D03*
X120650000Y-109728000D03*
D16*
X135255000Y-64008000D03*
D17*
X135255000Y-61508000D03*
D18*
X164465000Y-85471000D03*
X164465000Y-77851000D03*
D19*
X136017000Y-72644000D03*
D20*
X133477000Y-72644000D03*
D19*
X173863000Y-72644000D03*
D20*
X176403000Y-72644000D03*
D19*
X136017000Y-96139000D03*
D20*
X133477000Y-96139000D03*
D19*
X173863000Y-96012000D03*
D20*
X176403000Y-96012000D03*
D21*
X125250000Y-112250000D03*
X160500000Y-70500000D03*
X167250000Y-92250000D03*
D22*
X127007800Y-61542700D03*
D23*
X129547800Y-61542700D03*
X127007800Y-64082700D03*
X129547800Y-64082700D03*
D24*
X166243000Y-67056000D03*
X164973000Y-68326000D03*
X164973000Y-65786000D03*
X128143000Y-71374000D03*
X129413000Y-72644000D03*
X126873000Y-72644000D03*
X181737000Y-73914000D03*
X180467000Y-72644000D03*
X183007000Y-72644000D03*
X128143000Y-94742000D03*
X129413000Y-96012000D03*
X126873000Y-96012000D03*
X181737000Y-97282000D03*
X180467000Y-96012000D03*
X183007000Y-96012000D03*
D18*
X134239000Y-85344000D03*
X134239000Y-77724000D03*
X145415000Y-85344000D03*
X145415000Y-77724000D03*
X175641000Y-85217000D03*
X175641000Y-77597000D03*
X145415000Y-108966000D03*
X145415000Y-101346000D03*
X134239000Y-108458000D03*
X134239000Y-100838000D03*
X175641000Y-108585000D03*
X175641000Y-100965000D03*
X164465000Y-108839000D03*
X164465000Y-101219000D03*
X169164000Y-62611000D03*
X161544000Y-62611000D03*
X169164000Y-59563000D03*
X161544000Y-59563000D03*
X129921000Y-85217000D03*
X129921000Y-77597000D03*
X126365000Y-85217000D03*
X126365000Y-77597000D03*
X180086000Y-85217000D03*
X180086000Y-77597000D03*
X183515000Y-85217000D03*
X183515000Y-77597000D03*
X129921000Y-108458000D03*
X129921000Y-100838000D03*
X126365000Y-108458000D03*
X126365000Y-100838000D03*
X179959000Y-108585000D03*
X179959000Y-100965000D03*
X183515000Y-108585000D03*
X183515000Y-100965000D03*
D12*
X155000000Y-99000000D03*
D13*
X155000000Y-88840000D03*
D25*
X137287000Y-77724000D03*
X142367000Y-77724000D03*
X137287000Y-85344000D03*
X142367000Y-85344000D03*
X148463000Y-77724000D03*
X153543000Y-77724000D03*
X148463000Y-85344000D03*
X153543000Y-85344000D03*
X172593000Y-85344000D03*
X167513000Y-85344000D03*
X172593000Y-77724000D03*
X167513000Y-77724000D03*
X161417000Y-85344000D03*
X156337000Y-85344000D03*
X161417000Y-77724000D03*
X156337000Y-77724000D03*
X148463000Y-101219000D03*
X153543000Y-101219000D03*
X148463000Y-108839000D03*
X153543000Y-108839000D03*
X137287000Y-101219000D03*
X142367000Y-101219000D03*
X137287000Y-108839000D03*
X142367000Y-108839000D03*
X172593000Y-108712000D03*
X167513000Y-108712000D03*
X172593000Y-101092000D03*
X167513000Y-101092000D03*
X161417000Y-108712000D03*
X156337000Y-108712000D03*
X161417000Y-101092000D03*
X156337000Y-101092000D03*
D26*
X157178971Y-64124429D03*
X150828971Y-64124429D03*
M02*

View File

@@ -0,0 +1,392 @@
G04 #@! TF.FileFunction,Legend,Top*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.6-e0-6349~53~ubuntu16.04.1) date Sat Jul 1 03:26:18 2017*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.100000*%
%ADD11C,0.150000*%
%ADD12C,0.187500*%
%ADD13C,0.125000*%
%ADD14C,0.300000*%
%ADD15C,0.120000*%
%ADD16C,0.002540*%
%ADD17C,0.200000*%
%ADD18C,0.170000*%
%ADD19C,0.175000*%
%ADD20C,0.180000*%
%ADD21C,0.190000*%
G04 APERTURE END LIST*
D10*
D11*
X196250000Y-118000000D02*
X113000000Y-118000000D01*
X196250000Y-52750000D02*
X196250000Y-118000000D01*
X113000000Y-52750000D02*
X196250000Y-52750000D01*
X113000000Y-118000000D02*
X113000000Y-52750000D01*
D12*
X171964285Y-68083333D02*
X123317001Y-106767381D01*
X123650334Y-106767381D02*
X123745572Y-106767381D01*
X123793191Y-106815000D01*
X123840810Y-106910238D01*
X123864619Y-107100714D01*
X123864619Y-107434048D01*
X123840810Y-107624524D01*
X123793191Y-107719762D01*
X123745572Y-107767381D01*
X123650334Y-107767381D01*
X123602715Y-107719762D01*
X123555096Y-107624524D01*
X123531286Y-107434048D01*
X123531286Y-107100714D01*
X123555096Y-106910238D01*
X123602715Y-106815000D01*
X123650334Y-106767381D01*
X124031287Y-106767381D02*
X196102429Y-69431810D01*
D13*
X193274334Y-66254381D02*
X193393381Y-67254381D01*
X193488619Y-66540095D01*
X193583857Y-67254381D01*
X193702905Y-66254381D01*
X193869572Y-66968667D02*
X194107667Y-66968667D01*
X193821953Y-67254381D02*
X193988620Y-66254381D01*
X194155286Y-67254381D01*
X194321953Y-67254381D02*
X194321953Y-66254381D01*
X194607667Y-67254381D02*
X194393381Y-66682952D01*
X194607667Y-66254381D02*
X194321953Y-66825810D01*
X194821953Y-66730571D02*
X194988619Y-66730571D01*
X195060048Y-67254381D02*
X194821953Y-67254381D01*
X194821953Y-66254381D01*
X195060048Y-66254381D01*
X195274334Y-66254381D02*
X195274334Y-67063905D01*
X195298143Y-67159143D01*
X195321953Y-67206762D01*
X195369572Y-67254381D01*
X195464810Y-67254381D01*
X195512429Y-67206762D01*
X195536238Y-67159143D01*
X195560048Y-67063905D01*
X195560048Y-66254381D01*
X195798144Y-67254381D02*
X195798144Y-66254381D01*
X195988620Y-66254381D01*
X196036239Y-66302000D01*
X196060048Y-66349619D01*
X196083858Y-66444857D01*
X196083858Y-66587714D01*
X196060048Y-66682952D01*
X196036239Y-66730571D01*
X195988620Y-66778190D01*
X195798144Y-66778190D01*
D17*
X193929096Y-64016000D02*
X193833858Y-63968381D01*
X193691001Y-63968381D01*
X193548143Y-64016000D01*
X193452905Y-64111238D01*
X193405286Y-64206476D01*
X193357667Y-64396952D01*
X193357667Y-64539810D01*
X193405286Y-64730286D01*
X193452905Y-64825524D01*
X193548143Y-64920762D01*
X193691001Y-64968381D01*
X193786239Y-64968381D01*
X193929096Y-64920762D01*
X193976715Y-64873143D01*
X193976715Y-64539810D01*
X193786239Y-64539810D01*
X194405286Y-64968381D02*
X194405286Y-63968381D01*
X194976715Y-64968381D01*
X194976715Y-63968381D01*
X195452905Y-64968381D02*
X195452905Y-63968381D01*
X195691000Y-63968381D01*
X195833858Y-64016000D01*
X195929096Y-64111238D01*
X195976715Y-64206476D01*
X196024334Y-64396952D01*
X196024334Y-64539810D01*
X195976715Y-64730286D01*
X195929096Y-64825524D01*
X195833858Y-64920762D01*
X195691000Y-64968381D01*
X195452905Y-64968381D01*
X193278286Y-61539429D02*
X194040191Y-61539429D01*
X193659239Y-61920381D02*
X193659239Y-61158476D01*
X194992572Y-60920381D02*
X194516381Y-60920381D01*
X194468762Y-61396571D01*
X194516381Y-61348952D01*
X194611619Y-61301333D01*
X194849715Y-61301333D01*
X194944953Y-61348952D01*
X194992572Y-61396571D01*
X186697905Y-84637524D01*
X186602667Y-84732762D01*
X186459809Y-84780381D01*
X186221714Y-84780381D01*
X187174095Y-84494667D02*
X187650286Y-84494667D01*
X187078857Y-84780381D02*
X187412190Y-83780381D01*
X187745524Y-84780381D01*
D13*
X185555048Y-81240381D02*
X185721715Y-82240381D01*
X185888381Y-81240381D01*
X186055048Y-82240381D02*
X186055048Y-81240381D01*
X186174095Y-81240381D01*
X186245524Y-81288000D01*
X186293143Y-81383238D01*
X186316952Y-81478476D01*
X186340762Y-81668952D01*
X186340762Y-81811810D01*
X186316952Y-82002286D01*
X186293143Y-82097524D01*
X186245524Y-82192762D01*
X186174095Y-82240381D01*
X186055048Y-82240381D01*
X186555048Y-82240381D02*
X186555048Y-81240381D01*
X186674095Y-81240381D01*
X186745524Y-81288000D01*
X186793143Y-81383238D01*
X186816952Y-81478476D01*
X186840762Y-81668952D01*
X186840762Y-81811810D01*
X186816952Y-82002286D01*
X186793143Y-82097524D01*
X186745524Y-82192762D01*
X186674095Y-82240381D01*
X186555048Y-82240381D01*
X187031238Y-81954667D02*
X187269333Y-81954667D01*
X186983619Y-82240381D02*
X187150286Y-81240381D01*
X187316952Y-82240381D01*
D17*
X185245524Y-79700381D02*
X185245524Y-78700381D01*
X185483619Y-78700381D01*
X185626477Y-78748000D01*
X185721715Y-78843238D01*
X185769334Y-78938476D01*
X185816953Y-79128952D01*
X185816953Y-79271810D01*
X185769334Y-79462286D01*
X185721715Y-79557524D01*
X185626477Y-79652762D01*
X185483619Y-79700381D01*
X185245524Y-79700381D01*
X186197905Y-79414667D02*
X186674096Y-79414667D01*
X186102667Y-79700381D02*
X186436000Y-78700381D01*
X186769334Y-79700381D01*
X187674096Y-79605143D02*
X187626477Y-79652762D01*
X187483620Y-79700381D01*
X187388382Y-79700381D01*
X187245524Y-79652762D01*
X187150286Y-79557524D01*
X187102667Y-79462286D01*
X187055048Y-79271810D01*
X187055048Y-79128952D01*
X187102667Y-78938476D01*
X187150286Y-78843238D01*
X187245524Y-78748000D01*
X187388382Y-78700381D01*
X187483620Y-78700381D01*
X187626477Y-78748000D01*
X187674096Y-78795619D01*
X185745524Y-77065143D02*
X185697905Y-77112762D01*
X185555048Y-77160381D01*
X185459810Y-77160381D01*
X185316952Y-77112762D01*
X185221714Y-77017524D01*
X185174095Y-76922286D01*
X185126476Y-76731810D01*
X185126476Y-76588952D01*
X185174095Y-76398476D01*
X185221714Y-76303238D01*
X185316952Y-76208000D01*
X185459810Y-76160381D01*
X185555048Y-76160381D01*
X185697905Y-76208000D01*
X185745524Y-76255619D01*
X186174095Y-77160381D02*
X186174095Y-76160381D01*
X186174095Y-76636571D02*
X186745524Y-76636571D01*
X186745524Y-77160381D02*
X186745524Y-76160381D01*
X187745524Y-77160381D02*
X187174095Y-77160381D01*
X187459809Y-77160381D02*
X187459809Y-76160381D01*
X187364571Y-76303238D01*
X187269333Y-76398476D01*
X187174095Y-76446095D01*
X185491524Y-74525143D02*
X185443905Y-74572762D01*
X185301048Y-74620381D01*
X185205810Y-74620381D01*
X185062952Y-74572762D01*
X184967714Y-74477524D01*
X184920095Y-74382286D01*
X184872476Y-74191810D01*
X184872476Y-74048952D01*
X184920095Y-73858476D01*
X184967714Y-73763238D01*
X185062952Y-73668000D01*
X185205810Y-73620381D01*
X185301048Y-73620381D01*
X185443905Y-73668000D01*
X185491524Y-73715619D01*
X185920095Y-74620381D02*
X185920095Y-73620381D01*
X185920095Y-74096571D02*
X186491524Y-74096571D01*
X186491524Y-74620381D02*
X186491524Y-73620381D01*
X186920095Y-73715619D02*
X186967714Y-73668000D01*
X187062952Y-73620381D01*
X187301048Y-73620381D01*
X187396286Y-73668000D01*
X187443905Y-73715619D01*
X187491524Y-73810857D01*
X187491524Y-73906095D01*
X187443905Y-74048952D01*
X186872476Y-74620381D01*
X187491524Y-74620381D01*
X185491524Y-71985143D02*
X185443905Y-72032762D01*
X185301048Y-72080381D01*
X185205810Y-72080381D01*
X185062952Y-72032762D01*
X184967714Y-71937524D01*
X184920095Y-71842286D01*
X184872476Y-71651810D01*
X184872476Y-71508952D01*
X184920095Y-71318476D01*
X184967714Y-71223238D01*
X185062952Y-71128000D01*
X185205810Y-71080381D01*
X185301048Y-71080381D01*
X185443905Y-71128000D01*
X185491524Y-71175619D01*
X185920095Y-72080381D02*
X185920095Y-71080381D01*
X185920095Y-71556571D02*
X186491524Y-71556571D01*
X186491524Y-72080381D02*
X186491524Y-71080381D01*
X186872476Y-71080381D02*
X187491524Y-71080381D01*
X187158190Y-71461333D01*
X187301048Y-71461333D01*
X187396286Y-71508952D01*
X187443905Y-71556571D01*
X187491524Y-71651810D01*
X187491524Y-71889905D01*
X187443905Y-71985143D01*
X187396286Y-72032762D01*
X187301048Y-72080381D01*
X187015333Y-72080381D01*
X186920095Y-72032762D01*
X186872476Y-71985143D01*
D13*
X186094762Y-68588000D02*
X186047143Y-68540381D01*
X185975715Y-68540381D01*
X185904286Y-68588000D01*
X185856667Y-68683238D01*
X185832858Y-68778476D01*
X185809048Y-68968952D01*
X185809048Y-69111810D01*
X185832858Y-69302286D01*
X185856667Y-69397524D01*
X185904286Y-69492762D01*
X185975715Y-69540381D01*
X186023334Y-69540381D01*
X186094762Y-69492762D01*
X186118572Y-69445143D01*
X186118572Y-69111810D01*
X186023334Y-69111810D01*
X186332858Y-69540381D02*
X186332858Y-68540381D01*
X186618572Y-69540381D01*
X186618572Y-68540381D01*
X186856668Y-69540381D02*
X186856668Y-68540381D01*
X186975715Y-68540381D01*
X187047144Y-68588000D01*
X187094763Y-68683238D01*
X187118572Y-68778476D01*
X187142382Y-68968952D01*
X187142382Y-69111810D01*
X187118572Y-69302286D01*
X187094763Y-69397524D01*
X187047144Y-69492762D01*
X186975715Y-69540381D01*
X186856668Y-69540381D01*
X187332858Y-69254667D02*
X187570953Y-69254667D01*
X187285239Y-69540381D02*
X187451906Y-68540381D01*
X187618572Y-69540381D01*
D17*
X185459810Y-67000381D02*
X185459810Y-66000381D01*
X185888381Y-66952762D02*
X186031238Y-67000381D01*
X186269334Y-67000381D01*
X186364572Y-66952762D01*
X186412191Y-66905143D01*
X186459810Y-66809905D01*
X186459810Y-66714667D01*
X186412191Y-66619429D01*
X186364572Y-66571810D01*
X186269334Y-66524190D01*
X186078857Y-66476571D01*
X185983619Y-66428952D01*
X185936000Y-66381333D01*
X185888381Y-66286095D01*
X185888381Y-66190857D01*
X185936000Y-66095619D01*
X185983619Y-66048000D01*
X186078857Y-66000381D01*
X186316953Y-66000381D01*
X186459810Y-66048000D01*
X186888381Y-67000381D02*
X186888381Y-66000381D01*
X170488095Y-97273810D01*
X146122399Y-64195858D02*
X146884304Y-64195858D01*
X146503352Y-64576810D02*
X146503352Y-63814905D01*
M02*

View File

@@ -0,0 +1,805 @@
%FSLAX45Y45*%
G04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.6-e0-6349~53~ubuntu16.04.1) date Sat Jul 1 03:26:22 2017*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.127000*%
%ADD11C,0.150000*%
%ADD12C,0.200000*%
%ADD13C,0.300000*%
G04 APERTURE END LIST*
D10*
D11*
X19625000Y-11800000D02*
X11300000Y-11800000D01*
X19625000Y-5275000D02*
X19625000Y-11800000D01*
X11300000Y-5275000D02*
X19625000Y-5275000D01*
X11300000Y-11800000D02*
X11300000Y-5275000D01*
D12*
X12657300Y-7234400D02*
X12717300Y-7294400D01*
X12717300Y-7234400D02*
X12657300Y-7294400D01*
X12657300Y-9571200D02*
X18270700Y-9571200D02*
X18330700Y-9631200D01*
X18330700Y-9571200D02*
X18270700Y-9631200D01*
X13764260Y-8013700D02*
G75*
G03X13764260Y-8013700I-35560J0D01*
G01*
X13764260Y-8343900D02*
G75*
G03X13764260Y-8343900I-35560J0D01*
G01*
X13764260Y-10350500D02*
G75*
G03X13764260Y-10350500I-35560J0D01*
G01*
X13764260Y-10668000D02*
G75*
G03X13764260Y-10668000I-35560J0D01*
G01*
X14869160Y-7962900D02*
G75*
G03X14869160Y-7962900I-35560J0D01*
G01*
X14881860Y-8318500D02*
G75*
G03X14881860Y-8318500I-35560J0D01*
G01*
X14881860Y-10350500D02*
G75*
G03X14881860Y-10350500I-35560J0D01*
G01*
X14881860Y-10693400D02*
G75*
G03X14881860Y-10693400I-35560J0D01*
G01*
X16177260Y-8001000D02*
G75*
G03X16177260Y-8001000I-35560J0D01*
G01*
X16177260Y-8343900D02*
G75*
G03X16177260Y-8343900I-35560J0D01*
G01*
X16177260Y-10375900D02*
G75*
G03X16177260Y-10375900I-35560J0D01*
G01*
X16177260Y-10693400D02*
G75*
G03X16177260Y-10693400I-35560J0D01*
G01*
X17294860Y-8013700D02*
G75*
G03X17294860Y-8013700I-35560J0D01*
G01*
X17294860Y-8331200D02*
G75*
G03X17294860Y-8331200I-35560J0D01*
G01*
X17294860Y-10337800D02*
G75*
G03X17294860Y-10337800I-35560J0D01*
G01*
X17294860Y-10693400D02*
G75*
G03X17294860Y-10693400I-35560J0D01*
G01*
X13525500Y-6360800D02*
X13525500Y-6440800D01*
X13485500Y-6400800D02*
X13565500Y-6400800D01*
X14540000Y-5824000D02*
X14540000Y-5904000D01*
X14500000Y-5864000D02*
X14580000Y-5864000D01*
X14540000Y-6840000D02*
X14540000Y-6920000D01*
X14500000Y-6880000D02*
X14580000Y-6880000D01*
X15500000Y-8844000D02*
X15500000Y-8924000D01*
X15460000Y-8884000D02*
X15540000Y-8884000D01*
X15500000Y-9860000D02*
X15500000Y-9940000D01*
X15460000Y-9900000D02*
X15540000Y-9900000D01*
X12586462Y-7809738D01*
X12686538Y-7759700D02*
G75*
G03X12686538Y-7759700I-50038J0D01*
G01*
X12586462Y-8471662D02*
X12686538Y-8571738D01*
X12686538Y-8471662D02*
X12586462Y-8571738D01*
X12686538Y-8521700D02*
G75*
G03X12686538Y-8521700I-50038J0D01*
G01*
X12586462Y-10033762D02*
X12686538Y-10133838D01*
X12686538Y-10033762D02*
X12586462Y-10133838D01*
X12686538Y-10083800D02*
G75*
G03X12686538Y-10083800I-50038J0D01*
G01*
X12586462Y-10795762D02*
X12686538Y-10895838D01*
X12686538Y-10795762D02*
X12586462Y-10895838D01*
X12686538Y-10845800D02*
G75*
G03X12686538Y-10845800I-50038J0D01*
G01*
X12942062Y-7709662D02*
X13042138Y-7809738D01*
X13042138Y-7709662D02*
X12942062Y-7809738D01*
X13042138Y-7759700D02*
G75*
G03X13042138Y-7759700I-50038J0D01*
G01*
X12942062Y-8471662D02*
X13042138Y-8571738D01*
X13042138Y-8471662D02*
X12942062Y-8571738D01*
X13042138Y-8521700D02*
G75*
G03X13042138Y-8521700I-50038J0D01*
G01*
X12942062Y-10033762D02*
X13042138Y-10133838D01*
X13042138Y-10033762D02*
X12942062Y-10133838D01*
X13042138Y-10083800D02*
G75*
G03X13042138Y-10083800I-50038J0D01*
G01*
X12942062Y-10795762D02*
X13042138Y-10895838D01*
X13042138Y-10795762D02*
X12942062Y-10895838D01*
X13042138Y-10845800D02*
G75*
G03X13042138Y-10845800I-50038J0D01*
G01*
X13297662Y-7214362D02*
X13397738Y-7314438D01*
X13397738Y-7214362D02*
X13297662Y-7314438D01*
X13397738Y-7264400D02*
G75*
G03X13397738Y-7264400I-50038J0D01*
G01*
X13297662Y-9563862D02*
X13397738Y-9663938D01*
X13397738Y-9563862D02*
X13297662Y-9663938D01*
X13397738Y-9613900D02*
G75*
G03X13397738Y-9613900I-50038J0D01*
G01*
X13373862Y-7722362D02*
X13473938Y-7822438D01*
X13473938Y-7722362D02*
X13373862Y-7822438D01*
X13473938Y-7772400D02*
G75*
G03X13473938Y-7772400I-50038J0D01*
G01*
X13373862Y-8484362D02*
X13473938Y-8584438D01*
X13473938Y-8484362D02*
X13373862Y-8584438D01*
X13473938Y-8534400D02*
G75*
G03X13473938Y-8534400I-50038J0D01*
G01*
X13373862Y-10033762D02*
X13473938Y-10133838D01*
X13473938Y-10033762D02*
X13373862Y-10133838D01*
X13473938Y-10083800D02*
G75*
G03X13473938Y-10083800I-50038J0D01*
G01*
X13373862Y-10795762D02*
X13473938Y-10895838D01*
X13473938Y-10795762D02*
X13373862Y-10895838D01*
X13473938Y-10845800D02*
G75*
G03X13473938Y-10845800I-50038J0D01*
G01*
X13551662Y-7214362D02*
X13651738Y-7314438D01*
X13651738Y-7214362D02*
X13551662Y-7314438D01*
X13651738Y-7264400D02*
G75*
G03X13651738Y-7264400I-50038J0D01*
G01*
X13551662Y-9563862D02*
X13651738Y-9663938D01*
X13651738Y-9563862D02*
X13551662Y-9663938D01*
X13651738Y-9613900D02*
G75*
G03X13651738Y-9613900I-50038J0D01*
G01*
X14491462Y-7722362D02*
X14591538Y-7822438D01*
X14591538Y-7722362D02*
X14491462Y-7822438D01*
X14591538Y-7772400D02*
G75*
G03X14591538Y-7772400I-50038J0D01*
G01*
X14491462Y-8484362D02*
X14591538Y-8584438D01*
X14591538Y-8484362D02*
X14491462Y-8584438D01*
X14591538Y-8534400D02*
G75*
G03X14591538Y-8534400I-50038J0D01*
G01*
X14491462Y-10084562D02*
X14591538Y-10184638D01*
X14591538Y-10084562D02*
X14491462Y-10184638D01*
X14591538Y-10134600D02*
G75*
G03X14591538Y-10134600I-50038J0D01*
G01*
X14491462Y-10846562D02*
X14591538Y-10946638D01*
X14591538Y-10846562D02*
X14491462Y-10946638D01*
X14591538Y-10896600D02*
G75*
G03X14591538Y-10896600I-50038J0D01*
G01*
X15032859Y-6362405D02*
X15132935Y-6462481D01*
X15132935Y-6362405D02*
X15032859Y-6462481D01*
X15132935Y-6412443D02*
G75*
G03X15132935Y-6412443I-50038J0D01*
G01*
X15667859Y-6362405D02*
X15767935Y-6462481D01*
X15767935Y-6362405D02*
X15667859Y-6462481D01*
X15767935Y-6412443D02*
G75*
G03X15767935Y-6412443I-50038J0D01*
G01*
X16104362Y-5906262D02*
X16204438Y-6006338D01*
X16204438Y-5906262D02*
X16104362Y-6006338D01*
X16204438Y-5956300D02*
G75*
G03X16204438Y-5956300I-50038J0D01*
G01*
X16104362Y-6211062D02*
X16204438Y-6311138D01*
X16204438Y-6211062D02*
X16104362Y-6311138D01*
X16204438Y-6261100D02*
G75*
G03X16204438Y-6261100I-50038J0D01*
G01*
X16396462Y-7735062D02*
X16496538Y-7835138D01*
X16496538Y-7735062D02*
X16396462Y-7835138D01*
X16496538Y-7785100D02*
G75*
G03X16496538Y-7785100I-50038J0D01*
G01*
X16396462Y-8497062D02*
X16496538Y-8597138D01*
X16496538Y-8497062D02*
X16396462Y-8597138D01*
X16496538Y-8547100D02*
G75*
G03X16496538Y-8547100I-50038J0D01*
G01*
X16396462Y-10071862D02*
X16496538Y-10171938D01*
X16496538Y-10071862D02*
X16396462Y-10171938D01*
X16496538Y-10121900D02*
G75*
G03X16496538Y-10121900I-50038J0D01*
G01*
X16396462Y-10833862D02*
X16496538Y-10933938D01*
X16496538Y-10833862D02*
X16396462Y-10933938D01*
X16496538Y-10883900D02*
G75*
G03X16496538Y-10883900I-50038J0D01*
G01*
X16866362Y-5906262D02*
X16966438Y-6006338D01*
X16966438Y-5906262D02*
X16866362Y-6006338D01*
X16966438Y-5956300D02*
G75*
G03X16966438Y-5956300I-50038J0D01*
G01*
X16866362Y-6211062D02*
X16966438Y-6311138D01*
X16966438Y-6211062D02*
X16866362Y-6311138D01*
X16966438Y-6261100D02*
G75*
G03X16966438Y-6261100I-50038J0D01*
G01*
X17336262Y-7214362D02*
X17436338Y-7314438D01*
X17436338Y-7214362D02*
X17336262Y-7314438D01*
X17436338Y-7264400D02*
G75*
G03X17436338Y-7264400I-50038J0D01*
G01*
X17336262Y-9551162D02*
X17436338Y-9651238D01*
X17436338Y-9551162D02*
X17336262Y-9651238D01*
X17436338Y-9601200D02*
G75*
G03X17436338Y-9601200I-50038J0D01*
G01*
X17514062Y-7709662D02*
X17614138Y-7809738D01*
X17614138Y-7709662D02*
X17514062Y-7809738D01*
X17614138Y-7759700D02*
G75*
G03X17614138Y-7759700I-50038J0D01*
G01*
X17514062Y-8471662D02*
X17614138Y-8571738D01*
X17614138Y-8471662D02*
X17514062Y-8571738D01*
X17614138Y-8521700D02*
G75*
G03X17614138Y-8521700I-50038J0D01*
G01*
X17514062Y-10046462D02*
X17614138Y-10146538D01*
X17614138Y-10046462D02*
X17514062Y-10146538D01*
X17614138Y-10096500D02*
G75*
G03X17614138Y-10096500I-50038J0D01*
G01*
X17514062Y-10808462D02*
X17614138Y-10908538D01*
X17614138Y-10808462D02*
X17514062Y-10908538D01*
X17614138Y-10858500D02*
G75*
G03X17614138Y-10858500I-50038J0D01*
G01*
X17590262Y-7214362D02*
X17690338Y-7314438D01*
X17690338Y-7214362D02*
X17590262Y-7314438D01*
X17690338Y-7264400D02*
G75*
G03X17690338Y-7264400I-50038J0D01*
G01*
X17590262Y-9551162D02*
X17690338Y-9651238D01*
X17690338Y-9551162D02*
X17590262Y-9651238D01*
X17690338Y-9601200D02*
G75*
G03X17690338Y-9601200I-50038J0D01*
G01*
X17945862Y-10046462D02*
X18045938Y-10146538D01*
X18045938Y-10046462D02*
X17945862Y-10146538D01*
X18045938Y-10096500D02*
G75*
G03X18045938Y-10096500I-50038J0D01*
G01*
X17945862Y-10808462D02*
X18045938Y-10908538D01*
X18045938Y-10808462D02*
X17945862Y-10908538D01*
X18045938Y-10858500D02*
G75*
G03X18045938Y-10858500I-50038J0D01*
G01*
X17958562Y-7709662D02*
X18058638Y-7809738D01*
X18058638Y-7709662D02*
X17958562Y-7809738D01*
X18058638Y-7759700D02*
G75*
G03X18058638Y-7759700I-50038J0D01*
G01*
X17958562Y-8471662D02*
X18058638Y-8571738D01*
X18058638Y-8471662D02*
X17958562Y-8571738D01*
X18058638Y-8521700D02*
G75*
G03X18058638Y-8521700I-50038J0D01*
G01*
X18301462Y-7709662D02*
X18401538Y-7809738D01*
X18401538Y-7709662D02*
X18301462Y-7809738D01*
X18401538Y-7759700D02*
G75*
G03X18401538Y-7759700I-50038J0D01*
G01*
X18301462Y-8471662D02*
X18401538Y-8571738D01*
X18401538Y-8471662D02*
X18301462Y-8571738D01*
X18401538Y-8521700D02*
G75*
G03X18401538Y-8521700I-50038J0D01*
G01*
X18301462Y-10046462D02*
X18401538Y-10146538D01*
X18401538Y-10046462D02*
X18301462Y-10146538D01*
X18401538Y-10096500D02*
G75*
G03X18401538Y-10096500I-50038J0D01*
G01*
X18301462Y-10808462D02*
X18401538Y-10908538D01*
X18401538Y-10808462D02*
X18301462Y-10908538D01*
X18401538Y-10858500D02*
G75*
G03X18401538Y-10858500I-50038J0D01*
G01*
X11760200Y-6096000D02*
X11861800Y-6197600D01*
X11861800Y-6096000D02*
X18872200Y-10668000D02*
X18973800Y-10769600D01*
X18973800Y-10668000D02*
X18872200Y-10769600D01*
X18923000Y-10668000D02*
X18923000Y-10769600D01*
X18872200Y-10718800D02*
X18973800Y-10718800D01*
X18872200Y-10922000D02*
X18973800Y-11023600D01*
X18973800Y-10922000D02*
X18872200Y-11023600D01*
X18923000Y-10922000D02*
X18923000Y-11023600D01*
X18872200Y-10972800D02*
X18973800Y-10972800D01*
X19126200Y-6096000D02*
X19227800Y-6197600D01*
X19227800Y-6096000D02*
X19126200Y-6197600D01*
X19177000Y-6096000D02*
X19177000Y-6197600D01*
X19126200Y-6146800D02*
X19227800Y-6146800D01*
X19126200Y-6350000D02*
X19227800Y-6451600D01*
X19227800Y-6350000D02*
X19126200Y-6451600D01*
X19177000Y-6350000D02*
X19177000Y-6451600D01*
X19126200Y-6400800D02*
X19227800Y-6400800D01*
X19126200Y-6604000D02*
X19227800Y-6705600D01*
X19227800Y-6604000D02*
X19126200Y-6705600D01*
X19177000Y-6604000D02*
X19177000Y-6705600D01*
X19126200Y-6654800D02*
X19227800Y-6654800D01*
X19126200Y-6858000D02*
X19227800Y-6959600D01*
X19227800Y-6858000D02*
X19126200Y-6959600D01*
X19177000Y-6858000D02*
X19177000Y-6959600D01*
X19126200Y-6908800D02*
X19227800Y-6908800D01*
X19126200Y-7112000D02*
X19227800Y-7213600D01*
X19227800Y-7112000D02*
X19126200Y-7213600D01*
X19177000Y-7112000D02*
X19177000Y-7213600D01*
X19126200Y-7162800D02*
X19227800Y-7162800D01*
X19126200Y-7366000D02*
X19227800Y-7467600D01*
X19227800Y-7366000D02*
X19126200Y-7467600D01*
X19177000Y-7366000D02*
X19177000Y-7467600D01*
X19126200Y-7416800D02*
X19227800Y-7416800D01*
X19126200Y-7620000D02*
X19227800Y-7721600D01*
X19227800Y-7620000D02*
X19126200Y-7721600D01*
X19177000Y-7620000D02*
X19177000Y-7721600D01*
X19126200Y-7670800D02*
X19227800Y-7670800D01*
X19126200Y-7874000D02*
X19227800Y-7975600D01*
X19227800Y-7874000D02*
X19126200Y-7975600D01*
X19177000Y-7874000D02*
X19177000Y-7975600D01*
X19126200Y-7924800D02*
X19227800Y-7924800D01*
X19126200Y-8128000D02*
X19227800Y-8229600D01*
X19227800Y-8128000D02*
X19126200Y-8229600D01*
X19177000Y-8128000D02*
X19177000Y-8229600D01*
X19126200Y-8178800D02*
X19227800Y-8178800D01*
X19126200Y-8382000D02*
X19227800Y-8483600D01*
X19227800Y-8382000D02*
X19126200Y-8483600D01*
X19177000Y-8382000D02*
X19177000Y-8483600D01*
X19126200Y-8432800D02*
X19227800Y-8432800D01*
X19126200Y-8636000D02*
X19227800Y-8737600D01*
X19227800Y-8636000D02*
X19126200Y-8737600D01*
X19177000Y-8636000D02*
X19177000Y-8737600D01*
X19126200Y-8686800D02*
X19227800Y-8686800D01*
X19126200Y-8890000D02*
X19227800Y-8991600D01*
X19227800Y-8890000D02*
X19126200Y-8991600D01*
X19177000Y-8890000D02*
X19177000Y-8991600D01*
X19126200Y-8940800D02*
X19227800Y-8940800D01*
X19126200Y-9144000D02*
X19227800Y-9245600D01*
X19227800Y-9144000D02*
X19126200Y-9245600D01*
X19177000Y-9144000D02*
X19177000Y-9245600D01*
X19126200Y-9194800D02*
X19227800Y-9194800D01*
X19126200Y-9398000D02*
X19227800Y-9499600D01*
X19227800Y-9398000D02*
X19126200Y-9499600D01*
X19177000Y-9398000D02*
X19177000Y-9499600D01*
X19126200Y-9448800D02*
X19227800Y-9448800D01*
X19126200Y-9652000D02*
X19227800Y-9753600D01*
X19227800Y-9652000D02*
X19126200Y-9753600D01*
X19177000Y-9652000D02*
X19177000Y-9753600D01*
X19126200Y-9702800D02*
X19227800Y-9702800D01*
X19126200Y-9906000D02*
X19227800Y-10007600D01*
X19227800Y-9906000D02*
X19126200Y-10007600D01*
X19177000Y-9906000D02*
X19177000Y-10007600D01*
X19126200Y-9956800D02*
X19227800Y-9956800D01*
X19126200Y-10160000D02*
X19227800Y-10261600D01*
X19227800Y-10160000D02*
X19126200Y-10261600D01*
X19177000Y-10160000D02*
X19177000Y-10261600D01*
X19126200Y-10210800D02*
X19227800Y-10210800D01*
X19126200Y-10414000D02*
X19227800Y-10515600D01*
X19227800Y-10414000D02*
X19126200Y-10515600D01*
X19177000Y-10414000D02*
X19177000Y-10515600D01*
X19126200Y-10464800D02*
X19227800Y-10464800D01*
X19126200Y-10668000D02*
X19227800Y-10769600D01*
X19227800Y-10668000D02*
X19126200Y-10769600D01*
X19177000Y-10668000D02*
X19177000Y-10769600D01*
X19126200Y-10718800D02*
X19227800Y-10718800D01*
X19126200Y-10922000D02*
X19227800Y-11023600D01*
X19227800Y-10922000D02*
X19126200Y-11023600D01*
X19177000Y-10922000D02*
X19177000Y-11023600D01*
X19126200Y-10972800D02*
X19227800Y-10972800D01*
D13*
X11563928Y-12273214D02*
X11563928Y-11973214D01*
X11635357Y-11973214D01*
X11678214Y-11987500D01*
X11706786Y-12016071D01*
X11721071Y-12044643D01*
X11735357Y-12101786D01*
X11735357Y-12144643D01*
X11721071Y-12201786D01*
X11706786Y-12230357D01*
X11678214Y-12258929D01*
X11635357Y-12273214D01*
X11563928Y-12273214D01*
X11863928Y-12273214D02*
X11863928Y-12073214D01*
X11863928Y-12130357D02*
X11878214Y-12101786D01*
X11892500Y-12087500D01*
X11921071Y-12073214D01*
X11949643Y-12073214D01*
X12049643Y-12273214D02*
X12049643Y-12073214D01*
X12049643Y-11973214D02*
X12035357Y-11987500D01*
X12049643Y-12001786D01*
X12063928Y-11987500D01*
X12049643Y-11973214D01*
X18121071Y-12688929D01*
X18106786Y-12646071D01*
X18092500Y-12617500D01*
X18063929Y-12574643D01*
X18049643Y-12560357D01*
X11292500Y-13163500D02*
G75*
G03X11292500Y-13163500I-35560J0D01*
G01*
X11621071Y-12999214D02*
X11649643Y-12999214D01*
X11678214Y-13013500D01*
X11692500Y-13027786D01*
X11706786Y-13056357D01*
X11721071Y-13113500D01*
X11721071Y-13184929D01*
X11706786Y-13242071D01*
X11692500Y-13270643D01*
X12706786Y-13509500D01*
X12735357Y-13495214D01*
X12778214Y-13495214D01*
X12806786Y-13509500D01*
X12821071Y-13538071D01*
X12821071Y-13695214D01*
X12963928Y-13695214D02*
X12963928Y-13495214D01*
X12963928Y-13523786D02*
X12978214Y-13509500D01*
X13006786Y-13495214D01*
X13049643Y-13495214D01*
X13078214Y-13509500D01*
X13092500Y-13538071D01*
X13092500Y-13695214D01*
X13092500Y-13538071D02*
X13106786Y-13509500D01*
X13135357Y-13495214D01*
X13178214Y-13495214D01*
X13206786Y-13509500D01*
X13221071Y-13538071D01*
X13221071Y-13695214D01*
X13806786Y-13380929D02*
X13549643Y-13766643D01*
X14192500Y-13395214D02*
X14221071Y-13395214D01*
X14249643Y-13409500D01*
X14263928Y-13423786D01*
X14278214Y-13452357D01*
X14292500Y-13509500D01*
X14292500Y-13580929D01*
X14278214Y-13638071D01*
X14263928Y-13666643D01*
X14249643Y-13680929D01*
X14221071Y-13695214D01*
X14192500Y-13695214D01*
X14163928Y-13680929D01*
X14149643Y-13666643D01*
X14135357Y-13638071D01*
X14121071Y-13580929D01*
X14121071Y-13509500D01*
X14135357Y-13452357D01*
X14149643Y-13423786D01*
X14163928Y-13409500D01*
X14192500Y-13395214D01*
X14421071Y-13666643D02*
X14435357Y-13680929D01*
X14421071Y-13695214D01*
X14406786Y-13680929D01*
X14421071Y-13666643D01*
X14421071Y-13695214D01*
X14621071Y-13395214D02*
X14649643Y-13395214D01*
X14678214Y-13409500D01*
X14692500Y-13423786D01*
X14706785Y-13452357D01*
X14721071Y-13509500D01*
X14721071Y-13580929D01*
X14706785Y-13638071D01*
X14692500Y-13666643D01*
X14678214Y-13680929D01*
X14649643Y-13695214D01*
X14621071Y-13695214D01*
X14592500Y-13680929D01*
X14578214Y-13666643D01*
X14563928Y-13638071D01*
X14549643Y-13580929D01*
X14549643Y-13509500D01*
X14563928Y-13452357D01*
X14578214Y-13423786D01*
X14592500Y-13409500D01*
X14621071Y-13395214D01*
X14821071Y-13395214D02*
X15006785Y-13395214D01*
X14906785Y-13509500D01*
X14949643Y-13509500D01*
X14978214Y-13523786D01*
X14992500Y-13538071D01*
X15006785Y-13566643D01*
X11292500Y-14797538D01*
X11292500Y-14697462D02*
X11192424Y-14797538D01*
X11292500Y-14747500D02*
G75*
G03X11292500Y-14747500I-50038J0D01*
G01*
X11721071Y-14883214D02*
X11549643Y-14883214D01*
X11635357Y-14883214D02*
X11635357Y-14583214D01*
X11606786Y-14626071D01*
X11578214Y-14654643D01*
X18135357Y-15136357D01*
X18121071Y-15064929D01*
X18106786Y-15022071D01*
X18092500Y-14993500D01*
X18063929Y-14950643D01*
X18049643Y-14936357D01*
M02*

135
samples/HCL/main.tf Normal file
View File

@@ -0,0 +1,135 @@
resource "aws_security_group" "elb_sec_group" {
description = "Allow traffic from the internet to ELB port 80"
vpc_id = "${var.vpc_id}"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["${split(",", var.allowed_cidr_blocks)}"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_security_group" "dokku_allow_ssh_from_internal" {
description = "Allow git access over ssh from the private subnet"
vpc_id = "${var.vpc_id}"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["${var.private_subnet_cidr}"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_security_group" "allow_from_elb_to_instance" {
description = "Allow traffic from the ELB to the private instance"
vpc_id = "${var.vpc_id}"
ingress {
security_groups = ["${aws_security_group.elb_sec_group.id}"]
from_port = 80
to_port = 80
protocol = "tcp"
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "dokku" {
ami = "ami-47a23a30"
instance_type = "${var.instance_type}"
associate_public_ip_address = false
key_name = "${var.key_name}"
subnet_id = "${var.private_subnet_id}"
vpc_security_group_ids = [
"${var.bastion_sec_group_id}",
"${aws_security_group.allow_from_elb_to_instance.id}",
"${aws_security_group.dokku_allow_ssh_from_internal.id}"
]
tags {
Name = "${var.name}"
}
connection {
user = "ubuntu"
private_key = "${var.private_key}"
bastion_host = "${var.bastion_host}"
bastion_port = "${var.bastion_port}"
bastion_user = "${var.bastion_user}"
bastion_private_key = "${var.bastion_private_key}"
}
provisioner "file" {
source = "${path.module}/../scripts/install-dokku.sh"
destination = "/home/ubuntu/install-dokku.sh"
}
provisioner "remote-exec" {
inline = [
"chmod +x /home/ubuntu/install-dokku.sh",
"HOSTNAME=${var.hostname} /home/ubuntu/install-dokku.sh"
]
}
}
resource "aws_elb" "elb_dokku" {
name = "elb-dokku-${var.name}"
subnets = ["${var.public_subnet_id}"]
security_groups = ["${aws_security_group.elb_sec_group.id}"]
listener {
instance_port = 80
instance_protocol = "http"
lb_port = 80
lb_protocol = "http"
}
health_check {
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 3
target = "HTTP:80/"
interval = 30
}
instances = ["${aws_instance.dokku.id}"]
cross_zone_load_balancing = false
idle_timeout = 400
tags {
Name = "elb-dokku-${var.name}"
}
}
resource "aws_route53_record" "dokku-deploy" {
zone_id = "${var.zone_id}"
name = "deploy.${var.hostname}"
type = "A"
ttl = "300"
records = ["${aws_instance.dokku.private_ip}"]
}
resource "aws_route53_record" "dokku-wildcard" {
zone_id = "${var.zone_id}"
name = "*.${var.hostname}"
type = "CNAME"
ttl = "300"
records = ["${aws_elb.elb_dokku.dns_name}"]
}

View File

@@ -0,0 +1,58 @@
# Terragrunt is a thin wrapper for Terraform that provides extra tools for working with multiple Terraform modules,
# remote state, and locking: https://github.com/gruntwork-io/terragrunt
terragrunt = {
# Configure Terragrunt to automatically store tfstate files in an S3 bucket
remote_state {
backend = "s3"
config {
encrypt = true
bucket = "acme-main-terraform-state"
key = "${path_relative_to_include()}/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-locks"
}
}
# Configure Terragrunt to use common var files to help you keep often-repeated variables (e.g., account ID) DRY.
# Note that even though Terraform automatically pulls in terraform.tfvars, we include it explicitly at the end of the
# list to make sure its variables override anything in the common var files.
terraform {
extra_arguments "common_vars" {
commands = ["${get_terraform_commands_that_need_vars()}"]
optional_var_files = [
"${get_tfvars_dir()}/${find_in_parent_folders("account.tfvars", "skip-account-if-does-not-exist")}",
"${get_tfvars_dir()}/${find_in_parent_folders("region.tfvars", "skip-region-if-does-not-exist")}",
"${get_tfvars_dir()}/${find_in_parent_folders("env.tfvars", "skip-env-if-does-not-exist")}",
"${get_tfvars_dir()}/terraform.tfvars"
]
}
}
}
key1 = "val1"
key2 = 0
key3 = 1
key4 = true
# Sample comments
key5 = false
key6 = ["hello", "from", "gruntwork.io"]
key7 = {
key1 = "hello"
key2 = "from"
key3 = "gruntwork.io"
}
key8 = [
{
keyA = "hello"
keyB = "there"
},
{
keyA = "hello"
keyB = "there"
}
]

89
samples/HLSL/bloom.cginc Normal file
View File

@@ -0,0 +1,89 @@
// From https://github.com/Unity-Technologies/PostProcessing/blob/master/PostProcessing/Resources/Shaders/Bloom.cginc
// Licensed under the MIT license
#ifndef __BLOOM__
#define __BLOOM__
#include "Common.cginc"
// Brightness function
half Brightness(half3 c)
{
return Max3(c);
}
// 3-tap median filter
half3 Median(half3 a, half3 b, half3 c)
{
return a + b + c - min(min(a, b), c) - max(max(a, b), c);
}
// Downsample with a 4x4 box filter
half3 DownsampleFilter(sampler2D tex, float2 uv, float2 texelSize)
{
float4 d = texelSize.xyxy * float4(-1.0, -1.0, 1.0, 1.0);
half3 s;
s = DecodeHDR(tex2D(tex, uv + d.xy));
s += DecodeHDR(tex2D(tex, uv + d.zy));
s += DecodeHDR(tex2D(tex, uv + d.xw));
s += DecodeHDR(tex2D(tex, uv + d.zw));
return s * (1.0 / 4.0);
}
// Downsample with a 4x4 box filter + anti-flicker filter
half3 DownsampleAntiFlickerFilter(sampler2D tex, float2 uv, float2 texelSize)
{
float4 d = texelSize.xyxy * float4(-1.0, -1.0, 1.0, 1.0);
half3 s1 = DecodeHDR(tex2D(tex, uv + d.xy));
half3 s2 = DecodeHDR(tex2D(tex, uv + d.zy));
half3 s3 = DecodeHDR(tex2D(tex, uv + d.xw));
half3 s4 = DecodeHDR(tex2D(tex, uv + d.zw));
// Karis's luma weighted average (using brightness instead of luma)
half s1w = 1.0 / (Brightness(s1) + 1.0);
half s2w = 1.0 / (Brightness(s2) + 1.0);
half s3w = 1.0 / (Brightness(s3) + 1.0);
half s4w = 1.0 / (Brightness(s4) + 1.0);
half one_div_wsum = 1.0 / (s1w + s2w + s3w + s4w);
return (s1 * s1w + s2 * s2w + s3 * s3w + s4 * s4w) * one_div_wsum;
}
half3 UpsampleFilter(sampler2D tex, float2 uv, float2 texelSize, float sampleScale)
{
#if MOBILE_OR_CONSOLE
// 4-tap bilinear upsampler
float4 d = texelSize.xyxy * float4(-1.0, -1.0, 1.0, 1.0) * (sampleScale * 0.5);
half3 s;
s = DecodeHDR(tex2D(tex, uv + d.xy));
s += DecodeHDR(tex2D(tex, uv + d.zy));
s += DecodeHDR(tex2D(tex, uv + d.xw));
s += DecodeHDR(tex2D(tex, uv + d.zw));
return s * (1.0 / 4.0);
#else
// 9-tap bilinear upsampler (tent filter)
float4 d = texelSize.xyxy * float4(1.0, 1.0, -1.0, 0.0) * sampleScale;
half3 s;
s = DecodeHDR(tex2D(tex, uv - d.xy));
s += DecodeHDR(tex2D(tex, uv - d.wy)) * 2.0;
s += DecodeHDR(tex2D(tex, uv - d.zy));
s += DecodeHDR(tex2D(tex, uv + d.zw)) * 2.0;
s += DecodeHDR(tex2D(tex, uv)) * 4.0;
s += DecodeHDR(tex2D(tex, uv + d.xw)) * 2.0;
s += DecodeHDR(tex2D(tex, uv + d.zy));
s += DecodeHDR(tex2D(tex, uv + d.wy)) * 2.0;
s += DecodeHDR(tex2D(tex, uv + d.xy));
return s * (1.0 / 16.0);
#endif
}
#endif // __BLOOM__

View File

@@ -0,0 +1,227 @@
[app]
# (str) Title of your application
title = Kivy Kazam
# (str) Package name
package.name = kivykazam
# (str) Package domain (needed for android/ios packaging)
package.domain = org.test
# (str) Source code where the main.py live
source.dir = .
# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,kv,atlas
# (list) List of inclusions using pattern matching
#source.include_patterns = assets/*,images/*.png
# (list) Source files to exclude (let empty to not exclude anything)
#source.exclude_exts = spec
# (list) List of directory to exclude (let empty to not exclude anything)
#source.exclude_dirs = tests, bin
# (list) List of exclusions using pattern matching
#source.exclude_patterns = license,images/*/*.jpg
# (str) Application versioning (method 1)
version = 0.1
# (str) Application versioning (method 2)
# version.regex = __version__ = ['"](.*)['"]
# version.filename = %(source.dir)s/main.py
# (list) Application requirements
# comma seperated e.g. requirements = sqlite3,kivy
requirements = kivy
# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
# requirements.source.kivy = ../../kivy
# (list) Garden requirements
#garden_requirements =
# (str) Presplash of the application
#presplash.filename = %(source.dir)s/data/presplash.png
# (str) Icon of the application
#icon.filename = %(source.dir)s/data/icon.png
# (str) Supported orientation (one of landscape, portrait or all)
orientation = all
# (list) List of service to declare
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY
#
# OSX Specific
#
#
# author = © Copyright Info
#
# Android specific
#
# (bool) Indicate if the application should be fullscreen or not
fullscreen = 1
# (list) Permissions
#android.permissions = INTERNET
# (int) Android API to use
#android.api = 19
# (int) Minimum API required
android.minapi = 13
# (int) Android SDK version to use
#android.sdk = 20
# (str) Android NDK version to use
#android.ndk = 9c
# (bool) Use --private data storage (True) or --dir public storage (False)
#android.private_storage = True
# (str) Android NDK directory (if empty, it will be automatically downloaded.)
#android.ndk_path =
# (str) Android SDK directory (if empty, it will be automatically downloaded.)
#android.sdk_path =
# (str) ANT directory (if empty, it will be automatically downloaded.)
#android.ant_path =
# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
#android.p4a_dir =
# (list) python-for-android whitelist
#android.p4a_whitelist =
# (bool) If True, then skip trying to update the Android sdk
# This can be useful to avoid excess Internet downloads or save time
# when an update is due and you just want to test/build your package
# android.skip_update = False
# (str) Android entry point, default is ok for Kivy-based app
#android.entrypoint = org.renpy.android.PythonActivity
# (list) List of Java .jar files to add to the libs so that pyjnius can access
# their classes. Don't add jars that you do not need, since extra jars can slow
# down the build process. Allows wildcards matching, for example:
# OUYA-ODK/libs/*.jar
#android.add_jars = foo.jar,bar.jar,path/to/more/*.jar
# (list) List of Java files to add to the android project (can be java or a
# directory containing the files)
#android.add_src =
# (str) python-for-android branch to use, if not master, useful to try
# not yet merged features.
#android.branch = master
# (str) OUYA Console category. Should be one of GAME or APP
# If you leave this blank, OUYA support will not be enabled
#android.ouya.category = GAME
# (str) Filename of OUYA Console icon. It must be a 732x412 png image.
#android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png
# (str) XML file to include as an intent filters in <activity> tag
#android.manifest.intent_filters =
# (list) Android additionnal libraries to copy into libs/armeabi
#android.add_libs_armeabi = libs/android/*.so
#android.add_libs_armeabi_v7a = libs/android-v7/*.so
#android.add_libs_x86 = libs/android-x86/*.so
#android.add_libs_mips = libs/android-mips/*.so
# (bool) Indicate whether the screen should stay on
# Don't forget to add the WAKE_LOCK permission if you set this to True
#android.wakelock = False
# (list) Android application meta-data to set (key=value format)
#android.meta_data =
# (list) Android library project to add (will be added in the
# project.properties automatically.)
#android.library_references =
# (str) Android logcat filters to use
#android.logcat_filters = *:S python:D
# (bool) Copy library instead of making a libpymodules.so
#android.copy_libs = 1
#
# iOS specific
#
# (str) Path to a custom kivy-ios folder
#ios.kivy_ios_dir = ../kivy-ios
# (str) Name of the certificate to use for signing the debug version
# Get a list of available identities: buildozer ios list_identities
#ios.codesign.debug = "iPhone Developer: <lastname> <firstname> (<hexstring>)"
# (str) Name of the certificate to use for signing the release version
#ios.codesign.release = %(ios.codesign.debug)s
[buildozer]
# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 1
# (int) Display warning if buildozer is run as root (0 = False, 1 = True)
warn_on_root = 1
# (str) Path to build artifact storage, absolute or relative to spec file
# build_dir = ./.buildozer
# (str) Path to build output (i.e. .apk, .ipa) storage
# bin_dir = ./bin
# -----------------------------------------------------------------------------
# List as sections
#
# You can define all the "list" as [section:key].
# Each line will be considered as a option to the list.
# Let's take [app] / source.exclude_patterns.
# Instead of doing:
#
#[app]
#source.exclude_patterns = license,data/audio/*.wav,data/images/original/*
#
# This can be translated into:
#
#[app:source.exclude_patterns]
#license
#data/audio/*.wav
#data/images/original/*
#
# -----------------------------------------------------------------------------
# Profiles
#
# You can extend section / key with a profile
# For example, you want to deploy a demo version of your application without
# HD content. You could first change the title to add "(demo)" in the name
# and extend the excluded directories to remove the HD content.
#
#[app@demo]
#title = My Application (demo)
#
#[app:source.exclude_patterns@demo]
#images/hd/*
#
# Then, invoke the command line with the "demo" profile:
#
#buildozer --profile demo android debug

View File

@@ -0,0 +1,62 @@
update=22/05/2015 07:44:53
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
LibName1=power
LibName2=device
LibName3=transistors
LibName4=conn
LibName5=linear
LibName6=regul
LibName7=74xx
LibName8=cmos4000
LibName9=adc-dac
LibName10=memory
LibName11=xilinx
LibName12=microcontrollers
LibName13=dsp
LibName14=microchip
LibName15=analog_switches
LibName16=motorola
LibName17=texas
LibName18=intel
LibName19=audio
LibName20=interface
LibName21=digital-audio
LibName22=philips
LibName23=display
LibName24=cypress
LibName25=siliconi
LibName26=opto
LibName27=atmel
LibName28=contrib
LibName29=valves

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