mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Compare commits
101 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
346aa99fcf | ||
|
|
d147778677 | ||
|
|
e520209e49 | ||
|
|
338cc16239 | ||
|
|
67ea35094b | ||
|
|
6f0393fcbd | ||
|
|
2923d50d7e | ||
|
|
4e26f609ef | ||
|
|
e86d6e8dd2 | ||
|
|
5fa02ad1fb | ||
|
|
5a06240f69 | ||
|
|
d6e0f74c80 | ||
|
|
a5c08bb203 | ||
|
|
c6dc29abb1 | ||
|
|
ffd984bb7e | ||
|
|
dc5473559b | ||
|
|
8e9c224952 | ||
|
|
d43f111723 | ||
|
|
de9ff713a4 | ||
|
|
98783560ec | ||
|
|
8f31fbbd55 | ||
|
|
e4cdbd2b2b | ||
|
|
ba52e48ceb | ||
|
|
a44ebe493b | ||
|
|
eb0e75e11e | ||
|
|
22c2cf4967 | ||
|
|
39e3688fb8 | ||
|
|
6b83e5fb7b | ||
|
|
dd2e5ffe07 | ||
|
|
f6b6c4e165 | ||
|
|
608ed60b5c | ||
|
|
2ce2945058 | ||
|
|
c8d376754e | ||
|
|
ecaef91fa1 | ||
|
|
d265b78e7e | ||
|
|
5a5bf7d5e5 | ||
|
|
e46781b903 | ||
|
|
9543a8c8e9 | ||
|
|
6ac1ac9232 | ||
|
|
1bbb919fef | ||
|
|
71dfed0e45 | ||
|
|
a2db058ce4 | ||
|
|
12695fee2f | ||
|
|
4a775dca37 | ||
|
|
d7c689fd6b | ||
|
|
20b8188384 | ||
|
|
26310d9515 | ||
|
|
e38cc75da5 | ||
|
|
8d55fc1bd5 | ||
|
|
7e63399196 | ||
|
|
520e5a5cfe | ||
|
|
5d85692c24 | ||
|
|
676861fff3 | ||
|
|
6589bd9dc7 | ||
|
|
e32a4f13ef | ||
|
|
4e4d851f71 | ||
|
|
a3628f86da | ||
|
|
fe70965906 | ||
|
|
c863435c84 | ||
|
|
eeec48198a | ||
|
|
82167063da | ||
|
|
3ae89b48ba | ||
|
|
cd9401c424 | ||
|
|
e7e8a7d835 | ||
|
|
7654032d2e | ||
|
|
05b536fc61 | ||
|
|
ebe85788ab | ||
|
|
524337d07b | ||
|
|
f8ce42e169 | ||
|
|
71032cd252 | ||
|
|
41593b3ea7 | ||
|
|
e424e8e88c | ||
|
|
07d4f218a3 | ||
|
|
67ed060d37 | ||
|
|
3abe081560 | ||
|
|
d3f3c0345c | ||
|
|
855f1a1f86 | ||
|
|
0406a5b326 | ||
|
|
0108ef4386 | ||
|
|
daefff86ff | ||
|
|
fdb962518f | ||
|
|
6564078061 | ||
|
|
39ea9be5f8 | ||
|
|
152b5ade5e | ||
|
|
c525e3fbef | ||
|
|
88c74fa9c2 | ||
|
|
6a54ee767f | ||
|
|
82af10e3fd | ||
|
|
63c8d2284c | ||
|
|
b61fe90d12 | ||
|
|
e6c849d92c | ||
|
|
be316c2943 | ||
|
|
68c45be47d | ||
|
|
4584963dd2 | ||
|
|
f382abc2f3 | ||
|
|
00647be113 | ||
|
|
48b64c2d31 | ||
|
|
f95365946c | ||
|
|
b056df06f4 | ||
|
|
6bf223e641 | ||
|
|
fa817b6a1d |
12
.gitmodules
vendored
12
.gitmodules
vendored
@@ -202,9 +202,6 @@
|
||||
[submodule "vendor/grammars/sublime-robot-plugin"]
|
||||
path = vendor/grammars/sublime-robot-plugin
|
||||
url = https://github.com/shellderp/sublime-robot-plugin
|
||||
[submodule "vendor/grammars/actionscript3-tmbundle"]
|
||||
path = vendor/grammars/actionscript3-tmbundle
|
||||
url = https://github.com/honzabrecka/actionscript3-tmbundle
|
||||
[submodule "vendor/grammars/Sublime-QML"]
|
||||
path = vendor/grammars/Sublime-QML
|
||||
url = https://github.com/skozlovf/Sublime-QML
|
||||
@@ -791,3 +788,12 @@
|
||||
[submodule "vendor/grammars/language-babel"]
|
||||
path = vendor/grammars/language-babel
|
||||
url = https://github.com/github-linguist/language-babel
|
||||
[submodule "vendor/CodeMirror"]
|
||||
path = vendor/CodeMirror
|
||||
url = https://github.com/codemirror/CodeMirror
|
||||
[submodule "vendor/grammars/MQL5-sublime"]
|
||||
path = vendor/grammars/MQL5-sublime
|
||||
url = https://github.com/mqsoft/MQL5-sublime
|
||||
[submodule "vendor/grammars/actionscript3-tmbundle"]
|
||||
path = vendor/grammars/actionscript3-tmbundle
|
||||
url = https://github.com/simongregory/actionscript3-tmbundle
|
||||
|
||||
@@ -17,7 +17,7 @@ To add support for a new extension:
|
||||
In addition, if this extension is already listed in [`languages.yml`][languages] then sometimes a few more steps will need to be taken:
|
||||
|
||||
0. Make sure that example `.yourextension` files are present in the [samples directory][samples] for each language that uses `.yourextension`.
|
||||
0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.yourextension` files. (ping @arfon or @bkeepers to help with this) to ensure we're not misclassifying files.
|
||||
0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.yourextension` files. (ping **@arfon** or **@bkeepers** to help with this) to ensure we're not misclassifying files.
|
||||
0. If the Bayesian classifier does a bad job with the sample `.yourextension` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help.
|
||||
|
||||
|
||||
@@ -27,19 +27,16 @@ We try only to add languages once they have some usage on GitHub. In most cases
|
||||
|
||||
To add support for a new language:
|
||||
|
||||
0. Add an entry for your language to [`languages.yml`][languages].
|
||||
0. Add a grammar for your language. Please only add grammars that have [one of these licenses](https://github.com/github/linguist/blob/257425141d4e2a5232786bf0b13c901ada075f93/vendor/licenses/config.yml#L2-L11).
|
||||
0. Add your grammar as a submodule: `git submodule add https://github.com/JaneSmith/MyGrammar vendor/grammars/MyGrammar`.
|
||||
0. Add your grammar to [`grammars.yml`][grammars] by running `script/convert-grammars --add vendor/grammars/MyGrammar`.
|
||||
0. Download the license for the grammar: `script/licensed`. Be careful to only commit the file for the new grammar, as this script may update licenses for other grammars as well.
|
||||
0. Add an entry for your language to [`languages.yml`][languages]. Omit the `language_id` field for now.
|
||||
0. Add a grammar for your language: `script/add-grammar https://github.com/JaneSmith/MyGrammar`. Please only add grammars that have [one of these licenses][licenses].
|
||||
0. Add samples for your language to the [samples directory][samples] in the correct subdirectory.
|
||||
0. Add a `language_id` for your language. See `script/set-language-ids` for more information. **You should only ever need to run `script/set-language-ids --update`. Anything other than this risks breaking GitHub search :cry:**
|
||||
0. Add a `language_id` for your language using `script/set-language-ids`. **You should only ever need to run `script/set-language-ids --update`. Anything other than this risks breaking GitHub search :cry:**
|
||||
0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage.
|
||||
|
||||
In addition, if your new language defines an extension that's already listed in [`languages.yml`][languages] (such as `.foo`) then sometimes a few more steps will need to be taken:
|
||||
|
||||
0. Make sure that example `.foo` files are present in the [samples directory][samples] for each language that uses `.foo`.
|
||||
0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.foo` files. (ping @arfon or @bkeepers to help with this) to ensure we're not misclassifying files.
|
||||
0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.foo` files. (ping **@arfon** or **@bkeepers** to help with this) to ensure we're not misclassifying files.
|
||||
0. If the Bayesian classifier does a bad job with the sample `.foo` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help.
|
||||
|
||||
Remember, the goal here is to try and avoid false positives!
|
||||
@@ -82,9 +79,9 @@ Here's our current build status: [
|
||||
- @larsbrinkhoff
|
||||
- @pchaigno
|
||||
- **@arfon** (GitHub Staff)
|
||||
- **@larsbrinkhoff**
|
||||
- **@pchaigno**
|
||||
|
||||
As Linguist is a production dependency for GitHub we have a couple of workflow restrictions:
|
||||
|
||||
@@ -113,5 +110,6 @@ If you are the current maintainer of this gem:
|
||||
|
||||
[grammars]: /grammars.yml
|
||||
[languages]: /lib/linguist/languages.yml
|
||||
[licenses]: https://github.com/github/linguist/blob/257425141d4e2a5232786bf0b13c901ada075f93/vendor/licenses/config.yml#L2-L11
|
||||
[samples]: /samples
|
||||
[new-issue]: https://github.com/github/linguist/issues/new
|
||||
|
||||
@@ -26,6 +26,6 @@ Gem::Specification.new do |s|
|
||||
s.add_development_dependency 'yajl-ruby'
|
||||
s.add_development_dependency 'color-proximity', '~> 0.2.1'
|
||||
s.add_development_dependency 'licensed'
|
||||
s.add_development_dependency 'licensee', '>= 8.3.0'
|
||||
s.add_development_dependency 'licensee', '>= 8.6.0'
|
||||
|
||||
end
|
||||
|
||||
@@ -47,6 +47,8 @@ vendor/grammars/Lean.tmbundle:
|
||||
- source.lean
|
||||
vendor/grammars/LiveScript.tmbundle:
|
||||
- source.livescript
|
||||
vendor/grammars/MQL5-sublime:
|
||||
- source.mql5
|
||||
vendor/grammars/MagicPython:
|
||||
- source.python
|
||||
- source.regexp.python
|
||||
@@ -134,7 +136,7 @@ vendor/grammars/X10:
|
||||
- source.x10
|
||||
vendor/grammars/abap.tmbundle:
|
||||
- source.abap
|
||||
vendor/grammars/actionscript3-tmbundle:
|
||||
vendor/grammars/actionscript3-tmbundle/:
|
||||
- source.actionscript.3
|
||||
- text.html.asdoc
|
||||
- text.xml.flex-config
|
||||
@@ -375,6 +377,7 @@ vendor/grammars/language-inform7:
|
||||
- source.inform7
|
||||
vendor/grammars/language-javascript:
|
||||
- source.js
|
||||
- source.js.embedded.html
|
||||
- source.js.regexp
|
||||
- source.js.regexp.replacement
|
||||
vendor/grammars/language-jsoniq:
|
||||
|
||||
@@ -244,7 +244,7 @@ module Linguist
|
||||
Language["MUF"]
|
||||
elsif /^\s*;/.match(data)
|
||||
Language["M"]
|
||||
elsif /^\s*\(\*/.match(data)
|
||||
elsif /\*\)$/.match(data)
|
||||
Language["Mathematica"]
|
||||
elsif /^\s*%/.match(data)
|
||||
Language["Matlab"]
|
||||
@@ -254,7 +254,7 @@ module Linguist
|
||||
end
|
||||
|
||||
disambiguate ".md" do |data|
|
||||
if /^[-a-z0-9=#!\*\[|]/i.match(data)
|
||||
if /(^[-a-z0-9=#!\*\[|])|<\//i.match(data) || data.empty?
|
||||
Language["Markdown"]
|
||||
elsif /^(;;|\(define_)/.match(data)
|
||||
Language["GCC machine description"]
|
||||
|
||||
@@ -267,6 +267,7 @@ module Linguist
|
||||
# Returns an Array of Languages.
|
||||
def self.ace_modes
|
||||
warn "This method will be deprecated in a future 5.x release. Every language now has an `ace_mode` set."
|
||||
warn caller
|
||||
@ace_modes ||= all.select(&:ace_mode).sort_by { |lang| lang.name.downcase }
|
||||
end
|
||||
|
||||
@@ -301,12 +302,13 @@ module Linguist
|
||||
|
||||
@ace_mode = attributes[:ace_mode]
|
||||
@codemirror_mode = attributes[:codemirror_mode]
|
||||
@codemirror_mime_type = attributes[:codemirror_mime_type]
|
||||
@wrap = attributes[:wrap] || false
|
||||
|
||||
# Set legacy search term
|
||||
@search_term = attributes[:search_term] || default_alias_name
|
||||
|
||||
# Set the language_id
|
||||
# Set the language_id
|
||||
@language_id = attributes[:language_id]
|
||||
|
||||
# Set extensions or default to [].
|
||||
@@ -398,7 +400,10 @@ module Linguist
|
||||
# Returns a String name or nil
|
||||
attr_reader :ace_mode
|
||||
|
||||
# Public: Get Codemirror mode
|
||||
# Public: Get CodeMirror mode
|
||||
#
|
||||
# Maps to a directory in the `mode/` source code.
|
||||
# https://github.com/codemirror/CodeMirror/tree/master/mode
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
@@ -409,6 +414,17 @@ module Linguist
|
||||
# Returns a String name or nil
|
||||
attr_reader :codemirror_mode
|
||||
|
||||
# Public: Get CodeMirror MIME type mode
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# # => "nil"
|
||||
# # => "text/x-javascript"
|
||||
# # => "text/x-csrc"
|
||||
#
|
||||
# Returns a String name or nil
|
||||
attr_reader :codemirror_mime_type
|
||||
|
||||
# Public: Should language lines be wrapped
|
||||
#
|
||||
# Returns true or false
|
||||
@@ -586,6 +602,7 @@ module Linguist
|
||||
:tm_scope => options['tm_scope'],
|
||||
:ace_mode => options['ace_mode'],
|
||||
:codemirror_mode => options['codemirror_mode'],
|
||||
:codemirror_mime_type => options['codemirror_mime_type'],
|
||||
:wrap => options['wrap'],
|
||||
:group_name => options['group'],
|
||||
:searchable => options.fetch('searchable', true),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -15,6 +15,9 @@
|
||||
# Dependencies
|
||||
- ^[Dd]ependencies/
|
||||
|
||||
# Distributions
|
||||
- (^|/)dist/
|
||||
|
||||
# C deps
|
||||
# https://github.com/joyent/node
|
||||
- ^deps/
|
||||
@@ -165,7 +168,7 @@
|
||||
# Chart.js
|
||||
- (^|/)Chart\.js$
|
||||
|
||||
# Codemirror
|
||||
# CodeMirror
|
||||
- (^|/)[Cc]ode[Mm]irror/(\d+\.\d+/)?(lib|mode|theme|addon|keymap|demo)
|
||||
|
||||
# SyntaxHighlighter - http://alexgorbatchev.com/
|
||||
@@ -229,6 +232,9 @@
|
||||
# Fabric
|
||||
- Fabric.framework/
|
||||
|
||||
# BuddyBuild
|
||||
- BuddyBuildSDK.framework/
|
||||
|
||||
# git config files
|
||||
- gitattributes$
|
||||
- gitignore$
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
module Linguist
|
||||
VERSION = "4.8.14"
|
||||
VERSION = "4.8.16"
|
||||
end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"repository": "https://github.com/github/linguist",
|
||||
"dependencies": {
|
||||
"season": "~>5.0"
|
||||
"season": "~>5.4"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
|
||||
72
samples/CSON/base.cson
Normal file
72
samples/CSON/base.cson
Normal file
@@ -0,0 +1,72 @@
|
||||
'atom-text-editor':
|
||||
# Platform Bindings
|
||||
'home': 'editor:move-to-first-character-of-line'
|
||||
'end': 'editor:move-to-end-of-screen-line'
|
||||
'shift-home': 'editor:select-to-first-character-of-line'
|
||||
'shift-end': 'editor:select-to-end-of-line'
|
||||
|
||||
'atom-text-editor:not([mini])':
|
||||
# Atom Specific
|
||||
'ctrl-C': 'editor:copy-path'
|
||||
|
||||
# Sublime Parity
|
||||
'tab': 'editor:indent'
|
||||
'enter': 'editor:newline'
|
||||
'shift-tab': 'editor:outdent-selected-rows'
|
||||
'ctrl-K': 'editor:delete-line'
|
||||
|
||||
'.select-list atom-text-editor[mini]':
|
||||
'enter': 'core:confirm'
|
||||
|
||||
'.tool-panel.panel-left, .tool-panel.panel-right':
|
||||
'escape': 'tool-panel:unfocus'
|
||||
|
||||
'atom-text-editor !important, atom-text-editor[mini] !important':
|
||||
'escape': 'editor:consolidate-selections'
|
||||
|
||||
# allow standard input fields to work correctly
|
||||
'body .native-key-bindings':
|
||||
'tab': 'core:focus-next'
|
||||
'shift-tab': 'core:focus-previous'
|
||||
'enter': 'native!'
|
||||
'backspace': 'native!'
|
||||
'shift-backspace': 'native!'
|
||||
'delete': 'native!'
|
||||
'up': 'native!'
|
||||
'down': 'native!'
|
||||
'shift-up': 'native!'
|
||||
'shift-down': 'native!'
|
||||
'alt-up': 'native!'
|
||||
'alt-down': 'native!'
|
||||
'alt-shift-up': 'native!'
|
||||
'alt-shift-down': 'native!'
|
||||
'cmd-up': 'native!'
|
||||
'cmd-down': 'native!'
|
||||
'cmd-shift-up': 'native!'
|
||||
'cmd-shift-down': 'native!'
|
||||
'ctrl-up': 'native!'
|
||||
'ctrl-down': 'native!'
|
||||
'ctrl-shift-up': 'native!'
|
||||
'ctrl-shift-down': 'native!'
|
||||
'left': 'native!'
|
||||
'right': 'native!'
|
||||
'shift-left': 'native!'
|
||||
'shift-right': 'native!'
|
||||
'alt-left': 'native!'
|
||||
'alt-right': 'native!'
|
||||
'alt-shift-left': 'native!'
|
||||
'alt-shift-right': 'native!'
|
||||
'cmd-left': 'native!'
|
||||
'cmd-right': 'native!'
|
||||
'cmd-shift-left': 'native!'
|
||||
'cmd-shift-right': 'native!'
|
||||
'ctrl-left': 'native!'
|
||||
'ctrl-right': 'native!'
|
||||
'ctrl-shift-left': 'native!'
|
||||
'ctrl-shift-right': 'native!'
|
||||
'ctrl-b': 'native!'
|
||||
'ctrl-f': 'native!'
|
||||
'ctrl-F': 'native!'
|
||||
'ctrl-B': 'native!'
|
||||
'ctrl-h': 'native!'
|
||||
'ctrl-d': 'native!'
|
||||
59
samples/CSON/config.cson
Normal file
59
samples/CSON/config.cson
Normal file
@@ -0,0 +1,59 @@
|
||||
directoryIcons:
|
||||
|
||||
Atom:
|
||||
icon: "atom"
|
||||
match: /^\.atom$/
|
||||
colour: "dark-green"
|
||||
|
||||
Bower:
|
||||
icon: "bower"
|
||||
match: /^bower[-_]components$/
|
||||
colour: "bower"
|
||||
|
||||
Dropbox:
|
||||
icon: "dropbox"
|
||||
match: /^(?:Dropbox|\.dropbox\.cache)$/
|
||||
colour: "medium-blue"
|
||||
|
||||
Git:
|
||||
icon: "git"
|
||||
match: /^\.git$/
|
||||
|
||||
GitHub:
|
||||
icon: "github"
|
||||
match: /^\.github$/
|
||||
|
||||
Meteor:
|
||||
icon: "meteor"
|
||||
match: /^\.meteor$/
|
||||
|
||||
NodeJS:
|
||||
icon: "node"
|
||||
match: /^node_modules$/
|
||||
colour: "medium-green"
|
||||
|
||||
Package:
|
||||
icon: "package"
|
||||
match: /^\.bundle$/i
|
||||
|
||||
TextMate:
|
||||
icon: "textmate"
|
||||
match: ".tmBundle"
|
||||
|
||||
|
||||
fileIcons:
|
||||
|
||||
ABAP:
|
||||
icon: "abap"
|
||||
scope: "abp"
|
||||
match: ".abap"
|
||||
colour: "medium-orange"
|
||||
|
||||
ActionScript: # Or Flash-related
|
||||
icon: "as"
|
||||
match: [
|
||||
[".swf", "medium-blue"]
|
||||
[".as", "medium-red", scope: /\.(?:flex-config|actionscript(?:\.\d+)?)$/i, alias: /ActionScript\s?3|as3/i]
|
||||
[".jsfl", "auto-yellow"]
|
||||
[".swc", "dark-red"]
|
||||
]
|
||||
108
samples/CSON/ff-sfd.cson
Normal file
108
samples/CSON/ff-sfd.cson
Normal file
@@ -0,0 +1,108 @@
|
||||
name: "Spline Font Database"
|
||||
scopeName: "text.sfd"
|
||||
fileTypes: ["sfd"]
|
||||
firstLineMatch: "^SplineFontDB: [\\d.]+"
|
||||
patterns: [include: "#main"]
|
||||
|
||||
repository:
|
||||
main:
|
||||
patterns: [
|
||||
{include: "#punctuation"}
|
||||
{include: "#private"}
|
||||
{include: "#image"}
|
||||
{include: "#pickleData"}
|
||||
{include: "#sections"}
|
||||
{include: "#copyright"}
|
||||
{include: "#property"}
|
||||
{include: "#control"}
|
||||
{include: "#address"}
|
||||
{include: "#encoding"}
|
||||
{include: "source.fontforge#shared"}
|
||||
{include: "#colour"}
|
||||
]
|
||||
|
||||
punctuation:
|
||||
patterns: [
|
||||
{match: "<|>", name: "punctuation.definition.brackets.angle.sfd"}
|
||||
{match: "[{}]", name: "punctuation.definition.brackets.curly.sfd"}
|
||||
]
|
||||
|
||||
private:
|
||||
name: "meta.section.private.sfd"
|
||||
begin: "^BeginPrivate(?=:)"
|
||||
end: "^EndPrivate\\b"
|
||||
beginCaptures: 0: name: "keyword.control.begin.private.sfd"
|
||||
endCaptures: 0: name: "keyword.control.end.private.sfd"
|
||||
patterns: [
|
||||
{match: "^\\S+", name: "entity.name.private.property.sfd"}
|
||||
{include: "$self"}
|
||||
]
|
||||
|
||||
image:
|
||||
name: "meta.image.sfd"
|
||||
begin: "^(Image)(?=:)(.+)$"
|
||||
end: "^(EndImage)\\b"
|
||||
contentName: "string.unquoted.raw.data.sfd"
|
||||
beginCaptures:
|
||||
1: name: "keyword.control.begin.image.sfd"
|
||||
2: patterns: [include: "$self"]
|
||||
endCaptures:
|
||||
1: name: "keyword.control.end.image.sfd"
|
||||
|
||||
pickleData:
|
||||
name: "meta.pickle-data.sfd"
|
||||
begin: "^(PickledData)(:)\\s*(\")"
|
||||
end: '"'
|
||||
beginCaptures:
|
||||
1: name: "entity.name.property.sfd"
|
||||
2: name: "punctuation.separator.dictionary.key-value.sfd"
|
||||
3: name: "punctuation.definition.string.begin.sfd"
|
||||
endCaptures:
|
||||
0: name: "punctuation.definition.string.end.sfd"
|
||||
patterns: [match: "\\\\.", name: "constant.character.escape.sfd"]
|
||||
|
||||
sections:
|
||||
name: "meta.section.${2:/downcase}.sfd"
|
||||
begin: "^(Start|Begin)([A-Z]\\w+)(?=:)"
|
||||
end: "^(End\\2)\\b"
|
||||
beginCaptures: 0: name: "keyword.control.begin.${2:/downcase}.sfd"
|
||||
endCaptures: 0: name: "keyword.control.end.${2:/downcase}.sfd"
|
||||
patterns: [include: "$self"]
|
||||
|
||||
control:
|
||||
name: "keyword.control.${1:/downcase}.sfd"
|
||||
match: "\\b(Fore|Back|SplineSet|^End\\w+)\\b"
|
||||
|
||||
colour:
|
||||
name: "constant.other.hex.colour.sfd"
|
||||
match: "(#)[A-Fa-f0-9]{3,}|(?<=\\s)[A-Fa-f0-9]{6,8}"
|
||||
captures:
|
||||
1: name: "punctuation.definition.colour.sfd"
|
||||
|
||||
encoding:
|
||||
name: "constant.language.encoding.sfd"
|
||||
match: "(?i)\\b(ISO[-\\w]+)(?<=\\d)(?=\\s|$)"
|
||||
|
||||
# Don't highlight numbers in freeform strings (years/version strings)
|
||||
copyright:
|
||||
name: "meta.${1:/downcase}-string.sfd"
|
||||
begin: "^(Copyright|U?Comments?|\\w+Name)(:)"
|
||||
end: "$"
|
||||
beginCaptures:
|
||||
1: name: "entity.name.property.sfd"
|
||||
2: name: "punctuation.separator.dictionary.key-value.sfd"
|
||||
patterns: [include: "source.fontforge#stringEscapes"]
|
||||
|
||||
# No idea what this is, but it looks distracting without a fix
|
||||
# Assuming it's referring to a memory register or something.
|
||||
address:
|
||||
match: "\\d+[xX][A-Fa-f0-9]+"
|
||||
name: "constant.numeric.hexadecimal.sfd"
|
||||
|
||||
property:
|
||||
match: "^([^:]+)(:)"
|
||||
name: "meta.dictionary.key-value.sfd"
|
||||
captures:
|
||||
1: name: "entity.name.property.sfd"
|
||||
2: name: "punctuation.separator.dictionary.key-value.sfd"
|
||||
|
||||
11
samples/CSON/wercker-status.cson
Normal file
11
samples/CSON/wercker-status.cson
Normal file
@@ -0,0 +1,11 @@
|
||||
'menu': [
|
||||
{
|
||||
'label': 'Packages'
|
||||
'submenu': [
|
||||
'label': 'Wercker Status'
|
||||
'submenu': [
|
||||
{ 'label': 'Check now!', 'command': 'wercker-status:checknow' }
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
60
samples/Julia/julia
Normal file
60
samples/Julia/julia
Normal file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env julia
|
||||
|
||||
# From https://github.com/JoshCheek/language-sampler-for-fullpath/blob/b766dcdbd249ec63516f491390a75315e78cba95/julia/fullpath
|
||||
help_screen = """
|
||||
usage: fullpath *[relative-paths] [-c]
|
||||
|
||||
Prints the fullpath of the paths
|
||||
If no paths are given as args, it will read them from stdin
|
||||
|
||||
If there is only one path, the trailing newline is omitted
|
||||
|
||||
The -c flag will copy the results into your pasteboard
|
||||
"""
|
||||
|
||||
help = false
|
||||
copy = false
|
||||
dir = pwd()
|
||||
paths = []
|
||||
|
||||
for arg = ARGS
|
||||
if arg == "-h" || arg == "--help"
|
||||
help = true
|
||||
elseif arg == "-c" || arg == "--copy"
|
||||
copy = true
|
||||
elseif arg != ""
|
||||
push!(paths, arg)
|
||||
end
|
||||
end
|
||||
|
||||
if help
|
||||
print(help_screen)
|
||||
exit()
|
||||
end
|
||||
|
||||
function notempty(string)
|
||||
return !isempty(string)
|
||||
end
|
||||
|
||||
if length(paths) == 0
|
||||
paths = filter(notempty, map(chomp, readlines()))
|
||||
end
|
||||
|
||||
function print_paths(stream, paths)
|
||||
if length(paths) == 1
|
||||
path = paths[1]
|
||||
print(stream, "$dir/$path")
|
||||
else
|
||||
for path = paths
|
||||
println(stream, "$dir/$path")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if copy
|
||||
read, write, process = readandwrite(`pbcopy`)
|
||||
print_paths(write, paths)
|
||||
close(write)
|
||||
end
|
||||
|
||||
print_paths(STDOUT, paths)
|
||||
47
samples/MQL4/header-sample.mqh
Normal file
47
samples/MQL4/header-sample.mqh
Normal file
@@ -0,0 +1,47 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| header-sample.mqh |
|
||||
//| Copyright 2016, Andrey Osorgin |
|
||||
//+------------------------------------------------------------------+
|
||||
//| The MIT License (MIT) |
|
||||
//| |
|
||||
//| 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. |
|
||||
//| |
|
||||
//| A copy of the MIT License (MIT) is available at |
|
||||
//| https://opensource.org/licenses/MIT |
|
||||
//+------------------------------------------------------------------+
|
||||
#property strict
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
class CSomeObject
|
||||
{
|
||||
protected:
|
||||
int m_someproperty;
|
||||
private:
|
||||
bool SomeFunction() {return true;}
|
||||
public:
|
||||
CSomeObject(void): m_someproperty(0) {}
|
||||
~CSomeObject(void) {}
|
||||
void SetName(int n){m_someproperty=n;}// sets somepropery
|
||||
int GetName(){return(m_someproperty);} // returns someproperty
|
||||
};
|
||||
//+------------------------------------------------------------------+
|
||||
61
samples/MQL4/indicator-sample.mq4
Normal file
61
samples/MQL4/indicator-sample.mq4
Normal file
@@ -0,0 +1,61 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| indicator-sample.mq4 |
|
||||
//| Copyright 2016, Andrey Osorgin |
|
||||
//+------------------------------------------------------------------+
|
||||
//| The MIT License (MIT) |
|
||||
//| |
|
||||
//| 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. |
|
||||
//| |
|
||||
//| A copy of the MIT License (MIT) is available at |
|
||||
//| https://opensource.org/licenses/MIT |
|
||||
//+------------------------------------------------------------------+
|
||||
#property version "1.00"
|
||||
#property strict
|
||||
|
||||
#property indicator_chart_window
|
||||
#property indicator_plots 0
|
||||
//+------------------------------------------------------------------+
|
||||
//| Custom indicator initialization function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnInit(void)
|
||||
{
|
||||
//---
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Bears Power |
|
||||
//+------------------------------------------------------------------+
|
||||
int OnCalculate(const int rates_total,
|
||||
const int prev_calculated,
|
||||
const datetime &time[],
|
||||
const double &open[],
|
||||
const double &high[],
|
||||
const double &low[],
|
||||
const double &close[],
|
||||
const long &tick_volume[],
|
||||
const long &volume[],
|
||||
const int &spread[])
|
||||
{
|
||||
Print("The number of bars on the current chart: ",iBars(Symbol(),Period()));
|
||||
//---
|
||||
return(rates_total);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
51
samples/MQL4/script-sample.mq4
Normal file
51
samples/MQL4/script-sample.mq4
Normal file
@@ -0,0 +1,51 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| script-sample.mq4 |
|
||||
//| Copyright 2016, Andrey Osorgin |
|
||||
//+------------------------------------------------------------------+
|
||||
//| The MIT License (MIT) |
|
||||
//| |
|
||||
//| 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. |
|
||||
//| |
|
||||
//| A copy of the MIT License (MIT) is available at |
|
||||
//| https://opensource.org/licenses/MIT |
|
||||
//+------------------------------------------------------------------+
|
||||
#property version "1.00"
|
||||
#property strict
|
||||
#property script_show_inputs
|
||||
|
||||
input int StopLoss=100; //Stop Loss
|
||||
input int TakeProfit=100; //Take Profit
|
||||
//+------------------------------------------------------------------+
|
||||
//| Script program start function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnStart()
|
||||
{
|
||||
double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
|
||||
Print("Minimum Stop Level=",minstoplevel," points");
|
||||
//---
|
||||
double sl=NormalizeDouble(Bid-StopLoss*Point,Digits);
|
||||
double tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
|
||||
//---
|
||||
int result=OrderSend(Symbol(),OP_BUY,0.01,Ask,1,sl,tp,"Test",0,0,clrNONE);
|
||||
Print("Success? ",result);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
1390
samples/MQL5/Regex.mqh
Normal file
1390
samples/MQL5/Regex.mqh
Normal file
File diff suppressed because it is too large
Load Diff
64
samples/MQL5/indicator-sample.mq5
Normal file
64
samples/MQL5/indicator-sample.mq5
Normal file
@@ -0,0 +1,64 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| indicator-sample.mq5 |
|
||||
//| Copyright 2016, Andrey Osorgin |
|
||||
//+------------------------------------------------------------------+
|
||||
//| The MIT License (MIT) |
|
||||
//| |
|
||||
//| 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. |
|
||||
//| |
|
||||
//| A copy of the MIT License (MIT) is available at |
|
||||
//| https://opensource.org/licenses/MIT |
|
||||
//+------------------------------------------------------------------+
|
||||
#property version "1.00"
|
||||
|
||||
#property indicator_chart_window
|
||||
#property indicator_plots 0
|
||||
//+------------------------------------------------------------------+
|
||||
//| Custom indicator initialization function |
|
||||
//+------------------------------------------------------------------+
|
||||
int OnInit()
|
||||
{
|
||||
//---
|
||||
return(INIT_SUCCEEDED);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Custom indicator iteration function |
|
||||
//+------------------------------------------------------------------+
|
||||
int OnCalculate(const int rates_total,
|
||||
const int prev_calculated,
|
||||
const datetime &time[],
|
||||
const double &open[],
|
||||
const double &high[],
|
||||
const double &low[],
|
||||
const double &close[],
|
||||
const long &tick_volume[],
|
||||
const long &volume[],
|
||||
const int &spread[])
|
||||
{
|
||||
//---
|
||||
int bars=Bars(Symbol(),0);
|
||||
Print("Bars = ",bars,", rates_total = ",rates_total,", prev_calculated = ",prev_calculated);
|
||||
Print("time[0] = ",time[0]," time[rates_total-1] = ",time[rates_total-1]);
|
||||
//--- return value of prev_calculated for next call
|
||||
return(rates_total);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
56
samples/MQL5/script-sample.mq5
Normal file
56
samples/MQL5/script-sample.mq5
Normal file
@@ -0,0 +1,56 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| script-sample.mq5 |
|
||||
//| Copyright 2016, Andrey Osorgin |
|
||||
//+------------------------------------------------------------------+
|
||||
//| The MIT License (MIT) |
|
||||
//| |
|
||||
//| 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. |
|
||||
//| |
|
||||
//| A copy of the MIT License (MIT) is available at |
|
||||
//| https://opensource.org/licenses/MIT |
|
||||
//+------------------------------------------------------------------+
|
||||
#property version "1.00"
|
||||
#property script_show_inputs
|
||||
|
||||
#include <Trade\Trade.mqh>
|
||||
|
||||
input int StopLoss=100; // Stop Loss
|
||||
input int TakeProfit=100; // Take Profit
|
||||
//+------------------------------------------------------------------+
|
||||
//| Script program start function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnStart()
|
||||
{
|
||||
CTrade trade;
|
||||
//---
|
||||
long stoplevel=SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
|
||||
Print("Minimum stop level is: ",stoplevel);
|
||||
double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
|
||||
double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
|
||||
double sl = NormalizeDouble(bid - StopLoss*Point(),Digits());
|
||||
double tp = NormalizeDouble(ask + TakeProfit*Point(),Digits());
|
||||
//---
|
||||
bool result=trade.Buy(0.01,Symbol(),ask,sl,tp,"test");
|
||||
//---
|
||||
Print("Success? ",result);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
134
samples/Makefile/file-icons.make
Normal file
134
samples/Makefile/file-icons.make
Normal file
@@ -0,0 +1,134 @@
|
||||
charmap := charmap.md
|
||||
font-name := file-icons
|
||||
font-folder := dist
|
||||
font-config := icomoon.json
|
||||
icon-size := 34
|
||||
icon-folder := svg
|
||||
repo-name := Alhadis/FileIcons
|
||||
svg := $(wildcard $(icon-folder)/*.svg)
|
||||
last-commit = $(shell git log -1 --oneline --no-abbrev | cut -d' ' -f1)
|
||||
|
||||
|
||||
all: unpack $(font-folder)/$(font-name).woff2 charmap
|
||||
|
||||
|
||||
# Aliases
|
||||
unpack: $(font-folder)/$(font-name).ttf
|
||||
charmap: $(charmap)
|
||||
|
||||
|
||||
# Extract a downloaded IcoMoon folder
|
||||
$(font-folder)/%.ttf: %.zip
|
||||
@rm -rf $(font-folder) tmp $(font-config)
|
||||
@unzip -qd tmp $^
|
||||
@mv tmp/fonts $(font-folder)
|
||||
@mv tmp/selection.json $(font-config)
|
||||
@rm -rf tmp $^
|
||||
@perl -pi -e 's|^( {2})+|"\t" x (length($$&)/2)|ge' $(font-config)
|
||||
@echo "" >> $(font-config) # Ensure trailing newline
|
||||
@echo "Files extracted."
|
||||
|
||||
|
||||
# Generate a WOFF2 file from a TTF
|
||||
%.woff2: %.ttf
|
||||
@[ ! -f $@ ] && { \
|
||||
hash woff2_compress 2>/dev/null || { \
|
||||
echo >&2 "WOFF2 conversion tools not found. Consult the readme file."; \
|
||||
exit 2; \
|
||||
}; \
|
||||
woff2_compress $^ >/dev/null; \
|
||||
echo "WOFF2 file generated."; \
|
||||
};
|
||||
|
||||
|
||||
|
||||
# Clean up SVG source
|
||||
lint: $(svg)
|
||||
@perl -0777 -pi -e '\
|
||||
s/\r\n/\n/g; \
|
||||
s/<g id="icomoon-ignore">\s*<\/g>//gmi; \
|
||||
s/<g\s*>\s*<\/g>//gmi; \
|
||||
s/\s+(id|viewBox|xml:space)="[^"]*"/ /gmi; \
|
||||
s/<!DOCTYPE[^>]*>//gi; \
|
||||
s/<\?xml.*?\?>//gi; \
|
||||
s/<!--.*?-->//gm; \
|
||||
s/ style="enable-background:.*?;"//gmi; \
|
||||
s/"\s+>/">/g; \
|
||||
s/\x20{2,}/ /g; \
|
||||
s/[\t\n]+//gm;' $^
|
||||
|
||||
|
||||
|
||||
# Generate/update character map
|
||||
$(charmap):
|
||||
@./create-map.pl -r=$(repo-name) -i=$(icon-folder) --size=$(icon-size) $(font-folder)/$(font-name).svg $@
|
||||
|
||||
|
||||
|
||||
|
||||
# POSIX systems only: reattach hard links to File-Icons package
|
||||
relink:
|
||||
@$(call need-var,ATOM_FILE_ICONS,ERROR_NO_PKG)
|
||||
@ln -f $(font-folder)/$(font-name).woff2 $(wildcard $(ATOM_FILE_ICONS)/fonts/file-icons-*.woff2)
|
||||
|
||||
|
||||
|
||||
# Force an icon's preview to be refreshed on GitHub
|
||||
cachebust:
|
||||
@$(call need-var,icon,ERROR_NO_ICON)
|
||||
@base="https://cdn.rawgit.com/Alhadis/FileIcons/"; \
|
||||
perl -pi -e 's{$$base\K\w+(?=/svg/$(icon:%.svg=%)\.svg")}{$(last-commit)}ig;' $(charmap)
|
||||
|
||||
|
||||
# Dummy task to improve feedback if `cachebust` is mistyped
|
||||
icon:
|
||||
$(call need-var,,ERROR_UNDEF_ICON)
|
||||
|
||||
|
||||
|
||||
# Reset unstaged changes/additions in object directories
|
||||
clean:
|
||||
@git clean -fd $(font-folder)
|
||||
@git checkout -- $(font-folder) 2>/dev/null || true
|
||||
|
||||
|
||||
# Delete extracted and generated files
|
||||
distclean:
|
||||
@rm -rf $(font-folder)
|
||||
|
||||
|
||||
.PHONY: clean distclean $(charmap) cachebust icon
|
||||
.ONESHELL:
|
||||
|
||||
|
||||
# Error message shown to users attempting to run `make relink` without a link
|
||||
ERROR_NO_PKG := Environment variable ATOM_FILE_ICONS not found. \
|
||||
| \
|
||||
| Try this instead:\
|
||||
| \
|
||||
| \ make relink ATOM_FILE_ICONS=/path/to/your/file-icons/installation |
|
||||
|
||||
|
||||
# Error message shown when running `make cachebust` without an icon
|
||||
ERROR_NO_ICON := No icon specified. Task aborted.| \
|
||||
| Usage: \
|
||||
| \ make icon=file[.svg] cachebust \
|
||||
| \
|
||||
| Examples: \
|
||||
| \ make icon=Manpage cachebust \
|
||||
| \ make icon=APL.svg cachebust |
|
||||
|
||||
|
||||
# Shown if user tries running `make icon NAME cachebust` by mistake
|
||||
ERROR_UNDEF_ICON := No task named \"icon\". \
|
||||
| \
|
||||
| Did you mean this? \
|
||||
| \ make icon=NAME cachebust |
|
||||
|
||||
|
||||
|
||||
# If the given value is empty, die with an error message
|
||||
need = @$(if $(1),,echo $(subst | ,$$'\n',$(2)); exit 2)
|
||||
|
||||
# Like `need`, but uses variable names instead of string values
|
||||
need-var = @$(call need,$($(1)),$($(2)))
|
||||
413
samples/Objective-C/cocoa_monitor.m
Normal file
413
samples/Objective-C/cocoa_monitor.m
Normal file
@@ -0,0 +1,413 @@
|
||||
//========================================================================
|
||||
// GLFW 3.3 OS X - www.glfw.org
|
||||
//------------------------------------------------------------------------
|
||||
// Copyright (c) 2002-2006 Marcus Geelnard
|
||||
// Copyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org>
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//========================================================================
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include <IOKit/graphics/IOGraphicsLib.h>
|
||||
#include <CoreVideo/CVBase.h>
|
||||
#include <CoreVideo/CVDisplayLink.h>
|
||||
#include <ApplicationServices/ApplicationServices.h>
|
||||
|
||||
|
||||
// Get the name of the specified display
|
||||
//
|
||||
static char* getDisplayName(CGDirectDisplayID displayID)
|
||||
{
|
||||
char* name;
|
||||
CFDictionaryRef info, names;
|
||||
CFStringRef value;
|
||||
CFIndex size;
|
||||
|
||||
// NOTE: This uses a deprecated function because Apple has
|
||||
// (as of January 2015) not provided any alternative
|
||||
info = IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID),
|
||||
kIODisplayOnlyPreferredName);
|
||||
names = CFDictionaryGetValue(info, CFSTR(kDisplayProductName));
|
||||
|
||||
if (!names || !CFDictionaryGetValueIfPresent(names, CFSTR("en_US"),
|
||||
(const void**) &value))
|
||||
{
|
||||
// This may happen if a desktop Mac is running headless
|
||||
_glfwInputError(GLFW_PLATFORM_ERROR,
|
||||
"Cocoa: Failed to retrieve display name");
|
||||
|
||||
CFRelease(info);
|
||||
return strdup("Unknown");
|
||||
}
|
||||
|
||||
size = CFStringGetMaximumSizeForEncoding(CFStringGetLength(value),
|
||||
kCFStringEncodingUTF8);
|
||||
name = calloc(size + 1, 1);
|
||||
CFStringGetCString(value, name, size, kCFStringEncodingUTF8);
|
||||
|
||||
CFRelease(info);
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
// Check whether the display mode should be included in enumeration
|
||||
//
|
||||
static GLFWbool modeIsGood(CGDisplayModeRef mode)
|
||||
{
|
||||
uint32_t flags = CGDisplayModeGetIOFlags(mode);
|
||||
if (!(flags & kDisplayModeValidFlag) || !(flags & kDisplayModeSafeFlag))
|
||||
return GLFW_FALSE;
|
||||
|
||||
if (flags & kDisplayModeInterlacedFlag)
|
||||
return GLFW_FALSE;
|
||||
|
||||
if (flags & kDisplayModeStretchedFlag)
|
||||
return GLFW_FALSE;
|
||||
|
||||
CFStringRef format = CGDisplayModeCopyPixelEncoding(mode);
|
||||
if (CFStringCompare(format, CFSTR(IO16BitDirectPixels), 0) &&
|
||||
CFStringCompare(format, CFSTR(IO32BitDirectPixels), 0))
|
||||
{
|
||||
CFRelease(format);
|
||||
return GLFW_FALSE;
|
||||
}
|
||||
|
||||
CFRelease(format);
|
||||
return GLFW_TRUE;
|
||||
}
|
||||
|
||||
// Convert Core Graphics display mode to GLFW video mode
|
||||
//
|
||||
static GLFWvidmode vidmodeFromCGDisplayMode(CGDisplayModeRef mode,
|
||||
CVDisplayLinkRef link)
|
||||
{
|
||||
GLFWvidmode result;
|
||||
result.width = (int) CGDisplayModeGetWidth(mode);
|
||||
result.height = (int) CGDisplayModeGetHeight(mode);
|
||||
result.refreshRate = (int) CGDisplayModeGetRefreshRate(mode);
|
||||
|
||||
if (result.refreshRate == 0)
|
||||
{
|
||||
const CVTime time = CVDisplayLinkGetNominalOutputVideoRefreshPeriod(link);
|
||||
if (!(time.flags & kCVTimeIsIndefinite))
|
||||
result.refreshRate = (int) (time.timeScale / (double) time.timeValue);
|
||||
}
|
||||
|
||||
CFStringRef format = CGDisplayModeCopyPixelEncoding(mode);
|
||||
|
||||
if (CFStringCompare(format, CFSTR(IO16BitDirectPixels), 0) == 0)
|
||||
{
|
||||
result.redBits = 5;
|
||||
result.greenBits = 5;
|
||||
result.blueBits = 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.redBits = 8;
|
||||
result.greenBits = 8;
|
||||
result.blueBits = 8;
|
||||
}
|
||||
|
||||
CFRelease(format);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Starts reservation for display fading
|
||||
//
|
||||
static CGDisplayFadeReservationToken beginFadeReservation(void)
|
||||
{
|
||||
CGDisplayFadeReservationToken token = kCGDisplayFadeReservationInvalidToken;
|
||||
|
||||
if (CGAcquireDisplayFadeReservation(5, &token) == kCGErrorSuccess)
|
||||
CGDisplayFade(token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0.0, 0.0, 0.0, TRUE);
|
||||
|
||||
return token;
|
||||
}
|
||||
|
||||
// Ends reservation for display fading
|
||||
//
|
||||
static void endFadeReservation(CGDisplayFadeReservationToken token)
|
||||
{
|
||||
if (token != kCGDisplayFadeReservationInvalidToken)
|
||||
{
|
||||
CGDisplayFade(token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0.0, 0.0, 0.0, FALSE);
|
||||
CGReleaseDisplayFadeReservation(token);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
////// GLFW internal API //////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Change the current video mode
|
||||
//
|
||||
GLFWbool _glfwSetVideoModeNS(_GLFWmonitor* monitor, const GLFWvidmode* desired)
|
||||
{
|
||||
CFArrayRef modes;
|
||||
CFIndex count, i;
|
||||
CVDisplayLinkRef link;
|
||||
CGDisplayModeRef native = NULL;
|
||||
GLFWvidmode current;
|
||||
const GLFWvidmode* best;
|
||||
|
||||
best = _glfwChooseVideoMode(monitor, desired);
|
||||
_glfwPlatformGetVideoMode(monitor, ¤t);
|
||||
if (_glfwCompareVideoModes(¤t, best) == 0)
|
||||
return GLFW_TRUE;
|
||||
|
||||
CVDisplayLinkCreateWithCGDisplay(monitor->ns.displayID, &link);
|
||||
|
||||
modes = CGDisplayCopyAllDisplayModes(monitor->ns.displayID, NULL);
|
||||
count = CFArrayGetCount(modes);
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
CGDisplayModeRef dm = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i);
|
||||
if (!modeIsGood(dm))
|
||||
continue;
|
||||
|
||||
const GLFWvidmode mode = vidmodeFromCGDisplayMode(dm, link);
|
||||
if (_glfwCompareVideoModes(best, &mode) == 0)
|
||||
{
|
||||
native = dm;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (native)
|
||||
{
|
||||
if (monitor->ns.previousMode == NULL)
|
||||
monitor->ns.previousMode = CGDisplayCopyDisplayMode(monitor->ns.displayID);
|
||||
|
||||
CGDisplayFadeReservationToken token = beginFadeReservation();
|
||||
CGDisplaySetDisplayMode(monitor->ns.displayID, native, NULL);
|
||||
endFadeReservation(token);
|
||||
}
|
||||
|
||||
CFRelease(modes);
|
||||
CVDisplayLinkRelease(link);
|
||||
|
||||
if (!native)
|
||||
{
|
||||
_glfwInputError(GLFW_PLATFORM_ERROR,
|
||||
"Cocoa: Monitor mode list changed");
|
||||
return GLFW_FALSE;
|
||||
}
|
||||
|
||||
return GLFW_TRUE;
|
||||
}
|
||||
|
||||
// Restore the previously saved (original) video mode
|
||||
//
|
||||
void _glfwRestoreVideoModeNS(_GLFWmonitor* monitor)
|
||||
{
|
||||
if (monitor->ns.previousMode)
|
||||
{
|
||||
CGDisplayFadeReservationToken token = beginFadeReservation();
|
||||
CGDisplaySetDisplayMode(monitor->ns.displayID,
|
||||
monitor->ns.previousMode, NULL);
|
||||
endFadeReservation(token);
|
||||
|
||||
CGDisplayModeRelease(monitor->ns.previousMode);
|
||||
monitor->ns.previousMode = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
////// GLFW platform API //////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
_GLFWmonitor** _glfwPlatformGetMonitors(int* count)
|
||||
{
|
||||
uint32_t i, found = 0, displayCount;
|
||||
_GLFWmonitor** monitors;
|
||||
CGDirectDisplayID* displays;
|
||||
|
||||
*count = 0;
|
||||
|
||||
CGGetOnlineDisplayList(0, NULL, &displayCount);
|
||||
displays = calloc(displayCount, sizeof(CGDirectDisplayID));
|
||||
monitors = calloc(displayCount, sizeof(_GLFWmonitor*));
|
||||
|
||||
CGGetOnlineDisplayList(displayCount, displays, &displayCount);
|
||||
|
||||
for (i = 0; i < displayCount; i++)
|
||||
{
|
||||
_GLFWmonitor* monitor;
|
||||
|
||||
if (CGDisplayIsAsleep(displays[i]))
|
||||
continue;
|
||||
|
||||
const CGSize size = CGDisplayScreenSize(displays[i]);
|
||||
char* name = getDisplayName(displays[i]);
|
||||
|
||||
monitor = _glfwAllocMonitor(name, size.width, size.height);
|
||||
monitor->ns.displayID = displays[i];
|
||||
monitor->ns.unitNumber = CGDisplayUnitNumber(displays[i]);
|
||||
|
||||
free(name);
|
||||
|
||||
found++;
|
||||
monitors[found - 1] = monitor;
|
||||
}
|
||||
|
||||
free(displays);
|
||||
|
||||
*count = found;
|
||||
return monitors;
|
||||
}
|
||||
|
||||
GLFWbool _glfwPlatformIsSameMonitor(_GLFWmonitor* first, _GLFWmonitor* second)
|
||||
{
|
||||
// HACK: Compare unit numbers instead of display IDs to work around display
|
||||
// replacement on machines with automatic graphics switching
|
||||
return first->ns.unitNumber == second->ns.unitNumber;
|
||||
}
|
||||
|
||||
void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos)
|
||||
{
|
||||
const CGRect bounds = CGDisplayBounds(monitor->ns.displayID);
|
||||
|
||||
if (xpos)
|
||||
*xpos = (int) bounds.origin.x;
|
||||
if (ypos)
|
||||
*ypos = (int) bounds.origin.y;
|
||||
}
|
||||
|
||||
GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count)
|
||||
{
|
||||
CFArrayRef modes;
|
||||
CFIndex found, i, j;
|
||||
GLFWvidmode* result;
|
||||
CVDisplayLinkRef link;
|
||||
|
||||
*count = 0;
|
||||
|
||||
CVDisplayLinkCreateWithCGDisplay(monitor->ns.displayID, &link);
|
||||
|
||||
modes = CGDisplayCopyAllDisplayModes(monitor->ns.displayID, NULL);
|
||||
found = CFArrayGetCount(modes);
|
||||
result = calloc(found, sizeof(GLFWvidmode));
|
||||
|
||||
for (i = 0; i < found; i++)
|
||||
{
|
||||
CGDisplayModeRef dm = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i);
|
||||
if (!modeIsGood(dm))
|
||||
continue;
|
||||
|
||||
const GLFWvidmode mode = vidmodeFromCGDisplayMode(dm, link);
|
||||
|
||||
for (j = 0; j < *count; j++)
|
||||
{
|
||||
if (_glfwCompareVideoModes(result + j, &mode) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
// Skip duplicate modes
|
||||
if (i < *count)
|
||||
continue;
|
||||
|
||||
(*count)++;
|
||||
result[*count - 1] = mode;
|
||||
}
|
||||
|
||||
CFRelease(modes);
|
||||
CVDisplayLinkRelease(link);
|
||||
return result;
|
||||
}
|
||||
|
||||
void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode *mode)
|
||||
{
|
||||
CGDisplayModeRef displayMode;
|
||||
CVDisplayLinkRef link;
|
||||
|
||||
CVDisplayLinkCreateWithCGDisplay(monitor->ns.displayID, &link);
|
||||
|
||||
displayMode = CGDisplayCopyDisplayMode(monitor->ns.displayID);
|
||||
*mode = vidmodeFromCGDisplayMode(displayMode, link);
|
||||
CGDisplayModeRelease(displayMode);
|
||||
|
||||
CVDisplayLinkRelease(link);
|
||||
}
|
||||
|
||||
void _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor, GLFWgammaramp* ramp)
|
||||
{
|
||||
uint32_t i, size = CGDisplayGammaTableCapacity(monitor->ns.displayID);
|
||||
CGGammaValue* values = calloc(size * 3, sizeof(CGGammaValue));
|
||||
|
||||
CGGetDisplayTransferByTable(monitor->ns.displayID,
|
||||
size,
|
||||
values,
|
||||
values + size,
|
||||
values + size * 2,
|
||||
&size);
|
||||
|
||||
_glfwAllocGammaArrays(ramp, size);
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
ramp->red[i] = (unsigned short) (values[i] * 65535);
|
||||
ramp->green[i] = (unsigned short) (values[i + size] * 65535);
|
||||
ramp->blue[i] = (unsigned short) (values[i + size * 2] * 65535);
|
||||
}
|
||||
|
||||
free(values);
|
||||
}
|
||||
|
||||
void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor, const GLFWgammaramp* ramp)
|
||||
{
|
||||
int i;
|
||||
CGGammaValue* values = calloc(ramp->size * 3, sizeof(CGGammaValue));
|
||||
|
||||
for (i = 0; i < ramp->size; i++)
|
||||
{
|
||||
values[i] = ramp->red[i] / 65535.f;
|
||||
values[i + ramp->size] = ramp->green[i] / 65535.f;
|
||||
values[i + ramp->size * 2] = ramp->blue[i] / 65535.f;
|
||||
}
|
||||
|
||||
CGSetDisplayTransferByTable(monitor->ns.displayID,
|
||||
ramp->size,
|
||||
values,
|
||||
values + ramp->size,
|
||||
values + ramp->size * 2);
|
||||
|
||||
free(values);
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
////// GLFW native API //////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* handle)
|
||||
{
|
||||
_GLFWmonitor* monitor = (_GLFWmonitor*) handle;
|
||||
_GLFW_REQUIRE_INIT_OR_RETURN(kCGNullDirectDisplay);
|
||||
return monitor->ns.displayID;
|
||||
}
|
||||
|
||||
13
samples/Pic/dextroamphetamine.chem
Normal file
13
samples/Pic/dextroamphetamine.chem
Normal file
@@ -0,0 +1,13 @@
|
||||
# Dextroamphetamine molecule
|
||||
.cstart
|
||||
.ps 26
|
||||
size 28
|
||||
R1:
|
||||
ring double 1,2 3,4 5,6
|
||||
bond 60 from R1.V2
|
||||
bond 120
|
||||
A1:
|
||||
front bond down ; CH3
|
||||
bond 60 from A1 ; NH2
|
||||
.ps
|
||||
.cend
|
||||
25
samples/Pic/graph.pic
Normal file
25
samples/Pic/graph.pic
Normal file
@@ -0,0 +1,25 @@
|
||||
.PS
|
||||
ellipse "Pic" "example"
|
||||
arrow
|
||||
box "This is" "a box"
|
||||
arrow right
|
||||
box "Another" "box" dashed
|
||||
move down then right;
|
||||
Thing: ellipse "This is a" "circle-thing"
|
||||
arrow <-> from last box.r to Thing.l
|
||||
move down then left;
|
||||
B: box "Still a box"
|
||||
arrow from Thing.l to B.r
|
||||
sprintf("Width = %g, Height = %g ", B.wid, B.ht) rjust at B.w
|
||||
move down
|
||||
.ps 15
|
||||
define sadness {
|
||||
boxwid = 3;
|
||||
boxht = 1;
|
||||
textht = .5;
|
||||
box "\"I run from my depression by" " " "burying myself in code\""
|
||||
arrow down from last box.s
|
||||
"Me"
|
||||
}
|
||||
sadness();
|
||||
.PE
|
||||
15
samples/Pic/ritalin.chem
Normal file
15
samples/Pic/ritalin.chem
Normal file
@@ -0,0 +1,15 @@
|
||||
.\" RITALIN: Methylphenidate Hydrochloride
|
||||
.cstart
|
||||
.ps 15
|
||||
size 15
|
||||
R1: ring double 1,2 3,4 5,6 pointing up
|
||||
bond 60 length .35 from R1.V2 ; BP
|
||||
bond 120 length .35 from BP
|
||||
R2: ring pointing up put N at 1
|
||||
H above R2
|
||||
bond up length .35 from BP ; BP
|
||||
bond -60 length .35 from BP ; O
|
||||
bond up
|
||||
double bond 60 length .35 from BP ; O
|
||||
.ps 10
|
||||
.cend
|
||||
14
samples/Sublime Text Config/AMPL.sublime-build
Normal file
14
samples/Sublime Text Config/AMPL.sublime-build
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"cmd": ["ampl", "${file_path}/${file_base_name}.run"],
|
||||
"file_regex": "^(?:[(]file )*[ ]*(...*?), line ([0-9]*)",
|
||||
"selector": "source.ampl",
|
||||
|
||||
"osx":
|
||||
{
|
||||
"env":
|
||||
{
|
||||
// "ILOG_LICENSE_FILE": "path/to/access.ilm"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
8
samples/Sublime Text Config/CLIPS.sublime-settings
Normal file
8
samples/Sublime Text Config/CLIPS.sublime-settings
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extensions":
|
||||
[
|
||||
"clp"
|
||||
],
|
||||
"tab_size": 8,
|
||||
"translate_tabs_to_spaces": false
|
||||
}
|
||||
13
samples/Sublime Text Config/Context.sublime-menu
Normal file
13
samples/Sublime Text Config/Context.sublime-menu
Normal file
@@ -0,0 +1,13 @@
|
||||
[
|
||||
{
|
||||
"id" : "nasm",
|
||||
"caption": "NASM Assembly",
|
||||
"children":
|
||||
[
|
||||
{
|
||||
"caption" : "Documentation",
|
||||
"command" : "assembly_doc"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
30
samples/Sublime Text Config/Dart.sublime-commands
Normal file
30
samples/Sublime Text Config/Dart.sublime-commands
Normal file
@@ -0,0 +1,30 @@
|
||||
[
|
||||
{ "caption": "Dart: Polymer: Generate Element", "command": "dart_generate_polymer_element" },
|
||||
{ "caption": "Dart: Polymer: Add Entry Point", "command": "dart_add_polymer_entry_point" },
|
||||
|
||||
{ "caption": "Dart: Check Configuration", "command": "dart_check_config" },
|
||||
{ "caption": "Dart: Browse API Reference", "command": "dart_open_browser", "args": {"url": "https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/home" } },
|
||||
{ "caption": "Dart: Set Default User Browser", "command": "dart_show_user_browsers" },
|
||||
|
||||
{ "caption": "Preferences: Dart Settings - Default", "command": "dart_open_settings", "args": {"kind": "default"} },
|
||||
{ "caption": "Preferences: Dart Settings - User", "command": "dart_open_settings", "args": {"kind": "user"} },
|
||||
{ "caption": "Preferences: Dart Settings - File Type (User)", "command": "dart_open_settings", "args": {"kind": "user", "scope": "file_type"} },
|
||||
|
||||
{ "caption": "Dart: Run", "command": "dart_smart_run" },
|
||||
{ "caption": "Dart: Run (This File)", "command": "dart_smart_run", "args": {"force_update": true} },
|
||||
{ "caption": "Dart: Stop", "command": "dart_smart_run", "args": {"kill_only": true} },
|
||||
|
||||
{ "caption": "Dart: Run In Observatory (This File)", "command": "dart_run_in_observatory" },
|
||||
|
||||
{ "caption": "Dart: Show Output Panel", "command": "show_panel", "args": {"panel": "output.dart.out"} },
|
||||
{ "caption": "Dart: Show Errors Panel", "command": "show_panel", "args": {"panel": "output.dart.errors"} },
|
||||
|
||||
{ "caption": "Dart: Format", "command": "dart_format" },
|
||||
|
||||
{ "caption": "Dart: Generate Documentation", "command": "dart_generate_docs" },
|
||||
{ "caption": "Dart: Serve Documentation", "command": "dart_serve_docs" },
|
||||
|
||||
{ "caption": "Dart: Stagehand", "command": "dart_stagehand_wizard" },
|
||||
|
||||
{ "caption": "Dart: Pub Get", "command": "dart_pub_get" }
|
||||
]
|
||||
40
samples/Sublime Text Config/Dart.sublime-project
Normal file
40
samples/Sublime Text Config/Dart.sublime-project
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"folders":
|
||||
[
|
||||
{
|
||||
"follow_symlinks": true,
|
||||
"path": "."
|
||||
}
|
||||
],
|
||||
|
||||
"SublimeLinter":
|
||||
{
|
||||
"@python": 3.4
|
||||
},
|
||||
|
||||
"build_systems":
|
||||
[
|
||||
{
|
||||
"name": "Run",
|
||||
"shell_cmd": "\"$project_path/scripts/build.sh\"",
|
||||
"windows":
|
||||
{
|
||||
"shell_cmd": "powershell -noninteractive -file \"$project_path\\build.ps1\""
|
||||
},
|
||||
"working_dir": "${project_path}",
|
||||
|
||||
"variants": [
|
||||
{
|
||||
"name": "Dart: Test (All)",
|
||||
"target": "run_dart_tests",
|
||||
},
|
||||
|
||||
{
|
||||
"name": "Dart: Test (This File Only)",
|
||||
"target": "run_dart_tests",
|
||||
"active_file_only": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
[
|
||||
{
|
||||
"button": "button1", "count": 1, "modifiers": ["alt"],
|
||||
"press_command": "drag_select",
|
||||
"command": "robot_go_to_keyword"
|
||||
}
|
||||
]
|
||||
6
samples/Sublime Text Config/Default.sublime-keymap
Normal file
6
samples/Sublime Text Config/Default.sublime-keymap
Normal file
@@ -0,0 +1,6 @@
|
||||
[
|
||||
// Disable auto-pair for single quote
|
||||
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'"}, "context":
|
||||
[{ "key": "selector", "operator": "equal", "operand": "source.rust" }]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
[
|
||||
{"command": "move_to", "args": {"to": "hardeol"}},
|
||||
{"command": "insert", "args": {"characters": "\n"}},
|
||||
{"command": "insert", "args": {"characters": "*"}},
|
||||
{"command": "insert", "args": {"characters": " "}}
|
||||
]
|
||||
5
samples/Sublime Text Config/RunBuild.sublime-macro
Normal file
5
samples/Sublime Text Config/RunBuild.sublime-macro
Normal file
@@ -0,0 +1,5 @@
|
||||
[
|
||||
{
|
||||
"command": "haxe_run_build"
|
||||
}
|
||||
]
|
||||
19
samples/Sublime Text Config/SourcePawn.sublime-build
Normal file
19
samples/Sublime Text Config/SourcePawn.sublime-build
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
// For default sourcemod scripting directory :
|
||||
"cmd": ["<spcomp_path>", "-o$file_path/../plugins/$file_name", "$file"],
|
||||
|
||||
// For custom sourcemod scripting directory :
|
||||
"cmd": ["<spcomp_path>", "-i<include_path>", "-o$file_path/$file_base_name.smx", "$file"],
|
||||
|
||||
// Windows example:
|
||||
"cmd": ["X:/somefolder/spcomp", "-iX:/somefolder", "-o$file_path/$file_base_name.smx", "$file"],
|
||||
"cmd": ["X:/game/csgo/addons/sourcemod/scripting/spcomp", "-o$file_path/../plugins/$file_name", "$file"],
|
||||
|
||||
// Linux or OSX example:
|
||||
"cmd": ["/home/User/sm/spcomp", "-i/home/User/sm/include", "-o$file_path/$file_base_name.smx", "$file"],
|
||||
"cmd": ["/home/User/game/csgo/addons/sourcemod/scripting/spcomp", "-o$file_path/../plugins/$file_name", "$file"],
|
||||
|
||||
|
||||
"file_regex": "(.*)\\((\\d+)\\) :",
|
||||
"selector": "source.sp"
|
||||
}
|
||||
861
samples/Sublime Text Config/Tubnil.sublime-theme
Normal file
861
samples/Sublime Text Config/Tubnil.sublime-theme
Normal file
@@ -0,0 +1,861 @@
|
||||
[
|
||||
// Tubnil theme for Sublime Text 2
|
||||
// https://github.com/nilium/st2-nil-theme
|
||||
//
|
||||
// TABS
|
||||
// ==========================================================
|
||||
// - Tabset
|
||||
// ------------------------------------------------------
|
||||
{
|
||||
"class": "tabset_control",
|
||||
"layer0.texture": "SourcePawn/assets/tabset-bg.png",
|
||||
"layer0.inner_margin": [2, 6],
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [-13, 0, -13,-6], // left, top, right, bottom
|
||||
"tab_overlap": 25,
|
||||
"tab_width": 150,
|
||||
"tab_min_width": 50,
|
||||
"tab_height": 35,
|
||||
"mouse_wheel_switch": false
|
||||
},
|
||||
{
|
||||
"class": "tabset_control",
|
||||
"settings": ["mouse_wheel_switches_tabs"],
|
||||
"mouse_wheel_switch": true
|
||||
},
|
||||
|
||||
// - Tab element
|
||||
// ------------------------------------------------------
|
||||
{
|
||||
"class": "tab_control",
|
||||
"content_margin": [25, 0, 25, 0],
|
||||
"max_margin_trim": 0,
|
||||
"hit_test_level": 0.5,
|
||||
|
||||
// - Inactive tab settings
|
||||
"layer0.texture": "SourcePawn/assets/tab-inactive.png",
|
||||
"layer0.inner_margin": [23, 8],
|
||||
"layer0.opacity": 1.0,
|
||||
|
||||
// - Active tab setting
|
||||
"layer1.texture": "SourcePawn/assets/tab-active.png",
|
||||
"layer1.inner_margin": [23, 8],
|
||||
"layer1.opacity": 0.0,
|
||||
|
||||
// - Hover tab setting
|
||||
"layer2.texture": "SourcePawn/assets/tab-hover.png",
|
||||
"layer2.inner_margin": [23, 8],
|
||||
"layer2.opacity": 0.0
|
||||
},
|
||||
{
|
||||
// - Tab close state
|
||||
"class": "tab_control",
|
||||
"settings": ["show_tab_close_buttons"],
|
||||
"content_margin": [20, 0, 20, 7]
|
||||
},
|
||||
{
|
||||
// - Hover tab state
|
||||
"class": "tab_control",
|
||||
"attributes": ["hover"],
|
||||
"layer2.opacity": 1.0
|
||||
},
|
||||
{
|
||||
// - Active tab state
|
||||
"class": "tab_control",
|
||||
"attributes": ["selected"],
|
||||
"layer0.opacity": 0.0,
|
||||
"layer1.opacity": 1.0,
|
||||
"layer2.opacity": 0.0
|
||||
},
|
||||
{
|
||||
// - Modified tab state
|
||||
"class": "tab_control",
|
||||
//"settings": ["highlight_modified_tabs"],
|
||||
"attributes": ["dirty"],
|
||||
"layer0.texture": "SourcePawn/assets/tab-inactive-modified.png",
|
||||
"layer1.texture": "SourcePawn/assets/tab-active-modified.png",
|
||||
"layer2.texture": "SourcePawn/assets/tab-hover-dirty.png"
|
||||
},
|
||||
|
||||
// - Tab labels
|
||||
// ------------------------------------------------------
|
||||
|
||||
// - Inactive tab label
|
||||
{
|
||||
"class": "tab_label",
|
||||
"fg": [180, 180, 180],
|
||||
"shadow_color": [0, 0, 0, 200],
|
||||
"shadow_offset": [0, 1]
|
||||
},
|
||||
|
||||
// - Active tab label
|
||||
{
|
||||
"class": "tab_label",
|
||||
"parents": [{"class": "tab_control", "attributes": ["selected"]}],
|
||||
"shadow_color": [0, 0, 0, 165],
|
||||
"shadow_offset": [0, 1],
|
||||
"fg": [240, 240, 240, 255]
|
||||
},
|
||||
|
||||
// - Hover tab label
|
||||
{
|
||||
"class": "tab_label",
|
||||
"parents": [{"class": "tab_control", "attributes": ["hover"]}],
|
||||
"shadow_color": [0, 0, 0, 165],
|
||||
"shadow_offset": [0, 1],
|
||||
"fg": [2, 196, 251, 255]
|
||||
},
|
||||
|
||||
// - Dirty Hover tab label
|
||||
{
|
||||
"class": "tab_label",
|
||||
"parents": [{"class": "tab_control", "attributes": ["hover", "dirty"]}],
|
||||
"shadow_color": [0, 0, 0, 165],
|
||||
"shadow_offset": [0, 1],
|
||||
"fg": [253, 113, 1, 255]
|
||||
},
|
||||
|
||||
// - Dirty inactive tab label
|
||||
{
|
||||
"class": "tab_label",
|
||||
"parents": [{"class": "tab_control", "attributes": ["dirty"]}],
|
||||
"settings": ["highlight_modified_tabs"]
|
||||
},
|
||||
|
||||
// - Dirty active tab label
|
||||
{
|
||||
"class": "tab_label",
|
||||
"parents": [{"class": "tab_control", "attributes": ["selected", "dirty"]}],
|
||||
"settings": ["highlight_modified_tabs"]
|
||||
},
|
||||
|
||||
// - Tab buttons
|
||||
// ------------------------------------------------------
|
||||
|
||||
// - Tab button
|
||||
{
|
||||
"class": "tab_close_button",
|
||||
"content_margin": [0, 0],
|
||||
|
||||
// - Tab close default settings
|
||||
"layer1.texture": "SourcePawn/assets/tab-button-close.png",
|
||||
"layer1.opacity": 0.0, // hide by default
|
||||
"layer1.inner_margin": 0.0,
|
||||
|
||||
// - Tab close hover settings
|
||||
"layer0.texture": "SourcePawn/assets/tab-button-close-hover.png",
|
||||
"layer0.opacity": 0.0
|
||||
},
|
||||
{
|
||||
// - Tab button size
|
||||
"class": "tab_close_button",
|
||||
"settings": ["show_tab_close_buttons"],
|
||||
"content_margin": [8, 8]
|
||||
},
|
||||
{
|
||||
"class": "tab_close_button",
|
||||
"parents": [{"class": "tab_control", "attributes": ["dirty"]}],
|
||||
"layer1.texture": "SourcePawn/assets/tab-button-close-dirty.png"
|
||||
},
|
||||
{
|
||||
// - Tab close hover action
|
||||
"class": "tab_close_button",
|
||||
"parents": [{"class": "tab_control", "attributes": ["hover"]}],
|
||||
"layer1.opacity": 0.0,
|
||||
"layer0.opacity": 1.0
|
||||
},
|
||||
{
|
||||
// - Tab close press action
|
||||
"class": "tab_close_button",
|
||||
"attributes": ["hover"],
|
||||
"layer1.opacity": 0.4,
|
||||
"layer0.opacity": 1.0
|
||||
},
|
||||
{
|
||||
// - Tab close press action
|
||||
"class": "tab_close_button",
|
||||
"attributes": ["pressed"],
|
||||
"layer1.opacity": 1.0,
|
||||
"layer0.opacity": 0.0
|
||||
},
|
||||
|
||||
// FOLD BUTTONS
|
||||
// ==========================================================
|
||||
|
||||
{
|
||||
"class": "fold_button_control",
|
||||
"layer0.texture": "SourcePawn/assets/arrow-right.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"layer0.inner_margin": 0,
|
||||
"layer1.texture": "SourcePawn/assets/arrow-right-hover.png",
|
||||
"layer1.opacity": 0.0,
|
||||
"layer1.inner_margin": 0,
|
||||
"content_margin": [9, 7, 8, 6]
|
||||
},
|
||||
{
|
||||
"class": "fold_button_control",
|
||||
"attributes": ["hover"],
|
||||
"layer0.opacity": 0.0,
|
||||
"layer1.opacity": 0.75
|
||||
},
|
||||
{
|
||||
"class": "fold_button_control",
|
||||
"attributes": ["pressed"],
|
||||
"layer0.opacity": 0.0,
|
||||
"layer1.opacity": 1.0
|
||||
},
|
||||
{
|
||||
"class": "fold_button_control",
|
||||
"attributes": ["expanded"],
|
||||
"layer0.texture": "SourcePawn/assets/arrow-down.png",
|
||||
"layer1.texture": "SourcePawn/assets/arrow-down-hover.png"
|
||||
},
|
||||
|
||||
// SCROLLBARS (overlay scrollbars from Default theme)
|
||||
// ==========================================================
|
||||
{
|
||||
"class": "scroll_bar_control",
|
||||
"layer0.texture": "SourcePawn/assets/scrollbar/well-vertical.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"layer0.inner_margin": [1, 1],
|
||||
"blur": false
|
||||
},
|
||||
{
|
||||
"class": "scroll_bar_control",
|
||||
"attributes": ["horizontal"],
|
||||
"layer0.texture": "SourcePawn/assets/scrollbar/well-horizontal.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"layer0.inner_margin": [1, 1],
|
||||
"blur": false
|
||||
},
|
||||
{
|
||||
"class": "scroll_corner_control",
|
||||
"layer0.texture": "SourcePawn/assets/scrollbar/well-corner.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"layer0.inner_margin": [1, 1]
|
||||
},
|
||||
{
|
||||
"class": "puck_control",
|
||||
"layer0.texture": "SourcePawn/assets/scrollbar/bar-vertical.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"layer0.inner_margin": [3, 3],
|
||||
"content_margin": [6, 6],
|
||||
"blur": false
|
||||
},
|
||||
{
|
||||
"class": "puck_control",
|
||||
"attributes": ["horizontal"],
|
||||
"layer0.texture": "SourcePawn/assets/scrollbar/bar-horizontal.png"
|
||||
},
|
||||
{
|
||||
"class": "scroll_area_control",
|
||||
"settings": ["overlay_scroll_bars"],
|
||||
"overlay": true
|
||||
},
|
||||
{
|
||||
"class": "scroll_area_control",
|
||||
"settings": ["!overlay_scroll_bars"],
|
||||
"overlay": false
|
||||
},
|
||||
{
|
||||
"class": "scroll_bar_control",
|
||||
"settings": ["overlay_scroll_bars"],
|
||||
"layer0.texture": "SourcePawn/assets/overlay/overlay_bar_vertical.png",
|
||||
"layer0.inner_margin": [0, 5],
|
||||
"blur": true
|
||||
},
|
||||
{
|
||||
"class": "scroll_bar_control",
|
||||
"settings": ["overlay_scroll_bars"],
|
||||
"attributes": ["horizontal"],
|
||||
"layer0.texture": "SourcePawn/assets/overlay/overlay_bar_horizontal.png",
|
||||
"layer0.inner_margin": [5, 0],
|
||||
"blur": true
|
||||
},
|
||||
{
|
||||
"class": "puck_control",
|
||||
"settings": ["overlay_scroll_bars"],
|
||||
"layer0.texture": "SourcePawn/assets/overlay/overlay_thumb_vertical.png",
|
||||
"layer0.inner_margin": [0, 5],
|
||||
"content_margin": [5, 20],
|
||||
"blur": true
|
||||
},
|
||||
{
|
||||
"class": "puck_control",
|
||||
"settings": ["overlay_scroll_bars"],
|
||||
"attributes": ["horizontal"],
|
||||
"layer0.texture": "SourcePawn/assets/overlay/overlay_thumb_horizontal.png",
|
||||
"layer0.inner_margin": [5, 0],
|
||||
"content_margin": [20, 5],
|
||||
"blur": true
|
||||
},
|
||||
{
|
||||
"class": "puck_control",
|
||||
"settings": ["overlay_scroll_bars"],
|
||||
"attributes": ["dark"],
|
||||
"layer0.texture": "SourcePawn/assets/overlay/overlay_dark_thumb_vertical.png"
|
||||
},
|
||||
{
|
||||
"class": "puck_control",
|
||||
"settings": ["overlay_scroll_bars"],
|
||||
"attributes": ["horizontal", "dark"],
|
||||
"layer0.texture": "SourcePawn/assets/overlay/overlay_dark_thumb_horizontal.png"
|
||||
},
|
||||
|
||||
// EMPTY WINDOW BACKGROUND
|
||||
// ==========================================================
|
||||
{
|
||||
"class": "sheet_container_control",
|
||||
"layer0.tint": [16, 16, 16],
|
||||
"layer0.opacity": 1.0
|
||||
},
|
||||
|
||||
// GRID LAYOUT
|
||||
// ==========================================================
|
||||
{
|
||||
"class": "grid_layout_control",
|
||||
"border_size": 1,
|
||||
"border_color": [32, 32, 32]
|
||||
},
|
||||
|
||||
// MINI MAP
|
||||
// ==========================================================
|
||||
{
|
||||
"class": "minimap_control",
|
||||
"viewport_color": [185, 185, 185, 50]
|
||||
},
|
||||
|
||||
// LABELS
|
||||
// ==========================================================
|
||||
// - General labels
|
||||
{
|
||||
"class": "label_control",
|
||||
"color": [230, 230, 230]
|
||||
},
|
||||
// - Text field labels
|
||||
{
|
||||
"class": "label_control",
|
||||
"parents": [{"class": "panel_control"}],
|
||||
"shadow_color": [0, 0, 0],
|
||||
"shadow_offset": [0, 1]
|
||||
},
|
||||
// - Button labels
|
||||
{
|
||||
"class": "label_control",
|
||||
"parents": [{"class": "button_control"}],
|
||||
"color": [230, 230, 230],
|
||||
"shadow_color": [0, 0, 0],
|
||||
"shadow_offset": [0, 1]
|
||||
},
|
||||
|
||||
// TOOLTIP
|
||||
// ==========================================================
|
||||
// - Tooltip container
|
||||
{
|
||||
"class": "tool_tip_control",
|
||||
"layer0.texture": "SourcePawn/assets/tooltip.png",
|
||||
"layer0.inner_margin": [4, 4],
|
||||
"layer0.opacity": 1,
|
||||
"content_margin": [6, 4]
|
||||
},
|
||||
// - Tooltip content
|
||||
{
|
||||
"class": "tool_tip_label_control",
|
||||
"color": [160, 160, 160],
|
||||
"shadow_offset": [0, 1],
|
||||
"shadow_color": [0, 0, 0, 255]
|
||||
},
|
||||
|
||||
// STATUS BAR
|
||||
// ==========================================================
|
||||
// - Status bar container
|
||||
{
|
||||
"class": "status_bar",
|
||||
"layer0.texture": "SourcePawn/assets/status-bar-bg.png",
|
||||
"layer0.opacity": 1,
|
||||
"layer0.inner_margin": [2, 2],
|
||||
"content_margin": [6, 5, 6, 5]
|
||||
},
|
||||
{
|
||||
"class": "status_button",
|
||||
"min_size": [100, 0]
|
||||
},
|
||||
|
||||
// - Status bar label
|
||||
{
|
||||
"class": "label_control",
|
||||
"parents": [{"class": "status_bar"}],
|
||||
"font.size": 10,
|
||||
"color": [160, 160, 160],
|
||||
"shadow_color": [0, 0, 0],
|
||||
"shadow_offset": [0, 1]
|
||||
},
|
||||
|
||||
// SIDEBAR
|
||||
// ==========================================================
|
||||
// - Sidebar container (border)
|
||||
{
|
||||
"class": "sidebar_container",
|
||||
"layer0.tint": [150, 150, 150],
|
||||
"layer0.opacity": 0.5,
|
||||
"layer0.draw_center": false,
|
||||
"layer0.inner_margin": [0, 0, 1, 0],
|
||||
"content_margin": [0, 0, 1, 0]
|
||||
},
|
||||
// - Sidebar tree (bg)
|
||||
{
|
||||
"class": "sidebar_tree",
|
||||
"row_padding": [8, 3],
|
||||
"indent": 15,
|
||||
"indent_offset": 13,
|
||||
"indent_top_level": false,
|
||||
"layer0.tint": [19, 20, 21], // darker gray
|
||||
"layer0.opacity": 1.0,
|
||||
"dark_content": true
|
||||
},
|
||||
// - Sidebar rows
|
||||
{
|
||||
"class": "tree_row",
|
||||
"layer0.texture": "SourcePawn/assets/row-active.png",
|
||||
"layer0.opacity": 0.0,
|
||||
"layer0.inner_margin": [8, 3],
|
||||
"layer1.opacity": 0.0,
|
||||
"layer1.inner_margin": [8, 3]
|
||||
},
|
||||
// - Sidebar row selected
|
||||
{
|
||||
"class": "tree_row",
|
||||
"attributes": ["selected"],
|
||||
"layer0.opacity": 1.0
|
||||
},
|
||||
// - Sidebar row dirty
|
||||
{
|
||||
"class": "tree_row",
|
||||
"attributes": ["dirty"],
|
||||
"layer0.texture": "SourcePawn/assets/row-inactive-modified.png",
|
||||
"layer0.opacity": 1.0
|
||||
},
|
||||
// - Sidebar row selected dirty
|
||||
{
|
||||
"class": "tree_row",
|
||||
"attributes": ["selected", "dirty"],
|
||||
"layer0.texture": "SourcePawn/assets/row-active-modified.png",
|
||||
"layer0.opacity": 1.0
|
||||
},
|
||||
// - Sidebar heading
|
||||
{
|
||||
"class": "sidebar_heading",
|
||||
"color": [2, 196, 251],
|
||||
"font.bold": true,
|
||||
"shadow_color": [0, 0, 0],
|
||||
"shadow_offset": [0, 1]
|
||||
},
|
||||
{
|
||||
"class": "sidebar_heading",
|
||||
"parents": [{"class": "tree_row", "attributes": ["selected"]}],
|
||||
"color": [180, 180, 180]
|
||||
},
|
||||
// - Sidebar entry label
|
||||
{
|
||||
"class": "sidebar_label",
|
||||
"color": [200, 200, 200],
|
||||
"shadow_color": [0, 0, 0],
|
||||
"shadow_offset": [0, 1]
|
||||
},
|
||||
{
|
||||
"class": "sidebar_label",
|
||||
"parents": [{"class": "tree_row", "attributes": ["expandable"]}],
|
||||
"settings": ["bold_folder_labels"],
|
||||
"font.bold": true
|
||||
},
|
||||
{ // Sidebar selected entry label
|
||||
"class": "sidebar_label",
|
||||
"parents": [{"class": "tree_row", "attributes": ["selected"]}],
|
||||
"color": [240, 240, 240],
|
||||
"shadow_color": [0, 0, 0],
|
||||
"shadow_offset": [0, 1]
|
||||
},
|
||||
{ // Sidebar Hover entry label
|
||||
"class": "sidebar_label",
|
||||
"parents": [{"class": "tree_row", "attributes": ["hover"]}],
|
||||
"color": [2, 196, 251],
|
||||
"shadow_color": [0, 0, 0],
|
||||
"shadow_offset": [0, 1]
|
||||
},
|
||||
{ // Sidebar Hover entry label
|
||||
"class": "sidebar_label",
|
||||
"parents": [{"class": "tree_row", "attributes": ["dirty"]}],
|
||||
"color": [253, 113, 1],
|
||||
"shadow_color": [0, 0, 0],
|
||||
"shadow_offset": [0, 1]
|
||||
},
|
||||
|
||||
// - Sidebar open files close/dirty
|
||||
{
|
||||
"class": "close_button",
|
||||
"layer0.texture": "SourcePawn/assets/tab-button-close-hover.png",
|
||||
"layer0.opacity": 0.5,
|
||||
"layer0.inner_margin": 4,
|
||||
"layer1.opacity": 0.0,
|
||||
"layer1.texture": "SourcePawn/assets/tab-button-close.png",
|
||||
"layer1.inner_margin": 4,
|
||||
"content_margin": [8, 8]
|
||||
},
|
||||
{
|
||||
"class": "close_button",
|
||||
"attributes": ["dirty"],
|
||||
"layer0.texture": "SourcePawn/assets/tab-button-dirty.png",
|
||||
"layer0.opacity": 0.5
|
||||
},
|
||||
{
|
||||
"class": "close_button",
|
||||
"attributes": ["hover"],
|
||||
"layer0.texture": "SourcePawn/assets/tab-button-close-hover.png",
|
||||
"layer1.opacity": 0.5,
|
||||
"layer1.texture": "SourcePawn/assets/tab-button-close.png"
|
||||
},
|
||||
{
|
||||
"class": "close_button",
|
||||
"attributes": ["hover", "dirty"],
|
||||
"layer1.opacity": 0.5,
|
||||
"layer1.texture": "SourcePawn/assets/tab-button-close-dirty.png"
|
||||
},
|
||||
{
|
||||
"class": "close_button",
|
||||
"attributes": ["pressed"],
|
||||
"layer1.opacity": 1.0,
|
||||
"layer1.texture": "SourcePawn/assets/tab-button-close.png"
|
||||
},
|
||||
{
|
||||
"class": "close_button",
|
||||
"attributes": ["pressed", "dirty"],
|
||||
"layer1.opacity": 1.0,
|
||||
"layer1.texture": "SourcePawn/assets/tab-button-close-dirty.png"
|
||||
},
|
||||
|
||||
// - Sidebar FOLDERS closed
|
||||
{
|
||||
"class": "disclosure_button_control",
|
||||
"content_margin": [9, 7, 8, 6],
|
||||
"layer0.texture": "SourcePawn/assets/folder/group-closed.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"layer0.inner_margin": 0
|
||||
},
|
||||
{
|
||||
"class": "disclosure_button_control",
|
||||
"parents": [{"class": "tree_row", "attributes": ["hover"]}],
|
||||
"layer0.texture": "SourcePawn/assets/folder/group-closed-hover.png"
|
||||
},
|
||||
{
|
||||
"class": "disclosure_button_control",
|
||||
"parents": [{"class": "tree_row", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/folder/group-closed-selected.png"
|
||||
},
|
||||
// - Sidebar Folders open
|
||||
{
|
||||
"class": "disclosure_button_control",
|
||||
"attributes": ["expanded"],
|
||||
"layer0.texture": "SourcePawn/assets/folder/group-open.png"
|
||||
},
|
||||
{
|
||||
"class": "disclosure_button_control",
|
||||
"attributes": ["expanded"],
|
||||
"parents": [{"class": "tree_row", "attributes": ["hover"]}],
|
||||
"layer0.texture": "SourcePawn/assets/folder/group-open-hover.png"
|
||||
},
|
||||
{
|
||||
"class": "disclosure_button_control",
|
||||
"attributes": ["expanded"],
|
||||
"parents": [{"class": "tree_row", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/folder/group-open-selected.png"
|
||||
},
|
||||
|
||||
// STANDARD TEXT BUTTONS
|
||||
// =========================================================
|
||||
// - Standard buttons (used for Find / Replace panel)
|
||||
{
|
||||
"class": "button_control",
|
||||
"content_margin": [6, 5, 6, 6],
|
||||
"min_size": [75, 0],
|
||||
|
||||
// Default button state
|
||||
"layer0.texture": "SourcePawn/assets/btn-large.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"layer0.inner_margin": [6, 6],
|
||||
|
||||
// Pressed button setup
|
||||
"layer1.texture": "SourcePawn/assets/btn-large-active.png",
|
||||
"layer1.opacity": 0.0,
|
||||
"layer1.inner_margin": [6, 6]
|
||||
},
|
||||
{
|
||||
// Pressed button state
|
||||
"class": "button_control",
|
||||
"attributes": ["pressed"],
|
||||
"layer1.opacity": 1.0,
|
||||
"content_margin": [6, 6, 6, 6]
|
||||
},
|
||||
|
||||
// TEXT INPUT FIELD
|
||||
// =========================================================
|
||||
|
||||
// - Text input field item
|
||||
{
|
||||
"class": "text_line_control",
|
||||
"layer0.texture": "SourcePawn/assets/text-field.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"layer0.inner_margin": [10, 10, 10, 10],
|
||||
"content_margin": [5, 5, 5, 5]
|
||||
},
|
||||
|
||||
// PANEL BACKGROUNDS
|
||||
// =========================================================
|
||||
// - Bottom panel background
|
||||
{
|
||||
"class": "panel_control",
|
||||
"layer0.texture": "SourcePawn/assets/panel-bg.png",
|
||||
"layer0.inner_margin": [4, 4, 4, 4],
|
||||
"layer0.opacity": 1.0
|
||||
},
|
||||
|
||||
// - Quick panel background
|
||||
{
|
||||
"class": "overlay_control",
|
||||
"layer0.texture": "SourcePawn/assets/overlay-bg.png",
|
||||
"layer0.inner_margin": [10, 5, 10, 20], // left, top, right, bottom
|
||||
"layer0.opacity": 1.0,
|
||||
"layer1.opacity": 0, // HIDDEN
|
||||
"content_margin": [11, 8, 11, 17]
|
||||
},
|
||||
|
||||
// QUICK PANEL
|
||||
// =========================================================
|
||||
{
|
||||
"class": "quick_panel",
|
||||
"row_padding": [4, 3],
|
||||
"layer0.tint": [45, 45, 45],
|
||||
"layer0.opacity": 1,
|
||||
"dark_content": true
|
||||
},
|
||||
{
|
||||
"class": "quick_panel_row",
|
||||
"layer0.texture": "SourcePawn/assets/qp-row.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"layer0.inner_margin": [4, 4, 4, 4],
|
||||
"layer1.draw_center": true
|
||||
},
|
||||
{
|
||||
"class": "quick_panel_row",
|
||||
"attributes": ["selected"],
|
||||
"layer0.texture": "SourcePawn/assets/qp-row-selected.png"
|
||||
},
|
||||
{
|
||||
"class": "quick_panel_label",
|
||||
"fg": [190, 190, 190, 255],
|
||||
"match_fg": [166, 229, 255, 255],
|
||||
"bg": [71, 71, 71, 255],
|
||||
"selected_fg": [220, 220, 220, 255],
|
||||
"selected_match_fg": [2, 196, 251, 255],
|
||||
"selected_bg": [134, 134, 134, 255]
|
||||
},
|
||||
{
|
||||
"class": "quick_panel_path_label",
|
||||
"fg": [100, 100, 100, 255],
|
||||
"match_fg": [166, 229, 255, 255],
|
||||
"bg": [41, 41, 41, 255],
|
||||
"selected_fg": [120, 120, 120, 255],
|
||||
"selected_match_fg": [2, 196, 251, 255],
|
||||
"selected_bg": [24, 24, 24, 255]
|
||||
},
|
||||
{
|
||||
"class": "quick_panel_score_label",
|
||||
"fg": [90, 90, 90, 255],
|
||||
"bg": [41, 41, 41, 255],
|
||||
"selected_fg": [114, 114, 114, 255],
|
||||
"selected_bg": [24, 24, 24, 255]
|
||||
},
|
||||
|
||||
// MINI QUICK PANEL
|
||||
// =========================================================
|
||||
{
|
||||
"class": "mini_quick_panel_row",
|
||||
"layer0.texture": "SourcePawn/assets/qp-row.png",
|
||||
"layer0.inner_margin": [4, 4, 4, 4],
|
||||
"layer0.opacity": 1.0
|
||||
},
|
||||
{
|
||||
"class": "mini_quick_panel_row",
|
||||
"attributes": ["selected"],
|
||||
"layer0.texture": "SourcePawn/assets/qp-row-selected.png"
|
||||
},
|
||||
|
||||
// CODE COMPLETION DROPDOWN
|
||||
// =========================================================
|
||||
{
|
||||
"class": "popup_control",
|
||||
"content_margin": [0, 0]
|
||||
},
|
||||
{
|
||||
"class": "auto_complete",
|
||||
"row_padding": [2, 2],
|
||||
"layer0.tint": [30, 30, 30],
|
||||
"layer0.opacity": 1.0,
|
||||
"dark_content": true
|
||||
},
|
||||
{
|
||||
"class": "auto_complete_label",
|
||||
"fg": [140, 140, 140],
|
||||
"match_fg": [255, 255, 255],
|
||||
"bg": [26, 26, 26],
|
||||
"selected_fg": [255, 255, 255],
|
||||
"selected_match_fg": [255, 255, 255],
|
||||
"selected_bg": [86, 86, 86]
|
||||
},
|
||||
{
|
||||
"class": "table_row",
|
||||
"layer0.tint": [45, 45, 45],
|
||||
"layer0.opacity": 0.0,
|
||||
"layer0.inner_margin": [1, 1]
|
||||
},
|
||||
{
|
||||
"class": "table_row",
|
||||
"attributes": ["selected"],
|
||||
"layer0.opacity": 1.0
|
||||
},
|
||||
|
||||
// BOTTOM PANEL BUTTONS
|
||||
// ==========================================================
|
||||
{
|
||||
"class": "icon_button_control",
|
||||
"content_margin": [4, 4]
|
||||
},
|
||||
{
|
||||
"class": "icon_button_control",
|
||||
"attributes": ["pressed"]
|
||||
},
|
||||
// - Regex search button
|
||||
{
|
||||
"class": "icon_regex",
|
||||
"layer0.texture": "SourcePawn/assets/icons/regex-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_regex",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/regex-on.png"
|
||||
},
|
||||
// - Case sensitive search button
|
||||
{
|
||||
"class": "icon_case",
|
||||
"layer0.texture": "SourcePawn/assets/icons/case-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_case",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/case-on.png"
|
||||
},
|
||||
// - Match whole word search button
|
||||
{
|
||||
"class": "icon_whole_word",
|
||||
"layer0.texture": "SourcePawn/assets/icons/whole-word-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_whole_word",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/whole-word-on.png"
|
||||
},
|
||||
// - Reverse search direction button
|
||||
{
|
||||
"class": "icon_reverse",
|
||||
"layer0.texture": "SourcePawn/assets/icons/reverse-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_reverse",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/reverse-on.png"
|
||||
},
|
||||
// - Search wrap button
|
||||
{
|
||||
"class": "icon_wrap",
|
||||
"layer0.texture": "SourcePawn/assets/icons/wrap-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_wrap",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/wrap-on.png"
|
||||
},
|
||||
// - Search in selection button
|
||||
{
|
||||
"class": "icon_in_selection",
|
||||
"layer0.texture": "SourcePawn/assets/icons/selection-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_in_selection",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/selection-on.png"
|
||||
},
|
||||
// - Preserve case button
|
||||
{
|
||||
"class": "icon_preserve_case",
|
||||
"layer0.texture": "SourcePawn/assets/icons/preserve-case-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_preserve_case",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/preserve-case-on.png"
|
||||
},
|
||||
// - Highlight results button
|
||||
{
|
||||
"class": "icon_highlight",
|
||||
"layer0.texture": "SourcePawn/assets/icons/highlight-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_highlight",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/highlight-on.png"
|
||||
},
|
||||
|
||||
// BOTTOM PANEL ICONS (EXTENDED: FIND IN FILES)
|
||||
// =========================================================
|
||||
|
||||
// - Show search context button
|
||||
{
|
||||
"class": "icon_context",
|
||||
"layer0.texture": "SourcePawn/assets/icons/context-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_context",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/context-on.png"
|
||||
},
|
||||
// - Use search buffer
|
||||
{
|
||||
"class": "icon_use_buffer",
|
||||
"layer0.texture": "SourcePawn/assets/icons/buffer-off.png",
|
||||
"layer0.opacity": 1.0,
|
||||
"content_margin": [9, 10]
|
||||
},
|
||||
{
|
||||
"class": "icon_use_buffer",
|
||||
"parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
|
||||
"layer0.texture": "SourcePawn/assets/icons/buffer-on.png"
|
||||
}
|
||||
|
||||
]
|
||||
136
samples/Sublime Text Config/jade.sublime-completions
Normal file
136
samples/Sublime Text Config/jade.sublime-completions
Normal file
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"scope": "entity.name.tag.jade",
|
||||
"completions":
|
||||
[
|
||||
"a",// Defines a hyperlink
|
||||
"abbr",// Defines an abbreviation
|
||||
"acronym",// Not supported in HTML5. Use <abbr> instead.
|
||||
//Defines an acronym
|
||||
"address",// Defines contact information for the author/owner of a document
|
||||
"applet",// Not supported in HTML5. Use <object> instead.
|
||||
//Defines an embedded applet
|
||||
"area",// Defines an area inside an image-map
|
||||
"article",// Defines an article
|
||||
"aside",// Defines content aside from the page content
|
||||
"audio",// Defines sound content
|
||||
"b",// Defines bold text
|
||||
"base",// Specifies the base URL/target for all relative URLs in a document
|
||||
"basefont",// Not supported in HTML5. Use CSS instead.
|
||||
//Specifies a default color, size, and font for all text in a document
|
||||
"bdi",// Isolates a part of text that might be formatted in a different direction from other text outside it
|
||||
"bdo",// Overrides the current text direction
|
||||
"big",// Not supported in HTML5. Use CSS instead.
|
||||
//Defines big text
|
||||
"blockquote",// Defines a section that is quoted from another source
|
||||
"body",// Defines the document's body
|
||||
"br",// Defines a single line break
|
||||
"button",// Defines a clickable button
|
||||
"canvas",// Used to draw graphics, on the fly, via scripting (usually JavaScript)
|
||||
"caption",// Defines a table caption
|
||||
"center",// Not supported in HTML5. Use CSS instead.
|
||||
//Defines centered text
|
||||
"cite",// Defines the title of a work
|
||||
"code",// Defines a piece of computer code
|
||||
"col",// Specifies column properties for each column within a <colgroup> element
|
||||
"colgroup",// Specifies a group of one or more columns in a table for formatting
|
||||
"command",// Defines a command button that a user can invoke
|
||||
"datalist",// Specifies a list of pre-defined options for input controls
|
||||
"dd",// Defines a description/value of a term in a description list
|
||||
"del",// Defines text that has been deleted from a document
|
||||
"details",// Defines additional details that the user can view or hide
|
||||
"dfn",// Defines a definition term
|
||||
"dialog",// Defines a dialog box or window
|
||||
"dir",// Not supported in HTML5. Use <ul> instead.
|
||||
//Defines a directory list
|
||||
"div",// Defines a section in a document
|
||||
"dl",// Defines a description list
|
||||
"dt",// Defines a term/name in a description list
|
||||
"em",// Defines emphasized text
|
||||
"embed",// Defines a container for an external (non-HTML) application
|
||||
"fieldset",// Groups related elements in a form
|
||||
"figcaption",// Defines a caption for a <figure> element
|
||||
"figure",// Specifies self-contained content
|
||||
"font",// Not supported in HTML5. Use CSS instead.
|
||||
//Defines font, color, and size for text
|
||||
"footer",// Defines a footer for a document or section
|
||||
"form",// Defines an HTML form for user input
|
||||
"frame",// Not supported in HTML5.
|
||||
//Defines a window (a frame) in a frameset
|
||||
"frameset",// Not supported in HTML5.
|
||||
//Defines a set of frames
|
||||
"h1",// to <h6> Defines HTML headings
|
||||
"head",// Defines information about the document
|
||||
"header",// Defines a header for a document or section
|
||||
"hgroup",// Groups heading elements
|
||||
"hr",// Defines a thematic change in the content
|
||||
"html",// Defines the root of an HTML document
|
||||
"i",// Defines a part of text in an alternate voice or mood
|
||||
"iframe",// Defines an inline frame
|
||||
"img",// Defines an image
|
||||
"input",// Defines an input control
|
||||
"ins",// Defines a text that has been inserted into a document
|
||||
"kbd",// Defines keyboard input
|
||||
"keygen",// Defines a key-pair generator field (for forms)
|
||||
"label",// Defines a label for an <input> element
|
||||
"legend",// Defines a caption for a <fieldset> element
|
||||
"li",// Defines a list item
|
||||
"link",// Defines the relationship between a document and an external resource (most used to link to style sheets)
|
||||
"main",// Specifies the main content of a document
|
||||
"map",// Defines a client-side image-map
|
||||
"mark",// Defines marked/highlighted text
|
||||
"menu",// Defines a list/menu of commands
|
||||
"meta",// Defines metadata about an HTML document
|
||||
"meter",// Defines a scalar measurement within a known range (a gauge)
|
||||
"nav",// Defines navigation links
|
||||
"noframes",// Not supported in HTML5.
|
||||
//Defines an alternate content for users that do not support frames
|
||||
"noscript",// Defines an alternate content for users that do not support client-side scripts
|
||||
"object",// Defines an embedded object
|
||||
"ol",// Defines an ordered list
|
||||
"optgroup",// Defines a group of related options in a drop-down list
|
||||
"option",// Defines an option in a drop-down list
|
||||
"output",// Defines the result of a calculation
|
||||
"p",// Defines a paragraph
|
||||
"param",// Defines a parameter for an object
|
||||
"pre",// Defines preformatted text
|
||||
"progress",// Represents the progress of a task
|
||||
"q",// Defines a short quotation
|
||||
"rp",// Defines what to show in browsers that do not support ruby annotations
|
||||
"rt",// Defines an explanation/pronunciation of characters (for East Asian typography)
|
||||
"ruby",// Defines a ruby annotation (for East Asian typography)
|
||||
"s",// Defines text that is no longer correct
|
||||
"samp",// Defines sample output from a computer program
|
||||
"script",// Defines a client-side script
|
||||
"section",// Defines a section in a document
|
||||
"select",// Defines a drop-down list
|
||||
"small",// Defines smaller text
|
||||
"source",// Defines multiple media resources for media elements (<video> and <audio>)
|
||||
"span",// Defines a section in a document
|
||||
"strike",// Not supported in HTML5. Use <del> instead.
|
||||
//Defines strikethrough text
|
||||
"strong",// Defines important text
|
||||
"style",// Defines style information for a document
|
||||
"sub",// Defines subscripted text
|
||||
"summary",// Defines a visible heading for a <details> element
|
||||
"sup",// Defines superscripted text
|
||||
"table",// Defines a table
|
||||
"tbody",// Groups the body content in a table
|
||||
"td",// Defines a cell in a table
|
||||
"textarea",// Defines a multiline input control (text area)
|
||||
"tfoot",// Groups the footer content in a table
|
||||
"th",// Defines a header cell in a table
|
||||
"thead",// Groups the header content in a table
|
||||
"time",// Defines a date/time
|
||||
"title",// Defines a title for the document
|
||||
"tr",// Defines a row in a table
|
||||
"track",// Defines text tracks for media elements (<video> and <audio>)
|
||||
"tt",// Not supported in HTML5. Use CSS instead.
|
||||
//Defines teletype text
|
||||
"u",// Defines text that should be stylistically different from normal text
|
||||
"ul",// Defines an unordered list
|
||||
"var",// Defines a variable
|
||||
"video",// Defines a video or movie
|
||||
"wbr"
|
||||
]
|
||||
}
|
||||
|
||||
63
samples/TI Program/srcalpha.8xp.txt
Normal file
63
samples/TI Program/srcalpha.8xp.txt
Normal file
@@ -0,0 +1,63 @@
|
||||
.AlphaCS
|
||||
#ExprOff
|
||||
If getKey(41)
|
||||
sub(ADM)
|
||||
End
|
||||
Lbl START
|
||||
"appv alpha "->Str1
|
||||
"appvAlphaCS"->Str2
|
||||
.ALPHA CS
|
||||
[7EFFFFE7FFFFE7E7]->Pic11
|
||||
[E0E0E0E0E0FFFF7F]->Pic12
|
||||
[FEFFE7FFFEE0E0E0]->Pic13
|
||||
[E7E7E7FFFFE7E7E7]->Pic14
|
||||
[7EFFFFE7FFFFE7E7]->Pic15
|
||||
[7FFFFFE0E0FFFF7F]->Pic16
|
||||
[7FFFFF781EFFFFFE]->Pic17
|
||||
.arch
|
||||
[0038447C44440000]->Pic21
|
||||
.hide
|
||||
[0054004400540000]->Pic22
|
||||
.lock
|
||||
[0038447C7C7C0000]->Pic23
|
||||
.(c) Scott Mangiapane
|
||||
Data(72,8)->GDB0
|
||||
[42600A360008000100994DDF2A6C61B1B28091294A22AAAAAAAB005A6DCA226A69B9A9800000000000202000000000000000C0200000000000000000000000000000000000000000]
|
||||
.icon unknown
|
||||
Data(16,16)->GDB11
|
||||
[EFFEA803EB8308032BFB28032BFB0803EBFBA803EBFB08032B8328032FFF07FF]
|
||||
.icon SRC
|
||||
Data(16,16)->GDB12
|
||||
[01801A583E7C3FFC3FFC3E7C1A580A500240FFFFC471BDAFCC6FF5AF8DB1FFFF]
|
||||
.icon ASM
|
||||
Data(16,16)->GDB13
|
||||
[FFFFFFFFFFFFFFFFFFFFCE6BB5D586D5B75DB4DDFFFFFFFFFFFFFFFFFFFFFFFF]
|
||||
.icon shell
|
||||
Data(16,16)->GDB14
|
||||
[FFFFFFFFFFFFFFFFFFFFFFFF97B5B155D5359595FFFFFFFFFFFFFFFFFFFFFFFF]
|
||||
Goto SET
|
||||
prgmSRCFUNC
|
||||
prgmSRCGUI
|
||||
prgmSRCSORT
|
||||
Lbl SET
|
||||
.start, set up
|
||||
ClrDraw
|
||||
StoreGDB
|
||||
DiagnosticOff
|
||||
Fix 5
|
||||
Full
|
||||
!If GetCalc(Str1,[Y1])
|
||||
sub(NEW)
|
||||
StoreGDB
|
||||
End
|
||||
GetCalc(Str1,[Y1])
|
||||
If {[Y1]+0}
|
||||
!If sub(CODE)
|
||||
Goto END
|
||||
End
|
||||
End
|
||||
Asm(FDCB249E)
|
||||
If {[Y1]+6}
|
||||
Asm(FDCB24DE)
|
||||
End
|
||||
Goto DLIST
|
||||
194
samples/TI Program/srcfunc.8xp.txt
Normal file
194
samples/TI Program/srcfunc.8xp.txt
Normal file
@@ -0,0 +1,194 @@
|
||||
.FUNC AlphaCS
|
||||
Lbl ADM
|
||||
DiagnosticOff
|
||||
Fix 5
|
||||
Full
|
||||
StoreGDB
|
||||
sub(D2,13,17,70,29,"Admin Access")
|
||||
sub(D1,15,27)
|
||||
Text(15,37,"Admin Code: - - - -")
|
||||
DispGraph
|
||||
Repeat getKey->A
|
||||
End
|
||||
Text(55,37,"*")
|
||||
DispGraph
|
||||
Repeat getKey->B
|
||||
End
|
||||
Text(62,37,"*")
|
||||
DispGraph
|
||||
Repeat getKey->C
|
||||
End
|
||||
Text(69,37,"*")
|
||||
DispGraph
|
||||
Repeat getKey->D
|
||||
End
|
||||
Text(76,37,"*")
|
||||
DispGraph
|
||||
Normal
|
||||
Pause 100
|
||||
Full
|
||||
If (A!=20) or (B!=35) or (C!=18) or (D!=27)
|
||||
Goto END
|
||||
End
|
||||
sub(D2,13,17,70,29,"Author Info")
|
||||
sub(D1,15,27)
|
||||
Bitmap(15,38,GDB0)
|
||||
DispGraph
|
||||
Repeat (getKey) and (getKey(9))
|
||||
End
|
||||
DelVar "appv alpha "
|
||||
Return
|
||||
Lbl D1
|
||||
.draws title
|
||||
Pt-On([r1]+1,[r2]+1,Pic11)
|
||||
Pt-On([r1]+10,[r2]+1,Pic12)
|
||||
Pt-On([r1]+19,[r2]+1,Pic13)
|
||||
Pt-On([r1]+28,[r2]+1,Pic14)
|
||||
Pt-On([r1]+37,[r2]+1,Pic15)
|
||||
Pt-On([r1]+48,[r2]+1,Pic16)
|
||||
Pt-On([r1]+57,[r2]+1,Pic17)
|
||||
RectI([r1],[r2],66,10)
|
||||
Pxl-Off([r1],[r2])
|
||||
RectI([r1]+14,[r2],4,5)
|
||||
RectI([r1]+23,[r2]+7,4,3)
|
||||
RectI([r1]+46,[r2]+1,1,8)
|
||||
RectI([r1]+45,[r2],3,1)
|
||||
RectI([r1]+46,[r2]+9,2,1)
|
||||
Pxl-Off([r1]+65,[r2]+9)
|
||||
Return
|
||||
Lbl D2
|
||||
.windows
|
||||
Rect([r1]+1,[r2],[r3]-2,[r4])
|
||||
Rect([r1],[r2]+1,[r3],[r4]-2)
|
||||
RectI([r1]+1,[r2]+1,[r3]-2,[r4]-2)
|
||||
Text([r1]+2,[r2]+2,[r5])
|
||||
RectI([r1]+1,[r2]+1,[r3]-2,8)
|
||||
Pt-Off([r1]+[r3]-9,[r2]+1,[C1BEAAB6AABEC1FF])
|
||||
Pxl-On([r1]+1,[r2]+[r4]-2)
|
||||
Pxl-On([r1]+[r3]-2,[r2]+[r4]-2)
|
||||
Return
|
||||
Lbl D3
|
||||
.archiving box
|
||||
sub(D2,15,22,66,20,"Archiving...")
|
||||
Text(17,31,"Please wait...")
|
||||
Return
|
||||
Lbl CODE
|
||||
sub(D2,15,22,66,20,"Access Denied")
|
||||
Text(29,32," - - - - ")
|
||||
DispGraph
|
||||
1->[r2]
|
||||
Repeat getKey->[r1]
|
||||
End
|
||||
Text(29,32,"*")
|
||||
DispGraph
|
||||
If [r1]!=({[Y1]+1})
|
||||
0->[r2]
|
||||
End
|
||||
Repeat getKey->[r1]
|
||||
End
|
||||
Text(39,32,"*")
|
||||
DispGraph
|
||||
If [r1]!=({[Y1]+2})
|
||||
0->[r2]
|
||||
End
|
||||
Repeat getKey->[r1]
|
||||
End
|
||||
Text(49,32,"*")
|
||||
DispGraph
|
||||
If [r1]!=({[Y1]+3})
|
||||
0->[r2]
|
||||
End
|
||||
Repeat getKey->[r1]
|
||||
End
|
||||
Text(59,32,"*")
|
||||
DispGraph
|
||||
If [r1]!=({[Y1]+4})
|
||||
0->[r2]
|
||||
End
|
||||
Normal
|
||||
Pause 200
|
||||
Full
|
||||
Return[r2]
|
||||
Lbl NEW
|
||||
ClrDraw
|
||||
sub(D1,0,0)
|
||||
RectI(0,11,96,1)
|
||||
Text(1,12,"Installation")
|
||||
Text(1,20,"Enter your new keycode:")
|
||||
Text(1,26," - - - - ")
|
||||
DispGraph
|
||||
GetCalc(Str1,16)->[r1]
|
||||
Fill([r1],16,1)
|
||||
0->{[r1]}
|
||||
Repeat getKey->[r2]
|
||||
End
|
||||
[r2]->{[r1]+1}
|
||||
Text(1,26,"*")
|
||||
DispGraph
|
||||
Repeat getKey->[r2]
|
||||
End
|
||||
[r2]->{[r1]+2}
|
||||
Text(7,26,"*")
|
||||
DispGraph
|
||||
Repeat getKey->[r2]
|
||||
End
|
||||
[r2]->{[r1]+3}
|
||||
Text(13,26,"*")
|
||||
DispGraph
|
||||
Repeat getKey->[r2]
|
||||
End
|
||||
[r2]->{[r1]+4}
|
||||
Text(19,26,"*")
|
||||
DispGraph
|
||||
Fill(L1,50,0)
|
||||
Text(1,34,"Confirm keycode:")
|
||||
Text(1,40," - - - - ")
|
||||
DispGraph
|
||||
Repeat getKey->[r2]
|
||||
End
|
||||
[r2]->{L1+1}
|
||||
Text(1,40,"*")
|
||||
DispGraph
|
||||
Repeat getKey->[r2]
|
||||
End
|
||||
[r2]->{L1+2}
|
||||
Text(7,40,"*")
|
||||
DispGraph
|
||||
Repeat getKey->[r2]
|
||||
End
|
||||
[r2]->{L1+3}
|
||||
Text(13,40,"*")
|
||||
DispGraph
|
||||
Repeat getKey->[r2]
|
||||
End
|
||||
[r2]->{L1+4}
|
||||
Text(19,40,"*")
|
||||
DispGraph
|
||||
If ({[r1]+1}={L1+1}) and ({[r1]+2}={L1+2}) and ({[r1]+3}={L1+3}) and ({[r1]+4}={L1+4})
|
||||
sub(D3)
|
||||
DispGraph
|
||||
GetCalc(Str2,10)
|
||||
Archive Str1
|
||||
GetCalc(Str1,[Y1])
|
||||
ClrDraw
|
||||
Return
|
||||
Else
|
||||
Text(1,48,"ERROR keycodes do not")
|
||||
Text(1,54,"match.")
|
||||
DispGraph
|
||||
UnArchive Str1
|
||||
DelVar Str1
|
||||
Repeat getKey
|
||||
End
|
||||
Goto END
|
||||
End
|
||||
Return
|
||||
Lbl END
|
||||
Asm(FDCB249E)
|
||||
If {[Y1]+6}
|
||||
Asm(FDCB24DE)
|
||||
End
|
||||
ClrDraw
|
||||
ClrDraw^^r
|
||||
ClrHome
|
||||
Return^^r
|
||||
563
samples/TI Program/srcgui.8xp.txt
Normal file
563
samples/TI Program/srcgui.8xp.txt
Normal file
@@ -0,0 +1,563 @@
|
||||
.GUI AlphaCS
|
||||
#Axiom(RUNPRGM)
|
||||
#Axiom(ZSTAXE)
|
||||
Lbl DLIST
|
||||
ClrDraw
|
||||
ClrDraw^^r
|
||||
sub(D1,0,0)
|
||||
RectI(0,11,96,1)
|
||||
!If sub(POLAR,1)
|
||||
RectI(0,63,96,1)
|
||||
Text(1,13,"No programs found.")
|
||||
DispGraph
|
||||
Goto KLIST2
|
||||
Else
|
||||
Fill(L5,50,0)
|
||||
Copy(L1,L5,20)
|
||||
13->B->G
|
||||
0->I
|
||||
1->H
|
||||
Text(1,13,L2)
|
||||
If D
|
||||
Pt-On(77,13,Pic21)
|
||||
End
|
||||
If E
|
||||
Pt-On(83,13,Pic22)
|
||||
End
|
||||
If F
|
||||
Pt-On(89,13,Pic23)
|
||||
End
|
||||
For(S,1,6)
|
||||
If sub(ADJ,1)
|
||||
S*7+13->G
|
||||
Text(1,S*7+13,L2)
|
||||
If D
|
||||
Pt-On(77,S*7+13,Pic21)
|
||||
End
|
||||
If E
|
||||
Pt-On(83,S*7+13,Pic22)
|
||||
End
|
||||
If F
|
||||
Pt-On(89,S*7+13,Pic23)
|
||||
End
|
||||
End
|
||||
End
|
||||
End
|
||||
Fill(L4,50,0)
|
||||
Copy(L1,L4,20)
|
||||
Lbl KLIST1
|
||||
Rect(90,0,6,10)
|
||||
RectI(90,0,6,10)
|
||||
0->S->T
|
||||
sub(POLAR,1)
|
||||
If Equ>String(L1,L5)
|
||||
S++
|
||||
End
|
||||
sub(POLAR,0)
|
||||
If Equ>String(L1,L4)
|
||||
T++
|
||||
End
|
||||
If (S) and (T)
|
||||
Pt-On(90,6,[F870200000000000])
|
||||
Pt-On(90,2,[2070F80000000000])
|
||||
Else
|
||||
If S
|
||||
Pt-On(90,4,[2070F80000000000])
|
||||
End
|
||||
If T
|
||||
Pt-On(90,4,[F870200000000000])
|
||||
End
|
||||
End
|
||||
RectI(0,63,96,1)
|
||||
RectI(0,B,96,7)
|
||||
DispGraph
|
||||
RectI(0,B,96,7)
|
||||
RectI(0,63,96,1)
|
||||
If getKey(15)
|
||||
Goto DLIST
|
||||
End
|
||||
Repeat getKey
|
||||
If getKey(41)
|
||||
Repeat getKey(41)=0
|
||||
End
|
||||
Asm(3E01D303FB76)
|
||||
Repeat getKey(41)=0
|
||||
End
|
||||
End
|
||||
End
|
||||
If getKey(48)
|
||||
Goto DSET1
|
||||
End
|
||||
If (getKey(9)) or (getKey(54))
|
||||
Fill(L1,50,0)
|
||||
Copy(L5,L1,20)
|
||||
If (B-13/7)=0
|
||||
Fill(L1,50,0)
|
||||
Copy(L5+1,L1,20)
|
||||
sub(DATA)
|
||||
Else
|
||||
For(B-13/7)
|
||||
sub(ADJ,1)
|
||||
End
|
||||
End
|
||||
Goto DPRGM1
|
||||
End
|
||||
If getKey(4)
|
||||
If (B!=13)
|
||||
For(S,0,7)
|
||||
RectI(0,63,96,1)
|
||||
RectI(0,B-S,96,7)
|
||||
DispGraph
|
||||
RectI(0,B-S,96,7)
|
||||
RectI(0,63,96,1)
|
||||
End
|
||||
B-7->B
|
||||
Else
|
||||
sub(POLAR,1)
|
||||
If Equ>String(L1,L5)
|
||||
Fill(L1,50,0)
|
||||
Copy(L4,L1,20)
|
||||
sub(ADJ,0)
|
||||
Fill(L4,50,0)
|
||||
Copy(L1,L4,20)
|
||||
Fill(L1,50,0)
|
||||
Copy(L5,L1,20)
|
||||
sub(ADJ,0)
|
||||
Fill(L5,50,0)
|
||||
Copy(L1,L5,20)
|
||||
Fill(L1,50,0)
|
||||
Copy(L4,L1,20)
|
||||
Rect(0,0,96,13)
|
||||
RectI(0,0,96,13)
|
||||
For(7)
|
||||
Vertical+
|
||||
End
|
||||
Rect(0,62,96,2)
|
||||
RectI(0,62,96,2)
|
||||
Text(1,13,L2)
|
||||
If D
|
||||
Pt-On(77,13,Pic21)
|
||||
End
|
||||
If E
|
||||
Pt-On(83,13,Pic22)
|
||||
End
|
||||
If F
|
||||
Pt-On(89,13,Pic23)
|
||||
End
|
||||
Rect(0,0,96,13)
|
||||
RectI(0,0,96,13)
|
||||
sub(D1,0,0)
|
||||
RectI(0,11,96,1)
|
||||
End
|
||||
End
|
||||
End
|
||||
If getKey(1)
|
||||
If (B!=G)
|
||||
For(S,0,7)
|
||||
RectI(0,63,96,1)
|
||||
RectI(0,B+S,96,7)
|
||||
DispGraph
|
||||
RectI(0,B+S,96,7)
|
||||
RectI(0,63,96,1)
|
||||
End
|
||||
B+7->B
|
||||
Else
|
||||
sub(POLAR,0)
|
||||
If Equ>String(L1,L4)
|
||||
Fill(L1,50,0)
|
||||
Copy(L5,L1,20)
|
||||
sub(ADJ,1)
|
||||
Fill(L5,50,0)
|
||||
Copy(L1,L5,20)
|
||||
Fill(L1,50,0)
|
||||
Copy(L4,L1,20)
|
||||
sub(ADJ,1)
|
||||
Fill(L4,50,0)
|
||||
Copy(L1,L4,20)
|
||||
For(7)
|
||||
Vertical-
|
||||
End
|
||||
Text(1,55,L2)
|
||||
If D
|
||||
Pt-On(77,55,Pic21)
|
||||
End
|
||||
If E
|
||||
Pt-On(83,55,Pic22)
|
||||
End
|
||||
If F
|
||||
Pt-On(89,55,Pic23)
|
||||
End
|
||||
Rect(0,0,96,13)
|
||||
RectI(0,0,96,13)
|
||||
sub(D1,0,0)
|
||||
RectI(0,11,96,1)
|
||||
End
|
||||
End
|
||||
End
|
||||
If getKey(15)
|
||||
Goto END
|
||||
End
|
||||
Goto KLIST1
|
||||
Lbl KLIST2
|
||||
If getKey(15)
|
||||
Goto DLIST
|
||||
End
|
||||
Repeat getKey
|
||||
If getKey(41)
|
||||
Repeat getKey(41)=0
|
||||
End
|
||||
Asm(3E01D303FB76)
|
||||
Repeat getKey(41)=0
|
||||
End
|
||||
End
|
||||
End
|
||||
If getKey(48)
|
||||
Goto DSET1
|
||||
End
|
||||
If getKey(15)
|
||||
Goto END
|
||||
End
|
||||
Goto KLIST2
|
||||
Lbl DPRGM1
|
||||
GetCalc("appv alpha ",[Y1])
|
||||
13->B
|
||||
D->X
|
||||
E->Y
|
||||
F->Z
|
||||
Lbl DPRGM2
|
||||
GetCalc(L1,[Y3])
|
||||
0->H
|
||||
If ({[Y3]+0}=187) and ({[Y3]+1}=109)
|
||||
1->H
|
||||
If {[Y3]+2}=201
|
||||
2->H
|
||||
End
|
||||
If {[Y3]+3}=201
|
||||
3->H
|
||||
End
|
||||
End
|
||||
If {[Y3]+0}=58
|
||||
4->H
|
||||
End
|
||||
ClrDraw
|
||||
ClrDraw^^r
|
||||
sub(D1,0,0)
|
||||
RectI(0,11,96,1)
|
||||
Text(1,49,L2)
|
||||
RectI(0,48,96,16)
|
||||
69->S
|
||||
If Z
|
||||
Pt-Change(S,56,Pic23)
|
||||
S-6->S
|
||||
End
|
||||
If Y
|
||||
Pt-Change(S,56,Pic22)
|
||||
S-6->S
|
||||
End
|
||||
If X
|
||||
Pt-Change(S,56,Pic21)
|
||||
End
|
||||
RectI(1,56,94,7)
|
||||
Text(2,56,"size: ",{[Y3]-2}^^r>Dec)
|
||||
Text(1,13,"Run (with zStart)")
|
||||
If X
|
||||
Text(1,20,"Unarchive PRGM")
|
||||
Else
|
||||
Text(1,20,"Archive PRGM")
|
||||
End
|
||||
If Y
|
||||
Text(1,27,"Unhide PRGM")
|
||||
Else
|
||||
Text(1,27,"Hide PRGM")
|
||||
End
|
||||
If Z
|
||||
Text(1,34,"Unlock PRGM")
|
||||
Else
|
||||
Text(1,34,"Lock PRGM")
|
||||
End
|
||||
Rect(76,44,20,20)
|
||||
RectI(77,45,18,18)
|
||||
If H=0
|
||||
Bitmap(78,46,GDB11)
|
||||
End
|
||||
If H=1
|
||||
Bitmap(78,46,GDB13)
|
||||
End
|
||||
If H=2
|
||||
Bitmap(78,46,GDB14)
|
||||
End
|
||||
If H=3
|
||||
Bitmap(78,46,GDB14)
|
||||
End
|
||||
If H=4
|
||||
Bitmap(78,46,GDB12)
|
||||
End
|
||||
Lbl KPRGM
|
||||
RectI(0,B,96,7)
|
||||
DispGraph
|
||||
RectI(0,B,96,7)
|
||||
Repeat getKey
|
||||
End
|
||||
If (getKey(9)) or (getKey(54))
|
||||
If B=13
|
||||
sub(SETPRGM)
|
||||
Goto RUN
|
||||
Else
|
||||
Fill(L2,20,0)
|
||||
Copy(L1+1,L2,20)
|
||||
Fill(L1,20,0)
|
||||
Copy(L2,L1,20)
|
||||
sub(DATA)
|
||||
If B=20
|
||||
If X
|
||||
0->X
|
||||
Else
|
||||
1->X
|
||||
End
|
||||
Goto DPRGM2
|
||||
End
|
||||
If B=27
|
||||
If Y
|
||||
0->Y
|
||||
Else
|
||||
1->Y
|
||||
End
|
||||
Goto DPRGM2
|
||||
End
|
||||
If B=34
|
||||
If Z
|
||||
0->Z
|
||||
Else
|
||||
1->Z
|
||||
End
|
||||
Goto DPRGM2
|
||||
End
|
||||
End
|
||||
End
|
||||
If (getKey(4)) and (B!=13)
|
||||
For(S,0,7)
|
||||
RectI(0,B-S,96,7)
|
||||
DispGraph
|
||||
RectI(0,B-S,96,7)
|
||||
Normal
|
||||
Pause 3
|
||||
Full
|
||||
End
|
||||
B-7->B
|
||||
End
|
||||
If ((getKey(1)) and (B!=34)
|
||||
For(S,0,7)
|
||||
RectI(0,B+S,96,7)
|
||||
DispGraph
|
||||
RectI(0,B+S,96,7)
|
||||
Normal
|
||||
Pause 3
|
||||
Full
|
||||
End
|
||||
B+7->B
|
||||
End
|
||||
If getKey(15)
|
||||
sub(SETPRGM)
|
||||
Goto DLIST
|
||||
End
|
||||
Goto KPRGM
|
||||
Lbl SETPRGM
|
||||
If (X!=D) or (Y!=E) or (Z!=F)
|
||||
If X
|
||||
sub(D3)
|
||||
DispGraph
|
||||
End
|
||||
UnArchive L1
|
||||
X->D
|
||||
If (E!=Y)
|
||||
If Y
|
||||
{C-7}-64->{C-7}
|
||||
{L1+1}-64->{L1+1}
|
||||
Else
|
||||
{C-7}+64->{C-7}
|
||||
{L1+1}+64->{L1+1}
|
||||
End
|
||||
Y->E
|
||||
End
|
||||
If (F!=Z)
|
||||
If Z
|
||||
6->{C}
|
||||
|E06->{L1}
|
||||
Else
|
||||
5->{C}
|
||||
|E05->{L1}
|
||||
End
|
||||
Z->F
|
||||
End
|
||||
If X
|
||||
Archive L1
|
||||
End
|
||||
End
|
||||
GetCalc(L1,[Y3])
|
||||
Return
|
||||
Lbl RUN
|
||||
GetCalc("appv hold ",20)->S
|
||||
Fill(S,20,0)
|
||||
Copy(L1+1,S,10)
|
||||
A->{S+15}
|
||||
DiagnosticOn
|
||||
Fix 4
|
||||
Normal
|
||||
If D
|
||||
GetCalc("appvzRun",{[Y3]-2}^^r)->S
|
||||
Copy([Y3],S,{[Y3]-2}^^r)
|
||||
End
|
||||
2-SampZInt(|LRUNERR)
|
||||
If D
|
||||
Fpdf("appvzRun")
|
||||
Else
|
||||
Fpdf(L1)
|
||||
End
|
||||
2-SampTInt
|
||||
DelVar "appvzRun"
|
||||
GetCalc("appv hold ")->S
|
||||
Fill(L1,20,0)
|
||||
Copy(S,L1,10)
|
||||
{S+15}->A
|
||||
sub(DATA)
|
||||
DelVar "appv hold "
|
||||
DiagnosticOff
|
||||
Fix 5
|
||||
Full
|
||||
Repeat getKey=0
|
||||
End
|
||||
Goto DPRGM1
|
||||
Lbl RUNERR
|
||||
2-SampFTest ->S
|
||||
DelVar "appvzRun"
|
||||
DiagnosticOff
|
||||
Fix 5
|
||||
Full
|
||||
sub(D2,10,22,76,20,"Error")
|
||||
If S=8
|
||||
Text(12,31,"Syntax")
|
||||
Else
|
||||
Text(12,31,"Error "[23]"",S>Dec)
|
||||
End
|
||||
DispGraph
|
||||
Repeat (getKey) and (getKey(9))
|
||||
End
|
||||
GetCalc("appv hold ")->S
|
||||
Fill(L1,20,0)
|
||||
Copy(S,L1,10)
|
||||
{S+15}->A
|
||||
sub(DATA)
|
||||
DelVar "appv hold "
|
||||
DiagnosticOff
|
||||
Fix 5
|
||||
Full
|
||||
Repeat getKey=0
|
||||
End
|
||||
Goto DPRGM1
|
||||
Lbl DSET1
|
||||
21->B
|
||||
{[Y1]+5}->X
|
||||
{[Y1]}->Y
|
||||
{[Y1]+6}->Z
|
||||
Lbl DSET2
|
||||
ClrDraw
|
||||
sub(D1,0,0)
|
||||
RectI(0,11,96,1)
|
||||
Text(1,12,"by ClrDraw, Nov 2013, v 1")
|
||||
RectI(0,19,96,1)
|
||||
RectI(0,63,96,1)
|
||||
If X
|
||||
Text(1,21,"Show Hidden On")
|
||||
Else
|
||||
Text(1,21,"Show Hidden Off")
|
||||
End
|
||||
If Y
|
||||
Text(1,28,"Password On")
|
||||
Else
|
||||
Text(1,28,"Password Off")
|
||||
End
|
||||
If Z
|
||||
Text(1,35,"Lowercase On")
|
||||
Else
|
||||
Text(1,35,"Lowercase Off")
|
||||
End
|
||||
Text(1,42,"Uninstall AlphaCS")
|
||||
Lbl KSET
|
||||
RectI(0,B,96,7)
|
||||
DispGraph
|
||||
RectI(0,B,96,7)
|
||||
Repeat getKey
|
||||
End
|
||||
If (getKey(54)) or (getKey(9))
|
||||
If B=21
|
||||
If X
|
||||
0->X
|
||||
Else
|
||||
1->X
|
||||
End
|
||||
Goto DSET2
|
||||
End
|
||||
If B=28
|
||||
If Y
|
||||
0->Y
|
||||
Else
|
||||
1->Y
|
||||
End
|
||||
Goto DSET2
|
||||
End
|
||||
If B=35
|
||||
If Z
|
||||
0->Z
|
||||
Else
|
||||
1->Z
|
||||
End
|
||||
Goto DSET2
|
||||
End
|
||||
If B=42
|
||||
If sub(CODE)
|
||||
DelVar Str1
|
||||
Goto END
|
||||
Else
|
||||
Goto DSET2
|
||||
End
|
||||
End
|
||||
End
|
||||
If (getKey(4)) and (B!=21)
|
||||
For(7)
|
||||
RectI(0,B,96,7)
|
||||
DispGraph
|
||||
RectI(0,B,96,7)
|
||||
B--
|
||||
Normal
|
||||
Pause 3
|
||||
Full
|
||||
End
|
||||
End
|
||||
If (getKey(1)) and (B!=42)
|
||||
For(7)
|
||||
RectI(0,B,96,7)
|
||||
DispGraph
|
||||
RectI(0,B,96,7)
|
||||
B++
|
||||
Normal
|
||||
Pause 3
|
||||
Full
|
||||
End
|
||||
End
|
||||
If getKey(15)
|
||||
If ({[Y1]+5}!=X) or ({[Y1]}!=Y) or ({[Y1]+6}!=Z)
|
||||
UnArchive Str1
|
||||
GetCalc(Str1)->S
|
||||
X->{S+5}
|
||||
Y->{S}
|
||||
Z->{S+6}
|
||||
sub(D3)
|
||||
DispGraph
|
||||
Archive Str1
|
||||
GetCalc(Str1,[Y1])
|
||||
End
|
||||
Repeat getKey=0
|
||||
End
|
||||
Goto DLIST
|
||||
End
|
||||
Goto KSET
|
||||
138
samples/TI Program/srcsort.8xp.txt
Normal file
138
samples/TI Program/srcsort.8xp.txt
Normal file
@@ -0,0 +1,138 @@
|
||||
.SORT AlphaCS
|
||||
Lbl POLAR
|
||||
Fill(L1,50,0)
|
||||
{|E9830}^^r->[r2]
|
||||
Repeat (({[r2]}=5) or ({[r2]}=6)) and (({[r2]-7}>48) or (({[Y1]+5}) and ({[r2]-7}<28)))
|
||||
[r2]-{[r2]-6}-7->[r2]
|
||||
If [r2]<={|E982E}^^r
|
||||
Return0
|
||||
End
|
||||
End
|
||||
For([r3],1,{[r2]-6})
|
||||
{[r2]-6-[r3]}->{L1+[r3]-1}
|
||||
End
|
||||
[r2]-{[r2]-6}-7->[r2]
|
||||
Repeat 0
|
||||
If (({[r2]}=5) or ({[r2]}=6)) and (({[r2]-7}>48) or (({[Y1]+5}) and ({[r2]-7}<28)))
|
||||
Fill(L2,50,0)
|
||||
For([r3],1,{[r2]-6}
|
||||
{[r2]-6-[r3]}->{L2+[r3]-1
|
||||
End
|
||||
0->[r3]
|
||||
Repeat ({L1+[r3]}!={L2+[r3]}) or ([r3]=20)
|
||||
[r3]++
|
||||
End
|
||||
If (({L1+[r3]}>{L2+[r3]}) and ([r1]=1)) or (({L1+[r3]}<{L2+[r3]}) and ([r1]=0))
|
||||
Fill(L1,50,0)
|
||||
Copy(L2,L1,20)
|
||||
End
|
||||
Else
|
||||
If [r2]<{|E982E}^^r
|
||||
sub(DATA)
|
||||
Return1
|
||||
End
|
||||
End
|
||||
[r2]-{[r2]-6}-7->[r2]
|
||||
End
|
||||
Lbl ADJ
|
||||
Fill(L2,50,0)
|
||||
Copy(L1+1,L2,20)
|
||||
Fill(L1,50,0)
|
||||
Copy(L2,L1)
|
||||
Fill(L3,50,0)
|
||||
Copy(L1,L3,20)
|
||||
Fill(L1,50,0)
|
||||
{|E9830}^^r->[r2]
|
||||
sub(CHECK)
|
||||
Repeat (({[r2]}=5) or ({[r2]}=6)) and ([r4]) and (({[r2]-7}>48) or ({[r2]-7}<28))
|
||||
[r2]-{[r2]-6}-7->[r2]
|
||||
If [r2]<{|E982E}^^r
|
||||
Fill(L1,50,0)
|
||||
Copy(L3,L1,20)
|
||||
Fill(L3,50,0)
|
||||
sub(DATA)
|
||||
Return0
|
||||
End
|
||||
sub(CHECK)
|
||||
End
|
||||
For([r3],1,{[r2]-6})
|
||||
{[r2]-6-[r3]}->{L1+[r3]-1}
|
||||
End
|
||||
[r2]-{[r2]-6}-7->[r2]
|
||||
Repeat 0
|
||||
sub(CHECK)
|
||||
If (({[r2]}=5) or ({[r2]}=6)) and ([r4]) and (({[r2]-7}>48) or ({[r2]-7}<28))
|
||||
Fill(L2,50,0)
|
||||
For([r3],1,{[r2]-6}
|
||||
{[r2]-6-[r3]}->{L2+[r3]-1
|
||||
End
|
||||
0->[r3]
|
||||
Repeat ({L1+[r3]}!={L2+[r3]}) or ([r3]=20)
|
||||
[r3]++
|
||||
End
|
||||
If (({L1+[r3]}>{L2+[r3]}) and ([r1]=1)) or (({L1+[r3]}<{L2+[r3]}) and ([r1]=0))
|
||||
Fill(L1,50,0)
|
||||
Copy(L2,L1,20)
|
||||
End
|
||||
Else
|
||||
If [r2]<{|E982E}^^r
|
||||
sub(DATA)
|
||||
Return1
|
||||
End
|
||||
End
|
||||
[r2]-{[r2]-6}-7->[r2]
|
||||
End
|
||||
Lbl CHECK
|
||||
0->[r4]
|
||||
Repeat ({[r2]-7-[r4]}!={L3+[r4]}) or (([r4]>={[r2]-6}) and ({L3+[r4]}=0))
|
||||
[r4]++
|
||||
End
|
||||
If ((({[r2]-7-[r4]}<{L3+[r4]}) and ([r1]=1)) or (({[r2]-7-[r4]}>{L3+[r4]}) and ([r1]=0))) or (([r4]>={[r2]-6}) and ({L3+[r4]}=0))
|
||||
0->[r4]
|
||||
Else
|
||||
1->[r4]
|
||||
End
|
||||
Return
|
||||
Lbl DATA
|
||||
{|E9830}^^r->C
|
||||
Repeat 0
|
||||
Repeat ({C}=5) or ({C}=6) and (({[r1]-7}>48) or ({[r1]-7}<28))
|
||||
C-{C-6}-7->C
|
||||
End
|
||||
Fill(L2,50,0)
|
||||
For([r1],1,{C-6})
|
||||
{C-6-[r1]}->{L2+[r1]-1}
|
||||
End
|
||||
!If Equ>String(L1,L2)
|
||||
If {C-5}=0
|
||||
0->D
|
||||
Else
|
||||
1->D
|
||||
End
|
||||
If {C-7}<28
|
||||
1->E
|
||||
Else
|
||||
0->E
|
||||
End
|
||||
If {C}=6
|
||||
1->F
|
||||
Else
|
||||
0->F
|
||||
End
|
||||
Fill(L2,50,0)
|
||||
Copy(L1,L2,20)
|
||||
Fill(L1,50,0)
|
||||
Copy(L2,L1+1,20)
|
||||
If E
|
||||
{L2}+64->{L2}
|
||||
End
|
||||
If F
|
||||
|E06->{L1}
|
||||
Else
|
||||
|E05->{L1}
|
||||
End
|
||||
Return
|
||||
End
|
||||
C-{C-6}-7->C
|
||||
End
|
||||
Return
|
||||
93
script/add-grammar
Executable file
93
script/add-grammar
Executable file
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require "optparse"
|
||||
|
||||
ROOT = File.expand_path("../../", __FILE__)
|
||||
|
||||
|
||||
# Break a repository URL into its separate components
|
||||
def parse_url(input)
|
||||
hosts = "github\.com|bitbucket\.org|gitlab\.com"
|
||||
|
||||
# HTTPS/HTTP link pointing to recognised hosts
|
||||
if input =~ /^(?:https?:\/\/)?(?:[^.@]+@)?(?:www\.)?(#{hosts})\/([^\/]+)\/([^\/]+)/i
|
||||
{ host: $1.downcase(), user: $2, repo: $3.sub(/\.git$/, "") }
|
||||
# SSH
|
||||
elsif input =~ /^git@(#{hosts}):([^\/]+)\/([^\/]+)\.git$/i
|
||||
{ host: $1.downcase(), user: $2, repo: $3 }
|
||||
# provider:user/repo
|
||||
elsif input =~ /^(github|bitbucket|gitlab):\/?([^\/]+)\/([^\/]+)\/?$/i
|
||||
{ host: $1.downcase(), user: $2, repo: $3 }
|
||||
# user/repo - Common GitHub shorthand
|
||||
elsif input =~ /^\/?([^\/]+)\/([^\/]+)\/?$/
|
||||
{ host: "github.com", user: $1, repo: $2 }
|
||||
else
|
||||
raise "Unsupported URL: #{input}"
|
||||
end
|
||||
end
|
||||
|
||||
# Isolate the vendor-name component of a submodule path
|
||||
def parse_submodule(name)
|
||||
name =~ /^(?:.*(?:vendor\/)?grammars\/)?([^\/]+)/i
|
||||
path = "vendor/grammars/#{$1}"
|
||||
unless File.exist?("#{ROOT}/" + path)
|
||||
warn "Submodule '#{path}' does not exist. Aborting."
|
||||
exit 1
|
||||
end
|
||||
path
|
||||
end
|
||||
|
||||
# Print debugging feedback to STDOUT if running with --verbose
|
||||
def log(msg)
|
||||
puts msg if $verbose
|
||||
end
|
||||
|
||||
|
||||
usage = """Usage:
|
||||
#{$0} [-v|--verbose] [--replace grammar] url
|
||||
Examples:
|
||||
#{$0} https://github.com/Alhadis/language-roff
|
||||
#{$0} --replace sublime-apl https://github.com/Alhadis/language-apl
|
||||
"""
|
||||
|
||||
$replace = nil
|
||||
$verbose = false
|
||||
|
||||
OptionParser.new do |opts|
|
||||
opts.banner = usage
|
||||
opts.on("-v", "--verbose", "Print verbose feedback to STDOUT") do
|
||||
$verbose = true
|
||||
end
|
||||
opts.on("-rSUBMODULE", "--replace=SUBMODDULE", "Replace an existing grammar submodule.") do |name|
|
||||
$replace = name
|
||||
end
|
||||
end.parse!
|
||||
|
||||
|
||||
$url = ARGV[0]
|
||||
|
||||
# No URL? Print a usage message and bail.
|
||||
unless $url
|
||||
warn usage
|
||||
exit 1;
|
||||
end
|
||||
|
||||
# Ensure the given URL is an HTTPS link
|
||||
parts = parse_url $url
|
||||
https = "https://#{parts[:host]}/#{parts[:user]}/#{parts[:repo]}"
|
||||
repo_new = "vendor/grammars/#{parts[:repo]}"
|
||||
repo_old = parse_submodule($replace) if $replace
|
||||
|
||||
if repo_old
|
||||
log "Deregistering: #{repo_old}"
|
||||
`git submodule deinit #{repo_old}`
|
||||
`git rm -rf #{repo_old}`
|
||||
end
|
||||
|
||||
log "Registering new submodule: #{repo_new}"
|
||||
`git submodule add -f #{https} #{repo_new}`
|
||||
exit 1 if $?.exitstatus > 0
|
||||
`script/convert-grammars --add #{repo_new}`
|
||||
|
||||
log "Confirming license"
|
||||
`script/licensed --module "#{repo_new}"`
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
require "bundler/setup"
|
||||
require "licensed/cli"
|
||||
require "optparse"
|
||||
|
||||
module Licensed
|
||||
module Source
|
||||
@@ -32,7 +33,14 @@ module Licensed
|
||||
end
|
||||
end
|
||||
|
||||
source = Licensed::Source::Filesystem.new("vendor/grammars/*/", type: "grammar")
|
||||
module_path = nil
|
||||
OptionParser.new do |opts|
|
||||
opts.on("-mPATH", "--module=PATH", "Cache license file for specific grammar") do |p|
|
||||
module_path = p
|
||||
end
|
||||
end.parse!
|
||||
|
||||
source = Licensed::Source::Filesystem.new(module_path || "vendor/grammars/*/", type: "grammar")
|
||||
config = Licensed::Configuration.new
|
||||
config.sources << source
|
||||
|
||||
@@ -43,4 +51,5 @@ else
|
||||
end
|
||||
|
||||
command.run
|
||||
`git checkout -- vendor/licenses/grammar/` if module_path
|
||||
exit command.success?
|
||||
|
||||
@@ -35,3 +35,11 @@ def sample_blob_memory(name)
|
||||
content = File.read(filepath)
|
||||
Linguist::Blob.new(name, content)
|
||||
end
|
||||
|
||||
def silence_warnings
|
||||
original_verbosity = $VERBOSE
|
||||
$VERBOSE = nil
|
||||
yield
|
||||
ensure
|
||||
$VERBOSE = original_verbosity
|
||||
end
|
||||
|
||||
@@ -4,14 +4,18 @@ class TestBlob < Minitest::Test
|
||||
include Linguist
|
||||
|
||||
def setup
|
||||
# git blobs are normally loaded as ASCII-8BIT since they may contain data
|
||||
# with arbitrary encoding not known ahead of time
|
||||
@original_external = Encoding.default_external
|
||||
Encoding.default_external = Encoding.find("ASCII-8BIT")
|
||||
silence_warnings do
|
||||
# git blobs are normally loaded as ASCII-8BIT since they may contain data
|
||||
# with arbitrary encoding not known ahead of time
|
||||
@original_external = Encoding.default_external
|
||||
Encoding.default_external = Encoding.find("ASCII-8BIT")
|
||||
end
|
||||
end
|
||||
|
||||
def teardown
|
||||
Encoding.default_external = @original_external
|
||||
silence_warnings do
|
||||
Encoding.default_external = @original_external
|
||||
end
|
||||
end
|
||||
|
||||
def script_blob(name)
|
||||
|
||||
@@ -3,15 +3,27 @@ require_relative "./helper"
|
||||
class TestFileBlob < Minitest::Test
|
||||
include Linguist
|
||||
|
||||
def silence_warnings
|
||||
original_verbosity = $VERBOSE
|
||||
$VERBOSE = nil
|
||||
yield
|
||||
ensure
|
||||
$VERBOSE = original_verbosity
|
||||
end
|
||||
|
||||
def setup
|
||||
# git blobs are normally loaded as ASCII-8BIT since they may contain data
|
||||
# with arbitrary encoding not known ahead of time
|
||||
@original_external = Encoding.default_external
|
||||
Encoding.default_external = Encoding.find("ASCII-8BIT")
|
||||
silence_warnings do
|
||||
# git blobs are normally loaded as ASCII-8BIT since they may contain data
|
||||
# with arbitrary encoding not known ahead of time
|
||||
@original_external = Encoding.default_external
|
||||
Encoding.default_external = Encoding.find("ASCII-8BIT")
|
||||
end
|
||||
end
|
||||
|
||||
def teardown
|
||||
Encoding.default_external = @original_external
|
||||
silence_warnings do
|
||||
Encoding.default_external = @original_external
|
||||
end
|
||||
end
|
||||
|
||||
def script_blob(name)
|
||||
@@ -305,7 +317,7 @@ class TestFileBlob < Minitest::Test
|
||||
assert sample_blob("some/vendored/path/Chart.js").vendored?
|
||||
assert !sample_blob("some/vendored/path/chart.js").vendored?
|
||||
|
||||
# Codemirror deps
|
||||
# CodeMirror deps
|
||||
assert sample_blob("codemirror/mode/blah.js").vendored?
|
||||
assert sample_blob("codemirror/5.0/mode/blah.js").vendored?
|
||||
|
||||
|
||||
@@ -5,12 +5,42 @@ class TestGrammars < Minitest::Test
|
||||
|
||||
# List of projects that are allowed without licenses
|
||||
PROJECT_WHITELIST = [
|
||||
"vendor/grammars/factor",
|
||||
"vendor/grammars/go-tmbundle",
|
||||
"vendor/grammars/jflex.tmbundle",
|
||||
"vendor/grammars/language-csharp",
|
||||
"vendor/grammars/language-viml",
|
||||
"vendor/grammars/sublimeassembly"
|
||||
"vendor/grammars/Sublime-Lasso",
|
||||
"vendor/grammars/ant.tmbundle",
|
||||
"vendor/grammars/sublime-spintools",
|
||||
"vendor/grammars/blitzmax"
|
||||
].freeze
|
||||
|
||||
HASH_WHITELIST = [
|
||||
"bc12b3b4917eab9aedb87ec1305c2a4376e34fd1", # TextMate bundles
|
||||
"16c4748566b3dd996594af0410a1875b22d3a2b3", # language-yaml and atom-salt
|
||||
"ebae2d87e06d3acef075d049fcfc8958c0364863", # go-tmbundle
|
||||
"ff21db2554d69d78b2220db5615b16bbba0788d3", # factor
|
||||
"b9a7428fd036eed8503995e06e989180c276b17d", # jflex.tmbundle
|
||||
"da39a3ee5e6b4b0d3255bfef95601890afd80709", # SCSS.tmbundle
|
||||
"5f772ff20ddf3dbac1ec9b6a98c5aa50ace555b2", # gradle.tmbundle
|
||||
"b5432a1e1055de7eeede2dddf91e009480651fd6", # jasmin-sublime
|
||||
"74143c4d2a5649eb179105afcb37f466558c22ce", # language-clojure
|
||||
"760471435f5ab0b9dc99a628203cd8f9156d28ce", # language-coffee-script
|
||||
"330e6d465e26bdd232aafcd3f5dba6a1d098a20e", # language-csharp
|
||||
"70fb557a431891c2d634c33fa7367feab5066fd6", # language-javascript
|
||||
"e0528c23cd967f999e058f1408ccb5b7237daaba", # language-python
|
||||
"8653305b358375d0fced85dc24793b99919b11ef", # language-shellscript
|
||||
"9f0c0b0926a18f5038e455e8df60221125fc3111", # elixir-tmbundle
|
||||
"90af581219debd4e90ef041b46c294e8b4ae6d14", # mako-tmbundle
|
||||
"b9b24778619dce325b651f0d77cbc72e7ae0b0a3", # Julia.tmbundle
|
||||
"e06722add999e7428048abcc067cd85f1f7ca71c", # r.tmbundle
|
||||
"50b14a0e3f03d7ca754dac42ffb33302b5882b78", # smalltalk-tmbundle
|
||||
"eafbc4a2f283752858e6908907f3c0c90188785b", # gap-tmbundle
|
||||
"1faa3a44cac6070f22384332434af37dfaaf2f70", # Stylus
|
||||
"c87e7e574fca543941650e5b0a144b44c02c55d8", # language-crystal
|
||||
"c78ec142ac3126cf639cfd67bd646ed8226d8b74", # atom-language-purescript
|
||||
"341d7f66806fc41d081133d6e51ade856352e056", # FreeMarker.tmbundle
|
||||
"15a394f6bc43400946570b299aee8ae264a1e3ff", # language-renpy
|
||||
"c9118c370411f2f049c746c0fd096554e877aea2", # perl6fe
|
||||
"8ccf886749c32fb7e65d4d1316a7ed0479c93dc9", # language-less
|
||||
"2f03492b52d7dd83b4e7472f01b87c6121e5b1a4", # monkey
|
||||
"bdab9fdc21e6790b479ccb5945b78bc0f6ce2493" # language-blade
|
||||
].freeze
|
||||
|
||||
# List of allowed SPDX license names
|
||||
@@ -90,12 +120,30 @@ class TestGrammars < Minitest::Test
|
||||
end
|
||||
|
||||
def test_submodules_have_approved_licenses
|
||||
unapproved = submodule_licenses.reject { |k,v| LICENSE_WHITELIST.include?(v) || PROJECT_WHITELIST.include?(k) }.map { |k,v| "#{k}: #{v}"}
|
||||
unapproved = submodule_licenses.reject { |k,v| LICENSE_WHITELIST.include?(v) ||
|
||||
PROJECT_WHITELIST.include?(k) ||
|
||||
HASH_WHITELIST.include?(v) }
|
||||
.map { |k,v| "#{k}: #{v}"}
|
||||
message = "The following submodules have unapproved licenses:\n* #{unapproved.join("\n* ")}\n"
|
||||
message << "The license must be added to the LICENSE_WHITELIST in /test/test_grammars.rb once approved."
|
||||
assert_equal [], unapproved, message
|
||||
end
|
||||
|
||||
def test_whitelisted_submodules_dont_have_licenses
|
||||
licensed = submodule_licenses.reject { |k,v| v.nil? }.select { |k,v| PROJECT_WHITELIST.include?(k) }
|
||||
message = "The following whitelisted submodules have a license:\n* #{licensed.keys.join("\n* ")}\n"
|
||||
message << "Please remove them from the project whitelist."
|
||||
assert_equal Hash.new, licensed, message
|
||||
end
|
||||
|
||||
def test_whitelisted_hashes_dont_have_licenses
|
||||
used_hashes = submodule_licenses.values.reject { |v| v.nil? || LICENSE_WHITELIST.include?(v) }
|
||||
unused_hashes = HASH_WHITELIST - used_hashes
|
||||
message = "The following whitelisted license hashes are unused:\n* #{unused_hashes.join("\n* ")}\n"
|
||||
message << "Please remove them from the hash whitelist."
|
||||
assert_equal Array.new, unused_hashes, message
|
||||
end
|
||||
|
||||
def test_submodules_whitelist_has_no_extra_entries
|
||||
skip("Need to work out how to handle dual-licensed entities")
|
||||
extra_whitelist_entries = PROJECT_WHITELIST - submodule_licenses.select { |k,v| v.nil? }.keys
|
||||
@@ -126,7 +174,7 @@ class TestGrammars < Minitest::Test
|
||||
private
|
||||
|
||||
def submodule_paths
|
||||
@submodule_paths ||= `git config --list --file "#{File.join(ROOT, ".gitmodules")}"`.lines.grep(/\.path=/).map { |line| line.chomp.split("=", 2).last }
|
||||
@submodule_paths ||= `git config --list --file "#{File.join(ROOT, ".gitmodules")}"`.lines.grep(/\.path=/).map { |line| line.chomp.split("=", 2).last }.reject { |path| path =~ /CodeMirror/ }
|
||||
end
|
||||
|
||||
# Returns a hash of submodules in the form of submodule_path => license
|
||||
@@ -139,51 +187,18 @@ class TestGrammars < Minitest::Test
|
||||
end
|
||||
|
||||
# Given the path to a submodule, return its SPDX-compliant license key
|
||||
# If the license is unrecognized, return its hash
|
||||
def submodule_license(submodule)
|
||||
# Prefer Licensee to detect a submodule's license
|
||||
project = Licensee::FSProject.new(submodule)
|
||||
project = Licensee::FSProject.new(submodule, detect_readme: true)
|
||||
return project.license.key if project.license
|
||||
|
||||
# We know a license file exists, but Licensee wasn't able to detect the license,
|
||||
# Let's try our own more permissive regex method
|
||||
# We know a license exists, but no method was able to recognize it.
|
||||
# We return the license hash in this case, to uniquely identify it.
|
||||
if project.license_file
|
||||
path = File.expand_path project.license_file.path, submodule
|
||||
license = classify_license(path)
|
||||
return license if license
|
||||
end
|
||||
|
||||
# Neither Licensee nor our own regex was able to detect the license, let's check the readme
|
||||
files = Dir[File.join(ROOT, submodule, "*")]
|
||||
if readme = files.find { |path| File.basename(path) =~ /\Areadme\b/i }
|
||||
classify_license(readme)
|
||||
end
|
||||
end
|
||||
|
||||
def classify_license(path)
|
||||
content = File.read(path)
|
||||
return unless content =~ /\blicen[cs]e\b/i
|
||||
if content.include?("Apache License") && content.include?("2.0")
|
||||
"apache-2.0"
|
||||
elsif content.include?("GNU") && content =~ /general/i && content =~ /public/i
|
||||
if content =~ /version 2/i
|
||||
"gpl-2.0"
|
||||
elsif content =~ /version 3/i
|
||||
"gpl-3.0"
|
||||
end
|
||||
elsif content.include?("GPL") && content.include?("http://www.gnu.org/licenses/gpl.html")
|
||||
"gpl-3.0"
|
||||
elsif content.include?("Creative Commons Attribution-Share Alike 3.0")
|
||||
"cc-by-sa-3.0"
|
||||
elsif content.include?("tidy-license.txt") || content.include?("If not otherwise specified (see below)") || content.include?("Permission to copy, use, modify, sell and distribute this")
|
||||
"textmate"
|
||||
elsif content.include?("Permission is hereby granted") || content =~ /\bMIT\b/
|
||||
"mit"
|
||||
elsif content.include?("This package is provided as-is and is placed in the Public Domain")
|
||||
"public"
|
||||
elsif content.include?("http://www.wtfpl.net/txt/copying/")
|
||||
"wtfpl"
|
||||
elsif content.include?("zlib") && content.include?("license") && content.include?("2. Altered source versions must be plainly marked as such")
|
||||
"zlib"
|
||||
return project.license_file.hash
|
||||
elsif project.readme
|
||||
return project.readme.hash
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -29,7 +29,11 @@ class TestHeuristcs < Minitest::Test
|
||||
hash.each do |language, blobs|
|
||||
Array(blobs).each do |blob|
|
||||
result = Heuristics.call(file_blob(blob), candidates)
|
||||
assert_equal [Language[language]], result, "Failed for #{blob}"
|
||||
if language.nil?
|
||||
assert_equal [], result, "Failed for #{blob}"
|
||||
else
|
||||
assert_equal [Language[language]], result, "Failed for #{blob}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -145,6 +149,26 @@ class TestHeuristcs < Minitest::Test
|
||||
})
|
||||
end
|
||||
|
||||
def test_m_by_heuristics
|
||||
assert_heuristics({
|
||||
"Objective-C" => all_fixtures("Objective-C", "*.m") - all_fixtures("Objective-C", "cocoa_monitor.m"),
|
||||
"Mercury" => all_fixtures("Mercury", "*.m"),
|
||||
"MUF" => all_fixtures("MUF", "*.m"),
|
||||
"M" => all_fixtures("M", "MDB.m"),
|
||||
"Mathematica" => all_fixtures("Mathematica", "*.m") - all_fixtures("Mathematica", "Problem12.m"),
|
||||
"Matlab" => all_fixtures("Matlab", "create_ieee_paper_plots.m"),
|
||||
"Limbo" => all_fixtures("Limbo", "*.m"),
|
||||
nil => ["Objective-C/cocoa_monitor.m"]
|
||||
})
|
||||
end
|
||||
|
||||
def test_md_by_heuristics
|
||||
assert_heuristics({
|
||||
"Markdown" => all_fixtures("Markdown", "*.md"),
|
||||
"GCC machine description" => all_fixtures("GCC machine description", "*.md")
|
||||
})
|
||||
end
|
||||
|
||||
# Candidate languages = ["C++", "Objective-C"]
|
||||
def test_obj_c_by_heuristics
|
||||
# Only calling out '.h' filenames as these are the ones causing issues
|
||||
|
||||
@@ -345,14 +345,26 @@ class TestLanguage < Minitest::Test
|
||||
end
|
||||
|
||||
def test_ace_modes
|
||||
assert Language.ace_modes.include?(Language['Ruby'])
|
||||
assert Language.ace_modes.include?(Language['FORTRAN'])
|
||||
silence_warnings do
|
||||
assert Language.ace_modes.include?(Language['Ruby'])
|
||||
assert Language.ace_modes.include?(Language['FORTRAN'])
|
||||
end
|
||||
end
|
||||
|
||||
def test_codemirror_mode
|
||||
assert_equal 'ruby', Language['Ruby'].codemirror_mode
|
||||
assert_equal 'javascript', Language['JavaScript'].codemirror_mode
|
||||
assert_equal 'clike', Language['C'].codemirror_mode
|
||||
assert_equal 'clike', Language['C++'].codemirror_mode
|
||||
end
|
||||
|
||||
def test_codemirror_mime_type
|
||||
assert_equal 'text/x-ruby', Language['Ruby'].codemirror_mime_type
|
||||
assert_equal 'text/javascript', Language['JavaScript'].codemirror_mime_type
|
||||
assert_equal 'text/x-csrc', Language['C'].codemirror_mime_type
|
||||
assert_equal 'text/x-c++src', Language['C++'].codemirror_mime_type
|
||||
end
|
||||
|
||||
def test_wrap
|
||||
assert_equal false, Language['C'].wrap
|
||||
assert_equal true, Language['Markdown'].wrap
|
||||
@@ -440,6 +452,40 @@ class TestLanguage < Minitest::Test
|
||||
assert missing.empty?, message
|
||||
end
|
||||
|
||||
def test_codemirror_modes_present
|
||||
Language.all.each do |language|
|
||||
if language.codemirror_mode || language.codemirror_mime_type
|
||||
assert language.codemirror_mode, "#{language.inspect} missing CodeMirror mode"
|
||||
assert language.codemirror_mime_type, "#{language.inspect} missing CodeMirror MIME mode"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_valid_codemirror_mode
|
||||
Language.all.each do |language|
|
||||
if mode = language.codemirror_mode
|
||||
assert File.exist?(File.expand_path("../../vendor/CodeMirror/mode/#{mode}", __FILE__)), "#{mode} isn't a valid CodeMirror mode"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_codemirror_mode_and_mime_defined_by_meta_mapping
|
||||
meta = File.read(File.expand_path("../../vendor/CodeMirror/mode/meta.js", __FILE__))
|
||||
Language.all.each do |language|
|
||||
next unless language.codemirror_mode && language.codemirror_mime_type
|
||||
assert meta.match(/^.+#{Regexp.escape(language.codemirror_mime_type)}.+#{Regexp.escape(language.codemirror_mode)}.+$/), "#{language.inspect}: #{language.codemirror_mime_type} not defined under #{language.codemirror_mode}"
|
||||
end
|
||||
end
|
||||
|
||||
def test_codemirror_mime_declared_in_mode_file
|
||||
Language.all.each do |language|
|
||||
next unless language.codemirror_mode && language.codemirror_mime_type
|
||||
filename = File.expand_path("../../vendor/CodeMirror/mode/#{language.codemirror_mode}/#{language.codemirror_mode}.js", __FILE__)
|
||||
assert File.exist?(filename), "#{filename} does not exist"
|
||||
assert File.read(filename).match(language.codemirror_mime_type), "#{language.inspect}: #{language.codemirror_mime_type} not defined in #{filename}"
|
||||
end
|
||||
end
|
||||
|
||||
def test_all_popular_languages_exist
|
||||
popular = YAML.load(File.read(File.expand_path("../../lib/linguist/popular.yml", __FILE__)))
|
||||
|
||||
@@ -448,4 +494,12 @@ class TestLanguage < Minitest::Test
|
||||
message << missing.sort.join("\n")
|
||||
assert missing.empty?, message
|
||||
end
|
||||
|
||||
def test_no_unused_colours
|
||||
Language.all.each do |language|
|
||||
next unless language.type == :data || language.type == :prose ||
|
||||
language.group.to_s != language.name
|
||||
assert !language.color, "Unused colour assigned to #{language.name}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
1
vendor/CodeMirror
vendored
Submodule
1
vendor/CodeMirror
vendored
Submodule
Submodule vendor/CodeMirror added at db12d64243
2
vendor/grammars/Docker.tmbundle
vendored
2
vendor/grammars/Docker.tmbundle
vendored
Submodule vendor/grammars/Docker.tmbundle updated: c6230cb62c...378d7eb156
2
vendor/grammars/Handlebars
vendored
2
vendor/grammars/Handlebars
vendored
Submodule vendor/grammars/Handlebars updated: c07f986ae7...48053b9263
2
vendor/grammars/Lean.tmbundle
vendored
2
vendor/grammars/Lean.tmbundle
vendored
Submodule vendor/grammars/Lean.tmbundle updated: a1a3818ecf...fa8fcd2856
1
vendor/grammars/MQL5-sublime
vendored
Submodule
1
vendor/grammars/MQL5-sublime
vendored
Submodule
Submodule vendor/grammars/MQL5-sublime added at a41ed3b5e5
2
vendor/grammars/MagicPython
vendored
2
vendor/grammars/MagicPython
vendored
Submodule vendor/grammars/MagicPython updated: f4ff7de27f...94a6bb00db
2
vendor/grammars/Sublime-SQF-Language
vendored
2
vendor/grammars/Sublime-SQF-Language
vendored
Submodule vendor/grammars/Sublime-SQF-Language updated: 984606e146...0e72aacb4a
2
vendor/grammars/SublimeGDB
vendored
2
vendor/grammars/SublimeGDB
vendored
Submodule vendor/grammars/SublimeGDB updated: d9a512da6e...c39ee600ba
2
vendor/grammars/SublimePapyrus
vendored
2
vendor/grammars/SublimePapyrus
vendored
Submodule vendor/grammars/SublimePapyrus updated: 51ec72ab00...a08e2c0d76
2
vendor/grammars/actionscript3-tmbundle
vendored
2
vendor/grammars/actionscript3-tmbundle
vendored
Submodule vendor/grammars/actionscript3-tmbundle updated: d24ad7dec9...bb76f18706
2
vendor/grammars/atom-language-1c-bsl
vendored
2
vendor/grammars/atom-language-1c-bsl
vendored
Submodule vendor/grammars/atom-language-1c-bsl updated: 787ea4fd3a...9f2fbd73dd
2
vendor/grammars/atom-language-purescript
vendored
2
vendor/grammars/atom-language-purescript
vendored
Submodule vendor/grammars/atom-language-purescript updated: fc8b0bf9da...c590de5bcb
2
vendor/grammars/c.tmbundle
vendored
2
vendor/grammars/c.tmbundle
vendored
Submodule vendor/grammars/c.tmbundle updated: 88cc9b71fa...936e4347d2
2
vendor/grammars/ejs-tmbundle
vendored
2
vendor/grammars/ejs-tmbundle
vendored
Submodule vendor/grammars/ejs-tmbundle updated: 0854026c99...5e48fff725
2
vendor/grammars/elixir-tmbundle
vendored
2
vendor/grammars/elixir-tmbundle
vendored
Submodule vendor/grammars/elixir-tmbundle updated: d632e68d09...319bbe2022
2
vendor/grammars/html.tmbundle
vendored
2
vendor/grammars/html.tmbundle
vendored
Submodule vendor/grammars/html.tmbundle updated: 9f812c89f4...d87d22a320
2
vendor/grammars/language-asn1
vendored
2
vendor/grammars/language-asn1
vendored
Submodule vendor/grammars/language-asn1 updated: bc3811c770...208b6d9ebe
2
vendor/grammars/language-clojure
vendored
2
vendor/grammars/language-clojure
vendored
Submodule vendor/grammars/language-clojure updated: 51484ae2f7...105fd2a3a4
2
vendor/grammars/language-coffee-script
vendored
2
vendor/grammars/language-coffee-script
vendored
Submodule vendor/grammars/language-coffee-script updated: b413773574...1c528b5929
2
vendor/grammars/language-crystal
vendored
2
vendor/grammars/language-crystal
vendored
Submodule vendor/grammars/language-crystal updated: 0d7ac572e4...959bfbe979
2
vendor/grammars/language-csharp
vendored
2
vendor/grammars/language-csharp
vendored
Submodule vendor/grammars/language-csharp updated: db4468545a...daf3fe2d64
2
vendor/grammars/language-emacs-lisp
vendored
2
vendor/grammars/language-emacs-lisp
vendored
Submodule vendor/grammars/language-emacs-lisp updated: 77da742484...1be3d89bbe
2
vendor/grammars/language-gfm
vendored
2
vendor/grammars/language-gfm
vendored
Submodule vendor/grammars/language-gfm updated: a55c18c3dc...17b24ee54e
2
vendor/grammars/language-graphql
vendored
2
vendor/grammars/language-graphql
vendored
Submodule vendor/grammars/language-graphql updated: 4be0d1ae7b...d3d9dc67b7
2
vendor/grammars/language-haskell
vendored
2
vendor/grammars/language-haskell
vendored
Submodule vendor/grammars/language-haskell updated: a53aca3856...04b140b2ae
2
vendor/grammars/language-javascript
vendored
2
vendor/grammars/language-javascript
vendored
Submodule vendor/grammars/language-javascript updated: 101a00adb2...f1cf9a61e8
2
vendor/grammars/language-less
vendored
2
vendor/grammars/language-less
vendored
Submodule vendor/grammars/language-less updated: f34bb335c7...256cb078f8
2
vendor/grammars/language-python
vendored
2
vendor/grammars/language-python
vendored
Submodule vendor/grammars/language-python updated: 719e4404d2...14acf8da68
2
vendor/grammars/language-restructuredtext
vendored
2
vendor/grammars/language-restructuredtext
vendored
Submodule vendor/grammars/language-restructuredtext updated: f4f931ab7f...659de4b4cd
2
vendor/grammars/language-roff
vendored
2
vendor/grammars/language-roff
vendored
Submodule vendor/grammars/language-roff updated: 743e1621c6...e796cb463f
2
vendor/grammars/language-shellscript
vendored
2
vendor/grammars/language-shellscript
vendored
Submodule vendor/grammars/language-shellscript updated: 6d66ca58c0...201d9b827e
2
vendor/grammars/language-viml
vendored
2
vendor/grammars/language-viml
vendored
Submodule vendor/grammars/language-viml updated: 5030fb8b02...cec8c86334
2
vendor/grammars/language-yaml
vendored
2
vendor/grammars/language-yaml
vendored
Submodule vendor/grammars/language-yaml updated: 784cecc64f...bfc075c017
2
vendor/grammars/latex.tmbundle
vendored
2
vendor/grammars/latex.tmbundle
vendored
Submodule vendor/grammars/latex.tmbundle updated: b973d17a03...68f128d4cd
2
vendor/grammars/objective-c.tmbundle
vendored
2
vendor/grammars/objective-c.tmbundle
vendored
Submodule vendor/grammars/objective-c.tmbundle updated: d80c2bbdef...e4ade8721f
2
vendor/grammars/sublime-autoit
vendored
2
vendor/grammars/sublime-autoit
vendored
Submodule vendor/grammars/sublime-autoit updated: 6d87c55fd0...32e026468b
2
vendor/grammars/sublime-pony
vendored
2
vendor/grammars/sublime-pony
vendored
Submodule vendor/grammars/sublime-pony updated: 02f37b174e...a4fe061d26
2
vendor/grammars/sublime-rust
vendored
2
vendor/grammars/sublime-rust
vendored
Submodule vendor/grammars/sublime-rust updated: bb8d73c7a2...9792e3be0e
2
vendor/grammars/sublime-typescript
vendored
2
vendor/grammars/sublime-typescript
vendored
Submodule vendor/grammars/sublime-typescript updated: cfe1d98238...3475f8febc
2
vendor/grammars/sublimeassembly
vendored
2
vendor/grammars/sublimeassembly
vendored
Submodule vendor/grammars/sublimeassembly updated: edb58c8246...2599ced076
2
vendor/grammars/sublimeprolog
vendored
2
vendor/grammars/sublimeprolog
vendored
Submodule vendor/grammars/sublimeprolog updated: c71d8a1e0f...555af289e0
2
vendor/grammars/swift.tmbundle
vendored
2
vendor/grammars/swift.tmbundle
vendored
Submodule vendor/grammars/swift.tmbundle updated: b3cb4372f2...0d618bff2b
2
vendor/grammars/vue-syntax-highlight
vendored
2
vendor/grammars/vue-syntax-highlight
vendored
Submodule vendor/grammars/vue-syntax-highlight updated: f95b61a40d...e6f8cd9668
26
vendor/licenses/grammar/MQL5-sublime.txt
vendored
Normal file
26
vendor/licenses/grammar/MQL5-sublime.txt
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
type: grammar
|
||||
name: MQL5-sublime
|
||||
license: mit
|
||||
---
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2016 mqsoft
|
||||
|
||||
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.
|
||||
Reference in New Issue
Block a user