Compare commits

...

1618 Commits

Author SHA1 Message Date
Arfon Smith
d40b4a33de Sorted samples 2014-06-24 10:43:20 +01:00
Arfon Smith
87498679bd Merge pull request #1313 from pchaigno/samples-order
Set a sort order for the samples.json file's content
2014-06-24 10:42:25 +01:00
Paul Chaignon
f4e254202b Set a sort order for the samples.json file's content 2014-06-24 10:50:03 +02:00
Arfon Smith
e91d225e7d Merge pull request #1305 from neersighted/patch-1
Also ignore extern(al)
2014-06-23 23:12:34 +01:00
neersighted
b90d940aef Add tests for extern(al) being vendored 2014-06-23 14:50:31 -07:00
Vicent Marti
dbff196b08 Merge pull request #1309 from github/gameover-0x10c
Gameover 0x10c
2014-06-23 17:54:53 +02:00
Joshua Peek
5b7316fb2a Remove DCPU-16 ASM language 2014-06-23 10:48:09 -05:00
Arfon Smith
fa4dfe39ba Merge pull request #1306 from github/1100-local
1100 local
2014-06-23 10:33:01 +01:00
Arfon Smith
89999e60bf Merge branch 'master' into 1100-local
Conflicts:
	lib/linguist/languages.yml
2014-06-23 10:28:41 +01:00
neersighted
4819fb12a3 Also ignore extern(al)
...because some of us don't like 'vendor'
2014-06-22 17:18:10 -07:00
Arfon Smith
27a4eeb206 Samples update 2014-06-22 16:19:04 +01:00
Arfon Smith
bacf4d5780 Merge pull request #1303 from geekflyer/master
Add .xsjs and .xsjslib as JavaScript extension (SAP HANA XS)
2014-06-22 16:18:04 +01:00
Christian Theilemann
f92fed60f8 Add .xsjs and .xsjslib as JavaScript file extension
.xsjs and .xsjslib is used to denote server-side JavaScript files in SAP
HANA XS
2014-06-22 15:24:21 +02:00
Arfon Smith
5e797b548c Merge pull request #1273 from k2b6s9j/maven
Add Mavenfile and Jarfile as Ruby files.
2014-06-22 10:17:54 +01:00
Arfon Smith
700e2f1b2b Merge pull request #1299 from pchaigno/idl-lexer
Lexer for IDL
2014-06-21 17:45:16 +01:00
Paul Chaignon
861656978b Lexer for IDL 2014-06-21 17:31:49 +02:00
Arfon Smith
9c05bdac85 Samples 2014-06-21 13:19:38 +01:00
Arfon Smith
bd34c16c8f Merge pull request #1297 from github/map-pryrc-to-ruby
Add .pryrc support
2014-06-21 13:13:10 +01:00
Kevin Sawicki
13109bb9b8 Sort filenames 2014-06-20 11:28:35 -07:00
Kevin Sawicki
84f3b3720b Move .pryrc to filenames 2014-06-20 11:27:28 -07:00
Kevin Sawicki
858a66ccc8 Add .pryrc support 2014-06-20 11:18:08 -07:00
Arfon Smith
abb05eace6 Merge pull request #1295 from github/820-local
820 local
2014-06-20 12:42:21 +01:00
Arfon Smith
62bd96a778 Merge branch 'master' into 820-local
Conflicts:
	lib/linguist/samples.json
2014-06-20 12:37:20 +01:00
Arfon Smith
8cb736adfa Merge pull request #1294 from github/675-local
675 local
2014-06-20 12:29:20 +01:00
Arfon Smith
0758c05186 Merge branch 'master' into 675-local
Conflicts:
	.gitignore
	lib/linguist/languages.yml
	lib/linguist/samples.json
2014-06-20 12:22:58 +01:00
Arfon Smith
62bc6f0457 Merge pull request #1293 from github/1232-local
1232 local
2014-06-20 12:17:09 +01:00
Arfon Smith
ea7e894139 Explicit lexer 2014-06-20 12:13:04 +01:00
Arfon Smith
21f0ac99e6 Merge branch 'master' into 1232-local
Conflicts:
	lib/linguist/samples.json
2014-06-20 12:11:43 +01:00
Arfon Smith
b251866a29 Merge pull request #1292 from github/1261-local
1261 local
2014-06-20 11:02:17 +01:00
Arfon Smith
bf3db20a9d Samples 2014-06-20 10:58:44 +01:00
Arfon Smith
bd55147847 Merge branch 'master' into 1261-local 2014-06-20 10:58:21 +01:00
Arfon Smith
f4d64af39b Merge pull request #1291 from github/997-local
997 local
2014-06-20 10:49:46 +01:00
Arfon Smith
b7bda34645 Samples update 2014-06-20 10:46:38 +01:00
Arfon Smith
b13dea6df0 Merge branch 'master' into 997-local 2014-06-20 10:46:04 +01:00
Arfon Smith
28a64c9318 Samples 2014-06-20 10:27:47 +01:00
Arfon Smith
74be618fff Merge pull request #1290 from github/1258-local
1258 local
2014-06-20 10:26:59 +01:00
Arfon Smith
8bbe10bf50 Reordering 2014-06-20 10:22:14 +01:00
Arfon Smith
d275911624 Merge pull request #1289 from github/1132-local
1132 local
2014-06-20 10:17:44 +01:00
Arfon Smith
c26382301c Merge branch 'master' into 1132-local
Conflicts:
	lib/linguist/samples.json
2014-06-20 10:12:04 +01:00
Arfon Smith
e12bc07041 Samples 2014-06-19 16:03:05 +01:00
Arfon Smith
20416369ac Merge pull request #1282 from github/map-nuspec-to-xml
Add .nuspec extension to XML
2014-06-19 16:02:36 +01:00
Kevin Sawicki
2be91e9b2e Add .nuspec sample 2014-06-19 07:53:52 -07:00
Arfon Smith
dc1b8d9e80 Samples 2014-06-19 15:03:30 +01:00
Arfon Smith
bf0a814514 Merge pull request #1283 from LyricsMaster/add-xojo
Add Xojo language support
2014-06-19 15:03:04 +01:00
Kenichi Maehashi
b14267d40f add more samples for Xojo language 2014-06-19 22:59:12 +09:00
Arfon Smith
195a4115d8 Samples 2014-06-19 14:50:41 +01:00
Arfon Smith
e1da8eb841 Merge pull request #1280 from diekmann/patch-1
Added language Isabelle
2014-06-19 14:50:14 +01:00
Kenichi Maehashi
14738f037f remove non-source file extensions of Xojo language 2014-06-19 07:27:54 +09:00
Kenichi Maehashi
a437943516 Add Xojo language and example 2014-06-19 01:29:54 +09:00
Kevin Sawicki
900ee57de8 Add .nuspec extension to XML 2014-06-18 08:58:18 -07:00
diekmann
947f4e1c57 alphabetic sorting 2014-06-18 09:34:26 +02:00
diekmann
d9f17a65dd Isabelle language - fixed lexer and added sample
Also, Isabelle is very polular in academia.
See for example http://scholar.google.de/scholar?q=isabelle%2FHOL

In around 40 days, the seL4 microkernel [1] with its
Isabelle proofs is (probably) released on github [2].
[1] http://sel4.systems/
[2] https://lists.cam.ac.uk/mailman/htdig/cl-isabelle-users/2014-June/msg00011.html
2014-06-18 09:16:31 +02:00
Arfon Smith
f71def19ae Merge pull request #1279 from github/jdennes-vendored-octicon-styles
Vendor Octicon styles
2014-06-17 21:42:11 -05:00
Charles Strahan
e452e85cae add nix support 2014-06-17 19:32:22 -04:00
diekmann
5059fe90b0 Added language Isabelle
Isabelle is a generic proof assistant. It is comparables (to some degree) to Coq.

Used in
* diekmann/topoS
* 3of8/sturm
* formare/auctions
* larsrh/hol-falso
* dpthayer/MetaProof

Hello Wolrd example (file must be named HelloWorld.thy):
  theory HelloWorld
  imports Main
  begin
  (*put content here*)
  end
2014-06-17 21:27:03 +02:00
Arfon Smith
b90da731d6 Samples 2014-06-16 16:28:21 -05:00
Arfon Smith
d2012519ba Merge pull request #1268 from metopa/patch-1
Support of the .inc extension in Assembly group.
2014-06-16 16:27:35 -05:00
Gusakov Nikita
1b7f26091c Added generated rule for Zephir language 2014-06-16 19:20:43 +04:00
James Dennes
548e4f1845 Add Octicons entries to vendor.yml 2014-06-15 16:22:18 +02:00
James Dennes
625bed8fca Add failing test for vendored Octicons 2014-06-15 16:19:59 +02:00
Viacheslav Kroilov
db15367775 Rename X86_64.INC to X86_64.inc 2014-06-14 20:13:38 +04:00
Viacheslav Kroilov
309d14a955 Rename SYSTEM.INC to SYSTEM.inc 2014-06-14 20:13:19 +04:00
Viacheslav Kroilov
5ff16e1195 Rename FASM.ASM to FASM.asm 2014-06-14 20:12:50 +04:00
Viacheslav Kroilov
cf43aa9111 Rename ASSEMBLE.INC to ASSEMBLE.inc 2014-06-14 20:11:58 +04:00
metopa
138c1e6024 Added examples for Assembly
From FASM source under BSD
2014-06-14 19:21:02 +04:00
Kepler Sticka-Jones
382870a881 Add Mavenfile and Jarfile as Ruby files. 2014-06-12 13:11:56 -06:00
Andy Lindeman
31921838cd Merge pull request #1272 from github/cut-release-v2.12.0
Bumps to 2.12.0
2014-06-11 17:02:17 -04:00
Andy Lindeman
a707587182 Bumps to 2.12.0 2014-06-11 14:00:46 -04:00
Andy Lindeman
bc482af999 Merge pull request #1269 from github/pygments-bump
Bumps pygments.rb to 0.6.0
2014-06-11 13:58:37 -04:00
Andy Lindeman
6818744dae Merge remote-tracking branch 'origin/master' into pygments-bump 2014-06-11 13:56:53 -04:00
Andy Lindeman
607185ac61 Be explicit about lexer 2014-06-11 13:56:40 -04:00
Brian Lopez
81b7a412c3 Merge pull request #1270 from github/cut-release-v2.11.5
Bump version for 2.11.5 release
2014-06-10 15:28:27 -07:00
Brian Lopez
09b9a8b441 bump version for 2.11.5 release 2014-06-10 16:00:08 -05:00
Andy Lindeman
85479cc2de Swift has a lexer now 2014-06-10 15:54:56 -04:00
Andy Lindeman
3ad4eb2b59 Adds supports for Slim 2014-06-10 15:54:56 -04:00
Andy Lindeman
878fe95ec3 Upgrades to pygments.rb 0.6.0 2014-06-10 15:54:55 -04:00
Viacheslav Kroilov
3d23d1be69 Added .inc extension in Assembly group.
It`s include file for assembler source that helps to structure code. Usually contains normal assembly source.
2014-06-10 21:25:27 +04:00
Arfon Smith
701e720ab8 Merge pull request #1259 from github/bump-charlock-again
Bump charlock to 0.7.3
2014-06-09 11:10:30 -05:00
Arfon Smith
e709ce7d56 Samples 2014-06-09 06:27:26 -05:00
Arfon Smith
32c89a5405 Merge pull request #1260 from dalehenrich/patch-1
.ston extension for "Smalltalk Object Notation"
2014-06-09 06:26:34 -05:00
Dale Henrichs
1735982a73 Merge branch 'ston_test' of github.com:dalehenrich/linguist into ston_test 2014-06-08 21:21:56 -07:00
Dale Henrichs
625e0aa1af add sample files 2014-06-08 21:21:29 -07:00
Dale Henrichs
00e1a3f8fd ahhh, caps are sorted before lower case ... 2014-06-08 20:56:09 -07:00
Dale Henrichs
539256b08e send to travis 2014-06-08 20:49:45 -07:00
Dale Henrichs
ff791f5a39 "looks like I should have used JSON lexer
- let's see what travis has to say
2014-06-08 20:41:41 -07:00
William Woodruff
de4d48b0fe added two notebook samples 2014-06-08 23:11:19 -04:00
William Woodruff
b5c49f6d1c added a sample package 2014-06-08 22:57:25 -04:00
William Woodruff
03cb7d6ffb Merge remote-tracking branch 'upstream/master' 2014-06-08 22:54:13 -04:00
Arfon Smith
304fc344a1 Merge pull request #1257 from simonwistow/master
Add support for the Varnish VCL edge scripting language
2014-06-08 21:46:32 -05:00
William Woodruff
33c42638e9 added two more common mathematica suffixes 2014-06-07 21:21:47 -04:00
Dale Henrichs
9d940755e7 .ston extension for "Smalltalk Object Notation"
See https://github.com/svenvc/ston
2014-06-07 14:49:39 -07:00
Brian Lopez
bc04232f87 add the fixture 2014-06-07 15:32:29 -05:00
Brian Lopez
e17ebec098 Bump charlock to 0.7.3
This version includes a fix for the encoding lookup table for some
encoding aliases in the ICU detection API
2014-06-07 15:25:44 -05:00
Niklas Rosenstein
a7cba23526 added .pyp suffix and an example source file. closes issue #1 2014-06-07 01:29:30 +02:00
Simon Wistow
7cd23036a7 Add support for the Varnish VCL edge scripting language 2014-06-06 12:59:50 -07:00
Arfon Smith
44c5413abf Merge pull request #1256 from github/1042-update
1042 update
2014-06-06 12:38:45 -05:00
Arfon Smith
50ab58e91f Merge commit 'refs/pull/1042/head' of github.com:github/linguist into 1042
Conflicts:
	lib/linguist/vendor.yml
2014-06-06 12:32:30 -05:00
Arfon Smith
1fd0732390 Merge branch 'master' into 1042
Conflicts:
	lib/linguist/vendor.yml
2014-06-06 12:31:56 -05:00
Arfon Smith
ed1b9ee899 Merge pull request #1255 from github/680-update
680 update
2014-06-06 12:12:09 -05:00
Arfon Smith
d3c04d6310 nesC 2014-06-06 12:08:38 -05:00
Julian Gehring
f66ffe305f Change R package ignores to absolute paths 2014-06-06 08:57:11 -07:00
Arfon Smith
2a9ff0083c Merge branch 'master' into 814
Conflicts:
	lib/linguist/languages.yml
2014-06-06 09:55:08 -05:00
Brian Lopez
c1cf7ea825 Merge pull request #1254 from github/cut-release-v2.11.4
v2.11.4 release
2014-06-05 10:03:43 -07:00
Brian Lopez
67f7268a55 bump version for v2.11.4 release 2014-06-05 10:55:32 -05:00
Brian Lopez
a55ee7eb09 Merge pull request #1253 from github/newer-charlock
Use the :ruby_encoding value from charlock 0.7.2
2014-06-05 08:51:46 -07:00
Brian Lopez
203f6d1944 forgot to add the test fixture 2014-06-04 17:15:33 -05:00
Brian Lopez
42c68f21d1 test ruby_encoding 2014-06-04 15:59:42 -05:00
Brian Lopez
7e8be1293e Use the :ruby_encoding value from charlock 0.7.2 2014-06-04 15:51:33 -05:00
Arfon Smith
09c234ec26 Merge pull request #1190 from Madsn/patch-1
Add html5shiv to vendor.yml
2014-06-04 10:30:03 -05:00
Arfon Smith
65a26c3e73 Merge pull request #1248 from github/1035-update
1035 update
2014-06-03 22:06:54 -05:00
Arfon Smith
98f35aefdc Merge branch 'master' into 1035
Conflicts:
	lib/linguist/languages.yml
	lib/linguist/samples.json
2014-06-03 22:03:59 -05:00
Arfon Smith
38a3714514 Samples update 2014-06-03 21:37:25 -05:00
Arfon Smith
491700f925 Merge pull request #1198 from Spirit-of-Oberon/master
Support of the Component Pascal language
2014-06-03 21:36:52 -05:00
Andy Lindeman
4d033e7e83 Merge pull request #1246 from github/cut-release-v2.11.3
Bumps to 2.11.3
2014-06-03 15:15:14 -04:00
Andy Lindeman
efc3638065 Freshens up the release docs 2014-06-03 14:50:27 -04:00
Andy Lindeman
b7685ab317 Bumps to 2.11.3 2014-06-03 14:50:17 -04:00
Andy Lindeman
83c5f6a004 Merge pull request #1245 from alindeman/binarylike_data
Handle case where newline chars don't transcode to detected encoding
2014-06-03 12:55:33 -04:00
Andy Lindeman
aa5a94cc3e Handle case where newline chars don't transcode to detected encoding
We've seen cases where binary files are detected as encodings such as
ISO-8859-8-I. This usually happens when the binary files are short, so
while the detector is mistaken, there is also not very much data for use
in the detection algorithm in the first place so it's understandable
that the detector was wrong.

In these cases, the code to convert ASCII newline characters to
encodings such as ISO-8859-8-I fails because there is no conversion
between them.

We now simply assume that the data is all one line in those cases. In
reality the data is binary, but this obviously difficult to detect
reliably.
2014-06-03 12:26:23 -04:00
Arfon Smith
a5b6331ab5 Merge pull request #1244 from akashivskyy/master
Add orange color to Apple Swift language
2014-06-03 10:53:55 -05:00
Adrian Kashivskyy
2164b28c64 Update Swift color 2014-06-03 16:03:49 +02:00
Adrian Kashivskyy
0fb824b345 Add orange color to Swift 2014-06-03 15:54:15 +02:00
Arfon Smith
29ee094d66 Merge pull request #1241 from github/1239-update
1239 update
2014-06-02 21:11:40 -05:00
Arfon Smith
4a7ae50ec8 Dammit 2014-06-02 21:07:11 -05:00
Arfon Smith
398439a937 Pedantic 2014-06-02 21:04:39 -05:00
Arfon Smith
a3bc3a7615 Merge branch 'master' into 1239-update
Conflicts:
	lib/linguist/samples.json
2014-06-02 21:01:00 -05:00
Arfon Smith
7989fbd613 Samples 2014-06-02 21:00:03 -05:00
john howard
c389c79be9 fixed zimpl declaration position collation order problem 2014-06-02 18:30:45 -07:00
john howard
1fd2f921fd added yet another zimpl extension that is in use 2014-06-02 18:28:00 -07:00
john howard
ed851849db added extra extension for zimpl 2014-06-02 18:23:07 -07:00
john howard
cfb9f6f0a4 smaller code sample 2014-06-02 18:14:57 -07:00
John Howard
3d5a0da62e rename sample directory 2014-06-02 18:08:54 -07:00
john howard
4e15369f9a added missing lexer for zimpl 2014-06-02 17:27:24 -07:00
john howard
5b3152d99d Create sample.zmpl 2014-06-02 15:16:00 -07:00
john howard
a6955f4edb added zmpl language declaration 2014-06-02 15:09:41 -07:00
Arfon Smith
280ef7d1bd Merge pull request #1238 from github/cut-release-2.11.2
Bumping to 2.11.2
2014-06-02 15:51:32 -05:00
Arfon Smith
8d2ea90a5b Bumping to 2.11.2 2014-06-02 14:59:12 -05:00
Arfon Smith
4bf7abd73d Merge pull request #1237 from alindeman/swift
Adds basic support for the Swift programming language
2014-06-02 14:57:23 -05:00
Andy Lindeman
8f251e6756 Adds basic support for the Swift programming language
Text only lexer for now until Pygments catches up
2014-06-02 15:54:05 -04:00
Arfon Smith
4cd35c1f33 Samples update 2014-05-31 09:20:20 -05:00
Arfon Smith
78fda33707 Merge pull request #1209 from jkeirstead/GAMS-language
Added the General Algebraic Modeling System (GAMS) to languages with example
2014-05-31 09:19:57 -05:00
Arfon Smith
5c6a98f479 Merge pull request #1230 from github/1206-update
1206 update
2014-05-31 09:15:47 -05:00
Arfon Smith
efbcb942c3 Merge branch 'master' into 1206
Conflicts:
	lib/linguist/samples.json
2014-05-31 09:13:42 -05:00
Arfon Smith
f3da1bc3b1 Merge pull request #1228 from christianbundy/add-ox
Add Ox
2014-05-31 09:10:10 -05:00
Christian Bundy
72a6186f08 Fix Ox implementation
Remove .h from Ox, fix `lex` typo, and add samples for Ox.
2014-05-30 15:47:42 -07:00
Christian Bundy
8cde6d2e8f Merge branch 'master' of https://github.com/github/linguist into add-ox 2014-05-30 15:33:51 -07:00
Arfon Smith
4f2c7fdc3c Merge pull request #1227 from github/1178-update
1178 update
2014-05-30 16:25:47 -05:00
Arfon Smith
5a830504a4 Merge branch 'master' into 1178
Conflicts:
	lib/linguist/samples.json
2014-05-30 16:15:28 -05:00
Arfon Smith
086fb09038 Merge pull request #1226 from christianbundy/patch-2
Add Cheat Engine's .ct as an XML extension
2014-05-30 16:11:54 -05:00
Arfon Smith
5544a041ce Samples update 2014-05-30 16:11:01 -05:00
Arfon Smith
6447333368 Merge pull request #1208 from jkeirstead/R-documentation
R documentation
2014-05-30 16:08:41 -05:00
Christian Bundy
1d6a42f0eb Add Cheat Engine's .ct as an XML extension
Add .ct as an XML extension instead of its own language, as recommended by @arfon in #1199
2014-05-30 14:04:59 -07:00
Arfon Smith
de14b75517 Samples update 2014-05-30 15:59:30 -05:00
Arfon Smith
0f302713da Merge pull request #1188 from kaendfinger/master
Groovy: Add .gvy, .grt, and .gtpl to the list of extensions
2014-05-30 15:58:59 -05:00
Arfon Smith
a66d064d4a Merge pull request #1088 from github/815-update
815 update
2014-05-30 15:46:08 -05:00
Arfon Smith
4fefe2020f Merge branch 'master' into 815-update
Conflicts:
	lib/linguist/samples.json
2014-05-30 15:38:55 -05:00
Arfon Smith
72fab07a14 Text only 2014-05-30 15:37:38 -05:00
Arfon Smith
adbf4f6b17 Samples update 2014-05-30 15:33:36 -05:00
Arfon Smith
cfcf4ca915 Merge pull request #1203 from kostko/master
Add .ipp extension for C++
2014-05-30 15:21:16 -05:00
Arfon Smith
c427fba87f Merge pull request #1200 from andyli/patch-1
Haxe: Use haxe logo color.
2014-05-30 15:20:38 -05:00
Arfon Smith
ab14bcab03 Merge pull request #1215 from felixphew/patch-1
Add .mkdn as a Markdown extension
2014-05-30 14:59:12 -05:00
ferrall
78de3fb959 Update languages.yml
added explicit lexer
2014-05-28 14:03:27 -04:00
ferrall
b9eda90ddd Update languages.yml
Adding Ox to the list http://www.doornik.com/ox/
2014-05-27 14:47:20 -04:00
Arfon Smith
66b346c8fb Merge pull request #1219 from github/sql-data
SQL -> data
2014-05-27 05:59:17 -05:00
Arfon Smith
8215b225d9 Searchable 2014-05-27 05:54:44 -05:00
Arfon Smith
41da8c6352 SQL -> data 2014-05-27 05:50:40 -05:00
felixphew
b7dad4df5e Add .mkdn as a Markdown extension 2014-05-26 06:55:37 +10:00
James Keirstead
1a98ccbf5f Added an example Rd file from the scholar package 2014-05-23 18:12:36 +01:00
James Keirstead
8d16a3365e Added documentation format to R language 2014-05-23 18:12:23 +01:00
Arfon Smith
67bf48fafc Merge pull request #1212 from christianbundy/patch-1
Javascript and LESS being labeled as 100% "shell"
2014-05-22 16:49:39 -05:00
Andy Lindeman
9a3c9a8c19 Bumps to 2.11.1 2014-05-22 11:33:44 -04:00
Andy Lindeman
6a192dae63 Merge pull request #1211 from alindeman/multibyte_line_count
Counts the number of lines correctly for files with certain multibyte encodings
2014-05-22 11:27:35 -04:00
Christian Bundy
f5895216a8 Update NuGet regex to be more specific
Change NuGet regex to look for packages that end with a period and 1+ digits, as NuGet always appends a version number to the end of packages.
2014-05-21 13:43:29 -07:00
Andy Lindeman
09a33f8daa Takes a different approach 2014-05-21 15:11:06 -04:00
Andy Lindeman
185db0e8d5 Makes sure we do not fail if encoding == nil
It looks like it's valid to call this method even if `binary?` is true.
Encoding as 'ASCII-8BIT' should always succeed.
2014-05-21 13:36:39 -04:00
Andy Lindeman
85efbde3f7 Counts the number of lines correctly for files with certain multibyte encodings 2014-05-21 13:36:39 -04:00
Andy Lindeman
93d7aa3d07 Merge pull request #1194 from github/linguist-version-2.11.0
Bumping to 2.11.0
2014-05-21 13:34:00 -04:00
James Keirstead
e96096f786 Added the General Algebraic Modeling System (GAMS) to languages, with example 2014-05-21 14:36:11 +01:00
James Adams
0a850eeddd Add support for Pan Language
As found in repositories related to @quattor, e.g. https://github.com/quattor/template-library-core
The test file provided matches the one I submitted to Pygments.

At some point in the future when the Pygments patches land at GitHub the lexer should be updated from "Text only" to "pan".
2014-05-20 16:54:07 +01:00
Jernej Kos
42658ffd61 Added .ipp extension for C++. 2014-05-19 19:12:49 +02:00
Andy Li
24fc2842d2 Haxe: Use haxe logo color. 2014-05-17 16:38:44 +08:00
ilovb
ac2723abe3 example 2 for Component Pascal 2014-05-17 00:02:34 +04:00
ilovb
0d0e219532 add example for Component Pascal 2014-05-16 23:47:27 +04:00
ilovb
cf35807709 add lexer for Component Pascal 2014-05-16 23:29:52 +04:00
ilovb
c2b53db96d remove Component Pascal examples 2014-05-16 23:08:28 +04:00
ilovb
8e6efc3a7d remove Component Pascal Document 2014-05-16 22:39:18 +04:00
ilovb
4b6f05b4d1 remove ace mode 2014-05-16 22:17:05 +04:00
ilovb
7aad5f93e4 Support of the Component Pascal language
http://en.wikipedia.org/wiki/Component_Pascal
2014-05-16 21:36:23 +04:00
Kenneth Endfinger
9b6a7622d2 Groovy: Remove .tpl from list 2014-05-16 10:37:49 -04:00
Kenneth Endfinger
6c666075b5 Groovy: Add '.tpl' to the list of extensions. 2014-05-16 10:32:41 -04:00
Kenneth Endfinger
6d26bf5c82 Groovy: .groovy is now first in the array 2014-05-16 10:20:57 -04:00
Daniël W. Crompton
6d5da4c9ec update 2014-05-14 01:38:55 +02:00
Kenneth Endfinger
51dde1f6a4 Created Sample for .gvy 2014-05-13 16:34:20 -04:00
Kenneth Endfinger
13c9259d23 Created Sample for .grt 2014-05-13 16:33:43 -04:00
Kenneth Endfinger
a22c2d678b Created a Sample for .gtpl 2014-05-13 16:32:21 -04:00
Kenneth Endfinger
5c36f8df85 Groovy: Sorted Extensions 2014-05-13 15:37:20 -04:00
Arfon Smith
37781cb58e Bumping to 2.11.0 2014-05-13 09:47:54 -05:00
Mikkel Madsen
dcc598442b Handle minified html5shiv 2014-05-13 09:01:37 +02:00
Mikkel Madsen
91877056fb Extend vendor test for html5shiv 2014-05-13 09:00:43 +02:00
Mikkel Madsen
868e9df434 Add html5shiv to vendor.yml 2014-05-13 08:56:08 +02:00
Kenneth Endfinger
c3642ba7ed Groovy: Add .gvy, .grt, and .gtpl to the list of extensions 2014-05-12 20:51:20 -04:00
Brian Lopez
56f128af66 Merge pull request #1187 from github/bump-charlock
Bump charlock_holmes to 0.7.0
2014-05-12 08:11:58 -07:00
Brian Lopez
c1e560b901 use charlock 0.7.1 or better 2014-05-12 16:17:57 +02:00
Brian Lopez
92bc1cdcdf bump charlock_holmes to 0.7.0 2014-05-11 23:39:46 +02:00
Brandon Keepers
9fde0ec447 Merge pull request #1183 from alflanagan/master
Added modernizr.js to vendor files list, added tests
2014-05-09 09:40:55 -04:00
alflanagan
297ef6195d Added modernizr.js to vendor files list, added tests 2014-05-08 21:02:00 -04:00
Arfon Smith
9873157076 Updating samples 2014-05-07 13:13:38 -05:00
Arfon Smith
675c1f3c0b Merge pull request #1155 from NN---/patch-1
Add more extensions based on XML
2014-05-07 13:12:58 -05:00
NN
fee7a34ddc Add targets sample. 2014-05-07 20:47:09 +03:00
Paul Chaignon
a148d52aed .frag file extension added for JavaScript with some new samples 2014-05-07 13:42:46 +02:00
Arfon Smith
5da8831aff Samples update 2014-05-05 22:11:51 -04:00
Arfon Smith
e9ff0f4998 Merge pull request #988 from lamestation/master
Added Propeller Spin language to languages.yml
2014-05-05 22:11:06 -04:00
Rick Bradley
658bf98b4c Merge pull request #1172 from github/include-release-instructions-in-readme
add release instructions to README
2014-05-05 12:02:26 -07:00
Rick Bradley
452cfd32d7 one more tweak 2014-05-05 13:56:08 -05:00
Rick Bradley
3f1dc71cc2 improve release instructions 2014-05-05 13:51:36 -05:00
Rick Bradley
256157cd42 add release instructions to README 2014-05-05 13:46:28 -05:00
NN
843279ff1d Add samples as requested. 2014-05-05 08:10:49 +03:00
Brett Weir
8118546ac7 Changed Propeller Spin primary_extension key to extensions and set value as array 2014-05-04 21:05:19 -07:00
Brett Weir
15c05c723e Converted spin samples from UTF16LE to UTF8 character encoding. 2014-05-04 19:05:53 -07:00
Arfon Smith
d0d40c0d2e Samples update 2014-05-04 20:44:40 -05:00
Arfon Smith
f494972d04 Merge pull request #1136 from jdf/master
Add support for Processing's new Python Mode sketches.
2014-05-04 20:44:03 -05:00
Jonathan Feinberg
1c4def7320 Add Python processing examples. 2014-05-04 21:13:19 -04:00
Arfon Smith
6e22b946bd Merge pull request #1168 from github/950-update
950 update
2014-05-04 19:49:57 -05:00
Arfon Smith
0a54df3a12 Merge branch 'master' into 950
Conflicts:
	lib/linguist/languages.yml
2014-05-04 19:46:20 -05:00
Arfon Smith
20af70cd90 Merge pull request #1166 from pchaigno/cuda-type
Programming type added to Cuda
2014-05-04 19:36:19 -05:00
Arfon Smith
a2f721d4ef Merge pull request #1167 from github/the-end-of-primary-extension
RIP `primary_extension`. / cc @nox @tnm @bkeepers @rick
2014-05-04 19:30:59 -05:00
Arfon Smith
03a1a733f6 Formatting 2014-05-04 19:27:23 -05:00
Arfon Smith
4a76088b43 Formatting 2014-05-04 10:01:46 -05:00
Arfon Smith
5a1dab8073 Note on extensions 2014-05-04 09:59:11 -05:00
Brett Weir
86a97610bd Added sample Spin code objects to samples/Propeller Spin/ 2014-05-04 07:32:35 -07:00
Arfon Smith
87bfe3657a Merge branch 'master' into 985
Conflicts:
	lib/linguist/languages.yml
2014-05-04 09:04:28 -05:00
Paul Chaignon
3802e31b90 Missing type added to Cuda 2014-05-04 11:34:35 +02:00
Arfon Smith
4eff60e4b1 Merge pull request #1165 from github/972-update
972 update
2014-05-03 18:42:59 -05:00
Arfon Smith
f103306e91 Merge branch 'master' into 972
Conflicts:
	lib/linguist/vendor.yml
2014-05-03 18:38:23 -05:00
Arfon Smith
8b878784a4 Merge pull request #1159 from github/780-update
780 update
2014-05-03 18:31:48 -05:00
Arfon Smith
44a0d19ac0 Merge branch 'master' into 780-update
Conflicts:
	lib/linguist/samples.json
2014-05-03 17:11:13 -05:00
Arfon Smith
3023516796 Samples update 2014-05-03 17:10:02 -05:00
Arfon Smith
6038a06c43 Merge pull request #1150 from Oldes/RedLanguage
Red language
2014-05-03 17:09:22 -05:00
Arfon Smith
20735a4cdd Merge pull request #1160 from github/bump_escape_utils
Updating escape_utils
2014-05-02 15:22:18 -05:00
Arfon Smith
df3b1a983e > 1.9.3 even 2014-05-02 15:13:57 -05:00
Arfon Smith
84e43d7d3f Dropping < 1.9.2 2014-05-02 15:07:09 -05:00
Arfon Smith
7e81a9e50b Updating escape_utils 2014-05-02 13:43:24 -05:00
Arfon Smith
28acee8e33 Updating samples 2014-05-02 13:36:44 -05:00
Arfon Smith
80184f1e1d Merge branch 'master' into 780 2014-05-02 13:36:14 -05:00
Arfon Smith
d893259e75 Merge pull request #1146 from Rolinh/master
Change DOT language type from programming to data (fix #1145)
2014-05-02 13:32:37 -05:00
Arfon Smith
d3f37f5013 Merge pull request #1158 from github/1142-update
1142 update
2014-05-02 13:29:10 -05:00
Arfon Smith
0e6a46abfc Merge branch 'master' into 1142
Conflicts:
	lib/linguist/samples.json
2014-05-02 13:18:47 -05:00
Arfon Smith
49e27387b7 Samples update 2014-05-02 13:16:58 -05:00
Arfon Smith
c2495c27d3 Merge pull request #1141 from killmous/master
Added samples for Haskell
2014-05-02 13:16:30 -05:00
Arfon Smith
f0a3acd735 Merge pull request #1156 from quarterto/patch-1
Update PHP colour to reflect php.net
2014-05-02 13:11:53 -05:00
Arfon Smith
29d2930de8 Merge pull request #1144 from TazeTSchnitzel/patch-1
Gave GML a colour (its official colour)
2014-05-02 13:07:17 -05:00
Anthony Ramine
2d82071103 Delete primary_extension from language data
The language attribute is still maintained as the first extension found.

This allows Mercury to be properly detected by Linguist, as per #748.
2014-05-01 21:35:49 +02:00
Matt Brennan
f4a3636371 Update PHP colour to reflect php.net
Currently the PHP colour is very similar to C#, and seems to have been pull from thin air. PHP has a perfectly nice distinctive purple, used on [php.net](http://php.net) since forever. This pull request changes PHP's colour to a dark shade of that purple.

Before                                   | After
-----------------------------------------|-----------------------------------------
![](http://www.colorhexa.com/6e03c1.png) | ![](http://www.colorhexa.com/4f5d95.png)
2014-05-01 09:33:05 +01:00
NN
d8f96441da Add more extensions based on XML 2014-05-01 10:06:15 +03:00
Oldes
cf5646d45a Fixing the Text only lexer 2014-04-29 23:32:30 +02:00
Oldes
5c3d32cafd Using Text lexer untill proper lexer will be accepted 2014-04-29 23:28:39 +02:00
Oldes
ea45db38e9 Changed name to just: Red 2014-04-29 23:09:24 +02:00
Oldes
a978c4eb34 Red language (red-lang.org) 2014-04-29 23:04:53 +02:00
Robin Hahling
65302dbec7 Change DOT language type from programming to data (fix #1145)
DOT language is a (graph) description language thus a subset of a data
language.
2014-04-29 10:03:46 +02:00
Andrea Faulds
3c82131863 Gave GML a colour (its official colour) 2014-04-28 19:03:28 +01:00
Paul Chaignon
00873da7a6 New sample file for R 2014-04-27 18:36:34 +02:00
killmous
a17f7d1cb2 Added samples for Haskell 2014-04-27 11:29:26 -05:00
Jonathan Feinberg
9f850db126 Add support for Processing's new Python Mode sketches. 2014-04-26 21:22:49 -04:00
Arfon Smith
e513ac628a Merge pull request #1135 from github/js-colour-update
Updating JS colour to be a little softer
2014-04-26 19:57:49 -05:00
Arfon Smith
3dc11186a1 Updating JS colour to be a little softer 2014-04-26 19:55:17 -05:00
Arfon Smith
2fbca98e7f Merge pull request #1130 from github/2.10.15-release
Cutting 2.10.15 release
2014-04-25 15:56:16 -05:00
Arfon Smith
7ad411fbaa Cutting 2.10.15 release 2014-04-25 13:46:54 -05:00
Arfon Smith
4e4e77bc9a Merge pull request #1123 from garyb/purescript-colour
Change PureScript colour to avoid clash with JavaScript
2014-04-24 20:47:20 -05:00
Arfon Smith
a7afdaa677 Merge pull request #1125 from github/liquid-rethink
Rethinking Liquid extensions
2014-04-24 20:44:40 -05:00
Arfon Smith
dd24b54a31 Rethinking Liquid extensions 2014-04-24 20:36:35 -05:00
Arfon Smith
833e409bd8 Merge pull request #1122 from github/2.10.14
Bumping to 2.10.14
2014-04-24 16:04:21 -05:00
Gary Burgess
c2a376fbc9 Revise purescript colour 2014-04-24 20:32:02 +01:00
Arfon Smith
c21707b8b1 Bumping to 2.10.14 2014-04-24 14:22:32 -05:00
Arfon Smith
c04f4519a7 Merge pull request #1121 from github/linguist-version
Adding Linguist::VERSION
2014-04-24 14:12:57 -05:00
Arfon Smith
fd7db27b48 Using Linguist::VERSION in gemspec 2014-04-24 14:09:10 -05:00
Arfon Smith
cab85f3de3 Adding Linguist::VERSION 2014-04-24 13:53:37 -05:00
Arfon Smith
34893650eb Merge pull request #1120 from github/1116-1117-update
1116 1117 update
2014-04-24 13:37:48 -05:00
Paul Chaignon
bb58840c1c .st file extension for StringTemplate HTML files
Conflicts:
	lib/linguist/samples.json
2014-04-24 13:34:08 -05:00
Parker Moore
cbcbb969d5 Add XML, HTML and JSON samples for Liquid. 2014-04-23 23:02:19 -04:00
Parker Moore
3c21f8db51 Update samples.json with Liquid samples. 2014-04-23 22:54:04 -04:00
Parker Moore
6c3f8a7787 For now, let's just use a Text-only Liquid lexer. 2014-04-23 18:12:19 -04:00
Parker Moore
915a11f2b6 type can also be "prose" 2014-04-23 18:12:10 -04:00
Parker Moore
55ce1e8b93 Remove HTML+Liquid language. 2014-04-23 18:02:33 -04:00
Parker Moore
ccce5475bf Add Liquid samples. 2014-04-23 17:45:16 -04:00
Parker Moore
cb844a1913 Add liquid to languages.yml. 2014-04-23 17:18:10 -04:00
Rick Bradley
6c4c2fa0e0 Merge pull request #1114 from github/2.10.13
cut a 2.10.13 release
2014-04-23 13:48:22 -07:00
Rick Bradley
ba26e1f5d5 2.10.13 2014-04-23 14:47:33 -05:00
Arfon Smith
bbddd3f946 Samples 2014-04-23 11:08:43 -05:00
Arfon Smith
2634866b91 Merge pull request #1040 from Mikulas/latte
Added support for Latte
2014-04-23 11:06:53 -05:00
Arfon Smith
d13825daff Merge pull request #1060 from kohenkatz/patch-1
Added Buildr 'Buildfile' and 'buildfile'
2014-04-22 22:34:28 -05:00
Arfon Smith
e7233db9fa Merge pull request #1110 from github/samples_checking
Towards testing for presence of sample files
2014-04-22 22:17:14 -05:00
Arfon Smith
cec5942d6b Removing extra . 2014-04-22 22:09:30 -05:00
Arfon Smith
aaef516c22 Regenerating samples.json 2014-04-22 19:41:21 -05:00
Arfon Smith
09ae07d003 Adding .pluginspec example for XML 2014-04-22 19:39:32 -05:00
Arfon Smith
a144c9f394 Adding R example with .r extension 2014-04-22 19:36:44 -05:00
Arfon Smith
0e10a8c857 Adding pod example for Perl 2014-04-22 19:29:56 -05:00
Arfon Smith
33387b7227 Removing .cu extension for Cirru (unable to find examples in the wild) 2014-04-22 19:23:30 -05:00
Arfon Smith
3b5a237f1e Adding Common Lisp examples with .cl extension 2014-04-22 19:22:49 -05:00
Arfon Smith
152e3ace99 Adding all_extensions method to Language 2014-04-22 16:56:27 -05:00
Arfon Smith
64b6f18e66 Adding debugging for failed assertions 2014-04-22 16:53:42 -05:00
Arfon Smith
be1003648a Removing pry 2014-04-22 15:48:57 -05:00
Arfon Smith
536800f9f5 Towards testing for presence of sample files 2014-04-22 15:47:49 -05:00
Arfon Smith
20f858c305 Merge pull request #1109 from github/adding_crystal_samples
Adding Crystal samples to address https://github.com/github/github/issue...
2014-04-22 14:20:00 -05:00
Arfon Smith
07fdea7496 Adding Crystal samples to address https://github.com/github/github/issues/24802 2014-04-22 14:18:51 -05:00
Arfon Smith
449d675e3d Updating samples 2014-04-22 12:13:27 -05:00
Arfon Smith
bdcb9ecffe Merge pull request #897 from erkyrath/master
YAML file recognition for Inform 7
2014-04-22 12:13:09 -05:00
Arfon Smith
850756cf7d Merge pull request #1073 from tajjada/master
Add .vshader, .fshader, .gshader files for GLSL.
2014-04-22 12:10:20 -05:00
Arfon Smith
b3f55c72f8 Updating samples 2014-04-22 12:09:24 -05:00
Arfon Smith
021848eb8e Merge pull request #1101 from pchaigno/sql-extensions
New file extensions and samples for SQL
2014-04-22 12:08:25 -05:00
Arfon Smith
06ceed0e66 Merge pull request #1108 from github/920-update
920 update
2014-04-22 10:41:06 -05:00
Arfon Smith
d599f000c1 Merge branch 'master' into 920
Conflicts:
	lib/linguist/samples.json
2014-04-22 10:38:26 -05:00
Arfon Smith
cd9760d69b Merge pull request #1106 from github/924-update
924 update
2014-04-22 10:29:14 -05:00
Arfon Smith
ada4cad25c Seems a little fussy? 2014-04-22 10:27:35 -05:00
Arfon Smith
4ba6f9567b CAPS 2014-04-22 10:25:50 -05:00
Arfon Smith
d84867d6f3 Merge branch 'master' into 924
Conflicts:
	lib/linguist/samples.json
2014-04-22 10:22:01 -05:00
Arfon Smith
05aaba4d89 Merge pull request #1105 from github/1072-update
1072 update
2014-04-22 10:04:46 -05:00
Arfon Smith
33e5d3a444 Merge branch 'master' into 1072 2014-04-22 09:58:28 -05:00
Arfon Smith
7b6a0e9cad Samples update 2014-04-22 09:40:45 -05:00
Arfon Smith
8e681359ba Merge pull request #1102 from CNG/MTML
Add Movable Type Markup Language support
2014-04-22 09:36:04 -05:00
Steven Normore
39e5f5bab3 change golang color to #375EAB 2014-04-22 10:30:35 -04:00
Arfon Smith
4ff37a783f Merge pull request #1103 from sebgod/fix-moocode
fix Moocode detection, add ace_mode for Mercury
2014-04-22 09:21:08 -05:00
Charlie Gorichanaz
1c5916d3f2 Add Movable Type Markup Language support 2014-04-22 13:06:19 +00:00
Brandon Keepers
d8425af684 Merge pull request #1104 from sebgod/ignore-vendor+bundle
add .bundle/ and vendor to .gitignore
2014-04-22 08:22:00 -04:00
Sebastian Godelet
8db3638ce4 add .bundle/ and vendor to .gitignore 2014-04-22 14:10:57 +02:00
Sebastian Godelet
d8cc60a026 fix moocode, add ace_mode for Mercury 2014-04-22 14:02:53 +02:00
Paul Chaignon
9f49efef0a New file extensions and samples for SQL 2014-04-22 10:34:19 +02:00
Ricky Elrod
9d569c8bd5 Idris is upstream in Pygments now: https://bitbucket.org/birkenfeld/pygments-main/pull-request/210 2014-04-22 02:54:27 -04:00
Arfon Smith
58d65c2d27 Not sure where we lost this 2014-04-21 17:18:10 -05:00
Arfon Smith
9c921b331c Merge pull request #1098 from github/1049-update
1049 update
2014-04-21 17:13:45 -05:00
Arfon Smith
b065d8c0d7 Merge branch 'master' into 1049
Conflicts:
	lib/linguist/samples.json
2014-04-21 17:03:18 -05:00
Arfon Smith
5148422e39 Merge pull request #1097 from github/1046-update
1046 update
2014-04-21 16:10:10 -05:00
Arfon Smith
88131e0844 Merge branch 'master' into 1046
Conflicts:
	lib/linguist/languages.yml
	lib/linguist/samples.json
2014-04-21 16:03:42 -05:00
Arfon Smith
6c8c815ad8 Merge pull request #1096 from github/989-update
989 update
2014-04-21 15:52:56 -05:00
Arfon Smith
06cee71e07 Merge branch 'master' into 989
Conflicts:
	lib/linguist/languages.yml
2014-04-21 15:43:49 -05:00
Arfon Smith
6106441e58 Merge pull request #1095 from wcandillon/master
Add JSONiq support
2014-04-21 15:09:39 -05:00
William Candillon
a949338a91 Add JSONiq support 2014-04-21 21:58:41 +02:00
Arfon Smith
ad93511c98 Merge pull request #1026 from pchaigno/intellisense-js
Add jQuery IntelliSense files to vendor.yml
2014-04-21 14:22:25 -05:00
Arfon Smith
014f026eb2 Including Ruby 2.1.1 in Travis config 2014-04-21 13:52:32 -05:00
Arfon Smith
ca8ad800ca Samples update 2014-04-21 13:44:46 -05:00
Arfon Smith
54335c74f6 Merge pull request #1002 from matthew-white/stata
Stata
2014-04-21 13:44:00 -05:00
Arfon Smith
fb2f19e666 Merge pull request #1094 from github/1014-update
1014 update
2014-04-21 13:41:43 -05:00
Arfon Smith
7e9612fe9f Merge branch 'master' into 1014
Conflicts:
	lib/linguist/samples.json
2014-04-21 13:37:02 -05:00
Arfon Smith
acbe0e4a51 Merge pull request #1093 from github/1005-update
1005 update
2014-04-21 12:55:58 -05:00
Arfon Smith
22e09a587c Merge branch 'master' into 1005
Conflicts:
	lib/linguist/samples.json
2014-04-21 12:51:40 -05:00
Arfon Smith
1b5d35a536 Samples update 2014-04-21 12:47:09 -05:00
Arfon Smith
5d480fc6d6 Merge pull request #1008 from garyb/master
PureScript programming language
2014-04-21 12:46:42 -05:00
Arfon Smith
f5b361c31b Merge pull request #1092 from github/1068-update
1068 update
2014-04-21 12:20:51 -05:00
Arfon Smith
918a69e6f0 Merge branch 'master' into 1068
Conflicts:
	lib/linguist/samples.json
2014-04-21 12:19:12 -05:00
Arfon Smith
6d346fdc8d Merge pull request #1071 from jkutner/add_session_lang
Added ShellSession language
2014-04-21 12:11:43 -05:00
Arfon Smith
09506dbbd9 Merge pull request #1056 from spderosso/alloy
Add support for the Alloy language
2014-04-21 11:58:55 -05:00
Rick Bradley
e11a671a1d Merge pull request #1090 from github/pr-1011-updated
Add SourcePawn language, part deux (replaces #1011)
2014-04-21 09:56:29 -07:00
Rick Bradley
c72ad3f402 regen samples.json on current master 2014-04-21 11:54:10 -05:00
Arfon Smith
48b240630e Merge pull request #882 from github/obj_cpp
Updating Obj C++ PR so that it merges cleanly
2014-04-21 11:52:24 -05:00
Arfon Smith
715732bb93 Merge branch 'master' into obj_cpp
Conflicts:
	lib/linguist/samples.json
2014-04-21 11:51:50 -05:00
Rick Bradley
2f01a4bd78 Merge pull request #1089 from github/pr-668-updated
Add Grammatical Framework, part deux (replaces #668)
2014-04-21 09:49:34 -07:00
Rick Bradley
62e34caa4c regen samples.json on new master 2014-04-21 11:46:01 -05:00
Arfon Smith
142dcd27e5 Merge branch 'master' into obj_cpp
Conflicts:
	lib/linguist/samples.json
2014-04-21 11:44:24 -05:00
Rick Bradley
2f94e46f1f Merge branch 'master' into GrammaticalFramework-master 2014-04-21 11:42:23 -05:00
Rick Bradley
5c5999fbf3 Merge pull request #1087 from github/pr-718-updated
Updated languages.yml to add support for EAGLE PCB, part deux (replaces #718)
2014-04-21 09:38:21 -07:00
Arfon Smith
26fbc45baf Merge branch 'master' into 815
Conflicts:
	lib/linguist/samples.json
2014-04-21 11:37:49 -05:00
Rick Bradley
a2537fa108 regen samples.json from current master 2014-04-21 11:32:50 -05:00
Rick Bradley
8e76ba2020 Merge branch 'master' into SparkysWidgets-master 2014-04-21 11:31:14 -05:00
Arfon Smith
0f5e2a1ea4 Merge pull request #1086 from github/817-updated
817 updated
2014-04-21 11:24:37 -05:00
Arfon Smith
00ff4a1d8a Merge branch 'master' into 817-updated
Conflicts:
	lib/linguist/samples.json
2014-04-21 11:23:48 -05:00
Arfon Smith
98dacd07c2 Merge branch 'master' into 817
Conflicts:
	lib/linguist/samples.json
2014-04-21 11:22:18 -05:00
Rick Bradley
701f5220fc Merge pull request #1085 from github/pr-826-updated
Add Frege Language, part deux (replaces #826)
2014-04-21 09:21:38 -07:00
Rick Bradley
2aa27c99b3 regen samples on new new master 2014-04-21 11:12:37 -05:00
Arfon Smith
236f521e13 Merge pull request #1084 from github/891-update
891 update
2014-04-21 11:11:06 -05:00
Brandon Keepers
d0d6dfa5c0 Merge pull request #1041 from Mikulas/typo
Fix languages.yml 'interpreters' key documentation
2014-04-21 12:09:46 -04:00
Arfon Smith
5af528184d Merge branch 'master' into 891-update
Conflicts:
	lib/linguist/samples.json
2014-04-21 11:09:06 -05:00
Rick Bradley
01c4fba092 merge master; regen samples data 2014-04-21 11:08:29 -05:00
Arfon Smith
20c9ed9f36 Adding .tm Tcl samples 2014-04-21 11:04:23 -05:00
Rick Bradley
40f4c49ba9 Merge pull request #879 from zilverline/master
Legit.  Merging.

Thanks for the bugfix, @s0meone!
2014-04-21 09:04:22 -07:00
Arfon Smith
a265237b2e Merge branch 'master' into 891 2014-04-21 11:01:50 -05:00
Rick Bradley
a4eea6b8cd Merge pull request #1083 from github/pr-899-updated
Add Game Make Language, part deux (replaces #899)
2014-04-21 09:00:20 -07:00
Rick Bradley
e7f5cadfcb regen samples with new new master 2014-04-21 10:59:35 -05:00
Arfon Smith
21d3a3a141 Merge pull request #1082 from github/updated-922
Updated 922
2014-04-21 10:52:48 -05:00
Rick Bradley
96a162225d regen samples.json 2014-04-21 10:52:13 -05:00
Arfon Smith
09c2f763f1 Merge branch 'master' into updated-922
Conflicts:
	lib/linguist/samples.json
2014-04-21 10:51:42 -05:00
Rick Bradley
ce096e277d Merge pull request #1081 from github/pr-931-updated
Mathematica (part deux) -- replaces #931
2014-04-21 08:50:14 -07:00
Arfon Smith
c0bb883aaa Merge branch 'master' into 922
Conflicts:
	lib/linguist/samples.json
2014-04-21 10:48:04 -05:00
Rick Bradley
23eea82139 please the pedant 2014-04-21 10:42:33 -05:00
Arfon Smith
edd9881642 Merge pull request #961 from couchand/patch-1
Add React library to vendor.yml
2014-04-21 10:38:29 -05:00
Rick Bradley
e46c6968ba merge master; regen samples 2014-04-21 10:38:26 -05:00
Brandon Keepers
1528847249 Merge pull request #1052 from shrayas/cache-vendor-fix
Fixing cache vendor regex
2014-04-21 11:30:06 -04:00
Brandon Keepers
182aaf8fce Merge pull request #951 from github/javascript-nodejs-interpreter
Add interpreter for JavaScript
2014-04-21 11:28:03 -04:00
Arfon Smith
d6dfa1dcbc Merge pull request #965 from pchaigno/systemverilog
Support of SystemVerilog
2014-04-21 10:25:20 -05:00
Rick Bradley
6450d5861a Merge pull request #973 from whitten/patch-1
Builds green with master.  Merging.
2014-04-21 08:16:59 -07:00
Arfon Smith
9562b8ad3d Merge pull request #969 from pchaigno/aspectj
Support of AspectJ language
2014-04-21 10:14:27 -05:00
Arfon Smith
507248dd95 Merge pull request #1080 from github/979-update
Update of https://github.com/github/linguist/pull/979
2014-04-21 10:03:22 -05:00
Arfon Smith
19a67c07fe Merge branch 'master' into 979 2014-04-21 09:59:18 -05:00
Sebastian Godelet
2ef130530d Merge remote-tracking branch 'upstream/master' into mercury-noconflict 2014-04-18 12:28:18 +02:00
Rick Bradley
0c6f4383a7 Merge pull request #1075 from github/release-2.10.12
cut a 2.10.12 release
2014-04-17 13:26:12 -07:00
Rick Bradley
97908204a3 2.10.12 2014-04-17 11:28:15 -05:00
Jasen Borisov
5606916d99 Oops, looks like this has to be alphabetical... 2014-04-17 20:50:37 +09:00
Jasen Borisov
3d4b682d63 Add .vshader, .fshader, .gshader files for GLSL. 2014-04-17 17:04:12 +09:00
Steven Normore
96561c24be change golang color to #3399ff 2014-04-16 16:59:26 -04:00
Joe Kutner
0cd1566145 sorted the languages.yml file alphabetically 2014-04-16 13:50:19 -05:00
Joe Kutner
b6aa9f9b12 Added ShellSession language using pygments Bash Session lexer 2014-04-16 12:21:14 -05:00
Brandon Keepers
b6d0a41718 Merge pull request #1063 from lucaswerkmeister/patch-1
Add .osm extension for XML
2014-04-16 09:57:21 -04:00
Gusakov Nikita
0240b76cc3 Added Zephir language 2014-04-15 20:13:32 +04:00
Lucas Werkmeister
3f96bcc32b Add .osm extension for XML
The OpenStreetMap project (openstreetmap.org) uses the .osm extension for the OSM XML format (http://wiki.openstreetmap.org/wiki/OSM_XML).
2014-04-14 10:07:15 +02:00
MK
9b8823ab3c Added Buildr 'Buildfile' and 'buildfile'
All other options (as listed at https://github.com/apache/buildr/blob/master/lib/buildr/core/application.rb#L110) are already covered by other things here.
2014-04-11 10:18:20 -04:00
Santiago Perez De Rosso
8ba9446fcd temporarily set lexer to Text Only for Alloy 2014-04-07 22:44:35 -04:00
Santiago Perez De Rosso
04a6af4272 alloy support 2014-04-07 18:04:59 -04:00
Shrayas Rajagopal
a1641f2ffa Fixing cache vendor regex
* Fixes #1051
* Any folder with "cache" in it was being ignored. This fixes it.
2014-04-07 11:35:28 +05:30
Sebastian Godelet
fe183c07f5 added .moo (parser definitions) to Mercury extension list 2014-04-06 20:26:28 +02:00
Sebastian Godelet
a620d45635 added Mercury/ to 'vendor' directory 2014-04-06 20:25:22 +02:00
Sebastian Godelet
fa9660d5a1 Included store.m in Mercury/samples, now 100% coverage in Mercury library/ and compiler/ 2014-04-06 20:00:21 +02:00
Sebastian Godelet
8b39d30a6e changed mercury extension to .mercury, to avoid conflict with Obj-C 2014-04-06 18:36:05 +02:00
Sebastian Godelet
090ffa4191 fixing merge conflict in vendor.yml 2014-04-06 18:07:06 +02:00
Paul Bone
42194094a2 Add the Mercury language to linguist
lib/linguist/languages.yml:
    Add the declaration for the language.

samples/Mercury:
    Add samples for the classifier as Mercury shares it's filename extension
    with several other languages.
2014-04-06 18:05:27 +02:00
Jerome Bakker
08058f9f2e Update vendor.yml
extend the vendor/ exclusion to handle vendors/

Some projects use this folder to store external libaries (eg https://github.com/Elgg/Elgg)
2014-04-06 17:45:54 +02:00
Triangle717
3d76ba001f Update languages.yml
Detect Inno Setup installer scripts (http://www.jrsoftware.org/isinfo.php)
2014-04-06 17:45:54 +02:00
Max Horn
078a2877c7 Add support for the GAP language 2014-04-05 13:26:41 +02:00
Julian Gehring
9ae0bdbb43 Add R package ignores to vendor.yml
Ignore vignette and external data directories which contain no R source code
2014-04-03 21:29:18 +02:00
Mikulas
a22ba56596 Added support for Latte 2014-04-03 10:26:54 +02:00
Mikulas
b6cadc93f2 Fix languages.yml 'interpreters' key documentation 2014-04-03 10:17:14 +02:00
draegtun
a5fa26461c updated samples.json for new Rebol sample files 2014-04-02 16:41:47 +01:00
Aleks Kissinger
a3aaa1ec4d included sample and extension .ML extension for Standard ML files 2014-04-02 12:41:54 +01:00
Barry Walsh
5ddcdede74 Delete hello-world.r
Requested by pchaigno and replaced with the two "real" *.r files (GCP-datatype.r & boaters.r)
2014-03-28 13:58:41 +00:00
Barry Walsh
c4cdcc8db7 Another sample file for .r extension 2014-03-28 13:57:50 +00:00
Barry Walsh
7219ebdf3c Sample file for Rebol .r extension 2014-03-28 13:57:07 +00:00
Barry Walsh
cd548c6ed6 Opps word instead of world! 2014-03-28 13:55:31 +00:00
Barry Walsh
75140f5d52 Sample file for .r3 Rebol extension 2014-03-28 13:54:44 +00:00
Barry Walsh
774303a846 Delete hello-rebol.r 2014-03-28 13:53:22 +00:00
Paul Chaignon
6b18b25039 Add jQuery IntelliSense files to vendor.yml 2014-03-28 07:58:54 +01:00
Barry Walsh
bb2afbb03d Disambiguate .r extension between Rebol and R 2014-03-27 16:54:24 +00:00
Paul Chaignon
50ddb0ba16 .inl file extension added in languages.yml 2014-03-24 21:24:54 +01:00
Paul Chaignon
556a98b525 C++ .inl file extension 2014-03-24 21:20:14 +01:00
The Crimson Tautology
1f022a84ea Add SourcePawn language 2014-03-23 12:50:35 -04:00
Gary Burgess
110fa6d384 Add PureScript language & samples 2014-03-21 23:55:20 +00:00
Barry Walsh
c971c14a83 Sample file for .r Rebol extension 2014-03-21 18:07:16 +00:00
Barry Walsh
4bec82a19e Sample file for .r3 Rebol extension 2014-03-21 18:05:49 +00:00
Barry Walsh
0c23050eaf Sample file for .r2 Rebol extension 2014-03-21 18:05:14 +00:00
Barry Walsh
e1c81a8884 Sample file for .rebol Rebol extension 2014-03-21 18:04:18 +00:00
Barry Walsh
19e4dabf01 Sample file for .reb Rebol extension 2014-03-21 18:03:03 +00:00
Barry Walsh
a98ad13af4 Rebol extension changes to languages.yml
Historically Rebol used the .r extension which unfortunately clashes with the R Stats programming language :(

For example even the Rebol interpreter repo says it uses 9.7% R instead of Rebol! - https://github.com/rebol/rebol

So 3 changes here…

1) .reb is now the primary (and official) extension - http://www.rebol.com/article/0540.html

2) .rebol moved to list of extensions (some code does use it)

3) .r added back.  NB. The majority of Rebol code on Rebol uses this (followed by .r2 & .r3).  .r was present in languages.yml previously but was removed for some reason? (looks like here - 5a5d334999)
2014-03-21 15:09:37 +00:00
mwhite-IPA
24eb965adb Added Text only lexer for Stata. 2014-03-19 18:50:44 -04:00
mwhite-IPA
852957c769 Added .doh and .matah samples for Stata.
Source: http://www.stata.com/help.cgi?include
2014-03-19 17:38:06 -04:00
mwhite-IPA
e1eff56d6a Added .ihlp sample for Stata.
The author of this message, mwhite-IPA, is the source of this sample.
2014-03-19 17:37:26 -04:00
mwhite-IPA
220ecabd8c Added .do sample for Stata.
Source: http://www.stata.com/help.cgi?regress
2014-03-19 17:36:07 -04:00
mwhite-IPA
27ea8d0bf5 Added .mata sample for Stata.
Source: http://www.stata.com/help.cgi?m1_first
2014-03-19 17:35:15 -04:00
mwhite-IPA
8f02926d68 Added .ado and .sthlp samples for Stata.
The author of this message, mwhite-IPA, is the source of these samples.
2014-03-19 17:33:26 -04:00
mwhite-IPA
1769083a85 Added Stata extensions. 2014-03-19 17:31:21 -04:00
mwhite-IPA
05c714af76 Trimmed white space. 2014-03-19 17:31:01 -04:00
Michael Hendricks
ee3c9bcdbd Add misclassified Prolog samples
These two files are incorrectly classified as Perl.  They should be
classified as Prolog.  There are many distinctive tokens in each file
which clearly differentiate between Perl and Prolog.
2014-03-17 08:56:45 -06:00
Ted Nyman
f39456ee47 Merge pull request #991 from waywardmonkeys/improve-dylan-support
Add .lid and .intr extensions for Dylan.
2014-03-15 18:13:41 -07:00
DavidSkrundz
911a532051 Changed the order of the Objective-C files. 2014-03-14 12:45:42 -06:00
DavidSkrundz
44910dbcd8 Added .h as an Objective-C file type 2014-03-14 12:28:45 -06:00
DavidSkrundz
42cb8ec3cf Reverted to the .matlab extension and added .m as another extension. 2014-03-14 09:39:36 -06:00
Bruce Mitchener
957dd15d5b Add .lid and .intr extensions for Dylan. 2014-03-14 22:03:31 +07:00
DavidSkrundz
1e9435c999 MATLAB uses .m files not .matlab. 2014-03-13 21:19:56 -06:00
Brett Weir
dc1b0e3c48 Added Propeller Spin language to languages.yml 2014-03-13 14:49:11 -07:00
Ted Nyman
2e731a1084 Merge pull request #978 from cronycle/master
added VCR Cassette to the 'generated' list so they get suppressed
2014-03-13 14:37:25 -07:00
Albert Lyu
869cf8ba11 Update D3.js in vendored list 2014-03-13 16:20:04 -05:00
Andrew Plotkin
d394e8db21 Added a lexer definition (text only).
I may build an Inform 7 highlighter/lexer someday, but not this week.
2014-03-12 14:44:13 -04:00
Andrew Plotkin
a8b6267471 Merge branch 'master' of https://github.com/github/linguist 2014-03-12 14:38:45 -04:00
sparkyswidgets
637682e452 Reordered Eagle to match placement in Samples, this should be the correct way I hope! 2014-03-11 22:14:15 -06:00
Ted Nyman
38bd07a113 Merge pull request #832 from dasmithii/patch-2
Updated language list to include HOW, and fixed the lack of lexer proble...
2014-03-11 20:24:07 -07:00
Sparky's Widgets
68b6152b42 Merge pull request #2 from SparkysWidgets/patch-3
Delete EagleXMLfoo.sch
2014-03-11 20:37:48 -06:00
Sparky's Widgets
a349f81e2d Delete EagleXMLfoo.sch 2014-03-11 20:37:36 -06:00
Sparky's Widgets
8c2e41cc99 Merge pull request #1 from SparkysWidgets/patch-1
Delete EagleXMLfoo.brd
2014-03-11 20:37:07 -06:00
Sparky's Widgets
6c0618f75a Delete EagleXMLfoo.brd 2014-03-11 20:34:18 -06:00
sparkyswidgets
b1eed16422 Modified sch and brd anmes to reflect parent folder 2014-03-11 20:33:18 -06:00
sparkyswidgets
432f27480e This should order Eagle above ECL 2014-03-11 20:23:31 -06:00
sparkyswidgets
23addec9a9 Removing lower case folder to match order 2014-03-11 20:22:11 -06:00
sparkyswidgets
e50cc9b210 Just Maybe this will work! 2014-03-11 19:57:00 -06:00
sparkyswidgets
58d865f293 reording folder list, got out of order for some reason 2014-03-11 19:33:24 -06:00
sparkyswidgets
b69fef2c39 Added Eagle XML sch and brd Samples 2014-03-11 18:52:39 -06:00
sparkyswidgets
f8fee56446 Merge remote-tracking branch 'upstream/master' 2014-03-11 18:45:46 -06:00
Chriztian Steinmeier
10903e7e38 Add missing lexer to Kit language 2014-03-11 22:37:46 +01:00
Douglas Adam Smith II
645411e256 Testing... 2014-03-11 14:23:28 -04:00
Douglas Adam Smith II
29510b26e0 Fix 2014-03-11 14:00:49 -04:00
Douglas Adam Smith II
e4c1cc572b Fixed order of languages. Forgot how ASCI works.
This will (hopefully) fix the build.
2014-03-11 13:51:16 -04:00
Douglas Adam Smith II
7c85c11944 Updated How language to FLUX (name change) 2014-03-11 13:38:10 -04:00
Ted Nyman
5318402be5 Merge pull request #981 from cjxgm/patch-1
add extension .cc for c++
2014-03-09 04:21:02 -07:00
eXerigumo Clanjor (哆啦比猫/兰威举)
8323450958 add extension .cc for c++ 2014-03-09 16:12:30 +08:00
Nayeem Syed
68793b1f0f added check for extension and line count on vcr_cassette? in generated 2014-03-08 08:12:18 +00:00
Ted Nyman
c6e3c8fab8 Merge pull request #963 from mbezjak/vendor-gradle
Add gradle wrapper files to vendor.yml
2014-03-07 20:46:46 -08:00
Max Ogden
54c1d7c9d9 update improved javascript color in test_language 2014-03-06 23:38:59 -08:00
Max Ogden
3a19ba4523 dramatically enhance colors for javascript and css 2014-03-06 23:10:05 -08:00
Nayeem Syed
210ca9a86f added VCR Cassette to the 'generated' list so they get suppressed 2014-03-06 12:00:54 +00:00
Ted Nyman
ff9e0aedd6 Merge pull request #854 from cndreisbach/patch-1
Adding support for Hoplon files
2014-03-05 18:31:54 -08:00
Paul Chaignon
cb9bef43a5 Support of the .vh file extension for SystemVerilog 2014-03-04 10:44:23 +01:00
Ted Nyman
115ac6b999 Merge pull request #938 from tenbits/master
Add Mask markup language
2014-03-03 15:10:34 -08:00
David Whitten
4c500e1fb2 Comment.m : routine with comments but no commands
The routine Comment.m has most of the rules for comments and tags.
2014-02-28 10:34:14 -05:00
Ted Nyman
5715802999 Merge pull request #971 from veganstraightedge/master
Added Gemfile.lock to the list of Ruby filenames
2014-02-26 14:48:44 -08:00
Albert Lyu
a2690b7dac Add D3.js to the vendored list
Followed the commit pattern of a3e1420476
2014-02-26 13:07:20 -06:00
Shane Becker
8b00872d36 Added Gemfile.lock to the list of Ruby filenames 2014-02-26 02:15:08 -08:00
Ted Nyman
c67c8a7482 Merge pull request #967 from jaaso/master
Added Shen programming language
2014-02-25 13:18:46 -08:00
Paul Chaignon
ee370cbf43 Support of AspectJ language 2014-02-25 11:22:28 +01:00
saarin
78217e1cee Add shen language in linguist 2014-02-23 05:22:39 +01:00
Ted Nyman
86364da07e Regenerate samples 2014-02-21 13:50:54 -08:00
Paul Chaignon
4ec878ba0d CSS color added to SystemVerilog 2014-02-21 18:13:42 +01:00
Paul Chaignon
28a2b39a55 Support of SystemVerilog 2014-02-21 17:48:24 +01:00
Miro Bezjak
92e1b1eb40 Add gradle wrapper files to vendor.yml 2014-02-21 11:27:47 +01:00
Andrew Couch
3bea39eb10 Add React library to vendor.yml
React is a library quickly growing in popularity.  Let's exclude it from language stats.
2014-02-20 21:52:28 -05:00
Ted Nyman
a34398eb92 Merge pull request #935 from pchaigno/sld
Support of the .sld file extension for Scheme.
2014-02-20 15:32:52 -08:00
Ted Nyman
2f6035cd1e Merge pull request #957 from github/adding-jsonld
Adding support for JSONLD: http://json-ld.org/
2014-02-19 22:01:34 -08:00
Arfon Smith
e437cf749d Adding support for JSONLD: http://json-ld.org/ 2014-02-18 15:28:22 -06:00
Ted Nyman
5218b60681 Merge pull request #952 from github/applescript-interpreter
Add interpreter for AppleScript
2014-02-17 11:51:54 -08:00
Ivan Zuzak
8afe123084 add interpreter for applescript 2014-02-17 17:08:51 +01:00
Ivan Zuzak
c60328383d add interpreter for javascript 2014-02-17 17:04:47 +01:00
Ted Nyman
69bfe73165 Not yet on the additional binary check 2014-02-16 19:43:33 -08:00
Ted Nyman
3429ddeaa1 Standard regex 2014-02-16 19:41:45 -08:00
Ted Nyman
9242a2f83b Merge pull request #923 from kasoki/master
add haxelib run.n neko bytecode file to vendor list
2014-02-16 19:40:24 -08:00
Dave Hughes
e2b1fe3641 Amend tests to ensure SQL *is* searchable 2014-02-17 01:11:23 +00:00
Dave Jones
0eebd42d72 Make SQL a programming language
Because it is (see https://github.com/waveform80/db2utils which hilariously claims to be 79% written in C!)
2014-02-17 00:09:22 +00:00
Ted Nyman
b0894e20ef Merge pull request #301 from andyli/binary
Do not detect language if it is a binary file.
2014-02-16 14:55:07 -08:00
Ted Nyman
0cc47dd47d Merge pull request #944 from midraed/patch-1
added .rsx extension to R languge
2014-02-14 18:45:23 -08:00
Guillermo Federico Olmedo
fdbfd8b806 Added sample of R qgis script 2014-02-14 14:53:14 -02:00
Guillermo Federico Olmedo
9f3ee8dff6 added .rsx extension to R.
When we write R extensions for QGIS we have to end the files in .rsx [1]. But the code its pure R. It would be great if github acknowledge those scripts as R scripts.

[1] http://www.qgis.org/es/docs/user_manual/processing/3rdParty.html#r-creating-r-scripts
2014-02-14 13:42:18 -02:00
Ted Nyman
166012dcf0 Merge pull request #911 from bbarker/master
Added ATS to language list and several samples (try #2).
2014-02-13 15:18:33 -08:00
Alex Kit
bb754d8849 .mask support for Mask 2014-02-13 03:47:56 +01:00
Paul Chaignon
0eaaa2bacc Support of the .sld file extension for Scheme. 2014-02-11 13:39:50 +01:00
Ted Nyman
a1eab2a439 Merge pull request #916 from pchaigno/ecl
Support of the .ecl file extension for Prolog.
2014-02-09 15:34:07 -08:00
Christopher Granade
487cad7041 Added another Mathematica sample, improving accuracy. 2014-02-07 13:18:08 -05:00
Christopher Granade
43f393a02d Added text-only lexer, since Pygments doesn't support Mathematica. 2014-02-07 13:07:48 -05:00
Christopher Granade
3c1f4c8ee1 Added languages and regenerated samples.json. 2014-02-07 12:57:24 -05:00
Christopher Granade
81db880a7b Added a simple Mathematica package as a test case. 2014-02-07 12:44:47 -05:00
Christopher Granade
277a71f6f6 Example file autogenerated by Mathematica. 2014-02-07 12:44:47 -05:00
Ted Nyman
0cfcb6917b Minor README 2014-02-06 13:18:02 -08:00
Baptiste Fontaine
681561229e E has no lexer 2014-02-05 00:53:00 +01:00
Chriztian Steinmeier
43825c3426 Update samples.json 2014-02-04 23:50:44 +01:00
Chriztian Steinmeier
f4fd6ed94e Add sample file for Kit language 2014-02-04 23:26:25 +01:00
Chriztian Steinmeier
ef42680646 Add Kit entry in languages.yml 2014-02-04 23:26:02 +01:00
Christopher Kaster
03ce24221e add haxelib run.n neko bytecode file to vendor list 2014-02-04 19:00:33 +01:00
Baptiste Fontaine
e9f9a9ef12 .gnuplot added for Gnuplot language 2014-02-04 16:26:04 +01:00
Baptiste Fontaine
476b39c353 Gnuplot added 2014-02-04 16:21:13 +01:00
Baptiste Fontaine
0eea2bd7bb E language with samples 2014-02-03 15:27:40 +01:00
Paul Chaignon
f78ce5389e Support of the .ecl file extension for Prolog. 2014-02-01 15:47:51 +01:00
Ted Nyman
dd32b8f441 Merge pull request #913 from larsbrinkhoff/cl
Add heuristics for .cl
2014-01-28 19:06:10 -08:00
Lars Brinkhoff
39a9c768c8 Add heuristics for '.cl'. 2014-01-28 09:20:26 +01:00
Ted Nyman
ff257175ac Merge pull request #909 from github/coffescript-interpreters
Add interpreter for CoffeeScript
2014-01-26 10:06:18 -08:00
Brandon
877ee775a3 adding more varied examples, including an .atxt file 2014-01-25 17:55:28 -05:00
Ted Nyman
19e151390e Merge pull request #910 from abuiles/es6
Add .es6 as JavaScript extension.
2014-01-25 14:09:47 -08:00
Brandon
7da9038e79 fixed extension order in languages.yml 2014-01-25 15:17:52 -05:00
Brandon
1f8ef83657 Merge remote-tracking branch 'upstream/master' 2014-01-25 12:09:11 -05:00
Brandon
2770e4e111 adding ATS and several sample files 2014-01-25 12:09:00 -05:00
Adolfo Builes
96dfbc71eb Add .es6 as JavaScript extension. 2014-01-25 14:26:24 -02:00
Ivan Zuzak
9076086d9b add interpreter for coffescript 2014-01-24 20:46:51 +01:00
Ted Nyman
dc76ca7e37 Travis settings 2014-01-24 08:49:17 -08:00
Ted Nyman
7ee2b60762 Merge pull request #906 from Cirru/master
add Cirru with some samples
2014-01-24 08:47:53 -08:00
Ted Nyman
e3a9395b4c Merge pull request #907 from github/groovy-interpreters
Add interpreter for Groovy language
2014-01-24 08:44:29 -08:00
Ivan Zuzak
83513977a4 add interpreter for groovy language 2014-01-24 11:42:55 +01:00
jiyinyiyong
42912141c5 add Cirru with some samples 2014-01-23 19:52:58 +08:00
Ted Nyman
8561ece4d7 Minor README 2014-01-20 23:33:04 -08:00
Andrew Plotkin
028f2ab92c Inform has long lines, so we line wrap. 2014-01-20 00:00:16 -05:00
Andrea Faulds
34c83d9495 Added JSOnion and Spelunky samples to GML corpus 2014-01-19 16:27:47 +00:00
Andrea Faulds
e37f5b8df5 Added Game Maker Language 2014-01-19 15:10:28 +00:00
Andrew Plotkin
df342798b0 YAML file recognition for Inform 7, an interactive fiction design language.
The team account https://github.com/i7 has several active Inform 7 projects.
2014-01-19 01:19:24 -05:00
Ted Nyman
b91738721b Remove travis fix 2014-01-15 23:56:21 -08:00
Ted Nyman
123f4c26c3 Typescript vendor fixup 2014-01-15 16:15:30 -08:00
Ted Nyman
1bbf75b5ab Merge pull request #896 from sigurdsvela/master
Ignore typescript definition files.
2014-01-15 16:14:52 -08:00
sigurdsvela
70e56303ab Ignore typescript definition files. 2014-01-15 15:57:06 +01:00
Ted Nyman
ec2e3428ec 2.10.11 2014-01-14 15:33:35 -08:00
Ted Nyman
f8601dd663 Merge pull request #892 from edechter/master
Add .pl as prolog extension. Test sample already exists.
2014-01-14 15:30:41 -08:00
Eyal Dechter
df5faa0f21 Whitespace. 2014-01-14 10:09:40 -05:00
Eyal Dechter
8341992a38 Add .pl as extension for prolog. This is the standard prolog file extension. No one actually uses .prolog. 2014-01-14 10:07:27 -05:00
Lawrence Woodman
293ed8aa8d Add Tcl module extension
Tcl uses modules which have the extension .tm, so I have added this
extension for Tcl.
2014-01-14 10:28:34 +00:00
Ted Nyman
6a8d54e983 Merge pull request #890 from mihneadb/patch-1
Add foundation css to vendor.yml
2014-01-13 13:53:49 -08:00
Mihnea Dobrescu-Balaur
a18155da49 Add foundation css to vendor.yml 2014-01-13 23:28:33 +02:00
Ted Nyman
2a1e850924 Merge pull request #759 from vszakats/patch-3
recognize Harbour sources
2014-01-12 20:15:29 -08:00
Ted Nyman
528adc1a04 Minor documentation 2014-01-11 14:19:46 -08:00
Ted Nyman
9e7b1bf3cb Merge pull request #888 from rognierbenoit/patch-1
adds .ml4 extension for ocaml
2014-01-09 15:11:03 -08:00
Benoit Rognier
a517de8168 moves .ml4 ocaml extension before .mli
This should fix non reg tests
2014-01-09 14:54:15 +01:00
Benoit Rognier
a4ab7555e2 adds ml4 as ocaml extension 2014-01-08 14:40:41 +01:00
Ted Nyman
b666123f8e Version 2.10.10 2014-01-06 12:02:39 -08:00
Ted Nyman
8e36ddbafe Regenerate samples 2014-01-06 12:01:53 -08:00
Ted Nyman
abd0c47838 More C samples 2014-01-06 12:00:58 -08:00
Ted Nyman
8625f91b1b Merge pull request #886 from ruben2020/master
Fix for *.ts conflict between TypeScript and Qt Translation files
2014-01-04 13:51:42 -08:00
Ted Nyman
6c6b07fc68 Merge pull request #885 from GiampaoloFalqui/master
Add PAWN language
2014-01-04 13:50:37 -08:00
ruben2020
f5a6f20af0 renamed Qt translation ts file to have XML ext and updated test_heuristics.rb 2014-01-04 23:14:58 +08:00
ruben2020
76ee294c29 Removing second ts from languages.yml, but adding to test code for heuristics 2014-01-04 23:01:17 +08:00
ruben2020
77bff8fd6a *.ts conflict between TypeScript and Qt translation files: attempting roll back of samples.json 2014-01-04 22:04:53 +08:00
ruben2020
40b2e19310 Fix for *.ts conflict between TypeScript and Qt Translation files 2014-01-04 21:32:16 +08:00
Giampaolo Falqui
aaf281ec0e PAWN .inc extension & sample removed 2014-01-04 13:24:38 +01:00
Giampaolo Falqui
82bc320843 Add PAWN language 2014-01-04 01:39:49 +01:00
Arfon Smith
1f38db61df Merge pull request #884 from jmromer/add-tex-cls-extension
Add tex cls extension
2014-01-03 14:38:13 -08:00
Arfon Smith
db20462481 Merge pull request #834 from berkerpeksag/add-hy
Add Hy language.
2014-01-03 14:35:50 -08:00
Jake Romer
79be60bf8f adds cls file sample 2014-01-03 16:30:15 -05:00
Jake Romer
d57ff3abd6 adds latex cls extension 2014-01-03 16:29:20 -05:00
Arfon Smith
49fd25236e Merge branch 'pr/411' into obj_cpp
Conflicts:
	lib/linguist/samples.json
2014-01-03 14:11:49 -06:00
Ted Nyman
cd6c315fc8 Merge pull request #783 from jimhester/master
Add r alias
2014-01-02 18:55:10 -08:00
Ted Nyman
60bc772d48 New year 2014-01-02 12:17:28 -08:00
Jim Hester
7ad99baf32 Add check for R alias 2014-01-02 13:39:19 -05:00
Ted Nyman
252ae63854 Merge pull request #880 from emma-burrows/VBnet-samples
VB.net samples
2014-01-01 12:06:58 -08:00
Emma Burrows
7e3a9434ef Updated sample.json to include VB.Net samples 2014-01-01 17:35:45 +00:00
Emma Burrows
f388daab39 Added Visual Basic .NET sample files (a console code file and a Razor vbhtml file) 2013-12-31 19:20:21 +00:00
Daniel van Hoesel
83a742621f Do not reset options when calling highlight 2013-12-31 13:44:19 +01:00
Berker Peksag
89f4885b62 Add Hy language.
Hy is a dialect of Lisp that’s embedded in Python.
2013-12-31 14:43:29 +02:00
Ted Nyman
23a1ae5085 Merge pull request #878 from kevmoo/master
updated Dart sample to align with best practices
2013-12-30 19:20:28 -08:00
Kevin Moore
9cd6d6f001 updated Dart sample to align with best practices 2013-12-30 16:39:25 -08:00
Ted Nyman
a15ed48377 Regenerate samples 2013-12-30 14:41:28 -08:00
Ted Nyman
f5e8671481 Merge pull request #877 from emma-burrows/Csharp-samples
Csharp samples, including ASP.Net MVC view file
2013-12-30 14:40:50 -08:00
Emma Burrows
614f4f31ed Merge branch 'Csharp-samples' of https://github.com/emma-burrows/linguist into Csharp-samples 2013-12-30 22:32:57 +00:00
Emma Burrows
95c8405e0c Corrected order of C# file extentions 2013-12-30 22:31:52 +00:00
Emma Burrows
e6baa1d690 Updated sample.json to include C# samples 2013-12-30 22:06:16 +00:00
Emma Burrows
928409a355 Added cshtml extention for C# ASP.Net MVC Views. 2013-12-30 21:46:30 +00:00
Emma Burrows
86c9c9f6f3 Added a C# console file and cshtml Razor MVC View file. 2013-12-30 21:24:14 +00:00
Ted Nyman
49f29a53c0 Nicer breakdown output 2013-12-29 23:56:13 -08:00
Arfon Smith
40c04c8f6f travis/bundler fix 2013-12-29 19:27:20 -08:00
Arfon Smith
800d26cdad Adding Perl heuristic (and fixing up Prolog) 2013-12-29 19:22:31 -08:00
Ted Nyman
016f9852d6 Update prolog samples 2013-12-29 12:24:02 -08:00
Ted Nyman
fbcad41813 2.10.9 2013-12-29 12:15:44 -08:00
Ted Nyman
cdf6fb4a22 Initialize breakdown hash 2013-12-29 02:55:17 -08:00
Ted Nyman
9dc7329601 Merge pull request #873 from github/debug
fix refactoring from #836
2013-12-29 02:51:37 -08:00
Patrick Reynolds
bd4204b89e fix refactoring from #836 2013-12-29 01:32:56 -06:00
Ted Nyman
bbf0e65c74 No need for the extra check 2013-12-28 20:09:54 -08:00
Ted Nyman
b7e2f7cff9 Clearer naming 2013-12-28 20:00:11 -08:00
Ted Nyman
f9e50f4826 Minor README 2013-12-28 19:58:36 -08:00
Ted Nyman
184095cc02 Clarify README for new options 2013-12-28 19:57:39 -08:00
Ted Nyman
6a78ac61a7 Add --breakdown option for linguist binary 2013-12-28 19:56:41 -08:00
Ted Nyman
b498d51889 Add another breakdown_by_file assertion 2013-12-28 19:45:40 -08:00
Ted Nyman
7fb16b7abe More README 2013-12-28 19:42:03 -08:00
Ted Nyman
7bfdd4086e Update README for new output 2013-12-28 19:41:06 -08:00
Ted Nyman
dd27ddda17 Fixup output 2013-12-28 19:40:02 -08:00
Ted Nyman
b5181488a0 Merge pull request #872 from github/file-breakdown
Add support for stats breakdown by file per repo
2013-12-28 19:32:54 -08:00
Ted Nyman
001068ec75 Add test for language breakdown 2013-12-28 19:29:55 -08:00
Ted Nyman
e660442e2e Add support for stats breakdown by file per repo 2013-12-28 19:22:13 -08:00
Ted Nyman
f7b7a89709 Start towards pl heuristics 2013-12-28 18:06:04 -08:00
Ted Nyman
f46a895ae3 Merge pull request #870 from joshterrell805/patch-1
Add .njs as a Javascript extension
2013-12-28 13:06:20 -08:00
Josh Terrell
da396d4c28 Add .njs as a Javascript extension
.njs is an extension used to denote node javascript files.

Fixes https://github.com/github/linguist/issues/865
2013-12-27 14:20:37 -08:00
Ted Nyman
93556449c9 Merge pull request #868 from ktdreyer/gemspec
update gemspec metadata
2013-12-27 13:54:19 -08:00
Ken Dreyer
813c150918 add description metadata to gemspec 2013-12-27 14:14:04 -07:00
Ken Dreyer
3ced5ec784 add MIT license metadata to gemspec 2013-12-27 13:21:44 -07:00
Ted Nyman
cdde9096da More test_markup 2013-12-26 19:36:27 -08:00
Ted Nyman
2cb2194686 Add test_prose 2013-12-26 19:35:19 -08:00
Ted Nyman
6ae12cd0be Merge pull request #864 from natebrennand/master
add AngularJS to the vendored list
2013-12-24 13:43:13 -08:00
Nate Brennand
a3e1420476 add AngularJS to the vendored list 2013-12-24 02:05:10 -08:00
Ted Nyman
66a2d5fa2e Merge pull request #862 from wadetandy/master
Add vendor patterns for bower_components files
2013-12-23 20:55:19 -08:00
Wade Tandy
582daf273a Add vendor patterns for bower_components files
Adds Bower Component files to the vendored files list.  This
uses the `bower_components` directory, which is the standard set by the
Bower package manager.
2013-12-23 21:36:55 -05:00
Ted Nyman
310a804507 Add lua interpreter 2013-12-23 18:11:02 -08:00
Ted Nyman
5e4b860fb7 2.10.8 2013-12-23 17:38:54 -08:00
Ted Nyman
86f78792c4 Regenerate samples 2013-12-23 17:37:57 -08:00
Ted Nyman
064c62b587 Remove extra gosu sample 2013-12-23 17:37:05 -08:00
Ted Nyman
7f34de90c6 More ignored files 2013-12-23 17:31:52 -08:00
Ted Nyman
7fb389fda3 Just use primary extension here 2013-12-23 17:24:32 -08:00
Ted Nyman
85e4c58aeb Merge pull request #861 from github/add_crystal
Add crystal
2013-12-23 13:02:55 -08:00
Arfon Smith
de47a28ca0 Merge pull request #860 from github/extending_standard_ml
Extending standard ml
2013-12-23 13:02:18 -08:00
Arfon Smith
0f42d35f29 Merge branch 'pr/678' into add_crystal
Conflicts:
	lib/linguist/languages.yml
2013-12-23 14:58:35 -06:00
Arfon Smith
d51df2aef3 Adding .fun extension to Standard ML definition and adding some sample files 2013-12-23 14:50:39 -06:00
Arfon Smith
0c02bd18db Merge branch 'pr/520' into standard_ml 2013-12-23 14:39:37 -06:00
Arfon Smith
75276c8380 Regenerating samples.json 2013-12-23 14:37:25 -06:00
Ted Nyman
442aa4ed33 Merge pull request #859 from github/postscript_support
Postscript support
2013-12-23 12:33:51 -08:00
Arfon Smith
1ab8c8da53 Merge branch 'pr/804' into postscript_support
Conflicts:
	lib/linguist/generated.rb
2013-12-23 14:25:33 -06:00
Ted Nyman
f03201209f Merge pull request #858 from github/perl_6
Perl 6
2013-12-23 11:58:12 -08:00
Arfon Smith
d79d535182 Merge branch 'master' into perl_6
Conflicts:
	lib/linguist/samples.json
2013-12-23 13:52:37 -06:00
Arfon Smith
01dc7e2294 Removing non-Perl 6 specific extensions 2013-12-23 13:50:22 -06:00
Arfon Smith
b2d1917fa0 Merge branch 'pr/750' into perl_6
Conflicts:
	lib/linguist/samples.json
2013-12-23 13:49:20 -06:00
Ted Nyman
ca9ca29cc9 Merge pull request #857 from github/idl_support
Idl support
2013-12-23 11:47:33 -08:00
Arfon Smith
1ea21fbb8d Removing .pro extension for prolog 2013-12-23 13:37:21 -06:00
Arfon Smith
46274496d6 Merge branch 'master' into idl_support
Conflicts:
	lib/linguist/samples.json
2013-12-23 13:10:34 -06:00
Arfon Smith
16f1f87a8e Updating samples to include IDL 2013-12-23 13:09:00 -06:00
Ted Nyman
7847e17735 Merge pull request #856 from ChimeraCoder/master
Ignore non-minified bootstrap files
2013-12-23 11:06:03 -08:00
Ted Nyman
8cacd10210 Regenerate samples 2013-12-23 11:05:10 -08:00
Aditya Mukerjee
9a6446bae3 Fix typo 2013-12-23 14:04:39 -05:00
Ted Nyman
f6034b85fb Remove prolog samples for now and rely on .prolog extension 2013-12-23 11:04:26 -08:00
Arfon Smith
55c24a30df Merge branch 'pr/425' into idl_support 2013-12-23 13:01:11 -06:00
Aditya Mukerjee
88afdac5d2 Ignore non-minified bootstrap files
* bootstrap.min.js is already excluded, but bootstrap.js is not.
2013-12-23 13:30:03 -05:00
Ted Nyman
c5e9023762 Merge pull request #850 from github/cpp_heuristic
A C++ shibboleth?
2013-12-23 10:20:36 -08:00
Ted Nyman
b7d23efc1b Include SCSS as detectable markup 2013-12-23 10:05:36 -08:00
Arfon Smith
300d47b36b Regenerating samples.json and bringing C++ heuristic test up to date 2013-12-22 19:27:14 -06:00
Arfon Smith
e4d381d81c Merge branch 'master' into cpp_heuristic
Conflicts:
	lib/linguist/samples.json
2013-12-22 19:25:01 -06:00
Ted Nyman
3ece15b398 Update samples, version bump to 2.10.7 2013-12-22 15:46:54 -08:00
Ted Nyman
c8761d39d7 Narrow test and set ACTIVE flag for heuristics 2013-12-22 15:25:56 -08:00
Ted Nyman
51195290b8 Remove .pas sample 2013-12-22 15:18:54 -08:00
Clinton N. Dreisbach
63cb5aac20 Adding support for Hoplon files
See https://github.com/tailrecursion/hoplon-demos/blob/master/todoFRP/src/index.cljs.hl for an example and https://github.com/tailrecursion/hoplon for the full project.
2013-12-22 11:54:14 -05:00
Ted Nyman
11be3f3f08 Merge pull request #851 from github/append--applescript-extension
Include .scpt as a valid Applescript extension
2013-12-21 19:03:14 -08:00
Garen Torikian
91dd8d4950 Include .scpt as a valid Applescript extension 2013-12-21 19:59:00 -06:00
Ted Nyman
9c26488f29 Merge pull request #849 from github/even_moar_cpp
Adding a few more problematic C++ .h files to samples.
2013-12-21 12:26:59 -08:00
Arfon Smith
b2a5c30a44 A C++ shibboleth? 2013-12-20 22:28:25 -06:00
Arfon Smith
e3d520dba8 Adding a few more problematic C++ .h files to samples. 2013-12-20 22:01:23 -06:00
Ted Nyman
715680bc36 Minor README 2013-12-20 15:34:40 -08:00
Ted Nyman
b5df71950d Minor formatting 2013-12-20 14:55:47 -08:00
Ted Nyman
ed6bcfddef Merge pull request #848 from rlidwka/json5
adding JSON5 support
2013-12-19 10:01:20 -08:00
Alex Kocharin
a633dd8c79 adding JSON5 support 2013-12-19 14:13:23 +04:00
Ted Nyman
0974586d5c Merge pull request #847 from zhemao/master
Get scons files recognized as python
2013-12-17 14:10:08 -08:00
Howard Mao
774f658f67 get scons files recognized as python 2013-12-17 16:47:31 -05:00
Ted Nyman
37ef402a1f Formatting 2013-12-16 21:01:39 -08:00
Ted Nyman
99ad32511e Minor README updates 2013-12-16 20:59:28 -08:00
Ted Nyman
a282b56f46 Fix debug method 2013-12-16 20:55:00 -08:00
Ted Nyman
9845eba9df Merge pull request #844 from github/cpp-extra-samples
Cpp extra samples
2013-12-16 18:23:33 -08:00
Arfon Smith
a49303c93f Expanding TestHeuristcs to include all Objective C header files 2013-12-16 15:27:48 -08:00
Rob Hunter
4adbbc3fcc Add a few samples of misclassified C++ headers
Several people mentioned in #467 that they were seeing their C++ projects
erroneously showing up as containing Objective C.

I've added a file from each of the problematic repositories:

  - https://github.com/mp13on11/dwarf_mine
  - https://github.com/miguelishawt/anax
  - https://github.com/mholt/cppcsv
  - https://github.com/coder543/libcanister

They all seem to be triggering on different aspects, since adding one sample
wasn't sufficient to correctly classify the others.

The discussion in #467 makes me think that perhaps Linuist might need to take
the rest of the repository into account when classifying ambiguous files.
2013-12-16 14:38:56 -08:00
Ted Nyman
03cadf22fa 2.10.6 2013-12-15 20:31:34 -08:00
Ted Nyman
89c8d1e64c Docs 2013-12-15 20:30:55 -08:00
Ted Nyman
56ebfae598 Fix test 2013-12-15 20:27:56 -08:00
Ted Nyman
b1bb1a7345 Update RMarkdown type 2013-12-15 20:24:32 -08:00
Ted Nyman
4510bf1007 Merge pull request #839 from github/heuristics
Introduce heuristics
2013-12-15 20:20:50 -08:00
Ted Nyman
dd8b368f76 Merge branch 'master' into heuristics 2013-12-15 20:20:19 -08:00
Ted Nyman
17d0b1e02f More documentation 2013-12-15 20:17:30 -08:00
Ted Nyman
0626def699 Start with Objective-C 2013-12-15 20:15:19 -08:00
Ted Nyman
b3c6c85387 Start on basic heuristics tests 2013-12-15 20:06:59 -08:00
Ted Nyman
455266f27d Merge pull request #838 from github/rmd-sample
Adding rmd example
2013-12-15 20:01:51 -08:00
Arfon Smith
567408bc5e Adding rmd example 2013-12-15 19:52:15 -08:00
Ted Nyman
0c668ee179 Some README updates 2013-12-15 12:25:47 -08:00
Ted Nyman
8c9ba2214a Bump to 2.10.5 2013-12-15 12:21:40 -08:00
Ted Nyman
8ba773127c Drop incorrect interpeter
Fixes 1.8.7 issues. cc @arfon
2013-12-15 12:20:10 -08:00
Ted Nyman
c598c9717d Add ace mode 2013-12-15 00:09:54 -08:00
Ted Nyman
ef41a1ac67 Merge pull request #831 from ethanwhite/master
Added RMarkdown to the list of languages
2013-12-15 00:07:35 -08:00
Ted Nyman
3bc17e822d Start on basic heuristic approach 2013-12-14 23:33:21 -08:00
Ted Nyman
6bd97c7fc7 Bit of docs 2013-12-14 18:51:34 -08:00
Ted Nyman
f6c4e39dbc Merge pull request #835 from hkdobrev/jshintrc
Add `.jshintrc` to JSON filenames
2013-12-14 18:28:21 -08:00
Ted Nyman
7c636c4f65 Merge pull request #836 from github/debug
Nicer debug factoring
2013-12-14 15:25:33 -08:00
Ted Nyman
6a8de63d2d Nicer debug factoring 2013-12-14 15:24:26 -08:00
Haralan Dobrev
107fee8859 Add .jshintrc to JSON filenames
JSHint tool for linting JavaScript uses `.jshintrc` configuration file.
It is in JSON format.

Example: https://github.com/jquery/jquery/blob/master/.jshintrc
2013-12-14 16:23:22 +02:00
Douglas Adam Smith II
00de2b011d Updated language list to include HOW, and fixed the lack of lexer problem.
Because HOW does not yet have a standardized lexer, I left the "lexer" field as "Text only".
2013-12-13 01:24:34 -05:00
Ethan White
1cb1705f8e Added RMarkdown to the list of languages 2013-12-12 14:55:52 -05:00
Ted Nyman
e0c1a84821 2.10.4 2013-12-12 00:56:12 -08:00
Ted Nyman
b7249b671f Update samples 2013-12-12 00:55:49 -08:00
Ted Nyman
f5e86bc691 Add a .pod sample 2013-12-12 00:55:03 -08:00
Ted Nyman
109841ceb1 2.10.3 2013-12-11 23:30:28 -08:00
Ted Nyman
1b96f87888 Update samples 2013-12-11 15:13:27 -08:00
Ted Nyman
4d40cab954 Ad .sc sample 2013-12-11 15:06:14 -08:00
Ted Nyman
4533b9baaa Merge pull request #822 from akre54/stylus-support
Add stylus support
2013-12-11 15:03:42 -08:00
Adam Krebs
5b35f92bfe remove accidental sinatra sample. copypasta.... 2013-12-11 18:01:40 -05:00
Ted Nyman
17d54d61b4 Add .sc extension for Scala 2013-12-11 14:57:47 -08:00
mmhelloworld
bc923bb6b1 Add Frege language
What is Frege?
-------------
Frege is a non-strict, pure functional programming language in the spirit of Haskell for the JVM.
It enjoys a strong static type system with type inference.
Higher rank types are supported, though type annotations are required for that.

Frege programs are compiled to Java and run in a JVM.
Existing Java Classes and Methods can be used seamlessly from Frege.

The Frege programming language is named after and in honor of Gottlob Frege.

Project State:
-------------
The compiler, an Eclipse plugin and a provisional version of the documentation can be downloaded
from here https://github.com/Frege/frege/releases.

The REPL can be downloaded from here
https://github.com/Frege/frege-repl/releases.

An online REPL is running here
http://try.frege-lang.org/.

Examples:
--------
1) Command Line Clock: https://github.com/Frege/frege/blob/master/examples/CommandLineClock.fr
2) Brainfuck: https://github.com/Frege/frege/blob/master/examples/Brainfuck.fr
3) Concurrency: https://github.com/Frege/frege/blob/master/examples/Concurrent.fr
4) Sudoku: https://github.com/Frege/frege/blob/master/examples/Sudoku.fr
5) Java Swing examples: https://github.com/Frege/frege/blob/master/examples/SwingExamples.fr
2013-12-10 23:36:05 -05:00
Ted Nyman
2a867c9c7f Merge pull request #823 from github/pod
Add separate entry for Pod format
2013-12-10 07:54:25 -08:00
Ted Nyman
5a4bbf42c1 Keep .pod extension for now 2013-12-10 07:53:51 -08:00
Ted Nyman
087ce10f12 Merge pull request #824 from github/wrap-tex
Wrap .tex
2013-12-10 07:47:49 -08:00
Brandon Keepers
27092191a8 Wrap .tex 2013-12-10 10:35:28 -05:00
Brandon Keepers
bc93a99864 update test by type 2013-12-10 10:29:40 -05:00
Brandon Keepers
2e4fbe3430 Create separate entry for .pod 2013-12-10 10:26:55 -05:00
waddlesplash
aa78060e41 Adding QMake (Make-like) language.
Mostly because the file extension conflicts with that of Prolog.
2013-12-10 10:23:13 -05:00
Adam Krebs
64f77293e8 set stylus lexer to be text only for now 2013-12-10 09:40:06 -05:00
Adam Krebs
9a42628577 add more demos 2013-12-09 22:56:04 -05:00
Adam Krebs
fc9bc8b9e1 Add stylus support 2013-12-09 22:42:57 -05:00
Ted Nyman
2180c11dc6 Bump to 2.10.2 2013-12-08 18:40:14 -08:00
Ted Nyman
11207283c8 Merge pull request #819 from github/tell-me-a-story-of-prose
Explicitly mention prose types as `prose`
2013-12-08 18:36:18 -08:00
Garen Torikian
8552ec35b3 Cleanup languages file to fix tests 2013-12-08 16:41:56 -08:00
Garen Torikian
5fdc2e12bf Alphabetize RST correctly 2013-12-08 16:33:59 -08:00
Garen Torikian
37c8a94369 Include RST in the languages list 2013-12-08 16:19:19 -08:00
Garen Torikian
7d17d69c1b Set Textile as a prose language 2013-12-08 16:19:08 -08:00
Garen Torikian
ee519aeb4b Add helper method to retrieve languages by type 2013-12-08 16:12:03 -08:00
Garen Torikian
a825a013d6 Explicitly mention prose types within languages.yml 2013-12-08 16:11:47 -08:00
Ted Nyman
b4906fc3b8 Bit of docs 2013-12-08 15:24:53 -08:00
Ted Nyman
fafeead5dc Merge pull request #818 from Flyingmana/patch-1
recognize composer.lock as generated file
2013-12-08 15:23:19 -08:00
Garen Torikian
5c602d0a4e Revert "Revert "Merge pull request #695 from github/detect-prose"" 2013-12-08 13:51:27 -08:00
Daniel Fahlke
96084fa59a recognize composer.lock as generated file 2013-12-08 21:31:29 +01:00
Daniel Fahlke
c8eeda6c8a add generated test and sample for composer.lock 2013-12-08 21:22:50 +01:00
Ted Nyman
2315cdb993 Merge pull request #816 from sgallagher/master
Add .lmi to Python extensions
2013-12-06 22:28:05 -08:00
Ted Nyman
2245174d28 2.10.1 2013-12-06 22:10:03 -08:00
Ted Nyman
c089b3f28f Update samples 2013-12-06 22:09:29 -08:00
Ted Nyman
7e178cc416 Place guards, checks for multiline shell hacks 2013-12-06 22:04:40 -08:00
Ted Nyman
8603760ebe Merge branch 'master' into more-687 2013-12-06 20:32:22 -08:00
remixz
9cae54bb55 Add Dogescript support 2013-12-06 16:15:34 -08:00
Stephen Gallagher
5bbffb00f5 Add .lmi to Python extensions
The OpenLMI project provides a scripting environment based on
Python (wrapping the Python interpreter with the 'lmishell'
command). Python scripts intended to be executed via lmishell are
conventionally given the suffix .lmi to identify them. Since the
syntax is identical to that of Python, it would be best to
identify it that way.
2013-12-06 09:40:10 -05:00
elofgren
89795ebd1f bundle fix
Lets see if this fixes the failing tests
2013-12-05 17:33:20 -05:00
Ted Nyman
4476a23f5a Merge pull request #813 from computmaxer/brightscript_support
Adding support for the Brightscript language
2013-12-05 12:01:58 -08:00
Pat Pannuto
5fb6f34d8a Add misser lexer entry for nesC to languages.yml
The nesC entry in the languages.yml file was missing a lexer entry
and thus wasn't getting picked up. This adds the required lexer line.
2013-12-05 14:55:00 -05:00
Max Peterson
834f37810b Merge branch 'master' into brightscript_support
Conflicts:
	lib/linguist/samples.json
2013-12-05 13:02:00 -06:00
Ted Nyman
7e9bc26796 Merge pull request #740 from danluu/vhdl_extensions
Add common VHDL file extensions
2013-12-04 15:49:16 -08:00
Ted Nyman
f83f226edc Merge pull request #812 from Giacom/patch-1
Updated the DM language to use the C++ lexer.
2013-12-04 13:45:40 -08:00
Giacom
a04b9dd7cd Updated the DM language to use the C++ lexer. 2013-12-04 12:07:46 +00:00
Rob Hoelz
f1ffc9e581 Remove duplicate extensions for Perl 6 2013-12-04 11:22:17 +01:00
Ted Nyman
de636f1c0b Colors for agda and tex 2013-12-04 02:08:58 -08:00
Rob Hoelz
ec6ef033a1 Update samples file 2013-12-04 08:18:17 +01:00
Rob Hoelz
a375a063d5 Add sample Perl 6 files 2013-12-04 08:10:58 +01:00
Rob Hoelz
d66147a277 Add Perl6 to languages.yml 2013-12-04 08:10:58 +01:00
Ted Nyman
283cc3a975 2.10.0 2013-12-03 21:12:12 -08:00
Ted Nyman
23af754194 Merge pull request #810 from github/bump-pygments
Bump pygments
2013-12-03 21:10:51 -08:00
Charlie Somerville
50f4050444 Merge pull request #809 from github/languages.json
Prefer to load from languages.json if it exists
2013-12-03 21:07:44 -08:00
Charlie Somerville
bf11900bc9 prefer to load from languages.json if it exists 2013-12-04 15:58:34 +11:00
Ted Nyman
61b8a8969f 2.9.9 2013-12-03 19:21:32 -08:00
Ted Nyman
0fb7017add Bump pygments.rb to 0.5.4 2013-12-03 19:17:32 -08:00
Eric Lofgren
3ecc1f883c Basic SAS
Just an entry for SAS with the basic .sas file extension and two
examples.
2013-12-03 14:48:55 -05:00
Aaron Puchert
86329a0758 Forgot parantheses 2013-12-03 17:21:43 +01:00
Charlie Somerville
4a5165ad7f Merge pull request #807 from github/update-escape_utils-dep
Require escape_utils >= 0.3.1
2013-12-02 21:47:17 -08:00
Charlie Somerville
017c6fd3f2 force escape_utils 0.3.2 on ruby < 1.9.3 2013-12-03 16:42:18 +11:00
Charlie Somerville
3887acd915 require escape_utils >= 0.3.1 2013-12-03 16:15:06 +11:00
Charlie Somerville
a80bf9e024 Merge pull request #806 from github/use-json-for-loading-samples
Use JSON instead of YAML for loading samples.json
2013-12-02 21:00:14 -08:00
Charlie Somerville
27c9774d1b prefer JSON, but fall back to YAML if JSON isn't available 2013-12-03 15:55:25 +11:00
Charlie Somerville
10cadb8725 use JSON instead of YAML for loading samples.json 2013-12-03 15:51:24 +11:00
Ted Nyman
9a5d52e460 Update samples 2013-11-24 10:59:52 -08:00
Ted Nyman
a8ae3d3ae5 Just the extensions for now 2013-11-24 10:58:47 -08:00
Ted Nyman
9bf1b5867a Merge pull request #794 from natcl/patch-1
Changed primary extension for Max
2013-11-24 10:56:30 -08:00
Nathanaël Lécaudé
f64a589e98 Moved the Max examples to the Max folder 2013-11-24 13:54:10 -05:00
Nathanaël Lécaudé
72026d3a3d Changed primary extension for Max
Changed primary extension for Max to .maxpat 
.mxt is a legacy file format.
2013-11-24 13:36:26 -05:00
Aaron Puchert
53f29344f8 Changed PostScript type to 'markup' 2013-11-24 18:04:44 +01:00
Aaron Puchert
0436973fb7 Add detection for generated PostScript files. 2013-11-24 18:04:20 +01:00
Ted Nyman
3a8651e31f Merge pull request #790 from hkdobrev/composer-lock
Add composer.lock to JSON filenames
2013-11-23 16:39:52 -08:00
Ted Nyman
953768641c Merge pull request #791 from mikepurvis/patch-1
Add five new extensions to XML, YAML in support of ROS usage.
2013-11-23 16:36:57 -08:00
Mike Purvis
b59d80b00c Add five new extensions to XML, YAML in support of ROS usage.
These extensions are in common use in packages part of ROS, the Robot Operating System.

[urdf](http://wiki.ros.org/urdf), [srdf](http://wiki.ros.org/srdf): These are Robot Description Files, XML documents which describe the physical realities of a robotics platform, for the purposes of consumption by common libraries.

[xacro](http://wiki.ros.org/xacro) is for input files to the XML macro processor xacro, which is used in ROS to output URDF and SRDF files.

[launch](http://wiki.ros.org/roslaunch/XML): Documents which describe sets of ROS nodes to launch together.

[rviz](https://github.com/ros-visualization/rviz/blob/hydro-devel/default.rviz): YAML configuration files belonging to the [rviz](http://wiki.ros.org/rviz#Overview) utility.

Each one has been in use for several years in various ROS-related applications; lots of examples should be apparent in orgs like ros, ros-drivers, ros-visualization, pr2, turtlebot, husky, etc.

Thanks for your consideration!
2013-11-23 19:31:05 -05:00
Haralan Dobrev
56dec42c70 Add composer.lock to JSON filenames
[Composer](http://getcomposer.org] uses one configuration file (composer.json) and
one lock file (composer.lock). They both use valid JSON.

Example: https://github.com/OpenBuildings/jam/blob/master/composer.lock
2013-11-23 13:03:22 +02:00
Max Peterson
c88585cffb Adding support for the Brightscript language, with samples. 2013-11-21 19:26:44 -06:00
Ted Nyman
46779da3b5 Check line length for minified for now 2013-11-20 09:33:25 -08:00
Ted Nyman
654050a459 Minor gemspec edits 2013-11-19 17:44:47 -08:00
Jim Hester
c2ca9f40ac Add r alias 2013-11-18 13:45:11 -05:00
Ted Nyman
fe9f186b13 Merge pull request #782 from liluo/dev
fix typo
2013-11-17 13:41:16 -08:00
liluo
01616ef54e fix typo 2013-11-17 20:08:42 +08:00
Ted Nyman
9fd802a208 Regenerate samples 2013-11-16 12:33:51 -08:00
Ted Nyman
86e0b94700 Merge master 2013-11-16 12:33:18 -08:00
Ted Nyman
6e4e5e78ad Regenerate samples.json 2013-11-16 12:29:25 -08:00
Ted Nyman
183c280263 Better lexer 2013-11-16 12:28:42 -08:00
Ted Nyman
cb0b3a688f Merge pull request #771 from GreatEmerald/master
Add initial UnrealScript support
2013-11-16 12:24:29 -08:00
Ted Nyman
4f656c200b Minor docs/naming 2013-11-15 18:42:53 -08:00
Ted Nyman
791d9eed41 Merge pull request #779 from jvanegmond/patch-1
Added AutoIt
2013-11-15 18:38:18 -08:00
Daniel Standage
edf19a0941 Does adding Rscript as an alias help? 2013-11-14 23:00:19 -05:00
Daniel Standage
dfeaaaa17e Move file location based on Travis error message 2013-11-14 22:47:05 -05:00
Daniel Standage
bcefa61fe0 Added new Rscript code 2013-11-14 22:29:41 -05:00
Jos van Egmond
74775b2e0a Added AutoIt
Language website: http://autoitscript.com
Example project on GitHub: https://github.com/jvanegmond/au3-minecraft-monitor
2013-11-14 11:15:38 +01:00
Ted Nyman
04c78c8c33 Bit more README 2013-11-10 17:57:43 -08:00
Ted Nyman
762b389721 Minor README updates 2013-11-10 17:55:17 -08:00
Ted Nyman
32e10d2c37 Merge pull request #775 from wjk/fix-doc-typo
Confusing Typo Fix
2013-11-10 09:25:52 -08:00
William Kent
d7baf4ed7b Fixed typo in a documentation comment. 2013-11-10 10:48:03 -05:00
Ted Nyman
5bef198e6d More lenient regex for LICENSE 2013-11-09 19:13:08 -08:00
Ted Nyman
c03e310422 Merge pull request #770 from hkdobrev/phpunit.xml.dist
Add phpunit.xml.dist to XML filenames
2013-11-09 19:11:18 -08:00
Ted Nyman
43723ba5ef Simpler samples 2013-11-09 16:43:45 -08:00
Ted Nyman
25954c8992 Merge pull request #773 from afischer15/master
Added Initial NetLogo support
2013-11-09 16:42:22 -08:00
Ted Nyman
12f01e9e94 Color for dart 2013-11-09 16:39:55 -08:00
Eric Schulte
41f7589d4e unit test for find_by_shebang 2013-11-09 11:44:17 -07:00
Eric Schulte
d93edf0897 adding interpreter arrays to some languages 2013-11-09 11:44:17 -07:00
Eric Schulte
7a6202a8c3 language interpreters and shebang lines
Add an interpreter array to each language, and match interpreters found
in the shebang lines of scripts to this array to identify the language
of scripts.

With suggestions from tnm. https://github.com/github/linguist/pull/687
2013-11-09 11:44:17 -07:00
Andrew Fischer
240f6a63f4 removed error causing readme... oops. 2013-11-09 12:44:09 -05:00
Andrew Fischer
f0558769f2 added initial NetLogo support 2013-11-09 12:31:29 -05:00
GreatEmerald
12086b69ac Add initial UnrealScript support
The two samples are for two different UnrealScript generations:
MutU2Weapons is UnrealScript 2, US3HelloWorld is UnrealScript 3.

Signed-off-by: GreatEmerald <pastas4@gmail.com>
2013-11-09 15:29:59 +02:00
Haralan Dobrev
e47b312866 Add phpunit.xml.dist to XML filenames
PHPUnit (a popular unit testing tool for PHP) uses `phpunit.xml`
for its configuration.

However it would use `phpunit.xml.dist` as well if `phpunit.xml`
is not available.

The reason is to track `phpunit.xml.dist` in your repo.
And to ignore `phpunit.xml`.
By default everyone (including a CI) would use `phpunit.xml.dist`
except you add `phpunit.xml` locally.

`phpunit.xml.dist` has the same XML structure as `phpunit.xml`.
So it should be detected as XML by linguist.

Example: https://github.com/erusev/parsedown/blob/master/phpunit.xml.dist

I don't know why linguist is not detecting this file as XML since
it starts with `<?xml`. Perhaps it is another issue.
2013-11-09 12:53:15 +02:00
Ted Nyman
eb5f1468d2 .pluginspec for XML 2013-11-08 14:13:45 -08:00
Ted Nyman
77c7ee6d2e Update samples 2013-11-07 17:26:20 -08:00
Ted Nyman
4f547d79a9 2.0.0 Ruby builds 2013-11-07 17:25:05 -08:00
Ted Nyman
8a5b26536e Merge pull request #755 from frunns/node-modules-generated
Added node_modules/ to generated files.
2013-11-07 17:01:53 -08:00
Ted Nyman
355ac3d81a Merge pull request #500 from Leushenko/master
Added BlitzBasic
2013-11-06 20:45:30 -08:00
Ted Nyman
8b8123a3c1 Add TeX as detectable markup 2013-11-06 20:17:47 -08:00
Ted Nyman
fc44af9343 Merge pull request #764 from bricker/add-appraisals
Add Appraisals to Ruby filenames
2013-11-06 20:15:12 -08:00
Ted Nyman
4654553d07 Merge pull request #765 from GordonSmith/UpperCaseECL
Uppercase ECL
2013-11-06 17:45:23 -08:00
Gordon Smith
940df300e8 Uppercase "ECL" Sample folder
Signed-off-by: Gordon Smith <gordon.smith@lexisnexis.com>
2013-11-06 09:19:29 +00:00
Gordon Smith
72b8e1c76f Uppercase "Ecl" language to "ECL"
Signed-off-by: Gordon Smith <gordon.smith@lexisnexis.com>
2013-11-06 09:17:03 +00:00
Bryan Ricker
92282e3677 Add Appraisals to Ruby filenames 2013-11-05 18:28:01 -08:00
Ted Nyman
9e9cbb144e Merge pull request #763 from lukaselmer/patch-2
Describe how to update samples.json
2013-11-05 17:46:53 -08:00
Lukas Elmer
8c5f1e201e Describe how to update samples.json
Describe how to update samples.json after adding new samples.
2013-11-06 02:44:07 +01:00
Lukas Elmer
ab20c033fe update samples.yml 2013-11-06 02:36:36 +01:00
Lukas Elmer
fd9c657ed4 Merge branch 'master' of https://github.com/github/linguist into patch-1 2013-11-06 02:26:50 +01:00
Ted Nyman
fea07d025d Bump to 2.9.8 2013-11-05 17:14:23 -08:00
Ted Nyman
41a570818d Just .veo for now 2013-11-05 15:24:05 -08:00
Ted Nyman
c1e38425d0 Merge pull request #741 from danluu/verilog_extensions
Add common Verilog extensions
2013-11-05 15:23:38 -08:00
Ted Nyman
6fb4e6836c Just primary extension for now 2013-11-05 15:21:27 -08:00
Ted Nyman
a2f9150f50 Merge pull request #760 from vszakats/patch-4
recognize xBase sources
2013-11-05 15:20:55 -08:00
Ted Nyman
2dcee1e43c Update samples 2013-11-05 15:18:10 -08:00
Ted Nyman
867a4d96fe Unique primary extension 2013-11-05 15:16:36 -08:00
Ted Nyman
b8c7b71ca5 Text only for now 2013-11-05 15:15:40 -08:00
Ted Nyman
70396ab636 Merge pull request #460 from remobjects/master
Oxygene language detection
2013-11-05 15:14:34 -08:00
Ted Nyman
67b5b51c47 Merge pull request #499 from ppannuto/nesc
Add support for nesC
2013-11-05 15:13:32 -08:00
Ted Nyman
7b443fcdde Merge pull request #758 from kashif/nvidia-cuda
added cuda lexer and removed example from c++ samples
2013-11-05 13:57:49 -08:00
Kashif Rasul
d86f8ba12f merged from master and updated samples.json 2013-11-05 22:07:39 +01:00
Kashif Rasul
856ee4724c Merge remote-tracking branch 'upstream/master' into nvidia-cuda
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2013-11-05 22:06:20 +01:00
Kashif Rasul
e635af4ef9 Revert 94b3ea3..b301634
This rolls back to commit 94b3ea3df5.
2013-11-05 22:05:12 +01:00
Kashif Rasul
b30163444f checked in updated samples.json 2013-11-05 22:02:41 +01:00
Ted Nyman
051bedefab Include .emacs filenames 2013-11-05 12:26:17 -08:00
Ted Nyman
1d7f63e38b Remove extra ace modes 2013-11-05 12:15:14 -08:00
Ted Nyman
d96657a48b Alphabetize 2013-11-05 11:57:40 -08:00
Ted Nyman
8bdd6ea510 Merge pull request #578 from timm/patch-1
Update languages.yml
2013-11-05 11:57:11 -08:00
Ted Nyman
9f65e702fc Remove dupe extension 2013-11-05 11:42:09 -08:00
Ted Nyman
a500dee94e Update samples file 2013-11-05 11:36:56 -08:00
Ted Nyman
1a11a6ab48 Merge pull request #555 from timjb/master
Support Agda and Literate Agda
2013-11-05 11:36:20 -08:00
Ted Nyman
c5f1317b47 Update samples file 2013-11-05 11:34:48 -08:00
Tim Baumann
5e03ff961b Merge branch 'master' of https://github.com/github/linguist
Conflicts:
	lib/linguist/languages.yml
2013-11-05 16:55:48 +01:00
Viktor Szakáts
a0c06eb6b9 recognize xBase sources
[xBase: https://en.wikipedia.org/wiki/xBase]

Reopened PR 593 with the two language additions split off.
2013-11-05 11:30:04 +01:00
Viktor Szakáts
7f9142a41d recognize Harbour sources
[Harbour language: https://github.com/harbour/core]

Reopened PR 593 with the two language additions split off.
2013-11-05 11:27:04 +01:00
Kashif Rasul
94b3ea3df5 added cuda lexer and removed example from c++ samples 2013-11-05 10:57:12 +01:00
Ted Nyman
6d7eae5011 Merge pull request #757 from chlorinejs/clojure-samples
add Clojure and its dialects to /samples
2013-11-05 00:39:27 -08:00
Hoàng Minh Thắng
3bbeea3682 add Clojure and its dialects to /samples 2013-11-05 15:33:05 +07:00
Frans Krojegård
562ec13696 Added node_modules/ to generated files. 2013-11-05 09:31:46 +01:00
Ted Nyman
a5c3bd7c13 Remove this until heuristic improves 2013-11-05 00:20:28 -08:00
Ted Nyman
6ae6882e1a Merge pull request #657 from mndrix/prolog
Add misclassified Prolog file
2013-11-04 22:43:19 -08:00
Ted Nyman
c4ad830931 Add .vimrc 2013-11-04 22:29:24 -08:00
Ted Nyman
5d417b4669 Fix syntax 2013-11-04 22:19:38 -08:00
Ted Nyman
02a264fad8 Merge pull request #612 from adityam/master
Add extensions for ConTeXt
2013-11-04 22:19:05 -08:00
Ted Nyman
31c3c43f64 Merge pull request #550 from rschiang/master
Include Qt QML markup detection
2013-11-04 22:11:03 -08:00
Ted Nyman
5197ea2488 Merge pull request #731 from zhuzhuor/master
Add support for RobotFramework .robot files
2013-11-04 22:00:17 -08:00
Ted Nyman
66167de1f9 Merge pull request #754 from myguidingstar/master
add more Clojure extensions and/or dialects'
2013-11-04 21:58:37 -08:00
Hoàng Minh Thắng
9482c2b822 add more Clojure extensions and/or dialects' 2013-11-05 12:52:14 +07:00
Ted Nyman
012a9c0e05 Merge pull request #495 from andygrunwald/decimal-places-in-output
Add decimal places to statistic output
2013-11-04 21:46:32 -08:00
Ted Nyman
881201a2c6 Merge pull request #682 from Jaxan/patch-1
Added Clean language
2013-11-04 21:10:34 -08:00
Ted Nyman
d656988258 Merge pull request #589 from kynetx/adding_krl
added KRL config and sample
2013-11-04 21:09:36 -08:00
Ted Nyman
89f7f8a00b Merge pull request #595 from j-jorge/patch-1
Add common file extensions to the c++ language
2013-11-04 21:08:20 -08:00
Ted Nyman
e4ec48fe8d Merge pull request #751 from CodeBlock/master
Add Idris.
2013-11-04 21:07:25 -08:00
Ted Nyman
1a4f890d04 Merge pull request #620 from Bartvds/master
Added Vagrantfile and Chef /cookbooks to vendors.yml
2013-11-04 21:05:08 -08:00
Ted Nyman
71633871f3 Merge pull request #561 from assassini/master
Added an exclusion pattern for a "dependencies" folder in the root directory
2013-11-04 21:00:50 -08:00
Ted Nyman
f523561e66 Ignore .osx files 2013-11-04 20:57:40 -08:00
Bartvds
f3007215b1 Added Vagrantfile to vendors.yml
Closes #619
2013-11-05 05:53:09 +01:00
Ted Nyman
1847b237c9 Remove alias 2013-11-04 20:46:11 -08:00
Ted Nyman
07169db217 Merge pull request #531 from chriskuehl/master
Add vendor exception for PhoneGap/Cordova device-specific JavaScript libraries.
2013-11-04 20:43:46 -08:00
Ted Nyman
4b4b368356 Add .R extension 2013-11-04 20:41:30 -08:00
Ted Nyman
09ef0cd3e1 Add cproject extension 2013-11-04 20:39:48 -08:00
Ted Nyman
0f6bca7a3d Merge pull request #596 from HQ063/patch-1
Update languages.yml
2013-11-04 20:37:05 -08:00
Chris Kuehl
5e3d811902 Merge github.com:github/linguist
Conflicts:
	lib/linguist/vendor.yml
2013-11-04 20:32:52 -08:00
Ted Nyman
12c655a48a Merge pull request #508 from AdamFerguson/master
Add Jade and Scaml
2013-11-04 20:30:20 -08:00
Ted Nyman
fdddffe041 Just .g4 for now 2013-11-04 20:27:46 -08:00
Ted Nyman
c3aab69b11 Merge pull request #697 from robstoll/master
Added ANTLR to the list, Pygments should have a lexer for ANTLR
2013-11-04 20:27:20 -08:00
Ted Nyman
3f1161d713 Merge pull request #643 from zulus/extjs_exclude
Exclude ExtJS library
2013-11-04 20:10:03 -08:00
Ted Nyman
cf14c5fa4f Merge pull request #450 from Giacom/master
Added DM (Dream Maker) language.
2013-11-04 19:53:25 -08:00
Ted Nyman
8aac009b00 Add more xquery extensions 2013-11-04 19:49:54 -08:00
Ted Nyman
05bb8b10fd Merge pull request #562 from hkdobrev/sublime-text
Added JSON extensions for Sublime Text
2013-11-04 19:40:48 -08:00
Ted Nyman
ecacbc937b Remove ace mode 2013-11-04 19:34:30 -08:00
Ted Nyman
86d0f0a84a Merge pull request #392 from qqshfox/protocol_buffers
Add Protocol Buffers
2013-11-04 19:33:43 -08:00
Ted Nyman
34218d9a5c Merge pull request #475 from pointwise/glyph
Added Glyph scripting language
2013-11-04 19:28:18 -08:00
Ted Nyman
de7ca0d954 Ignore files under thirdparty/ 2013-11-04 19:24:32 -08:00
Ted Nyman
81176f8dfa Add generated JNI detection, update samples 2013-11-04 19:14:34 -08:00
Ted Nyman
6ee999617e Add syscalldefs.h sample 2013-11-04 19:05:56 -08:00
Ted Nyman
88442094f9 Merge pull request #590 from jsocol/master
Add .adp for Tcl files to languages.yml
2013-11-01 11:04:07 -07:00
Ricky Elrod
5037dd5add Add Idris.
This adds Idris into the mix and uses the text-only parser for now, pending
upstream merging this patch in:
https://bitbucket.org/birkenfeld/pygments-main/pull-request/210/idris-lexer-added-lexer-for-idris/diff

Once that gets merged in, the lexer should change to idris.
2013-11-01 04:52:35 -04:00
Ted Nyman
aa41c87158 Merge pull request #739 from danluu/bluespec
Add Bluespec language
2013-10-30 23:50:52 -07:00
Ted Nyman
569eac2222 Whitespace 2013-10-30 23:46:42 -07:00
Ted Nyman
2de23046cc Merge pull request #572 from Aaron1011/add_realbasic
Added REALbasic
2013-10-30 23:46:09 -07:00
Ted Nyman
ca8b27ff15 Merge pull request #614 from robin850/patch-1
Lex .mspec files like Ruby
2013-10-30 23:45:36 -07:00
Ted Nyman
0f17ba0fcf Merge pull request #715 from Jaykul/master
Update PowerShell File Extensions
2013-10-30 23:44:18 -07:00
Ted Nyman
d5002ef06a Start vendor work for bootstrap by ignoring minimized bootstrap js and css 2013-10-30 19:12:52 -07:00
Ted Nyman
ce443e73f1 Merge pull request #707 from larsbrinkhoff/lisp
Common Lisp misidentified as OpenCL
2013-10-30 00:34:03 -07:00
Lars Brinkhoff
89b5e9f5e6 Rebuild samples.json to make Travis happy. 2013-10-30 07:28:09 +01:00
Lars Brinkhoff
c6c5e79ccf Add .cl as a Common Lisp file extension. 2013-10-30 07:28:08 +01:00
Ted Nyman
2bac3af299 Fix typo 2013-10-29 11:59:58 -07:00
Ted Nyman
5411c5457d Need to wait on pygments update 2013-10-29 11:59:27 -07:00
Ted Nyman
92595cffa3 Merge pull request #749 from hoelzro/master
Use the Haxe lexer for Haxe
2013-10-29 11:54:42 -07:00
Ted Nyman
ad77279bbf Text only lexer for Inno Setup 2013-10-29 11:54:25 -07:00
Rob Hoelz
e7d8b99ca2 Use the Haxe lexer for Haxe
The lexer for Haxe is no longer named haXe, so linguist is currently
unable to find it.  This fixes that.
2013-10-29 08:56:37 +01:00
Paul Bone
f0ad498b93 Add the Mercury language to linguist
lib/linguist/languages.yml:
    Add the declaration for the language.

samples/Mercury:
    Add samples for the classifier as Mercury shares it's filename extension
    with several other languages.
2013-10-29 15:01:06 +11:00
Ted Nyman
971d848eec Merge pull request #737 from jeabakker/patch-1
Update vendor.yml
2013-10-28 12:27:54 -07:00
Ted Nyman
f353fa3890 Merge pull request #691 from le717/master
Detect Inno Setup installer scripts
2013-10-28 11:36:51 -07:00
Ted Nyman
64ce62a804 2.9.7 2013-10-28 11:24:58 -07:00
Ted Nyman
bb9537c5b4 Merge pull request #746 from tnm/no-prose
Revert "Merge pull request #695 from github/detect-prose"
2013-10-28 11:23:12 -07:00
Ted Nyman
9f00b5478d Revert "Merge pull request #695 from github/detect-prose"
This reverts commit 80321272b1, reversing
changes made to 02500d3830.
2013-10-28 11:21:56 -07:00
Lukas Elmer
086b565488 Added another matlab example 2013-10-28 18:06:17 +01:00
Lukas Elmer
27566d93e2 Added another matlab example 2013-10-28 18:02:15 +01:00
Dan Luu
7b1c78b848 Add common Verilog extensions 2013-10-26 14:15:20 -05:00
Dan Luu
4ec9145700 Add common VHDL file extensions 2013-10-26 14:10:46 -05:00
Dan Luu
922fe46f56 Add Bluespec examples 2013-10-26 14:02:04 -05:00
Dan Luu
d4628cf5db Add bluespec to language list 2013-10-25 20:58:17 -05:00
Jerome Bakker
cb9c3732f2 Update vendor.yml
extend the vendor/ exclusion to handle vendors/

Some projects use this folder to store external libaries (eg https://github.com/Elgg/Elgg)
2013-10-25 17:02:04 +02:00
Ted Nyman
ce6a8aa671 Merge pull request #733 from Sheeo/patch-1
Ungroup Elm from Haskell
2013-10-23 00:02:16 -07:00
Ted Nyman
bda61ec3d2 Merge pull request #732 from sstephenson/master
Highlight Bats test files as Shell
2013-10-23 00:00:13 -07:00
Ted Nyman
3ea0d479fc Merge pull request #730 from WestleyArgentum/patch-1
Color for Julia!
2013-10-22 20:01:23 -07:00
Michael
9ff1a9a54c Ungroup Elm from Haskell
Elm is its own language and should be counted as such
2013-10-22 14:32:12 +02:00
Sam Stephenson
024005d912 Highlight Bats test files as Shell 2013-10-21 19:44:09 -05:00
Bo Zhu
4d7cd834be add support for RobotFramework .robot files 2013-10-21 13:59:22 -04:00
Hanfei Shen
281e7456d5 Add Protocol Buffers 2013-10-19 13:24:43 +08:00
Westley Argentum Hennigh
f41c79066b Color for Julia!
See https://github.com/JuliaLang/julia/issues/4569
2013-10-18 10:37:31 -07:00
Ted Nyman
063ba50952 Bump to 2.9.6 2013-10-17 13:57:00 -07:00
Ted Nyman
70bc0b3b77 Merge pull request #584 from jayphelps/patch-1
Added common alternative Handlebars extensions
2013-10-16 23:50:48 -07:00
Ted Nyman
057ea80582 Merge pull request #663 from acgetchell/patch-2
Add LaTeX and BibTeX
2013-10-16 23:44:41 -07:00
Ted Nyman
a046e1c380 Merge pull request #721 from olivergondza/patch-1
Highlight .jelly files as XML
2013-10-16 23:30:17 -07:00
Ted Nyman
e3c2a5e510 Merge pull request #701 from thorn0/patch-1
TypeScript: fixed syntax, it wasn't TypeScript at all
2013-10-16 23:27:31 -07:00
Charlie Somerville
a00967ddc4 Merge pull request #728 from github/fix-dup-primary-extension-for-mumps
Ensure no two languages have the same primary extension
2013-10-16 09:58:52 -07:00
Charlie Somerville
599e1e2a51 update samples.json 2013-10-16 12:43:20 -04:00
Charlie Somerville
44638e1c6b add .m as an alternate extension for MUMPS so it's still picked up 2013-10-16 12:43:20 -04:00
Charlie Somerville
cabd4fb4c5 change MUMPS' primary extension from .m to .mumps
.m currently clashes with Objective-C, and MUMPS is chosen before
Objective-C when creating .m files in Gist. Even if .mumps isn't a
legitimate MUMPS extension, I think we should change it anyway since
Objective-C is far more likely to be intended when a user uses .m
2013-10-16 12:43:20 -04:00
Charlie Somerville
086845f189 use @primary_extension_index in find_by_filename 2013-10-16 12:43:16 -04:00
Charlie Somerville
413c881af8 add @primary_extension_index to ensure we don't have duped primary exts 2013-10-16 11:41:19 -04:00
Jaykul
74eb60a354 Saying my ABCs
Fixing https://travis-ci.org/github/linguist/jobs/12531345
I swear: I am not normally dyslexic
2013-10-14 14:22:11 -04:00
Jaykul
85e54e9af2 Fix alphabetical order of ps1xml 2013-10-14 13:52:40 -04:00
Oliver Gondža
245521db22 Highlight .jelly files as XML
[Jelly](http://commons.apache.org/proper/commons-jelly/) is used heavily by stapler/stapler and jenkinsci/jenkins.
2013-10-14 19:38:56 +02:00
Jaykul
5b8ad31d75 Add psc1, fix order in PowerShell
I had omitted .psc1 because I wasn't confident it was xml
And I have now sorted psd1/psm1 correctly
2013-10-14 13:20:16 -04:00
Sparky's Widgets
a0aae8cdc1 Update languages.yml
Added support for Eagle PCB files which are becoming common enough now on Github to make this addition.
2013-10-14 01:41:37 -06:00
Ted Nyman
80321272b1 Merge pull request #695 from github/detect-prose
Detect prose documents
2013-10-12 18:12:27 -07:00
Garen Torikian
02500d3830 Merge pull request #713 from aclements/master
Recognize jQuery >= 1.10.0
2013-10-12 17:22:09 -07:00
Jaykul
921ceaa221 Update PowerShell File Extensions
The three core PowerShell language extensions are .psd1, .ps1 and .psm1 -- plus two xml file extensions: .ps1xml and .clixml which are for formatting rules and serialization.
.psm1 modules files use exactly the same syntax as scripts, but are imported rather than executed.
.psd1 are metadata files which use a subset of the same syntax (they can be highlighted using the same highlighter, it's just some commands, variables, and types aren't allowed in data files)
2013-10-12 16:37:49 -04:00
Austin Clements
5232a45d1f Recognize jQuery >= 1.10.0
jQuery recently passed 1.10, but the vendor regexp assumed each
component of the version number would be only one digit.  Allow
multiple digits for the minor and micro versions.
2013-10-11 21:21:43 -04:00
Andy Grunwald
fdf000ec62 Add decimal places to statistic output
If you analyze a project sometimes the statistic outputs a
language with 0%. At first it seems that the language is not
part of this project, but there are only some decimal places
missing.
2013-10-02 20:40:12 +02:00
Ted Nyman
c7933537b1 Merge pull request #705 from glts/add-j-language
Added J to languages
2013-10-01 22:02:48 -07:00
glts
e194d7238e Added "Text only" lexer for J
There is no lexer for J so far, use "Text only" to make the build pass.
2013-09-30 23:28:35 +02:00
glts
33d777a6ff Added support for J to languages.yml 2013-09-30 21:20:28 +02:00
thorn0
1b90dfedf9 TypeScript: fixed syntax, it wasn't TypeScript at all 2013-09-30 13:32:41 +03:00
Robert Stoll
b0b7d75bcd ANTLR was in the wrong order. corrected this mistake 2013-09-27 18:43:11 +02:00
Robert Stoll
74ba0f9c39 Added ANTLR to the list, Pygments should have a lexer for ANTLR 2013-09-27 18:21:39 +02:00
John J. Camilleri
a2d6b374da Merge remote-tracking branch 'upstream/master' 2013-09-27 10:18:26 +02:00
Ted Nyman
8465961e72 Merge pull request #574 from alaingilbert/patch-1
There is a lexer for TypeScript in the pygments project
2013-09-26 02:27:19 -07:00
Ted Nyman
f5cb6e035d Merge pull request #696 from aaronpuchert/rprofile
Add .Rprofile files
2013-09-26 02:26:09 -07:00
Aaron Puchert
7946de7116 Add .Rprofile to filenames for R 2013-09-25 12:43:22 +02:00
Garen Torikian
9e65eb35e7 💄 2013-09-24 21:47:30 -07:00
Garen Torikian
76a1369932 Alphabetize detectable markup 2013-09-24 21:28:39 -07:00
Garen Torikian
12e92f127b Add samples of prose content 2013-09-24 21:28:09 -07:00
Garen Torikian
50f3b2e398 Add Mediawiki 2013-09-24 16:34:46 -07:00
Garen Torikian
a716151c83 Add Creole 2013-09-24 16:33:09 -07:00
Garen Torikian
3c70fffb67 Add Org 2013-09-24 16:32:02 -07:00
Garen Torikian
a0a879a3a3 Add RDoc 2013-09-24 16:30:02 -07:00
Garen Torikian
5d35d18634 Add AsciiDoc as an option 2013-09-24 16:28:54 -07:00
Garen Torikian
a3a6c2f8b3 Alphabetize, foo' 2013-09-24 16:23:05 -07:00
Garen Torikian
8eef1c33b8 Start adding prose content to detector 2013-09-24 16:13:04 -07:00
Joshua Moerman
6182b0fbc2 Clean has no lexer
The haskell lexer doesn't work nice, as the comments are totally different.
2013-09-21 22:55:29 +02:00
Joshua Moerman
4e4f3c6e17 Replaced tabs with spaces
Didn't see the difference in the github editor...
2013-09-21 21:27:17 +02:00
Triangle717
800f445b22 Update languages.yml
Detect Inno Setup installer scripts (http://www.jrsoftware.org/isinfo.php)
2013-09-20 16:24:13 -04:00
Ted Nyman
a9db25cc5b Fix grammar 2013-09-19 17:33:26 -07:00
Tim Baumann
b5e1bda3e4 Merge branch 'master' of https://github.com/github/linguist 2013-09-19 15:47:18 +02:00
Ted Nyman
f06167eaca Bump to 2.9.5 2013-09-18 19:02:12 -07:00
Ted Nyman
687e82307e .cfg is used by too many non INI files 2013-09-18 19:00:15 -07:00
Joshua Moerman
d9358d8af3 Added Clean language
With the blue color from: http://wiki.clean.cs.ru.nl/Clean
2013-09-13 16:41:38 +02:00
kethomassen
fb3e59c6f5 Fix Crystal Lexer
"ruby" => "Ruby"
2013-09-10 16:52:12 +10:00
Ted Nyman
b3fbd42786 Merge pull request #536 from zzet/patch-1
Added .podsl extension for Common Lisp language
2013-09-09 09:33:20 -07:00
Andrew Kumanyaev
590ed26f7b Alphabetized list for Common Lisp
Via comment https://github.com/github/linguist/pull/536#issuecomment-24046315
2013-09-09 11:58:24 +04:00
Ted Nyman
12093ee1f0 Merge pull request #672 from Bulwersator/master
Add squirrel
2013-09-09 00:54:31 -07:00
kethomassen
c0c0252bab Add Crystal test 2013-09-09 17:52:11 +10:00
kethomassen
02953ac3ef Add Crystal
http://crystal-lang.org/
2013-09-09 17:47:16 +10:00
Ted Nyman
ee840321d1 Add test_data 2013-09-09 00:39:34 -07:00
Ted Nyman
0cbc44677c Merge pull request #606 from kethomassen/patch-1
Change YAML type to data
2013-09-09 00:38:04 -07:00
kethomassen
a9b944ac36 Make markup tests pass
Yaml ain't Markup Language!
2013-09-09 16:44:00 +10:00
Ted Nyman
759860d866 Merge pull request #549 from oubiwann/add-lfe-support
Added support for LFE (Lisp Flavored Erlang).
2013-09-08 23:27:32 -07:00
Ted Nyman
c4b21f51e4 Merge pull request #677 from github/rename-delphi-to-pascal
Rename Delphi to Pascal
2013-09-08 23:13:43 -07:00
Charlie Somerville
fdccffddfc rename Delphi to Pascal 2013-09-07 03:17:25 +10:00
Charlie Somerville
e610789d38 rake samples 2013-09-07 03:10:56 +10:00
Ted Nyman
3bd8ed45e4 Merge pull request #676 from faithanne/master
Adding .x3d to the list of .xml extensions.
2013-09-05 19:13:27 -07:00
Faith-Anne L. Kocadag
42311e1bf3 Adding .x3d to the list of .xml extensions.
Adding .x3d to the list of .xml extensions: [x3d specifications] (http://www.web3d.org/x3d/specifications/x3d_specification.html)
2013-09-05 22:05:21 -04:00
Daniël W. Crompton
7c1716aa1e This pull request solves issue #674, see it for details. 2013-09-06 01:47:14 +02:00
Bulwersator
9e9aae1d83 really fix sorting 2013-09-05 22:10:49 +02:00
Bulwersator
229ab3a268 fix sorting 2013-09-05 22:02:09 +02:00
Bulwersator
85840aadc2 Create Squirrel.nut 2013-09-05 20:54:59 +02:00
Bulwersator
32b7b3e1b1 Update languages.yml 2013-09-05 20:50:08 +02:00
Ted Nyman
5e7eeae98e Merge pull request #669 from r0man/cljx
Add the ".cljx" file extension to the list of Clojure languages.
2013-09-04 10:23:39 -07:00
Roman Scherer
de8c4daa45 Add the ".cljx" file extension to the list of Clojure languages.
Some people start writing portable Clojure/Clojurescript code and use
the ".cljx" file extension for that. This is driven by this project:

https://github.com/lynaghk/cljx
2013-09-03 21:34:06 +02:00
Ted Nyman
64990a00b8 Merge pull request #656 from liluo/dev
Remove unused else
2013-09-03 09:26:47 -07:00
John J. Camilleri
6df8bd62d3 Try to fix encoding probs by converting to utf8 2013-09-03 09:02:29 +02:00
John J. Camilleri
d6e3bcc875 Remove Gla and Gle from Gf test samples 2013-09-03 08:51:39 +02:00
John J. Camilleri
200473ba27 Change GF lexer from haskell to Haskell 2013-09-03 08:44:22 +02:00
John J. Camilleri
05fb0c35fa Add Grammatical Framework 2013-09-03 08:30:06 +02:00
Ted Nyman
33434f08f4 Documentation 2013-09-02 00:02:15 -07:00
Ted Nyman
d5730f6fd1 Merge pull request #664 from Mouq/master
Add .nqp to the list of Perl file extensions
2013-09-02 00:01:05 -07:00
Mouq
2305496f94 Fix order of extensions 2013-09-01 22:06:08 -04:00
Mouq
d031392507 Add .nqp to the list of Perl file extensions 2013-09-01 10:14:14 -04:00
Adam Getchell
7e251d7345 Add definitions to TeX 2013-08-31 18:21:14 -07:00
Adam Getchell
e33e76a1a7 Update languages.yml 2013-08-31 18:12:16 -07:00
Adam Getchell
9064369517 Update languages.yml 2013-08-31 18:08:39 -07:00
Adam Getchell
a9c86d5453 Add LaTeX and BibTeX 2013-08-31 17:11:11 -07:00
Michael Hendricks
4b0c975426 Add misclassified Prolog file
This file was incorrectly identified as Perl.
2013-08-30 08:31:02 -06:00
liluo
6ec22a1674 remove unused else 2013-08-30 11:04:46 +08:00
Aditya Mahajan
71b48eaf55 Also add .mkvi file extension 2013-08-29 19:41:48 -04:00
Ted Nyman
694f51d09e Merge pull request #642 from Dav1dde/volt
Added Volt language
2013-08-27 22:36:15 -07:00
Ted Nyman
79040d00c7 Merge pull request #519 from mmullis/master
Add COBOL language support
2013-08-27 02:37:47 -07:00
Ted Nyman
7dfc1644ce Merge pull request #628 from pmoura/master
Add alternative Logtalk source file extension
2013-08-26 14:14:03 -07:00
zulus
777f1d27d1 Exclude ExtJS library 2013-08-23 02:53:26 +02:00
David
c4a90bbbcd Added Volt language 2013-08-22 13:48:26 +02:00
Ted Nyman
ac0920a11b Merge pull request #599 from larsbrinkhoff/glsl
Add OpenGL Shading Language.
2013-08-19 22:11:41 -07:00
Paulo Moura
a4bdca6d6b Add alternative Logtalk source file extension 2013-08-19 02:31:33 +01:00
Ted Nyman
f9bfcceba9 Merge pull request #512 from mark-otaris/patch-1
Add the .rbxs extension for Lua files
2013-08-18 17:10:09 -07:00
Ted Nyman
e0ceccc0c6 Merge pull request #626 from dzidzitop/patch-1
COPYING is added to excludes as a file that contains copyright informati...
2013-08-18 04:06:39 -07:00
dzidzitop
cd3e88fe8b COPYING is added to excludes as a file that contains copyright information. 2013-08-18 14:03:16 +03:00
Lars Brinkhoff
254b6de1d3 Add OpenGL Shading Language. 2013-08-17 14:31:28 +02:00
Julik Tarkhanov
a93e9493e2 Add OpenGL shading language (GLSL)
This is the language used for writing OpenGL shaders, which are becoming much more mainstream lately.
2013-08-17 14:31:28 +02:00
Ted Nyman
53b356deee Only looking at root dir 2013-08-16 15:02:01 -07:00
Ted Nyman
9dca6fa9cc Vendor READMEs 2013-08-16 15:00:34 -07:00
Ted Nyman
7226aa18de Merge pull request #559 from sethvargo/add_berksfile
Add Berksfile to the list of Ruby types
2013-08-15 12:36:24 -07:00
Seth Vargo
ce97865bd2 Add 'Berksfile' to the list of Ruby files 2013-08-15 10:29:39 -04:00
Ted Nyman
424fa0f56b Merge pull request #621 from abahgat/xmi-as-xml
Recognize Umbrello .xmi files as XML
2013-08-14 14:47:37 -07:00
Alessandro Bahgat
007fc9ebd0 Added .xmi to the extensions for XML 2013-08-14 17:33:23 -04:00
Ted Nyman
e0104c8d12 2.9.4 2013-08-14 08:57:07 -07:00
Ted Nyman
1a98a1f938 Add an F# alias 2013-08-14 08:55:58 -07:00
Ted Nyman
e005893d4c Syntax 2013-08-14 08:37:03 -07:00
Ted Nyman
6c74d854ec 2.9.3, update samples, update test 2013-08-14 08:35:53 -07:00
Ted Nyman
06b185f725 Fix F# search term 2013-08-14 08:32:50 -07:00
Robin Dupret
64ec42cf4a Lex .mspec files like Ruby 2013-08-09 21:47:47 +02:00
Aditya Mahajan
c4b24d9ae1 Add extensions for ConTeXt
[ConTeXt] is a macro language build on TeX (just as LaTeX is build on
TeX). It tends to use `.mkii` and `.mkiv` extensions to represent files used in
Mark II (MkII) version and Mark IV (MkIV) version of ConTeXt.

[ConTeXt]: http://wiki.contextgarden.net/
2013-08-07 20:37:40 -04:00
Ted Nyman
e6f38cbf45 2.9.2 2013-08-05 23:17:33 -07:00
Ted Nyman
1764674a13 Remove old test 2013-08-05 23:02:19 -07:00
Ted Nyman
4741a47d21 Bring in @upsuper's css generated check 2013-08-05 23:00:04 -07:00
kethomassen
432bffe3ec Change YAML type to data 2013-08-05 16:13:18 +10:00
Gonzalo HQ063
090216df2a Update languages.yml
Alphabetize the recently added .frm extension
2013-08-04 12:40:45 -03:00
Ted Nyman
7b2fec88d1 Update samples 2013-08-03 13:25:47 -07:00
Ted Nyman
76128ccb37 Add make samples and shebang for make 2013-08-03 13:21:58 -07:00
Ted Nyman
f5ede0d0f9 Update samples 2013-08-03 13:13:49 -07:00
Siraaj Khandkar
70d1649b45 Added an R script sample. 2013-08-02 17:17:00 -04:00
Ted Nyman
de706a2eb9 Merge pull request #588 from techy1157/patch-1
Vendored .DS_Store (for mac users)
2013-08-01 21:48:20 -07:00
Ted Nyman
33ebee0f6a Merge pull request #598 from github/let-css-soar
css detection
2013-07-30 16:23:06 -07:00
Ted Nyman
51a989d5f1 Update CSS color 2013-07-30 15:30:47 -07:00
Ted Nyman
3fc208b4ce Bump to 2.9.0 2013-07-30 14:43:30 -07:00
Ted Nyman
0fa54a85d8 Include .scss file samples 2013-07-30 14:21:04 -07:00
Ted Nyman
96e8a5d2cc Start detecting CSS 2013-07-30 13:30:39 -07:00
Ted Nyman
838fbc5626 Drop less from vendor.yml 2013-07-30 03:14:51 -07:00
Gonzalo HQ063
486af800b5 Update languages.yml
- Add .frm extension as VB file
2013-07-30 00:11:40 -03:00
j-jorge
f0b9b3a35a Add common file extensions to the c++ language
.hpp and .tpp extensions are of common use respectively for headers files and separate implementation of template classes/methods.
2013-07-29 17:27:25 +02:00
Ted Nyman
80780ab042 2.8.12 2013-07-26 16:11:56 -07:00
David Calavera
bd19f6ed17 Merge pull request #594 from github/docker_syntax
Docker syntax
2013-07-26 16:10:30 -07:00
Ted Nyman
2ae76842a0 0.8.11 2013-07-26 16:08:24 -07:00
Ted Nyman
750804876e Docs for the linguist script 2013-07-26 16:08:24 -07:00
Ted Nyman
1d8da964e2 More color tweaks 2013-07-26 16:08:24 -07:00
David Calavera
d21d0f281a Put the Dockerfile sample into the right directory. 2013-07-26 15:47:45 -07:00
David Calavera
a8e337e0eb Add Dockerfile sample. 2013-07-26 15:35:00 -07:00
David Calavera
37429d91a0 Add Docker files to the list of shell formatted files. 2013-07-26 15:33:23 -07:00
Ted Nyman
4b9c6fdf62 Merge pull request #592 from vszakats/patch-1
ignore more Git local config files to avoid them being misidentified as ...
2013-07-25 19:46:26 -07:00
Viktor Szakáts
4130825a43 ignore more Git local config files to avoid them being misidentified as Racket, Ruby or else 2013-07-24 11:46:01 +02:00
James Socol
8c42e61271 Update languages.yml
Add .adp for AOL Server Tcl files.
2013-07-22 14:54:37 -04:00
Ted Nyman
6d95590861 2.8.10 2013-07-20 23:15:13 -07:00
Ted Nyman
dbc36a5e63 More color tweaking 2013-07-20 23:14:53 -07:00
Ted Nyman
32a106cedd 2.8.9 2013-07-20 23:02:54 -07:00
Ted Nyman
78ed103f90 Fix casing 2013-07-20 23:02:12 -07:00
Ted Nyman
3e26b2a0a7 Update samples file 2013-07-20 15:10:46 -07:00
Ted Nyman
4fb910533f Add another php script sample 2013-07-20 15:05:49 -07:00
Ted Nyman
b71cab6add Give go language a color closer to its website 2013-07-19 22:51:59 -07:00
Phil Windley
394fb528cc getting pendantic about ASCII sorting order 2013-07-19 16:32:54 -06:00
Phil Windley
d2f4eec397 added lexer for KRL 2013-07-19 16:29:51 -06:00
Phil Windley
5f29bf3bb4 added KRL config and sample 2013-07-19 13:46:42 -06:00
Lazersmoke
5a9d35917f Vendored .DS_Store
In case a Mac user uploads lots of folders with .DS_Stores and changes their project language as such.
2013-07-19 00:02:39 -05:00
Jay Phelps
0029183078 Needed handlebars extensions in alpha-numeric order. 2013-07-18 02:00:32 -07:00
Jay Phelps
0978258f57 Added common alternative Handlebars extensions 2013-07-18 01:47:14 -07:00
Ted Nyman
772a9a582c 2.8.8 2013-07-17 03:01:53 -07:00
Ted Nyman
e633d565a9 Update samples 2013-07-17 02:59:28 -07:00
Ted Nyman
7d6ee108c4 2.8.7 2013-07-17 02:51:07 -07:00
Ted Nyman
dd64c3b545 Merge pull request #583 from github/add-slash
Add Slash
2013-07-17 02:49:50 -07:00
Charlie Somerville
b462e29e1d update pygments 2013-07-17 02:35:38 -07:00
Charlie Somerville
43f4f5bd32 add Slash to linguist 2013-07-17 01:51:34 -07:00
Ted Nyman
904e86d901 2.8.6 2013-07-15 12:07:33 -07:00
Ted Nyman
374164a299 Merge pull request #582 from github/gitignore
Don't bother with .gitignore files
2013-07-15 12:07:00 -07:00
Ted Nyman
f73f309595 Don't bother with .gitignore files 2013-07-15 12:06:07 -07:00
Ted Nyman
f23110a98d Bump to 2.8.5 2013-07-13 23:23:41 -07:00
Ted Nyman
3193fc90f9 Merge pull request #579 from github/fix-escript
Add another escript script
2013-07-13 23:21:49 -07:00
Ted Nyman
cc04519520 Add another escript script 2013-07-13 23:16:36 -07:00
Ted Nyman
f51c5e3159 Update documentation related to Pygments 2013-07-12 14:10:55 -07:00
Tim Menzies
a75d918b93 Update languages.yml 2013-07-12 14:33:23 -04:00
Ted Nyman
c439ca5f97 Merge pull request #575 from github/suppress-generated-cs
Hide .designer.cs files
2013-07-11 18:53:39 -07:00
Paul Betts
4d45f13783 Hide .designer.cs files
VS creates a bunch of files that, while important to version, are often also
huge and boring. We should suppress them.
2013-07-11 15:54:54 -07:00
Alain Gilbert
2a56719378 There is a lexer for TypeScript in the pygments project 2013-07-11 11:59:44 -04:00
Aaron Hill
23289d8901 Added REALbasic 2013-07-10 18:56:41 -04:00
Ted Nyman
7d594b55e4 2.8.4 2013-07-07 23:38:11 -07:00
Ted Nyman
5268a93fa4 Merge pull request #443 from stuartpb/patch-1
Add Erlang rebar escript bundles to vendor.yml
2013-07-07 23:32:58 -07:00
Ted Nyman
ae44530a66 Regenerate samples 2013-07-07 21:26:33 -07:00
Ted Nyman
285216a258 Merge pull request #568 from cono/master
add .fcgi file with proper shebang as Perl sample
2013-07-07 21:26:07 -07:00
cono
4d3720745e Add Perl's index.fcgi to samples 2013-07-08 04:01:50 +03:00
Ted Nyman
a681a252d4 Merge pull request #548 from talentdeficit/master
change erlang css color to something less horrendous
2013-07-07 15:42:53 -07:00
Ted Nyman
22de40f5f6 2.8.3 2013-07-07 15:27:59 -07:00
Ted Nyman
7fbfe0a4b4 Silence this warning 2013-07-07 15:26:29 -07:00
Ted Nyman
29f5ea591f 2.8.2 2013-07-07 15:18:09 -07:00
Ted Nyman
438c0a4ec1 Remove unncessary xc extension 2013-07-07 15:17:32 -07:00
Ted Nyman
887933c86a Bump to 2.8.1 2013-07-07 14:54:24 -07:00
Ted Nyman
53340ddd4c Even more Python script support 2013-07-07 14:53:15 -07:00
Ted Nyman
72b70a11bc Bump to 2.8.0 2013-07-07 14:37:01 -07:00
Ted Nyman
d853864edb Merge pull request #567 from github/workspace
Better Python script support; update samples.json
2013-07-07 14:35:57 -07:00
Ted Nyman
62ad763933 Better Python script support; update samples.json 2013-07-07 14:33:18 -07:00
Ted Nyman
6a15ae47ee Some space here 2013-07-07 14:07:03 -07:00
Ted Nyman
1bebb50482 Exclude LICENSE files 2013-07-07 13:54:22 -07:00
Haralan Dobrev
d351d6091d added JSON extensions for Sublime Text
Signed-off-by: Haralan Dobrev <hkdobrev@gmail.com>
2013-07-02 00:10:42 +03:00
assassini
fae8f83f64 Added a test case for the "dependencies" folder exclusion pattern 2013-07-01 21:46:54 +03:00
assassini
d3d62726ae Added an exclusion pattern for a "dependencies" folder in the root directory 2013-07-01 21:38:22 +03:00
Tim Baumann
cf15832504 add agda and literate agda support 2013-06-29 12:28:43 +02:00
Ted Nyman
fdc81d8818 Update LICENSE 2013-06-24 14:32:07 -06:00
Poren Chiang
764df07450 Include Qt/QML lanuage 2013-06-23 03:20:07 +08:00
Duncan McGreggor
68dfff60b5 Fixed typo (removed capitalization). 2013-06-21 14:39:04 -07:00
Duncan McGreggor
479871f019 Added support for LFE (Lisp Flavored Erlang). 2013-06-21 14:23:31 -07:00
alisdair sullivan
10ec56e667 change css color representing erlang to slightly less horrendous
color
2013-06-20 14:48:51 -07:00
Ted Nyman
1e958a18f8 Merge pull request #541 from hkdobrev/patch-1
Added .tmTheme as XML extension
2013-06-19 13:31:26 -07:00
Ted Nyman
9fa0f6cd6f Merge pull request #543 from jasonbot/master
Treat `.pyt` files as Python source
2013-06-19 13:31:08 -07:00
Ted Nyman
4e339db911 Merge pull request #377 from rlsosborne/detect-xc-language
Add detection for the XC programming language.
2013-06-19 13:30:45 -07:00
Haralan Dobrev
c1469b25a1 Added .tmTheme as XML extension
Files with the `.tmTheme` extension similar to `.tmCommand`, `.tmLanguage`, `.tmPreferences` and `.tmSnippet` are configuration XML files for TextMate or SublimeText.

The `.tmTheme` extension was missing from this list.
2013-06-18 17:02:34 +03:00
Jason Scheirer
ef6abed81a Languages.yml entries must be in alphabetical order 2013-06-17 22:11:16 -06:00
"Jason Scheirer"
96473849e0 Add .pyt as an extension for Python 2013-06-17 17:30:10 -07:00
Paul Betts
b14e09af6b Merge pull request #215 from oxan/master
Add jQuery UI and more ASP.NET MVC files to vendor.yml
2013-06-17 11:01:04 -07:00
Andrew Kumanyaev
42050c4d12 Update languages.yml
Added .podsl extension for Common Lisp language
2013-06-17 21:48:39 +04:00
Joshua Peek
84dc918729 Linguist 2.7.0 2013-06-10 11:08:49 -05:00
Joshua Peek
032125b114 Axe indexable? 2013-06-10 11:06:18 -05:00
Joshua Peek
b1a137135e Axe colorize_without_wrapper 2013-06-10 10:58:33 -05:00
Joshua Peek
1a53d1973a ws 2013-06-10 10:39:59 -05:00
Joshua Peek
490afdddd1 some air 2013-06-10 10:37:55 -05:00
Joshua Peek
9822b153eb ws 2013-06-10 10:36:56 -05:00
Chris Kuehl
1af71c8945 Add tests for PhoneGap/Cordova vendor exceptions. 2013-06-10 01:09:23 -04:00
Chris Kuehl
acc1a56da4 Add Cordova's/PhoneGap's JS device library as vendor exclusion. 2013-06-10 01:05:20 -04:00
Ted Nyman
bf4596c26d Merge pull request #530 from github/not-really-mac
Less clever newline detection
2013-06-09 21:48:11 -07:00
Joshua Peek
3e3fb0cdfe Say why 2013-06-09 21:02:55 -05:00
Joshua Peek
d907ab9940 Kill mac_format check, buggy 2013-06-09 21:02:11 -05:00
Joshua Peek
9c1d6e154c Always split lines on \n or \r 2013-06-09 21:01:03 -05:00
Joshua Peek
b5681ca559 Correct count 2013-06-09 21:00:20 -05:00
Joshua Peek
4b8f362eb7 Merge test cases 2013-06-09 20:53:48 -05:00
Joshua Peek
2e39d1d582 Rebuild samples 2013-06-09 20:53:33 -05:00
Joshua Peek
fa797df0c7 Note that BlobHelper is a turd 2013-06-09 20:51:26 -05:00
Joshua Peek
c7100be139 Make mac_format? private 2013-06-09 20:48:45 -05:00
Joshua Peek
91284e5530 Add failing test bad mac format 2013-06-09 20:45:59 -05:00
Patrick Reynolds
e5cf7ac764 bump version to include the new sample files 2013-06-06 22:46:11 -05:00
Patrick Reynolds
3ae785605e Merge pull request #529 from github/more-samples
More samples
2013-06-06 20:40:12 -07:00
Patrick Reynolds
e7ac4e0a29 helpful comments 2013-06-06 17:04:28 -05:00
Patrick Reynolds
b275e53b08 use LINGUIST_DEBUG to debug the Bayesian filter 2013-06-06 16:54:18 -05:00
Patrick Reynolds
f363b198e1 more and better samples for Nu, Racket, Scala
- 99 bottles of beer is more substantial than hello world
 - also fixed chmod 755 on several .script! files
2013-06-06 16:53:16 -05:00
Ted Nyman
37c5570cec Merge pull request #528 from github/erlang-samples
Erlang samples
2013-06-06 13:46:53 -07:00
Patrick Reynolds
2db2f5a46d add erlang, more-complex shell examples
- some Erlang and escript files
 - .escript extension
 - .erlang extension
 - shell script with %, ##, name tokens
2013-06-06 15:41:44 -05:00
Patrick Reynolds
e33f4ca96e remove redundant OCaml extensions entry 2013-06-06 15:21:49 -05:00
Ted Nyman
246580fb43 Update README.md 2013-05-31 15:27:00 -06:00
Aaron Puchert
fab34da3e7 Added PostScript to languages.yml and a sample file. 2013-05-31 20:10:54 +02:00
Matthew Fluet
a9a28ce58d The .fun extension is commonly used for Standard ML. 2013-05-30 20:54:36 -04:00
Michael Mullis
f2b80a239f COBOL: move up in the sort order 2013-05-30 01:33:04 +00:00
Michael Mullis
c6d38ab647 COBOL comes before Clojure and extensions must be sorted 2013-05-30 01:29:36 +00:00
Michael Mullis
420594874a add COBOL language support 2013-05-30 01:17:07 +00:00
Ted Nyman
912f635d2a Merge pull request #515 from Turbo87/jinja
Added .jinja extension to HTML+Django language
2013-05-27 13:38:13 -07:00
Tobias Bieniek
4ae5dd360f Added .jinja extension to HTML+Django language 2013-05-27 22:05:17 +02:00
Mark Otaris
407c40f7d3 Add '.rbxs' extension for Lua files 2013-05-23 19:34:04 -03:00
Ted Nyman
329f9a0fc8 Merge pull request #503 from Drup/patch-1
Add .eliom to ocaml extensions
2013-05-21 23:24:30 -07:00
Ted Nyman
d62257b149 Merge pull request #504 from wjlroe/riemann-configs-are-clojure
Recognise riemann.config files as Clojure files
2013-05-21 23:22:56 -07:00
Ted Nyman
19539404a4 Merge pull request #510 from Gozala/wisp
Add wisp language support.
2013-05-21 23:20:37 -07:00
Irakli Gozalishvili
9ee0523cad Add wisp language support. 2013-05-21 14:03:16 -07:00
Adam Ferguson
89bc82d9df Add samples for Jade and Scaml 2013-05-16 13:21:58 -04:00
Adam Ferguson
30aa3fd5d6 Add Jade and Scaml 2013-05-16 10:26:01 -04:00
William Roe
846e84fc8c Recognise riemann.config files as Clojure files 2013-05-13 18:25:27 +01:00
Drup
cd006487b3 Add .eliom to ocaml extensions 2013-05-13 17:10:07 +02:00
Ted Nyman
597ce9adc3 Add Clojure and just use the existing Bash record 2013-05-11 00:26:13 -06:00
Ted Nyman
61040402df Actually remove the languages 2013-05-11 00:23:10 -06:00
Ted Nyman
8013cd081a Based on current stats, add Shell, Coffeescript to popular; drop TeX, XML 2013-05-11 00:22:27 -06:00
Leushenko
22cdb9ee90 Added BlitzBasic 2013-05-09 14:58:41 +01:00
Pat Pannuto
df448c0761 Add support for nesC
nesC is an embedded systems language. It it is a stable product (~10
years old) primarily used for TinyOS, an embedded operating system.
Development has recently moved to github (https://github.com/tinyos/nesc).

Pygments has now pulled the nesC lexer as of 2013/5/6:
  https://bitbucket.org/birkenfeld/pygments-main/pull-request/166/

Please let me know if I need to do anything else / add more information.
2013-05-06 18:06:43 -04:00
Ted Nyman
99c296264a Merge pull request #483 from KevinT/master
Added scriptcs language detection
2013-05-06 13:16:14 -07:00
Ted Nyman
ba51461604 Merge pull request #493 from josegonzalez/patch-1
Consider .reek files as yaml
2013-05-03 01:16:01 -07:00
Ted Nyman
6610d0dd46 Merge pull request #494 from josegonzalez/patch-2
Consider .factor-rc and .factor-boot-rc factor files. Closes #492
2013-05-03 01:15:12 -07:00
Jose Diaz-Gonzalez
3adc0e1b16 Reorder extensions in order to pass tests 2013-04-30 15:54:41 -03:00
Jose Diaz-Gonzalez
0a47b4865a Consider .factor-rc and .factor-boot-rc factor files. Closes #492 2013-04-30 15:50:51 -03:00
Jose Diaz-Gonzalez
13f1a1fc74 Consider .reek files as yaml 2013-04-30 15:49:00 -03:00
Ted Nyman
3ad129e6e6 Update samples.json 2013-04-28 22:38:07 -07:00
Kevin Trethewey
475e865809 Added scriptcs file extention to C# section 2013-04-28 07:40:12 +03:00
marc hoffman
1e93e98d30 Merge branch 'master' of git://github.com/github/linguist 2013-04-27 22:57:33 +02:00
marc hoffman
d0034b4fb9 Oxygene language detection — drop lexer setting, as we now have a proper Oxygene lexer in pigments.rb 2013-04-27 22:55:57 +02:00
Ted Nyman
0c3dcb0a9b Update color for UPC 2013-04-27 21:01:33 +08:00
Ted Nyman
3138fa79a0 Merge pull request #484 from waltherg/patch-1
Added support for Unified Parallel C
2013-04-27 06:00:17 -07:00
waltherg
c88170b6f6 Added support for Unified Parallel C
http://upc.gwu.edu/
2013-04-27 13:12:03 +02:00
Pointwise, Inc.
3b79cf3cf2 Add lexer 2013-04-24 11:30:00 -05:00
Ted Nyman
f3ee7072a6 Merge pull request #479 from CodeBlock/gemfile-https
Make Gemfile use https://rubygems.org
2013-04-24 09:09:25 -07:00
Ted Nyman
5b5d9da33c Merge pull request #477 from liluo/patch-1
added multi line comment flag for python
2013-04-24 09:07:28 -07:00
Ricky Elrod
dc1d17a051 Make Gemfile use https://rubygems.org 2013-04-21 00:35:13 -04:00
0bc28d9424 added multi line comment flag for python 2013-04-19 15:33:02 +08:00
Pointwise, Inc.
5b06a46451 Added Glyph scripting language 2013-04-18 16:11:50 -05:00
Ted Nyman
8b5b8a9760 Merge pull request #471 from mihaip/master
Detect source files generated by the Protocol Buffer compiler
2013-04-16 23:20:24 -07:00
Mihai Parparita
6c98bbf02c Detect source files generated by the Protocol Buffer compiler 2013-04-16 22:14:50 -07:00
Ted Nyman
9f0964cd7d Merge pull request #461 from github/detect-csv
Add `csv?` BlobHelper
2013-04-04 14:36:08 -07:00
Yaroslav Shirokov
b68732f0c7 Add detection for CSV 2013-04-04 14:01:09 -07:00
marc hoffman
15a746650c Merge branch 'master' of https://github.com/github/linguist 2013-04-03 13:20:50 +02:00
Ted Nyman
b99abba27f Merge pull request #455 from github/axml
Add axml extension to xml
2013-04-01 19:57:47 -07:00
Ted Nyman
9c12823d38 Add axml extension to xml 2013-04-01 19:56:38 -07:00
Ted Nyman
28bee50e6a Merge pull request #451 from github/pdfs
Add PDF detection
2013-03-25 21:14:16 -07:00
Garen Torikian
4148ff1c29 Add PDF detection 2013-03-25 15:45:58 -07:00
Giacomand
e408b5fbaa * Trying this. 2013-03-25 16:26:14 +00:00
Giacomand
e26bf5a0d2 - Moving diff to after DM. 2013-03-25 16:14:06 +00:00
Giacomand
465d60ba86 * Missed setting the lexer to Text Only. 2013-03-25 16:07:19 +00:00
Giacomand
d5c3978a6e * Fixed a mis-formating. 2013-03-25 10:13:38 +00:00
Giacomand
d4312c05bf - Updated sample file. 2013-03-25 09:54:23 +00:00
Giacomand
7efad57176 Added:
* DM (Dream Maker) language.
 * Sample DM file.

The DM language is used in an engine known as BYOND which allows users to easily create their own games in a language that is designed to be accessible for newcomers. I do not know how much a language has to be used on the site to be considered but searching for "BYOND" does show a lot of people using the language. I am also still learning git so if I have missed something then please let me know.
2013-03-25 09:49:00 +00:00
Ted Nyman
009bff6cc2 Merge pull request #448 from github/update-db
Update samples
2013-03-22 21:37:22 -07:00
Ted Nyman
c918c5b742 Update samples 2013-03-22 21:35:02 -07:00
Ted Nyman
4a33b7ae8e Merge pull request #150 from lparenteau/master
Add detection for the M programming language (aka MUMPS).
2013-03-22 21:32:50 -07:00
Ted Nyman
777952adcb Merge pull request #446 from github/ceylon-as-ceylon-not-textonly
Render Ceylon as Ceylon since it is now in Pygments
2013-03-18 17:40:17 -07:00
Matthew McCullough
ef4c47347d Render Ceylon as Ceylon since it is now in Pygments 2013-03-18 15:34:37 -07:00
Ted Nyman
5e34315bb3 Merge pull request #349 from tucnak/master
Support of Qt Designer .ui files
2013-03-18 12:50:19 -07:00
Illya Kovalevskyy
4f5624cd5f Order is fixed 2013-03-18 01:40:40 +02:00
Illya Kovalevskyy
f76d64f9aa Merge branch 'master' of github.com:github/linguist
Conflicts:
	lib/linguist/languages.yml
2013-03-18 01:36:19 +02:00
Ted Nyman
4444b6daa1 Merge pull request #441 from rdeltour/xml-group
Remove XProc and XSLT from the group XML
2013-03-17 16:14:59 -07:00
Stuart P. Bentley
ec786b73bc Add Erlang rebar escript bundles to vendor.yml
Fixes #236
2013-03-16 13:51:08 -07:00
Romain Deltour
7ca58f8dd9 Remove XProc and XSLT from the group XML 2013-03-15 12:40:59 +01:00
Laurent Parenteau
58420f62d9 Merged with upstream. Updated M (aka MUMPS) detection to use the new bayesian / samples method. 2013-03-14 11:33:09 -04:00
Ted Nyman
a20631af04 Merge pull request #373 from vincentwoo/patch-1
Add extension support for Iced Coffeescript
2013-03-13 23:10:33 -07:00
Ted Nyman
44995d6f62 Merge pull request #438 from richo/bugs/sample_db
Bugs/sample db
2013-03-12 23:32:31 -07:00
richo
2d7dea2d97 Don't emit the diff if samples db is out of date
There's a warning message emitted with instructions, a 2000 line diff
does nothing to help the user track down the issue.
2013-03-13 17:29:05 +11:00
richo
2cdbe64b66 Update samples db 2013-03-13 15:09:51 +11:00
Ted Nyman
030ad89a14 Bump to 2.6.8 2013-03-12 01:09:28 -07:00
Ted Nyman
a34ee513c0 Merge pull request #436 from github/ignore-test-fixtures
Vendor test/fixtures
2013-03-12 01:07:50 -07:00
Ted Nyman
96d29b7662 Vendor test/fixtures 2013-03-12 01:06:26 -07:00
Ted Nyman
3f077ea71e Merge pull request #383 from REAS/master
Update to include Processing as a new language
2013-03-11 18:39:03 -07:00
Ted Nyman
de94b85c0d Merge pull request #295 from yandy/patch-1
downcase extname when we determin whether it's a image
2013-03-10 15:39:55 -07:00
Ted Nyman
1c771cc27d Remove sample for now until test structure changes 2013-03-10 15:36:49 -07:00
Ted Nyman
a41ec3a801 Merge pull request #321 from mndrix/patch-1
Add a misclassified Prolog file
2013-03-10 15:34:34 -07:00
Ted Nyman
d9d9e01242 Update samples database 2013-03-10 15:26:46 -07:00
Ted Nyman
04abb5310a Add .pluginspec sample 2013-03-10 15:25:02 -07:00
Ted Nyman
c7ed9bd7b3 Better regex 2013-03-10 15:23:14 -07:00
Ted Nyman
8aadb5eeaa Merge pull request #312 from HerbertKoelman/master
Added to vendor.yml dependencies related to automake and autoconf
2013-03-10 15:22:17 -07:00
Casey Reas
e4b5593728 Add Processing to languages.yml, includes lexer: Java 2013-03-08 16:10:34 -08:00
marc hoffman
14d363b942 Oxygene language detection — trying if making .pas not the primary extension (which Delphi also has) fixes the build fail 2013-03-08 12:48:39 +01:00
marc hoffman
f8c6277946 Oxygene language detection — now with "text only" lexer for now (why do we need this, other languages don't specify one) 2013-03-08 12:21:51 +01:00
marc hoffman
8254bcc3ac Oxygene language detection 2013-03-08 12:13:56 +01:00
Ted Nyman
f8389f0d93 Bump to 2.6.7 2013-03-07 20:18:44 -08:00
Ted Nyman
af12db9276 Update samples database 2013-03-07 20:18:07 -08:00
Ted Nyman
688a6bb581 Don't include .inc.
Format is used by too many other non lasso repos
2013-03-07 20:15:17 -08:00
Michael Galloy
a8b2b0a86b Adding Interactive Data Language (IDL) support. 2013-03-07 18:48:27 -07:00
Ted Nyman
5d5935965a Merge pull request #423 from gentoo90/nsis-lexer
Add NSIS installer scripting language
2013-03-07 17:26:14 -08:00
Ted Nyman
f795b20582 Merge pull request #391 from bfontaine/forth-samples
More Forth samples
2013-03-07 17:07:07 -08:00
Ted Nyman
c2023d33b9 Merge pull request #363 from dveeden/master
Add DOT language
2013-03-07 14:12:07 -08:00
gentoo90
d9c375b74a Add .nsh extension 2013-03-07 22:39:16 +02:00
gentoo90
7179ec56ef Add NSIS installer scripting language 2013-03-07 21:39:37 +02:00
Ted Nyman
26c850c37f Update samples.json to latest data 2013-03-06 19:59:33 -08:00
Ted Nyman
2023f35af7 Merge pull request #396 from elehcim/master
Added Matlab code samples
2013-03-06 19:58:42 -08:00
Ted Nyman
c0a57dbd1b Merge pull request #386 from rdeltour/xproc
New language: XProc - an XML Pipeline language (W3C)
2013-03-06 19:57:45 -08:00
Ted Nyman
78f072b46a 2.6.6 2013-03-06 15:29:25 -08:00
Ted Nyman
da51510597 Nix this generated check for now 2013-03-06 15:28:55 -08:00
Ted Nyman
47389cc827 Update samples and bump to 2.6.5 2013-03-06 14:50:50 -08:00
Ted Nyman
f035203e1c Bump to 2.6.4 2013-03-06 14:49:30 -08:00
Ted Nyman
083f6fc3b4 Merge pull request #421 from rvanmil/master
Add ABAP
2013-03-06 14:47:44 -08:00
Ted Nyman
d5bfe40f37 Fix deprecation warning 2013-03-06 14:47:01 -08:00
Ted Nyman
0b350defb5 Merge pull request #422 from brson/rust
Turn on Rust lexing. Add a bigger sample
2013-03-06 14:44:02 -08:00
Ted Nyman
88d0408875 Merge pull request #294 from DHowett/master
Add support for the Logos language.
2013-03-06 14:42:46 -08:00
Brian Anderson
c7a155efef Turn on Rust lexing. Add a bigger sample 2013-03-06 12:40:31 -08:00
Dustin L. Howett
9187fffc48 Update samples.json to include Logos. 2013-03-06 12:34:42 -08:00
Dustin L. Howett
7d2603ceb7 Add support for the Logos language. 2013-03-06 12:30:06 -08:00
René
c5bb287c74 Add ABAP 2013-03-06 09:24:42 +01:00
Ted Nyman
6b6f5eaaff Remove out of date notes 2013-03-04 13:31:05 -08:00
Ted Nyman
f3fa2317a6 Update samples.json, bump to 2.6.3 2013-03-04 13:19:40 -08:00
Ted Nyman
d096187196 Remove extra Forth extension 2013-03-04 12:40:10 -08:00
Ted Nyman
c5a3b34546 Merge pull request #419 from pborreli/typos
Fixed typos
2013-03-04 12:17:42 -08:00
Pascal Borreli
70eafb2ffc Fixed typos 2013-03-03 21:26:31 +00:00
Ted Nyman
983a3e6073 Minor README fixes 2013-03-02 23:19:10 -08:00
Xidorn Quan
fc8d2f641c Add samples and tests for minified CSS detection. 2013-03-02 14:27:51 +08:00
Xidorn Quan
9a5f9a5e9b Use space rate to distinguish minified files.
Minified JS files usually contain less than 2% spaces, while minified
CSS files may contain about 4% spaces. However, an unminified CSS file
may also have as low as 6% spaces, especially when it includes some
resources inline. Consequently, the division might not be appreciate
for CSS files. Even though, it will only mis-recognize a normal file
as minified for a few special cases.
2013-03-02 13:15:42 +08:00
Xidorn Quan
806369ce7f Merge minified files detecting methods. 2013-03-01 20:50:49 +08:00
Xidorn Quan
4398cda9a5 Detect minified CSS files 2013-03-01 16:15:56 +08:00
Ted Nyman
cf6eeec22a Merge pull request #408 from soimort/master
Add support for Literate CoffeeScript
2013-02-26 22:29:46 -08:00
Mort Yao
583e6fe2e8 Add sample file for Literate CoffeeScript 2013-02-27 05:32:51 +01:00
Brian Lopez
500f8cd869 bump version to 2.6.2 2013-02-26 17:43:24 -08:00
Brian Lopez
2e5866e6d8 Merge pull request #413 from github/bump-escape-utils
Bump escape_utils
2013-02-26 17:42:33 -08:00
Brian Lopez
600648c8af bump escape_utils 2013-02-26 17:41:04 -08:00
Josh Bleecher Snyder
395f4375da Update samples 2013-02-26 16:05:55 -08:00
Josh Bleecher Snyder
bb348c4038 Add Objective-C++ samples 2013-02-26 16:02:59 -08:00
Josh Bleecher Snyder
1a4be4dfa0 Add Objective-C++ to languages.yml 2013-02-26 15:39:12 -08:00
Ted Nyman
1ac51d2261 Merge pull request #410 from skalnik/remove-obj
Remove OBJ from supported solids
2013-02-26 14:20:45 -08:00
Mike Skalnik
1766123448 Fix typo in comment 2013-02-26 14:00:42 -08:00
Mike Skalnik
5ea039a74e Remove OBJ files as support solids 2013-02-26 14:00:29 -08:00
Michele Mastropietro
0af1a49cbd Added one more file 2013-02-26 09:23:19 +01:00
Mort Yao
151b7d53b0 Add support for Literate CoffeeScript 2013-02-26 02:51:42 +01:00
Ted Nyman
6e82d2a689 Merge pull request #354 from mrorii/master
Detect Cython-generated C/C++ files
2013-02-25 17:11:17 -08:00
Ted Nyman
b02c6c1e54 Bump to 2.6.1 2013-02-25 15:47:48 -08:00
Ted Nyman
cd406cc6b9 Remove extra extensions.
This are covered by samples so we do not
need to mention them here
2013-02-25 15:46:18 -08:00
Ted Nyman
52d46ddc8c Merge pull request #385 from rdeltour/xslt
XSLT as a programming language
2013-02-25 15:03:27 -08:00
Ted Nyman
188fad1814 Update samples database 2013-02-25 15:01:13 -08:00
Ted Nyman
a86ff11084 Merge pull request #405 from github/new-pygments
New pygments
2013-02-25 00:54:59 -08:00
Ted Nyman
6630f3bc4a Just name 2013-02-25 00:53:56 -08:00
Ted Nyman
2164f285f5 Bump version, add toml 2013-02-25 00:52:58 -08:00
Ted Nyman
086855fcce Merge pull request #404 from github/new-pygments
Bump to latest pygments.rb
2013-02-25 00:20:51 -08:00
Ted Nyman
33b421ff0b Bump pygments 2013-02-25 00:19:02 -08:00
Ted Nyman
36e8fe1b25 Begin 2.6.0 series 2013-02-25 00:13:57 -08:00
Ted Nyman
9696ee589e Bump to pygments.rb 0.4.0 2013-02-25 00:13:21 -08:00
Romain Deltour
f66da93e64 Remove extension from the XML (it is declared in XSLT) 2013-02-25 09:12:31 +01:00
Daniël van Eeden
d766c14305 Update lib/linguist/languages.yml
Set lexer to Text only for DOT. This hopefully fixed the failure on Travis.
2013-02-25 08:15:37 +01:00
Daniël van Eeden
5b749060a4 Update lib/linguist/languages.yml
Change sort order
2013-02-25 08:08:06 +01:00
Ted Nyman
9c76078b4f Remove extra extension list 2013-02-24 22:53:49 -08:00
Ted Nyman
c54ffa78f4 Alphabetize Pike 2013-02-24 22:53:06 -08:00
Ted Nyman
dde1addced Merge pull request #170 from johan/detect-pike-language
Added detection for the Pike language.
2013-02-24 22:50:43 -08:00
Ted Nyman
6108d53eb2 Merge pull request #400 from kevinjalbert/add-txl
Add TXL language
2013-02-24 22:49:39 -08:00
Casey Reas
7ae475a811 Put Processing language into alphabetical order, re: #383 2013-02-23 19:27:05 -08:00
Ted Nyman
c3c2c9c7fe Merge pull request #402 from PulsarBlow/language-typescript
TypeScript language support
2013-02-23 15:22:29 -08:00
Ted Nyman
f8955e919b Merge pull request #401 from jdutil/patch-2
Add deface extension support.
2013-02-23 15:21:44 -08:00
PulsarBlow
dc9ad22ec4 TypeScript language support
Signed-off-by: PulsarBlow <pulsarblow@gmail.com>
2013-02-23 23:40:40 +01:00
Jeff Dutil
e33cf5f933 Add deface extension support. 2013-02-23 16:03:51 -05:00
Kevin Jalbert
4c7b432090 Rename sample file's extension to match languages.yml 2013-02-23 13:32:36 -05:00
Ted Nyman
8afd6a1bd8 Merge pull request #342 from svenefftinge/master
languages.yml: add Xtend
2013-02-23 10:21:01 -08:00
Kevin Jalbert
7725bbb36b Add TXL language
Add:
 * TXL language
 * Sample TXL file
2013-02-23 13:19:10 -05:00
Ted Nyman
333d9cfffb Merge pull request #399 from BPScott/add-editorconfig
Add .editorconfig as an INI file
2013-02-23 10:18:40 -08:00
Ben Scott
495b50cbda Add .editorconfig as an INI file
See http://editorconfig.org
2013-02-23 16:27:24 +00:00
Sven Efftinge
fe8dbd662b Update lib/linguist/languages.yml
added primary_extension: .xtend
2013-02-23 13:50:04 +01:00
Illya
cdde73f5ee The extension list is alphabetized 2013-02-23 12:51:59 +02:00
Ted Nyman
05c49245b0 Fix whitespace 2013-02-23 02:39:44 -08:00
Ted Nyman
0955dd2ef0 Merge pull request #278 from DrItanium/master
Add support for the CLIPS programming language
2013-02-23 02:38:50 -08:00
Ted Nyman
6c5a9e97fe Merge pull request #376 from evanmiller/detect-opencl
Treat .opencl files as OpenCL
2013-02-23 02:37:44 -08:00
Ted Nyman
e5d2795ec0 Alphabetize 2013-02-23 02:29:17 -08:00
Ted Nyman
61aa378c45 Remove extra lexer 2013-02-23 02:26:10 -08:00
Ted Nyman
db296bee80 Merge pull request #318 from stuarthalloway/master
Datomic DTM files
2013-02-23 02:25:27 -08:00
Ted Nyman
3e091eacc2 Merge pull request #397 from unnali/rouge
Rouge
2013-02-22 19:47:40 -08:00
Arlen Christian Mart Cuss
b2303eac1e Add Rouge. 2013-02-23 14:13:12 +11:00
Arlen Christian Mart Cuss
c01e347bc0 Correct documentation, README grammar. 2013-02-23 14:13:12 +11:00
Ted Nyman
6d8583a0b4 Merge pull request #395 from featurist/master
add PogoScript language (no samples.json!)
2013-02-22 11:30:36 -08:00
Michele Mastropietro
c85255c5af Added matlab code samples.
All of these code samples currently are mis-identified in my repositories. I'm
donating them to the cause.
2013-02-22 10:57:51 +01:00
Tim Macfarlane
5fac67cea5 add PogoScript detection 2013-02-22 09:31:06 +00:00
Johan Sundström
7b9e0afef9 Reverted pike tests until such time as we have a pike lexer here. 2013-02-21 23:23:00 -08:00
Ted Nyman
b45c4f5379 Merge pull request #335 from rofl0r/dpryml
languages.yml: add .dpr and .dfm extension to Delphi
2013-02-21 22:58:44 -08:00
Ted Nyman
1fa4ed6bc2 Merge pull request #255 from seanupton/master
Syntax highlighting (XML) for Zope .zcml and .pt files
2013-02-21 22:49:18 -08:00
Ted Nyman
2d16f863f7 Revert "Merge pull request #171 from ianmjones/patch-1"
This reverts commit f5ebbd42d3, reversing
changes made to b998a5c282.
2013-02-21 22:09:59 -08:00
Ted Nyman
f5ebbd42d3 Merge pull request #171 from ianmjones/patch-1
Added REALbasic language.
2013-02-21 22:04:53 -08:00
Ted Nyman
b998a5c282 Merge pull request #239 from db0company/master
Add .eliom extension for Ocsigen (OCaml web framework)
2013-02-21 22:01:03 -08:00
Ted Nyman
58a9b56f4d Merge pull request #253 from Tass/master
Binary mime type override if languages.yml says so
2013-02-21 21:49:09 -08:00
Ted Nyman
3ceae6b5c1 Merge pull request #164 from michaelmior/master
Add Awk lexer
2013-02-21 21:41:56 -08:00
Ted Nyman
2612ea35bc Merge pull request #259 from afronski/master
Adding vendor files for django (admin_media) and SyntaxHightlighter JavaScript library
2013-02-21 21:28:37 -08:00
Ted Nyman
5bf2299461 Alphabetize python extensions 2013-02-20 16:38:55 -08:00
Kevin Sawicki
b26e4a7556 Add .gyp to Python extensions 2013-02-20 16:36:10 -08:00
Ted Nyman
c9bd6096b9 Merge pull request #364 from zacstewart/ragel-ruby
Add Ragel Ruby to languages
2013-02-20 16:27:32 -08:00
Ted Nyman
7d50697701 Merge pull request #390 from boredomist/patch-1
Add ASDF files to Common Lisp
2013-02-17 21:02:31 -08:00
Erik Price
e2314b57fe Alphabetize Common Lisp extensions. 2013-02-17 22:59:44 -06:00
Baptiste Fontaine
055743f886 More Forth samples. 2013-02-18 00:21:46 +01:00
Erik Price
152151bd44 Add ASDF files to Common Lisp 2013-02-17 13:50:48 -06:00
Ted Nyman
2431f2120c Merge pull request #388 from tinnet/master
Added Monkey Language
2013-02-16 18:08:29 -08:00
Tinnet Coronam
6a8e14dcf3 added monkey language (new in pygments 1.6) 2013-02-16 18:01:47 +01:00
Ted Nyman
a07d6f82ee Bump to 2.5.1 2013-02-15 18:48:32 -08:00
Ted Nyman
116d158336 Update samples.json 2013-02-15 18:48:05 -08:00
Ted Nyman
4863d16657 Bump to 2.5.0 2013-02-15 17:35:03 -08:00
Romain Deltour
da97f1af28 added XML lexer 2013-02-15 11:27:59 +01:00
Romain Deltour
6a03ea048b New language: XProc - an XML Pipeline language (W3C) 2013-02-15 11:22:35 +01:00
Romain Deltour
7924d0d8f8 XSLT as a programming language 2013-02-15 11:05:45 +01:00
Ted Nyman
781cd4069c Merge pull request #384 from ruv/more-forth-extenstions
Add .4th as alternate Forth file extension
2013-02-14 15:54:50 -08:00
ruv
505a361d98 '.4th' is also often used for the Forth language 2013-02-15 01:51:37 +04:00
Kevin Sawicki
c493c436da Register TextMate extensions as XML 2013-02-13 10:32:25 -08:00
Casey Reas
fb7c97c83f Samples for Processing language, changes to languages.yml 2013-02-13 09:12:30 -08:00
Sven Efftinge
b13001c5cc Added samples for Xtend 2013-02-13 08:33:22 +01:00
Ted Nyman
4e916ce94b Merge pull request #380 from github/tml
Add tapesty (.tml) to XML
2013-02-11 16:11:56 -08:00
Ted Nyman
1fad3be12a Add tapesty (.tml) to XML 2013-02-11 16:10:31 -08:00
Ted Nyman
6b688ba696 Merge pull request #251 from ptrv/add-scd-supercollider-extension
Add .scd extension to SuperCollider.
2013-02-11 16:05:53 -08:00
Ted Nyman
48d8919043 Merge pull request #359 from ntkme/master
Add fish support (.fish)
2013-02-11 16:03:46 -08:00
Richard Osborne
0479f72a93 Add detection for the XC programming language. 2013-02-09 13:13:21 +00:00
Michael Mior
1877c8c383 Add Awk lexer and sample 2013-02-08 14:19:26 -05:00
Evan Miller
5f6d74d849 Treat .opencl files as OpenCL 2013-02-07 18:24:36 -06:00
なつき
72ae6cd8ca Add fish support 2013-02-04 02:08:50 +08:00
Vincent Woo
8457f6397d Add extension support for Iced Coffeescript 2013-02-03 04:23:37 -08:00
Ted Nyman
24820ed935 Merge pull request #372 from github/more-shell-extensions
Add .bash and .tmux as alternate shell extensions
2013-02-01 15:00:41 -08:00
Ted Nyman
ad6947eeb4 Add .bash and .tmux as alternate shell extensions 2013-02-01 22:58:58 +00:00
Ted Nyman
9c27ec0313 Alphabetize verilog extension list 2013-02-01 22:30:01 +00:00
Ted Nyman
7a21d66877 Merge pull request #360 from skalnik/add-solid-support
Add Blob#solid? helper
2013-02-01 14:24:36 -08:00
Ted Nyman
7c1265cd2d Merge pull request #368 from cjdrake/master
Add Verilog (.vh) and SystemVerilog (.sv, .svh) filename extensions
2013-02-01 14:23:17 -08:00
Ted Nyman
6d73ae58b6 Regenerate samples.json 2013-02-01 22:17:44 +00:00
Ted Nyman
2d9d6f5669 Merge pull request #367 from moorepants/matlab-samples
Added matlab code samples.
2013-02-01 14:13:01 -08:00
Chris Drake
0a49062a02 Add Verilog/SystemVerilog filename extensions
Most Verilog files use the *.vh extension for header files.

Since the IEEE 1800-2009 SystemVerilog standard, it is common for
hardware and verification files written using the newer language
constructs to use the *.sv extension for design elements, and *.svh for
headers.
2013-01-30 22:02:31 -08:00
Jason Moore
04bab94c89 Removed copyrighted file. 2013-01-30 13:36:33 -08:00
Jason Moore
9bb230d7c8 Added matlab code samples.
All of these code samples currently are mis-identified in my repositories. I'm
donating them to the cause.
2013-01-30 13:12:45 -08:00
Ted Nyman
121f096173 Merge pull request #357 from uo-hrsys/patch-2
Add dita file extention to the XML type
2013-01-27 22:39:17 -08:00
Ted Nyman
c06f3fbc57 Merge pull request #358 from nicolasdanet/maxmsp
Added Max/MSP extensions in languages.yml
2013-01-27 22:31:21 -08:00
Ted Nyman
831f8a1f1f Merge pull request #361 from mattdbridges/patch-1
Adding homepage to gemspec
2013-01-27 22:19:34 -08:00
Zac Stewart
5e4623a44a Rename ragel ruby samples to match language name 2013-01-22 17:43:08 -05:00
Zac Stewart
1a60a00d3e Add Ragel Ruby to languages 2013-01-21 21:38:40 -05:00
Daniël van Eeden
08eef5f110 Update lib/linguist/languages.yml
Add .gv (GraphViz) file extension to DOT language.
2013-01-21 12:18:16 +01:00
Daniël van Eeden
0e2d3a2ac1 Update lib/linguist/languages.yml
Add DOT language: http://www.graphviz.org/content/dot-language
2013-01-20 14:06:36 +01:00
Matt Bridges
f852df397b Adding homepage to gemspec 2013-01-18 12:58:44 -06:00
Mike Skalnik
041ab041ae Add binary & ascii STLs and OBJs 2013-01-17 14:15:01 -08:00
nicolasdanet
ad9a57f8f9 Added Max/MSP extensions in languages.yml 2013-01-17 08:08:10 +01:00
Human Resources
b2bf4b0bd9 Add dita file extention to the XML type
2nd try. Add dita file extention to the XML markup.
DITA is the OASIS Darwin Information Typing Architecture used for technical documentation.
@see https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=dita
2013-01-16 10:21:09 -05:00
Kevin Sawicki
c625642845 Add .cson to CoffeeScript extensions 2013-01-15 09:44:04 -08:00
Naoki Orii
35e077ce86 Detect cython-generated files 2013-01-12 23:48:04 -05:00
herbertkoelman
7839459607 Merge branch 'master' of https://github.com/github/linguist 2013-01-11 00:43:24 +01:00
Illya
212be40710 .ui file extension added for XML language
Qt uses .ui files to store qtdesinger ui in xml
2013-01-10 02:06:40 +02:00
Stuart Halloway
dc8685f918 remove redundant specification 2013-01-09 08:18:10 -05:00
Ted Nyman
75072ae5cc README code fencing 2013-01-08 17:11:16 -08:00
Ted Nyman
3edd765076 Merge pull request #232 from strangewarp/patch-1
Add .pd_lua extension for Lua
2013-01-08 16:25:55 -08:00
Ted Nyman
1d66e593e2 Merge pull request #346 from github/remove-extra-extensions
Remove extra extensions
2013-01-08 16:14:49 -08:00
C.D. Madsen
b8bafd246e Add examples of .pd_lua files
Added examples of .pd_lua files, which create Lua objects that are
interpreted by PureData.
2013-01-08 15:50:31 -07:00
Ted Nyman
95c822457a Merge pull request #231 from bfontaine/master
Detection added for Forth & Omgrofl
2013-01-08 04:37:18 -08:00
Ted Nyman
26df1034ec Merge pull request #221 from fkg/master
Add new extensions to lib/linguist/languages.yml
2013-01-08 04:31:44 -08:00
Ted Nyman
c495d19540 Merge pull request #222 from tiwe-de/master
ignore Debian packaging
2013-01-08 04:23:17 -08:00
Ted Nyman
b405847573 Merge pull request #261 from justinclift/typofixes
Trivial typo fixes.
2013-01-08 04:21:28 -08:00
Ted Nyman
1abcb2edb7 Merge pull request #246 from leafo/master
Add MoonScript
2013-01-08 04:15:37 -08:00
Ted Nyman
e3669d2bb6 Keep bash alias 2013-01-07 19:08:29 -08:00
Ted Nyman
1b9a49e226 Add field for Ada 2013-01-07 19:04:56 -08:00
Ted Nyman
0ee716b1e9 Fix up batchfile extension 2013-01-07 19:03:40 -08:00
Ted Nyman
9469f481f3 Keep cmake extensions field 2013-01-07 19:00:44 -08:00
Ted Nyman
acc190bb04 Remove extensions if we already have the primary_extension 2013-01-07 18:59:18 -08:00
leaf corcoran
5953e22efb drop extra extension information for MoonScript 2013-01-07 18:57:36 -08:00
Ted Nyman
2c26486588 Merge pull request #324 from paulmillr/topics/livescript
Add LiveScript support.
2013-01-07 18:50:01 -08:00
leaf corcoran
e9d2c0cf28 add MoonScript sample 2013-01-07 18:49:02 -08:00
Paul Miller
a35c3ca739 Change LiveScript colour. 2013-01-08 04:43:54 +02:00
Ted Nyman
0ee2f17a61 Merge pull request #344 from BPScott/add-less
Add LESS support (.less)
2013-01-07 18:39:16 -08:00
Ben Scott
83ce189a82 Add LESS support (.less)
Cheating slightly as it uses the CSS lexer, as pygments currently does
not have a dedicated less lexer. But I figure language recognition and
90% percent correct syntax highlighting is better than neither.
2013-01-07 15:52:09 +00:00
Sven Efftinge
c97e112c72 Added Xtend (xtend-lang.org) to languages.yml 2013-01-06 19:39:56 +01:00
Paul Miller
eee124f6c6 Add LiveScript support. 2013-01-03 22:45:08 +02:00
Ted Nyman
adc9246f66 Merge branch 'lasso' 2013-01-02 14:12:58 -08:00
Steve Piercy
560555bcd8 sorted extensions for Lasso in lib/linguist/languages.yml 2013-01-02 14:09:09 -08:00
Steve Piercy
900a6bc2b8 add extensions for Lasso in lib/linguist/languages.yml 2013-01-02 14:09:09 -08:00
Steve Piercy
3613d09c38 add Ecl to lib/linguist/languages.yml 2013-01-02 14:09:08 -08:00
Ted Nyman
02749dd5cf Merge pull request #331 from github/latest-pygments
Pessimistic versioning for pygments.rb, and bump to latest
2013-01-02 13:56:31 -08:00
Ted Nyman
abda879d5a Merge pull request #325 from greghendershott/racket-lexer
Use new Racket lexer from pygments.rb 0.3.3
2013-01-02 13:48:49 -08:00
rofl0r
d2e909677b languages.yml: rearrange .dpr and .dfm 2013-01-02 15:27:28 +01:00
rofl0r
baa42daae8 languages.yml: add .dpr and .dfm extension to Delphi
.dfm is Delphi formulars
.dpr is the main source file, before any .pas.

if your Delphi app does not use any formulars or units
(e.g. console app), there is basically only one .dpr file.
2013-01-02 15:03:24 +01:00
Greg Hendershott
0b2465482a Update test: Racket language uses Racket lexer.
This is https://github.com/greghendershott/linguist/pull/1 from @tnm.
That pull request is onto my master branch, not my `racket-lexer`
topic branch. If there is a way to accept the pull request onto my
topic branch, I don't have time to figure it out right now. As a
result I'm making my own commit.
2013-01-02 07:46:58 -05:00
Ted Nyman
453a097c22 Pessimistic versioning for pygments, and bump to latest 2013-01-02 02:42:12 -08:00
Steve Piercy
4b26a56e64 Merge remote branch 'upstream/master' into lasso 2013-01-02 02:33:35 -08:00
Steve Piercy
c1d54db2cc One more try to pass Travis build. Crossing fingers... 2013-01-02 02:20:09 -08:00
Ted Nyman
bcaeb5d464 Fix readme link 2013-01-02 02:12:17 -08:00
Ted Nyman
d65bbfbe8d Update README.md 2013-01-02 01:28:37 -08:00
Steve Piercy
4c9b16aa08 Forcing another Travis build, now that GitHub's pygments.rb is at v 0.3.5. See https://github.com/github/linguist/pull/325#issuecomment-11802593 2013-01-02 01:23:31 -08:00
Greg Hendershott
8355f5031a Use new Racket lexer from pygments.rb 0.3.3
Racket files had been using the Scheme lexer.
2012-12-28 22:28:22 -05:00
Michael Hendricks
c794c6e24b Add a misclassified Prolog file
This Prolog file was misclassified as Perl.  I assume linguist
was confused because the file has many comments.  Nevertheless,
there are plenty of Prolog-distinguishing tokens such as `:-`,
`module`, `%%`, capitalized variables names, `foo/2`, etc.
2012-12-22 13:08:06 -08:00
Herbert Koelman
611b790a2c Merge remote-tracking branch 'upstream/master' 2012-12-20 22:21:20 +01:00
Stuart Halloway
78708df79d better: edn is generic 2012-12-18 09:16:59 -05:00
Stuart Halloway
54a4af75b5 (BFDD) build-system failure driven development 2012-12-18 08:59:39 -05:00
Stuart Halloway
72d698ebaa Datomic dtm files 2012-12-18 08:11:44 -05:00
Steve Piercy
209f9f0072 Force Travis run 2012-12-18 00:50:48 -08:00
Steve Piercy
93457746ac Merge remote branch 'upstream/master' into lasso 2012-12-18 00:49:00 -08:00
Joshua Peek
2696a9c5e7 Linguist 2.4.0 2012-12-10 09:47:42 -06:00
Joshua Peek
7c170972a0 Add shell samples 2012-12-10 09:45:54 -06:00
Joshua Peek
d00dfd82c1 Add samples for apache and nginx confs 2012-12-10 09:37:42 -06:00
Joshua Peek
9003139119 Can't have 2 same primary extensions 2012-12-10 09:30:55 -06:00
Joshua Peek
36e867ec76 Require newer pygments 2012-12-10 09:18:35 -06:00
Joshua Peek
cf4813979c Remove already defined extensions 2012-12-10 09:14:19 -06:00
Joshua Peek
7e12c3eff1 Update samples 2012-12-10 09:13:14 -06:00
Joshua Peek
281cc985bf Merge pull request #288 from wagenet/handlebars
Add Handlebars
2012-12-10 07:06:59 -08:00
Joshua Peek
dcc2be0781 Merge branch 'master' into dont-explode-on-invalid-shebang
Conflicts:
	lib/linguist/samples.json
	test/test_tokenizer.rb
2012-12-10 09:02:24 -06:00
Joshua Peek
161d076bfd Remove duplicate extension 2012-12-10 09:00:17 -06:00
Joshua Peek
09fbcc9a72 Merge pull request #298 from johanatan/master
Adds Elm.
2012-12-10 06:58:32 -08:00
Joshua Peek
ee2b92cf82 Merge pull request #307 from mislav/aliases
A couple of useful language aliases
2012-12-10 06:55:09 -08:00
Herbert Koelman
3511380c72 Added to vendor.yml the following dependencies related to automake and autoconf:
- (^|/)configure
- (^|/)configure.ac
- (^|/)config.guess
- (^|/)config.sub

Before changing:
[herbert@vps11071 linguist]$ bundle exec linguist ../atmi++/
75%  Shell
15%  C++
10%  C
0%   Perl

After changing:
54%  C++
37%  C
9%   Shell
0%   Perl
2012-12-10 00:07:20 +01:00
Steve Piercy
38736a2db9 force travis update 2012-12-07 02:33:23 -08:00
Mislav Marohnić
720914b290 add filename tests for shell config files 2012-12-06 23:54:22 +01:00
Daniel Micay
16f8e54ed7 detect common shell config files 2012-12-06 23:53:55 +01:00
Andy Li
50ecb63058 haXe is now "Haxe"
According to https://groups.google.com/forum/#!topic/haxelang/O7PB-ZrX4i4/discussion

The lexer in Pygments is not renamed yet, so just stay as is at the moment.
2012-12-06 23:42:04 +01:00
Tobin Fricke
586650f01c add .C and .H as file extensions for C++
"C" and "H" are two file extensions recognized by gcc as indicating C++
source code. The full list may be found here:
http://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Overall-Options.html#index-file-name-suffix-71
2012-12-06 23:28:32 +01:00
Mislav Marohnić
ae753e6e88 add Nginx language 2012-12-06 23:25:54 +01:00
Mislav Marohnić
04a2845e91 add ApacheConf language
Recognizes httpd/apache2.conf and .htaccess files
2012-12-06 23:25:29 +01:00
Mislav Marohnić
acb20d95ca "coffee-script" ☞ CoffeeScript 2012-12-06 23:04:53 +01:00
Steve Piercy
5a9ef5eac2 Merge remote branch 'upstream/master' into lasso
Conflicts:
	lib/linguist/languages.yml
2012-12-05 12:55:30 -08:00
Steve Piercy
287e1b855d Forcing travis check 2012-12-05 12:30:06 -08:00
Mislav Marohnić
d3ebe1844d add HTTP language
Useful for `curl -i` dumps. Had to add primary_extension although this
data is usually not saved in files, but shown as code blocks.
2012-12-04 16:26:11 +01:00
Mislav Marohnić
fc8492e8f7 "yml" ☞ YAML 2012-12-04 16:11:52 +01:00
Mislav Marohnić
ff5ffd0482 "rss/xsd/xsl/wsdl" ☞ XML 2012-12-04 16:11:52 +01:00
Mislav Marohnić
50db6d0150 "latex" ☞ TeX 2012-12-04 16:11:52 +01:00
Mislav Marohnić
2e0b854428 "obj-j" ☞ Objective-J 2012-12-04 16:11:52 +01:00
Mislav Marohnić
1dfb44cff7 "obj-c/objc" ☞ Objective-C 2012-12-04 16:11:51 +01:00
Mislav Marohnić
0a8fad2040 "make" ☞ Makefile 2012-12-04 16:11:51 +01:00
Mislav Marohnić
9b97d3ac8a "erb" ☞ RHTML 2012-12-04 16:11:51 +01:00
Mislav Marohnić
26e78c0c1b "xhtml" ☞ HTML 2012-12-04 16:11:51 +01:00
Joshua Peek
b036e8d3c2 Merge pull request #305 from DominikTo/php-cli
Fixed detection of PHP CLI scripts (added samples)
2012-12-02 07:54:14 -08:00
Dominik Tobschall
f84a904ad8 fixed typo 2012-12-02 14:11:04 +01:00
Dominik Tobschall
b1684037d6 added php cli samples 2012-12-02 14:05:52 +01:00
Andy Li
7c9e973082 Do not detect language if it is a binary file. 2012-11-26 21:54:43 +08:00
Jonathan Leonard
1c85d0b38a Added Elm. 2012-11-25 20:39:58 -08:00
Michael Ding
97c998946b determine image with downcase extname 2012-11-22 20:30:59 +08:00
Michael Ding
8529c90a4d use downcase string for extname 2012-11-22 17:14:45 +08:00
Ben Lavender
ec3434cf1d Don't explode on invalid shebang 2012-11-18 20:56:06 -06:00
Peter Wagenet
0e20f6d454 Added Handlebars language 2012-11-12 17:16:18 -08:00
Joshua Scoggins
696573b14c Fixed an issue where the lexer was not explicitly stated for CLIPS 2012-10-22 00:00:08 -07:00
Joshua Scoggins
fbb31f018c Added support for the CLIPS programming language
CLIPS or C language integrated production system is a tool for writing expert
systems.
2012-10-21 23:46:09 -07:00
Joshua Peek
d92d208a45 Fix tests for pygments.rb 0.3.x 2012-10-07 15:39:02 -05:00
Joshua Peek
b798e28bfb No warnings 2012-10-07 15:37:09 -05:00
Joshua Peek
ebd6077cd7 Add wrap flag to text languages 2012-10-07 15:34:13 -05:00
Joshua Peek
9e9500dfa9 Linguist 2.3.4 2012-09-24 10:54:17 -05:00
Joshua Peek
04cc100fba Rebuild samples db 2012-09-24 10:52:05 -05:00
Joshua Peek
31e33f99f2 Ensure lang is skipped on any binary file 2012-09-24 10:51:39 -05:00
Joshua Peek
7c51b90586 Skip empty sample 2012-09-24 10:50:49 -05:00
Joshua Peek
2b36f73da6 Some comments are triggering charlock binary 2012-09-24 10:48:22 -05:00
Joshua Peek
d96dd473b8 Rebuild samples db 2012-09-24 10:12:18 -05:00
Joshua Peek
f9066ffb7b Sort exts and filenames 2012-09-24 10:12:05 -05:00
Joshua Peek
945941d529 Update samples db 2012-09-24 10:07:58 -05:00
Joshua Peek
10e875e899 Print out samples db diffs 2012-09-24 10:07:08 -05:00
Justin Clift
7f87d22d78 Trivial typo fixes. 2012-09-22 20:32:56 +10:00
Wojciech Gawroński
d890b73c2f Adding vendor files for SyntaxHighlighter and django (admin_media directory). 2012-09-21 13:57:08 +02:00
Justin Palmer
d24e5c938e sample directory needs uppercase E 2012-09-20 15:23:58 -07:00
Justin Palmer
aa069a336f add color to ecl language 2012-09-20 15:16:06 -07:00
Justin Palmer
662fc2ee9d Merge remote-tracking branch 'rengolin/ecl' 2012-09-20 15:07:41 -07:00
Sean Upton
eca1f61dab Merge branch 'master' of github.com:seanupton/linguist 2012-09-18 14:28:01 -06:00
Sean Upton
4126d0e445 Added extensions to languages.yml for XML highlighting of Zope Page Templates (.pt) and Zope Configuration Markup Language (.zcml). 2012-09-18 14:27:36 -06:00
Sean Upton
1d3cffc6dd Added extensions to languages.xml for XML highlighting of Zope Page Templates (.pt) and Zope Configuration Markup Language (.zcml). 2012-09-18 14:24:35 -06:00
Simon Hafner
675d0865da fixed typo 2012-09-13 14:56:44 -05:00
Simon Hafner
b954d22eba Override for binary mime type based on languages.yml
If the extension already exists in languages.yml, it's probably not a
binary, but code.
2012-09-13 14:55:31 -05:00
Ryan Tomayko
567cd6ef68 Merge pull request #250 from github/mac-format
Handle Mac Format when splitting lines
2012-09-11 14:17:21 -07:00
ptrv
01981c310d Add .scd extension to SuperCollider. 2012-09-11 00:26:54 +02:00
Ryan Tomayko
887a050db9 Only search the first 4K chars for \r 2012-09-10 01:56:08 -07:00
Ryan Tomayko
bda895eaae Test Mac Format detection and line splitting 2012-09-10 01:52:30 -07:00
Ryan Tomayko
2e49c06f47 Handle Mac Format when splitting lines 2012-09-10 01:05:48 -07:00
Joshua Peek
ae137847b4 Linguist 2.3.3 2012-09-04 09:32:21 -05:00
Scott J. Goldman
5443dc50a3 Merge pull request #247 from github/check-size-first
When testing if a blob is indexable or safe to colorize, check size first
2012-09-02 00:09:51 -07:00
Scott J. Goldman
fc435a2541 Linguist 2.3.2 2012-09-02 00:08:37 -07:00
Scott J. Goldman
04394750e7 When testing if a blob is safe to colorize, check size first
Similar to e415a13
2012-09-02 00:08:37 -07:00
Scott J. Goldman
e415a1351b When testing if a blob is indexable, check size first
Otherwise, charlock_holmes will allocate another large binary
buffer for testing the encoding, which is a problem if the binary
blob is many hundreds of MB large. It'll just fail and crash ruby.
2012-08-31 22:47:19 -07:00
leaf corcoran
0ff50a6b02 add MoonScript (again) 2012-08-29 21:18:50 -07:00
Joshua Peek
6ec907a915 Merge pull request #245 from jcazevedo/master
Add Shell sample
2012-08-28 10:55:11 -07:00
Joao Azevedo
1f55f01fa9 Add Shell sample 2012-08-28 18:01:46 +01:00
Joshua Peek
5d79b88875 Linguist 2.3.1 2012-08-27 11:34:55 -05:00
Joshua Peek
458890b4b9 Add C++ sample 2012-08-27 11:33:28 -05:00
Joshua Peek
89267f792d Rebuild samples db 2012-08-27 11:30:44 -05:00
Joshua Peek
b183fcca05 Only read up to 100KB 2012-08-27 11:30:38 -05:00
Joshua Peek
684a57dbc0 Add another C sample 2012-08-27 11:21:57 -05:00
db0
e857b23429 .eliom extension in OCaml extensions properly sorted 2012-08-27 12:16:47 +02:00
db0
09c76246f6 Add .eliom extension for Ocsigen (OCaml web framework) 2012-08-27 11:41:43 +02:00
Joshua Peek
400086a5c8 Add more C samples
Closes #237
2012-08-23 13:38:16 -05:00
Joshua Peek
38b966a554 Linguist 2.3.0 2012-08-20 11:50:35 -05:00
Joshua Peek
31b0df67b7 Require newer mime-type gem 2012-08-20 11:42:04 -05:00
Joshua Peek
cfe496e9fc Drop mime type module
Closes #206
2012-08-20 11:40:32 -05:00
Joshua Peek
b85aeaad3e Inline mime type lookup into blob helper 2012-08-20 11:33:16 -05:00
Joshua Peek
64f3509222 Remove other mime type hacks 2012-08-20 11:29:22 -05:00
Joshua Peek
f8df871d85 Only double check binary mime type when lazy loading blob 2012-08-20 11:20:37 -05:00
Joshua Peek
620150d188 Only double check with binary mime type when lazy loading blob 2012-08-20 11:14:45 -05:00
Joshua Peek
630dca515a Trim down mime type overrides that are old or now pushed upstream
Related #206
2012-08-20 11:11:42 -05:00
Joshua Peek
d2de997fcc Add more Prolog samples
Closes #233
2012-08-20 10:48:36 -05:00
Joshua Peek
b8711f8ccf Merge pull request #228 from github/cpp-samples
Add more C++ samples
2012-08-20 08:36:10 -07:00
Joshua Peek
34aaab19b2 Rebuild samples db 2012-08-20 10:34:37 -05:00
Joshua Peek
220108857c Skip emiting comment tokens 2012-08-20 10:34:07 -05:00
Steve Piercy
31d6b110d2 Add more samples with listed extensions. Remove extension specification. Clarify comments at top of languages.yml. 2012-08-19 16:49:20 -07:00
Steve Piercy
29a0db402c Lasso lexer name added 2012-08-19 06:47:02 -07:00
Steve Piercy
21a7fe9f12 Lasso extentions sorted 2012-08-19 06:40:15 -07:00
Steve Piercy
3b558db518 adding Lasso language and sample files 2012-08-19 06:29:16 -07:00
C.D. Madsen
44066fbb0b Add .pd_lua extension for Lua
.pd_lua is the required extension for any Lua files written to directly communicate with Puredata, via the pdlua library.
2012-08-18 06:14:41 -06:00
Baptiste Fontaine
0c2794e9de Forth extensions sorted 2012-08-17 18:09:06 +02:00
Baptiste Fontaine
69a9ac9366 Forth & Omgrofl lexers set to Text Only 2012-08-17 18:03:09 +02:00
Baptiste Fontaine
59e199d0c3 Detection added for Forth & Omgrofl 2012-08-17 16:52:00 +02:00
Joshua Peek
657adaabec Add more C++ samples
Closes #225
2012-08-15 11:57:55 -07:00
Joshua Peek
a41f40a30e Remove extname from bin out 2012-08-15 09:31:01 -07:00
Timo Weingärtner
a572b467b4 testcase for 90f1ba9 2012-08-15 02:11:15 +03:00
Timo Weingärtner
90f1ba95a4 lib/linguist/vendor.yml: ignore Debian packaging
This should prevent files like debian/$package.cron.d from being recognized as D source.
2012-08-15 02:07:53 +03:00
fkg
286c8a1b4a Added .ccxml, .grxml, .scxml, .vxml to the XML syntax group 2012-08-14 12:00:07 -07:00
Joshua Peek
080cd097ba Merge branch 'brcooley-master' 2012-08-13 18:18:04 -07:00
Joshua Peek
866e446dbe Rebuild samples db 2012-08-13 18:17:47 -07:00
Joshua Peek
897f39083d Rename to magic .script! ext 2012-08-13 18:17:44 -07:00
brc
f8a7d11808 Adding extensionless script to Shell samples 2012-08-13 18:07:28 -07:00
Oxan van Leeuwen
0f006af583 Improve detection for ASP.NET validation jQuery plugins 2012-08-10 01:09:54 +02:00
Oxan van Leeuwen
2bbf92d5f8 Update vendor.yml to include jQuery UI 2012-08-10 01:04:29 +02:00
Joshua Peek
ed70d29943 Linguist 2.2.1 2012-08-07 10:39:29 -05:00
Joshua Peek
dbb089f610 Fix nil data passed to generated 2012-08-07 10:39:08 -05:00
Joshua Peek
23357736b1 Merge branch 'kassi-master' 2012-08-06 10:23:12 -05:00
Joshua Peek
a35fa88f50 Add more applescript samples 2012-08-06 10:22:38 -05:00
Joshua Peek
a13f246e4f Update samples db 2012-08-06 09:54:40 -05:00
Karsten Silkenbäumer
f55e53c650 Removed scpt sample due to binary file format (extension) 2012-08-06 16:49:09 +02:00
Karsten Silkenbäumer
b6a7b41783 Change primary extension for applescript 2012-08-05 23:51:24 +02:00
Karsten Silkenbäumer
704a3e03d6 Add type programming to applescript 2012-08-05 23:48:26 +02:00
Joshua Peek
566eaefda9 Linguist 2.2.0 2012-08-03 16:47:34 -05:00
Joshua Peek
047d23862e Still index .txt 2012-08-03 16:34:53 -05:00
Joshua Peek
804e23e995 Extract seperate language detection method 2012-08-03 16:03:06 -05:00
Joshua Peek
41b7d13aa7 Extract generated blob check into its own module 2012-08-03 15:47:50 -05:00
Joshua Peek
4531103033 Forgot to move hidden samples to the correct dir 2012-08-03 15:25:38 -05:00
Joshua Peek
96267e8696 Sort test assertion 2012-08-03 15:11:30 -05:00
Joshua Peek
16a67cb852 Move shebang detection into classifier
Fixes #203
2012-08-03 15:07:36 -05:00
Joshua Peek
fbbaff09cd Stop treating text as a language 2012-08-03 13:55:51 -05:00
Joshua Peek
6014bd015e Change find_by_filename api to return all matching languages 2012-08-03 13:53:12 -05:00
Joshua Peek
4a06d2ea7e Merge branch 'jeanSapristi-master' 2012-07-24 11:51:54 -05:00
Joshua Peek
22efcf7aff Update samples db 2012-07-24 11:51:37 -05:00
Joshua Peek
e5d302459f Fix tokenzing empty strings 2012-07-24 11:49:29 -05:00
Joshua Peek
7aac87681b Add brackets to tokens 2012-07-24 11:28:46 -05:00
Joshua Peek
53300ca581 Add brackets to tokens 2012-07-24 11:28:27 -05:00
Joshua Peek
52833b58d5 Rebuild samples db 2012-07-24 11:23:42 -05:00
Joshua Peek
f5705eaf38 Parse float tokens 2012-07-24 11:23:06 -05:00
Joshua Peek
e2a91bba3e json extension is provided by samples 2012-07-24 11:12:57 -05:00
Joshua Peek
be1340bafc Add a few more json samples 2012-07-24 11:12:33 -05:00
Joshua Peek
9777798cf7 Move max json into json samples 2012-07-24 11:10:57 -05:00
Joshua Peek
b7c4d96e5f Max extensions are already covered by samples 2012-07-24 11:05:08 -05:00
Joshua Peek
e816a0a1b1 Update samples db 2012-07-24 11:04:24 -05:00
Joshua Peek
1bc9f555e6 Fix max samples dir 2012-07-24 11:03:34 -05:00
Joshua Peek
059f661eb6 Rename Max/MSP to Max 2012-07-24 11:03:09 -05:00
jeanSapristi
efbcd51ff6 Add samples for MaxMSP 2012-07-24 17:40:04 +02:00
Nicolas Danet
9f782fc261 Update lib/linguist/languages.yml 2012-07-24 12:25:03 +03:00
Nicolas Danet
5c2bdfd733 Add extensions for Max/MSP 2012-07-24 09:03:06 +03:00
Joshua Peek
ade20e4b46 Linguist 2.1.2 2012-07-23 17:20:36 -05:00
Joshua Peek
aedbe1d5b7 Rebuild samples db 2012-07-23 17:20:05 -05:00
Joshua Peek
65d05e02c9 name can be nil 2012-07-23 17:19:11 -05:00
Renato Golin
da6cf8dbb4 Add ECL programming language and test 2012-07-12 09:09:32 +01:00
Ian M. Jones
a41631d9fa Added REALbasic language. 2012-06-06 23:37:47 +02:00
Johan Sundström
645f4d6194 Added detection for the Pike language:
http://pike.ida.liu.se/
2012-06-06 00:02:47 -07:00
Laurent Parenteau
46cde87c09 Fixed M lexer name. Merged with upstream's latest changes. 2012-05-22 13:43:47 -04:00
Laurent Parenteau
91364a9769 Improved comment. 2012-05-14 09:56:00 -04:00
Laurent Parenteau
23b6b4c499 Use Common Lisp lexer for M syntax highlighting, which gives pretty good results. 2012-04-27 10:09:37 -04:00
Laurent Parenteau
1e34faa920 Improved M detection to be more specific. 2012-03-28 20:30:24 -04:00
Laurent Parenteau
e0190a5a6e Added detection for the new M (aka MUMPS) language. 2012-03-27 11:47:52 -04:00
685 changed files with 222733 additions and 9504 deletions

2
.gitignore vendored
View File

@@ -1 +1,3 @@
Gemfile.lock
.bundle/
vendor/

View File

@@ -1,8 +1,9 @@
before_install: sudo apt-get install libicu-dev -y
before_install:
- sudo apt-get install libicu-dev -y
- gem update --system 2.1.11
rvm:
- 1.8.7
- 1.9.2
- 1.9.3
- ree
- 2.0.0
- 2.1.1
notifications:
disabled: true

View File

@@ -1,2 +1,2 @@
source :rubygems
source 'https://rubygems.org'
gemspec

View File

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

122
README.md
View File

@@ -1,22 +1,24 @@
# Linguist
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.
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.
## Features
### Language detection
Linguist defines the list of all languages known to GitHub in a [yaml file](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml). In order for a file to be highlighted, a language and lexer must be defined there.
Linguist defines a list of all languages known to GitHub in a [yaml file](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml). In order for a file to be highlighted, a language and a lexer must be defined there.
Most languages are detected by their file extension. This is the fastest and most common situation.
Most languages are detected by their file extension. For disambiguating between files with common extensions, we first apply some common-sense heuristics to pick out obvious languages. After that, we use a
[statistical
classifier](https://github.com/github/linguist/blob/master/lib/linguist/classifier.rb).
This process can help us tell the difference between, for example, `.h` files which could be either C, C++, or Obj-C.
For disambiguating between files with common extensions, we use a [bayesian classifier](https://github.com/github/linguist/blob/master/lib/linguist/classifier.rb). For an example, this helps us tell the difference between `.h` files which could be either C, C++, or Obj-C.
```ruby
In the actual GitHub app we deal with `Grit::Blob` objects. For testing, there is a simple `FileBlob` API.
Linguist::FileBlob.new("lib/linguist.rb").language.name #=> "Ruby"
Linguist::FileBlob.new("lib/linguist.rb").language.name #=> "Ruby"
Linguist::FileBlob.new("bin/linguist").language.name #=> "Ruby"
Linguist::FileBlob.new("bin/linguist").language.name #=> "Ruby"
```
See [lib/linguist/language.rb](https://github.com/github/linguist/blob/master/lib/linguist/language.rb) and [lib/linguist/languages.yml](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml).
@@ -24,39 +26,59 @@ See [lib/linguist/language.rb](https://github.com/github/linguist/blob/master/li
The actual syntax highlighting is handled by our Pygments wrapper, [pygments.rb](https://github.com/tmm1/pygments.rb). It also provides a [Lexer abstraction](https://github.com/tmm1/pygments.rb/blob/master/lib/pygments/lexer.rb) that determines which highlighter should be used on a file.
We typically run on a prerelease version of Pygments, [pygments.rb](https://github.com/tmm1/pygments.rb), to get early access to new lexers. The [lexers.yml](https://github.com/github/linguist/blob/master/lib/linguist/lexers.yml) file is a dump of the lexers we have available on our server.
### Stats
The Language Graph you see on every repository is built by aggregating the languages of all repo's blobs. The top language in the graph determines the project's primary language. Collectively, these stats make up the [Top Languages](https://github.com/languages) page.
The Language stats bar that you see on every repository is built by aggregating the languages of each file in that repository. The top language in the graph determines the project's primary language.
The repository stats API can be used on a directory:
The repository stats API, accessed through `#languages`, can be used on a directory:
project = Linguist::Repository.from_directory(".")
project.language.name #=> "Ruby"
project.languages #=> { "Ruby" => 0.98,
"Shell" => 0.02 }
```ruby
project = Linguist::Repository.from_directory(".")
project.language.name #=> "Ruby"
project.languages #=> { "Ruby" => 0.98, "Shell" => 0.02 }
```
These stats are also printed out by the binary. Try running `linguist` on itself:
These stats are also printed out by the `linguist` binary. You can use the
`--breakdown` flag, and the binary will also output the breakdown of files by language.
$ bundle exec linguist lib/
100% Ruby
You can try running `linguist` on the `lib/` directory in this repository itself:
$ bundle exec linguist lib/ --breakdown
100.00% Ruby
Ruby:
linguist/blob_helper.rb
linguist/classifier.rb
linguist/file_blob.rb
linguist/generated.rb
linguist/heuristics.rb
linguist/language.rb
linguist/md5.rb
linguist/repository.rb
linguist/samples.rb
linguist/tokenizer.rb
linguist.rb
#### Ignore vendored files
Checking other code 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. We are able to identify some of these files and directories and exclude them.
Linguist::FileBlob.new("vendor/plugins/foo.rb").vendored? # => true
```ruby
Linguist::FileBlob.new("vendor/plugins/foo.rb").vendored? # => true
```
See [Linguist::BlobHelper#vendored?](https://github.com/github/linguist/blob/master/lib/linguist/blob_helper.rb) and [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml).
#### Generated file detection
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 extra bonus, these files are suppressed in Diffs.
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 extra bonus, these files are suppressed in diffs.
Linguist::FileBlob.new("underscore.min.js").generated? # => true
```ruby
Linguist::FileBlob.new("underscore.min.js").generated? # => true
```
See [Linguist::BlobHelper#generated?](https://github.com/github/linguist/blob/master/lib/linguist/blob_helper.rb).
See [Linguist::Generated#generated?](https://github.com/github/linguist/blob/master/lib/linguist/generated.rb).
## Installation
@@ -74,12 +96,60 @@ To run the tests:
## Contributing
The majority of patches won't need to touch any Ruby code at all. The [master language list](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml) is just a configuration file.
The majority of contributions won't need to touch any Ruby code at all. The [master language list](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml) is just a YAML configuration file.
We try to only add languages once they have some usage on GitHub, so please note in-the-wild usage examples in your pull request.
Almost all bug fixes or new language additions should come with some additional code samples. Just drop them under [`samples/`](https://github.com/github/linguist/tree/master/samples) in the correct subdirectory and our test suite will automatically test them. In most cases you shouldn't need to add any new assertions.
To update the `samples.json` after adding new files to [`samples/`](https://github.com/github/linguist/tree/master/samples):
bundle exec rake samples
### A note on language extensions
Linguist has a number of methods available to it for identifying the language of a particular file. The initial lookup is based upon the extension of the file, possible file extensions are defined in an array called `extensions`. Take a look at this example for example for `Perl`:
```
Perl:
type: programming
ace_mode: perl
color: "#0298c3"
extensions:
- .pl
- .PL
- .perl
- .ph
- .plx
- .pm
- .pod
- .psgi
interpreters:
- perl
```
Any of the extensions defined are valid but the first in this array should be the most popular.
### Testing
Sometimes getting the tests running can be to much work especially if you don't have much Ruby experience. Its okay, be lazy and let our build bot [Travis](http://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away.
Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](http://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away.
Heres our current build status, which is hopefully green: [![Build Status](https://secure.travis-ci.org/github/linguist.png?branch=master)](http://travis-ci.org/github/linguist)
Here's our current build status, which is hopefully green: [![Build Status](https://secure.travis-ci.org/github/linguist.png?branch=master)](http://travis-ci.org/github/linguist)
### 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: `bundle install`
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`. For example, [like this](https://github.com/github/linguist/commit/8d2ea90a5ba3b2fe6e1508b7155aa4632eea2985).
0. Make a PR to github/linguist. For example, [#1238](https://github.com/github/linguist/pull/1238).
0. Build a local gem: `gem build github-linguist.gemspec`
0. Testing:
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-2.10.12.gem`

View File

@@ -1,11 +1,11 @@
require 'json'
require 'rake/clean'
require 'rake/testtask'
require 'yaml'
task :default => :test
Rake::TestTask.new do |t|
t.warning = true
end
Rake::TestTask.new
task :samples do
require 'linguist/samples'
@@ -15,6 +15,13 @@ task :samples do
File.open('lib/linguist/samples.json', 'w') { |io| io.write json }
end
task :build_gem do
languages = YAML.load_file("lib/linguist/languages.yml")
File.write("lib/linguist/languages.json", JSON.dump(languages))
`gem build github-linguist.gemspec`
File.delete("lib/linguist/languages.json")
end
namespace :classifier do
LIMIT = 1_000

View File

@@ -1,15 +1,39 @@
#!/usr/bin/env ruby
# linguist — detect language type for a file, or, given a directory, determine language breakdown
# usage: linguist <path> [<--breakdown>]
require 'linguist/file_blob'
require 'linguist/repository'
path = ARGV[0] || Dir.pwd
# special case if not given a directory but still given the --breakdown option
if path == "--breakdown"
path = Dir.pwd
breakdown = true
end
ARGV.shift
breakdown = true if ARGV[0] == "--breakdown"
if File.directory?(path)
repo = Linguist::Repository.from_directory(path)
repo.languages.sort_by { |_, size| size }.reverse.each do |language, size|
percentage = ((size / repo.size.to_f) * 100).round
puts "%-4s %s" % ["#{percentage}%", language]
percentage = ((size / repo.size.to_f) * 100)
percentage = sprintf '%.2f' % percentage
puts "%-7s %s" % ["#{percentage}%", language]
end
if breakdown
puts
file_breakdown = repo.breakdown_by_file
file_breakdown.each do |lang, files|
puts "#{lang}:"
files.each do |file|
puts file
end
puts
end
end
elsif File.file?(path)
blob = Linguist::FileBlob.new(path, Dir.pwd)
@@ -23,7 +47,6 @@ elsif File.file?(path)
puts "#{blob.name}: #{blob.loc} lines (#{blob.sloc} sloc)"
puts " type: #{type}"
puts " extension: #{blob.pathname.extname}"
puts " mime type: #{blob.mime_type}"
puts " language: #{blob.language}"

View File

@@ -1,18 +1,25 @@
require File.expand_path('../lib/linguist/version', __FILE__)
Gem::Specification.new do |s|
s.name = 'github-linguist'
s.version = '2.1.1'
s.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.'
s.authors = "GitHub"
s.authors = "GitHub"
s.homepage = "https://github.com/github/linguist"
s.license = "MIT"
s.files = Dir['lib/**/*']
s.executables << 'linguist'
s.add_dependency 'charlock_holmes', '~> 0.6.6'
s.add_dependency 'escape_utils', '~> 0.2.3'
s.add_dependency 'mime-types', '~> 1.18'
s.add_dependency 'pygments.rb', '>= 0.2.13'
s.add_dependency 'charlock_holmes', '~> 0.7.3'
s.add_dependency 'escape_utils', '~> 1.0.1'
s.add_dependency 'mime-types', '~> 1.19'
s.add_dependency 'pygments.rb', '~> 0.6.0'
s.add_development_dependency 'json'
s.add_development_dependency 'mocha'
s.add_development_dependency 'rake'
s.add_development_dependency 'yajl-ruby'
end

View File

@@ -1,5 +1,7 @@
require 'linguist/blob_helper'
require 'linguist/generated'
require 'linguist/heuristics'
require 'linguist/language'
require 'linguist/mime'
require 'linguist/repository'
require 'linguist/samples'
require 'linguist/version'

View File

@@ -1,14 +1,19 @@
require 'linguist/classifier'
require 'linguist/generated'
require 'linguist/language'
require 'linguist/mime'
require 'linguist/samples'
require 'charlock_holmes'
require 'escape_utils'
require 'mime/types'
require 'pygments'
require 'yaml'
module Linguist
# DEPRECATED Avoid mixing into Blob classes. Prefer functional interfaces
# like `Language.detect` over `Blob#language`. Functions are much easier to
# cache and compose.
#
# Avoid adding additional bloat to this module.
#
# BlobHelper is a mixin for Blobish classes that respond to "name",
# "data" and "size" such as Grit::Blob.
module BlobHelper
@@ -21,7 +26,23 @@ module Linguist
#
# Returns a String
def extname
File.extname(name)
File.extname(name.to_s)
end
# Internal: Lookup mime type for extension.
#
# Returns a MIME::Type
def _mime_type
if defined? @_mime_type
@_mime_type
else
guesses = ::MIME::Types.type_for(extname.to_s)
# Prefer text mime types over binary
@_mime_type = guesses.detect { |type| type.ascii? } ||
# Otherwise use the first guess
guesses.first
end
end
# Public: Get the actual blob mime type
@@ -33,7 +54,23 @@ module Linguist
#
# Returns a mime type String.
def mime_type
@mime_type ||= Mime.mime_for(extname)
_mime_type ? _mime_type.to_s : 'text/plain'
end
# Internal: Is the blob binary according to its mime type
#
# Return true or false
def binary_mime_type?
_mime_type ? _mime_type.binary? : false
end
# Internal: Is the blob binary according to its mime type,
# overriding it if we have better data from the languages.yml
# database.
#
# Return true or false
def likely_binary?
binary_mime_type? && !Language.find_by_filename(name)
end
# Public: Get the Content-Type header value
@@ -75,6 +112,12 @@ module Linguist
end
end
def ruby_encoding
if hash = detect_encoding
hash[:ruby_encoding]
end
end
# Try to guess the encoding
#
# Returns: a Hash, with :encoding, :confidence, :type
@@ -84,15 +127,6 @@ module Linguist
@detect_encoding ||= CharlockHolmes::EncodingDetector.new.detect(data) if data
end
# Public: Is the blob binary according to its mime type
#
# Return true or false
def binary_mime_type?
if mime_type = Mime.lookup_mime_type_for(extname)
mime_type.binary?
end
end
# Public: Is the blob binary?
#
# Return true or false
@@ -126,16 +160,28 @@ module Linguist
#
# Return true or false
def image?
['.png', '.jpg', '.jpeg', '.gif'].include?(extname)
['.png', '.jpg', '.jpeg', '.gif'].include?(extname.downcase)
end
# Public: Is the blob likely to have a shebang?
# Public: Is the blob a supported 3D model format?
#
# Return true or false
def shebang_extname?
extname.empty? &&
mode &&
(mode.to_i(8) & 05) == 05
def solid?
extname.downcase == '.stl'
end
# Public: Is this blob a CSV file?
#
# Return true or false
def csv?
text? && extname.downcase == '.csv'
end
# Public: Is the blob a PDF?
#
# Return true or false
def pdf?
extname.downcase == '.pdf'
end
MEGABYTE = 1024 * 1024
@@ -149,14 +195,13 @@ module Linguist
# Public: Is the blob safe to colorize?
#
# We use Pygments.rb for syntax highlighting blobs, which
# has some quirks and also is essentially 'un-killable' via
# normal timeout. To workaround this we try to
# carefully handling Pygments.rb anything it can't handle.
# We use Pygments for syntax highlighting blobs. Pygments
# can be too slow for very large blobs or for certain
# corner-case blobs.
#
# Return true or false
def safe_to_colorize?
text? && !large? && !high_ratio_of_long_lines?
!large? && text? && !high_ratio_of_long_lines?
end
# Internal: Does the blob have a ratio of long lines?
@@ -200,7 +245,36 @@ module Linguist
#
# Returns an Array of lines
def lines
@lines ||= (viewable? && data) ? data.split("\n", -1) : []
@lines ||=
if viewable? && data
# `data` is usually encoded as ASCII-8BIT even when the content has
# been detected as a different encoding. However, we are not allowed
# to change the encoding of `data` because we've made the implicit
# guarantee that each entry in `lines` is encoded the same way as
# `data`.
#
# Instead, we re-encode each possible newline sequence as the
# detected encoding, then force them back to the encoding of `data`
# (usually a binary encoding like ASCII-8BIT). This means that the
# byte sequence will match how newlines are likely encoded in the
# file, but we don't have to change the encoding of `data` as far as
# Ruby is concerned. This allows us to correctly parse out each line
# without changing the encoding of `data`, and
# 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)
rescue Encoding::ConverterNotFoundError
# The data is not splittable in the detected encoding. Assume it's
# one big line.
[data]
end
else
[]
end
end
# Public: Get number of lines of code
@@ -221,171 +295,16 @@ module Linguist
lines.grep(/\S/).size
end
# Internal: Compute average line length.
#
# Returns Integer.
def average_line_length
if lines.any?
lines.inject(0) { |n, l| n += l.length } / lines.length
else
0
end
end
# Public: Is the blob a generated file?
#
# Generated source code is supressed in diffs and is ignored by
# Generated source code is suppressed in diffs and is ignored by
# language statistics.
#
# Requires Blob#data
#
# Includes:
# - XCode project XML files
# - Minified JavaScript
# - Compiled CoffeeScript
# - PEG.js-generated parsers
#
# Please add additional test coverage to
# `test/test_blob.rb#test_generated` if you make any changes.
# May load Blob#data
#
# Return true or false
def generated?
if name == 'Gemfile.lock' || minified_javascript? || compiled_coffeescript? ||
xcode_project_file? || generated_net_docfile? || generated_parser?
true
else
false
end
end
# Internal: Is the blob an XCode project file?
#
# Generated if the file extension is an XCode project
# file extension.
#
# Returns true of false.
def xcode_project_file?
['.xib', '.nib', '.storyboard', '.pbxproj', '.xcworkspacedata', '.xcuserstate'].include?(extname)
end
# Internal: Is the blob minified JS?
#
# Consider JS minified if the average line length is
# greater then 100c.
#
# Returns true or false.
def minified_javascript?
return unless extname == '.js'
average_line_length > 100
end
# Internal: Is the blob of JS a parser generated by PEG.js?
#
# Requires Blob#data
#
# PEG.js-generated parsers are not meant to be consumed by humans.
#
# Return true or false
def generated_parser?
return false unless extname == '.js'
# PEG.js-generated parsers include a comment near the top of the file
# that marks them as such.
if lines[0..4].join('') =~ /^(?:[^\/]|\/[^\*])*\/\*(?:[^\*]|\*[^\/])*Generated by PEG.js/
return true
end
false
end
# Internal: Is the blob of JS generated by CoffeeScript?
#
# Requires Blob#data
#
# CoffeScript is meant to output JS that would be difficult to
# tell if it was generated or not. Look for a number of patterns
# output by the CS compiler.
#
# Return true or false
def compiled_coffeescript?
return false unless extname == '.js'
# CoffeeScript generated by > 1.2 include a comment on the first line
if lines[0] =~ /^\/\/ Generated by /
return true
end
if lines[0] == '(function() {' && # First line is module closure opening
lines[-2] == '}).call(this);' && # Second to last line closes module closure
lines[-1] == '' # Last line is blank
score = 0
lines.each do |line|
if line =~ /var /
# Underscored temp vars are likely to be Coffee
score += 1 * line.gsub(/(_fn|_i|_len|_ref|_results)/).count
# bind and extend functions are very Coffee specific
score += 3 * line.gsub(/(__bind|__extends|__hasProp|__indexOf|__slice)/).count
end
end
# Require a score of 3. This is fairly arbitrary. Consider
# tweaking later.
score >= 3
else
false
end
end
# Internal: Is this a generated documentation file for a .NET assembly?
#
# Requires Blob#data
#
# .NET developers often check in the XML Intellisense file along with an
# assembly - however, these don't have a special extension, so we have to
# dig into the contents to determine if it's a docfile. Luckily, these files
# are extremely structured, so recognizing them is easy.
#
# Returns true or false
def generated_net_docfile?
return false unless extname.downcase == ".xml"
return false unless lines.count > 3
# .NET Docfiles always open with <doc> and their first tag is an
# <assembly> tag
return lines[1].include?("<doc>") &&
lines[2].include?("<assembly>") &&
lines[-2].include?("</doc>")
end
# Public: Should the blob be indexed for searching?
#
# Excluded:
# - Files over 0.1MB
# - Non-text files
# - Langauges marked as not searchable
# - Generated source files
#
# Please add additional test coverage to
# `test/test_blob.rb#test_indexable` if you make any changes.
#
# Return true or false
def indexable?
if binary?
false
elsif language.nil?
false
elsif !language.searchable?
false
elsif generated?
false
elsif size > 100 * 1024
false
else
true
end
@_generated ||= Generated.generated?(name, lambda { data })
end
# Public: Detects the Language of the blob.
@@ -394,30 +313,15 @@ module Linguist
#
# Returns a Language or nil if none is detected
def language
if defined? @language
@language
return @language if defined? @language
if defined?(@data) && @data.is_a?(String)
data = @data
else
@language = guess_language
data = lambda { (binary_mime_type? || binary?) ? "" : self.data }
end
end
# Internal: Guess language
#
# Please add additional test coverage to
# `test/test_blob.rb#test_language` if you make any changes.
#
# Returns a Language or nil
def guess_language
return if binary_mime_type?
# Disambiguate between multiple language extensions
disambiguate_extension_language ||
# See if there is a Language for the extension
Language.find_by_filename(name) ||
# Try to detect Language from shebang line
shebang_language
@language = Language.detect(name.to_s, data, mode)
end
# Internal: Get the lexer of the blob.
@@ -427,86 +331,6 @@ module Linguist
language ? language.lexer : Pygments::Lexer.find_by_name('Text only')
end
# Internal: Disambiguates between multiple language extensions.
#
# Returns a Language or nil.
def disambiguate_extension_language
if Language.ambiguous?(extname)
possible_languages = Language.all.select { |l| l.extensions.include?(extname) }.map(&:name)
if possible_languages.any?
if result = Classifier.classify(Samples::DATA, data, possible_languages).first
Language[result[0]]
end
end
end
end
# Internal: Extract the script name from the shebang line
#
# Requires Blob#data
#
# Examples
#
# '#!/usr/bin/ruby'
# # => 'ruby'
#
# '#!/usr/bin/env ruby'
# # => 'ruby'
#
# '#!/usr/bash/python2.4'
# # => 'python'
#
# Please add additional test coverage to
# `test/test_blob.rb#test_shebang_script` if you make any changes.
#
# Returns a script name String or nil
def shebang_script
# Fail fast if blob isn't viewable?
return unless viewable?
if lines.any? && (match = lines[0].match(/(.+)\n?/)) && (bang = match[0]) =~ /^#!/
bang.sub!(/^#! /, '#!')
tokens = bang.split(' ')
pieces = tokens.first.split('/')
if pieces.size > 1
script = pieces.last
else
script = pieces.first.sub('#!', '')
end
script = script == 'env' ? tokens[1] : script
# python2.4 => python
if script =~ /((?:\d+\.?)+)/
script.sub! $1, ''
end
# Check for multiline shebang hacks that exec themselves
#
# #!/bin/sh
# exec foo "$0" "$@"
#
if script == 'sh' &&
lines[0...5].any? { |l| l.match(/exec (\w+).+\$0.+\$@/) }
script = $1
end
script
end
end
# Internal: Get Language for shebang script
#
# Returns the Language or nil
def shebang_language
# Skip file extensions unlikely to have shebangs
return unless shebang_extname?
if script = shebang_script
Language[script]
end
end
# Public: Highlight syntax of blob
#
# options - A Hash of options (defaults to {})
@@ -518,19 +342,5 @@ module Linguist
options[:options][:encoding] ||= encoding
lexer.highlight(data, options)
end
# Public: Highlight syntax of blob without the outer highlight div
# wrapper.
#
# options - A Hash of options (defaults to {})
#
# Returns html String
def colorize_without_wrapper(options = {})
if text = colorize(options)
text[%r{<div class="highlight"><pre>(.*?)</pre>\s*</div>}m, 1]
else
''
end
end
end
end

View File

@@ -14,6 +14,9 @@ module Linguist
# Classifier.train(db, 'Ruby', "def hello; end")
#
# Returns nothing.
#
# Set LINGUIST_DEBUG=1 or =2 to see probabilities per-token or
# per-language. See also #dump_all_tokens, below.
def self.train!(db, language, data)
tokens = Tokenizer.tokenize(data)
@@ -40,7 +43,7 @@ module Linguist
# Public: Guess language of data.
#
# db - Hash of classifer tokens database.
# db - Hash of classifier tokens database.
# data - Array of tokens or String data to analyze.
# languages - Array of language name Strings to restrict to.
#
@@ -75,17 +78,19 @@ module Linguist
def classify(tokens, languages)
return [] if tokens.nil?
tokens = Tokenizer.tokenize(tokens) if tokens.is_a?(String)
scores = {}
debug_dump_all_tokens(tokens, languages) if verbosity >= 2
languages.each do |language|
scores[language] = tokens_probability(tokens, language) +
language_probability(language)
scores[language] = tokens_probability(tokens, language) + language_probability(language)
debug_dump_probabilities(tokens, language, scores[language]) if verbosity >= 1
end
scores.sort { |a, b| b[1] <=> a[1] }.map { |score| [score[0], score[1]] }
end
# Internal: Probably of set of tokens in a language occuring - P(D | C)
# Internal: Probably of set of tokens in a language occurring - P(D | C)
#
# tokens - Array of String tokens.
# language - Language to check.
@@ -97,7 +102,7 @@ module Linguist
end
end
# Internal: Probably of token in language occuring - P(F | C)
# Internal: Probably of token in language occurring - P(F | C)
#
# token - String token.
# language - Language to check.
@@ -111,7 +116,7 @@ module Linguist
end
end
# Internal: Probably of a language occuring - P(C)
# Internal: Probably of a language occurring - P(C)
#
# language - Language to check.
#
@@ -119,5 +124,48 @@ module Linguist
def language_probability(language)
Math.log(@languages[language].to_f / @languages_total.to_f)
end
private
def verbosity
@verbosity ||= (ENV['LINGUIST_DEBUG'] || 0).to_i
end
def debug_dump_probabilities(tokens, language, score)
printf("%10s = %10.3f + %7.3f = %10.3f\n",
language, tokens_probability(tokens, language), language_probability(language), score)
end
# Internal: show a table of probabilities for each <token,language> pair.
#
# The number in each table entry is the number of "points" that each
# token contributes toward the belief that the file under test is a
# particular language. Points are additive.
#
# Points are the number of times a token appears in the file, times
# how much more likely (log of probability ratio) that token is to
# appear in one language vs. the least-likely language. Dashes
# indicate the least-likely language (and zero points) for each token.
def debug_dump_all_tokens(tokens, languages)
maxlen = tokens.map { |tok| tok.size }.max
printf "%#{maxlen}s", ""
puts " #" + languages.map { |lang| sprintf("%10s", lang) }.join
token_map = Hash.new(0)
tokens.each { |tok| token_map[tok] += 1 }
token_map.sort.each { |tok, count|
arr = languages.map { |lang| [lang, token_probability(tok, lang)] }
min = arr.map { |a,b| b }.min
minlog = Math.log(min)
if !arr.inject(true) { |result, n| result && n[1] == arr[0][1] }
printf "%#{maxlen}s%5d", tok, count
puts arr.map { |ent|
ent[1] == min ? " -" : sprintf("%10.3f", count * (Math.log(ent[1]) - minlog))
}.join
end
}
end
end
end

258
lib/linguist/generated.rb Normal file
View File

@@ -0,0 +1,258 @@
module Linguist
class Generated
# Public: Is the blob a generated file?
#
# name - String filename
# data - String blob data. A block also maybe passed in for lazy
# loading. This behavior is deprecated and you should always
# pass in a String.
#
# Return true or false
def self.generated?(name, data)
new(name, data).generated?
end
# Internal: Initialize Generated instance
#
# name - String filename
# data - String blob data
def initialize(name, data)
@name = name
@extname = File.extname(name)
@_data = data
end
attr_reader :name, :extname
# Lazy load blob data if block was passed in.
#
# Awful, awful stuff happening here.
#
# Returns String data.
def data
@data ||= @_data.respond_to?(:call) ? @_data.call() : @_data
end
# Public: Get each line of data
#
# Returns an Array of lines
def lines
# TODO: data should be required to be a String, no nils
@lines ||= data ? data.split("\n", -1) : []
end
# Internal: Is the blob a generated file?
#
# Generated source code is suppressed in diffs and is ignored by
# language statistics.
#
# Please add additional test coverage to
# `test/test_blob.rb#test_generated` if you make any changes.
#
# Return true or false
def generated?
name == 'Gemfile.lock' ||
minified_files? ||
compiled_coffeescript? ||
xcode_project_file? ||
generated_parser? ||
generated_net_docfile? ||
generated_net_designer_file? ||
generated_postscript? ||
generated_protocol_buffer? ||
generated_jni_header? ||
composer_lock? ||
node_modules? ||
vcr_cassette? ||
generated_by_zephir?
end
# Internal: Is the blob an XCode project file?
#
# Generated if the file extension is an XCode project
# file extension.
#
# Returns true of false.
def xcode_project_file?
['.xib', '.nib', '.storyboard', '.pbxproj', '.xcworkspacedata', '.xcuserstate'].include?(extname)
end
# Internal: Is the blob minified files?
#
# Consider a file minified if the average line length is
# greater then 110c.
#
# Currently, only JS and CSS files are detected by this method.
#
# Returns true or false.
def minified_files?
return unless ['.js', '.css'].include? extname
if lines.any?
(lines.inject(0) { |n, l| n += l.length } / lines.length) > 110
else
false
end
end
# Internal: Is the blob of JS generated by CoffeeScript?
#
# CoffeeScript is meant to output JS that would be difficult to
# tell if it was generated or not. Look for a number of patterns
# output by the CS compiler.
#
# Return true or false
def compiled_coffeescript?
return false unless extname == '.js'
# CoffeeScript generated by > 1.2 include a comment on the first line
if lines[0] =~ /^\/\/ Generated by /
return true
end
if lines[0] == '(function() {' && # First line is module closure opening
lines[-2] == '}).call(this);' && # Second to last line closes module closure
lines[-1] == '' # Last line is blank
score = 0
lines.each do |line|
if line =~ /var /
# Underscored temp vars are likely to be Coffee
score += 1 * line.gsub(/(_fn|_i|_len|_ref|_results)/).count
# bind and extend functions are very Coffee specific
score += 3 * line.gsub(/(__bind|__extends|__hasProp|__indexOf|__slice)/).count
end
end
# Require a score of 3. This is fairly arbitrary. Consider
# tweaking later.
score >= 3
else
false
end
end
# Internal: Is this a generated documentation file for a .NET assembly?
#
# .NET developers often check in the XML Intellisense file along with an
# assembly - however, these don't have a special extension, so we have to
# dig into the contents to determine if it's a docfile. Luckily, these files
# are extremely structured, so recognizing them is easy.
#
# Returns true or false
def generated_net_docfile?
return false unless extname.downcase == ".xml"
return false unless lines.count > 3
# .NET Docfiles always open with <doc> and their first tag is an
# <assembly> tag
return lines[1].include?("<doc>") &&
lines[2].include?("<assembly>") &&
lines[-2].include?("</doc>")
end
# Internal: Is this a codegen file for a .NET project?
#
# Visual Studio often uses code generation to generate partial classes, and
# these files can be quite unwieldy. Let's hide them.
#
# Returns true or false
def generated_net_designer_file?
name.downcase =~ /\.designer\.cs$/
end
# Internal: Is the blob of JS a parser generated by PEG.js?
#
# PEG.js-generated parsers are not meant to be consumed by humans.
#
# Return true or false
def generated_parser?
return false unless extname == '.js'
# PEG.js-generated parsers include a comment near the top of the file
# that marks them as such.
if lines[0..4].join('') =~ /^(?:[^\/]|\/[^\*])*\/\*(?:[^\*]|\*[^\/])*Generated by PEG.js/
return true
end
false
end
# Internal: Is the blob of PostScript generated?
#
# PostScript files are often generated by other programs. If they tell us so,
# we can detect them.
#
# Returns true or false.
def generated_postscript?
return false unless ['.ps', '.eps'].include? extname
# 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.
creator = lines[0..9].find {|line| line =~ /^%%Creator: /}
return false if creator.nil?
# 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")
end
# Internal: Is the blob a C++, Java or Python source file generated by the
# Protocol Buffer compiler?
#
# Returns true of false.
def generated_protocol_buffer?
return false unless ['.py', '.java', '.h', '.cc', '.cpp'].include?(extname)
return false unless lines.count > 1
return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!")
end
# Internal: Is the blob a C/C++ header generated by the Java JNI tool javah?
#
# Returns true of false.
def generated_jni_header?
return false unless extname == '.h'
return false unless lines.count > 2
return lines[0].include?("/* DO NOT EDIT THIS FILE - it is machine generated */") &&
lines[1].include?("#include <jni.h>")
end
# Internal: Is the blob part of node_modules/, which are not meant for humans in pull requests.
#
# Returns true or false.
def node_modules?
!!name.match(/node_modules\//)
end
# Internal: Is the blob a generated php composer lock file?
#
# Returns true or false.
def composer_lock?
!!name.match(/composer.lock/)
end
# Internal: Is the blob a generated by Zephir
#
# Returns true or false.
def generated_by_zephir?
!!name.match(/.\.zep\.(?:c|h|php)$/)
end
# Is the blob a VCR Cassette file?
#
# Returns true or false
def vcr_cassette?
return false unless extname == '.yml'
return false unless lines.count > 2
# VCR Cassettes have "recorded_with: VCR" in the second last line.
return lines[-2].include?("recorded_with: VCR")
end
end
end

View File

@@ -0,0 +1,90 @@
module Linguist
# A collection of simple heuristics that can be used to better analyze languages.
class Heuristics
ACTIVE = false
# Public: Given an array of String language names,
# apply heuristics against the given data and return an array
# of matching languages, or nil.
#
# data - Array of tokens or String data to analyze.
# languages - Array of language name Strings to restrict to.
#
# Returns an array of Languages or []
def self.find_by_heuristics(data, languages)
if active?
if languages.all? { |l| ["Objective-C", "C++"].include?(l) }
disambiguate_c(data, languages)
end
if languages.all? { |l| ["Perl", "Prolog"].include?(l) }
disambiguate_pl(data, languages)
end
if languages.all? { |l| ["ECL", "Prolog"].include?(l) }
disambiguate_ecl(data, languages)
end
if languages.all? { |l| ["TypeScript", "XML"].include?(l) }
disambiguate_ts(data, languages)
end
if languages.all? { |l| ["Common Lisp", "OpenCL"].include?(l) }
disambiguate_cl(data, languages)
end
if languages.all? { |l| ["Rebol", "R"].include?(l) }
disambiguate_r(data, languages)
end
end
end
# .h extensions are ambigious between C, C++, and Objective-C.
# We want to shortcut look for Objective-C _and_ now C++ too!
#
# Returns an array of Languages or []
def self.disambiguate_c(data, languages)
matches = []
matches << Language["Objective-C"] if data.include?("@interface")
matches << Language["C++"] if data.include?("#include <cstdint>")
matches
end
def self.disambiguate_pl(data, languages)
matches = []
matches << Language["Prolog"] if data.include?(":-")
matches << Language["Perl"] if data.include?("use strict")
matches
end
def self.disambiguate_ecl(data, languages)
matches = []
matches << Language["Prolog"] if data.include?(":-")
matches << Language["ECL"] if data.include?(":=")
matches
end
def self.disambiguate_ts(data, languages)
matches = []
if (data.include?("</translation>"))
matches << Language["XML"]
else
matches << Language["TypeScript"]
end
matches
end
def self.disambiguate_cl(data, languages)
matches = []
matches << Language["Common Lisp"] if data.include?("(defun ")
matches << Language["OpenCL"] if /\/\* |\/\/ |^\}/.match(data)
matches
end
def self.disambiguate_r(data, languages)
matches = []
matches << Language["Rebol"] if /\bRebol\b/i.match(data)
matches << Language["R"] if data.include?("<-")
matches
end
def self.active?
!!ACTIVE
end
end
end

View File

@@ -1,7 +1,13 @@
require 'escape_utils'
require 'pygments'
require 'yaml'
begin
require 'json'
rescue LoadError
end
require 'linguist/classifier'
require 'linguist/heuristics'
require 'linguist/samples'
module Linguist
@@ -11,21 +17,31 @@ module Linguist
# Languages are defined in `lib/linguist/languages.yml`.
class Language
@languages = []
@overrides = {}
@index = {}
@name_index = {}
@alias_index = {}
@extension_index = {}
@filename_index = {}
@extension_index = Hash.new { |h,k| h[k] = [] }
@interpreter_index = Hash.new { |h,k| h[k] = [] }
@filename_index = Hash.new { |h,k| h[k] = [] }
# Valid Languages types
TYPES = [:data, :markup, :programming]
TYPES = [:data, :markup, :programming, :prose]
# Internal: Test if extension maps to multiple Languages.
# Names of non-programming languages that we will still detect
#
# Returns true or false.
def self.ambiguous?(extension)
@overrides.include?(extension)
# Returns an array
def self.detectable_markup
["CSS", "Less", "Sass", "SCSS", "Stylus", "TeX"]
end
# Detect languages by a specific type
#
# type - A symbol that exists within TYPES
#
# Returns an array
def self.by_type(type)
all.select { |h| h.type == type }
end
# Internal: Create a new Language object
@@ -60,34 +76,67 @@ module Linguist
raise ArgumentError, "Extension is missing a '.': #{extension.inspect}"
end
unless ambiguous?(extension)
# Index the extension with a leading ".": ".rb"
@extension_index[extension] = language
# Index the extension without a leading ".": "rb"
@extension_index[extension.sub(/^\./, '')] = language
end
@extension_index[extension] << language
end
language.overrides.each do |extension|
if extension !~ /^\./
raise ArgumentError, "Extension is missing a '.': #{extension.inspect}"
end
if l = @overrides[extension]
raise ArgumentError, "#{extension} is already overridden by #{l.name}"
end
@overrides[extension] = language
language.interpreters.each do |interpreter|
@interpreter_index[interpreter] << language
end
language.filenames.each do |filename|
@filename_index[filename] = language
@filename_index[filename] << language
end
language
end
# Public: Detects the Language of the blob.
#
# name - String filename
# data - String blob data. A block also maybe passed in for lazy
# loading. This behavior is deprecated and you should always
# pass in a String.
# mode - Optional String mode (defaults to nil)
#
# Returns Language or nil.
def self.detect(name, data, mode = nil)
# A bit of an elegant hack. If the file is executable but extensionless,
# append a "magic" extension so it can be classified with other
# languages that have shebang scripts.
if File.extname(name).empty? && mode && (mode.to_i(8) & 05) == 05
name += ".script!"
end
# First try to find languages that match based on filename.
possible_languages = find_by_filename(name)
# If there is more than one possible language with that extension (or no
# extension at all, in the case of extensionless scripts), we need to continue
# our detection work
if possible_languages.length > 1
data = data.call() if data.respond_to?(:call)
possible_language_names = possible_languages.map(&:name)
# Don't bother with emptiness
if data.nil? || data == ""
nil
# Check if there's a shebang line and use that as authoritative
elsif (result = find_by_shebang(data)) && !result.empty?
result.first
# No shebang. Still more work to do. Try to find it with our heuristics.
elsif (determined = Heuristics.find_by_heuristics(data, possible_language_names)) && !determined.empty?
determined.first
# Lastly, fall back to the probablistic classifier.
elsif classified = Classifier.classify(Samples::DATA, data, possible_language_names ).first
# Return the actual Language object based of the string language name (i.e., first element of `#classify`)
Language[classified[0]]
end
else
# Simplest and most common case, we can just return the one match based on extension
possible_languages.first
end
end
# Public: Get all Languages
#
# Returns an Array of Languages
@@ -123,33 +172,35 @@ module Linguist
@alias_index[name]
end
# Public: Look up Language by extension.
#
# extension - The extension String. May include leading "."
#
# Examples
#
# Language.find_by_extension('.rb')
# # => #<Language name="Ruby">
#
# Returns the Language or nil if none was found.
def self.find_by_extension(extension)
@extension_index[extension]
end
# Public: Look up Language by filename.
# Public: Look up Languages by filename.
#
# filename - The path String.
#
# Examples
#
# Language.find_by_filename('foo.rb')
# # => #<Language name="Ruby">
# # => [#<Language name="Ruby">]
#
# Returns the Language or nil if none was found.
# Returns all matching Languages or [] if none were found.
def self.find_by_filename(filename)
basename, extname = File.basename(filename), File.extname(filename)
@filename_index[basename] || @extension_index[extname]
langs = @filename_index[basename] +
@extension_index[extname]
langs.compact.uniq
end
# Public: Look up Languages by shebang line.
#
# data - Array of tokens or String data to analyze.
#
# Examples
#
# Language.find_by_shebang("#!/bin/bash\ndate;")
# # => [#<Language name="Bash">]
#
# Returns the matching Language
def self.find_by_shebang(data)
@interpreter_index[Linguist.interpreter_from_shebang(data)]
end
# Public: Look up Language by its name or lexer.
@@ -230,24 +281,16 @@ module Linguist
raise(ArgumentError, "#{@name} is missing lexer")
@ace_mode = attributes[:ace_mode]
@wrap = attributes[:wrap] || false
# Set legacy search term
@search_term = attributes[:search_term] || default_alias_name
# Set extensions or default to [].
@extensions = attributes[:extensions] || []
@overrides = attributes[:overrides] || []
@interpreters = attributes[:interpreters] || []
@filenames = attributes[:filenames] || []
unless @primary_extension = attributes[:primary_extension]
raise ArgumentError, "#{@name} is missing primary extension"
end
# Prepend primary extension unless its already included
if primary_extension && !extensions.include?(primary_extension)
@extensions = [primary_extension] + extensions
end
# Set popular, and searchable flags
@popular = attributes.key?(:popular) ? attributes[:popular] : false
@searchable = attributes.key?(:searchable) ? attributes[:searchable] : true
@@ -321,6 +364,11 @@ module Linguist
# Returns a String name or nil
attr_reader :ace_mode
# Public: Should language lines be wrapped
#
# Returns true or false
attr_reader :wrap
# Public: Get extensions
#
# Examples
@@ -330,24 +378,14 @@ module Linguist
# Returns the extensions Array
attr_reader :extensions
# Deprecated: Get primary extension
# Public: Get interpreters
#
# Defaults to the first extension but can be overriden
# in the languages.yml.
# Examples
#
# The primary extension can not be nil. Tests should verify this.
# # => ['awk', 'gawk', 'mawk' ...]
#
# This attribute is only used by app/helpers/gists_helper.rb for
# creating the language dropdown. It really should be using `name`
# instead. Would like to drop primary extension.
#
# Returns the extension String.
attr_reader :primary_extension
# Internal: Get overridden extensions.
#
# Returns the extensions Array.
attr_reader :overrides
# Returns the interpreters Array
attr_reader :interpreters
# Public: Get filenames
#
@@ -357,6 +395,27 @@ module Linguist
#
# Returns the extensions Array
attr_reader :filenames
# Public: Return all possible extensions for language
def all_extensions
(extensions + [primary_extension]).uniq
end
# Deprecated: Get primary extension
#
# Defaults to the first extension but can be overridden
# in the languages.yml.
#
# The primary extension can not be nil. Tests should verify this.
#
# This method is only used by app/helpers/gists_helper.rb for creating
# the language dropdown. It really should be using `name` instead.
# Would like to drop primary extension.
#
# Returns the extension String.
def primary_extension
extensions.first
end
# Public: Get URL escaped name.
#
@@ -416,7 +475,7 @@ module Linguist
#
# Returns html String
def colorize(text, options = {})
lexer.highlight(text, options = {})
lexer.highlight(text, options)
end
# Public: Return name as String representation
@@ -442,19 +501,40 @@ module Linguist
end
extensions = Samples::DATA['extnames']
interpreters = Samples::DATA['interpreters']
filenames = Samples::DATA['filenames']
popular = YAML.load_file(File.expand_path("../popular.yml", __FILE__))
YAML.load_file(File.expand_path("../languages.yml", __FILE__)).each do |name, options|
languages_yml = File.expand_path("../languages.yml", __FILE__)
languages_json = File.expand_path("../languages.json", __FILE__)
if File.exist?(languages_json) && defined?(JSON)
languages = JSON.load(File.read(languages_json))
else
languages = YAML.load_file(languages_yml)
end
languages.each do |name, options|
options['extensions'] ||= []
options['interpreters'] ||= []
options['filenames'] ||= []
if extnames = extensions[name]
extnames.each do |extname|
if !options['extensions'].include?(extname)
options['extensions'] << extname
else
warn "#{name} #{extname.inspect} is already defined in samples/. Remove from languages.yml."
end
end
end
if interpreters == nil
interpreters = {}
end
if interpreter_names = interpreters[name]
interpreter_names.each do |interpreter|
if !options['interpreters'].include?(interpreter)
options['interpreters'] << interpreter
end
end
end
@@ -463,8 +543,6 @@ module Linguist
fns.each do |filename|
if !options['filenames'].include?(filename)
options['filenames'] << filename
else
warn "#{name} #{filename.inspect} is already defined in samples/. Remove from languages.yml."
end
end
end
@@ -476,12 +554,12 @@ module Linguist
:aliases => options['aliases'],
:lexer => options['lexer'],
:ace_mode => options['ace_mode'],
:wrap => options['wrap'],
:group_name => options['group'],
:searchable => options.key?('searchable') ? options['searchable'] : true,
:search_term => options['search_term'],
:extensions => options['extensions'].sort,
:primary_extension => options['primary_extension'],
:overrides => options['overrides'],
:extensions => [options['extensions'].first] + options['extensions'][1..-1].sort,
:interpreters => options['interpreters'].sort,
:filenames => options['filenames'],
:popular => popular.include?(name)
)

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@ module Linguist
module MD5
# Public: Create deep nested digest of value object.
#
# Useful for object comparsion.
# Useful for object comparison.
#
# obj - Object to digest.
#

View File

@@ -1,91 +0,0 @@
require 'mime/types'
require 'yaml'
class MIME::Type
attr_accessor :override
end
# Register additional mime type extensions
#
# Follows same format as mime-types data file
# https://github.com/halostatue/mime-types/blob/master/lib/mime/types.rb.data
File.read(File.expand_path("../mimes.yml", __FILE__)).lines.each do |line|
# Regexp was cargo culted from mime-types lib
next unless line =~ %r{^
#{MIME::Type::MEDIA_TYPE_RE}
(?:\s@([^\s]+))?
(?:\s:(#{MIME::Type::ENCODING_RE}))?
}x
mediatype = $1
subtype = $2
extensions = $3
encoding = $4
# Lookup existing mime type
mime_type = MIME::Types["#{mediatype}/#{subtype}"].first ||
# Or create a new instance
MIME::Type.new("#{mediatype}/#{subtype}")
if extensions
extensions.split(/,/).each do |extension|
mime_type.extensions << extension
end
end
if encoding
mime_type.encoding = encoding
end
mime_type.override = true
# Kind of hacky, but we need to reindex the mime type after making changes
MIME::Types.add_type_variant(mime_type)
MIME::Types.index_extensions(mime_type)
end
module Linguist
module Mime
# Internal: Look up mime type for extension.
#
# ext - The extension String. May include leading "."
#
# Examples
#
# Mime.mime_for('.html')
# # => 'text/html'
#
# Mime.mime_for('txt')
# # => 'text/plain'
#
# Return mime type String otherwise falls back to 'text/plain'.
def self.mime_for(ext)
mime_type = lookup_mime_type_for(ext)
mime_type ? mime_type.to_s : 'text/plain'
end
# Internal: Lookup mime type for extension or mime type
#
# ext_or_mime_type - A file extension ".txt" or mime type "text/plain".
#
# Returns a MIME::Type
def self.lookup_mime_type_for(ext_or_mime_type)
ext_or_mime_type ||= ''
if ext_or_mime_type =~ /\w+\/\w+/
guesses = ::MIME::Types[ext_or_mime_type]
else
guesses = ::MIME::Types.type_for(ext_or_mime_type)
end
# Use custom override first
guesses.detect { |type| type.override } ||
# Prefer text mime types over binary
guesses.detect { |type| type.ascii? } ||
# Otherwise use the first guess
guesses.first
end
end
end

View File

@@ -1,62 +0,0 @@
# Additional types to add to MIME::Types
#
# MIME types are used to set the Content-Type of raw binary blobs. All text
# blobs are served as text/plain regardless of their type to ensure they
# open in the browser rather than downloading.
#
# The encoding helps determine whether a file should be treated as plain
# text or binary. By default, a mime type's encoding is base64 (binary).
# These types will show a "View Raw" link. To force a type to render as
# plain text, set it to 8bit for UTF-8. text/* types will be treated as
# text by default.
#
# <type> @<extensions> :<encoding>
#
# type - mediatype/subtype
# extensions - comma seperated extension list
# encoding - base64 (binary), 7bit (ASCII), 8bit (UTF-8), or
# quoted-printable (Printable ASCII).
#
# Follows same format as mime-types data file
# https://github.com/halostatue/mime-types/blob/master/lib/mime/types.rb.data
#
# Any additions or modifications (even trivial) should have corresponding
# test change in `test/test_mime.rb`.
# TODO: Lookup actual types
application/octet-stream @a,blend,gem,graffle,ipa,lib,mcz,nib,o,ogv,otf,pfx,pigx,plgx,psd,sib,spl,sqlite3,swc,ucode,xpi
# Please keep this list alphabetized
application/java-archive @ear,war
application/netcdf :8bit
application/ogg @ogg
application/postscript :base64
application/vnd.adobe.air-application-installer-package+zip @air
application/vnd.mozilla.xul+xml :8bit
application/vnd.oasis.opendocument.presentation @odp
application/vnd.oasis.opendocument.spreadsheet @ods
application/vnd.oasis.opendocument.text @odt
application/vnd.openofficeorg.extension @oxt
application/vnd.openxmlformats-officedocument.presentationml.presentation @pptx
application/x-chrome-extension @crx
application/x-iwork-keynote-sffkey @key
application/x-iwork-numbers-sffnumbers @numbers
application/x-iwork-pages-sffpages @pages
application/x-ms-xbap @xbap :8bit
application/x-parrot-bytecode @pbc
application/x-shockwave-flash @swf
application/x-silverlight-app @xap
application/x-supercollider @sc :8bit
application/x-troff-ms :8bit
application/x-wais-source :8bit
application/xaml+xml @xaml :8bit
application/xslt+xml @xslt :8bit
image/x-icns @icns
text/cache-manifest @manifest
text/plain @cu,cxx
text/x-logtalk @lgt
text/x-nemerle @n
text/x-nimrod @nim
text/x-ocaml @ml,mli,mll,mly,sig,sml
text/x-rust @rs,rc
text/x-scheme @rkt,scm,sls,sps,ss

View File

@@ -8,6 +8,8 @@
- C#
- C++
- CSS
- Clojure
- CoffeeScript
- Common Lisp
- Diff
- Emacs Lisp
@@ -25,5 +27,3 @@
- SQL
- Scala
- Scheme
- TeX
- XML

View File

@@ -29,6 +29,7 @@ module Linguist
@computed_stats = false
@language = @size = nil
@sizes = Hash.new { 0 }
@file_breakdown = Hash.new { |h,k| h[k] = Array.new }
end
# Public: Returns a breakdown of language stats.
@@ -60,6 +61,12 @@ module Linguist
@size
end
# Public: Return the language breakdown of this repository by file
def breakdown_by_file
compute_stats
@file_breakdown
end
# Internal: Compute language breakdown for each blob in the Repository.
#
# Returns nothing
@@ -67,14 +74,18 @@ module Linguist
return if @computed_stats
@enum.each do |blob|
# Skip binary file extensions
next if blob.binary_mime_type?
# Skip files that are likely binary
next if blob.likely_binary?
# Skip vendored or generated blobs
next if blob.vendored? || blob.generated? || blob.language.nil?
# Only include programming languages
if blob.language.type == :programming
# Only include programming languages and acceptable markup languages
if blob.language.type == :programming || Language.detectable_markup.include?(blob.language.name)
# Build up the per-file breakdown stats
@file_breakdown[blob.language.group.name] << blob.name
@sizes[blob.language.group] += blob.size
end
end

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,8 @@
require 'yaml'
begin
require 'json'
rescue LoadError
require 'yaml'
end
require 'linguist/md5'
require 'linguist/classifier'
@@ -14,7 +18,8 @@ module Linguist
# Hash of serialized samples object
if File.exist?(PATH)
DATA = YAML.load_file(PATH)
serializer = defined?(JSON) ? JSON : YAML
DATA = serializer.load(File.read(PATH))
end
# Public: Iterate over each sample.
@@ -23,7 +28,7 @@ module Linguist
#
# Returns nothing.
def self.each(&block)
Dir.entries(ROOT).each do |category|
Dir.entries(ROOT).sort!.each do |category|
next if category == '.' || category == '..'
# Skip text and binary for now
@@ -45,9 +50,14 @@ module Linguist
})
end
else
if File.extname(filename) == ""
raise "#{File.join(dirname, filename)} is missing an extension, maybe it belongs in filenames/ subdir"
end
yield({
:path => File.join(dirname, filename),
:language => category,
:interpreter => File.exist?(filename) ? Linguist.interpreter_from_shebang(File.read(filename)) : nil,
:extname => File.extname(filename)
})
end
@@ -63,23 +73,32 @@ module Linguist
def self.data
db = {}
db['extnames'] = {}
db['interpreters'] = {}
db['filenames'] = {}
each do |sample|
language_name = sample[:language]
# TODO: For now skip empty extnames
if sample[:extname] && sample[:extname] != ""
if sample[:extname]
db['extnames'][language_name] ||= []
if !db['extnames'][language_name].include?(sample[:extname])
db['extnames'][language_name] << sample[:extname]
db['extnames'][language_name].sort!
end
end
# TODO: For now skip empty extnames
if fn = sample[:filename]
if sample[:interpreter]
db['interpreters'][language_name] ||= []
if !db['interpreters'][language_name].include?(sample[:interpreter])
db['interpreters'][language_name] << sample[:interpreter]
db['interpreters'][language_name].sort!
end
end
if sample[:filename]
db['filenames'][language_name] ||= []
db['filenames'][language_name] << fn
db['filenames'][language_name] << sample[:filename]
db['filenames'][language_name].sort!
end
data = File.read(sample[:path])
@@ -91,4 +110,40 @@ module Linguist
db
end
end
# Used to retrieve the interpreter from the shebang line of a file's
# data.
def self.interpreter_from_shebang(data)
lines = data.lines.to_a
if lines.any? && (match = lines[0].match(/(.+)\n?/)) && (bang = match[0]) =~ /^#!/
bang.sub!(/^#! /, '#!')
tokens = bang.split(' ')
pieces = tokens.first.split('/')
if pieces.size > 1
script = pieces.last
else
script = pieces.first.sub('#!', '')
end
script = script == 'env' ? tokens[1] : script
# "python2.6" -> "python"
if script =~ /((?:\d+\.?)+)/
script.sub! $1, ''
end
# Check for multiline shebang hacks that call `exec`
if script == 'sh' &&
lines[0...5].any? { |l| l.match(/exec (\w+).+\$0.+\$@/) }
script = $1
end
script
else
nil
end
end
end

View File

@@ -1,3 +1,5 @@
require 'strscan'
module Linguist
# Generic programming language tokenizer.
#
@@ -14,21 +16,28 @@ module Linguist
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
'#', # Ruby
'%', # Tex
]
# Start state on opening token, ignore anything until the closing
# token is reached.
MULTI_LINE_COMMENTS = [
['/*', '*/'], # C
['<!--', '-->'], # XML
['{-', '-}'], # Haskell
['(*', '*)'] # Coq
['(*', '*)'], # Coq
['"""', '"""'] # Python
]
START_SINGLE_LINE_COMMENT = Regexp.compile(SINGLE_LINE_COMMENTS.map { |c|
"^\s*#{Regexp.escape(c)} "
"\s*#{Regexp.escape(c)} "
}.join("|"))
START_MULTI_LINE_COMMENT = Regexp.compile(MULTI_LINE_COMMENTS.map { |c|
@@ -50,33 +59,48 @@ module Linguist
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
if token = s.scan(START_SINGLE_LINE_COMMENT)
tokens << token.strip
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
# tokens << token
close_token = MULTI_LINE_COMMENTS.assoc(token)[1]
s.skip_until(Regexp.compile(Regexp.escape(close_token)))
tokens << close_token
# tokens << close_token
# Skip single or double quoted strings
elsif s.scan(/"/)
s.skip_until(/[^\\]"/)
if s.peek(1) == "\""
s.getch
else
s.skip_until(/[^\\]"/)
end
elsif s.scan(/'/)
s.skip_until(/[^\\]'/)
if s.peek(1) == "'"
s.getch
else
s.skip_until(/[^\\]'/)
end
# Skip number literals
elsif s.scan(/(0x)?\d+/)
elsif s.scan(/(0x)?\d(\d|\.)*/)
# SGML style brackets
elsif token = s.scan(/<[^\s<>][^<>]*>/)
extract_sgml_tokens(token).each { |t| tokens << t }
# Common programming punctuation
elsif token = s.scan(/;|\{|\}|\(|\)/)
elsif token = s.scan(/;|\{|\}|\(|\)|\[|\]/)
tokens << token
# Regular token
@@ -95,6 +119,33 @@ module Linguist
tokens
end
# Internal: Extract normalized shebang command token.
#
# Examples
#
# extract_shebang("#!/usr/bin/ruby")
# # => "ruby"
#
# extract_shebang("#!/usr/bin/env node")
# # => "node"
#
# 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+/)
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.

View File

@@ -10,25 +10,56 @@
## Vendor Conventions ##
# Caches
- cache/
- (^|/)cache/
# Dependencies
- ^[Dd]ependencies/
# C deps
# https://github.com/joyent/node
- ^deps/
- ^tools/
- (^|/)configure$
- (^|/)configure.ac$
- (^|/)config.guess$
- (^|/)config.sub$
# Node depedencies
# Node dependencies
- node_modules/
# Vendored depedencies
- vendor/
# Bower Components
- bower_components/
# Erlang bundles
- ^rebar$
# Bootstrap minified css and js
- (^|/)bootstrap([^.]*)(\.min)?\.(js|css)$
# Foundation css
- foundation.min.css
- foundation.css
# Vendored dependencies
- thirdparty/
- vendors?/
- extern(al)?/
# Debian packaging
- ^debian/
# Haxelib projects often contain a neko bytecode file named run.n
- run.n$
## Commonly Bundled JavaScript frameworks ##
# jQuery
- (^|/)jquery([^.]*)(\.min)?\.js$
- (^|/)jquery\-\d\.\d(\.\d)?(\.min)?\.js$
- (^|/)jquery\-\d\.\d+(\.\d+)?(\.min)?\.js$
# jQuery UI
- (^|/)jquery\-ui(\-\d\.\d+(\.\d+)?)?(\.\w+)?(\.min)?\.(js|css)$
- (^|/)jquery\.(ui|effects)\.([^.]*)(\.min)?\.(js|css)$
# Prototype
- (^|/)prototype(.*)\.js$
@@ -36,6 +67,9 @@
- (^|/)controls\.js$
- (^|/)dragdrop\.js$
# Typescript definition files
- (.*?)\.d\.ts$
# MooTools
- (^|/)mootools([^.]*)\d+\.\d+.\d+([^.]*)\.js$
@@ -49,10 +83,6 @@
- (^|/)yahoo-([^.]*)\.js$
- (^|/)yui([^.]*)\.js$
# LESS css
- (^|/)less([^.]*)(\.min)?\.js$
- (^|/)less\-\d+\.\d+\.\d+(\.min)?\.js$
# WYS editors
- (^|/)ckeditor\.js$
- (^|/)tiny_mce([^.]*)\.js$
@@ -61,36 +91,121 @@
# MathJax
- (^|/)MathJax/
# SyntaxHighlighter - http://alexgorbatchev.com/
- (^|/)shBrush([^.]*)\.js$
- (^|/)shCore\.js$
- (^|/)shLegacy\.js$
# AngularJS
- (^|/)angular([^.]*)(\.min)?\.js$
# D3.js
- (^|\/)d3(\.v\d+)?([^.]*)(\.min)?\.js$
# React
- (^|/)react(-[^.]*)?(\.min)?\.js$
# Modernizr
- (^|/)modernizr\-\d\.\d+(\.\d+)?(\.min)?\.js$
- (^|/)modernizr\.custom\.\d+\.js$
## Python ##
# django
- (^|/)admin_media/
# Fabric
- ^fabfile\.py$
# WAF
- ^waf$
# .osx
- ^.osx$
## Obj-C ##
# Sparkle
- (^|/)Sparkle/
## Groovy ##
# Gradle
- (^|/)gradlew$
- (^|/)gradlew\.bat$
- (^|/)gradle/wrapper/
## .NET ##
# Visual Studio IntelliSense
- -vsdoc\.js$
- \.intellisense\.js$
# jQuery validation plugin (MS bundles this with asp.net mvc)
- (^|/)jquery([^.]*)\.validate(\.min)?\.js$
- (^|/)jquery([^.]*)\.validate(\.unobtrusive)?(\.min)?\.js$
- (^|/)jquery([^.]*)\.unobtrusive\-ajax(\.min)?\.js$
# Microsoft Ajax
- (^|/)[Mm]icrosoft([Mm]vc)?([Aa]jax|[Vv]alidation)(\.debug)?\.js$
# NuGet
- ^[Pp]ackages/
- ^[Pp]ackages\/.+\.\d+\/
# ExtJS
- (^|/)extjs/
- (^|/)extjs/.*?\.js$
- (^|/)extjs/.*?\.xml$
- (^|/)extjs/.*?\.txt$
- (^|/)extjs/.*?\.html$
- (^|/)extjs/.*?\.properties$
- (^|/)extjs/.sencha/
- (^|/)extjs/docs/
- (^|/)extjs/builds/
- (^|/)extjs/cmd/
- (^|/)extjs/examples/
- (^|/)extjs/locale/
- (^|/)extjs/packages/
- (^|/)extjs/plugins/
- (^|/)extjs/resources/
- (^|/)extjs/src/
- (^|/)extjs/welcome/
# Html5shiv
- (^|/)html5shiv(\.min)?\.js$
# Samples folders
- ^[Ss]amples/
# LICENSE, README, git config files
- ^COPYING$
- LICENSE$
- License$
- gitattributes$
- gitignore$
- gitmodules$
- ^README$
- ^readme$
# Test fixtures
- ^[Tt]est/fixtures/
# PhoneGap/Cordova
- (^|/)cordova([^.]*)(\.min)?\.js$
- (^|/)cordova\-\d\.\d(\.\d)?(\.min)?\.js$
# Vagrant
- ^Vagrantfile$
# .DS_Store's
- .[Dd][Ss]_[Ss]tore$
# Mercury --use-subdirs
- Mercury/
# R packages
- ^vignettes/
- ^inst/extdata/
# Octicons
- octicons.css
- octicons.min.css
- sprockets-octicons.scss

3
lib/linguist/version.rb Normal file
View File

@@ -0,0 +1,3 @@
module Linguist
VERSION = "2.12.0"
end

View File

@@ -0,0 +1,219 @@
*/**
* The MIT License (MIT)
* Copyright (c) 2012 René van Mil
*
* 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.
*/
*----------------------------------------------------------------------*
* CLASS CL_CSV_PARSER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class cl_csv_parser definition
public
inheriting from cl_object
final
create public .
public section.
*"* public components of class CL_CSV_PARSER
*"* do not include other source files here!!!
type-pools abap .
methods constructor
importing
!delegate type ref to if_csv_parser_delegate
!csvstring type string
!separator type c
!skip_first_line type abap_bool .
methods parse
raising
cx_csv_parse_error .
protected section.
*"* protected components of class CL_CSV_PARSER
*"* do not include other source files here!!!
private section.
*"* private components of class CL_CSV_PARSER
*"* do not include other source files here!!!
constants _textindicator type c value '"'. "#EC NOTEXT
data _delegate type ref to if_csv_parser_delegate .
data _csvstring type string .
data _separator type c .
type-pools abap .
data _skip_first_line type abap_bool .
methods _lines
returning
value(returning) type stringtab .
methods _parse_line
importing
!line type string
returning
value(returning) type stringtab
raising
cx_csv_parse_error .
endclass. "CL_CSV_PARSER DEFINITION
*----------------------------------------------------------------------*
* CLASS CL_CSV_PARSER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class cl_csv_parser implementation.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method CL_CSV_PARSER->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* | [--->] DELEGATE TYPE REF TO IF_CSV_PARSER_DELEGATE
* | [--->] CSVSTRING TYPE STRING
* | [--->] SEPARATOR TYPE C
* | [--->] SKIP_FIRST_LINE TYPE ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
method constructor.
super->constructor( ).
_delegate = delegate.
_csvstring = csvstring.
_separator = separator.
_skip_first_line = skip_first_line.
endmethod. "constructor
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method CL_CSV_PARSER->PARSE
* +-------------------------------------------------------------------------------------------------+
* | [!CX!] CX_CSV_PARSE_ERROR
* +--------------------------------------------------------------------------------------</SIGNATURE>
method parse.
data msg type string.
if _csvstring is initial.
message e002(csv) into msg.
raise exception type cx_csv_parse_error
exporting
message = msg.
endif.
" Get the lines
data is_first_line type abap_bool value abap_true.
data lines type standard table of string.
lines = _lines( ).
field-symbols <line> type string.
loop at lines assigning <line>.
" Should we skip the first line?
if _skip_first_line = abap_true and is_first_line = abap_true.
is_first_line = abap_false.
continue.
endif.
" Parse the line
data values type standard table of string.
values = _parse_line( <line> ).
" Send values to delegate
_delegate->values_found( values ).
endloop.
endmethod. "parse
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method CL_CSV_PARSER->_LINES
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RETURNING TYPE STRINGTAB
* +--------------------------------------------------------------------------------------</SIGNATURE>
method _lines.
split _csvstring at cl_abap_char_utilities=>cr_lf into table returning.
endmethod. "_lines
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method CL_CSV_PARSER->_PARSE_LINE
* +-------------------------------------------------------------------------------------------------+
* | [--->] LINE TYPE STRING
* | [<-()] RETURNING TYPE STRINGTAB
* | [!CX!] CX_CSV_PARSE_ERROR
* +--------------------------------------------------------------------------------------</SIGNATURE>
method _parse_line.
data msg type string.
data csvvalue type string.
data csvvalues type standard table of string.
data char type c.
data pos type i value 0.
data len type i.
len = strlen( line ).
while pos < len.
char = line+pos(1).
if char <> _separator.
if char = _textindicator.
data text_ended type abap_bool.
text_ended = abap_false.
while text_ended = abap_false.
pos = pos + 1.
if pos < len.
char = line+pos(1).
if char = _textindicator.
text_ended = abap_true.
else.
if char is initial. " Space
concatenate csvvalue ` ` into csvvalue.
else.
concatenate csvvalue char into csvvalue.
endif.
endif.
else.
" Reached the end of the line while inside a text value
" This indicates an error in the CSV formatting
text_ended = abap_true.
message e003(csv) into msg.
raise exception type cx_csv_parse_error
exporting
message = msg.
endif.
endwhile.
" Check if next character is a separator, otherwise the CSV formatting is incorrect
data nextpos type i.
nextpos = pos + 1.
if nextpos < len and line+nextpos(1) <> _separator.
message e003(csv) into msg.
raise exception type cx_csv_parse_error
exporting
message = msg.
endif.
else.
if char is initial. " Space
concatenate csvvalue ` ` into csvvalue.
else.
concatenate csvvalue char into csvvalue.
endif.
endif.
else.
append csvvalue to csvvalues.
clear csvvalue.
endif.
pos = pos + 1.
endwhile.
append csvvalue to csvvalues. " Don't forget the last value
returning = csvvalues.
endmethod. "_parse_line
endclass. "CL_CSV_PARSER IMPLEMENTATION

View File

@@ -0,0 +1,110 @@
(* ****** ****** *)
//
// HX-2014-01
// CoYoneda Lemma:
//
(* ****** ****** *)
//
#include
"share/atspre_staload.hats"
//
(* ****** ****** *)
staload
"libats/ML/SATS/basis.sats"
staload
"libats/ML/SATS/list0.sats"
(* ****** ****** *)
staload _ = "libats/ML/DATS/list0.dats"
(* ****** ****** *)
sortdef ftype = type -> type
(* ****** ****** *)
infixr (->) ->>
typedef ->> (a:type, b:type) = a -<cloref1> b
(* ****** ****** *)
typedef
functor(F:ftype) =
{a,b:type} (a ->> b) ->> F(a) ->> F(b)
(* ****** ****** *)
typedef
list0 (a:type) = list0 (a)
extern
val functor_list0 : functor (list0)
(* ****** ****** *)
implement
functor_list0{a,b}
(f) = lam xs => list0_map<a><b> (xs, f)
(* ****** ****** *)
datatype
CoYoneda
(F:ftype, r:type) = {a:type} CoYoneda of (a ->> r, F(a))
// end of [CoYoneda]
(* ****** ****** *)
//
extern
fun CoYoneda_phi
: {F:ftype}functor(F) -> {r:type} (F (r) ->> CoYoneda (F, r))
extern
fun CoYoneda_psi
: {F:ftype}functor(F) -> {r:type} (CoYoneda (F, r) ->> F (r))
//
(* ****** ****** *)
implement
CoYoneda_phi(ftor) = lam (fx) => CoYoneda (lam x => x, fx)
implement
CoYoneda_psi(ftor) = lam (CoYoneda(f, fx)) => ftor (f) (fx)
(* ****** ****** *)
datatype int0 = I of (int)
datatype bool = True | False // boxed boolean
(* ****** ****** *)
//
fun bool2string
(x:bool): string =
(
case+ x of True() => "True" | False() => "False"
)
//
implement
fprint_val<bool> (out, x) = fprint (out, bool2string(x))
//
(* ****** ****** *)
fun int2bool (i: int0): bool =
let val+I(i) = i in if i > 0 then True else False end
(* ****** ****** *)
val myintlist0 = g0ofg1($list{int0}((I)1, (I)0, (I)1, (I)0, (I)0))
val myboolist0 = CoYoneda{list0,bool}{int0}(lam (i) => int2bool(i), myintlist0)
val myboolist0 = CoYoneda_psi{list0}(functor_list0){bool}(myboolist0)
(* ****** ****** *)
val ((*void*)) = fprintln! (stdout_ref, "myboolist0 = ", myboolist0)
(* ****** ****** *)
implement main0 () = ()
(* ****** ****** *)
(* end of [CoYonedaLemma.dats] *)

View File

@@ -0,0 +1,178 @@
(* ****** ****** *)
//
// HX-2013-11
//
// Implementing a variant of
// the problem of Dining Philosophers
//
(* ****** ****** *)
//
#include
"share/atspre_define.hats"
#include
"share/atspre_staload.hats"
//
(* ****** ****** *)
staload
UN = "prelude/SATS/unsafe.sats"
(* ****** ****** *)
staload "libc/SATS/stdlib.sats"
staload "libc/SATS/unistd.sats"
(* ****** ****** *)
staload "{$LIBATSHWXI}/teaching/mythread/SATS/channel.sats"
(* ****** ****** *)
staload _ = "libats/DATS/deqarray.dats"
staload _ = "{$LIBATSHWXI}/teaching/mythread/DATS/channel.dats"
(* ****** ****** *)
staload "./DiningPhil2.sats"
(* ****** ****** *)
implement phil_left (n) = n
implement phil_right (n) = (n+1) \nmod NPHIL
(* ****** ****** *)
//
extern
fun randsleep (n: intGte(1)): void
//
implement
randsleep (n) =
ignoret (sleep($UN.cast{uInt}(rand() mod n + 1)))
// end of [randsleep]
//
(* ****** ****** *)
implement
phil_think (n) =
{
val () = println! ("phil_think(", n, ") starts")
val () = randsleep (6)
val () = println! ("phil_think(", n, ") finishes")
}
(* ****** ****** *)
implement
phil_dine (n, lf, rf) =
{
val () = println! ("phil_dine(", n, ") starts")
val () = randsleep (3)
val () = println! ("phil_dine(", n, ") finishes")
}
(* ****** ****** *)
implement
phil_loop (n) = let
//
val () = phil_think (n)
//
val nl = phil_left (n)
val nr = phil_right (n)
//
val ch_lfork = fork_changet (nl)
val ch_rfork = fork_changet (nr)
//
val lf = channel_takeout (ch_lfork)
val () = println! ("phil_loop(", n, ") picks left fork")
//
val () = randsleep (2) // HX: try to actively induce deadlock
//
val rf = channel_takeout (ch_rfork)
val () = println! ("phil_loop(", n, ") picks right fork")
//
val () = phil_dine (n, lf, rf)
//
val ch_forktray = forktray_changet ()
val () = channel_insert (ch_forktray, lf)
val () = channel_insert (ch_forktray, rf)
//
in
phil_loop (n)
end // end of [phil_loop]
(* ****** ****** *)
implement
cleaner_wash (f) =
{
val f = fork_get_num (f)
val () = println! ("cleaner_wash(", f, ") starts")
val () = randsleep (1)
val () = println! ("cleaner_wash(", f, ") finishes")
}
(* ****** ****** *)
implement
cleaner_return (f) =
{
val n = fork_get_num (f)
val ch = fork_changet (n)
val () = channel_insert (ch, f)
}
(* ****** ****** *)
implement
cleaner_loop () = let
//
val ch = forktray_changet ()
val f0 = channel_takeout (ch)
//
val () = cleaner_wash (f0)
val () = cleaner_return (f0)
//
in
cleaner_loop ()
end // end of [cleaner_loop]
(* ****** ****** *)
dynload "DiningPhil2.sats"
dynload "DiningPhil2_fork.dats"
dynload "DiningPhil2_thread.dats"
(* ****** ****** *)
local
//
staload
"{$LIBATSHWXI}/teaching/mythread/SATS/mythread.sats"
//
in (* in of [local] *)
//
val () = mythread_create_cloptr (llam () => phil_loop (0))
val () = mythread_create_cloptr (llam () => phil_loop (1))
val () = mythread_create_cloptr (llam () => phil_loop (2))
val () = mythread_create_cloptr (llam () => phil_loop (3))
val () = mythread_create_cloptr (llam () => phil_loop (4))
//
val () = mythread_create_cloptr (llam () => cleaner_loop ())
//
end // end of [local]
(* ****** ****** *)
implement
main0 () =
{
//
val () = println! ("DiningPhil2: starting")
val ((*void*)) = while (true) ignoret (sleep(1))
//
} (* end of [main0] *)
(* ****** ****** *)
(* end of [DiningPhil2.dats] *)

View File

@@ -0,0 +1,71 @@
(* ****** ****** *)
//
// HX-2013-11
//
// Implementing a variant of
// the problem of Dining Philosophers
//
(* ****** ****** *)
#include
"share/atspre_define.hats"
(* ****** ****** *)
staload "{$LIBATSHWXI}/teaching/mythread/SATS/channel.sats"
(* ****** ****** *)
%{#
#define NPHIL 5
%} // end of [%{#]
#define NPHIL 5
(* ****** ****** *)
typedef nphil = natLt(NPHIL)
(* ****** ****** *)
fun phil_left (n: nphil): nphil
fun phil_right (n: nphil): nphil
(* ****** ****** *)
//
fun phil_loop (n: nphil): void
//
(* ****** ****** *)
fun cleaner_loop ((*void*)): void
(* ****** ****** *)
absvtype fork_vtype = ptr
vtypedef fork = fork_vtype
(* ****** ****** *)
fun fork_get_num (!fork): nphil
(* ****** ****** *)
fun phil_dine
(n: nphil, lf: !fork, rf: !fork): void
// end of [phil_dine]
fun phil_think (n: nphil): void
(* ****** ****** *)
fun cleaner_wash (f: !fork): void
fun cleaner_return (f: fork): void
(* ****** ****** *)
//
fun fork_changet (n: nphil): channel(fork)
//
fun forktray_changet ((*void*)): channel(fork)
//
(* ****** ****** *)
(* end of [DiningPhil2.sats] *)

View File

@@ -0,0 +1,89 @@
(* ****** ****** *)
//
// HX-2013-11
//
// Implementing a variant of
// the problem of Dining Philosophers
//
(* ****** ****** *)
//
#include
"share/atspre_define.hats"
#include
"share/atspre_staload.hats"
//
(* ****** ****** *)
staload
UN = "prelude/SATS/unsafe.sats"
(* ****** ****** *)
staload "{$LIBATSHWXI}/teaching/mythread/SATS/channel.sats"
(* ****** ****** *)
staload _ = "libats/DATS/deqarray.dats"
staload _ = "{$LIBATSHWXI}/teaching/mythread/DATS/channel.dats"
(* ****** ****** *)
staload "./DiningPhil2.sats"
(* ****** ****** *)
datavtype fork = FORK of (nphil)
(* ****** ****** *)
assume fork_vtype = fork
(* ****** ****** *)
implement
fork_get_num (f) = let val FORK(n) = f in n end
(* ****** ****** *)
local
val
the_forkarray = let
//
typedef t = channel(fork)
//
implement
array_tabulate$fopr<t>
(n) = ch where
{
val n = $UN.cast{nphil}(n)
val ch = channel_create_exn<fork> (i2sz(2))
val () = channel_insert (ch, FORK (n))
}
//
in
arrayref_tabulate<t> (i2sz(NPHIL))
end // end of [val]
in (* in of [local] *)
implement fork_changet (n) = the_forkarray[n]
end // end of [local]
(* ****** ****** *)
local
val the_forktray =
channel_create_exn<fork> (i2sz(NPHIL+1))
in (* in of [local] *)
implement forktray_changet () = the_forktray
end // end of [local]
(* ****** ****** *)
(* end of [DiningPhil2_fork.dats] *)

View File

@@ -0,0 +1,43 @@
(* ****** ****** *)
//
// HX-2013-11
//
// Implementing a variant of
// the problem of Dining Philosophers
//
(* ****** ****** *)
//
#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"
//
(* ****** ****** *)
staload "{$LIBATSHWXI}/teaching/mythread/SATS/mythread.sats"
(* ****** ****** *)
local
//
#include "{$LIBATSHWXI}/teaching/mythread/DATS/mythread.dats"
//
in (* in of [local] *)
//
// HX: it is intentionally left to be empty
//
end // end of [local]
(* ****** ****** *)
local
//
#include "{$LIBATSHWXI}/teaching/mythread/DATS/mythread_posix.dats"
//
in (* in of [local] *)
//
// HX: it is intentionally left to be empty
//
end // end of [local]
(* ****** ****** *)
(* end of [DiningPhil2_thread.dats] *)

View File

@@ -0,0 +1,178 @@
(* ****** ****** *)
//
// HX-2014-01
// Yoneda Lemma:
// The hardest "trivial" theorem :)
//
(* ****** ****** *)
//
#include
"share/atspre_staload.hats"
//
(* ****** ****** *)
staload
"libats/ML/SATS/basis.sats"
staload
"libats/ML/SATS/list0.sats"
staload
"libats/ML/SATS/option0.sats"
(* ****** ****** *)
staload _ = "libats/ML/DATS/list0.dats"
staload _ = "libats/ML/DATS/option0.dats"
(* ****** ****** *)
sortdef ftype = type -> type
(* ****** ****** *)
infixr (->) ->>
typedef ->> (a:type, b:type) = a -<cloref1> b
(* ****** ****** *)
typedef
functor(F:ftype) =
{a,b:type} (a ->> b) ->> F(a) ->> F(b)
(* ****** ****** *)
typedef
list0 (a:type) = list0 (a)
extern
val functor_list0 : functor (list0)
(* ****** ****** *)
implement
functor_list0{a,b}
(f) = lam xs => list0_map<a><b> (xs, f)
(* ****** ****** *)
typedef
option0 (a:type) = option0 (a)
extern
val functor_option0 : functor (option0)
(* ****** ****** *)
implement
functor_option0{a,b}
(f) = lam opt => option0_map<a><b> (opt, f)
(* ****** ****** *)
extern
val functor_homres
: {c:type} functor (lam(r:type) => c ->> r)
(* ****** ****** *)
implement
functor_homres{c}{a,b} (f) = lam (r) => lam (x) => f (r(x))
(* ****** ****** *)
//
extern
fun Yoneda_phi : {F:ftype}functor(F) ->
{a:type}F(a) ->> ({r:type}(a ->> r) ->> F(r))
extern
fun Yoneda_psi : {F:ftype}functor(F) ->
{a:type}({r:type}(a ->> r) ->> F(r)) ->> F(a)
//
(* ****** ****** *)
//
implement
Yoneda_phi
(ftor) = lam(fx) => lam (m) => ftor(m)(fx)
//
implement
Yoneda_psi (ftor) = lam(mf) => mf(lam x => x)
//
(* ****** ****** *)
(*
(* ****** ****** *)
//
// HX-2014-01-05:
// Another version based on Natural Transformation
//
(* ****** ****** *)
typedef
natrans(F:ftype, G:ftype) = {x:type} (F(x) ->> G(x))
(* ****** ****** *)
//
extern
fun Yoneda_phi_nat : {F:ftype}functor(F) ->
{a:type} F(a) ->> natrans(lam (r:type) => (a ->> r), F)
extern
fun Yoneda_psi_nat : {F:ftype}functor(F) ->
{a:type} natrans(lam (r:type) => (a ->> r), F) ->> F(a)
//
(* ****** ****** *)
//
implement
Yoneda_phi_nat
(ftor) = lam(fx) => lam (m) => ftor(m)(fx)
//
implement
Yoneda_psi_nat (ftor) = lam(mf) => mf(lam x => x)
//
(* ****** ****** *)
*)
(* ****** ****** *)
datatype bool = True | False // boxed boolean
(* ****** ****** *)
//
fun bool2string
(x:bool): string =
(
case+ x of True() => "True" | False() => "False"
)
//
implement
fprint_val<bool> (out, x) = fprint (out, bool2string(x))
//
(* ****** ****** *)
//
val myboolist0 =
$list_t{bool}(True, False, True, False, False)
val myboolist0 = g0ofg1_list (myboolist0)
//
(* ****** ****** *)
//
extern
val Yoneda_bool_list0 : {r:type} (bool ->> r) ->> list0(r)
//
implement
Yoneda_bool_list0 =
Yoneda_phi(functor_list0){bool}(myboolist0)
//
(* ****** ****** *)
//
val myboolist1 =
Yoneda_psi(functor_list0){bool}(Yoneda_bool_list0)
//
(* ****** ****** *)
val () = fprintln! (stdout_ref, "myboolist0 = ", myboolist0)
val () = fprintln! (stdout_ref, "myboolist1 = ", myboolist1)
(* ****** ****** *)
implement main0 () = ()
(* ****** ****** *)
(* end of [YonedaLemma.dats] *)

187
samples/ATS/linset.hats Normal file
View File

@@ -0,0 +1,187 @@
(***********************************************************************)
(* *)
(* Applied Type System *)
(* *)
(***********************************************************************)
(*
** ATS/Postiats - Unleashing the Potential of Types!
** Copyright (C) 2011-2013 Hongwei Xi, ATS Trustful Software, Inc.
** All rights reserved
**
** ATS is free software; you can redistribute it and/or modify it under
** the terms of the GNU GENERAL PUBLIC LICENSE (GPL) as published by the
** Free Software Foundation; either version 3, or (at your option) any
** later version.
**
** ATS is distributed in the hope that it will be useful, but WITHOUT ANY
** WARRANTY; without even the implied warranty of MERCHANTABILITY or
** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
** for more details.
**
** You should have received a copy of the GNU General Public License
** along with ATS; see the file COPYING. If not, please write to the
** Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
** 02110-1301, USA.
*)
(* ****** ****** *)
(* Author: Hongwei Xi *)
(* Authoremail: hwxi AT cs DOT bu DOT edu *)
(* Start time: December, 2012 *)
(* ****** ****** *)
//
// HX: shared by linset_listord (* ordered list *)
// HX: shared by linset_avltree (* AVL-tree-based *)
//
(* ****** ****** *)
//
// HX-2013-02:
// for sets of nonlinear elements
//
absvtype set_vtype (a:t@ype+) = ptr
//
(* ****** ****** *)
vtypedef set (a:t0p) = set_vtype (a)
(* ****** ****** *)
fun{a:t0p}
compare_elt_elt (x1: a, x2: a):<> int
(* ****** ****** *)
fun{} linset_nil{a:t0p} ():<> set(a)
fun{} linset_make_nil{a:t0p} ():<> set(a)
(* ****** ****** *)
fun{a:t0p} linset_sing (x: a):<!wrt> set(a)
fun{a:t0p} linset_make_sing (x: a):<!wrt> set(a)
(* ****** ****** *)
fun{a:t0p}
linset_make_list (xs: List(INV(a))):<!wrt> set(a)
(* ****** ****** *)
fun{}
linset_is_nil {a:t0p} (xs: !set(INV(a))):<> bool
fun{}
linset_isnot_nil {a:t0p} (xs: !set(INV(a))):<> bool
(* ****** ****** *)
fun{a:t0p} linset_size (!set(INV(a))): size_t
(* ****** ****** *)
fun{a:t0p}
linset_is_member (xs: !set(INV(a)), x0: a):<> bool
fun{a:t0p}
linset_isnot_member (xs: !set(INV(a)), x0: a):<> bool
(* ****** ****** *)
fun{a:t0p}
linset_copy (!set(INV(a))):<!wrt> set(a)
fun{a:t0p}
linset_free (xs: set(INV(a))):<!wrt> void
(* ****** ****** *)
//
fun{a:t0p}
linset_insert
(xs: &set(INV(a)) >> _, x0: a):<!wrt> bool
//
(* ****** ****** *)
//
fun{a:t0p}
linset_takeout
(
&set(INV(a)) >> _, a, res: &(a?) >> opt(a, b)
) :<!wrt> #[b:bool] bool(b) // endfun
fun{a:t0p}
linset_takeout_opt (&set(INV(a)) >> _, a):<!wrt> Option_vt(a)
//
(* ****** ****** *)
//
fun{a:t0p}
linset_remove
(xs: &set(INV(a)) >> _, x0: a):<!wrt> bool
//
(* ****** ****** *)
//
// HX: choosing an element in an unspecified manner
//
fun{a:t0p}
linset_choose
(
xs: !set(INV(a)), x: &a? >> opt (a, b)
) :<!wrt> #[b:bool] bool(b)
//
fun{a:t0p}
linset_choose_opt (xs: !set(INV(a))):<!wrt> Option_vt(a)
//
(* ****** ****** *)
fun{a:t0p}
linset_takeoutmax
(
xs: &set(INV(a)) >> _, res: &a? >> opt(a, b)
) :<!wrt> #[b:bool] bool (b)
fun{a:t0p}
linset_takeoutmax_opt (xs: &set(INV(a)) >> _):<!wrt> Option_vt(a)
(* ****** ****** *)
fun{a:t0p}
linset_takeoutmin
(
xs: &set(INV(a)) >> _, res: &a? >> opt(a, b)
) :<!wrt> #[b:bool] bool (b)
fun{a:t0p}
linset_takeoutmin_opt (xs: &set(INV(a)) >> _):<!wrt> Option_vt(a)
(* ****** ****** *)
//
fun{}
fprint_linset$sep (FILEref): void // ", "
//
fun{a:t0p}
fprint_linset (out: FILEref, xs: !set(INV(a))): void
//
overload fprint with fprint_linset
//
(* ****** ****** *)
//
fun{
a:t0p}{env:vt0p
} linset_foreach$fwork
(x: a, env: &(env) >> _): void
//
fun{a:t0p}
linset_foreach (set: !set(INV(a))): void
fun{
a:t0p}{env:vt0p
} linset_foreach_env
(set: !set(INV(a)), env: &(env) >> _): void
// end of [linset_foreach_env]
//
(* ****** ****** *)
fun{a:t0p}
linset_listize (xs: set(INV(a))): List0_vt (a)
(* ****** ****** *)
fun{a:t0p}
linset_listize1 (xs: !set(INV(a))): List0_vt (a)
(* ****** ****** *)
(* end of [linset.hats] *)

View File

@@ -0,0 +1,504 @@
(***********************************************************************)
(* *)
(* Applied Type System *)
(* *)
(***********************************************************************)
(*
** ATS/Postiats - Unleashing the Potential of Types!
** Copyright (C) 2011-2013 Hongwei Xi, ATS Trustful Software, Inc.
** All rights reserved
**
** ATS is free software; you can redistribute it and/or modify it under
** the terms of the GNU GENERAL PUBLIC LICENSE (GPL) as published by the
** Free Software Foundation; either version 3, or (at your option) any
** later version.
**
** ATS is distributed in the hope that it will be useful, but WITHOUT ANY
** WARRANTY; without even the implied warranty of MERCHANTABILITY or
** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
** for more details.
**
** You should have received a copy of the GNU General Public License
** along with ATS; see the file COPYING. If not, please write to the
** Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
** 02110-1301, USA.
*)
(* ****** ****** *)
(* Author: Hongwei Xi *)
(* Authoremail: hwxi AT cs DOT bu DOT edu *)
(* Start time: February, 2013 *)
(* ****** ****** *)
//
// HX-2013-08:
// a set is represented as a sorted list in descending order;
// note that descending order is chosen to faciliate set comparison
//
(* ****** ****** *)
staload
UN = "prelude/SATS/unsafe.sats"
(* ****** ****** *)
staload "libats/SATS/linset_listord.sats"
(* ****** ****** *)
#include "./SHARE/linset.hats" // code reuse
#include "./SHARE/linset_node.hats" // code reuse
(* ****** ****** *)
assume
set_vtype (elt:t@ype) = List0_vt (elt)
(* ****** ****** *)
implement{}
linset_nil () = list_vt_nil ()
implement{}
linset_make_nil () = list_vt_nil ()
(* ****** ****** *)
implement
{a}(*tmp*)
linset_sing
(x) = list_vt_cons{a}(x, list_vt_nil)
// end of [linset_sing]
implement{a}
linset_make_sing
(x) = list_vt_cons{a}(x, list_vt_nil)
// end of [linset_make_sing]
(* ****** ****** *)
implement{}
linset_is_nil (xs) = list_vt_is_nil (xs)
implement{}
linset_isnot_nil (xs) = list_vt_is_cons (xs)
(* ****** ****** *)
implement{a}
linset_size (xs) =
let val n = list_vt_length(xs) in i2sz(n) end
// end of [linset_size]
(* ****** ****** *)
implement{a}
linset_is_member
(xs, x0) = let
//
fun aux
{n:nat} .<n>.
(
xs: !list_vt (a, n)
) :<> bool = let
in
//
case+ xs of
| list_vt_cons (x, xs) => let
val sgn = compare_elt_elt<a> (x0, x) in
if sgn > 0 then false else (if sgn < 0 then aux (xs) else true)
end // end of [list_vt_cons]
| list_vt_nil ((*void*)) => false
//
end // end of [aux]
//
in
aux (xs)
end // end of [linset_is_member]
(* ****** ****** *)
implement{a}
linset_copy (xs) = list_vt_copy<a> (xs)
implement{a}
linset_free (xs) = list_vt_free<a> (xs)
(* ****** ****** *)
implement{a}
linset_insert
(xs, x0) = let
//
fun
mynode_cons
{n:nat} .<>.
(
nx: mynode1 (a), xs: list_vt (a, n)
) : list_vt (a, n+1) = let
//
val xs1 =
$UN.castvwtp0{List1_vt(a)}(nx)
val+@list_vt_cons (_, xs2) = xs1
prval () = $UN.cast2void (xs2); val () = (xs2 := xs)
//
in
fold@ (xs1); xs1
end // end of [mynode_cons]
//
fun ins
{n:nat} .<n>. // tail-recursive
(
xs: &list_vt (a, n) >> list_vt (a, n1)
) : #[n1:nat | n <= n1; n1 <= n+1] bool =
(
case+ xs of
| @list_vt_cons
(x, xs1) => let
val sgn =
compare_elt_elt<a> (x0, x)
// end of [val]
in
if sgn > 0 then let
prval () = fold@ (xs)
val nx = mynode_make_elt<a> (x0)
val ((*void*)) = xs := mynode_cons (nx, xs)
in
false
end else if sgn < 0 then let
val ans = ins (xs1)
prval () = fold@ (xs)
in
ans
end else let // [x0] is found
prval () = fold@ (xs)
in
true (* [x0] in [xs] *)
end (* end of [if] *)
end // end of [list_vt_cons]
| list_vt_nil () => let
val nx = mynode_make_elt<a> (x0)
val ((*void*)) = xs := mynode_cons (nx, xs)
in
false
end // end of [list_vt_nil]
) (* end of [ins] *)
//
in
$effmask_all (ins (xs))
end // end of [linset_insert]
(* ****** ****** *)
(*
//
HX-2013-08:
[linset_remove] moved up
//
implement{a}
linset_remove
(xs, x0) = let
//
fun rem
{n:nat} .<n>. // tail-recursive
(
xs: &list_vt (a, n) >> list_vt (a, n1)
) : #[n1:nat | n1 <= n; n <= n1+1] bool =
(
case+ xs of
| @list_vt_cons
(x, xs1) => let
val sgn =
compare_elt_elt<a> (x0, x)
// end of [val]
in
if sgn > 0 then let
prval () = fold@ (xs)
in
false
end else if sgn < 0 then let
val ans = rem (xs1)
prval () = fold@ (xs)
in
ans
end else let // x0 = x
val xs1_ = xs1
val ((*void*)) = free@{a}{0}(xs)
val () = xs := xs1_
in
true // [x0] in [xs]
end (* end of [if] *)
end // end of [list_vt_cons]
| list_vt_nil () => false
) (* end of [rem] *)
//
in
$effmask_all (rem (xs))
end // end of [linset_remove]
*)
(* ****** ****** *)
(*
** By Brandon Barker
*)
implement
{a}(*tmp*)
linset_choose
(xs, x0) = let
in
//
case+ xs of
| list_vt_cons
(x, xs1) => let
val () = x0 := x
prval () = opt_some{a}(x0)
in
true
end // end of [list_vt_cons]
| list_vt_nil () => let
prval () = opt_none{a}(x0)
in
false
end // end of [list_vt_nil]
//
end // end of [linset_choose]
(* ****** ****** *)
implement
{a}{env}
linset_foreach_env (xs, env) = let
//
implement
list_vt_foreach$fwork<a><env>
(x, env) = linset_foreach$fwork<a><env> (x, env)
//
in
list_vt_foreach_env<a><env> (xs, env)
end // end of [linset_foreach_env]
(* ****** ****** *)
implement{a}
linset_listize (xs) = xs
(* ****** ****** *)
implement{a}
linset_listize1 (xs) = list_vt_copy (xs)
(* ****** ****** *)
//
// HX: functions for processing mynodes
//
(* ****** ****** *)
implement{
} mynode_null{a} () =
$UN.castvwtp0{mynode(a,null)}(the_null_ptr)
// end of [mynode_null]
(* ****** ****** *)
implement
{a}(*tmp*)
mynode_make_elt
(x) = let
//
val nx = list_vt_cons{a}{0}(x, _ )
//
in
$UN.castvwtp0{mynode1(a)}(nx)
end // end of [mynode_make_elt]
(* ****** ****** *)
implement{
} mynode_free
{a}(nx) = () where {
val nx =
$UN.castvwtp0{List1_vt(a)}(nx)
//
val+~list_vt_cons (_, nx2) = nx
//
prval ((*void*)) = $UN.cast2void (nx2)
//
} (* end of [mynode_free] *)
(* ****** ****** *)
implement
{a}(*tmp*)
mynode_get_elt
(nx) = (x) where {
//
val nx1 =
$UN.castvwtp1{List1_vt(a)}(nx)
//
val+list_vt_cons (x, _) = nx1
//
prval ((*void*)) = $UN.cast2void (nx1)
//
} (* end of [mynode_get_elt] *)
(* ****** ****** *)
implement
{a}(*tmp*)
mynode_set_elt
{l} (nx, x0) =
{
//
val nx1 =
$UN.castvwtp1{List1_vt(a)}(nx)
//
val+@list_vt_cons (x, _) = nx1
//
val () = x := x0
//
prval () = fold@ (nx1)
prval () = $UN.cast2void (nx1)
//
prval () = __assert (nx) where
{
extern praxi __assert (nx: !mynode(a?, l) >> mynode (a, l)): void
} (* end of [prval] *)
//
} (* end of [mynode_set_elt] *)
(* ****** ****** *)
implement
{a}(*tmp*)
mynode_getfree_elt
(nx) = (x) where {
//
val nx =
$UN.castvwtp0{List1_vt(a)}(nx)
//
val+~list_vt_cons (x, nx2) = nx
//
prval ((*void*)) = $UN.cast2void (nx2)
//
} (* end of [mynode_getfree_elt] *)
(* ****** ****** *)
(*
fun{a:t0p}
linset_takeout_ngc
(set: &set(INV(a)) >> _, x0: a):<!wrt> mynode0 (a)
// end of [linset_takeout_ngc]
*)
implement
{a}(*tmp*)
linset_takeout_ngc
(set, x0) = let
//
fun takeout
(
xs: &List0_vt (a) >> _
) : mynode0(a) = let
in
//
case+ xs of
| @list_vt_cons
(x, xs1) => let
prval pf_x = view@x
prval pf_xs1 = view@xs1
val sgn =
compare_elt_elt<a> (x0, x)
// end of [val]
in
if sgn > 0 then let
prval () = fold@ (xs)
in
mynode_null{a}((*void*))
end else if sgn < 0 then let
val res = takeout (xs1)
prval ((*void*)) = fold@ (xs)
in
res
end else let // x0 = x
val xs1_ = xs1
val res = $UN.castvwtp0{mynode1(a)}((pf_x, pf_xs1 | xs))
val () = xs := xs1_
in
res // [x0] in [xs]
end (* end of [if] *)
end // end of [list_vt_cons]
| list_vt_nil () => mynode_null{a}((*void*))
//
end (* end of [takeout] *)
//
in
$effmask_all (takeout (set))
end // end of [linset_takeout_ngc]
(* ****** ****** *)
implement
{a}(*tmp*)
linset_takeoutmax_ngc
(xs) = let
in
//
case+ xs of
| @list_vt_cons
(x, xs1) => let
prval pf_x = view@x
prval pf_xs1 = view@xs1
val xs_ = xs
val () = xs := xs1
in
$UN.castvwtp0{mynode1(a)}((pf_x, pf_xs1 | xs_))
end // end of [list_vt_cons]
| @list_vt_nil () => let
prval () = fold@ (xs)
in
mynode_null{a}((*void*))
end // end of [list_vt_nil]
//
end // end of [linset_takeoutmax_ngc]
(* ****** ****** *)
implement
{a}(*tmp*)
linset_takeoutmin_ngc
(xs) = let
//
fun unsnoc
{n:pos} .<n>.
(
xs: &list_vt (a, n) >> list_vt (a, n-1)
) :<!wrt> mynode1 (a) = let
//
val+@list_vt_cons (x, xs1) = xs
//
prval pf_x = view@x and pf_xs1 = view@xs1
//
in
//
case+ xs1 of
| list_vt_cons _ =>
let val res = unsnoc(xs1) in fold@xs; res end
// end of [list_vt_cons]
| list_vt_nil () => let
val xs_ = xs
val () = xs := list_vt_nil{a}()
in
$UN.castvwtp0{mynode1(a)}((pf_x, pf_xs1 | xs_))
end // end of [list_vt_nil]
//
end // end of [unsnoc]
//
in
//
case+ xs of
| list_vt_cons _ => unsnoc (xs)
| list_vt_nil () => mynode_null{a}((*void*))
//
end // end of [linset_takeoutmin_ngc]
(* ****** ****** *)
(* end of [linset_listord.dats] *)

View File

@@ -0,0 +1,51 @@
(***********************************************************************)
(* *)
(* Applied Type System *)
(* *)
(***********************************************************************)
(*
** ATS/Postiats - Unleashing the Potential of Types!
** Copyright (C) 2011-2013 Hongwei Xi, ATS Trustful Software, Inc.
** All rights reserved
**
** ATS is free software; you can redistribute it and/or modify it under
** the terms of the GNU GENERAL PUBLIC LICENSE (GPL) as published by the
** Free Software Foundation; either version 3, or (at your option) any
** later version.
**
** ATS is distributed in the hope that it will be useful, but WITHOUT ANY
** WARRANTY; without even the implied warranty of MERCHANTABILITY or
** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
** for more details.
**
** You should have received a copy of the GNU General Public License
** along with ATS; see the file COPYING. If not, please write to the
** Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
** 02110-1301, USA.
*)
(* ****** ****** *)
//
// Author: Hongwei Xi
// Authoremail: hwxiATcsDOTbuDOTedu
// Time: October, 2010
//
(* ****** ****** *)
#define ATS_PACKNAME "ATSLIB.libats.linset_listord"
#define ATS_STALOADFLAG 0 // no static loading at run-time
(* ****** ****** *)
#include "./SHARE/linset.hats"
#include "./SHARE/linset_node.hats"
(* ****** ****** *)
castfn
linset2list {a:t0p} (xs: set (INV(a))):<> List0_vt (a)
(* ****** ****** *)
(* end of [linset_listord.sats] *)

215
samples/ATS/main.atxt Normal file
View File

@@ -0,0 +1,215 @@
%{
#include "./../ATEXT/atextfun.hats"
%}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>EFFECTIVATS-DiningPhil2</title>
#patscode_style()
</head>
<body>
<h1>
Effective ATS: Dining Philosophers
</h1>
In this article, I present an implementation of a slight variant of the
famous problem of 5-Dining-Philosophers by Dijkstra that makes simple but
convincing use of linear types.
<h2>
The Original Problem
</h2>
There are five philosophers sitting around a table and there are also 5
forks placed on the table such that each fork is located between the left
hand of a philosopher and the right hand of another philosopher. Each
philosopher does the following routine repeatedly: thinking and dining. In
order to dine, a philosopher needs to first acquire two forks: one located
on his left-hand side and the other on his right-hand side. After
finishing dining, a philosopher puts the two acquired forks onto the table:
one on his left-hand side and the other on his right-hand side.
<h2>
A Variant of the Original Problem
</h2>
The following twist is added to the original version:
<p>
After a fork is used, it becomes a "dirty" fork and needs to be put in a
tray for dirty forks. There is a cleaner who cleans dirty forks and then
puts them back on the table.
<h2>
Channels for Communication
</h2>
A channel is just a shared queue of fixed capacity. The following two
functions are for inserting an element into and taking an element out of a
given channel:
<pre
class="patsyntax">
#pats2xhtml_sats("\
fun{a:vt0p} channel_insert (channel (a), a): void
fun{a:vt0p} channel_takeout (chan: channel (a)): (a)
")</pre>
If [channel_insert] is called on a channel that is full, then the caller is
blocked until an element is taken out of the channel. If [channel_takeout]
is called on a channel that is empty, then the caller is blocked until an
element is inserted into the channel.
<h2>
A Channel for Each Fork
</h2>
Forks are resources given a linear type. Each fork is initially stored in a
channel, which can be obtained by calling the following function:
<pre
class="patsyntax">
#pats2xhtml_sats("\
fun fork_changet (n: nphil): channel(fork)
")</pre>
where the type [nphil] is defined to be [natLt(5)] (for natural numbers
less than 5). The channels for storing forks are chosen to be of capacity
2. The reason that channels of capacity 2 are chosen to store at most one
element (in each of them) is to guarantee that these channels can never be
full (so that there is no attempt made to send signals to awake callers
supposedly being blocked due to channels being full).
<h2>
A Channel for the Fork Tray
</h2>
A tray for storing "dirty" forks is also a channel, which can be obtained
by calling the following function:
<pre
class="patsyntax">
#pats2xhtml_sats("\
fun forktray_changet ((*void*)): channel(fork)
")</pre>
The capacity chosen for the channel is 6 (instead of 5) so that it can
never become full (as there are only 5 forks in total).
<h2>
Philosopher Loop
</h2>
Each philosopher is implemented as a loop:
<pre
class="patsyntax">
#pats2xhtml_dats('\
implement
phil_loop (n) = let
//
val () = phil_think (n)
//
val nl = phil_left (n) // = n
val nr = phil_right (n) // = (n+1) % 5
//
val ch_lfork = fork_changet (nl)
val ch_rfork = fork_changet (nr)
//
val lf = channel_takeout (ch_lfork)
val () = println! ("phil_loop(", n, ") picks left fork")
//
val () = randsleep (2) // sleep up to 2 seconds
//
val rf = channel_takeout (ch_rfork)
val () = println! ("phil_loop(", n, ") picks right fork")
//
val () = phil_dine (n, lf, rf)
//
val ch_forktray = forktray_changet ()
val () = channel_insert (ch_forktray, lf) // left fork to dirty tray
val () = channel_insert (ch_forktray, rf) // right fork to dirty tray
//
in
phil_loop (n)
end // end of [phil_loop]
')</pre>
It should be straighforward to follow the code for [phil_loop].
<h2>
Fork Cleaner Loop
</h2>
A cleaner is implemented as a loop:
<pre
class="patsyntax">
#pats2xhtml_dats('\
implement
cleaner_loop () = let
//
val ch = forktray_changet ()
val f0 = channel_takeout (ch) // [f0] is dirty
//
val () = cleaner_wash (f0) // washes dirty [f0]
val () = cleaner_return (f0) // puts back cleaned [f0]
//
in
cleaner_loop ()
end // end of [cleaner_loop]
')</pre>
The function [cleaner_return] first finds out the number of a given fork
and then uses the number to locate the channel for storing the fork. Its
actual implementation is given as follows:
<pre
class="patsyntax">
#pats2xhtml_dats('\
implement
cleaner_return (f) =
{
val n = fork_get_num (f)
val ch = fork_changet (n)
val () = channel_insert (ch, f)
}
')</pre>
It should now be straighforward to follow the code for [cleaner_loop].
<h2>
Testing
</h2>
The entire code of this implementation is stored in the following files:
<pre>
DiningPhil2.sats
DiningPhil2.dats
DiningPhil2_fork.dats
DiningPhil2_thread.dats
</pre>
There is also a Makefile available for compiling the ATS source code into
an excutable for testing. One should be able to encounter a deadlock after
running the simulation for a while.
<hr size="2">
This article is written by <a href="http://www.cs.bu.edu/~hwxi/">Hongwei Xi</a>.
</body>
</html>
%{
implement main () = fprint_filsub (stdout_ref, "main_atxt.txt")
%}

39
samples/Agda/NatCat.agda Normal file
View File

@@ -0,0 +1,39 @@
module NatCat where
open import Relation.Binary.PropositionalEquality
-- If you can show that a relation only ever has one inhabitant
-- you get the category laws for free
module
EasyCategory
(obj : Set)
(_⟶_ : obj obj Set)
(_∘_ : {x y z} x y y z x z)
(id : x x x)
(single-inhabitant : (x y : obj) (r s : x y) r s)
where
idʳ : x y (r : x y) r id y r
idʳ x y r = single-inhabitant x y (r id y) r
idˡ : x y (r : x y) id x r r
idˡ x y r = single-inhabitant x y (id x r) r
∘-assoc : w x y z (r : w x) (s : x y) (t : y z) (r s) t r (s t)
∘-assoc w x y z r s t = single-inhabitant w z ((r s) t) (r (s t))
open import Data.Nat
same : (x y : ) (r s : x y) r s
same .0 y z≤n z≤n = refl
same .(suc m) .(suc n) (s≤s {m} {n} r) (s≤s s) = cong s≤s (same m n r s)
≤-trans : x y z x y y z x z
≤-trans .0 y z z≤n s = z≤n
≤-trans .(suc m) .(suc n) .(suc n₁) (s≤s {m} {n} r) (s≤s {.n} {n₁} s) = s≤s (≤-trans m n n₁ r s)
≤-refl : x x x
≤-refl zero = z≤n
≤-refl (suc x) = s≤s (≤-refl x)
module Nat-EasyCategory = EasyCategory _≤_ (λ {x}{y}{z} ≤-trans x y z) ≤-refl same

View File

@@ -0,0 +1,59 @@
module examples/systems/file_system
/*
* Model of a generic file system.
*/
abstract sig Object {}
sig Name {}
sig File extends Object {} { some d: Dir | this in d.entries.contents }
sig Dir extends Object {
entries: set DirEntry,
parent: lone Dir
} {
parent = this.~@contents.~@entries
all e1, e2 : entries | e1.name = e2.name => e1 = e2
this !in this.^@parent
this != Root => Root in this.^@parent
}
one sig Root extends Dir {} { no parent }
lone sig Cur extends Dir {}
sig DirEntry {
name: Name,
contents: Object
} {
one this.~entries
}
/**
* all directories besides root have one parent
*/
pred OneParent_buggyVersion {
all d: Dir - Root | one d.parent
}
/**
* all directories besides root have one parent
*/
pred OneParent_correctVersion {
all d: Dir - Root | (one d.parent && one contents.d)
}
/**
* Only files may be linked (that is, have more than one entry)
* That is, all directories are the contents of at most one directory entry
*/
pred NoDirAliases {
all o: Dir | lone o.~contents
}
check { OneParent_buggyVersion => NoDirAliases } for 5 expect 1
check { OneParent_correctVersion => NoDirAliases } for 5 expect 0

View File

@@ -0,0 +1,83 @@
module examples/systems/marksweepgc
/*
* Model of mark and sweep garbage collection.
*/
// a node in the heap
sig Node {}
sig HeapState {
left, right : Node -> lone Node,
marked : set Node,
freeList : lone Node
}
pred clearMarks[hs, hs' : HeapState] {
// clear marked set
no hs'.marked
// left and right fields are unchanged
hs'.left = hs.left
hs'.right = hs.right
}
/**
* simulate the recursion of the mark() function using transitive closure
*/
fun reachable[hs: HeapState, n: Node] : set Node {
n + n.^(hs.left + hs.right)
}
pred mark[hs: HeapState, from : Node, hs': HeapState] {
hs'.marked = hs.reachable[from]
hs'.left = hs.left
hs'.right = hs.right
}
/**
* complete hack to simulate behavior of code to set freeList
*/
pred setFreeList[hs, hs': HeapState] {
// especially hackish
hs'.freeList.*(hs'.left) in (Node - hs.marked)
all n: Node |
(n !in hs.marked) => {
no hs'.right[n]
hs'.left[n] in (hs'.freeList.*(hs'.left))
n in hs'.freeList.*(hs'.left)
} else {
hs'.left[n] = hs.left[n]
hs'.right[n] = hs.right[n]
}
hs'.marked = hs.marked
}
pred GC[hs: HeapState, root : Node, hs': HeapState] {
some hs1, hs2: HeapState |
hs.clearMarks[hs1] && hs1.mark[root, hs2] && hs2.setFreeList[hs']
}
assert Soundness1 {
all h, h' : HeapState, root : Node |
h.GC[root, h'] =>
(all live : h.reachable[root] | {
h'.left[live] = h.left[live]
h'.right[live] = h.right[live]
})
}
assert Soundness2 {
all h, h' : HeapState, root : Node |
h.GC[root, h'] =>
no h'.reachable[root] & h'.reachable[h'.freeList]
}
assert Completeness {
all h, h' : HeapState, root : Node |
h.GC[root, h'] =>
(Node - h'.reachable[root]) in h'.reachable[h'.freeList]
}
check Soundness1 for 3 expect 0
check Soundness2 for 3 expect 0
check Completeness for 3 expect 0

217
samples/Alloy/views.als Normal file
View File

@@ -0,0 +1,217 @@
module examples/systems/views
/*
* Model of views in object-oriented programming.
*
* Two object references, called the view and the backing,
* are related by a view mechanism when changes to the
* backing are automatically propagated to the view. Note
* that the state of a view need not be a projection of the
* state of the backing; the keySet method of Map, for
* example, produces two view relationships, and for the
* one in which the map is modified by changes to the key
* set, the value of the new map cannot be determined from
* the key set. Note that in the iterator view mechanism,
* the iterator is by this definition the backing object,
* since changes are propagated from iterator to collection
* and not vice versa. Oddly, a reference may be a view of
* more than one backing: there can be two iterators on the
* same collection, eg. A reference cannot be a view under
* more than one view type.
*
* A reference is made dirty when it is a backing for a view
* with which it is no longer related by the view invariant.
* This usually happens when a view is modified, either
* directly or via another backing. For example, changing a
* collection directly when it has an iterator invalidates
* it, as does changing the collection through one iterator
* when there are others.
*
* More work is needed if we want to model more closely the
* failure of an iterator when its collection is invalidated.
*
* As a terminological convention, when there are two
* complementary view relationships, we will give them types
* t and t'. For example, KeySetView propagates from map to
* set, and KeySetView' propagates from set to map.
*
* author: Daniel Jackson
*/
open util/ordering[State] as so
open util/relation as rel
sig Ref {}
sig Object {}
-- t->b->v in views when v is view of type t of backing b
-- dirty contains refs that have been invalidated
sig State {
refs: set Ref,
obj: refs -> one Object,
views: ViewType -> refs -> refs,
dirty: set refs
-- , anyviews: Ref -> Ref -- for visualization
}
-- {anyviews = ViewType.views}
sig Map extends Object {
keys: set Ref,
map: keys -> one Ref
}{all s: State | keys + Ref.map in s.refs}
sig MapRef extends Ref {}
fact {State.obj[MapRef] in Map}
sig Iterator extends Object {
left, done: set Ref,
lastRef: lone done
}{all s: State | done + left + lastRef in s.refs}
sig IteratorRef extends Ref {}
fact {State.obj[IteratorRef] in Iterator}
sig Set extends Object {
elts: set Ref
}{all s: State | elts in s.refs}
sig SetRef extends Ref {}
fact {State.obj[SetRef] in Set}
abstract sig ViewType {}
one sig KeySetView, KeySetView', IteratorView extends ViewType {}
fact ViewTypes {
State.views[KeySetView] in MapRef -> SetRef
State.views[KeySetView'] in SetRef -> MapRef
State.views[IteratorView] in IteratorRef -> SetRef
all s: State | s.views[KeySetView] = ~(s.views[KeySetView'])
}
/**
* mods is refs modified directly or by view mechanism
* doesn't handle possibility of modifying an object and its view at once?
* should we limit frame conds to non-dirty refs?
*/
pred modifies [pre, post: State, rs: set Ref] {
let vr = pre.views[ViewType], mods = rs.*vr {
all r: pre.refs - mods | pre.obj[r] = post.obj[r]
all b: mods, v: pre.refs, t: ViewType |
b->v in pre.views[t] => viewFrame [t, pre.obj[v], post.obj[v], post.obj[b]]
post.dirty = pre.dirty +
{b: pre.refs | some v: Ref, t: ViewType |
b->v in pre.views[t] && !viewFrame [t, pre.obj[v], post.obj[v], post.obj[b]]
}
}
}
pred allocates [pre, post: State, rs: set Ref] {
no rs & pre.refs
post.refs = pre.refs + rs
}
/**
* models frame condition that limits change to view object from v to v' when backing object changes to b'
*/
pred viewFrame [t: ViewType, v, v', b': Object] {
t in KeySetView => v'.elts = dom [b'.map]
t in KeySetView' => b'.elts = dom [v'.map]
t in KeySetView' => (b'.elts) <: (v.map) = (b'.elts) <: (v'.map)
t in IteratorView => v'.elts = b'.left + b'.done
}
pred MapRef.keySet [pre, post: State, setRefs: SetRef] {
post.obj[setRefs].elts = dom [pre.obj[this].map]
modifies [pre, post, none]
allocates [pre, post, setRefs]
post.views = pre.views + KeySetView->this->setRefs + KeySetView'->setRefs->this
}
pred MapRef.put [pre, post: State, k, v: Ref] {
post.obj[this].map = pre.obj[this].map ++ k->v
modifies [pre, post, this]
allocates [pre, post, none]
post.views = pre.views
}
pred SetRef.iterator [pre, post: State, iterRef: IteratorRef] {
let i = post.obj[iterRef] {
i.left = pre.obj[this].elts
no i.done + i.lastRef
}
modifies [pre,post,none]
allocates [pre, post, iterRef]
post.views = pre.views + IteratorView->iterRef->this
}
pred IteratorRef.remove [pre, post: State] {
let i = pre.obj[this], i' = post.obj[this] {
i'.left = i.left
i'.done = i.done - i.lastRef
no i'.lastRef
}
modifies [pre,post,this]
allocates [pre, post, none]
pre.views = post.views
}
pred IteratorRef.next [pre, post: State, ref: Ref] {
let i = pre.obj[this], i' = post.obj[this] {
ref in i.left
i'.left = i.left - ref
i'.done = i.done + ref
i'.lastRef = ref
}
modifies [pre, post, this]
allocates [pre, post, none]
pre.views = post.views
}
pred IteratorRef.hasNext [s: State] {
some s.obj[this].left
}
assert zippishOK {
all
ks, vs: SetRef,
m: MapRef,
ki, vi: IteratorRef,
k, v: Ref |
let s0=so/first,
s1=so/next[s0],
s2=so/next[s1],
s3=so/next[s2],
s4=so/next[s3],
s5=so/next[s4],
s6=so/next[s5],
s7=so/next[s6] |
({
precondition [s0, ks, vs, m]
no s0.dirty
ks.iterator [s0, s1, ki]
vs.iterator [s1, s2, vi]
ki.hasNext [s2]
vi.hasNext [s2]
ki.this/next [s2, s3, k]
vi.this/next [s3, s4, v]
m.put [s4, s5, k, v]
ki.remove [s5, s6]
vi.remove [s6, s7]
} => no State.dirty)
}
pred precondition [pre: State, ks, vs, m: Ref] {
// all these conditions and other errors discovered in scope of 6 but 8,3
// in initial state, must have view invariants hold
(all t: ViewType, b, v: pre.refs |
b->v in pre.views[t] => viewFrame [t, pre.obj[v], pre.obj[v], pre.obj[b]])
// sets are not aliases
-- ks != vs
// sets are not views of map
-- no (ks+vs)->m & ViewType.pre.views
// no iterator currently on either set
-- no Ref->(ks+vs) & ViewType.pre.views
}
check zippishOK for 6 but 8 State, 3 ViewType expect 1
/**
* experiment with controlling heap size
*/
fact {all s: State | #s.obj < 5}

View File

@@ -0,0 +1,26 @@
ServerSignature Off
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]
RewriteCond %{THE_REQUEST} (\\r|\\n|%0A|%0D) [NC,OR]
RewriteCond %{HTTP_REFERER} (<|>||%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_COOKIE} (<|>||%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|”>|”<|/|\\\.\.\\).{0,9999} [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|curl|wget|python|nikto|scan) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>||%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
#Block mySQL injects
RewriteCond %{QUERY_STRING} (;|<|>||”|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark) [NC,OR]
RewriteCond %{QUERY_STRING} \.\./\.\. [OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} \.[a-z0-9] [NC,OR]
RewriteCond %{QUERY_STRING} (<|>||%0A|%0D|%27|%3C|%3E|%00) [NC]
# Note: The final RewriteCond must NOT use the [OR] flag.
# Return 403 Forbidden error.
RewriteRule .* index.php [F]

View File

@@ -0,0 +1,470 @@
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.2> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
#
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path. If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so "/var/log/apache2/foo.log"
# with ServerRoot set to "" will be interpreted by the
# server as "//var/log/apache2/foo.log".
#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path. If you point
# ServerRoot at a non-local disk, be sure to point the LockFile directive
# at a local disk. If you wish to share the same ServerRoot for multiple
# httpd daemons, you will need to change at least LockFile and PidFile.
#
ServerRoot ""
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule authn_file_module /usr/lib/apache2/modules/mod_authn_file.so
LoadModule authn_dbm_module /usr/lib/apache2/modules/mod_authn_dbm.so
LoadModule authn_anon_module /usr/lib/apache2/modules/mod_authn_anon.so
LoadModule authn_dbd_module /usr/lib/apache2/modules/mod_authn_dbd.so
LoadModule authn_default_module /usr/lib/apache2/modules/mod_authn_default.so
LoadModule authn_alias_module /usr/lib/apache2/modules/mod_authn_alias.so
LoadModule authz_host_module /usr/lib/apache2/modules/mod_authz_host.so
LoadModule authz_groupfile_module /usr/lib/apache2/modules/mod_authz_groupfile.so
LoadModule authz_user_module /usr/lib/apache2/modules/mod_authz_user.so
LoadModule authz_dbm_module /usr/lib/apache2/modules/mod_authz_dbm.so
LoadModule authz_owner_module /usr/lib/apache2/modules/mod_authz_owner.so
LoadModule authnz_ldap_module /usr/lib/apache2/modules/mod_authnz_ldap.so
LoadModule authz_default_module /usr/lib/apache2/modules/mod_authz_default.so
LoadModule auth_basic_module /usr/lib/apache2/modules/mod_auth_basic.so
LoadModule auth_digest_module /usr/lib/apache2/modules/mod_auth_digest.so
LoadModule file_cache_module /usr/lib/apache2/modules/mod_file_cache.so
LoadModule cache_module /usr/lib/apache2/modules/mod_cache.so
LoadModule disk_cache_module /usr/lib/apache2/modules/mod_disk_cache.so
LoadModule mem_cache_module /usr/lib/apache2/modules/mod_mem_cache.so
LoadModule dbd_module /usr/lib/apache2/modules/mod_dbd.so
LoadModule dumpio_module /usr/lib/apache2/modules/mod_dumpio.so
LoadModule ext_filter_module /usr/lib/apache2/modules/mod_ext_filter.so
LoadModule include_module /usr/lib/apache2/modules/mod_include.so
LoadModule filter_module /usr/lib/apache2/modules/mod_filter.so
LoadModule charset_lite_module /usr/lib/apache2/modules/mod_charset_lite.so
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
LoadModule ldap_module /usr/lib/apache2/modules/mod_ldap.so
LoadModule log_forensic_module /usr/lib/apache2/modules/mod_log_forensic.so
LoadModule env_module /usr/lib/apache2/modules/mod_env.so
LoadModule mime_magic_module /usr/lib/apache2/modules/mod_mime_magic.so
LoadModule cern_meta_module /usr/lib/apache2/modules/mod_cern_meta.so
LoadModule expires_module /usr/lib/apache2/modules/mod_expires.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
LoadModule ident_module /usr/lib/apache2/modules/mod_ident.so
LoadModule usertrack_module /usr/lib/apache2/modules/mod_usertrack.so
LoadModule unique_id_module /usr/lib/apache2/modules/mod_unique_id.so
LoadModule setenvif_module /usr/lib/apache2/modules/mod_setenvif.so
LoadModule version_module /usr/lib/apache2/modules/mod_version.so
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so
LoadModule proxy_ftp_module /usr/lib/apache2/modules/mod_proxy_ftp.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
LoadModule status_module /usr/lib/apache2/modules/mod_status.so
LoadModule autoindex_module /usr/lib/apache2/modules/mod_autoindex.so
LoadModule asis_module /usr/lib/apache2/modules/mod_asis.so
LoadModule info_module /usr/lib/apache2/modules/mod_info.so
LoadModule suexec_module /usr/lib/apache2/modules/mod_suexec.so
LoadModule cgid_module /usr/lib/apache2/modules/mod_cgid.so
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.so
LoadModule dav_lock_module /usr/lib/apache2/modules/mod_dav_lock.so
LoadModule vhost_alias_module /usr/lib/apache2/modules/mod_vhost_alias.so
LoadModule negotiation_module /usr/lib/apache2/modules/mod_negotiation.so
LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so
LoadModule imagemap_module /usr/lib/apache2/modules/mod_imagemap.so
LoadModule actions_module /usr/lib/apache2/modules/mod_actions.so
LoadModule speling_module /usr/lib/apache2/modules/mod_speling.so
LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so
LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
<IfModule !mpm_netware_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User daemon
Group daemon
</IfModule>
# 'Main' server configuration
#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition. These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#
#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated pages, such
# as error documents. e.g. admin@your-domain.com
#
ServerAdmin you@example.com
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/usr/share/apache2/default-site/htdocs"
#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/usr/share/apache2/default-site/htdocs">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here. If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog /var/log/apache2/error_log
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
CustomLog /var/log/apache2/access_log common
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
#CustomLog /var/log/apache2/access_log combined
</IfModule>
<IfModule alias_module>
#
# Redirect: Allows you to tell clients about documents that used to
# exist in your server's namespace, but do not anymore. The client
# will make a new request for the document at its new location.
# Example:
# Redirect permanent /foo http://www.example.com/bar
#
# Alias: Maps web paths into filesystem paths and is used to
# access content that does not live under the DocumentRoot.
# Example:
# Alias /webpath /full/filesystem/path
#
# If you include a trailing / on /webpath then the server will
# require it to be present in the URL. You will also likely
# need to provide a <Directory> section to allow access to
# the filesystem path.
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the target directory are treated as applications and
# run by the server when requested rather than as documents sent to the
# client. The same rules about trailing "/" apply to ScriptAlias
# directives as to Alias.
#
ScriptAlias /cgi-bin/ "/usr/lib/cgi-bin/"
</IfModule>
<IfModule cgid_module>
#
# ScriptSock: On threaded servers, designate the path to the UNIX
# socket used to communicate with the CGI daemon of mod_cgid.
#
#Scriptsock /var/run/apache2/cgisock
</IfModule>
#
# "/usr/lib/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
#
# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value. If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#
DefaultType text/plain
<IfModule mime_module>
#
# TypesConfig points to the file containing the list of mappings from
# filename extension to MIME-type.
#
TypesConfig /etc/apache2/mime.types
#
# AddType allows you to add to or override the MIME configuration
# file specified in TypesConfig for specific file types.
#
#AddType application/x-gzip .tgz
#
# AddEncoding allows you to have certain browsers uncompress
# information on the fly. Note: Not all browsers support this.
#
#AddEncoding x-compress .Z
#AddEncoding x-gzip .gz .tgz
#
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
#
# AddHandler allows you to map certain file extensions to "handlers":
# actions unrelated to filetype. These can be either built into the server
# or added with the Action directive (see below)
#
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options" directive.)
#
#AddHandler cgi-script .cgi
# For type maps (negotiated resources):
#AddHandler type-map var
#
# Filters allow you to process content before it is sent to the client.
#
# To parse .shtml files for server-side includes (SSI):
# (You will also need to add "Includes" to the "Options" directive.)
#
#AddType text/html .shtml
#AddOutputFilter INCLUDES .shtml
</IfModule>
#
# The mod_mime_magic module allows the server to use various hints from the
# contents of the file itself to determine its type. The MIMEMagicFile
# directive tells the module where the hint definitions are located.
#
#MIMEMagicFile /etc/apache2/magic
#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#
#
# EnableMMAP and EnableSendfile: On systems that support it,
# memory-mapping or the sendfile syscall is used to deliver
# files. This usually improves server performance, but must
# be turned off when serving from networked-mounted
# filesystems or if support for these functions is otherwise
# broken on your system.
#
#EnableMMAP off
#EnableSendfile off
# Supplemental configuration
#
# The configuration files in the /etc/apache2/extra/ directory can be
# included to add extra features or to modify the default configuration of
# the server, or you may simply copy their contents here and change as
# necessary.
# Server-pool management (MPM specific)
#Include /etc/apache2/extra/httpd-mpm.conf
# Multi-language error messages
#Include /etc/apache2/extra/httpd-multilang-errordoc.conf
# Fancy directory listings
#Include /etc/apache2/extra/httpd-autoindex.conf
# Language settings
#Include /etc/apache2/extra/httpd-languages.conf
# User home directories
#Include /etc/apache2/extra/httpd-userdir.conf
# Real-time info on requests and configuration
#Include /etc/apache2/extra/httpd-info.conf
# Virtual hosts
#Include /etc/apache2/extra/httpd-vhosts.conf
# Local access to the Apache HTTP Server Manual
#Include /etc/apache2/extra/httpd-manual.conf
# Distributed authoring and versioning (WebDAV)
#Include /etc/apache2/extra/httpd-dav.conf
# Various default settings
#Include /etc/apache2/extra/httpd-default.conf
# Secure (SSL/TLS) connections
#Include /etc/apache2/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

View File

@@ -0,0 +1,500 @@
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.2> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
#
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path. If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so "log/foo_log"
# with ServerRoot set to "/usr" will be interpreted by the
# server as "/usr/log/foo_log".
#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path. If you point
# ServerRoot at a non-local disk, be sure to point the LockFile directive
# at a local disk. If you wish to share the same ServerRoot for multiple
# httpd daemons, you will need to change at least LockFile and PidFile.
#
ServerRoot "/usr"
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule authn_file_module libexec/apache2/mod_authn_file.so
LoadModule authn_dbm_module libexec/apache2/mod_authn_dbm.so
LoadModule authn_anon_module libexec/apache2/mod_authn_anon.so
LoadModule authn_dbd_module libexec/apache2/mod_authn_dbd.so
LoadModule authn_default_module libexec/apache2/mod_authn_default.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache2/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache2/mod_authz_user.so
LoadModule authz_dbm_module libexec/apache2/mod_authz_dbm.so
LoadModule authz_owner_module libexec/apache2/mod_authz_owner.so
LoadModule authz_default_module libexec/apache2/mod_authz_default.so
LoadModule auth_basic_module libexec/apache2/mod_auth_basic.so
LoadModule auth_digest_module libexec/apache2/mod_auth_digest.so
LoadModule cache_module libexec/apache2/mod_cache.so
LoadModule disk_cache_module libexec/apache2/mod_disk_cache.so
LoadModule mem_cache_module libexec/apache2/mod_mem_cache.so
LoadModule dbd_module libexec/apache2/mod_dbd.so
LoadModule dumpio_module libexec/apache2/mod_dumpio.so
LoadModule reqtimeout_module libexec/apache2/mod_reqtimeout.so
LoadModule ext_filter_module libexec/apache2/mod_ext_filter.so
LoadModule include_module libexec/apache2/mod_include.so
LoadModule filter_module libexec/apache2/mod_filter.so
LoadModule substitute_module libexec/apache2/mod_substitute.so
LoadModule deflate_module libexec/apache2/mod_deflate.so
LoadModule log_config_module libexec/apache2/mod_log_config.so
LoadModule log_forensic_module libexec/apache2/mod_log_forensic.so
LoadModule logio_module libexec/apache2/mod_logio.so
LoadModule env_module libexec/apache2/mod_env.so
LoadModule mime_magic_module libexec/apache2/mod_mime_magic.so
LoadModule cern_meta_module libexec/apache2/mod_cern_meta.so
LoadModule expires_module libexec/apache2/mod_expires.so
LoadModule headers_module libexec/apache2/mod_headers.so
LoadModule ident_module libexec/apache2/mod_ident.so
LoadModule usertrack_module libexec/apache2/mod_usertrack.so
#LoadModule unique_id_module libexec/apache2/mod_unique_id.so
LoadModule setenvif_module libexec/apache2/mod_setenvif.so
LoadModule version_module libexec/apache2/mod_version.so
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
LoadModule proxy_ftp_module libexec/apache2/mod_proxy_ftp.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
LoadModule proxy_scgi_module libexec/apache2/mod_proxy_scgi.so
LoadModule proxy_ajp_module libexec/apache2/mod_proxy_ajp.so
LoadModule proxy_balancer_module libexec/apache2/mod_proxy_balancer.so
LoadModule ssl_module libexec/apache2/mod_ssl.so
LoadModule mime_module libexec/apache2/mod_mime.so
LoadModule dav_module libexec/apache2/mod_dav.so
LoadModule status_module libexec/apache2/mod_status.so
LoadModule autoindex_module libexec/apache2/mod_autoindex.so
LoadModule asis_module libexec/apache2/mod_asis.so
LoadModule info_module libexec/apache2/mod_info.so
LoadModule cgi_module libexec/apache2/mod_cgi.so
LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
LoadModule negotiation_module libexec/apache2/mod_negotiation.so
LoadModule dir_module libexec/apache2/mod_dir.so
LoadModule imagemap_module libexec/apache2/mod_imagemap.so
LoadModule actions_module libexec/apache2/mod_actions.so
LoadModule speling_module libexec/apache2/mod_speling.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule alias_module libexec/apache2/mod_alias.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
#LoadModule perl_module libexec/apache2/mod_perl.so
#LoadModule php5_module libexec/apache2/libphp5.so
#LoadModule hfs_apple_module libexec/apache2/mod_hfs_apple.so
<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User _www
Group _www
</IfModule>
</IfModule>
# 'Main' server configuration
#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition. These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#
#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated pages, such
# as error documents. e.g. admin@your-domain.com
#
ServerAdmin you@example.com
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/Library/WebServer/Documents"
#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/Library/WebServer/Documents">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks MultiViews
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<FilesMatch "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
#
# Apple specific filesystem protection.
#
<Files "rsrc">
Order allow,deny
Deny from all
Satisfy All
</Files>
<DirectoryMatch ".*\.\.namedfork">
Order allow,deny
Deny from all
Satisfy All
</DirectoryMatch>
#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here. If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog "/private/var/log/apache2/error_log"
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
CustomLog "/private/var/log/apache2/access_log" common
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
#CustomLog "/private/var/log/apache2/access_log" combined
</IfModule>
<IfModule alias_module>
#
# Redirect: Allows you to tell clients about documents that used to
# exist in your server's namespace, but do not anymore. The client
# will make a new request for the document at its new location.
# Example:
# Redirect permanent /foo http://www.example.com/bar
#
# Alias: Maps web paths into filesystem paths and is used to
# access content that does not live under the DocumentRoot.
# Example:
# Alias /webpath /full/filesystem/path
#
# If you include a trailing / on /webpath then the server will
# require it to be present in the URL. You will also likely
# need to provide a <Directory> section to allow access to
# the filesystem path.
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the target directory are treated as applications and
# run by the server when requested rather than as documents sent to the
# client. The same rules about trailing "/" apply to ScriptAlias
# directives as to Alias.
#
ScriptAliasMatch ^/cgi-bin/((?!(?i:webobjects)).*$) "/Library/WebServer/CGI-Executables/$1"
</IfModule>
<IfModule cgid_module>
#
# ScriptSock: On threaded servers, designate the path to the UNIX
# socket used to communicate with the CGI daemon of mod_cgid.
#
#Scriptsock /private/var/run/cgisock
</IfModule>
#
# "/Library/WebServer/CGI-Executables" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/Library/WebServer/CGI-Executables">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
#
# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value. If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#
DefaultType text/plain
<IfModule mime_module>
#
# TypesConfig points to the file containing the list of mappings from
# filename extension to MIME-type.
#
TypesConfig /private/etc/apache2/mime.types
#
# AddType allows you to add to or override the MIME configuration
# file specified in TypesConfig for specific file types.
#
#AddType application/x-gzip .tgz
#
# AddEncoding allows you to have certain browsers uncompress
# information on the fly. Note: Not all browsers support this.
#
#AddEncoding x-compress .Z
#AddEncoding x-gzip .gz .tgz
#
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
#
# AddHandler allows you to map certain file extensions to "handlers":
# actions unrelated to filetype. These can be either built into the server
# or added with the Action directive (see below)
#
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options" directive.)
#
#AddHandler cgi-script .cgi
# For type maps (negotiated resources):
#AddHandler type-map var
#
# Filters allow you to process content before it is sent to the client.
#
# To parse .shtml files for server-side includes (SSI):
# (You will also need to add "Includes" to the "Options" directive.)
#
#AddType text/html .shtml
#AddOutputFilter INCLUDES .shtml
</IfModule>
#
# The mod_mime_magic module allows the server to use various hints from the
# contents of the file itself to determine its type. The MIMEMagicFile
# directive tells the module where the hint definitions are located.
#
#MIMEMagicFile /private/etc/apache2/magic
#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#
#
# MaxRanges: Maximum number of Ranges in a request before
# returning the entire resource, or one of the special
# values 'default', 'none' or 'unlimited'.
# Default setting is to accept 200 Ranges.
#MaxRanges unlimited
#
# EnableMMAP and EnableSendfile: On systems that support it,
# memory-mapping or the sendfile syscall is used to deliver
# files. This usually improves server performance, but must
# be turned off when serving from networked-mounted
# filesystems or if support for these functions is otherwise
# broken on your system.
#
#EnableMMAP off
#EnableSendfile off
# 6894961
TraceEnable off
# Supplemental configuration
#
# The configuration files in the /private/etc/apache2/extra/ directory can be
# included to add extra features or to modify the default configuration of
# the server, or you may simply copy their contents here and change as
# necessary.
# Server-pool management (MPM specific)
Include /private/etc/apache2/extra/httpd-mpm.conf
# Multi-language error messages
#Include /private/etc/apache2/extra/httpd-multilang-errordoc.conf
# Fancy directory listings
Include /private/etc/apache2/extra/httpd-autoindex.conf
# Language settings
Include /private/etc/apache2/extra/httpd-languages.conf
# User home directories
Include /private/etc/apache2/extra/httpd-userdir.conf
# Real-time info on requests and configuration
#Include /private/etc/apache2/extra/httpd-info.conf
# Virtual hosts
#Include /private/etc/apache2/extra/httpd-vhosts.conf
# Local access to the Apache HTTP Server Manual
Include /private/etc/apache2/extra/httpd-manual.conf
# Distributed authoring and versioning (WebDAV)
#Include /private/etc/apache2/extra/httpd-dav.conf
# Various default settings
#Include /private/etc/apache2/extra/httpd-default.conf
# Secure (SSL/TLS) connections
#Include /private/etc/apache2/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
Include /private/etc/apache2/other/*.conf

View File

@@ -0,0 +1,87 @@
(*
Copyright 2003 Apple Computer, Inc.
You may incorporate this Apple sample code into your program(s) without
restriction. This Apple sample code has been provided "AS IS" and the
responsibility for its operation is yours. You are not permitted to
redistribute this Apple sample code as "Apple sample code" after having
made changes. If you're going to redistribute the code, we require
that you make it clear that the code was descended from Apple sample
code, but that you've made changes.
*)
property type_list : {"JPEG", "GIFf", "PICT", "TIFF", "PDF", "TEXT"}
property extension_list : {"jpg", "gif", "pct", "tif", "pdf", "rtf"}
--html is not currently handled
on run {}
tell application "Finder" to set FinderSelection to the selection as alias list
set FS to FinderSelection
--Ideally, this list could be passed to the open handler
set SelectionCount to number of FS -- count
if SelectionCount is 0 then
set FS to userPicksFolder()
else if the SelectionCount is 1 then
set MyPath to path to me
if MyPath is item 1 of FS then
--If I'm a droplet then I was double-clicked
set FS to userPicksFolder()
end if
else
--I'm not a double-clicked droplet
end if
open FS
end run
on userPicksFolder()
set these_items to {}
set these_items to (choose file with prompt "Select a file to convert to PDF:" of type {"JPEG", "GIFf", "PICT", "TIFF", "TEXT", "RTF"}) as list
end userPicksFolder
on open these_items
set thesefiles to {}
set the item_info to {}
repeat with i from 1 to the count of these_items
set this_item to (item i of these_items)
set the item_info to info for this_item
if folder of the item_info is true then --if the item is a folder
processFolder(this_item)
else if ((folder of the item_info is false) and (alias of the item_info is false)) and (the file type of the item_info is in the type_list) or ((the name extension of the item_info) is in the extension_list) then
set theFilePath to (item i of these_items as string)
set thePOSIXFilePath to POSIX path of theFilePath as string
processFile(thePOSIXFilePath)
end if
end repeat
end open
--process folders
on processFolder(theFolder)
set these_items to list folder theFolder without invisibles
repeat with i from 1 to the count of these_items
set this_item to alias ((theFolder as text) & (item i of these_items))
set the item_info to info for this_item
if folder of the item_info is true then
processFolder(this_item)
else if (alias of the item_info is false) and ((the file type of the item_info is in the type_list) or the name extension of the item_info is in the extension_list) then
set theFilePath to (this_item as string)
set thePOSIXFilePath to POSIX path of theFilePath as string
processFile(thePOSIXFilePath)
end if
end repeat
end processFolder
on processFile(thePOSIXFileName)
try
set terminalCommand to ""
set convertCommand to "/System/Library/Printers/Libraries/./convert "
set newFileName to thePOSIXFileName & ".pdf"
set terminalCommand to convertCommand & "-f " & "\"" & thePOSIXFileName & "\"" & " -o " & "\"" & newFileName & "\"" & " -j \"application/pdf\""
do shell script terminalCommand
end try
end processFile

View File

@@ -0,0 +1,91 @@
(*
Copyright 2003 Apple Computer, Inc.
You may incorporate this Apple sample code into your program(s) without
restriction. This Apple sample code has been provided "AS IS" and the
responsibility for its operation is yours. You are not permitted to
redistribute this Apple sample code as "Apple sample code" after having
made changes. If you're going to redistribute the code, we require
that you make it clear that the code was descended from Apple sample
code, but that you've made changes.
*)
property type_list : {"JPEG", "GIFf", "PICT", "TIFF", "PDF", "TEXT"}
property extension_list : {"jpg", "gif", "pct", "tif", "pdf", "rtf"}
--html is not currently handled
on run {}
tell application "Finder" to set FinderSelection to the selection as alias list
set FS to FinderSelection
--Ideally, this list could be passed to the open handler
set SelectionCount to number of FS -- count
if SelectionCount is 0 then
set FS to userPicksFolder()
else if the SelectionCount is 1 then
set MyPath to path to me
if MyPath is item 1 of FS then
--If I'm a droplet then I was double-clicked
set FS to userPicksFolder()
end if
else
--I'm not a double-clicked droplet
end if
open FS
end run
on userPicksFolder()
set these_items to {}
set these_items to (choose file with prompt "Select a file to convert to PostScript:" of type {"JPEG", "GIFf", "PICT", "TIFF", "TEXT", "RTF"}) as list
end userPicksFolder
on open these_items
set thesefiles to {}
set the item_info to {}
repeat with i from 1 to the count of these_items
set this_item to (item i of these_items)
set the item_info to info for this_item
if folder of the item_info is true then --if the item is a folder
processFolder(this_item)
else if ((folder of the item_info is false) and (alias of the item_info is false)) and (the file type of the item_info is in the type_list) or ((the name extension of the item_info) is in the extension_list) then
set theFilePath to (item i of these_items as string)
set thePOSIXFilePath to POSIX path of theFilePath as string
processFile(thePOSIXFilePath)
end if
end repeat
end open
--process folders
on processFolder(theFolder)
set these_items to list folder theFolder without invisibles
repeat with i from 1 to the count of these_items
set this_item to alias ((theFolder as text) & (item i of these_items))
set the item_info to info for this_item
if folder of the item_info is true then
processFolder(this_item)
else if (alias of the item_info is false) and ((the file type of the item_info is in the type_list) or the name extension of the item_info is in the extension_list) then
set theFilePath to (this_item as string)
set thePOSIXFilePath to POSIX path of theFilePath as string
processFile(thePOSIXFilePath)
end if
end repeat
end processFolder
--need to pass the URL to Terminal
on processFile(thePOSIXFileName)
try
set terminalCommand to ""
set convertCommand to "/System/Library/Printers/Libraries/./convert "
set newFileName to thePOSIXFileName & ".ps"
set terminalCommand to convertCommand & "-f " & "\"" & thePOSIXFileName & "\"" & " -o " & "\"" & newFileName & "\"" & " -j \"application/postscript\""
do shell script terminalCommand
end try
end processFile

View File

@@ -0,0 +1,80 @@
(*
Count Messages in All Mailboxes
Copyright 2002-2012 Apple Inc. All rights reserved.
You may incorporate this Apple sample code into your program(s) without
restriction. This Apple sample code has been provided "AS IS" and the
responsibility for its operation is yours. You are not permitted to
redistribute this Apple sample code as "Apple sample code" after having
made changes. If you're going to redistribute the code, we require
that you make it clear that the code was descended from Apple sample
code, but that you've made changes.
*)
(*
This script goes through each mailbox, gets the total message count and
the unread count, then displays the final output in a new email message.
*)
tell application "Mail"
set localMailboxes to every mailbox
if (count of localMailboxes) is greater than 0 then
set messageCountDisplay to "Local mailboxes (On My Mac)" & return & my getMessageCountsForMailboxes(localMailboxes)
else
set messageCountDisplay to ""
end if
set everyAccount to every account
repeat with eachAccount in everyAccount
set accountMailboxes to every mailbox of eachAccount
if (count of accountMailboxes) is greater than 0 then
set messageCountDisplay to messageCountDisplay & return & "Mailboxes for Account: " & name of eachAccount & return & my getMessageCountsForMailboxes(accountMailboxes)
end if
end repeat
set outputMessage to make new outgoing message with properties {content:messageCountDisplay, subject:"Message counts for all my mailboxes", visible:true}
tell outputMessage
set font to "Courier"
set size to 12
end tell
end tell
on getMessageCountsForMailboxes(theMailboxes)
-- (list of mailboxes)
-- returns string
set displayString to ""
tell application "Mail"
repeat with eachMailbox in theMailboxes
set mailboxName to name of eachMailbox
set messageCount to (count of (messages of eachMailbox)) as string
set unreadCount to unread count of eachMailbox as string
set displayString to displayString & " " & my padString(mailboxName, 40) & " " & messageCount & " (" & unreadCount & " unread)" & return
end repeat
end tell
return displayString
end getMessageCountsForMailboxes
on padString(theString, fieldLength)
-- (string, integer)
-- returns string
set stringLength to length of theString
if stringLength is greater than fieldLength then
set paddedString to (text from character 1 to character (fieldLength - 3) of theString) & "..."
else -- stringLength is less than or equal to fieldLength
set paddedString to theString
set paddingLength to fieldLength - stringLength
repeat paddingLength times
set paddedString to paddedString & space
end repeat
end if
return paddedString
end padString

View File

@@ -0,0 +1,68 @@
(*
Crazy Message Text
Copyright 2002-2012 Apple Inc. All rights reserved.
You may incorporate this Apple sample code into your program(s) without
restriction. This Apple sample code has been provided "AS IS" and the
responsibility for its operation is yours. You are not permitted to
redistribute this Apple sample code as "Apple sample code" after having
made changes. If you're going to redistribute the code, we require
that you make it clear that the code was descended from Apple sample
code, but that you've made changes.
*)
(*
This script takes a string from the user and then makes a new message
where each letter has a different font, size, and color.
*)
property lowFontSize : 36
property highFontSize : 72
property messageText : "Happy Birthday!"
repeat
set userInput to display dialog "Enter some message text:" & return & return & "Minimum Character Size: " & (lowFontSize as string) & return & "Maximum Character Size: " & (highFontSize as string) default answer messageText buttons {"Cancel", "Set Prefs", "Continue"} default button 3
if the button returned of userInput is "Set Prefs" then
set minimumFontSize to 9
display dialog "Enter the minimum font size to use:" & return & return & "(Must be at least " & (minimumFontSize as string) & ")" default answer lowFontSize buttons {"OK"}
set newFontSize to text returned of the result as integer
if newFontSize is greater than or equal to minimumFontSize then
set lowFontSize to newFontSize
else
set lowFontSize to minimumFontSize
end if
display dialog "Enter the maximum font size to use:" & return & return & "(Must be greater than " & (lowFontSize as string) & ")" default answer highFontSize buttons {"OK"}
set newFontSize to text returned of the result as integer
if newFontSize is greater than lowFontSize then
set highFontSize to newFontSize
else
set highFontSize to lowFontSize
end if
else -- button returned of userInput is "Continue"
set theText to text returned of userInput
if theText is not "" then
set messageText to theText
end if
exit repeat
end if
end repeat
set fontList to {"American Typewriter", "American Typewriter Light", "American Typewriter Bold", "American Typewriter Condensed", "American Typewriter Condensed Light", "American Typewriter Condensed Bold", "Arial", "Arial Italic", "Arial Bold", "Arial Bold Italic", "Arial Black", "Baskerville", "Baskerville Italic", "Baskerville SemiBold", "Baskerville Bold", "Baskerville SemiBold Italic", "Baskerville Bold Italic", "Big Caslon Medium", "Comic Sans MS", "Comic Sans MS Bold", "Copperplate", "Copperplate Light", "Copperplate Bold", "Didot", "Didot Italic", "Didot Bold", "Futura Medium", "Futura Medium Italic", "Futura Condensed Medium", "Futura Condensed ExtraBold", "Geneva", "Gill Sans", "Gill Sans Italic", "Gill Sans Light", "Gill Sans Light Italic", "Gill Sans Bold", "Gill Sans Bold Italic", "Herculanum", "Lucida Grande", "Lucida Grande Bold", "Marker Felt Thin", "Marker Felt Wide", "Optima Regular", "Optima Italic", "Optima Bold", "Optima Bold Italic", "Optima ExtraBlack", "Papyrus", "Verdana", "Verdana Italic", "Verdana Bold", "Verdana Bold Italic", "Zapfino"}
tell application "Mail"
activate
set crazyTextMessage to make new outgoing message with properties {content:messageText, visible:true}
tell crazyTextMessage
repeat with eachCharacter in characters
set font of eachCharacter to (some item of fontList)
set size of eachCharacter to (random number from lowFontSize to highFontSize)
set color of eachCharacter to {random number from 0 to 65535, random number from 0 to 65535, random number from 0 to 65535}
end repeat
end tell
end tell

View File

@@ -0,0 +1,41 @@
(*
Get User Name
This script uses UI element scripting to get the name for the
current user.
If "Enable access for assistive devices" is not checked,
this script will open the Universal Access System Preference and ask
the user to check the checkbox.
Copyright 2007 Apple Inc.
You may incorporate this Apple sample code into your program(s) without
restriction. This Apple sample code has been provided "AS IS" and the
responsibility for its operation is yours. You are not permitted to
redistribute this Apple sample code as "Apple sample code" after having
made changes. If you're going to redistribute the code, we require
that you make it clear that the code was descended from Apple sample
code, but that you've made changes.
*)
tell application "System Preferences"
activate
set current pane to pane "com.apple.preferences.users"
end tell
tell application "System Events"
if UI elements enabled then
tell tab group 1 of window "Accounts" of process "System Preferences"
click radio button 1
delay 2
get value of text field 1
end tell
else
tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.universalaccess"
display dialog "UI element scripting is not enabled. Check \"Enable access for assistive devices\""
end tell
end if
end tell

View File

@@ -0,0 +1,75 @@
(*
Speaks the date and time of day
Copyright 2008 Apple Inc. All rights reserved.
You may incorporate this Apple sample code into your program(s) without
restriction. This Apple sample code has been provided "AS IS" and the
responsibility for its operation is yours. You are not permitted to
redistribute this Apple sample code as "Apple sample code" after having
made changes. If you're going to redistribute the code, we require
that you make it clear that the code was descended from Apple sample
code, but that you've made changes.
*)
on isVoiceOverRunning()
set isRunning to false
tell application "System Events"
set isRunning to (name of processes) contains "VoiceOver"
end tell
return isRunning
end isVoiceOverRunning
on isVoiceOverRunningWithAppleScript()
if isVoiceOverRunning() then
set isRunningWithAppleScript to true
-- is AppleScript enabled on VoiceOver --
tell application "VoiceOver"
try
set x to bounds of vo cursor
on error
set isRunningWithAppleScript to false
end try
end tell
return isRunningWithAppleScript
end if
return false
end isVoiceOverRunningWithAppleScript
set currentDate to current date
set amPM to "AM"
set currentHour to (currentDate's hours)
set currentMinutes to currentDate's minutes
if (currentHour > 12 and currentHour < 24) then
set amPM to "PM"
else
set amPM to "AM"
end if
-- make minutes below 10 sound nice
if currentMinutes < 10 then
set currentMinutes to ("0" & currentMinutes) as text
end if
-- ensure 0:nn gets set to 12:nn AM
if currentHour is equal to 0 then
set currentHour to 12
end if
-- readjust for 12 hour time
if (currentHour > 12) then
set currentHour to (currentHour - 12)
end if
set currentTime to ((currentDate's month) as text) & " " & ((currentDate's day) as text) & ", " & (currentHour as text) & ":" & ((currentMinutes) as text) & " " & amPM as text
if isVoiceOverRunningWithAppleScript() then
tell application "VoiceOver"
output currentTime
end tell
else
say currentTime
delay 2
end if

View File

@@ -1,50 +0,0 @@
set windowWidth to 800
set windowHeight to 600
delay 0.1
set AppleScript's text item delimiters to "x"
set res to text returned of (display dialog "Enter the width x height:" default answer ((windowWidth & windowHeight) as text))
if res is "" then
display dialog "You need to enter a correct response"
return
end if
set {windowWidth, windowHeight} to text items of res
set AppleScript's text item delimiters to ""
tell application "Safari"
set screen_width to (do JavaScript "screen.availWidth" in document 1)
set screen_height to (do JavaScript "screen.availHeight" in document 1)
end tell
tell application "System Events"
set myFrontMost to name of first item of (processes whose frontmost is true)
end tell
tell application "Finder"
set {desktopTop, desktopLeft, desktopRight, desktopBottom} to bounds of desktop
end tell
try
tell application "System Events"
tell process myFrontMost
set {{w, h}} to size of drawer of window 1
end tell
end tell
on error
set {w, h} to {0, 0}
end try
tell application "System Events"
tell process myFrontMost
try
set {{w, h}} to size of drawer of window 1
on error
set {w, h} to {0, 0}
end try
set position of window 1 to {((screen_width - windowWidth) / 2), ((screen_height - windowHeight) / 2.0) - desktopTop}
set size of window 1 to {windowWidth -w, windowHeight}
end tell
end tell

View File

@@ -0,0 +1,13 @@
Gregory Romé has written an AsciiDoc plugin for the Redmine project management application.
https://github.com/foo-users/foo
へと `vicmd` キーマップを足してみている試み、
アニメーションgifです。
tag::romé[]
Gregory Romé has written an AsciiDoc plugin for the Redmine project management application.
end::romé[]
== Überschrift
* Codierungen sind verrückt auf älteren Versionen von Ruby

10
samples/AsciiDoc/list.asc Normal file
View File

@@ -0,0 +1,10 @@
AsciiDoc Home Page
==================
Example Articles
~~~~~~~~~~~~~~~~
- Item 1
- Item 2
- Item 3

View File

@@ -0,0 +1,25 @@
Document Title
==============
Doc Writer <thedoc@asciidoctor.org>
:idprefix: id_
Preamble paragraph.
NOTE: This is test, only a test.
== Section A
*Section A* paragraph.
=== Section A Subsection
*Section A* 'subsection' paragraph.
== Section B
*Section B* paragraph.
.Section B list
* Item 1
* Item 2
* Item 3

View File

@@ -0,0 +1,41 @@
package com.blogspot.miguelinlas3.aspectj.cache;
import java.util.Map;
import java.util.WeakHashMap;
import org.aspectj.lang.JoinPoint;
import com.blogspot.miguelinlas3.aspectj.cache.marker.Cachable;
/**
* This simple aspect simulates the behaviour of a very simple cache
*
* @author migue
*
*/
public aspect CacheAspect {
public pointcut cache(Cachable cachable): execution(@Cachable * * (..)) && @annotation(cachable);
Object around(Cachable cachable): cache(cachable){
String evaluatedKey = this.evaluateKey(cachable.scriptKey(), thisJoinPoint);
if(cache.containsKey(evaluatedKey)){
System.out.println("Cache hit for key " + evaluatedKey);
return this.cache.get(evaluatedKey);
}
System.out.println("Cache miss for key " + evaluatedKey);
Object value = proceed(cachable);
cache.put(evaluatedKey, value);
return value;
}
protected String evaluateKey(String key, JoinPoint joinPoint) {
// TODO add some smart staff to allow simple scripting in @Cachable annotation
return key;
}
protected Map<String, Object> cache = new WeakHashMap<String, Object>();
}

View File

@@ -0,0 +1,50 @@
package aspects.caching;
import java.util.Map;
/**
* Cache aspect for optimize recursive functions.
*
* @author Migueli
* @date 05/11/2013
* @version 1.0
*
*/
public abstract aspect OptimizeRecursionCache {
@SuppressWarnings("rawtypes")
private Map _cache;
public OptimizeRecursionCache() {
_cache = getCache();
}
@SuppressWarnings("rawtypes")
abstract public Map getCache();
abstract public pointcut operation(Object o);
pointcut topLevelOperation(Object o): operation(o) && !cflowbelow(operation(Object));
before(Object o) : topLevelOperation(o) {
System.out.println("Seeking value for " + o);
}
Object around(Object o) : operation(o) {
Object cachedValue = _cache.get(o);
if (cachedValue != null) {
System.out.println("Found cached value for " + o + ": " + cachedValue);
return cachedValue;
}
return proceed(o);
}
@SuppressWarnings("unchecked")
after(Object o) returning(Object result) : topLevelOperation(o) {
_cache.put(o, result);
}
after(Object o) returning(Object result) : topLevelOperation(o) {
System.out.println("cache size: " + _cache.size());
}
}

File diff suppressed because it is too large Load Diff

350
samples/Assembly/FASM.asm Normal file
View File

@@ -0,0 +1,350 @@
; flat assembler interface for Win32
; Copyright (c) 1999-2014, Tomasz Grysztar.
; All rights reserved.
format PE console
section '.text' code readable executable
start:
mov [con_handle],STD_OUTPUT_HANDLE
mov esi,_logo
call display_string
call get_params
jc information
call init_memory
mov esi,_memory_prefix
call display_string
mov eax,[memory_end]
sub eax,[memory_start]
add eax,[additional_memory_end]
sub eax,[additional_memory]
shr eax,10
call display_number
mov esi,_memory_suffix
call display_string
call [GetTickCount]
mov [start_time],eax
call preprocessor
call parser
call assembler
call formatter
call display_user_messages
movzx eax,[current_pass]
inc eax
call display_number
mov esi,_passes_suffix
call display_string
call [GetTickCount]
sub eax,[start_time]
xor edx,edx
mov ebx,100
div ebx
or eax,eax
jz display_bytes_count
xor edx,edx
mov ebx,10
div ebx
push edx
call display_number
mov dl,'.'
call display_character
pop eax
call display_number
mov esi,_seconds_suffix
call display_string
display_bytes_count:
mov eax,[written_size]
call display_number
mov esi,_bytes_suffix
call display_string
xor al,al
jmp exit_program
information:
mov esi,_usage
call display_string
mov al,1
jmp exit_program
get_params:
mov [input_file],0
mov [output_file],0
mov [symbols_file],0
mov [memory_setting],0
mov [passes_limit],100
call [GetCommandLine]
mov esi,eax
mov edi,params
find_command_start:
lodsb
cmp al,20h
je find_command_start
cmp al,22h
je skip_quoted_name
skip_name:
lodsb
cmp al,20h
je find_param
or al,al
jz all_params
jmp skip_name
skip_quoted_name:
lodsb
cmp al,22h
je find_param
or al,al
jz all_params
jmp skip_quoted_name
find_param:
lodsb
cmp al,20h
je find_param
cmp al,'-'
je option_param
cmp al,0Dh
je all_params
or al,al
jz all_params
cmp [input_file],0
jne get_output_file
mov [input_file],edi
jmp process_param
get_output_file:
cmp [output_file],0
jne bad_params
mov [output_file],edi
process_param:
cmp al,22h
je string_param
copy_param:
stosb
lodsb
cmp al,20h
je param_end
cmp al,0Dh
je param_end
or al,al
jz param_end
jmp copy_param
string_param:
lodsb
cmp al,22h
je string_param_end
cmp al,0Dh
je param_end
or al,al
jz param_end
stosb
jmp string_param
option_param:
lodsb
cmp al,'m'
je memory_option
cmp al,'M'
je memory_option
cmp al,'p'
je passes_option
cmp al,'P'
je passes_option
cmp al,'s'
je symbols_option
cmp al,'S'
je symbols_option
bad_params:
stc
ret
get_option_value:
xor eax,eax
mov edx,eax
get_option_digit:
lodsb
cmp al,20h
je option_value_ok
cmp al,0Dh
je option_value_ok
or al,al
jz option_value_ok
sub al,30h
jc invalid_option_value
cmp al,9
ja invalid_option_value
imul edx,10
jo invalid_option_value
add edx,eax
jc invalid_option_value
jmp get_option_digit
option_value_ok:
dec esi
clc
ret
invalid_option_value:
stc
ret
memory_option:
lodsb
cmp al,20h
je memory_option
cmp al,0Dh
je bad_params
or al,al
jz bad_params
dec esi
call get_option_value
or edx,edx
jz bad_params
cmp edx,1 shl (32-10)
jae bad_params
mov [memory_setting],edx
jmp find_param
passes_option:
lodsb
cmp al,20h
je passes_option
cmp al,0Dh
je bad_params
or al,al
jz bad_params
dec esi
call get_option_value
or edx,edx
jz bad_params
cmp edx,10000h
ja bad_params
mov [passes_limit],dx
jmp find_param
symbols_option:
mov [symbols_file],edi
find_symbols_file_name:
lodsb
cmp al,20h
jne process_param
jmp find_symbols_file_name
param_end:
dec esi
string_param_end:
xor al,al
stosb
jmp find_param
all_params:
cmp [input_file],0
je bad_params
clc
ret
include 'system.inc'
include '..\errors.inc'
include '..\symbdump.inc'
include '..\preproce.inc'
include '..\parser.inc'
include '..\exprpars.inc'
include '..\assemble.inc'
include '..\exprcalc.inc'
include '..\formats.inc'
include '..\x86_64.inc'
include '..\avx.inc'
include '..\tables.inc'
include '..\messages.inc'
section '.data' data readable writeable
include '..\version.inc'
_copyright db 'Copyright (c) 1999-2014, Tomasz Grysztar',0Dh,0Ah,0
_logo db 'flat assembler version ',VERSION_STRING,0
_usage db 0Dh,0Ah
db 'usage: fasm <source> [output]',0Dh,0Ah
db 'optional settings:',0Dh,0Ah
db ' -m <limit> set the limit in kilobytes for the available memory',0Dh,0Ah
db ' -p <limit> set the maximum allowed number of passes',0Dh,0Ah
db ' -s <file> dump symbolic information for debugging',0Dh,0Ah
db 0
_memory_prefix db ' (',0
_memory_suffix db ' kilobytes memory)',0Dh,0Ah,0
_passes_suffix db ' passes, ',0
_seconds_suffix db ' seconds, ',0
_bytes_suffix db ' bytes.',0Dh,0Ah,0
align 4
include '..\variable.inc'
con_handle dd ?
memory_setting dd ?
start_time dd ?
bytes_count dd ?
displayed_count dd ?
character db ?
last_displayed rb 2
params rb 1000h
options rb 1000h
buffer rb 4000h
stack 10000h
section '.idata' import data readable writeable
dd 0,0,0,rva kernel_name,rva kernel_table
dd 0,0,0,0,0
kernel_table:
ExitProcess dd rva _ExitProcess
CreateFile dd rva _CreateFileA
ReadFile dd rva _ReadFile
WriteFile dd rva _WriteFile
CloseHandle dd rva _CloseHandle
SetFilePointer dd rva _SetFilePointer
GetCommandLine dd rva _GetCommandLineA
GetEnvironmentVariable dd rva _GetEnvironmentVariable
GetStdHandle dd rva _GetStdHandle
VirtualAlloc dd rva _VirtualAlloc
VirtualFree dd rva _VirtualFree
GetTickCount dd rva _GetTickCount
GetSystemTime dd rva _GetSystemTime
GlobalMemoryStatus dd rva _GlobalMemoryStatus
dd 0
kernel_name db 'KERNEL32.DLL',0
_ExitProcess dw 0
db 'ExitProcess',0
_CreateFileA dw 0
db 'CreateFileA',0
_ReadFile dw 0
db 'ReadFile',0
_WriteFile dw 0
db 'WriteFile',0
_CloseHandle dw 0
db 'CloseHandle',0
_SetFilePointer dw 0
db 'SetFilePointer',0
_GetCommandLineA dw 0
db 'GetCommandLineA',0
_GetEnvironmentVariable dw 0
db 'GetEnvironmentVariableA',0
_GetStdHandle dw 0
db 'GetStdHandle',0
_VirtualAlloc dw 0
db 'VirtualAlloc',0
_VirtualFree dw 0
db 'VirtualFree',0
_GetTickCount dw 0
db 'GetTickCount',0
_GetSystemTime dw 0
db 'GetSystemTime',0
_GlobalMemoryStatus dw 0
db 'GlobalMemoryStatus',0
section '.reloc' fixups data readable discardable

503
samples/Assembly/SYSTEM.inc Normal file
View File

@@ -0,0 +1,503 @@
; flat assembler interface for Win32
; Copyright (c) 1999-2014, Tomasz Grysztar.
; All rights reserved.
CREATE_NEW = 1
CREATE_ALWAYS = 2
OPEN_EXISTING = 3
OPEN_ALWAYS = 4
TRUNCATE_EXISTING = 5
FILE_SHARE_READ = 1
FILE_SHARE_WRITE = 2
FILE_SHARE_DELETE = 4
GENERIC_READ = 80000000h
GENERIC_WRITE = 40000000h
STD_INPUT_HANDLE = 0FFFFFFF6h
STD_OUTPUT_HANDLE = 0FFFFFFF5h
STD_ERROR_HANDLE = 0FFFFFFF4h
MEM_COMMIT = 1000h
MEM_RESERVE = 2000h
MEM_DECOMMIT = 4000h
MEM_RELEASE = 8000h
MEM_FREE = 10000h
MEM_PRIVATE = 20000h
MEM_MAPPED = 40000h
MEM_RESET = 80000h
MEM_TOP_DOWN = 100000h
PAGE_NOACCESS = 1
PAGE_READONLY = 2
PAGE_READWRITE = 4
PAGE_WRITECOPY = 8
PAGE_EXECUTE = 10h
PAGE_EXECUTE_READ = 20h
PAGE_EXECUTE_READWRITE = 40h
PAGE_EXECUTE_WRITECOPY = 80h
PAGE_GUARD = 100h
PAGE_NOCACHE = 200h
init_memory:
xor eax,eax
mov [memory_start],eax
mov eax,esp
and eax,not 0FFFh
add eax,1000h-10000h
mov [stack_limit],eax
mov eax,[memory_setting]
shl eax,10
jnz allocate_memory
push buffer
call [GlobalMemoryStatus]
mov eax,dword [buffer+20]
mov edx,dword [buffer+12]
cmp eax,0
jl large_memory
cmp edx,0
jl large_memory
shr eax,2
add eax,edx
jmp allocate_memory
large_memory:
mov eax,80000000h
allocate_memory:
mov edx,eax
shr edx,2
mov ecx,eax
sub ecx,edx
mov [memory_end],ecx
mov [additional_memory_end],edx
push PAGE_READWRITE
push MEM_COMMIT
push eax
push 0
call [VirtualAlloc]
or eax,eax
jz not_enough_memory
mov [memory_start],eax
add eax,[memory_end]
mov [memory_end],eax
mov [additional_memory],eax
add [additional_memory_end],eax
ret
not_enough_memory:
mov eax,[additional_memory_end]
shl eax,1
cmp eax,4000h
jb out_of_memory
jmp allocate_memory
exit_program:
movzx eax,al
push eax
mov eax,[memory_start]
test eax,eax
jz do_exit
push MEM_RELEASE
push 0
push eax
call [VirtualFree]
do_exit:
call [ExitProcess]
get_environment_variable:
mov ecx,[memory_end]
sub ecx,edi
cmp ecx,4000h
jbe buffer_for_variable_ok
mov ecx,4000h
buffer_for_variable_ok:
push ecx
push edi
push esi
call [GetEnvironmentVariable]
add edi,eax
cmp edi,[memory_end]
jae out_of_memory
ret
open:
push 0
push 0
push OPEN_EXISTING
push 0
push FILE_SHARE_READ
push GENERIC_READ
push edx
call [CreateFile]
cmp eax,-1
je file_error
mov ebx,eax
clc
ret
file_error:
stc
ret
create:
push 0
push 0
push CREATE_ALWAYS
push 0
push FILE_SHARE_READ
push GENERIC_WRITE
push edx
call [CreateFile]
cmp eax,-1
je file_error
mov ebx,eax
clc
ret
write:
push 0
push bytes_count
push ecx
push edx
push ebx
call [WriteFile]
or eax,eax
jz file_error
clc
ret
read:
mov ebp,ecx
push 0
push bytes_count
push ecx
push edx
push ebx
call [ReadFile]
or eax,eax
jz file_error
cmp ebp,[bytes_count]
jne file_error
clc
ret
close:
push ebx
call [CloseHandle]
ret
lseek:
movzx eax,al
push eax
push 0
push edx
push ebx
call [SetFilePointer]
ret
display_string:
push [con_handle]
call [GetStdHandle]
mov ebp,eax
mov edi,esi
or ecx,-1
xor al,al
repne scasb
neg ecx
sub ecx,2
push 0
push bytes_count
push ecx
push esi
push ebp
call [WriteFile]
ret
display_character:
push ebx
mov [character],dl
push [con_handle]
call [GetStdHandle]
mov ebx,eax
push 0
push bytes_count
push 1
push character
push ebx
call [WriteFile]
pop ebx
ret
display_number:
push ebx
mov ecx,1000000000
xor edx,edx
xor bl,bl
display_loop:
div ecx
push edx
cmp ecx,1
je display_digit
or bl,bl
jnz display_digit
or al,al
jz digit_ok
not bl
display_digit:
mov dl,al
add dl,30h
push ecx
call display_character
pop ecx
digit_ok:
mov eax,ecx
xor edx,edx
mov ecx,10
div ecx
mov ecx,eax
pop eax
or ecx,ecx
jnz display_loop
pop ebx
ret
display_user_messages:
mov [displayed_count],0
call show_display_buffer
cmp [displayed_count],1
jb line_break_ok
je make_line_break
mov ax,word [last_displayed]
cmp ax,0A0Dh
je line_break_ok
cmp ax,0D0Ah
je line_break_ok
make_line_break:
mov word [buffer],0A0Dh
push [con_handle]
call [GetStdHandle]
push 0
push bytes_count
push 2
push buffer
push eax
call [WriteFile]
line_break_ok:
ret
display_block:
add [displayed_count],ecx
cmp ecx,1
ja take_last_two_characters
jb block_displayed
mov al,[last_displayed+1]
mov ah,[esi]
mov word [last_displayed],ax
jmp block_ok
take_last_two_characters:
mov ax,[esi+ecx-2]
mov word [last_displayed],ax
block_ok:
push ecx
push [con_handle]
call [GetStdHandle]
pop ecx
push 0
push bytes_count
push ecx
push esi
push eax
call [WriteFile]
block_displayed:
ret
fatal_error:
mov [con_handle],STD_ERROR_HANDLE
mov esi,error_prefix
call display_string
pop esi
call display_string
mov esi,error_suffix
call display_string
mov al,0FFh
jmp exit_program
assembler_error:
mov [con_handle],STD_ERROR_HANDLE
call display_user_messages
push dword 0
mov ebx,[current_line]
get_error_lines:
mov eax,[ebx]
cmp byte [eax],0
je get_next_error_line
push ebx
test byte [ebx+7],80h
jz display_error_line
mov edx,ebx
find_definition_origin:
mov edx,[edx+12]
test byte [edx+7],80h
jnz find_definition_origin
push edx
get_next_error_line:
mov ebx,[ebx+8]
jmp get_error_lines
display_error_line:
mov esi,[ebx]
call display_string
mov esi,line_number_start
call display_string
mov eax,[ebx+4]
and eax,7FFFFFFFh
call display_number
mov dl,']'
call display_character
pop esi
cmp ebx,esi
je line_number_ok
mov dl,20h
call display_character
push esi
mov esi,[esi]
movzx ecx,byte [esi]
inc esi
call display_block
mov esi,line_number_start
call display_string
pop esi
mov eax,[esi+4]
and eax,7FFFFFFFh
call display_number
mov dl,']'
call display_character
line_number_ok:
mov esi,line_data_start
call display_string
mov esi,ebx
mov edx,[esi]
call open
mov al,2
xor edx,edx
call lseek
mov edx,[esi+8]
sub eax,edx
jz line_data_displayed
push eax
xor al,al
call lseek
mov ecx,[esp]
mov edx,[additional_memory]
lea eax,[edx+ecx]
cmp eax,[additional_memory_end]
ja out_of_memory
call read
call close
pop ecx
mov esi,[additional_memory]
get_line_data:
mov al,[esi]
cmp al,0Ah
je display_line_data
cmp al,0Dh
je display_line_data
cmp al,1Ah
je display_line_data
or al,al
jz display_line_data
inc esi
loop get_line_data
display_line_data:
mov ecx,esi
mov esi,[additional_memory]
sub ecx,esi
call display_block
line_data_displayed:
mov esi,cr_lf
call display_string
pop ebx
or ebx,ebx
jnz display_error_line
mov esi,error_prefix
call display_string
pop esi
call display_string
mov esi,error_suffix
call display_string
mov al,2
jmp exit_program
make_timestamp:
push buffer
call [GetSystemTime]
movzx ecx,word [buffer]
mov eax,ecx
sub eax,1970
mov ebx,365
mul ebx
mov ebp,eax
mov eax,ecx
sub eax,1969
shr eax,2
add ebp,eax
mov eax,ecx
sub eax,1901
mov ebx,100
div ebx
sub ebp,eax
mov eax,ecx
xor edx,edx
sub eax,1601
mov ebx,400
div ebx
add ebp,eax
movzx ecx,word [buffer+2]
mov eax,ecx
dec eax
mov ebx,30
mul ebx
add ebp,eax
cmp ecx,8
jbe months_correction
mov eax,ecx
sub eax,7
shr eax,1
add ebp,eax
mov ecx,8
months_correction:
mov eax,ecx
shr eax,1
add ebp,eax
cmp ecx,2
jbe day_correction_ok
sub ebp,2
movzx ecx,word [buffer]
test ecx,11b
jnz day_correction_ok
xor edx,edx
mov eax,ecx
mov ebx,100
div ebx
or edx,edx
jnz day_correction
mov eax,ecx
mov ebx,400
div ebx
or edx,edx
jnz day_correction_ok
day_correction:
inc ebp
day_correction_ok:
movzx eax,word [buffer+6]
dec eax
add eax,ebp
mov ebx,24
mul ebx
movzx ecx,word [buffer+8]
add eax,ecx
mov ebx,60
mul ebx
movzx ecx,word [buffer+10]
add eax,ecx
mov ebx,60
mul ebx
movzx ecx,word [buffer+12]
add eax,ecx
adc edx,0
ret
error_prefix db 'error: ',0
error_suffix db '.'
cr_lf db 0Dh,0Ah,0
line_number_start db ' [',0
line_data_start db ':',0Dh,0Ah,0

7060
samples/Assembly/X86_64.inc Normal file

File diff suppressed because it is too large Load Diff

121
samples/Awk/test.awk Normal file
View File

@@ -0,0 +1,121 @@
#!/bin/awk -f
BEGIN {
# It is not possible to define output file names here because
# FILENAME is not define in the BEGIN section
n = "";
printf "Generating data files ...";
network_max_bandwidth_in_byte = 10000000;
network_max_packet_per_second = 1000000;
last3 = 0;
last4 = 0;
last5 = 0;
last6 = 0;
}
{
if ($1 ~ /Average/)
{ # Skip the Average values
n = "";
next;
}
if ($2 ~ /all/)
{ # This is the cpu info
print $3 > FILENAME".cpu.user.dat";
# print $4 > FILENAME".cpu.nice.dat";
print $5 > FILENAME".cpu.system.dat";
# print $6 > FILENAME".cpu.iowait.dat";
print $7 > FILENAME".cpu.idle.dat";
print 100-$7 > FILENAME".cpu.busy.dat";
}
if ($2 ~ /eth0/)
{ # This is the eth0 network info
if ($3 > network_max_packet_per_second)
print last3 > FILENAME".net.rxpck.dat"; # Total number of packets received per second.
else
{
last3 = $3;
print $3 > FILENAME".net.rxpck.dat"; # Total number of packets received per second.
}
if ($4 > network_max_packet_per_second)
print last4 > FILENAME".net.txpck.dat"; # Total number of packets transmitted per second.
else
{
last4 = $4;
print $4 > FILENAME".net.txpck.dat"; # Total number of packets transmitted per second.
}
if ($5 > network_max_bandwidth_in_byte)
print last5 > FILENAME".net.rxbyt.dat"; # Total number of bytes received per second.
else
{
last5 = $5;
print $5 > FILENAME".net.rxbyt.dat"; # Total number of bytes received per second.
}
if ($6 > network_max_bandwidth_in_byte)
print last6 > FILENAME".net.txbyt.dat"; # Total number of bytes transmitted per second.
else
{
last6 = $6;
print $6 > FILENAME".net.txbyt.dat"; # Total number of bytes transmitted per second.
}
# print $7 > FILENAME".net.rxcmp.dat"; # Number of compressed packets received per second (for cslip etc.).
# print $8 > FILENAME".net.txcmp.dat"; # Number of compressed packets transmitted per second.
# print $9 > FILENAME".net.rxmcst.dat"; # Number of multicast packets received per second.
}
# Detect which is the next info to be parsed
if ($2 ~ /proc|cswch|tps|kbmemfree|totsck/)
{
n = $2;
}
# Only get lines with numbers (real data !)
if ($2 ~ /[0-9]/)
{
if (n == "proc/s")
{ # This is the proc/s info
print $2 > FILENAME".proc.dat";
# n = "";
}
if (n == "cswch/s")
{ # This is the context switches per second info
print $2 > FILENAME".ctxsw.dat";
# n = "";
}
if (n == "tps")
{ # This is the disk info
print $2 > FILENAME".disk.tps.dat"; # total transfers per second
print $3 > FILENAME".disk.rtps.dat"; # read requests per second
print $4 > FILENAME".disk.wtps.dat"; # write requests per second
print $5 > FILENAME".disk.brdps.dat"; # block reads per second
print $6 > FILENAME".disk.bwrps.dat"; # block writes per second
# n = "";
}
if (n == "kbmemfree")
{ # This is the mem info
print $2 > FILENAME".mem.kbmemfree.dat"; # Amount of free memory available in kilobytes.
print $3 > FILENAME".mem.kbmemused.dat"; # Amount of used memory in kilobytes. This does not take into account memory used by the kernel itself.
print $4 > FILENAME".mem.memused.dat"; # Percentage of used memory.
# It appears the kbmemshrd has been removed from the sysstat output - ntolia
# print $X > FILENAME".mem.kbmemshrd.dat"; # Amount of memory shared by the system in kilobytes. Always zero with 2.4 kernels.
# print $5 > FILENAME".mem.kbbuffers.dat"; # Amount of memory used as buffers by the kernel in kilobytes.
print $6 > FILENAME".mem.kbcached.dat"; # Amount of memory used to cache data by the kernel in kilobytes.
# print $7 > FILENAME".mem.kbswpfree.dat"; # Amount of free swap space in kilobytes.
# print $8 > FILENAME".mem.kbswpused.dat"; # Amount of used swap space in kilobytes.
print $9 > FILENAME".mem.swpused.dat"; # Percentage of used swap space.
# n = "";
}
if (n == "totsck")
{ # This is the socket info
print $2 > FILENAME".sock.totsck.dat"; # Total number of used sockets.
print $3 > FILENAME".sock.tcpsck.dat"; # Number of TCP sockets currently in use.
# print $4 > FILENAME".sock.udpsck.dat"; # Number of UDP sockets currently in use.
# print $5 > FILENAME".sock.rawsck.dat"; # Number of RAW sockets currently in use.
# print $6 > FILENAME".sock.ip-frag.dat"; # Number of IP fragments currently in use.
# n = "";
}
}
}
END {
print " '" FILENAME "' done.";
}

BIN
samples/Binary/cube.stl Normal file

Binary file not shown.

View File

@@ -0,0 +1,147 @@
Local bk = CreateBank(8)
PokeFloat bk, 0, -1
Print Bin(PeekInt(bk, 0))
Print %1000000000000000
Print Bin(1 Shl 31)
Print $1f
Print $ff
Print $1f + (127 - 15)
Print Hex(%01111111100000000000000000000000)
Print Hex(~%11111111100000000000000000000000)
Print Bin(FloatToHalf(-2.5))
Print HalfToFloat(FloatToHalf(-200000000000.0))
Print Bin(FToI(-2.5))
WaitKey
End
; Half-precision (16-bit) arithmetic library
;============================================
Global Half_CBank_
Function FToI(f#)
If Half_CBank_ = 0 Then Half_CBank_ = CreateBank(4)
PokeFloat Half_CBank_, 0, f
Return PeekInt(Half_CBank_, 0)
End Function
Function HalfToFloat#(h)
Local signBit, exponent, fraction, fBits
signBit = (h And 32768) <> 0
exponent = (h And %0111110000000000) Shr 10
fraction = (h And %0000001111111111)
If exponent = $1F Then exponent = $FF : ElseIf exponent Then exponent = (exponent - 15) + 127
fBits = (signBit Shl 31) Or (exponent Shl 23) Or (fraction Shl 13)
If Half_CBank_ = 0 Then Half_CBank_ = CreateBank(4)
PokeInt Half_CBank_, 0, fBits
Return PeekFloat(Half_CBank_, 0)
End Function
Function FloatToHalf(f#)
Local signBit, exponent, fraction, fBits
If Half_CBank_ = 0 Then Half_CBank_ = CreateBank(4)
PokeFloat Half_CBank_, 0, f
fBits = PeekInt(Half_CBank_, 0)
signBit = (fBits And (1 Shl 31)) <> 0
exponent = (fBits And $7F800000) Shr 23
fraction = fBits And $007FFFFF
If exponent
exponent = exponent - 127
If Abs(exponent) > $1F
If exponent <> ($FF - 127) Then fraction = 0
exponent = $1F * Sgn(exponent)
Else
exponent = exponent + 15
EndIf
exponent = exponent And %11111
EndIf
fraction = fraction Shr 13
Return (signBit Shl 15) Or (exponent Shl 10) Or fraction
End Function
Function HalfAdd(l, r)
End Function
Function HalfSub(l, r)
End Function
Function HalfMul(l, r)
End Function
Function HalfDiv(l, r)
End Function
Function HalfLT(l, r)
End Function
Function HalfGT(l, r)
End Function
; Double-precision (64-bit) arithmetic library)
;===============================================
Global DoubleOut[1], Double_CBank_
Function DoubleToFloat#(d[1])
End Function
Function FloatToDouble(f#)
End Function
Function IntToDouble(i)
End Function
Function SefToDouble(s, e, f)
End Function
Function DoubleAdd(l, r)
End Function
Function DoubleSub(l, r)
End Function
Function DoubleMul(l, r)
End Function
Function DoubleDiv(l, r)
End Function
Function DoubleLT(l, r)
End Function
Function DoubleGT(l, r)
End Function
;~IDEal Editor Parameters:
;~F#1A#20#2F
;~C#Blitz3D

369
samples/BlitzBasic/LList.bb Normal file
View File

@@ -0,0 +1,369 @@
; Double-linked list container class
;====================================
; with thanks to MusicianKool, for concept and issue fixes
Type LList
Field head_.ListNode
Field tail_.ListNode
End Type
Type ListNode
Field pv_.ListNode
Field nx_.ListNode
Field Value
End Type
Type Iterator
Field Value
Field l_.LList
Field cn_.ListNode, cni_
End Type
;Create a new LList object
Function CreateList.LList()
Local l.LList = New LList
l\head_ = New ListNode
l\tail_ = New ListNode
l\head_\nx_ = l\tail_ ;End caps
l\head_\pv_ = l\head_ ;These make it more or less safe to iterate freely
l\head_\Value = 0
l\tail_\nx_ = l\tail_
l\tail_\pv_ = l\head_
l\tail_\Value = 0
Return l
End Function
;Free a list and all elements (not any values)
Function FreeList(l.LList)
ClearList l
Delete l\head_
Delete l\tail_
Delete l
End Function
;Remove all the elements from a list (does not free values)
Function ClearList(l.LList)
Local n.ListNode = l\head_\nx_
While n <> l\tail_
Local nx.ListNode = n\nx_
Delete n
n = nx
Wend
l\head_\nx_ = l\tail_
l\tail_\pv_ = l\head_
End Function
;Count the number of elements in a list (slow)
Function ListLength(l.LList)
Local i.Iterator = GetIterator(l), elems
While EachIn(i)
elems = elems + 1
Wend
Return elems
End Function
;Return True if a list contains a given value
Function ListContains(l.LList, Value)
Return (ListFindNode(l, Value) <> Null)
End Function
;Create a linked list from the intvalues in a bank (slow)
Function ListFromBank.LList(bank)
Local l.LList = CreateList()
Local size = BankSize(bank), p
For p = 0 To size - 4 Step 4
ListAddLast l, PeekInt(bank, p)
Next
Return l
End Function
;Create a bank containing all the values in a list (slow)
Function ListToBank(l.LList)
Local size = ListLength(l) * 4
Local bank = CreateBank(size)
Local i.Iterator = GetIterator(l), p = 0
While EachIn(i)
PokeInt bank, p, i\Value
p = p + 4
Wend
Return bank
End Function
;Swap the contents of two list objects
Function SwapLists(l1.LList, l2.LList)
Local tempH.ListNode = l1\head_, tempT.ListNode = l1\tail_
l1\head_ = l2\head_
l1\tail_ = l2\tail_
l2\head_ = tempH
l2\tail_ = tempT
End Function
;Create a new list containing the same values as the first
Function CopyList.LList(lo.LList)
Local ln.LList = CreateList()
Local i.Iterator = GetIterator(lo) : While EachIn(i)
ListAddLast ln, i\Value
Wend
Return ln
End Function
;Reverse the order of elements of a list
Function ReverseList(l.LList)
Local n1.ListNode, n2.ListNode, tmp.ListNode
n1 = l\head_
n2 = l\head_\nx_
While n1 <> l\tail_
n1\pv_ = n2
tmp = n2\nx_
n2\nx_ = n1
n1 = n2
n2 = tmp
Wend
tmp = l\head_
l\head_ = l\tail_
l\tail_ = tmp
l\head_\pv_ = l\head_
l\tail_\nx_ = l\tail_
End Function
;Search a list to retrieve the first node with the given value
Function ListFindNode.ListNode(l.LList, Value)
Local n.ListNode = l\head_\nx_
While n <> l\tail_
If n\Value = Value Then Return n
n = n\nx_
Wend
Return Null
End Function
;Append a value to the end of a list (fast) and return the node
Function ListAddLast.ListNode(l.LList, Value)
Local n.ListNode = New ListNode
n\pv_ = l\tail_\pv_
n\nx_ = l\tail_
n\Value = Value
l\tail_\pv_ = n
n\pv_\nx_ = n
Return n
End Function
;Attach a value to the start of a list (fast) and return the node
Function ListAddFirst.ListNode(l.LList, Value)
Local n.ListNode = New ListNode
n\pv_ = l\head_
n\nx_ = l\head_\nx_
n\Value = Value
l\head_\nx_ = n
n\nx_\pv_ = n
Return n
End Function
;Remove the first occurence of the given value from a list
Function ListRemove(l.LList, Value)
Local n.ListNode = ListFindNode(l, Value)
If n <> Null Then RemoveListNode n
End Function
;Remove a node from a list
Function RemoveListNode(n.ListNode)
n\pv_\nx_ = n\nx_
n\nx_\pv_ = n\pv_
Delete n
End Function
;Return the value of the element at the given position from the start of the list,
;or backwards from the end of the list for a negative index
Function ValueAtIndex(l.LList, index)
Local n.ListNode = ListNodeAtIndex(l, index)
If n <> Null Then Return n\Value : Else Return 0
End Function
;Return the ListNode at the given position from the start of the list, or backwards
;from the end of the list for a negative index, or Null if invalid
Function ListNodeAtIndex.ListNode(l.LList, index)
Local e, n.ListNode
If index >= 0
n = l\head_
For e = 0 To index
n = n\nx_
Next
If n = l\tail_ Then n = Null ;Beyond the end of the list - not valid
Else ;Negative index - count backward
n = l\tail_
For e = 0 To index Step -1
n = n\pv_
Next
If n = l\head_ Then n = Null ;Before the start of the list - not valid
EndIf
Return n
End Function
;Replace a value at the given position (added by MusicianKool)
Function ReplaceValueAtIndex(l.LList,index,value)
Local n.ListNode = ListNodeAtIndex(l,index)
If n <> Null Then n\Value = value:Else Return 0
End Function
;Remove and return a value at the given position (added by MusicianKool)
Function RemoveNodeAtIndex(l.LList,index)
Local n.ListNode = ListNodeAtIndex(l,index),tval
If n <> Null Then tval = n\Value:RemoveListNode(n):Return tval:Else Return 0
End Function
;Retrieve the first value from a list
Function ListFirst(l.LList)
If l\head_\nx_ <> l\tail_ Then Return l\head_\nx_\Value
End Function
;Retrieve the last value from a list
Function ListLast(l.LList)
If l\tail_\pv_ <> l\head_ Then Return l\tail_\pv_\Value
End Function
;Remove the first element from a list, and return its value
Function ListRemoveFirst(l.LList)
Local val
If l\head_\nx_ <> l\tail_
val = l\head_\nx_\Value
RemoveListNode l\head_\nx_
EndIf
Return val
End Function
;Remove the last element from a list, and return its value
Function ListRemoveLast(l.LList)
Local val
If l\tail_\pv_ <> l\head_
val = l\tail_\pv_\Value
RemoveListNode l\tail_\pv_
EndIf
Return val
End Function
;Insert a value into a list before the specified node, and return the new node
Function InsertBeforeNode.ListNode(Value, n.ListNode)
Local bef.ListNode = New ListNode
bef\pv_ = n\pv_
bef\nx_ = n
bef\Value = Value
n\pv_ = bef
bef\pv_\nx_ = bef
Return bef
End Function
;Insert a value into a list after the specified node, and return then new node
Function InsertAfterNode.ListNode(Value, n.ListNode)
Local aft.ListNode = New ListNode
aft\nx_ = n\nx_
aft\pv_ = n
aft\Value = Value
n\nx_ = aft
aft\nx_\pv_ = aft
Return aft
End Function
;Get an iterator object to use with a loop
;This function means that most programs won't have to think about deleting iterators manually
;(in general only a small, constant number will be created)
Function GetIterator.Iterator(l.LList)
Local i.Iterator
If l = Null Then RuntimeError "Cannot create Iterator for Null"
For i = Each Iterator ;See if there's an available iterator at the moment
If i\l_ = Null Then Exit
Next
If i = Null Then i = New Iterator ;If there wasn't, create one
i\l_ = l
i\cn_ = l\head_
i\cni_ = -1
i\Value = 0 ;No especial reason why this has to be anything, but meh
Return i
End Function
;Use as the argument to While to iterate over the members of a list
Function EachIn(i.Iterator)
i\cn_ = i\cn_\nx_
If i\cn_ <> i\l_\tail_ ;Still items in the list
i\Value = i\cn_\Value
i\cni_ = i\cni_ + 1
Return True
Else
i\l_ = Null ;Disconnect from the list, having reached the end
i\cn_ = Null
i\cni_ = -1
Return False
EndIf
End Function
;Remove from the containing list the element currently pointed to by an iterator
Function IteratorRemove(i.Iterator)
If (i\cn_ <> i\l_\head_) And (i\cn_ <> i\l_\tail_)
Local temp.ListNode = i\cn_
i\cn_ = i\cn_\pv_
i\cni_ = i\cni_ - 1
i\Value = 0
RemoveListNode temp
Return True
Else
Return False
EndIf
End Function
;Call this before breaking out of an EachIn loop, to disconnect the iterator from the list
Function IteratorBreak(i.Iterator)
i\l_ = Null
i\cn_ = Null
i\cni_ = -1
i\Value = 0
End Function
;~IDEal Editor Parameters:
;~F#5#A#10#18#2A#32#3E#47#4C#58#66#6F#78#8F#9B#A9#B7#BD#C5#CC
;~F#E3#E9#EF#F4#F9#103#10D#11B#12B#13F#152#163
;~C#Blitz3D

View File

@@ -0,0 +1,66 @@
Local i, start, result
Local s.Sum3Obj = New Sum3Obj
For i = 1 To 100000
s = New Sum3Obj
result = Handle Before s
Delete s
Next
start = MilliSecs()
For i = 1 To 1000000
result = Sum3_(MakeSum3Obj(i, i, i))
Next
start = MilliSecs() - start
Print start
start = MilliSecs()
For i = 1 To 1000000
result = Sum3(i, i, i)
Next
start = MilliSecs() - start
Print start
WaitKey
End
Function Sum3(a, b, c)
Return a + b + c
End Function
Type Sum3Obj
Field isActive
Field a, b, c
End Type
Function MakeSum3Obj(a, b, c)
Local s.Sum3Obj = Last Sum3Obj
If s\isActive Then s = New Sum3Obj
s\isActive = True
s\a = a
s\b = b
s\c = c
Restore label
Read foo
Return Handle(s)
End Function
.label
Data (10 + 2), 12, 14
:
Function Sum3_(a_)
Local a.Sum3Obj = Object.Sum3Obj a_
Local return_ = a\a + a\b + a\c
Insert a Before First Sum3Obj :: a\isActive = False
Return return_
End Function
;~IDEal Editor Parameters:
;~C#Blitz3D

167
samples/Bluespec/TL.bsv Normal file
View File

@@ -0,0 +1,167 @@
package TL;
interface TL;
method Action ped_button_push();
(* always_enabled *)
method Action set_car_state_N(Bool x);
(* always_enabled *)
method Action set_car_state_S(Bool x);
(* always_enabled *)
method Action set_car_state_E(Bool x);
(* always_enabled *)
method Action set_car_state_W(Bool x);
method Bool lampRedNS();
method Bool lampAmberNS();
method Bool lampGreenNS();
method Bool lampRedE();
method Bool lampAmberE();
method Bool lampGreenE();
method Bool lampRedW();
method Bool lampAmberW();
method Bool lampGreenW();
method Bool lampRedPed();
method Bool lampAmberPed();
method Bool lampGreenPed();
endinterface: TL
typedef enum {
AllRed,
GreenNS, AmberNS,
GreenE, AmberE,
GreenW, AmberW,
GreenPed, AmberPed} TLstates deriving (Eq, Bits);
typedef UInt#(5) Time32;
typedef UInt#(20) CtrSize;
(* synthesize *)
module sysTL(TL);
Time32 allRedDelay = 2;
Time32 amberDelay = 4;
Time32 nsGreenDelay = 20;
Time32 ewGreenDelay = 10;
Time32 pedGreenDelay = 10;
Time32 pedAmberDelay = 6;
CtrSize clocks_per_sec = 100;
Reg#(TLstates) state <- mkReg(AllRed);
Reg#(TLstates) next_green <- mkReg(GreenNS);
Reg#(Time32) secs <- mkReg(0);
Reg#(Bool) ped_button_pushed <- mkReg(False);
Reg#(Bool) car_present_N <- mkReg(True);
Reg#(Bool) car_present_S <- mkReg(True);
Reg#(Bool) car_present_E <- mkReg(True);
Reg#(Bool) car_present_W <- mkReg(True);
Bool car_present_NS = car_present_N || car_present_S;
Reg#(CtrSize) cycle_ctr <- mkReg(0);
rule dec_cycle_ctr (cycle_ctr != 0);
cycle_ctr <= cycle_ctr - 1;
endrule
Rules low_priority_rule = (rules
rule inc_sec (cycle_ctr == 0);
secs <= secs + 1;
cycle_ctr <= clocks_per_sec;
endrule endrules);
function Action next_state(TLstates ns);
action
state <= ns;
secs <= 0;
endaction
endfunction: next_state
function TLstates green_seq(TLstates x);
case (x)
GreenNS: return (GreenE);
GreenE: return (GreenW);
GreenW: return (GreenNS);
endcase
endfunction
function Bool car_present(TLstates x);
case (x)
GreenNS: return (car_present_NS);
GreenE: return (car_present_E);
GreenW: return (car_present_W);
endcase
endfunction
function Rules make_from_green_rule(TLstates green_state, Time32 delay, Bool car_is_present, TLstates ns);
return (rules
rule from_green (state == green_state && (secs >= delay || !car_is_present));
next_state(ns);
endrule endrules);
endfunction: make_from_green_rule
function Rules make_from_amber_rule(TLstates amber_state, TLstates ng);
return (rules
rule from_amber (state == amber_state && secs >= amberDelay);
next_state(AllRed);
next_green <= ng;
endrule endrules);
endfunction: make_from_amber_rule
Rules hprs[7];
hprs[1] = make_from_green_rule(GreenNS, nsGreenDelay, car_present_NS, AmberNS);
hprs[2] = make_from_amber_rule(AmberNS, GreenE);
hprs[3] = make_from_green_rule(GreenE, ewGreenDelay, car_present_E, AmberE);
hprs[4] = make_from_amber_rule(AmberE, GreenW);
hprs[5] = make_from_green_rule(GreenW, ewGreenDelay, car_present_W, AmberW);
hprs[6] = make_from_amber_rule(AmberW, GreenNS);
hprs[0] = (rules
rule fromAllRed (state == AllRed && secs >= allRedDelay);
if (ped_button_pushed) action
ped_button_pushed <= False;
next_state(GreenPed);
endaction else if (car_present(next_green))
next_state(next_green);
else if (car_present(green_seq(next_green)))
next_state(green_seq(next_green));
else if (car_present(green_seq(green_seq(next_green))))
next_state(green_seq(green_seq(next_green)));
else
noAction;
endrule: fromAllRed endrules);
Rules high_priority_rules = hprs[0];
for (Integer i = 1; i<7; i=i+1)
high_priority_rules = rJoin(hprs[i], high_priority_rules);
addRules(preempts(high_priority_rules, low_priority_rule));
method Action ped_button_push();
ped_button_pushed <= True;
endmethod: ped_button_push
method Action set_car_state_N(b) ; car_present_N <= b; endmethod
method Action set_car_state_S(b) ; car_present_S <= b; endmethod
method Action set_car_state_E(b) ; car_present_E <= b; endmethod
method Action set_car_state_W(b) ; car_present_W <= b; endmethod
method lampRedNS() = (!(state == GreenNS || state == AmberNS));
method lampAmberNS() = (state == AmberNS);
method lampGreenNS() = (state == GreenNS);
method lampRedE() = (!(state == GreenE || state == AmberE));
method lampAmberE() = (state == AmberE);
method lampGreenE() = (state == GreenE);
method lampRedW() = (!(state == GreenW || state == AmberW));
method lampAmberW() = (state == AmberW);
method lampGreenW() = (state == GreenW);
method lampRedPed() = (!(state == GreenPed || state == AmberPed));
method lampAmberPed() = (state == AmberPed);
method lampGreenPed() = (state == GreenPed);
endmodule: sysTL
endpackage: TL

109
samples/Bluespec/TbTL.bsv Normal file
View File

@@ -0,0 +1,109 @@
package TbTL;
import TL::*;
interface Lamp;
method Bool changed;
method Action show_offs;
method Action show_ons;
method Action reset;
endinterface
module mkLamp#(String name, Bool lamp)(Lamp);
Reg#(Bool) prev <- mkReg(False);
method changed = (prev != lamp);
method Action show_offs;
if (prev && !lamp)
$write (name + " off, ");
endmethod
method Action show_ons;
if (!prev && lamp)
$write (name + " on, ");
endmethod
method Action reset;
prev <= lamp;
endmethod
endmodule
(* synthesize *)
module mkTest();
let dut <- sysTL;
Reg#(Bit#(16)) ctr <- mkReg(0);
Reg#(Bool) carN <- mkReg(False);
Reg#(Bool) carS <- mkReg(False);
Reg#(Bool) carE <- mkReg(False);
Reg#(Bool) carW <- mkReg(False);
Lamp lamps[12];
lamps[0] <- mkLamp("0: NS red ", dut.lampRedNS);
lamps[1] <- mkLamp("1: NS amber", dut.lampAmberNS);
lamps[2] <- mkLamp("2: NS green", dut.lampGreenNS);
lamps[3] <- mkLamp("3: E red ", dut.lampRedE);
lamps[4] <- mkLamp("4: E amber", dut.lampAmberE);
lamps[5] <- mkLamp("5: E green", dut.lampGreenE);
lamps[6] <- mkLamp("6: W red ", dut.lampRedW);
lamps[7] <- mkLamp("7: W amber", dut.lampAmberW);
lamps[8] <- mkLamp("8: W green", dut.lampGreenW);
lamps[9] <- mkLamp("9: Ped red ", dut.lampRedPed);
lamps[10] <- mkLamp("10: Ped amber", dut.lampAmberPed);
lamps[11] <- mkLamp("11: Ped green", dut.lampGreenPed);
rule start (ctr == 0);
$dumpvars;
endrule
rule detect_cars;
dut.set_car_state_N(carN);
dut.set_car_state_S(carS);
dut.set_car_state_E(carE);
dut.set_car_state_W(carW);
endrule
rule go;
ctr <= ctr + 1;
if (ctr == 5000) carN <= True;
if (ctr == 6500) carN <= False;
if (ctr == 12_000) dut.ped_button_push;
endrule
rule stop (ctr > 32768);
$display("TESTS FINISHED");
$finish(0);
endrule
function do_offs(l) = l.show_offs;
function do_ons(l) = l.show_ons;
function do_reset(l) = l.reset;
function do_it(f);
action
for (Integer i=0; i<12; i=i+1)
f(lamps[i]);
endaction
endfunction
function any_changes();
Bool b = False;
for (Integer i=0; i<12; i=i+1)
b = b || lamps[i].changed;
return b;
endfunction
rule show (any_changes());
do_it(do_offs);
do_it(do_ons);
do_it(do_reset);
$display("(at time %d)", $time);
endrule
endmodule
endpackage

View File

@@ -0,0 +1,305 @@
' *********************************************************
' ** Simple Grid Screen Demonstration App
' ** Jun 2010
' ** Copyright (c) 2010 Roku Inc. All Rights Reserved.
' *********************************************************
'************************************************************
'** Application startup
'************************************************************
Sub Main()
'initialize theme attributes like titles, logos and overhang color
initTheme()
gridstyle = "Flat-Movie"
'set to go, time to get started
while gridstyle <> ""
print "starting grid style= ";gridstyle
screen=preShowGridScreen(gridstyle)
gridstyle = showGridScreen(screen, gridstyle)
end while
End Sub
'*************************************************************
'** Set the configurable theme attributes for the application
'**
'** Configure the custom overhang and Logo attributes
'** These attributes affect the branding of the application
'** and are artwork, colors and offsets specific to the app
'*************************************************************
Sub initTheme()
app = CreateObject("roAppManager")
app.SetTheme(CreateDefaultTheme())
End Sub
'******************************************************
'** @return The default application theme.
'** Screens can make slight adjustments to the default
'** theme by getting it from here and then overriding
'** individual theme attributes.
'******************************************************
Function CreateDefaultTheme() as Object
theme = CreateObject("roAssociativeArray")
theme.ThemeType = "generic-dark"
' All these are greyscales
theme.GridScreenBackgroundColor = "#363636"
theme.GridScreenMessageColor = "#808080"
theme.GridScreenRetrievingColor = "#CCCCCC"
theme.GridScreenListNameColor = "#FFFFFF"
' Color values work here
theme.GridScreenDescriptionTitleColor = "#001090"
theme.GridScreenDescriptionDateColor = "#FF005B"
theme.GridScreenDescriptionRuntimeColor = "#5B005B"
theme.GridScreenDescriptionSynopsisColor = "#606000"
'used in the Grid Screen
theme.CounterTextLeft = "#FF0000"
theme.CounterSeparator = "#00FF00"
theme.CounterTextRight = "#0000FF"
theme.GridScreenLogoHD = "pkg:/images/Overhang_Test_HD.png"
theme.GridScreenLogoOffsetHD_X = "0"
theme.GridScreenLogoOffsetHD_Y = "0"
theme.GridScreenOverhangHeightHD = "99"
theme.GridScreenLogoSD = "pkg:/images/Overhang_Test_SD43.png"
theme.GridScreenOverhangHeightSD = "66"
theme.GridScreenLogoOffsetSD_X = "0"
theme.GridScreenLogoOffsetSD_Y = "0"
' to use your own focus ring artwork
'theme.GridScreenFocusBorderSD = "pkg:/images/GridCenter_Border_Movies_SD43.png"
'theme.GridScreenBorderOffsetSD = "(-26,-25)"
'theme.GridScreenFocusBorderHD = "pkg:/images/GridCenter_Border_Movies_HD.png"
'theme.GridScreenBorderOffsetHD = "(-28,-20)"
' to use your own description background artwork
'theme.GridScreenDescriptionImageSD = "pkg:/images/Grid_Description_Background_SD43.png"
'theme.GridScreenDescriptionOffsetSD = "(125,170)"
'theme.GridScreenDescriptionImageHD = "pkg:/images/Grid_Description_Background_HD.png"
'theme.GridScreenDescriptionOffsetHD = "(190,255)"
return theme
End Function
'******************************************************
'** Perform any startup/initialization stuff prior to
'** initially showing the screen.
'******************************************************
Function preShowGridScreen(style as string) As Object
m.port=CreateObject("roMessagePort")
screen = CreateObject("roGridScreen")
screen.SetMessagePort(m.port)
' screen.SetDisplayMode("best-fit")
screen.SetDisplayMode("scale-to-fill")
screen.SetGridStyle(style)
return screen
End Function
'******************************************************
'** Display the gird screen and wait for events from
'** the screen. The screen will show retreiving while
'** we fetch and parse the feeds for the show posters
'******************************************************
Function showGridScreen(screen As Object, gridstyle as string) As string
print "enter showGridScreen"
categoryList = getCategoryList()
categoryList[0] = "GridStyle: " + gridstyle
screen.setupLists(categoryList.count())
screen.SetListNames(categoryList)
StyleButtons = getGridControlButtons()
screen.SetContentList(0, StyleButtons)
for i = 1 to categoryList.count()-1
screen.SetContentList(i, getShowsForCategoryItem(categoryList[i]))
end for
screen.Show()
while true
print "Waiting for message"
msg = wait(0, m.port)
'msg = wait(0, screen.GetMessagePort()) ' getmessageport does not work on gridscreen
print "Got Message:";type(msg)
if type(msg) = "roGridScreenEvent" then
print "msg= "; msg.GetMessage() " , index= "; msg.GetIndex(); " data= "; msg.getData()
if msg.isListItemFocused() then
print"list item focused | current show = "; msg.GetIndex()
else if msg.isListItemSelected() then
row = msg.GetIndex()
selection = msg.getData()
print "list item selected row= "; row; " selection= "; selection
' Did we get a selection from the gridstyle selection row?
if (row = 0)
' yes, return so we can come back with new style
return StyleButtons[selection].Title
endif
'm.curShow = displayShowDetailScreen(showList[msg.GetIndex()])
else if msg.isScreenClosed() then
return ""
end if
end If
end while
End Function
'**********************************************************
'** When a poster on the home screen is selected, we call
'** this function passing an roAssociativeArray with the
'** ContentMetaData for the selected show. This data should
'** be sufficient for the springboard to display
'**********************************************************
Function displayShowDetailScreen(category as Object, showIndex as Integer) As Integer
'add code to create springboard, for now we do nothing
return 1
End Function
'**************************************************************
'** Return the list of categories to display in the filter
'** banner. The result is an roArray containing the names of
'** all of the categories. All just static data for the example.
'***************************************************************
Function getCategoryList() As Object
categoryList = [ "GridStyle", "Reality", "History", "News", "Comedy", "Drama"]
return categoryList
End Function
'********************************************************************
'** Given the category from the filter banner, return an array
'** of ContentMetaData objects (roAssociativeArray's) representing
'** the shows for the category. For this example, we just cheat and
'** create and return a static array with just the minimal items
'** set, but ideally, you'd go to a feed service, fetch and parse
'** this data dynamically, so content for each category is dynamic
'********************************************************************
Function getShowsForCategoryItem(category As Object) As Object
print "getting shows for category "; category
showList = [
{
Title: category + ": Header",
releaseDate: "1976",
length: 3600-600,
Description:"This row is category " + category,
hdBranded: true,
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif",
Description:"Short Synopsis #1",
Synopsis:"Length",
StarRating:10,
}
{
Title: category + ": Beverly Hillbillies",
releaseDate: "1969",
rating: "PG",
Description:"Come and listen to a story about a man named Jed: Poor mountaineer, barely kept his family fed. Then one day he was shootin at some food, and up through the ground came a bubblin crude. Oil that is, black gold, Texas tea.",
numEpisodes:42,
contentType:"season",
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/4/4e/The_Beverly_Hillbillies.jpg",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/4/4e/The_Beverly_Hillbillies.jpg",
StarRating:80,
UserStarRating:40
}
{
Title: category + ": Babylon 5",
releaseDate: "1996",
rating: "PG",
Description:"The show centers on the Babylon 5 space station: a focal point for politics, diplomacy, and conflict during the years 2257-2262.",
numEpisodes:102,
contentType:"season",
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/9/9d/Smb5-s4.jpg",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/9/9d/Smb5-s4.jpg",
StarRating:80,
UserStarRating:40
}
{
Title: category + ": John F. Kennedy",
releaseDate: "1961",
rating: "PG",
Description:"My fellow citizens of the world: ask not what America will do for you, but what together we can do for the freedom of man.",
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/5/52/Jfk_happy_birthday_1.jpg",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/5/52/Jfk_happy_birthday_1.jpg",
StarRating:100
}
{
Title: category + ": Man on the Moon",
releaseDate: "1969",
rating: "PG",
Description:"That's one small step for a man, one giant leap for mankind.",
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/1/1e/Apollo_11_first_step.jpg",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/1/1e/Apollo_11_first_step.jpg",
StarRating:100
}
{
Title: category + ": I have a Dream",
releaseDate: "1963",
rating: "PG",
Description:"I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin, but by the content of their character.",
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/8/81/Martin_Luther_King_-_March_on_Washington.jpg",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/8/81/Martin_Luther_King_-_March_on_Washington.jpg",
StarRating:100
}
]
return showList
End Function
function getGridControlButtons() as object
buttons = [
{ Title: "Flat-Movie"
ReleaseDate: "HD:5x2 SD:5x2"
Description: "Flat-Movie (Netflix) style"
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif"
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif"
}
{ Title: "Flat-Landscape"
ReleaseDate: "HD:5x3 SD:4x3"
Description: "Channel Store"
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Dunkery_Hill.jpg/800px-Dunkery_Hill.jpg",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Dunkery_Hill.jpg/800px-Dunkery_Hill.jpg",
}
{ Title: "Flat-Portrait"
ReleaseDate: "HD:5x2 SD:5x2"
Description: "3x4 style posters"
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/9/9f/Kane_George_Gurnett.jpg",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/9/9f/Kane_George_Gurnett.jpg",
}
{ Title: "Flat-Square"
ReleaseDate: "HD:7x3 SD:6x3"
Description: "1x1 style posters"
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/d/de/SQUARE_SHAPE.svg/536px-SQUARE_SHAPE.svg.png",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/d/de/SQUARE_SHAPE.svg/536px-SQUARE_SHAPE.svg.png",
}
{ Title: "Flat-16x9"
ReleaseDate: "HD:5x3 SD:4x3"
Description: "HD style posters"
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/2/22/%C3%89cran_TV_plat.svg/200px-%C3%89cran_TV_plat.svg.png",
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/2/22/%C3%89cran_TV_plat.svg/200px-%C3%89cran_TV_plat.svg.png",
}
]
return buttons
End Function

45
samples/C#/Index.cshtml Normal file
View File

@@ -0,0 +1,45 @@
@{
ViewBag.Title = "Home Page";
}
@section featured {
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>@ViewBag.Message</h2>
</hgroup>
<p>
To learn more about ASP.NET MVC visit
<a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
The page features <mark>videos, tutorials, and samples</mark> to help you get the most from ASP.NET MVC.
If you have any questions about ASP.NET MVC visit
<a href="http://forums.asp.net/1146.aspx/1?MVC" title="ASP.NET MVC Forum">our forums</a>.
</p>
</div>
</section>
}
<h3>We suggest the following:</h3>
<ol class="round">
<li class="one">
<h5>Getting Started</h5>
ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that
enables a clean separation of concerns and that gives you full control over markup
for enjoyable, agile development. ASP.NET MVC includes many features that enable
fast, TDD-friendly development for creating sophisticated applications that use
the latest web standards.
<a href="http://go.microsoft.com/fwlink/?LinkId=245151">Learn more…</a>
</li>
<li class="two">
<h5>Add NuGet packages and jump-start your coding</h5>
NuGet makes it easy to install and update free libraries and tools.
<a href="http://go.microsoft.com/fwlink/?LinkId=245153">Learn more…</a>
</li>
<li class="three">
<h5>Find Web Hosting</h5>
You can easily find a web hosting company that offers the right mix of features
and price for your applications.
<a href="http://go.microsoft.com/fwlink/?LinkId=245157">Learn more…</a>
</li>
</ol>

21
samples/C#/Program.cs Normal file
View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LittleSampleApp
{
/// <summary>
/// Just what it says on the tin. A little sample application for Linguist to try out.
///
/// </summary>
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, I am a little sample application to test GitHub's Linguist module.");
Console.WriteLine("I also include a Razor MVC file just to prove it handles cshtml files now.");
}
}
}

42
samples/C++/CsvStreamer.h Normal file
View File

@@ -0,0 +1,42 @@
#pragma once
#include <string>
#include <vector>
#include <fstream>
#include "util.h"
using namespace std;
#define DEFAULT_DELIMITER ','
class CsvStreamer
{
private:
ofstream file; // File output stream
vector<string> row_buffer; // Buffer which stores a row's data before being flushed/written
int fields; // Number of fields (columns)
long rows; // Number of rows (records) including header row
char delimiter; // Delimiter character; comma by default
string sanitize(string); // Returns a string ready for output into the file
public:
CsvStreamer(); // Empty CSV streamer... be sure to open the file before writing!
CsvStreamer(string, char); // Same as open(string, char)...
CsvStreamer(string); // Opens an output CSV file given a file path/name
~CsvStreamer(); // Ensures the output file is closed and saved
void open(string); // Opens an output CSV file given a file path/name (default delimiter)
void open(string, char); // Opens an output CSV file given a file path/name and a delimiting character (default comma)
void add_field(string); // If still on first line, adds a new field to the header row
void save_fields(); // Call this to save the header row; all new writes should be through append()
void append(string); // Appends the current row with this data for the next field; quoted only if needed (leading/trailing spaces are trimmed)
void append(string, bool); // Like append(string) but can specify whether to trim spaces at either end of the data (false to keep spaces)
void append(float); // Appends the current row with this number
void append(double); // Appends the current row with this number
void append(long); // Appends the current row with this number
void append(int); // Appends the current row with this number
void writeln(); // Flushes what was in the row buffer into the file (writes the row)
void close(); // Saves and closes the file
int field_count(); // Gets the number of fields (columns)
long row_count(); // Gets the number of records (rows) -- NOT including the header row
};

32
samples/C++/Field.h Normal file
View File

@@ -0,0 +1,32 @@
/*****************************************************************************
* Dwarf Mine - The 13-11 Benchmark
*
* Copyright (c) 2013 Bünger, Thomas; Kieschnick, Christian; Kusber,
* Michael; Lohse, Henning; Wuttke, Nikolai; Xylander, Oliver; Yao, Gary;
* Zimmermann, Florian
*
* 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.
*****************************************************************************/
#pragma once
enum Field { Free, Black, White, Illegal };
typedef Field Player;

530
samples/C++/Math.inl Normal file
View File

@@ -0,0 +1,530 @@
/*
===========================================================================
The Open Game Libraries.
Copyright (C) 2007-2010 Lusito Software
Author: Santo Pfingsten (TTK-Bandit)
Purpose: Math namespace
-----------------------------------------
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
===========================================================================
*/
#ifndef __OG_MATH_INL__
#define __OG_MATH_INL__
namespace og {
/*
==============================================================================
Math
==============================================================================
*/
/*
================
Math::Abs
================
*/
OG_INLINE int Math::Abs( int i ) {
#if 1
if ( i & 0x80000000 )
return 0x80000000 - (i & MASK_SIGNED);
return i;
#else
int y = x >> 31;
return ( ( x ^ y ) - y );
#endif
}
/*
================
Math::Fabs
================
*/
OG_INLINE float Math::Fabs( float f ) {
#if 1
uInt *pf = reinterpret_cast<uInt*>(&f);
*(pf) &= MASK_SIGNED;
return f;
#else
return fabsf( f );
#endif
}
/*
================
Math::Round
================
*/
OG_INLINE float Math::Round( float f ) {
return floorf( f + 0.5f );
}
/*
================
Math::Floor
================
*/
OG_INLINE float Math::Floor( float f ) {
return floorf( f );
}
/*
================
Math::Ceil
================
*/
OG_INLINE float Math::Ceil( float f ) {
return ceilf( f );
}
/*
================
Math::Ftoi
ok since this is SSE, why should the other ftoi be the faster one ?
and: we might need to add a check for SSE extensions..
because sse isn't *really* faster (I actually read that GCC does not handle
SSE extensions perfectly. I'll find the link and send it to you when you're online)
================
*/
OG_INLINE int Math::Ftoi( float f ) {
//! @todo needs testing
// note: sse function cvttss2si
#if OG_ASM_MSVC
int i;
#if defined(OG_FTOI_USE_SSE)
if( SysInfo::cpu.general.SSE ) {
__asm cvttss2si eax, f
__asm mov i, eax
return i;
} else
#endif
{
__asm fld f
__asm fistp i
//__asm mov eax, i // do we need this ? O_o
}
return i;
#elif OG_ASM_GNU
int i;
#if defined(OG_FTOI_USE_SSE)
if( SysInfo::cpu.general.SSE ) {
__asm__ __volatile__( "cvttss2si %1 \n\t"
: "=m" (i)
: "m" (f)
);
} else
#endif
{
__asm__ __volatile__( "flds %1 \n\t"
"fistpl %0 \n\t"
: "=m" (i)
: "m" (f)
);
}
return i;
#else
// we use c++ cast instead of c cast (not sure why id did that)
return static_cast<int>(f);
#endif
}
/*
================
Math::FtoiFast
================
*/
OG_INLINE int Math::FtoiFast( float f ) {
#if OG_ASM_MSVC
int i;
__asm fld f
__asm fistp i
//__asm mov eax, i // do we need this ? O_o
return i;
#elif OG_ASM_GNU
int i;
__asm__ __volatile__( "flds %1 \n\t"
"fistpl %0 \n\t"
: "=m" (i)
: "m" (f)
);
return i;
#else
// we use c++ cast instead of c cast (not sure why id did that)
return static_cast<int>(f);
#endif
}
/*
================
Math::Ftol
================
*/
OG_INLINE long Math::Ftol( float f ) {
#if OG_ASM_MSVC
long i;
__asm fld f
__asm fistp i
//__asm mov eax, i // do we need this ? O_o
return i;
#elif OG_ASM_GNU
long i;
__asm__ __volatile__( "flds %1 \n\t"
"fistpl %0 \n\t"
: "=m" (i)
: "m" (f)
);
return i;
#else
// we use c++ cast instead of c cast (not sure why id did that)
return static_cast<long>(f);
#endif
}
/*
================
Math::Sign
================
*/
OG_INLINE float Math::Sign( float f ) {
if ( f > 0.0f )
return 1.0f;
if ( f < 0.0f )
return -1.0f;
return 0.0f;
}
/*
================
Math::Fmod
================
*/
OG_INLINE float Math::Fmod( float numerator, float denominator ) {
return fmodf( numerator, denominator );
}
/*
================
Math::Modf
================
*/
OG_INLINE float Math::Modf( float f, float& i ) {
return modff( f, &i );
}
OG_INLINE float Math::Modf( float f ) {
float i;
return modff( f, &i );
}
/*
================
Math::Sqrt
================
*/
OG_INLINE float Math::Sqrt( float f ) {
return sqrtf( f );
}
/*
================
Math::InvSqrt
Cannot be 0.0f
================
*/
OG_INLINE float Math::InvSqrt( float f ) {
OG_ASSERT( f != 0.0f );
return 1.0f / sqrtf( f );
}
/*
================
Math::RSqrt
Can be 0.0f
================
*/
OG_INLINE float Math::RSqrt( float f ) {
float g = 0.5f * f;
int i = *reinterpret_cast<int *>(&f);
// do a guess
i = 0x5f375a86 - ( i>>1 );
f = *reinterpret_cast<float *>(&i);
// Newtons calculation
f = f * ( 1.5f - g * f * f );
return f;
}
/*
================
Math::Log/Log2/Log10
Log of 0 is bad.
I've also heard you're not really
supposed to do log of negatives, yet
they work fine.
================
*/
OG_INLINE float Math::Log( float f ) {
OG_ASSERT( f != 0.0f );
return logf( f );
}
OG_INLINE float Math::Log2( float f ) {
OG_ASSERT( f != 0.0f );
return INV_LN_2 * logf( f );
}
OG_INLINE float Math::Log10( float f ) {
OG_ASSERT( f != 0.0f );
return INV_LN_10 * logf( f );
}
/*
================
Math::Pow
================
*/
OG_INLINE float Math::Pow( float base, float exp ) {
return powf( base, exp );
}
/*
================
Math::Exp
================
*/
OG_INLINE float Math::Exp( float f ) {
return expf( f );
}
/*
================
Math::IsPowerOfTwo
================
*/
OG_INLINE bool Math::IsPowerOfTwo( int x ) {
// This is the faster of the two known methods
// with the x > 0 check moved to the beginning
return x > 0 && ( x & ( x - 1 ) ) == 0;
}
/*
================
Math::HigherPowerOfTwo
================
*/
OG_INLINE int Math::HigherPowerOfTwo( int x ) {
x--;
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
return x + 1;
}
/*
================
Math::LowerPowerOfTwo
================
*/
OG_INLINE int Math::LowerPowerOfTwo( int x ) {
return HigherPowerOfTwo( x ) >> 1;
}
/*
================
Math::FloorPowerOfTwo
================
*/
OG_INLINE int Math::FloorPowerOfTwo( int x ) {
return IsPowerOfTwo( x ) ? x : LowerPowerOfTwo( x );
}
/*
================
Math::CeilPowerOfTwo
================
*/
OG_INLINE int Math::CeilPowerOfTwo( int x ) {
return IsPowerOfTwo( x ) ? x : HigherPowerOfTwo( x );
}
/*
================
Math::ClosestPowerOfTwo
================
*/
OG_INLINE int Math::ClosestPowerOfTwo( int x ) {
if ( IsPowerOfTwo( x ) )
return x;
int high = HigherPowerOfTwo( x );
int low = high >> 1;
return ((high-x) < (x-low)) ? high : low;
}
/*
================
Math::Digits
================
*/
OG_INLINE int Math::Digits( int x ) {
int digits = 1;
int step = 10;
while (step <= x) {
digits++;
step *= 10;
}
return digits;
}
/*
================
Math::Sin/ASin
================
*/
OG_INLINE float Math::Sin( float f ) {
return sinf( f );
}
OG_INLINE float Math::ASin( float f ) {
if ( f <= -1.0f )
return -HALF_PI;
if ( f >= 1.0f )
return HALF_PI;
return asinf( f );
}
/*
================
Math::Cos/ACos
================
*/
OG_INLINE float Math::Cos( float f ) {
return cosf( f );
}
OG_INLINE float Math::ACos( float f ) {
if ( f <= -1.0f )
return PI;
if ( f >= 1.0f )
return 0.0f;
return acosf( f );
}
/*
================
Math::Tan/ATan
================
*/
OG_INLINE float Math::Tan( float f ) {
return tanf( f );
}
OG_INLINE float Math::ATan( float f ) {
return atanf( f );
}
OG_INLINE float Math::ATan( float f1, float f2 ) {
return atan2f( f1, f2 );
}
/*
================
Math::SinCos
================
*/
OG_INLINE void Math::SinCos( float f, float &s, float &c ) {
#if OG_ASM_MSVC
// sometimes assembler is just waaayy faster
_asm {
fld f
fsincos
mov ecx, c
mov edx, s
fstp dword ptr [ecx]
fstp dword ptr [edx]
}
#elif OG_ASM_GNU
asm ("fsincos" : "=t" (c), "=u" (s) : "0" (f));
#else
s = Sin(f);
c = Sqrt( 1.0f - s * s ); // faster than calling Cos(f)
#endif
}
/*
================
Math::Deg2Rad
================
*/
OG_INLINE float Math::Deg2Rad( float f ) {
return f * DEG_TO_RAD;
}
/*
================
Math::Rad2Deg
================
*/
OG_INLINE float Math::Rad2Deg( float f ) {
return f * RAD_TO_DEG;
}
/*
================
Math::Square
================
*/
OG_INLINE float Math::Square( float v ) {
return v * v;
}
/*
================
Math::Cube
================
*/
OG_INLINE float Math::Cube( float v ) {
return v * v * v;
}
/*
================
Math::Sec2Ms
================
*/
OG_INLINE int Math::Sec2Ms( int sec ) {
return sec * 1000;
}
/*
================
Math::Ms2Sec
================
*/
OG_INLINE int Math::Ms2Sec( int ms ) {
return FtoiFast( ms * 0.001f );
}
}
#endif

32
samples/C++/Types.h Normal file
View File

@@ -0,0 +1,32 @@
/*****************************************************************************
* Dwarf Mine - The 13-11 Benchmark
*
* Copyright (c) 2013 Bünger, Thomas; Kieschnick, Christian; Kusber,
* Michael; Lohse, Henning; Wuttke, Nikolai; Xylander, Oliver; Yao, Gary;
* Zimmermann, Florian
*
* 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.
*****************************************************************************/
#pragma once
#include <cstdint>
typedef uint32_t smallPrime_t;

1129
samples/C++/bcm2835.h Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,39 +0,0 @@
void foo()
{
cudaArray* cu_array;
texture<float, 2, cudaReadModeElementType> tex;
// Allocate array
cudaChannelFormatDesc description = cudaCreateChannelDesc<float>();
cudaMallocArray(&cu_array, &description, width, height);
// Copy image data to array
cudaMemcpyToArray(cu_array, image, width*height*sizeof(float), cudaMemcpyHostToDevice);
// Set texture parameters (default)
tex.addressMode[0] = cudaAddressModeClamp;
tex.addressMode[1] = cudaAddressModeClamp;
tex.filterMode = cudaFilterModePoint;
tex.normalized = false; // do not normalize coordinates
// Bind the array to the texture
cudaBindTextureToArray(tex, cu_array);
// Run kernel
dim3 blockDim(16, 16, 1);
dim3 gridDim((width + blockDim.x - 1)/ blockDim.x, (height + blockDim.y - 1) / blockDim.y, 1);
kernel<<< gridDim, blockDim, 0 >>>(d_data, height, width);
// Unbind the array from the texture
cudaUnbindTexture(tex);
} //end foo()
__global__ void kernel(float* odata, int height, int width)
{
unsigned int x = blockIdx.x*blockDim.x + threadIdx.x;
unsigned int y = blockIdx.y*blockDim.y + threadIdx.y;
if (x < width && y < height) {
float c = tex2D(tex, x, y);
odata[y*width+x] = c;
}
}

View File

@@ -0,0 +1,664 @@
//
// detail/impl/epoll_reactor.ipp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#ifndef BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_IPP
#define BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_IPP
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
#include <boost/asio/detail/config.hpp>
#if defined(BOOST_ASIO_HAS_EPOLL)
#include <cstddef>
#include <sys/epoll.h>
#include <boost/asio/detail/epoll_reactor.hpp>
#include <boost/asio/detail/throw_error.hpp>
#include <boost/asio/error.hpp>
#if defined(BOOST_ASIO_HAS_TIMERFD)
# include <sys/timerfd.h>
#endif // defined(BOOST_ASIO_HAS_TIMERFD)
#include <boost/asio/detail/push_options.hpp>
namespace boost {
namespace asio {
namespace detail {
epoll_reactor::epoll_reactor(boost::asio::io_service& io_service)
: boost::asio::detail::service_base<epoll_reactor>(io_service),
io_service_(use_service<io_service_impl>(io_service)),
mutex_(),
interrupter_(),
epoll_fd_(do_epoll_create()),
timer_fd_(do_timerfd_create()),
shutdown_(false)
{
// Add the interrupter's descriptor to epoll.
epoll_event ev = { 0, { 0 } };
ev.events = EPOLLIN | EPOLLERR | EPOLLET;
ev.data.ptr = &interrupter_;
epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, interrupter_.read_descriptor(), &ev);
interrupter_.interrupt();
// Add the timer descriptor to epoll.
if (timer_fd_ != -1)
{
ev.events = EPOLLIN | EPOLLERR;
ev.data.ptr = &timer_fd_;
epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, timer_fd_, &ev);
}
}
epoll_reactor::~epoll_reactor()
{
if (epoll_fd_ != -1)
close(epoll_fd_);
if (timer_fd_ != -1)
close(timer_fd_);
}
void epoll_reactor::shutdown_service()
{
mutex::scoped_lock lock(mutex_);
shutdown_ = true;
lock.unlock();
op_queue<operation> ops;
while (descriptor_state* state = registered_descriptors_.first())
{
for (int i = 0; i < max_ops; ++i)
ops.push(state->op_queue_[i]);
state->shutdown_ = true;
registered_descriptors_.free(state);
}
timer_queues_.get_all_timers(ops);
io_service_.abandon_operations(ops);
}
void epoll_reactor::fork_service(boost::asio::io_service::fork_event fork_ev)
{
if (fork_ev == boost::asio::io_service::fork_child)
{
if (epoll_fd_ != -1)
::close(epoll_fd_);
epoll_fd_ = -1;
epoll_fd_ = do_epoll_create();
if (timer_fd_ != -1)
::close(timer_fd_);
timer_fd_ = -1;
timer_fd_ = do_timerfd_create();
interrupter_.recreate();
// Add the interrupter's descriptor to epoll.
epoll_event ev = { 0, { 0 } };
ev.events = EPOLLIN | EPOLLERR | EPOLLET;
ev.data.ptr = &interrupter_;
epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, interrupter_.read_descriptor(), &ev);
interrupter_.interrupt();
// Add the timer descriptor to epoll.
if (timer_fd_ != -1)
{
ev.events = EPOLLIN | EPOLLERR;
ev.data.ptr = &timer_fd_;
epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, timer_fd_, &ev);
}
update_timeout();
// Re-register all descriptors with epoll.
mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
for (descriptor_state* state = registered_descriptors_.first();
state != 0; state = state->next_)
{
ev.events = state->registered_events_;
ev.data.ptr = state;
int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, state->descriptor_, &ev);
if (result != 0)
{
boost::system::error_code ec(errno,
boost::asio::error::get_system_category());
boost::asio::detail::throw_error(ec, "epoll re-registration");
}
}
}
}
void epoll_reactor::init_task()
{
io_service_.init_task();
}
int epoll_reactor::register_descriptor(socket_type descriptor,
epoll_reactor::per_descriptor_data& descriptor_data)
{
descriptor_data = allocate_descriptor_state();
{
mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
descriptor_data->reactor_ = this;
descriptor_data->descriptor_ = descriptor;
descriptor_data->shutdown_ = false;
}
epoll_event ev = { 0, { 0 } };
ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLPRI | EPOLLET;
descriptor_data->registered_events_ = ev.events;
ev.data.ptr = descriptor_data;
int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, descriptor, &ev);
if (result != 0)
return errno;
return 0;
}
int epoll_reactor::register_internal_descriptor(
int op_type, socket_type descriptor,
epoll_reactor::per_descriptor_data& descriptor_data, reactor_op* op)
{
descriptor_data = allocate_descriptor_state();
{
mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
descriptor_data->reactor_ = this;
descriptor_data->descriptor_ = descriptor;
descriptor_data->shutdown_ = false;
descriptor_data->op_queue_[op_type].push(op);
}
epoll_event ev = { 0, { 0 } };
ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLPRI | EPOLLET;
descriptor_data->registered_events_ = ev.events;
ev.data.ptr = descriptor_data;
int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, descriptor, &ev);
if (result != 0)
return errno;
return 0;
}
void epoll_reactor::move_descriptor(socket_type,
epoll_reactor::per_descriptor_data& target_descriptor_data,
epoll_reactor::per_descriptor_data& source_descriptor_data)
{
target_descriptor_data = source_descriptor_data;
source_descriptor_data = 0;
}
void epoll_reactor::start_op(int op_type, socket_type descriptor,
epoll_reactor::per_descriptor_data& descriptor_data, reactor_op* op,
bool is_continuation, bool allow_speculative)
{
if (!descriptor_data)
{
op->ec_ = boost::asio::error::bad_descriptor;
post_immediate_completion(op, is_continuation);
return;
}
mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
if (descriptor_data->shutdown_)
{
post_immediate_completion(op, is_continuation);
return;
}
if (descriptor_data->op_queue_[op_type].empty())
{
if (allow_speculative
&& (op_type != read_op
|| descriptor_data->op_queue_[except_op].empty()))
{
if (op->perform())
{
descriptor_lock.unlock();
io_service_.post_immediate_completion(op, is_continuation);
return;
}
if (op_type == write_op)
{
if ((descriptor_data->registered_events_ & EPOLLOUT) == 0)
{
epoll_event ev = { 0, { 0 } };
ev.events = descriptor_data->registered_events_ | EPOLLOUT;
ev.data.ptr = descriptor_data;
if (epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, descriptor, &ev) == 0)
{
descriptor_data->registered_events_ |= ev.events;
}
else
{
op->ec_ = boost::system::error_code(errno,
boost::asio::error::get_system_category());
io_service_.post_immediate_completion(op, is_continuation);
return;
}
}
}
}
else
{
if (op_type == write_op)
{
descriptor_data->registered_events_ |= EPOLLOUT;
}
epoll_event ev = { 0, { 0 } };
ev.events = descriptor_data->registered_events_;
ev.data.ptr = descriptor_data;
epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, descriptor, &ev);
}
}
descriptor_data->op_queue_[op_type].push(op);
io_service_.work_started();
}
void epoll_reactor::cancel_ops(socket_type,
epoll_reactor::per_descriptor_data& descriptor_data)
{
if (!descriptor_data)
return;
mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
op_queue<operation> ops;
for (int i = 0; i < max_ops; ++i)
{
while (reactor_op* op = descriptor_data->op_queue_[i].front())
{
op->ec_ = boost::asio::error::operation_aborted;
descriptor_data->op_queue_[i].pop();
ops.push(op);
}
}
descriptor_lock.unlock();
io_service_.post_deferred_completions(ops);
}
void epoll_reactor::deregister_descriptor(socket_type descriptor,
epoll_reactor::per_descriptor_data& descriptor_data, bool closing)
{
if (!descriptor_data)
return;
mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
if (!descriptor_data->shutdown_)
{
if (closing)
{
// The descriptor will be automatically removed from the epoll set when
// it is closed.
}
else
{
epoll_event ev = { 0, { 0 } };
epoll_ctl(epoll_fd_, EPOLL_CTL_DEL, descriptor, &ev);
}
op_queue<operation> ops;
for (int i = 0; i < max_ops; ++i)
{
while (reactor_op* op = descriptor_data->op_queue_[i].front())
{
op->ec_ = boost::asio::error::operation_aborted;
descriptor_data->op_queue_[i].pop();
ops.push(op);
}
}
descriptor_data->descriptor_ = -1;
descriptor_data->shutdown_ = true;
descriptor_lock.unlock();
free_descriptor_state(descriptor_data);
descriptor_data = 0;
io_service_.post_deferred_completions(ops);
}
}
void epoll_reactor::deregister_internal_descriptor(socket_type descriptor,
epoll_reactor::per_descriptor_data& descriptor_data)
{
if (!descriptor_data)
return;
mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
if (!descriptor_data->shutdown_)
{
epoll_event ev = { 0, { 0 } };
epoll_ctl(epoll_fd_, EPOLL_CTL_DEL, descriptor, &ev);
op_queue<operation> ops;
for (int i = 0; i < max_ops; ++i)
ops.push(descriptor_data->op_queue_[i]);
descriptor_data->descriptor_ = -1;
descriptor_data->shutdown_ = true;
descriptor_lock.unlock();
free_descriptor_state(descriptor_data);
descriptor_data = 0;
}
}
void epoll_reactor::run(bool block, op_queue<operation>& ops)
{
// This code relies on the fact that the task_io_service queues the reactor
// task behind all descriptor operations generated by this function. This
// means, that by the time we reach this point, any previously returned
// descriptor operations have already been dequeued. Therefore it is now safe
// for us to reuse and return them for the task_io_service to queue again.
// Calculate a timeout only if timerfd is not used.
int timeout;
if (timer_fd_ != -1)
timeout = block ? -1 : 0;
else
{
mutex::scoped_lock lock(mutex_);
timeout = block ? get_timeout() : 0;
}
// Block on the epoll descriptor.
epoll_event events[128];
int num_events = epoll_wait(epoll_fd_, events, 128, timeout);
#if defined(BOOST_ASIO_HAS_TIMERFD)
bool check_timers = (timer_fd_ == -1);
#else // defined(BOOST_ASIO_HAS_TIMERFD)
bool check_timers = true;
#endif // defined(BOOST_ASIO_HAS_TIMERFD)
// Dispatch the waiting events.
for (int i = 0; i < num_events; ++i)
{
void* ptr = events[i].data.ptr;
if (ptr == &interrupter_)
{
// No need to reset the interrupter since we're leaving the descriptor
// in a ready-to-read state and relying on edge-triggered notifications
// to make it so that we only get woken up when the descriptor's epoll
// registration is updated.
#if defined(BOOST_ASIO_HAS_TIMERFD)
if (timer_fd_ == -1)
check_timers = true;
#else // defined(BOOST_ASIO_HAS_TIMERFD)
check_timers = true;
#endif // defined(BOOST_ASIO_HAS_TIMERFD)
}
#if defined(BOOST_ASIO_HAS_TIMERFD)
else if (ptr == &timer_fd_)
{
check_timers = true;
}
#endif // defined(BOOST_ASIO_HAS_TIMERFD)
else
{
// The descriptor operation doesn't count as work in and of itself, so we
// don't call work_started() here. This still allows the io_service to
// stop if the only remaining operations are descriptor operations.
descriptor_state* descriptor_data = static_cast<descriptor_state*>(ptr);
descriptor_data->set_ready_events(events[i].events);
ops.push(descriptor_data);
}
}
if (check_timers)
{
mutex::scoped_lock common_lock(mutex_);
timer_queues_.get_ready_timers(ops);
#if defined(BOOST_ASIO_HAS_TIMERFD)
if (timer_fd_ != -1)
{
itimerspec new_timeout;
itimerspec old_timeout;
int flags = get_timeout(new_timeout);
timerfd_settime(timer_fd_, flags, &new_timeout, &old_timeout);
}
#endif // defined(BOOST_ASIO_HAS_TIMERFD)
}
}
void epoll_reactor::interrupt()
{
epoll_event ev = { 0, { 0 } };
ev.events = EPOLLIN | EPOLLERR | EPOLLET;
ev.data.ptr = &interrupter_;
epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, interrupter_.read_descriptor(), &ev);
}
int epoll_reactor::do_epoll_create()
{
#if defined(EPOLL_CLOEXEC)
int fd = epoll_create1(EPOLL_CLOEXEC);
#else // defined(EPOLL_CLOEXEC)
int fd = -1;
errno = EINVAL;
#endif // defined(EPOLL_CLOEXEC)
if (fd == -1 && (errno == EINVAL || errno == ENOSYS))
{
fd = epoll_create(epoll_size);
if (fd != -1)
::fcntl(fd, F_SETFD, FD_CLOEXEC);
}
if (fd == -1)
{
boost::system::error_code ec(errno,
boost::asio::error::get_system_category());
boost::asio::detail::throw_error(ec, "epoll");
}
return fd;
}
int epoll_reactor::do_timerfd_create()
{
#if defined(BOOST_ASIO_HAS_TIMERFD)
# if defined(TFD_CLOEXEC)
int fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC);
# else // defined(TFD_CLOEXEC)
int fd = -1;
errno = EINVAL;
# endif // defined(TFD_CLOEXEC)
if (fd == -1 && errno == EINVAL)
{
fd = timerfd_create(CLOCK_MONOTONIC, 0);
if (fd != -1)
::fcntl(fd, F_SETFD, FD_CLOEXEC);
}
return fd;
#else // defined(BOOST_ASIO_HAS_TIMERFD)
return -1;
#endif // defined(BOOST_ASIO_HAS_TIMERFD)
}
epoll_reactor::descriptor_state* epoll_reactor::allocate_descriptor_state()
{
mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
return registered_descriptors_.alloc();
}
void epoll_reactor::free_descriptor_state(epoll_reactor::descriptor_state* s)
{
mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_);
registered_descriptors_.free(s);
}
void epoll_reactor::do_add_timer_queue(timer_queue_base& queue)
{
mutex::scoped_lock lock(mutex_);
timer_queues_.insert(&queue);
}
void epoll_reactor::do_remove_timer_queue(timer_queue_base& queue)
{
mutex::scoped_lock lock(mutex_);
timer_queues_.erase(&queue);
}
void epoll_reactor::update_timeout()
{
#if defined(BOOST_ASIO_HAS_TIMERFD)
if (timer_fd_ != -1)
{
itimerspec new_timeout;
itimerspec old_timeout;
int flags = get_timeout(new_timeout);
timerfd_settime(timer_fd_, flags, &new_timeout, &old_timeout);
return;
}
#endif // defined(BOOST_ASIO_HAS_TIMERFD)
interrupt();
}
int epoll_reactor::get_timeout()
{
// By default we will wait no longer than 5 minutes. This will ensure that
// any changes to the system clock are detected after no longer than this.
return timer_queues_.wait_duration_msec(5 * 60 * 1000);
}
#if defined(BOOST_ASIO_HAS_TIMERFD)
int epoll_reactor::get_timeout(itimerspec& ts)
{
ts.it_interval.tv_sec = 0;
ts.it_interval.tv_nsec = 0;
long usec = timer_queues_.wait_duration_usec(5 * 60 * 1000 * 1000);
ts.it_value.tv_sec = usec / 1000000;
ts.it_value.tv_nsec = usec ? (usec % 1000000) * 1000 : 1;
return usec ? 0 : TFD_TIMER_ABSTIME;
}
#endif // defined(BOOST_ASIO_HAS_TIMERFD)
struct epoll_reactor::perform_io_cleanup_on_block_exit
{
explicit perform_io_cleanup_on_block_exit(epoll_reactor* r)
: reactor_(r), first_op_(0)
{
}
~perform_io_cleanup_on_block_exit()
{
if (first_op_)
{
// Post the remaining completed operations for invocation.
if (!ops_.empty())
reactor_->io_service_.post_deferred_completions(ops_);
// A user-initiated operation has completed, but there's no need to
// explicitly call work_finished() here. Instead, we'll take advantage of
// the fact that the task_io_service will call work_finished() once we
// return.
}
else
{
// No user-initiated operations have completed, so we need to compensate
// for the work_finished() call that the task_io_service will make once
// this operation returns.
reactor_->io_service_.work_started();
}
}
epoll_reactor* reactor_;
op_queue<operation> ops_;
operation* first_op_;
};
epoll_reactor::descriptor_state::descriptor_state()
: operation(&epoll_reactor::descriptor_state::do_complete)
{
}
operation* epoll_reactor::descriptor_state::perform_io(uint32_t events)
{
mutex_.lock();
perform_io_cleanup_on_block_exit io_cleanup(reactor_);
mutex::scoped_lock descriptor_lock(mutex_, mutex::scoped_lock::adopt_lock);
// Exception operations must be processed first to ensure that any
// out-of-band data is read before normal data.
static const int flag[max_ops] = { EPOLLIN, EPOLLOUT, EPOLLPRI };
for (int j = max_ops - 1; j >= 0; --j)
{
if (events & (flag[j] | EPOLLERR | EPOLLHUP))
{
while (reactor_op* op = op_queue_[j].front())
{
if (op->perform())
{
op_queue_[j].pop();
io_cleanup.ops_.push(op);
}
else
break;
}
}
}
// The first operation will be returned for completion now. The others will
// be posted for later by the io_cleanup object's destructor.
io_cleanup.first_op_ = io_cleanup.ops_.front();
io_cleanup.ops_.pop();
return io_cleanup.first_op_;
}
void epoll_reactor::descriptor_state::do_complete(
io_service_impl* owner, operation* base,
const boost::system::error_code& ec, std::size_t bytes_transferred)
{
if (owner)
{
descriptor_state* descriptor_data = static_cast<descriptor_state*>(base);
uint32_t events = static_cast<uint32_t>(bytes_transferred);
if (operation* op = descriptor_data->perform_io(events))
{
op->complete(*owner, ec, 0);
}
}
}
} // namespace detail
} // namespace asio
} // namespace boost
#include <boost/asio/detail/pop_options.hpp>
#endif // defined(BOOST_ASIO_HAS_EPOLL)
#endif // BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_IPP

69
samples/C++/gdsdbreader.h Normal file
View File

@@ -0,0 +1,69 @@
#ifndef GDSDBREADER_H
#define GDSDBREADER_H
// This file contains core structures, classes and types for the entire gds app
// WARNING: DO NOT MODIFY UNTIL IT'S STRICTLY NECESSARY
#include <QDir>
#include "diagramwidget/qgldiagramwidget.h"
#define GDS_DIR "gdsdata"
enum level {LEVEL_ONE, LEVEL_TWO, LEVEL_THREE};
// The internal structure of the db to store information about each node (each level)
// this will be serialized before being written to file
class dbDataStructure
{
public:
QString label;
quint32 depth;
quint32 userIndex;
QByteArray data; // This is COMPRESSED data, optimize ram and disk space, is decompressed
// just when needed (to display the comments)
// The following ID is used to create second-third level files
quint64 uniqueID;
// All the next items linked to this one
QVector<dbDataStructure*> nextItems;
// Corresponding indices vector (used to store data)
QVector<quint32> nextItemsIndices;
// The father element (or NULL if it's root)
dbDataStructure* father;
// Corresponding indices vector (used to store data)
quint32 fatherIndex;
bool noFatherRoot; // Used to tell if this node is the root (so hasn't a father)
// These fields will be useful for levels 2 and 3
QString fileName; // Relative filename for the associated code file
QByteArray firstLineData; // Compressed first line data, this will be used with the line number to retrieve info
QVector<quint32> linesNumbers; // First and next lines (next are relative to the first) numbers
// -- Generic system data not to be stored on disk
void *glPointer; // GL pointer
// These operator overrides prevent the glPointer and other non-disk-necessary data serialization
friend QDataStream& operator<<(QDataStream& stream, const dbDataStructure& myclass)
// Notice: this function has to be "friend" because it cannot be a member function, member functions
// have an additional parameter "this" which isn't in the argument list of an operator overload. A friend
// function has full access to private data of the class without having the "this" argument
{
// Don't write glPointer and every pointer-dependent structure
return stream << myclass.label << myclass.depth << myclass.userIndex << qCompress(myclass.data)
<< myclass.uniqueID << myclass.nextItemsIndices << myclass.fatherIndex << myclass.noFatherRoot
<< myclass.fileName << qCompress(myclass.firstLineData) << myclass.linesNumbers;
}
friend QDataStream& operator>>(QDataStream& stream, dbDataStructure& myclass)
{
//Don't read it, either
stream >> myclass.label >> myclass.depth >> myclass.userIndex >> myclass.data
>> myclass.uniqueID >> myclass.nextItemsIndices >> myclass.fatherIndex >> myclass.noFatherRoot
>> myclass.fileName >> myclass.firstLineData >> myclass.linesNumbers;
myclass.data = qUncompress(myclass.data);
myclass.firstLineData = qUncompress(myclass.firstLineData);
return stream;
}
};
#endif // GDSDBREADER_H

138
samples/C++/libcanister.h Normal file
View File

@@ -0,0 +1,138 @@
#ifndef LIBCANIH
#define LIBCANIH
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <cstring>
#define int64 unsigned long long
//#define DEBUG
#ifdef DEBUG
#define dout cout
#else
#define dout if (0) cerr
#endif
using namespace std;
namespace libcanister
{
//the canmem object is a generic memory container used commonly
//throughout the canister framework to hold memory of uncertain
//length which may or may not contain null bytes.
class canmem
{
public:
char* data; //the raw memory block
int size; //the absolute length of the block
canmem(); //creates an unallocated canmem
canmem(int allocsize); //creates an allocated, blank canmem of size
canmem(char* strdata); //automates the creation of zero-limited canmems
~canmem(); //cleans up the canmem
void zeromem(); //overwrites this canmem
void fragmem(); //overwrites this canmem with fragment notation
void countlen(); //counts length of zero-limited strings and stores it in size
void trim(); //removes any nulls from the end of the string
static canmem null(); //returns a singleton null canmem
};
//contains information about the canister
class caninfo
{
public:
canmem path; //physical path
canmem internalname; //a name for the canister
int numfiles; //the number of files in the canister
};
//necessary for the use of this class as a type in canfile
class canister;
//this object holds the definition of a 'file' within the
//canister 'filesystem.'
class canfile
{
public:
libcanister::canister* parent; //the canister that holds this file
canmem path; //internal path ('filename')
canmem data; //the file's decompressed contents
int isfrag; //0 = probably not fragment, 1 = definitely a fragment (ignore)
int cfid; //'canfile id' -- a unique ID for this file
int64 dsize; //ondisk size (compressed form size)
int cachestate; //0 = not in memory, 1 = in memory, 2 = in memory and needs flush
//-1 = error, check the data for the message
void cache(); //pull the file from disk and cache it in memory
void cachedump(); //deletes the contents of this file from the memory cache after assuring the on disk copy is up to date
void cachedumpfinal(fstream& infile); //same as cachedump, but more efficient during closing procedures
void flush(); //updates the on disk copy, but retains the memory cache
};
//the primary class
//this defines and controls a single canister
class canister
{
//table of contents
//absolutely worthless to the control code in the canister
//but quite useful to programs using the API, as they may
//desire to enumerate the files in a canister for a user's
//use or for their own.
//contains a newline-delimited list of files in the container.
canfile TOC;
public:
caninfo info; //the general info about this canister
//the raw canfiles -- recommended that programs do not modify
//these files directly, but not enforced.
canfile* files;
bool readonly; //if true then no write routines will do anything
//maximum number of files to have in memory at any given
//time, change this to whatever suits your application.
int cachemax;
int cachecnt; //number of files in the cache (should not be modified)
//both initialize the canister from a physical location
canister (canmem fspath);
canister (char* fspath);
//destroys the canister (after flushing the modded buffers, of course)
~canister();
//open the fspath
//does it exist?
// | --- yes --- opening it (return 1)
// | --- yes --- file is corrupted, halting (return -1)
// | --- no --- making a new one (return 0)
int open();
//close the canister, flush all buffers, clean up
int close();
//deletes the file at path inside this canister
int delFile(canmem path);
//pulls the contents of the file from disk or memory and returns it as a file
canfile getFile(canmem path);
//creates a file if it does not exist, otherwise overwrites
//returns whether operation succeeded
bool writeFile(canmem path, canmem data);
bool writeFile(canfile file);
//get the 'table of contents', a file containing a newline delimited
//list of the file paths in the container which have contents
canfile getTOC();
//brings the cache back within the cachemax limit
//important: sCFID is the safe CFID
//(the CFID of the file we want to avoid uncaching)
//really just used internally, but it can't do any harm.
void cacheclean(int sCFID, bool dFlush = false);
};
}
#endif

92
samples/C++/metrics.h Normal file
View File

@@ -0,0 +1,92 @@
// Copyright 2011 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef NINJA_METRICS_H_
#define NINJA_METRICS_H_
#include <string>
#include <vector>
using namespace std;
#include "util.h" // For int64_t.
/// The Metrics module is used for the debug mode that dumps timing stats of
/// various actions. To use, see METRIC_RECORD below.
/// A single metrics we're tracking, like "depfile load time".
struct Metric {
string name;
/// Number of times we've hit the code path.
int count;
/// Total time (in micros) we've spent on the code path.
int64_t sum;
};
/// A scoped object for recording a metric across the body of a function.
/// Used by the METRIC_RECORD macro.
struct ScopedMetric {
explicit ScopedMetric(Metric* metric);
~ScopedMetric();
private:
Metric* metric_;
/// Timestamp when the measurement started.
/// Value is platform-dependent.
int64_t start_;
};
/// The singleton that stores metrics and prints the report.
struct Metrics {
Metric* NewMetric(const string& name);
/// Print a summary report to stdout.
void Report();
private:
vector<Metric*> metrics_;
};
/// Get the current time as relative to some epoch.
/// Epoch varies between platforms; only useful for measuring elapsed time.
int64_t GetTimeMillis();
/// A simple stopwatch which returns the time
/// in seconds since Restart() was called.
struct Stopwatch {
public:
Stopwatch() : started_(0) {}
/// Seconds since Restart() call.
double Elapsed() const {
return 1e-6 * static_cast<double>(Now() - started_);
}
void Restart() { started_ = Now(); }
private:
uint64_t started_;
uint64_t Now() const;
};
/// The primary interface to metrics. Use METRIC_RECORD("foobar") at the top
/// of a function to get timing stats recorded for each call of the function.
#define METRIC_RECORD(name) \
static Metric* metrics_h_metric = \
g_metrics ? g_metrics->NewMetric(name) : NULL; \
ScopedMetric metrics_h_scoped(metrics_h_metric);
extern Metrics* g_metrics;
#endif // NINJA_METRICS_H_

View File

@@ -0,0 +1,327 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: protocol-buffer.proto
#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
#include "protocol-buffer.pb.h"
#include <algorithm>
#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/once.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/wire_format_lite_inl.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// @@protoc_insertion_point(includes)
namespace persons {
namespace {
const ::google::protobuf::Descriptor* Person_descriptor_ = NULL;
const ::google::protobuf::internal::GeneratedMessageReflection*
Person_reflection_ = NULL;
} // namespace
void protobuf_AssignDesc_protocol_2dbuffer_2eproto() {
protobuf_AddDesc_protocol_2dbuffer_2eproto();
const ::google::protobuf::FileDescriptor* file =
::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
"protocol-buffer.proto");
GOOGLE_CHECK(file != NULL);
Person_descriptor_ = file->message_type(0);
static const int Person_offsets_[1] = {
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person, name_),
};
Person_reflection_ =
new ::google::protobuf::internal::GeneratedMessageReflection(
Person_descriptor_,
Person::default_instance_,
Person_offsets_,
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person, _has_bits_[0]),
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person, _unknown_fields_),
-1,
::google::protobuf::DescriptorPool::generated_pool(),
::google::protobuf::MessageFactory::generated_factory(),
sizeof(Person));
}
namespace {
GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
inline void protobuf_AssignDescriptorsOnce() {
::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
&protobuf_AssignDesc_protocol_2dbuffer_2eproto);
}
void protobuf_RegisterTypes(const ::std::string&) {
protobuf_AssignDescriptorsOnce();
::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
Person_descriptor_, &Person::default_instance());
}
} // namespace
void protobuf_ShutdownFile_protocol_2dbuffer_2eproto() {
delete Person::default_instance_;
delete Person_reflection_;
}
void protobuf_AddDesc_protocol_2dbuffer_2eproto() {
static bool already_here = false;
if (already_here) return;
already_here = true;
GOOGLE_PROTOBUF_VERIFY_VERSION;
::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
"\n\025protocol-buffer.proto\022\007persons\"\026\n\006Pers"
"on\022\014\n\004name\030\001 \002(\t", 56);
::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
"protocol-buffer.proto", &protobuf_RegisterTypes);
Person::default_instance_ = new Person();
Person::default_instance_->InitAsDefaultInstance();
::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_protocol_2dbuffer_2eproto);
}
// Force AddDescriptors() to be called at static initialization time.
struct StaticDescriptorInitializer_protocol_2dbuffer_2eproto {
StaticDescriptorInitializer_protocol_2dbuffer_2eproto() {
protobuf_AddDesc_protocol_2dbuffer_2eproto();
}
} static_descriptor_initializer_protocol_2dbuffer_2eproto_;
// ===================================================================
#ifndef _MSC_VER
const int Person::kNameFieldNumber;
#endif // !_MSC_VER
Person::Person()
: ::google::protobuf::Message() {
SharedCtor();
}
void Person::InitAsDefaultInstance() {
}
Person::Person(const Person& from)
: ::google::protobuf::Message() {
SharedCtor();
MergeFrom(from);
}
void Person::SharedCtor() {
_cached_size_ = 0;
name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
::memset(_has_bits_, 0, sizeof(_has_bits_));
}
Person::~Person() {
SharedDtor();
}
void Person::SharedDtor() {
if (name_ != &::google::protobuf::internal::kEmptyString) {
delete name_;
}
if (this != default_instance_) {
}
}
void Person::SetCachedSize(int size) const {
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
_cached_size_ = size;
GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* Person::descriptor() {
protobuf_AssignDescriptorsOnce();
return Person_descriptor_;
}
const Person& Person::default_instance() {
if (default_instance_ == NULL) protobuf_AddDesc_protocol_2dbuffer_2eproto();
return *default_instance_;
}
Person* Person::default_instance_ = NULL;
Person* Person::New() const {
return new Person;
}
void Person::Clear() {
if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
if (has_name()) {
if (name_ != &::google::protobuf::internal::kEmptyString) {
name_->clear();
}
}
}
::memset(_has_bits_, 0, sizeof(_has_bits_));
mutable_unknown_fields()->Clear();
}
bool Person::MergePartialFromCodedStream(
::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
::google::protobuf::uint32 tag;
while ((tag = input->ReadTag()) != 0) {
switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
// required string name = 1;
case 1: {
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
DO_(::google::protobuf::internal::WireFormatLite::ReadString(
input, this->mutable_name()));
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->name().data(), this->name().length(),
::google::protobuf::internal::WireFormat::PARSE);
} else {
goto handle_uninterpreted;
}
if (input->ExpectAtEnd()) return true;
break;
}
default: {
handle_uninterpreted:
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
return true;
}
DO_(::google::protobuf::internal::WireFormat::SkipField(
input, tag, mutable_unknown_fields()));
break;
}
}
}
return true;
#undef DO_
}
void Person::SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const {
// required string name = 1;
if (has_name()) {
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->name().data(), this->name().length(),
::google::protobuf::internal::WireFormat::SERIALIZE);
::google::protobuf::internal::WireFormatLite::WriteString(
1, this->name(), output);
}
if (!unknown_fields().empty()) {
::google::protobuf::internal::WireFormat::SerializeUnknownFields(
unknown_fields(), output);
}
}
::google::protobuf::uint8* Person::SerializeWithCachedSizesToArray(
::google::protobuf::uint8* target) const {
// required string name = 1;
if (has_name()) {
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->name().data(), this->name().length(),
::google::protobuf::internal::WireFormat::SERIALIZE);
target =
::google::protobuf::internal::WireFormatLite::WriteStringToArray(
1, this->name(), target);
}
if (!unknown_fields().empty()) {
target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
unknown_fields(), target);
}
return target;
}
int Person::ByteSize() const {
int total_size = 0;
if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
// required string name = 1;
if (has_name()) {
total_size += 1 +
::google::protobuf::internal::WireFormatLite::StringSize(
this->name());
}
}
if (!unknown_fields().empty()) {
total_size +=
::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
unknown_fields());
}
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
_cached_size_ = total_size;
GOOGLE_SAFE_CONCURRENT_WRITES_END();
return total_size;
}
void Person::MergeFrom(const ::google::protobuf::Message& from) {
GOOGLE_CHECK_NE(&from, this);
const Person* source =
::google::protobuf::internal::dynamic_cast_if_available<const Person*>(
&from);
if (source == NULL) {
::google::protobuf::internal::ReflectionOps::Merge(from, this);
} else {
MergeFrom(*source);
}
}
void Person::MergeFrom(const Person& from) {
GOOGLE_CHECK_NE(&from, this);
if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
if (from.has_name()) {
set_name(from.name());
}
}
mutable_unknown_fields()->MergeFrom(from.unknown_fields());
}
void Person::CopyFrom(const ::google::protobuf::Message& from) {
if (&from == this) return;
Clear();
MergeFrom(from);
}
void Person::CopyFrom(const Person& from) {
if (&from == this) return;
Clear();
MergeFrom(from);
}
bool Person::IsInitialized() const {
if ((_has_bits_[0] & 0x00000001) != 0x00000001) return false;
return true;
}
void Person::Swap(Person* other) {
if (other != this) {
std::swap(name_, other->name_);
std::swap(_has_bits_[0], other->_has_bits_[0]);
_unknown_fields_.Swap(&other->_unknown_fields_);
std::swap(_cached_size_, other->_cached_size_);
}
}
::google::protobuf::Metadata Person::GetMetadata() const {
protobuf_AssignDescriptorsOnce();
::google::protobuf::Metadata metadata;
metadata.descriptor = Person_descriptor_;
metadata.reflection = Person_reflection_;
return metadata;
}
// @@protoc_insertion_point(namespace_scope)
} // namespace persons
// @@protoc_insertion_point(global_scope)

View File

@@ -0,0 +1,218 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: protocol-buffer.proto
#ifndef PROTOBUF_protocol_2dbuffer_2eproto__INCLUDED
#define PROTOBUF_protocol_2dbuffer_2eproto__INCLUDED
#include <string>
#include <google/protobuf/stubs/common.h>
#if GOOGLE_PROTOBUF_VERSION < 2005000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 2005000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/unknown_field_set.h>
// @@protoc_insertion_point(includes)
namespace persons {
// Internal implementation detail -- do not call these.
void protobuf_AddDesc_protocol_2dbuffer_2eproto();
void protobuf_AssignDesc_protocol_2dbuffer_2eproto();
void protobuf_ShutdownFile_protocol_2dbuffer_2eproto();
class Person;
// ===================================================================
class Person : public ::google::protobuf::Message {
public:
Person();
virtual ~Person();
Person(const Person& from);
inline Person& operator=(const Person& from) {
CopyFrom(from);
return *this;
}
inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
return _unknown_fields_;
}
inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
return &_unknown_fields_;
}
static const ::google::protobuf::Descriptor* descriptor();
static const Person& default_instance();
void Swap(Person* other);
// implements Message ----------------------------------------------
Person* New() const;
void CopyFrom(const ::google::protobuf::Message& from);
void MergeFrom(const ::google::protobuf::Message& from);
void CopyFrom(const Person& from);
void MergeFrom(const Person& from);
void Clear();
bool IsInitialized() const;
int ByteSize() const;
bool MergePartialFromCodedStream(
::google::protobuf::io::CodedInputStream* input);
void SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const;
::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
int GetCachedSize() const { return _cached_size_; }
private:
void SharedCtor();
void SharedDtor();
void SetCachedSize(int size) const;
public:
::google::protobuf::Metadata GetMetadata() const;
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
// required string name = 1;
inline bool has_name() const;
inline void clear_name();
static const int kNameFieldNumber = 1;
inline const ::std::string& name() const;
inline void set_name(const ::std::string& value);
inline void set_name(const char* value);
inline void set_name(const char* value, size_t size);
inline ::std::string* mutable_name();
inline ::std::string* release_name();
inline void set_allocated_name(::std::string* name);
// @@protoc_insertion_point(class_scope:persons.Person)
private:
inline void set_has_name();
inline void clear_has_name();
::google::protobuf::UnknownFieldSet _unknown_fields_;
::std::string* name_;
mutable int _cached_size_;
::google::protobuf::uint32 _has_bits_[(1 + 31) / 32];
friend void protobuf_AddDesc_protocol_2dbuffer_2eproto();
friend void protobuf_AssignDesc_protocol_2dbuffer_2eproto();
friend void protobuf_ShutdownFile_protocol_2dbuffer_2eproto();
void InitAsDefaultInstance();
static Person* default_instance_;
};
// ===================================================================
// ===================================================================
// Person
// required string name = 1;
inline bool Person::has_name() const {
return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void Person::set_has_name() {
_has_bits_[0] |= 0x00000001u;
}
inline void Person::clear_has_name() {
_has_bits_[0] &= ~0x00000001u;
}
inline void Person::clear_name() {
if (name_ != &::google::protobuf::internal::kEmptyString) {
name_->clear();
}
clear_has_name();
}
inline const ::std::string& Person::name() const {
return *name_;
}
inline void Person::set_name(const ::std::string& value) {
set_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
name_ = new ::std::string;
}
name_->assign(value);
}
inline void Person::set_name(const char* value) {
set_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
name_ = new ::std::string;
}
name_->assign(value);
}
inline void Person::set_name(const char* value, size_t size) {
set_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
name_ = new ::std::string;
}
name_->assign(reinterpret_cast<const char*>(value), size);
}
inline ::std::string* Person::mutable_name() {
set_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
name_ = new ::std::string;
}
return name_;
}
inline ::std::string* Person::release_name() {
clear_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
return NULL;
} else {
::std::string* temp = name_;
name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
return temp;
}
}
inline void Person::set_allocated_name(::std::string* name) {
if (name_ != &::google::protobuf::internal::kEmptyString) {
delete name_;
}
if (name) {
set_has_name();
name_ = name;
} else {
clear_has_name();
name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
}
}
// @@protoc_insertion_point(namespace_scope)
} // namespace persons
#ifndef SWIG
namespace google {
namespace protobuf {
} // namespace google
} // namespace protobuf
#endif // SWIG
// @@protoc_insertion_point(global_scope)
#endif // PROTOBUF_protocol_2dbuffer_2eproto__INCLUDED

415
samples/C++/qscicommand.h Normal file
View File

@@ -0,0 +1,415 @@
// This defines the interface to the QsciCommand class.
//
// Copyright (c) 2011 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// This file is part of QScintilla.
//
// This file may be used under the terms of the GNU General Public
// License versions 2.0 or 3.0 as published by the Free Software
// Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3
// included in the packaging of this file. Alternatively you may (at
// your option) use any later version of the GNU General Public
// License if such license has been publicly approved by Riverbank
// Computing Limited (or its successors, if any) and the KDE Free Qt
// Foundation. In addition, as a special exception, Riverbank gives you
// certain additional rights. These rights are described in the Riverbank
// GPL Exception version 1.1, which can be found in the file
// GPL_EXCEPTION.txt in this package.
//
// If you are unsure which license is appropriate for your use, please
// contact the sales department at sales@riverbankcomputing.com.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#ifndef QSCICOMMAND_H
#define QSCICOMMAND_H
#ifdef __APPLE__
extern "C++" {
#endif
#include <qstring.h>
#include <Qsci/qsciglobal.h>
#include <Qsci/qsciscintillabase.h>
class QsciScintilla;
//! \brief The QsciCommand class represents an internal editor command that may
//! have one or two keys bound to it.
//!
//! Methods are provided to change the keys bound to the command and to remove
//! a key binding. Each command has a user friendly description of the command
//! for use in key mapping dialogs.
class QSCINTILLA_EXPORT QsciCommand
{
public:
//! This enum defines the different commands that can be assigned to a key.
enum Command {
//! Move down one line.
LineDown = QsciScintillaBase::SCI_LINEDOWN,
//! Extend the selection down one line.
LineDownExtend = QsciScintillaBase::SCI_LINEDOWNEXTEND,
//! Extend the rectangular selection down one line.
LineDownRectExtend = QsciScintillaBase::SCI_LINEDOWNRECTEXTEND,
//! Scroll the view down one line.
LineScrollDown = QsciScintillaBase::SCI_LINESCROLLDOWN,
//! Move up one line.
LineUp = QsciScintillaBase::SCI_LINEUP,
//! Extend the selection up one line.
LineUpExtend = QsciScintillaBase::SCI_LINEUPEXTEND,
//! Extend the rectangular selection up one line.
LineUpRectExtend = QsciScintillaBase::SCI_LINEUPRECTEXTEND,
//! Scroll the view up one line.
LineScrollUp = QsciScintillaBase::SCI_LINESCROLLUP,
//! Scroll to the start of the document.
ScrollToStart = QsciScintillaBase::SCI_SCROLLTOSTART,
//! Scroll to the end of the document.
ScrollToEnd = QsciScintillaBase::SCI_SCROLLTOEND,
//! Scroll vertically to centre the current line.
VerticalCentreCaret = QsciScintillaBase::SCI_VERTICALCENTRECARET,
//! Move down one paragraph.
ParaDown = QsciScintillaBase::SCI_PARADOWN,
//! Extend the selection down one paragraph.
ParaDownExtend = QsciScintillaBase::SCI_PARADOWNEXTEND,
//! Move up one paragraph.
ParaUp = QsciScintillaBase::SCI_PARAUP,
//! Extend the selection up one paragraph.
ParaUpExtend = QsciScintillaBase::SCI_PARAUPEXTEND,
//! Move left one character.
CharLeft = QsciScintillaBase::SCI_CHARLEFT,
//! Extend the selection left one character.
CharLeftExtend = QsciScintillaBase::SCI_CHARLEFTEXTEND,
//! Extend the rectangular selection left one character.
CharLeftRectExtend = QsciScintillaBase::SCI_CHARLEFTRECTEXTEND,
//! Move right one character.
CharRight = QsciScintillaBase::SCI_CHARRIGHT,
//! Extend the selection right one character.
CharRightExtend = QsciScintillaBase::SCI_CHARRIGHTEXTEND,
//! Extend the rectangular selection right one character.
CharRightRectExtend = QsciScintillaBase::SCI_CHARRIGHTRECTEXTEND,
//! Move left one word.
WordLeft = QsciScintillaBase::SCI_WORDLEFT,
//! Extend the selection left one word.
WordLeftExtend = QsciScintillaBase::SCI_WORDLEFTEXTEND,
//! Move right one word.
WordRight = QsciScintillaBase::SCI_WORDRIGHT,
//! Extend the selection right one word.
WordRightExtend = QsciScintillaBase::SCI_WORDRIGHTEXTEND,
//! Move to the end of the previous word.
WordLeftEnd = QsciScintillaBase::SCI_WORDLEFTEND,
//! Extend the selection to the end of the previous word.
WordLeftEndExtend = QsciScintillaBase::SCI_WORDLEFTENDEXTEND,
//! Move to the end of the next word.
WordRightEnd = QsciScintillaBase::SCI_WORDRIGHTEND,
//! Extend the selection to the end of the next word.
WordRightEndExtend = QsciScintillaBase::SCI_WORDRIGHTENDEXTEND,
//! Move left one word part.
WordPartLeft = QsciScintillaBase::SCI_WORDPARTLEFT,
//! Extend the selection left one word part.
WordPartLeftExtend = QsciScintillaBase::SCI_WORDPARTLEFTEXTEND,
//! Move right one word part.
WordPartRight = QsciScintillaBase::SCI_WORDPARTRIGHT,
//! Extend the selection right one word part.
WordPartRightExtend = QsciScintillaBase::SCI_WORDPARTRIGHTEXTEND,
//! Move to the start of the document line.
Home = QsciScintillaBase::SCI_HOME,
//! Extend the selection to the start of the document line.
HomeExtend = QsciScintillaBase::SCI_HOMEEXTEND,
//! Extend the rectangular selection to the start of the document line.
HomeRectExtend = QsciScintillaBase::SCI_HOMERECTEXTEND,
//! Move to the start of the displayed line.
HomeDisplay = QsciScintillaBase::SCI_HOMEDISPLAY,
//! Extend the selection to the start of the displayed line.
HomeDisplayExtend = QsciScintillaBase::SCI_HOMEDISPLAYEXTEND,
//! Move to the start of the displayed or document line.
HomeWrap = QsciScintillaBase::SCI_HOMEWRAP,
//! Extend the selection to the start of the displayed or document
//! line.
HomeWrapExtend = QsciScintillaBase::SCI_HOMEWRAPEXTEND,
//! Move to the first visible character in the document line.
VCHome = QsciScintillaBase::SCI_VCHOME,
//! Extend the selection to the first visible character in the document
//! line.
VCHomeExtend = QsciScintillaBase::SCI_VCHOMEEXTEND,
//! Extend the rectangular selection to the first visible character in
//! the document line.
VCHomeRectExtend = QsciScintillaBase::SCI_VCHOMERECTEXTEND,
//! Move to the first visible character of the displayed or document
//! line.
VCHomeWrap = QsciScintillaBase::SCI_VCHOMEWRAP,
//! Extend the selection to the first visible character of the
//! displayed or document line.
VCHomeWrapExtend = QsciScintillaBase::SCI_VCHOMEWRAPEXTEND,
//! Move to the end of the document line.
LineEnd = QsciScintillaBase::SCI_LINEEND,
//! Extend the selection to the end of the document line.
LineEndExtend = QsciScintillaBase::SCI_LINEENDEXTEND,
//! Extend the rectangular selection to the end of the document line.
LineEndRectExtend = QsciScintillaBase::SCI_LINEENDRECTEXTEND,
//! Move to the end of the displayed line.
LineEndDisplay = QsciScintillaBase::SCI_LINEENDDISPLAY,
//! Extend the selection to the end of the displayed line.
LineEndDisplayExtend = QsciScintillaBase::SCI_LINEENDDISPLAYEXTEND,
//! Move to the end of the displayed or document line.
LineEndWrap = QsciScintillaBase::SCI_LINEENDWRAP,
//! Extend the selection to the end of the displayed or document line.
LineEndWrapExtend = QsciScintillaBase::SCI_LINEENDWRAPEXTEND,
//! Move to the start of the document.
DocumentStart = QsciScintillaBase::SCI_DOCUMENTSTART,
//! Extend the selection to the start of the document.
DocumentStartExtend = QsciScintillaBase::SCI_DOCUMENTSTARTEXTEND,
//! Move to the end of the document.
DocumentEnd = QsciScintillaBase::SCI_DOCUMENTEND,
//! Extend the selection to the end of the document.
DocumentEndExtend = QsciScintillaBase::SCI_DOCUMENTENDEXTEND,
//! Move up one page.
PageUp = QsciScintillaBase::SCI_PAGEUP,
//! Extend the selection up one page.
PageUpExtend = QsciScintillaBase::SCI_PAGEUPEXTEND,
//! Extend the rectangular selection up one page.
PageUpRectExtend = QsciScintillaBase::SCI_PAGEUPRECTEXTEND,
//! Move down one page.
PageDown = QsciScintillaBase::SCI_PAGEDOWN,
//! Extend the selection down one page.
PageDownExtend = QsciScintillaBase::SCI_PAGEDOWNEXTEND,
//! Extend the rectangular selection down one page.
PageDownRectExtend = QsciScintillaBase::SCI_PAGEDOWNRECTEXTEND,
//! Stuttered move up one page.
StutteredPageUp = QsciScintillaBase::SCI_STUTTEREDPAGEUP,
//! Stuttered extend the selection up one page.
StutteredPageUpExtend = QsciScintillaBase::SCI_STUTTEREDPAGEUPEXTEND,
//! Stuttered move down one page.
StutteredPageDown = QsciScintillaBase::SCI_STUTTEREDPAGEDOWN,
//! Stuttered extend the selection down one page.
StutteredPageDownExtend = QsciScintillaBase::SCI_STUTTEREDPAGEDOWNEXTEND,
//! Delete the current character.
Delete = QsciScintillaBase::SCI_CLEAR,
//! Delete the previous character.
DeleteBack = QsciScintillaBase::SCI_DELETEBACK,
//! Delete the previous character if not at start of line.
DeleteBackNotLine = QsciScintillaBase::SCI_DELETEBACKNOTLINE,
//! Delete the word to the left.
DeleteWordLeft = QsciScintillaBase::SCI_DELWORDLEFT,
//! Delete the word to the right.
DeleteWordRight = QsciScintillaBase::SCI_DELWORDRIGHT,
//! Delete right to the end of the next word.
DeleteWordRightEnd = QsciScintillaBase::SCI_DELWORDRIGHTEND,
//! Delete the line to the left.
DeleteLineLeft = QsciScintillaBase::SCI_DELLINELEFT,
//! Delete the line to the right.
DeleteLineRight = QsciScintillaBase::SCI_DELLINERIGHT,
//! Delete the current line.
LineDelete = QsciScintillaBase::SCI_LINEDELETE,
//! Cut the current line to the clipboard.
LineCut = QsciScintillaBase::SCI_LINECUT,
//! Copy the current line to the clipboard.
LineCopy = QsciScintillaBase::SCI_LINECOPY,
//! Transpose the current and previous lines.
LineTranspose = QsciScintillaBase::SCI_LINETRANSPOSE,
//! Duplicate the current line.
LineDuplicate = QsciScintillaBase::SCI_LINEDUPLICATE,
//! Select the whole document.
SelectAll = QsciScintillaBase::SCI_SELECTALL,
//! Move the selected lines up one line.
MoveSelectedLinesUp = QsciScintillaBase::SCI_MOVESELECTEDLINESUP,
//! Move the selected lines down one line.
MoveSelectedLinesDown = QsciScintillaBase::SCI_MOVESELECTEDLINESDOWN,
//! Duplicate the selection.
SelectionDuplicate = QsciScintillaBase::SCI_SELECTIONDUPLICATE,
//! Convert the selection to lower case.
SelectionLowerCase = QsciScintillaBase::SCI_LOWERCASE,
//! Convert the selection to upper case.
SelectionUpperCase = QsciScintillaBase::SCI_UPPERCASE,
//! Cut the selection to the clipboard.
SelectionCut = QsciScintillaBase::SCI_CUT,
//! Copy the selection to the clipboard.
SelectionCopy = QsciScintillaBase::SCI_COPY,
//! Paste from the clipboard.
Paste = QsciScintillaBase::SCI_PASTE,
//! Toggle insert/overtype.
EditToggleOvertype = QsciScintillaBase::SCI_EDITTOGGLEOVERTYPE,
//! Insert a platform dependent newline.
Newline = QsciScintillaBase::SCI_NEWLINE,
//! Insert a formfeed.
Formfeed = QsciScintillaBase::SCI_FORMFEED,
//! Indent one level.
Tab = QsciScintillaBase::SCI_TAB,
//! De-indent one level.
Backtab = QsciScintillaBase::SCI_BACKTAB,
//! Cancel any current operation.
Cancel = QsciScintillaBase::SCI_CANCEL,
//! Undo the last command.
Undo = QsciScintillaBase::SCI_UNDO,
//! Redo the last command.
Redo = QsciScintillaBase::SCI_REDO,
//! Zoom in.
ZoomIn = QsciScintillaBase::SCI_ZOOMIN,
//! Zoom out.
ZoomOut = QsciScintillaBase::SCI_ZOOMOUT,
};
//! Return the command that will be executed by this instance.
Command command() const {return scicmd;}
//! Execute the command.
void execute();
//! Binds the key \a key to the command. If \a key is 0 then the key
//! binding is removed. If \a key is invalid then the key binding is
//! unchanged. Valid keys are any visible or control character or any
//! of \c Key_Down, \c Key_Up, \c Key_Left, \c Key_Right, \c Key_Home,
//! \c Key_End, \c Key_PageUp, \c Key_PageDown, \c Key_Delete,
//! \c Key_Insert, \c Key_Escape, \c Key_Backspace, \c Key_Tab and
//! \c Key_Return. Keys may be modified with any combination of \c SHIFT,
//! \c CTRL, \c ALT and \c META.
//!
//! \sa key(), setAlternateKey(), validKey()
void setKey(int key);
//! Binds the alternate key \a altkey to the command. If \a key is 0
//! then the alternate key binding is removed.
//!
//! \sa alternateKey(), setKey(), validKey()
void setAlternateKey(int altkey);
//! The key that is currently bound to the command is returned.
//!
//! \sa setKey(), alternateKey()
int key() const {return qkey;}
//! The alternate key that is currently bound to the command is
//! returned.
//!
//! \sa setAlternateKey(), key()
int alternateKey() const {return qaltkey;}
//! If the key \a key is valid then true is returned.
static bool validKey(int key);
//! The user friendly description of the command is returned.
QString description() const;
private:
friend class QsciCommandSet;
QsciCommand(QsciScintilla *qs, Command cmd, int key, int altkey,
const char *desc);
void bindKey(int key,int &qk,int &scik);
QsciScintilla *qsCmd;
Command scicmd;
int qkey, scikey, qaltkey, scialtkey;
const char *descCmd;
QsciCommand(const QsciCommand &);
QsciCommand &operator=(const QsciCommand &);
};
#ifdef __APPLE__
}
#endif
#endif

116
samples/C++/qsciprinter.h Normal file
View File

@@ -0,0 +1,116 @@
// This module defines interface to the QsciPrinter class.
//
// Copyright (c) 2011 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// This file is part of QScintilla.
//
// This file may be used under the terms of the GNU General Public
// License versions 2.0 or 3.0 as published by the Free Software
// Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3
// included in the packaging of this file. Alternatively you may (at
// your option) use any later version of the GNU General Public
// License if such license has been publicly approved by Riverbank
// Computing Limited (or its successors, if any) and the KDE Free Qt
// Foundation. In addition, as a special exception, Riverbank gives you
// certain additional rights. These rights are described in the Riverbank
// GPL Exception version 1.1, which can be found in the file
// GPL_EXCEPTION.txt in this package.
//
// If you are unsure which license is appropriate for your use, please
// contact the sales department at sales@riverbankcomputing.com.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#ifndef QSCIPRINTER_H
#define QSCIPRINTER_H
#ifdef __APPLE__
extern "C++" {
#endif
#include <qprinter.h>
#include <Qsci/qsciglobal.h>
#include <Qsci/qsciscintilla.h>
QT_BEGIN_NAMESPACE
class QRect;
class QPainter;
QT_END_NAMESPACE
class QsciScintillaBase;
//! \brief The QsciPrinter class is a sub-class of the Qt QPrinter class that
//! is able to print the text of a Scintilla document.
//!
//! The class can be further sub-classed to alter to layout of the text, adding
//! headers and footers for example.
class QSCINTILLA_EXPORT QsciPrinter : public QPrinter
{
public:
//! Constructs a printer paint device with mode \a mode.
QsciPrinter(PrinterMode mode = ScreenResolution);
//! Destroys the QsciPrinter instance.
virtual ~QsciPrinter();
//! Format a page, by adding headers and footers for example, before the
//! document text is drawn on it. \a painter is the painter to be used to
//! add customised text and graphics. \a drawing is true if the page is
//! actually being drawn rather than being sized. \a painter drawing
//! methods must only be called when \a drawing is true. \a area is the
//! area of the page that will be used to draw the text. This should be
//! modified if it is necessary to reserve space for any customised text or
//! graphics. By default the area is relative to the printable area of the
//! page. Use QPrinter::setFullPage() because calling printRange() if you
//! want to try and print over the whole page. \a pagenr is the number of
//! the page. The first page is numbered 1.
virtual void formatPage(QPainter &painter, bool drawing, QRect &area,
int pagenr);
//! Return the number of points to add to each font when printing.
//!
//! \sa setMagnification()
int magnification() const {return mag;}
//! Sets the number of points to add to each font when printing to \a
//! magnification.
//!
//! \sa magnification()
virtual void setMagnification(int magnification);
//! Print a range of lines from the Scintilla instance \a qsb. \a from is
//! the first line to print and a negative value signifies the first line
//! of text. \a to is the last line to print and a negative value
//! signifies the last line of text. true is returned if there was no
//! error.
virtual int printRange(QsciScintillaBase *qsb, int from = -1, int to = -1);
//! Return the line wrap mode used when printing. The default is
//! QsciScintilla::WrapWord.
//!
//! \sa setWrapMode()
QsciScintilla::WrapMode wrapMode() const {return wrap;}
//! Sets the line wrap mode used when printing to \a wmode.
//!
//! \sa wrapMode()
virtual void setWrapMode(QsciScintilla::WrapMode wmode);
private:
int mag;
QsciScintilla::WrapMode wrap;
QsciPrinter(const QsciPrinter &);
QsciPrinter &operator=(const QsciPrinter &);
};
#ifdef __APPLE__
}
#endif
#endif

View File

@@ -0,0 +1,6 @@
#include <cstdint>
namespace Gui
{
}

26
samples/C++/rpc.h Normal file
View File

@@ -0,0 +1,26 @@
// Copyright (C) 2013 Simon Que
//
// This file is part of DuinoCube.
//
// DuinoCube is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// DuinoCube is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with DuinoCube. If not, see <http://www.gnu.org/licenses/>.
// DuinoCube remote procedure call functions.
#include <stdint.h>
// Initializes RPC system.
void rpc_init();
// Runs the RPC server loop forever.
void rpc_server_loop();

File diff suppressed because it is too large Load Diff

102
samples/C/bootstrap.h Normal file
View File

@@ -0,0 +1,102 @@
#ifndef BOOTSTRAP_H
#define BOOTSTRAP_H
#include <stdio.h>
#include "cxrs.h"
/* If we're not using GNU C, elide __attribute__ */
#ifndef __GNUC__
# define __attribute__(x) /*NOTHING*/
#endif
typedef struct object object;
object *true;
object *false;
object *eof;
object *empty_list;
object *global_enviroment;
enum obj_type {
scm_bool,
scm_empty_list,
scm_eof,
scm_char,
scm_int,
scm_pair,
scm_symbol,
scm_prim_fun,
scm_lambda,
scm_str,
scm_file
};
typedef object *(*prim_proc)(object *args);
object *read(FILE *in);
object *eval(object *code, object *env);
void print(FILE *out, object *obj, int display);
int check_type(enum obj_type type, object *obj, int err_on_false);
static inline int is_true(object *obj)
{
return obj != false;
}
object *make_int(int value);
int obj2int(object *i);
object *make_bool(int value);
int obj2bool(object *b);
object *make_char(char c);
char obj2char(object *ch);
object *make_str(char *str);
char *obj2str(object *str);
object *cons(object *car, object *cdr);
object *car(object *pair);
object *cdr(object *pair);
void set_car(object *pair, object *new);
void set_cdr(object *pair, object *new);
object *make_symbol(char *name);
char *sym2str(object *sym);
object *get_symbol(char *name) __attribute__((pure));
object *make_prim_fun(prim_proc fun);
prim_proc obj2prim_proc(object *proc);
object *make_lambda(object *args, object *code, object *env);
object *lambda_code(object *lambda);
object *lambda_args(object *lambda);
object *make_port(FILE *handle, int direction);
int port_direction(object *port);
FILE *port_handle(object *port);
void set_port_handle_to_null(object *port);
/*both of these should never be called*/
object *apply_proc(object *);
object *eval_proc(object *);
object *maybe_add_begin(object *code);
void init_enviroment(object *env);
void eval_err(char *msg, object *code) __attribute__((noreturn));
void define_var(object *var, object *val, object *env);
void set_var(object *var, object *val, object *env);
object *get_var(object *var, object *env);
object *cond2nested_if(object *cond);
object *let2lambda(object *let);
object *and2nested_if(object *and);
object *or2nested_if(object *or);
#endif /*include guard*/

56
samples/C/dynarray.cats Normal file
View File

@@ -0,0 +1,56 @@
/* ******************************************************************* */
/* */
/* Applied Type System */
/* */
/* ******************************************************************* */
/*
** ATS/Postiats - Unleashing the Potential of Types!
** Copyright (C) 2011-20?? Hongwei Xi, ATS Trustful Software, Inc.
** All rights reserved
**
** ATS is free software; you can redistribute it and/or modify it under
** the terms of the GNU GENERAL PUBLIC LICENSE (GPL) as published by the
** Free Software Foundation; either version 3, or (at your option) any
** later version.
**
** ATS is distributed in the hope that it will be useful, but WITHOUT ANY
** WARRANTY; without even the implied warranty of MERCHANTABILITY or
** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
** for more details.
**
** You should have received a copy of the GNU General Public License
** along with ATS; see the file COPYING. If not, please write to the
** Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
** 02110-1301, USA.
*/
/* ****** ****** */
/*
(* Author: Hongwei Xi *)
(* Authoremail: hwxi AT cs DOT bu DOT edu *)
(* Start time: March, 2013 *)
*/
/* ****** ****** */
#ifndef ATSHOME_LIBATS_DYNARRAY_CATS
#define ATSHOME_LIBATS_DYNARRAY_CATS
/* ****** ****** */
#include <string.h>
/* ****** ****** */
#define atslib_dynarray_memcpy memcpy
#define atslib_dynarray_memmove memmove
/* ****** ****** */
#endif // ifndef ATSHOME_LIBATS_DYNARRAY_CATS
/* ****** ****** */
/* end of [dynarray.cats] */

61
samples/C/jni_layer.h Normal file
View File

@@ -0,0 +1,61 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jni_JniLayer */
#ifndef _Included_jni_JniLayer
#define _Included_jni_JniLayer
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: jni_JniLayer
* Method: jni_layer_initialize
* Signature: ([II)J
*/
JNIEXPORT jlong JNICALL Java_jni_JniLayer_jni_1layer_1initialize
(JNIEnv *, jobject, jintArray, jint, jint);
/*
* Class: jni_JniLayer
* Method: jni_layer_mainloop
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1mainloop
(JNIEnv *, jobject, jlong);
/*
* Class: jni_JniLayer
* Method: jni_layer_set_button
* Signature: (JII)V
*/
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1set_1button
(JNIEnv *, jobject, jlong, jint, jint);
/*
* Class: jni_JniLayer
* Method: jni_layer_set_analog
* Signature: (JIIF)V
*/
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1set_1analog
(JNIEnv *, jobject, jlong, jint, jint, jfloat);
/*
* Class: jni_JniLayer
* Method: jni_layer_report_analog_chg
* Signature: (JI)V
*/
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1report_1analog_1chg
(JNIEnv *, jobject, jlong, jint);
/*
* Class: jni_JniLayer
* Method: jni_layer_kill
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1kill
(JNIEnv *, jobject, jlong);
#ifdef __cplusplus
}
#endif
#endif

47
samples/C/readline.cats Normal file
View File

@@ -0,0 +1,47 @@
/*
** API in ATS for GNU-readline
*/
/* ****** ****** */
/*
** Permission to use, copy, modify, and distribute this software for any
** purpose with or without fee is hereby granted, provided that the above
** copyright notice and this permission notice appear in all copies.
**
** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
** WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
** MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
** ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
** WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
** ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
** OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* ****** ****** */
#ifndef READLINE_READLINE_CATS
#define READLINE_READLINE_CATS
/* ****** ****** */
#include <readline/readline.h>
/* ****** ****** */
//
#define \
atscntrb_readline_rl_library_version() ((char*)rl_library_version)
//
#define atscntrb_readline_rl_readline_version() (rl_readline_version)
//
/* ****** ****** */
#define atscntrb_readline_readline readline
/* ****** ****** */
#endif // ifndef READLINE_READLINE_CATS
/* ****** ****** */
/* end of [readline.cats] */

1267
samples/C/rf_io.c Normal file

File diff suppressed because it is too large Load Diff

682
samples/C/rf_io.h Normal file
View File

@@ -0,0 +1,682 @@
/**
** Copyright (c) 2011-2012, Karapetsas Eleftherios
** All rights reserved.
**
** Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
** 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
** 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the distribution.
** 3. Neither the name of the Original Author of Refu nor the names of its contributors may be used to endorse or promote products derived from
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
** SERVICES;LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**/
#ifndef REFU_IO_H
#define REFU_IO_H
#include <rf_setup.h>
#include <stdio.h>
#ifdef __cplusplus
extern "C"
{// opening bracket for calling from C++
#endif
// New line feed
#define RF_LF 0xA
// Carriage Return
#define RF_CR 0xD
#ifdef REFU_WIN32_VERSION
#define i_PLUSB_WIN32 "b"
#else
#define i_PLUSB_WIN32 ""
#endif
// This is the type that represents the file offset
#ifdef _MSC_VER
typedef __int64 foff_rft;
#else
#include <sys/types.h>
typedef off64_t foff_rft;
#endif
///Fseek and Ftelll definitions
#ifdef _MSC_VER
#define rfFseek(i_FILE_,i_OFFSET_,i_WHENCE_) _fseeki64(i_FILE_,i_OFFSET_,i_WHENCE_)
#define rfFtell(i_FILE_) _ftelli64(i_FILE_)
#else
#define rfFseek(i_FILE_,i_OFFSET_,i_WHENCE_) fseeko64(i_FILE_,i_OFFSET_,i_WHENCE_)
#define rfFtell(i_FILE_) ftello64(i_FILE_)
#endif
/**
** @defgroup RF_IOGRP I/O
** @addtogroup RF_IOGRP
** @{
**/
// @brief Reads a UTF-8 file descriptor until end of line or EOF is found and returns a UTF-8 byte buffer
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// When the compile flag @c RF_NEWLINE_CRLF is defined (the default case at Windows) then this function
// shall not be adding any CR character that is found in the file behind a newline character since this is
// the Windows line ending scheme. Beware though that the returned read bytes value shall still count the CR character inside.
//
// @param[in] f The file descriptor to read
// @param[out] utf8 Give here a refence to an unitialized char* that will be allocated inside the function
// and contain the utf8 byte buffer. Needs to be freed by the caller explicitly later
// @param[out] byteLength Give an @c uint32_t here to receive the length of the @c utf8 buffer in bytes
// @param[out] bufferSize Give an @c uint32_t here to receive the capacity of the @c utf8 buffer in bytes
// @param[out] eof Pass a pointer to a char to receive a true or false value in case the end of file
// with reading this line
// @return Returns either a positive number for success that represents the number of bytes read from @c f and and error in case something goes wrong.
// The possible errors to return are the same as rfFgets_UTF8()
i_DECLIMEX_ int32_t rfFReadLine_UTF8(FILE* f,char** utf8,uint32_t* byteLength,uint32_t* bufferSize,char* eof);
// @brief Reads a Big Endian UTF-16 file descriptor until end of line or EOF is found and returns a UTF-8 byte buffer
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// When the compile flag @c RF_NEWLINE_CRLF is defined (the default case at Windows) then this function
// shall not be adding any CR character that is found in the file behind a newline character since this is
// the Windows line ending scheme. Beware though that the returned read bytes value shall still count the CR character inside.
//
// @param[in] f The file descriptor to read
// @param[out] utf8 Give here a refence to an unitialized char* that will be allocated inside the function
// and contain the utf8 byte buffer. Needs to be freed by the caller explicitly later
// @param[out] byteLength Give an @c uint32_t here to receive the length of the @c utf8 buffer in bytes
// @param[out] eof Pass a pointer to a char to receive a true or false value in case the end of file
// with reading this line
// @return Returns either a positive number for success that represents the number of bytes read from @c f and and error in case something goes wrong.
// + Any error that can be returned by @ref rfFgets_UTF16BE()
// + @c RE_UTF16_INVALID_SEQUENCE: Failed to decode the UTF-16 byte stream of the file descriptor
// + @c RE_UTF8_ENCODING: Failed to encode the UTF-16 of the file descriptor into UTF-8
i_DECLIMEX_ int32_t rfFReadLine_UTF16BE(FILE* f,char** utf8,uint32_t* byteLength,char* eof);
// @brief Reads a Little Endian UTF-16 file descriptor until end of line or EOF is found and returns a UTF-8 byte buffer
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// When the compile flag @c RF_NEWLINE_CRLF is defined (the default case at Windows) then this function
// shall not be adding any CR character that is found in the file behind a newline character since this is
// the Windows line ending scheme. Beware though that the returned read bytes value shall still count the CR character inside.
//
// @param[in] f The file descriptor to read
// @param[out] utf8 Give here a refence to an unitialized char* that will be allocated inside the function
// and contain the utf8 byte buffer. Needs to be freed by the caller explicitly later
// @param[out] byteLength Give an @c uint32_t here to receive the length of the @c utf8 buffer in bytes
// @param[out] eof Pass a pointer to a char to receive a true or false value in case the end of file
// with reading this line
// @return Returns either a positive number for success that represents the number of bytes read from @c f and and error in case something goes wrong.
// + Any error that can be returned by @ref rfFgets_UTF16LE()
// + @c RE_UTF16_INVALID_SEQUENCE: Failed to decode the UTF-16 byte stream of the file descriptor
// + @c RE_UTF8_ENCODING: Failed to encode the UTF-16 of the file descriptor into UTF-8
i_DECLIMEX_ int32_t rfFReadLine_UTF16LE(FILE* f,char** utf8,uint32_t* byteLength,char* eof);
// @brief Reads a Big Endian UTF-32 file descriptor until end of line or EOF is found and returns a UTF-8 byte buffer
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// When the compile flag @c RF_NEWLINE_CRLF is defined (the default case at Windows) then this function
// shall not be adding any CR character that is found in the file behind a newline character since this is
// the Windows line ending scheme. Beware though that the returned read bytes value shall still count the CR character inside.
//
// @param[in] f The file descriptor to read
// @param[out] utf8 Give here a refence to an unitialized char* that will be allocated inside the function
// and contain the utf8 byte buffer. Needs to be freed by the caller explicitly later
// @param[out] byteLength Give an @c uint32_t here to receive the length of the @c utf8 buffer in bytes
// @param[out] eof Pass a pointer to a char to receive a true or false value in case the end of file
// with reading this line
// @return Returns either a positive number for success that represents the number of bytes read from @c f and and error in case something goes wrong.
// + Any error that can be returned by @ref rfFgets_UTF32BE()
// + @c RE_UTF8_ENCODING: Failed to encode the UTF-16 of the file descriptor into UTF-8
i_DECLIMEX_ int32_t rfFReadLine_UTF32BE(FILE* f,char** utf8,uint32_t* byteLength,char* eof);
// @brief Reads a Little Endian UTF-32 file descriptor until end of line or EOF is found and returns a UTF-8 byte buffer
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// When the compile flag @c RF_NEWLINE_CRLF is defined (the default case at Windows) then this function
// shall not be adding any CR character that is found in the file behind a newline character since this is
// the Windows line ending scheme. Beware though that the returned read bytes value shall still count the CR character inside.
//
// @param[in] f The file descriptor to read
// @param[out] utf8 Give here a refence to an unitialized char* that will be allocated inside the function
// and contain the utf8 byte buffer. Needs to be freed by the caller explicitly later
// @param[out] byteLength Give an @c uint32_t here to receive the length of the @c utf8 buffer in bytes
// @param[out] eof Pass a pointer to a char to receive a true or false value in case the end of file
// with reading this line
// @return Returns either a positive number for success that represents the number of bytes read from @c f and and error in case something goes wrong.
// + Any error that can be returned by @ref rfFgets_UTF32LE()
// + @c RE_UTF8_ENCODING: Failed to encode the UTF-16 of the file descriptor into UTF-8
i_DECLIMEX_ int32_t rfFReadLine_UTF32LE(FILE* f,char** utf8,uint32_t* byteLength,char* eof);
// @brief Gets a number of bytes from a BIG endian UTF-32 file descriptor
//
// This is a function that's similar to c library fgets but it also returns the number of bytes read. Reads in from the file until @c num bytes
// have been read or new line or EOF character has been encountered.
//
// The function will read until @c num characters are read and if @c num
// would take us to the middle of a UTF32 character then the next character shall also be read
// and the function will return the number of bytes read.
// Since the function null terminates the buffer the given @c buff needs to be of at least
// @c num+7 size to cater for the worst case.
//
// The final bytestream stored inside @c buff is in the endianess of the system.
//
// If right after the last character read comes the EOF, the function
// shall detect so and assign @c true to @c eof.
//
// In Windows where file endings are in the form of 2 bytes CR-LF (Carriage return - NewLine) this function
// shall just ignore the carriage returns and not return it inside the return buffer at @c buff.
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// @param[in] buff A buffer to be filled with the contents of the file. Should be of size at least @c num+7
// @param[in] num The maximum number of bytes to read from within the file NOT including the null terminating character(which in itelf is 4 bytes). Should be a multiple of 4
// @param[in] f A valid FILE descriptor from which to read the bytes
// @param[out] eof Pass a reference to a char to receive a true/false value for whether EOF has been reached.
// @return Returns the actual number of bytes read or an error if there was a problem.
// The possible errors are:
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgets_UTF32BE(char* buff,uint32_t num,FILE* f,char* eof);
// @brief Gets a number of bytes from a Little endian UTF-32 file descriptor
//
// This is a function that's similar to c library fgets but it also returns the number of bytes read. Reads in from the file until @c num bytes
// have been read or new line or EOF character has been encountered.
//
// The function will read until @c num characters are read and if @c num
// would take us to the middle of a UTF32 character then the next character shall also be read
// and the function will return the number of bytes read.
// Since the function null terminates the buffer the given @c buff needs to be of at least
// @c num+7 size to cater for the worst case.
//
// The final bytestream stored inside @c buff is in the endianess of the system.
//
// If right after the last character read comes the EOF, the function
// shall detect so and assign @c true to @c eof.
//
// In Windows where file endings are in the form of 2 bytes CR-LF (Carriage return - NewLine) this function
// shall just ignore the carriage returns and not return it inside the return buffer at @c buff.
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// @param[in] buff A buffer to be filled with the contents of the file. Should be of size at least @c num+7
// @param[in] num The maximum number of bytes to read from within the file NOT including the null terminating character(which in itelf is 4 bytes). Should be a multiple of 4
// @param[in] f A valid FILE descriptor from which to read the bytes
// @param[out] eof Pass a reference to a char to receive a true/false value for whether EOF has been reached.
// @return Returns the actual number of bytes read or an error if there was a problem.
// The possible errors are:
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgets_UTF32LE(char* buff,uint32_t num,FILE* f,char* eof);
// @brief Gets a number of bytes from a BIG endian UTF-16 file descriptor
//
// This is a function that's similar to c library fgets but it also returns the number of bytes read. Reads in from the file until @c num bytes
// have been read or new line or EOF character has been encountered.
//
// The function will read until @c num characters are read and if @c num
// would take us to the middle of a UTF16 character then the next character shall also be read
// and the function will return the number of bytes read.
// Since the function null terminates the buffer the given @c buff needs to be of at least
// @c num+5 size to cater for the worst case.
//
// The final bytestream stored inside @c buff is in the endianess of the system.
//
// If right after the last character read comes the EOF, the function
// shall detect so and assign @c true to @c eof.
//
// In Windows where file endings are in the form of 2 bytes CR-LF (Carriage return - NewLine) this function
// shall just ignore the carriage returns and not return it inside the return buffer at @c buff.
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// @param[in] buff A buffer to be filled with the contents of the file. Should be of size at least @c num+5
// @param[in] num The maximum number of bytes to read from within the file NOT including the null terminating character(which in itelf is 2 bytes). Should be a multiple of 2
// @param[in] f A valid FILE descriptor from which to read the bytes
// @param[out] eof Pass a reference to a char to receive a true/false value for whether EOF has been reached.
// @return Returns the actual number of bytes read or an error if there was a problem.
// The possible errors are:
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgets_UTF16BE(char* buff,uint32_t num,FILE* f,char* eof);
// @brief Gets a number of bytes from a Little endian UTF-16 file descriptor
//
// This is a function that's similar to c library fgets but it also returns the number of bytes read. Reads in from the file until @c num bytes
// have been read or new line or EOF character has been encountered.
//
// The function will read until @c num characters are read and if @c num
// would take us to the middle of a UTF16 character then the next character shall also be read
// and the function will return the number of bytes read.
// Since the function null terminates the buffer the given @c buff needs to be of at least
// @c num+5 size to cater for the worst case.
//
// The final bytestream stored inside @c buff is in the endianess of the system.
//
// If right after the last character read comes the EOF, the function
// shall detect so and assign @c true to @c eof.
//
// In Windows where file endings are in the form of 2 bytes CR-LF (Carriage return - NewLine) this function
// shall just ignore the carriage returns and not return it inside the return buffer at @c buff.
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// @param[in] buff A buffer to be filled with the contents of the file. Should be of size at least @c num+2
// @param[in] num The maximum number of bytes to read from within the file NOT including the null terminating character(which in itelf is 2 bytes). Should be a multiple of 2
// @param[in] f A valid FILE descriptor from which to read the bytes
// @param[out] eof Pass a reference to a char to receive a true/false value for whether EOF has been reached.
// @return Returns the actual number of bytes read or an error if there was a problem.
// The possible errors are:
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgets_UTF16LE(char* buff,uint32_t num,FILE* f,char* eof);
// @brief Gets a number of bytes from a UTF-8 file descriptor
//
// This is a function that's similar to c library fgets but it also returns the number of bytes read. Reads in from the file until @c num characters
// have been read or new line or EOF character has been encountered.
//
// The function automatically adds a null termination character at the end of
// @c buff but this character is not included in the returned actual number of bytes.
//
// The function will read until @c num characters are read and if @c num
// would take us to the middle of a UTF8 character then the next character shall also be read
// and the function will return the number of bytes read.
// Since the function null terminates the buffer the given @c buff needs to be of at least
// @c num+4 size to cater for the worst case.
//
// If right after the last character read comes the EOF, the function
// shall detect so and assign @c true to @c eof.
//
// In Windows where file endings are in the form of 2 bytes CR-LF (Carriage return - NewLine) this function
// shall just ignore the carriage returns and not return it inside the return buffer at @c buff.
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// @param[in] buff A buffer to be filled with the contents of the file. Should of size at least @c num+4
// @param[in] num The maximum number of bytes to read from within the file NOT including the null terminating character(which in itelf is 1 byte)
// @param[in] f A valid FILE descriptor from which to read the bytes
// @param[out] eof Pass a reference to a char to receive a true/false value for whether EOF has been reached.
// @return Returns the actual number of bytes read or an error if there was a problem.
// The possible errors are:
// + @c RE_UTF8_INVALID_SEQUENCE_INVALID_BYTE: If an invalid UTF-8 byte has been found
// + @c RE_UTF8_INVALID_SEQUENCE_CONBYTE: If during parsing the file we were expecting a continuation
// byte and did not find it
// + @c RE_UTF8_INVALID_SEQUENCE_END: If the null character is encountered in between bytes that should
// have been continuation bytes
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgets_UTF8(char* buff,uint32_t num,FILE* f,char* eof);
// @brief Gets a unicode character from a UTF-8 file descriptor
//
// This function attempts to assume a more modern fgetc() role for UTF-8 encoded files.
// Reads bytes from the File descriptor @c f until a full UTF-8 unicode character has been read
//
// After this function the file pointer will have moved either by @c 1, @c 2, @c 3 or @c 4
// bytes if the return value is positive. You can see how much by checking the return value.
//
// You shall need to provide an integer at @c c to contain either the decoded Unicode
// codepoint or the UTF-8 endoced byte depending on the value of the @c cp argument.
//
// @param f A valid FILE descriptor from which to read the bytes
// @param c Pass an int that will receive either the unicode code point value or
// the UTF8 bytes depending on the value of the @c cp flag
// @param cp A boolean flag. If @c true then the int passed at @c c will contain the unicode code point
// of the read character, so the UTF-8 will be decoded.
// If @c false the int passed at @c c will contain the value of the read bytes in UTF-8 without any decoding
// @return Returns the number of bytes read (either @c 1, @c 2, @c 3 or @c 4) or an error if the function
// fails for some reason. Possible error values are:
// + @c RE_FILE_EOF: The end of file has been found while reading. If the end of file is encountered
// in the middle of a UTF-8 encoded character where we would be expecting something different
// and @c RE_UTF8_INVALID_SEQUENCE_END error is also logged
// + @c RE_UTF8_INVALID_SEQUENCE_INVALID_BYTE: If an invalid UTF-8 byte has been found
// + @c RE_UTF8_INVALID_SEQUENCE_CONBYTE: If during parsing the file we were expecting a continuation
// byte and did not find it
// + @c RE_UTF8_INVALID_SEQUENCE_END: If the null character is encountered in between bytes that should
// have been continuation bytes
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgetc_UTF8(FILE* f,uint32_t *c,char cp);
// @brief Gets a unicode character from a UTF-16 Big Endian file descriptor
//
// This function attempts to assume a more modern fgetc() role for UTF-16 encoded files.
// Reads bytes from the File descriptor @c f until a full UTF-16 unicode character has been read
//
// After this function the file pointer will have moved either by @c 2 or @c 4
// bytes if the return value is positive. You can see how much by checking the return value.
//
// You shall need to provide an integer at @c c to contain either the decoded Unicode
// codepoint or the Bigendian encoded UTF-16 bytes depending on the value of @c the cp argument.
//
// @param f A valid FILE descriptor from which to read the bytes
// @param c Pass an int that will receive either the unicode code point value or
// the UTF16 bytes depending on the value of the @c cp flag
// @param cp A boolean flag. If @c true then the int passed at @c c will contain the unicode code point
// of the read character, so the UTF-16 will be decoded.
// If @c false the int passed at @c c will contain the value of the read bytes in UTF-16 without any decoding
// @return Returns the number of bytes read (either @c 2 or @c 4) or an error if the function
// fails for some reason. Possible error values are:
// + @c RE_UTF16_INVALID_SEQUENCE: Either the read word or its surrogate pair if 4 bytes were read held illegal values
// + @c RE_UTF16_NO_SURRPAIR: According to the first read word a surrogate pair was expected but none was found
// + @c RE_FILE_EOF: The end of file has been found while reading. If the end of file is encountered
// while we expect a UTF-16 surrogate pair an appropriate error is logged
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgetc_UTF16BE(FILE* f,uint32_t *c,char cp);
// @brief Gets a unicode character from a UTF-16 Little Endian file descriptor
//
// This function attempts to assume a more modern fgetc() role for UTF-16 encoded files.
// Reads bytes from the File descriptor @c f until a full UTF-16 unicode character has been read
//
// After this function the file pointer will have moved either by @c 2 or @c 4
// bytes if the return value is positive. You can see how much by checking the return value.
//
// You shall need to provide an integer at @c c to contain either the decoded Unicode
// codepoint or the Bigendian encoded UTF-16 bytes depending on the value of @c the cp argument.
//
// @param f A valid FILE descriptor from which to read the bytes
// @param c Pass an int that will receive either the unicode code point value or
// the UTF16 bytes depending on the value of the @c cp flag
// @param cp A boolean flag. If @c true then the int passed at @c c will contain the unicode code point
// of the read character, so the UTF-16 will be decoded.
// If @c false the int passed at @c c will contain the value of the read bytes in UTF-16 without any decoding
// @return Returns the number of bytes read (either @c 2 or @c 4) or an error if the function
// fails for some reason. Possible error values are:
// + @c RE_UTF16_INVALID_SEQUENCE: Either the read word or its surrogate pair if 4 bytes were read held illegal values
// + @c RE_UTF16_NO_SURRPAIR: According to the first read word a surrogate pair was expected but none was found
// + @c RE_FILE_EOF: The end of file has been found while reading. If the end of file is encountered
// while we expect a UTF-16 surrogate pair an appropriate error is logged
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgetc_UTF16LE(FILE* f,uint32_t *c,char cp);
// @brief Gets a unicode character from a UTF-32 Little Endian file descriptor
//
// This function attempts to assume a more modern fgetc() role for UTF-32 encoded files.
// Reads bytes from the File descriptor @c f until a full UTF-32 unicode character has been read
//
// After this function the file pointer will have moved by @c 4
// bytes if the return value is positive.
//
// You shall need to provide an integer at @c to contain the UTF-32 codepoint.
//
// @param f A valid FILE descriptor from which to read the bytes
// @param c Pass an int that will receive either the unicode code point value or
// the UTF16 bytes depending on the value of the @c cp flag
// If @c false the int passed at @c c will contain the value of the read bytes in UTF-16 without any decoding
// @return Returns either @c RF_SUCCESS for succesfull readin or one of the following errors:
// + @c RE_FILE_EOF: The end of file has been found while reading.
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgetc_UTF32LE(FILE* f,uint32_t *c);
// @brief Gets a unicode character from a UTF-32 Big Endian file descriptor
//
// This function attempts to assume a more modern fgetc() role for UTF-32 encoded files.
// Reads bytes from the File descriptor @c f until a full UTF-32 unicode character has been read
//
// After this function the file pointer will have moved by @c 4
// bytes if the return value is positive.
//
// You shall need to provide an integer at @c to contain the UTF-32 codepoint.
//
// @param f A valid FILE descriptor from which to read the bytes
// @param c Pass an int that will receive either the unicode code point value or
// the UTF16 bytes depending on the value of the @c cp flag
// If @c false the int passed at @c c will contain the value of the read bytes in UTF-16 without any decoding
// @return Returns either @c RF_SUCCESS for succesfull readin or one of the following errors:
// + @c RE_FILE_EOF: The end of file has been found while reading.
// + @c RE_FILE_READ: If during reading the file there was an unknown read error
// + @c RE_FILE_READ_BLOCK: If the read operation failed due to the file descriptor being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the file descriptor's mode was not correctly set for reading
// + @c RE_FILE_POS_OVERFLOW: If during reading, the current file position can't be represented by the system
// + @c RE_INTERRUPT: If during reading, there was a system interrupt
// + @c RE_FILE_IO: If there was a physical I/O error
// + @c RE_FILE_NOSPACE: If reading failed due to insufficient storage space
i_DECLIMEX_ int32_t rfFgetc_UTF32BE(FILE* f,uint32_t *c);
// @brief Moves a unicode character backwards in a big endian UTF-32 file stream
//
// @param f The file stream
// @param c Returns the character we moved back to as a unicode codepoint
// @return Returns either @c RF_SUCCESS for success or one of the following errors:
// + @c RE_FILE_POS_OVERFLOW: If during trying to read the current file's position it can't be represented by the system
// + @c RE_FILE_BAD: If The file descriptor is corrupt/illegal
// + @c RE_FILE_NOTFILE: If the file descriptor is not a file but something else. e.g. socket.
// + @c RE_FILE_GETFILEPOS: If the file's position could not be retrieved for some unknown reason
// + @c RE_FILE_WRITE_BLOCK: While attempting to move the file pointer, it was occupied by another thread, and the no block flag was set
// + @c RE_INTERRUPT: Operating on the file failed due to a system interrupt
// + @c RE_FILE_IO: There was a physical I/O error
// + @c RE_FILE_NOSPACE: There was no space on the device holding the file
// + @c RE_FILE_NOTFILE: The device we attempted to manipulate is non-existent
// + @c RE_FILE_READ: If during reading the file there was an error
// + @c RE_FILE_READ_BLOCK: If during reading the file the read operation failed due to the file being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the underlying file descriptor's mode was not correctly set for reading
i_DECLIMEX_ int32_t rfFback_UTF32BE(FILE* f,uint32_t *c);
// @brief Moves a unicode character backwards in a little endian UTF-32 file stream
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// @param f The file stream
// @param c Returns the character we moved back to as a unicode codepoint
// @return Returns either @c RF_SUCCESS for success or one of the following errors:
// + @c RE_FILE_POS_OVERFLOW: If during trying to read the current file's position it can't be represented by the system
// + @c RE_FILE_BAD: If The file descriptor is corrupt/illegal
// + @c RE_FILE_NOTFILE: If the file descriptor is not a file but something else. e.g. socket.
// + @c RE_FILE_GETFILEPOS: If the file's position could not be retrieved for some unknown reason
// + @c RE_FILE_WRITE_BLOCK: While attempting to move the file pointer, it was occupied by another thread, and the no block flag was set
// + @c RE_INTERRUPT: Operating on the file failed due to a system interrupt
// + @c RE_FILE_IO: There was a physical I/O error
// + @c RE_FILE_NOSPACE: There was no space on the device holding the file
// + @c RE_FILE_NOTFILE: The device we attempted to manipulate is non-existent
// + @c RE_FILE_READ: If during reading the file there was an error
// + @c RE_FILE_READ_BLOCK: If during reading the file the read operation failed due to the file being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the underlying file descriptor's mode was not correctly set for reading
i_DECLIMEX_ int32_t rfFback_UTF32LE(FILE* f,uint32_t *c);
// @brief Moves a unicode character backwards in a big endian UTF-16 file stream
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// @param f The file stream
// @param c Returns the character we moved back to as a unicode codepoint
// @return Returns either the number of bytes moved backwards (either @c 4 or @c 2) for success or one of the following errors:
// + @c RE_UTF16_INVALID_SEQUENCE: Either the read word or its surrogate pair if 4 bytes were read held illegal values
// + @c RE_FILE_POS_OVERFLOW: If during trying to read the current file's position it can't be represented by the system
// + @c RE_FILE_BAD: If The file descriptor is corrupt/illegal
// + @c RE_FILE_NOTFILE: If the file descriptor is not a file but something else. e.g. socket.
// + @c RE_FILE_GETFILEPOS: If the file's position could not be retrieved for some unknown reason
// + @c RE_FILE_WRITE_BLOCK: While attempting to move the file pointer, it was occupied by another thread, and the no block flag was set
// + @c RE_INTERRUPT: Operating on the file failed due to a system interrupt
// + @c RE_FILE_IO: There was a physical I/O error
// + @c RE_FILE_NOSPACE: There was no space on the device holding the file
// + @c RE_FILE_NOTFILE: The device we attempted to manipulate is non-existent
// + @c RE_FILE_READ: If during reading the file there was an error
// + @c RE_FILE_READ_BLOCK: If during reading the file the read operation failed due to the file being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the underlying file descriptor's mode was not correctly set for reading
i_DECLIMEX_ int32_t rfFback_UTF16BE(FILE* f,uint32_t *c);
// @brief Moves a unicode character backwards in a little endian UTF-16 file stream
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// @param f The file stream
// @param c Returns the character we moved back to as a unicode codepoint
// @return Returns either the number of bytes moved backwards (either @c 4 or @c 2) for success or one of the following errors:
// + @c RE_UTF16_INVALID_SEQUENCE: Either the read word or its surrogate pair if 4 bytes were read held illegal values
// + @c RE_FILE_POS_OVERFLOW: If during trying to read the current file's position it can't be represented by the system
// + @c RE_FILE_BAD: If The file descriptor is corrupt/illegal
// + @c RE_FILE_NOTFILE: If the file descriptor is not a file but something else. e.g. socket.
// + @c RE_FILE_GETFILEPOS: If the file's position could not be retrieved for some unknown reason
// + @c RE_FILE_WRITE_BLOCK: While attempting to move the file pointer, it was occupied by another thread, and the no block flag was set
// + @c RE_INTERRUPT: Operating on the file failed due to a system interrupt
// + @c RE_FILE_IO: There was a physical I/O error
// + @c RE_FILE_NOSPACE: There was no space on the device holding the file
// + @c RE_FILE_NOTFILE: The device we attempted to manipulate is non-existent
// + @c RE_FILE_READ: If during reading the file there was an error
// + @c RE_FILE_READ_BLOCK: If during reading the file the read operation failed due to the file being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the underlying file descriptor's mode was not correctly set for reading
i_DECLIMEX_ int32_t rfFback_UTF16LE(FILE* f,uint32_t *c);
// @brief Moves a unicode character backwards in a UTF-8 file stream
//
// The file descriptor at @c f must have been opened in <b>binary</b> and not text mode. That means that if under
// Windows make sure to call fopen with "wb", "rb" e.t.c. instead of the simple "w", "r" e.t.c. since the initial
// default value under Windows is text mode. Alternatively you can set the initial value using _get_fmode() and
// _set_fmode(). For more information take a look at the msdn pages here:
// http://msdn.microsoft.com/en-us/library/ktss1a9b.aspx
//
// @param f The file stream
// @param c Returns the character we moved back to as a unicode codepoint
// @return Returns either the number of bytes moved backwards for success (either @c 4, @c 3, @c 2 or @c 1) or one of the following errors:
// + @c RE_UTF8_INVALID_SEQUENCE: If during moving bacwards in the file unexpected UTF-8 bytes were found
// + @c RE_FILE_POS_OVERFLOW: If during trying to read the current file's position it can't be represented by the system
// + @c RE_FILE_BAD: If The file descriptor is corrupt/illegal
// + @c RE_FILE_NOTFILE: If the file descriptor is not a file but something else. e.g. socket.
// + @c RE_FILE_GETFILEPOS: If the file's position could not be retrieved for some unknown reason
// + @c RE_FILE_WRITE_BLOCK: While attempting to move the file pointer, it was occupied by another thread, and the no block flag was set
// + @c RE_INTERRUPT: Operating on the file failed due to a system interrupt
// + @c RE_FILE_IO: There was a physical I/O error
// + @c RE_FILE_NOSPACE: There was no space on the device holding the file
// + @c RE_FILE_NOTFILE: The device we attempted to manipulate is non-existent
// + @c RE_FILE_READ: If during reading the file there was an error
// + @c RE_FILE_READ_BLOCK: If during reading the file the read operation failed due to the file being occupied by another thread
// + @c RE_FILE_MODE: If during reading the file the underlying file descriptor's mode was not correctly set for reading
i_DECLIMEX_ int32_t rfFback_UTF8(FILE* f,uint32_t *c);
// @brief Opens another process as a pipe
//
// This function is a cross-platform popen wrapper. In linux it uses popen and in Windows it uses
// _popen.
// @lmsFunction
// @param command The string with the command to execute. Is basically the name of the program/process you want to spawn
// with its full path and its parameters. @inhtype{String,StringX} @tmpSTR
// @param mode The mode you want the pipe to work in. There are two possible values:
// + @c "r" The calling process can read the spawned command's standard output via the returned stream.
// + @c "w" The calling process can write to the spawned command's standard input via the returned stream.
//
// Anything else will result in an error
// @return For success popen will return a FILE descriptor that can be used to either read or write from the pipe.
// If there was an error @c 0 is returned and an error is logged.
#ifdef RF_IAMHERE_FOR_DOXYGEN
i_DECLIMEX_ FILE* rfPopen(void* command,const char* mode);
#else
i_DECLIMEX_ FILE* i_rfPopen(void* command,const char* mode);
#define rfPopen(i_CMD_,i_MODE_) i_rfLMS_WRAP2(FILE*,i_rfPopen,i_CMD_,i_MODE_)
#endif
// @brief Closes a pipe
//
// This function is a cross-platform wrapper for pclose. It closes a file descriptor opened with @ref rfPopen() and
// returns the exit code of the process that was running
// @param stream The file descriptor of the pipe returned by @ref rfPopen() that we want to close
// @return Returns the exit code of the process or -1 if there was an error
i_DECLIMEX_ int rfPclose(FILE* stream);
// @} End of I/O group
#ifdef __cplusplus
}///closing bracket for calling from C++
#endif
#endif//include guards end

2348
samples/C/rfc_string.c Normal file

File diff suppressed because it is too large Load Diff

1459
samples/C/rfc_string.h Normal file

File diff suppressed because it is too large Load Diff

15669
samples/C/sgd_fast.c Normal file

File diff suppressed because it is too large Load Diff

5
samples/C/syscalldefs.h Normal file
View File

@@ -0,0 +1,5 @@
static const syscalldef syscalldefs[] = {
[SYSCALL_OR_NUM(0, SYS_restart_syscall)] = MAKE_UINT16(0, 1),
[SYSCALL_OR_NUM(1, SYS_exit)] = MAKE_UINT16(1, 17),
[SYSCALL_OR_NUM(2, SYS_fork)] = MAKE_UINT16(0, 22),
};

1363
samples/C/wglew.h Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
program-id. hello.
procedure division.
display "Hello, World!".
stop run.

View File

@@ -0,0 +1,6 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. hello.
PROCEDURE DIVISION.
DISPLAY "Hello World, yet again.".
STOP RUN.

View File

@@ -0,0 +1,6 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. hello.
PROCEDURE DIVISION.
DISPLAY "Hello World!".
STOP RUN.

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