mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Merge branch 'master' into grammar-list
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
||||
/Gemfile.lock
|
||||
.bundle/
|
||||
.idea
|
||||
benchmark/
|
||||
lib/linguist/samples.json
|
||||
/grammars
|
||||
|
||||
43
.gitmodules
vendored
43
.gitmodules
vendored
@@ -12,7 +12,7 @@
|
||||
url = https://github.com/Drako/SublimeBrainfuck
|
||||
[submodule "vendor/grammars/awk-sublime"]
|
||||
path = vendor/grammars/awk-sublime
|
||||
url = https://github.com/JohnNilsson/awk-sublime
|
||||
url = https://github.com/github-linguist/awk-sublime
|
||||
[submodule "vendor/grammars/Sublime-SQF-Language"]
|
||||
path = vendor/grammars/Sublime-SQF-Language
|
||||
url = https://github.com/JonBons/Sublime-SQF-Language
|
||||
@@ -22,15 +22,15 @@
|
||||
[submodule "vendor/grammars/Sublime-REBOL"]
|
||||
path = vendor/grammars/Sublime-REBOL
|
||||
url = https://github.com/Oldes/Sublime-REBOL
|
||||
[submodule "vendor/grammars/Sublime-VimL"]
|
||||
path = vendor/grammars/Sublime-VimL
|
||||
url = https://github.com/SalGnt/Sublime-VimL
|
||||
[submodule "vendor/grammars/language-viml"]
|
||||
path = vendor/grammars/language-viml
|
||||
url = https://github.com/Alhadis/language-viml
|
||||
[submodule "vendor/grammars/ColdFusion"]
|
||||
path = vendor/grammars/ColdFusion
|
||||
url = https://github.com/SublimeText/ColdFusion
|
||||
[submodule "vendor/grammars/NSIS"]
|
||||
path = vendor/grammars/NSIS
|
||||
url = https://github.com/SublimeText/NSIS
|
||||
url = https://github.com/github-linguist/NSIS
|
||||
[submodule "vendor/grammars/NimLime"]
|
||||
path = vendor/grammars/NimLime
|
||||
url = https://github.com/Varriount/NimLime
|
||||
@@ -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
|
||||
@@ -412,9 +409,9 @@
|
||||
[submodule "vendor/grammars/oz-tmbundle"]
|
||||
path = vendor/grammars/oz-tmbundle
|
||||
url = https://github.com/eregon/oz-tmbundle
|
||||
[submodule "vendor/grammars/ebundles"]
|
||||
path = vendor/grammars/ebundles
|
||||
url = https://github.com/ericzou/ebundles
|
||||
[submodule "vendor/grammars/language-batchfile"]
|
||||
path = vendor/grammars/language-batchfile
|
||||
url = https://github.com/mmims/language-batchfile
|
||||
[submodule "vendor/grammars/sublime-mask"]
|
||||
path = vendor/grammars/sublime-mask
|
||||
url = https://github.com/tenbits/sublime-mask
|
||||
@@ -559,7 +556,7 @@
|
||||
url = https://github.com/ShaneWilton/sublime-smali
|
||||
[submodule "vendor/grammars/language-jsoniq"]
|
||||
path = vendor/grammars/language-jsoniq
|
||||
url = http://github.com/wcandillon/language-jsoniq
|
||||
url = https://github.com/wcandillon/language-jsoniq
|
||||
[submodule "vendor/grammars/atom-fsharp"]
|
||||
path = vendor/grammars/atom-fsharp
|
||||
url = https://github.com/fsprojects/atom-fsharp
|
||||
@@ -602,9 +599,6 @@
|
||||
[submodule "vendor/grammars/X10"]
|
||||
path = vendor/grammars/X10
|
||||
url = https://github.com/x10-lang/x10-highlighting
|
||||
[submodule "vendor/grammars/language-babel"]
|
||||
path = vendor/grammars/language-babel
|
||||
url = https://github.com/gandm/language-babel
|
||||
[submodule "vendor/grammars/UrWeb-Language-Definition"]
|
||||
path = vendor/grammars/UrWeb-Language-Definition
|
||||
url = https://github.com/gwalborn/UrWeb-Language-Definition.git
|
||||
@@ -669,8 +663,8 @@
|
||||
path = vendor/grammars/pig-latin
|
||||
url = https://github.com/goblindegook/sublime-text-pig-latin
|
||||
[submodule "vendor/grammars/sourcepawn"]
|
||||
path = vendor/grammars/sourcepawn
|
||||
url = https://github.com/austinwagner/sublime-sourcepawn
|
||||
path = vendor/grammars/sourcepawn
|
||||
url = https://github.com/github-linguist/sublime-sourcepawn
|
||||
[submodule "vendor/grammars/gdscript"]
|
||||
path = vendor/grammars/gdscript
|
||||
url = https://github.com/beefsack/GDScript-sublime
|
||||
@@ -785,6 +779,21 @@ url = https://github.com/austinwagner/sublime-sourcepawn
|
||||
[submodule "vendor/grammars/xquery"]
|
||||
path = vendor/grammars/xquery
|
||||
url = https://github.com/textmate/xquery.tmbundle
|
||||
[submodule "vendor/grammars/language-rpm-spec"]
|
||||
path = vendor/grammars/language-rpm-spec
|
||||
url = https://github.com/waveclaw/language-rpm-spec
|
||||
[submodule "vendor/grammars/language-emacs-lisp"]
|
||||
path = vendor/grammars/language-emacs-lisp
|
||||
url = https://github.com/Alhadis/language-emacs-lisp
|
||||
[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,18 +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 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!
|
||||
@@ -81,10 +79,10 @@ 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:
|
||||
|
||||
- Anyone with commit rights can merge Pull Requests provided that there is a :+1: from a GitHub member of staff
|
||||
@@ -112,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
|
||||
|
||||
122
grammars.yml
122
grammars.yml
@@ -8,9 +8,9 @@ vendor/grammars/Agda.tmbundle:
|
||||
- source.agda
|
||||
vendor/grammars/Alloy.tmbundle:
|
||||
- source.alloy
|
||||
vendor/grammars/AutoHotkey/:
|
||||
vendor/grammars/AutoHotkey:
|
||||
- source.ahk
|
||||
vendor/grammars/BrightScript.tmbundle/:
|
||||
vendor/grammars/BrightScript.tmbundle:
|
||||
- source.brightauthorproject
|
||||
- source.brightscript
|
||||
vendor/grammars/ColdFusion:
|
||||
@@ -20,13 +20,13 @@ vendor/grammars/ColdFusion:
|
||||
- text.html.cfm
|
||||
vendor/grammars/Docker.tmbundle:
|
||||
- source.dockerfile
|
||||
vendor/grammars/Elm/:
|
||||
vendor/grammars/Elm/Syntaxes:
|
||||
- source.elm
|
||||
- text.html.mediawiki.elm-build-output
|
||||
- text.html.mediawiki.elm-documentation
|
||||
vendor/grammars/FreeMarker.tmbundle:
|
||||
- text.html.ftl
|
||||
vendor/grammars/G-Code/:
|
||||
vendor/grammars/G-Code:
|
||||
- source.LS
|
||||
- source.MCPOST
|
||||
- source.MOD
|
||||
@@ -39,7 +39,7 @@ vendor/grammars/IDL-Syntax:
|
||||
vendor/grammars/Isabelle.tmbundle:
|
||||
- source.isabelle.root
|
||||
- source.isabelle.theory
|
||||
vendor/grammars/JSyntax/:
|
||||
vendor/grammars/JSyntax:
|
||||
- source.j
|
||||
vendor/grammars/Julia.tmbundle:
|
||||
- source.julia
|
||||
@@ -47,10 +47,12 @@ 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
|
||||
vendor/grammars/Modelica/:
|
||||
vendor/grammars/Modelica:
|
||||
- source.modelica
|
||||
vendor/grammars/NSIS:
|
||||
- source.nsis
|
||||
@@ -60,7 +62,7 @@ vendor/grammars/NimLime:
|
||||
- source.nimcfg
|
||||
vendor/grammars/PHP-Twig.tmbundle:
|
||||
- text.html.twig
|
||||
vendor/grammars/PogoScript.tmbundle/:
|
||||
vendor/grammars/PogoScript.tmbundle:
|
||||
- source.pogoscript
|
||||
vendor/grammars/RDoc.tmbundle:
|
||||
- text.rdoc
|
||||
@@ -75,10 +77,10 @@ vendor/grammars/Scalate.tmbundle:
|
||||
- text.html.ssp
|
||||
vendor/grammars/Slash.tmbundle:
|
||||
- text.html.slash
|
||||
vendor/grammars/Stata.tmbundle/:
|
||||
vendor/grammars/Stata.tmbundle:
|
||||
- source.mata
|
||||
- source.stata
|
||||
vendor/grammars/Stylus/:
|
||||
vendor/grammars/Stylus:
|
||||
- source.stylus
|
||||
vendor/grammars/Sublime-Coq:
|
||||
- source.coq
|
||||
@@ -88,7 +90,7 @@ vendor/grammars/Sublime-Lasso:
|
||||
- file.lasso
|
||||
vendor/grammars/Sublime-Loom:
|
||||
- source.loomscript
|
||||
vendor/grammars/Sublime-Modula-2/:
|
||||
vendor/grammars/Sublime-Modula-2:
|
||||
- source.modula2
|
||||
vendor/grammars/Sublime-Nit:
|
||||
- source.nit
|
||||
@@ -103,26 +105,24 @@ vendor/grammars/Sublime-SQF-Language:
|
||||
vendor/grammars/Sublime-Text-2-OpenEdge-ABL:
|
||||
- source.abl
|
||||
- text.html.abl
|
||||
vendor/grammars/Sublime-VimL:
|
||||
- source.viml
|
||||
vendor/grammars/SublimeBrainfuck:
|
||||
- source.bf
|
||||
vendor/grammars/SublimeClarion/:
|
||||
vendor/grammars/SublimeClarion:
|
||||
- source.clarion
|
||||
vendor/grammars/SublimeGDB/:
|
||||
vendor/grammars/SublimeGDB:
|
||||
- source.disasm
|
||||
- source.gdb
|
||||
- source.gdb.session
|
||||
- source.gdbregs
|
||||
vendor/grammars/SublimePapyrus/:
|
||||
vendor/grammars/SublimePapyrus:
|
||||
- source.papyrus.skyrim
|
||||
vendor/grammars/SublimePuppet/:
|
||||
vendor/grammars/SublimePuppet:
|
||||
- source.puppet
|
||||
vendor/grammars/SublimeXtend:
|
||||
- source.xtend
|
||||
vendor/grammars/TLA:
|
||||
- source.tla
|
||||
vendor/grammars/TXL/:
|
||||
vendor/grammars/TXL:
|
||||
- source.txl
|
||||
vendor/grammars/Textmate-Gosu-Bundle:
|
||||
- source.gosu.2
|
||||
@@ -136,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
|
||||
@@ -151,20 +151,20 @@ vendor/grammars/antlr.tmbundle:
|
||||
vendor/grammars/apache.tmbundle:
|
||||
- source.apache-config
|
||||
- source.apache-config.mod_perl
|
||||
vendor/grammars/api-blueprint-sublime-plugin/:
|
||||
vendor/grammars/api-blueprint-sublime-plugin:
|
||||
- text.html.markdown.source.gfm.apib
|
||||
- text.html.markdown.source.gfm.mson
|
||||
vendor/grammars/applescript.tmbundle:
|
||||
- source.applescript
|
||||
vendor/grammars/asciidoc.tmbundle/:
|
||||
vendor/grammars/asciidoc.tmbundle:
|
||||
- text.html.asciidoc
|
||||
vendor/grammars/asp.tmbundle:
|
||||
- source.asp
|
||||
- text.html.asp
|
||||
vendor/grammars/assembly/:
|
||||
vendor/grammars/assembly:
|
||||
- objdump.x86asm
|
||||
- source.x86asm
|
||||
vendor/grammars/atom-fsharp/:
|
||||
vendor/grammars/atom-fsharp:
|
||||
- source.fsharp
|
||||
- source.fsharp.fsi
|
||||
- source.fsharp.fsl
|
||||
@@ -174,16 +174,16 @@ vendor/grammars/atom-language-1c-bsl:
|
||||
- source.sdbl
|
||||
vendor/grammars/atom-language-clean:
|
||||
- source.clean
|
||||
vendor/grammars/atom-language-purescript/:
|
||||
vendor/grammars/atom-language-purescript:
|
||||
- source.purescript
|
||||
vendor/grammars/atom-language-srt:
|
||||
- text.srt
|
||||
vendor/grammars/atom-language-stan/:
|
||||
vendor/grammars/atom-language-stan:
|
||||
- source.stan
|
||||
vendor/grammars/atom-salt:
|
||||
- source.python.salt
|
||||
- source.yaml.salt
|
||||
vendor/grammars/atomic-dreams/:
|
||||
vendor/grammars/atomic-dreams:
|
||||
- source.dm
|
||||
- source.dmf
|
||||
vendor/grammars/ats:
|
||||
@@ -194,7 +194,7 @@ vendor/grammars/bison.tmbundle:
|
||||
- source.bison
|
||||
vendor/grammars/blitzmax:
|
||||
- source.blitzmax
|
||||
vendor/grammars/boo/:
|
||||
vendor/grammars/boo:
|
||||
- source.boo
|
||||
vendor/grammars/bro-sublime:
|
||||
- source.bro
|
||||
@@ -219,7 +219,7 @@ vendor/grammars/cool-tmbundle:
|
||||
vendor/grammars/cpp-qt.tmbundle:
|
||||
- source.c++.qt
|
||||
- source.qmake
|
||||
vendor/grammars/creole/:
|
||||
vendor/grammars/creole:
|
||||
- text.html.creole
|
||||
vendor/grammars/css.tmbundle:
|
||||
- source.css
|
||||
@@ -243,9 +243,7 @@ vendor/grammars/dylan.tmbundle:
|
||||
- source.dylan
|
||||
- source.lid
|
||||
- source.makegen
|
||||
vendor/grammars/ebundles/Bundles/MSDOS batch file.tmbundle:
|
||||
- source.dosbatch
|
||||
vendor/grammars/ec.tmbundle/:
|
||||
vendor/grammars/ec.tmbundle:
|
||||
- source.c.ec
|
||||
vendor/grammars/eiffel.tmbundle:
|
||||
- source.eiffel
|
||||
@@ -270,9 +268,9 @@ vendor/grammars/forth:
|
||||
vendor/grammars/fortran.tmbundle:
|
||||
- source.fortran
|
||||
- source.fortran.modern
|
||||
vendor/grammars/gap-tmbundle/:
|
||||
vendor/grammars/gap-tmbundle:
|
||||
- source.gap
|
||||
vendor/grammars/gdscript/:
|
||||
vendor/grammars/gdscript:
|
||||
- source.gdscript
|
||||
vendor/grammars/gettext.tmbundle:
|
||||
- source.po
|
||||
@@ -300,7 +298,7 @@ vendor/grammars/idl.tmbundle:
|
||||
- source.idl
|
||||
- source.idl-dlm
|
||||
- text.idl-idldoc
|
||||
vendor/grammars/idris/:
|
||||
vendor/grammars/idris:
|
||||
- source.idris
|
||||
vendor/grammars/ini.tmbundle:
|
||||
- source.ini
|
||||
@@ -332,12 +330,14 @@ vendor/grammars/language-apl:
|
||||
- source.apl
|
||||
vendor/grammars/language-asn1:
|
||||
- source.asn
|
||||
vendor/grammars/language-babel/:
|
||||
vendor/grammars/language-babel:
|
||||
- source.js.jsx
|
||||
- source.regexp.babel
|
||||
vendor/grammars/language-blade/:
|
||||
vendor/grammars/language-batchfile:
|
||||
- source.batchfile
|
||||
vendor/grammars/language-blade:
|
||||
- text.html.php.blade
|
||||
vendor/grammars/language-click/:
|
||||
vendor/grammars/language-click:
|
||||
- source.click
|
||||
vendor/grammars/language-clojure:
|
||||
- source.clojure
|
||||
@@ -377,12 +377,13 @@ 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/:
|
||||
vendor/grammars/language-jsoniq:
|
||||
- source.jq
|
||||
- source.xq
|
||||
vendor/grammars/language-less/:
|
||||
vendor/grammars/language-less:
|
||||
- source.css.less
|
||||
vendor/grammars/language-maxscript:
|
||||
- source.maxscript
|
||||
@@ -402,6 +403,9 @@ vendor/grammars/language-roff:
|
||||
- source.pic
|
||||
- text.roff
|
||||
- text.runoff
|
||||
vendor/grammars/language-rpm-spec:
|
||||
- source.changelogs.rpm-spec
|
||||
- source.rpm-spec
|
||||
vendor/grammars/language-shellscript:
|
||||
- source.shell
|
||||
- text.shell-session
|
||||
@@ -411,6 +415,8 @@ vendor/grammars/language-toc-wow:
|
||||
- source.toc
|
||||
vendor/grammars/language-turing:
|
||||
- source.turing
|
||||
vendor/grammars/language-viml:
|
||||
- source.viml
|
||||
vendor/grammars/language-wavefront:
|
||||
- source.wavefront.mtl
|
||||
- source.wavefront.obj
|
||||
@@ -418,7 +424,7 @@ vendor/grammars/language-xbase:
|
||||
- source.harbour
|
||||
vendor/grammars/language-yaml:
|
||||
- source.yaml
|
||||
vendor/grammars/language-yang/:
|
||||
vendor/grammars/language-yang:
|
||||
- source.yang
|
||||
vendor/grammars/latex.tmbundle:
|
||||
- text.bibtex
|
||||
@@ -452,11 +458,11 @@ vendor/grammars/matlab.tmbundle:
|
||||
- source.octave
|
||||
vendor/grammars/maven.tmbundle:
|
||||
- text.xml.pom
|
||||
vendor/grammars/mediawiki.tmbundle/:
|
||||
vendor/grammars/mediawiki.tmbundle:
|
||||
- text.html.mediawiki
|
||||
vendor/grammars/mercury-tmlanguage:
|
||||
- source.mercury
|
||||
vendor/grammars/monkey/:
|
||||
vendor/grammars/monkey:
|
||||
- source.monkey
|
||||
vendor/grammars/moonscript-tmbundle:
|
||||
- source.moonscript
|
||||
@@ -490,9 +496,9 @@ vendor/grammars/parrot:
|
||||
- source.parrot.pir
|
||||
vendor/grammars/pascal.tmbundle:
|
||||
- source.pascal
|
||||
vendor/grammars/pawn-sublime-language/:
|
||||
vendor/grammars/pawn-sublime-language:
|
||||
- source.pawn
|
||||
vendor/grammars/perl.tmbundle/:
|
||||
vendor/grammars/perl.tmbundle:
|
||||
- source.perl
|
||||
- source.perl.6
|
||||
vendor/grammars/perl6fe:
|
||||
@@ -503,7 +509,7 @@ vendor/grammars/php-smarty.tmbundle:
|
||||
- text.html.smarty
|
||||
vendor/grammars/php.tmbundle:
|
||||
- text.html.php
|
||||
vendor/grammars/pig-latin/:
|
||||
vendor/grammars/pig-latin:
|
||||
- source.pig_latin
|
||||
vendor/grammars/pike-textmate:
|
||||
- source.pike
|
||||
@@ -542,11 +548,11 @@ vendor/grammars/scilab.tmbundle:
|
||||
- source.scilab
|
||||
vendor/grammars/secondlife-lsl:
|
||||
- source.lsl
|
||||
vendor/grammars/smali-sublime/smali.tmLanguage:
|
||||
vendor/grammars/smali-sublime:
|
||||
- source.smali
|
||||
vendor/grammars/smalltalk-tmbundle:
|
||||
- source.smalltalk
|
||||
vendor/grammars/sourcepawn/:
|
||||
vendor/grammars/sourcepawn:
|
||||
- source.sp
|
||||
vendor/grammars/sql.tmbundle:
|
||||
- source.sql
|
||||
@@ -557,9 +563,9 @@ vendor/grammars/standard-ml.tmbundle:
|
||||
- source.ml
|
||||
vendor/grammars/sublime-MuPAD:
|
||||
- source.mupad
|
||||
vendor/grammars/sublime-aspectj/:
|
||||
vendor/grammars/sublime-aspectj:
|
||||
- source.aspectj
|
||||
vendor/grammars/sublime-autoit/:
|
||||
vendor/grammars/sublime-autoit:
|
||||
- source.autoit
|
||||
vendor/grammars/sublime-befunge:
|
||||
- source.befunge
|
||||
@@ -567,12 +573,12 @@ vendor/grammars/sublime-bsv:
|
||||
- source.bsv
|
||||
vendor/grammars/sublime-cirru:
|
||||
- source.cirru
|
||||
vendor/grammars/sublime-clips/:
|
||||
vendor/grammars/sublime-clips:
|
||||
- source.clips
|
||||
vendor/grammars/sublime-glsl:
|
||||
- source.essl
|
||||
- source.glsl
|
||||
vendor/grammars/sublime-golo/:
|
||||
vendor/grammars/sublime-golo:
|
||||
- source.golo
|
||||
vendor/grammars/sublime-mask:
|
||||
- source.mask
|
||||
@@ -581,27 +587,27 @@ vendor/grammars/sublime-netlinx:
|
||||
- source.netlinx.erb
|
||||
vendor/grammars/sublime-nginx:
|
||||
- source.nginx
|
||||
vendor/grammars/sublime-opal/:
|
||||
vendor/grammars/sublime-opal:
|
||||
- source.opal
|
||||
- source.opalsysdefs
|
||||
vendor/grammars/sublime-pony:
|
||||
- source.pony
|
||||
vendor/grammars/sublime-rexx/:
|
||||
vendor/grammars/sublime-rexx:
|
||||
- source.rexx
|
||||
vendor/grammars/sublime-robot-plugin:
|
||||
- text.robot
|
||||
vendor/grammars/sublime-rust:
|
||||
- source.rust
|
||||
vendor/grammars/sublime-spintools/:
|
||||
vendor/grammars/sublime-spintools:
|
||||
- source.regexp.spin
|
||||
- source.spin
|
||||
vendor/grammars/sublime-tea:
|
||||
- source.tea
|
||||
vendor/grammars/sublime-terra:
|
||||
- source.terra
|
||||
vendor/grammars/sublime-text-ox/:
|
||||
vendor/grammars/sublime-text-ox:
|
||||
- source.ox
|
||||
vendor/grammars/sublime-typescript/:
|
||||
vendor/grammars/sublime-typescript:
|
||||
- source.ts
|
||||
- source.tsx
|
||||
- text.error-list
|
||||
@@ -613,9 +619,9 @@ vendor/grammars/sublime_cobol:
|
||||
- source.cobol
|
||||
- source.jcl
|
||||
- source.opencobol
|
||||
vendor/grammars/sublimeassembly/:
|
||||
vendor/grammars/sublimeassembly:
|
||||
- source.assembly
|
||||
vendor/grammars/sublimeprolog/:
|
||||
vendor/grammars/sublimeprolog:
|
||||
- source.prolog
|
||||
- source.prolog.eclipse
|
||||
vendor/grammars/sublimetext-cuda-cpp:
|
||||
@@ -638,7 +644,7 @@ vendor/grammars/vhdl:
|
||||
- source.vhdl
|
||||
vendor/grammars/vue-syntax-highlight:
|
||||
- text.html.vue
|
||||
vendor/grammars/xc.tmbundle/:
|
||||
vendor/grammars/xc.tmbundle:
|
||||
- source.xc
|
||||
vendor/grammars/xml.tmbundle:
|
||||
- text.xml
|
||||
|
||||
@@ -56,6 +56,7 @@ module Linguist
|
||||
generated_net_specflow_feature_file? ||
|
||||
composer_lock? ||
|
||||
node_modules? ||
|
||||
go_vendor? ||
|
||||
npm_shrinkwrap? ||
|
||||
godeps? ||
|
||||
generated_by_zephir? ||
|
||||
@@ -304,6 +305,14 @@ module Linguist
|
||||
!!name.match(/node_modules\//)
|
||||
end
|
||||
|
||||
# Internal: Is the blob part of the Go vendor/ tree,
|
||||
# not meant for humans in pull requests.
|
||||
#
|
||||
# Returns true or false.
|
||||
def go_vendor?
|
||||
!!name.match(/vendor\/((?!-)[-0-9A-Za-z]+(?<!-)\.)+(com|edu|gov|in|me|net|org|fm|io)/)
|
||||
end
|
||||
|
||||
# Internal: Is the blob a generated npm shrinkwrap file.
|
||||
#
|
||||
# Returns true or false.
|
||||
|
||||
@@ -144,10 +144,22 @@ module Linguist
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".for", ".f" do |data|
|
||||
fortran_rx = /^([c*][^abd-z]| (subroutine|program|end|data)\s|\s*!)/i
|
||||
|
||||
disambiguate ".f" do |data|
|
||||
if /^: /.match(data)
|
||||
Language["Forth"]
|
||||
elsif /^([c*][^abd-z]| (subroutine|program|end)\s|\s*!)/i.match(data)
|
||||
elsif data.include?("flowop")
|
||||
Language["Filebench WML"]
|
||||
elsif fortran_rx.match(data)
|
||||
Language["FORTRAN"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".for" do |data|
|
||||
if /^: /.match(data)
|
||||
Language["Forth"]
|
||||
elsif fortran_rx.match(data)
|
||||
Language["FORTRAN"]
|
||||
end
|
||||
end
|
||||
@@ -190,6 +202,8 @@ module Linguist
|
||||
disambiguate ".inc" do |data|
|
||||
if /^<\?(?:php)?/.match(data)
|
||||
Language["PHP"]
|
||||
elsif /^\s*#(declare|local|macro|while)\s/.match(data)
|
||||
Language["POV-Ray SDL"]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -230,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"]
|
||||
@@ -240,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"]
|
||||
@@ -354,7 +368,7 @@ module Linguist
|
||||
disambiguate ".r" do |data|
|
||||
if /\bRebol\b/i.match(data)
|
||||
Language["Rebol"]
|
||||
elsif data.include?("<-")
|
||||
elsif /<-|^\s*#/.match(data)
|
||||
Language["R"]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -20,10 +20,11 @@ module Linguist
|
||||
#
|
||||
# Languages are defined in `lib/linguist/languages.yml`.
|
||||
class Language
|
||||
@languages = []
|
||||
@index = {}
|
||||
@name_index = {}
|
||||
@alias_index = {}
|
||||
@languages = []
|
||||
@index = {}
|
||||
@name_index = {}
|
||||
@alias_index = {}
|
||||
@language_id_index = {}
|
||||
|
||||
@extension_index = Hash.new { |h,k| h[k] = [] }
|
||||
@interpreter_index = Hash.new { |h,k| h[k] = [] }
|
||||
@@ -84,6 +85,8 @@ module Linguist
|
||||
@filename_index[filename] << language
|
||||
end
|
||||
|
||||
@language_id_index[language.language_id] = language
|
||||
|
||||
language
|
||||
end
|
||||
|
||||
@@ -193,6 +196,19 @@ module Linguist
|
||||
@interpreter_index[interpreter]
|
||||
end
|
||||
|
||||
# Public: Look up Languages by its language_id.
|
||||
#
|
||||
# language_id - Integer of language_id
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# Language.find_by_id(100)
|
||||
# # => [#<Language name="Elixir">]
|
||||
#
|
||||
# Returns the matching Language
|
||||
def self.find_by_id(language_id)
|
||||
@language_id_index[language_id.to_i]
|
||||
end
|
||||
|
||||
# Public: Look up Language by its name.
|
||||
#
|
||||
@@ -251,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
|
||||
|
||||
@@ -284,11 +301,16 @@ module Linguist
|
||||
end
|
||||
|
||||
@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
|
||||
@language_id = attributes[:language_id]
|
||||
|
||||
# Set extensions or default to [].
|
||||
@extensions = attributes[:extensions] || []
|
||||
@interpreters = attributes[:interpreters] || []
|
||||
@@ -351,6 +373,17 @@ module Linguist
|
||||
# Returns the name String
|
||||
attr_reader :search_term
|
||||
|
||||
# Public: Get language_id (used in GitHub search)
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# # => "1"
|
||||
# # => "2"
|
||||
# # => "3"
|
||||
#
|
||||
# Returns the integer language_id
|
||||
attr_reader :language_id
|
||||
|
||||
# Public: Get the name of a TextMate-compatible scope
|
||||
#
|
||||
# Returns the scope
|
||||
@@ -367,6 +400,31 @@ module Linguist
|
||||
# Returns a String name or nil
|
||||
attr_reader :ace_mode
|
||||
|
||||
# Public: Get CodeMirror mode
|
||||
#
|
||||
# Maps to a directory in the `mode/` source code.
|
||||
# https://github.com/codemirror/CodeMirror/tree/master/mode
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# # => "nil"
|
||||
# # => "javascript"
|
||||
# # => "clike"
|
||||
#
|
||||
# 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
|
||||
@@ -543,10 +601,13 @@ module Linguist
|
||||
:aliases => options['aliases'],
|
||||
: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),
|
||||
:search_term => options['search_term'],
|
||||
:language_id => options['language_id'],
|
||||
:extensions => Array(options['extensions']),
|
||||
:interpreters => options['interpreters'].sort,
|
||||
:filenames => options['filenames'],
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,19 +1,98 @@
|
||||
module Linguist
|
||||
module Strategy
|
||||
class Modeline
|
||||
EMACS_MODELINE = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i
|
||||
EMACS_MODELINE = /
|
||||
-\*-
|
||||
(?:
|
||||
# Short form: `-*- ruby -*-`
|
||||
\s* (?= [^:;\s]+ \s* -\*-)
|
||||
|
|
||||
# Longer form: `-*- foo:bar; mode: ruby; -*-`
|
||||
(?:
|
||||
.*? # Preceding variables: `-*- foo:bar bar:baz;`
|
||||
[;\s] # Which are delimited by spaces or semicolons
|
||||
|
|
||||
(?<=-\*-) # Not preceded by anything: `-*-mode:ruby-*-`
|
||||
)
|
||||
mode # Major mode indicator
|
||||
\s*:\s* # Allow whitespace around colon: `mode : ruby`
|
||||
)
|
||||
([^:;\s]+) # Name of mode
|
||||
|
||||
# First form vim modeline
|
||||
# [text]{white}{vi:|vim:|ex:}[white]{options}
|
||||
# ex: 'vim: syntax=ruby'
|
||||
VIM_MODELINE_1 = /(?:vim|vi|ex):\s*(?:ft|filetype|syntax)=(\w+)\s?/i
|
||||
# Ensure the mode is terminated correctly
|
||||
(?=
|
||||
# Followed by semicolon or whitespace
|
||||
[\s;]
|
||||
|
|
||||
# Touching the ending sequence: `ruby-*-`
|
||||
(?<![-*]) # Don't allow stuff like `ruby--*-` to match; it'll invalidate the mode
|
||||
-\*- # Emacs has no problems reading `ruby --*-`, however.
|
||||
)
|
||||
.*? # Anything between a cleanly-terminated mode and the ending -*-
|
||||
-\*-
|
||||
/xi
|
||||
|
||||
# Second form vim modeline (compatible with some versions of Vi)
|
||||
# [text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
|
||||
# ex: 'vim set syntax=ruby:'
|
||||
VIM_MODELINE_2 = /(?:vim|vi|Vim|ex):\s*se(?:t)?.*\s(?:ft|filetype|syntax)=(\w+)\s?.*:/i
|
||||
VIM_MODELINE = /
|
||||
|
||||
MODELINES = [EMACS_MODELINE, VIM_MODELINE_1, VIM_MODELINE_2]
|
||||
# Start modeline. Could be `vim:`, `vi:` or `ex:`
|
||||
(?:
|
||||
(?:\s|^)
|
||||
vi
|
||||
(?:m[<=>]?\d+|m)? # Version-specific modeline
|
||||
|
|
||||
[\t\x20] # `ex:` requires whitespace, because "ex:" might be short for "example:"
|
||||
ex
|
||||
)
|
||||
|
||||
# If the option-list begins with `set ` or `se `, it indicates an alternative
|
||||
# modeline syntax partly-compatible with older versions of Vi. Here, the colon
|
||||
# serves as a terminator for an option sequence, delimited by whitespace.
|
||||
(?=
|
||||
# So we have to ensure the modeline ends with a colon
|
||||
: (?=\s* set? \s [^\n:]+ :) |
|
||||
|
||||
# Otherwise, it isn't valid syntax and should be ignored
|
||||
: (?!\s* set? \s)
|
||||
)
|
||||
|
||||
# Possible (unrelated) `option=value` pairs to skip past
|
||||
(?:
|
||||
# Option separator. Vim uses whitespace or colons to separate options (except if
|
||||
# the alternate "vim: set " form is used, where only whitespace is used)
|
||||
(?:
|
||||
\s
|
||||
|
|
||||
\s* : \s* # Note that whitespace around colons is accepted too:
|
||||
) # vim: noai : ft=ruby:noexpandtab
|
||||
|
||||
# Option's name. All recognised Vim options have an alphanumeric form.
|
||||
\w*
|
||||
|
||||
# Possible value. Not every option takes an argument.
|
||||
(?:
|
||||
# Whitespace between name and value is allowed: `vim: ft =ruby`
|
||||
\s*=
|
||||
|
||||
# Option's value. Might be blank; `vim: ft= ` says "use no filetype".
|
||||
(?:
|
||||
[^\\\s] # Beware of escaped characters: titlestring=\ ft=ruby
|
||||
| # will be read by Vim as { titlestring: " ft=ruby" }.
|
||||
\\.
|
||||
)*
|
||||
)?
|
||||
)*
|
||||
|
||||
# The actual filetype declaration
|
||||
[\s:] (?:filetype|ft|syntax) \s*=
|
||||
|
||||
# Language's name
|
||||
(\w+)
|
||||
|
||||
# Ensure it's followed by a legal separator
|
||||
(?=\s|:|$)
|
||||
/xi
|
||||
|
||||
MODELINES = [EMACS_MODELINE, VIM_MODELINE]
|
||||
|
||||
# Scope of the search for modelines
|
||||
# Number of lines to check at the beginning and at the end of the file
|
||||
|
||||
@@ -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.9"
|
||||
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' }
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
6
samples/Emacs Lisp/filenames/.abbrev_defs
Normal file
6
samples/Emacs Lisp/filenames/.abbrev_defs
Normal file
@@ -0,0 +1,6 @@
|
||||
(define-abbrev-table 'c-mode-abbrev-table '(
|
||||
))
|
||||
(define-abbrev-table 'fundamental-mode-abbrev-table '(
|
||||
("TM" "™" nil 0)
|
||||
("(R)" "®" nil 0)
|
||||
("C=" "€" nil 0)))
|
||||
20
samples/Emacs Lisp/filenames/.gnus
Normal file
20
samples/Emacs Lisp/filenames/.gnus
Normal file
@@ -0,0 +1,20 @@
|
||||
(setq user-full-name "Alhadis")
|
||||
(setq user-mail-address "fake.account@gmail.com")
|
||||
|
||||
(auto-image-file-mode)
|
||||
(setq mm-inline-large-images t)
|
||||
(add-to-list 'mm-attachment-override-types "image/*")
|
||||
|
||||
(setq gnus-select-method
|
||||
'(nnimap "gmail"
|
||||
(nnimap-address "imap.gmail.com")
|
||||
(nnimap-server-port 777)
|
||||
(nnimap-stream ssl)))
|
||||
|
||||
(setq message-send-mail-function 'smtpmail-send-it
|
||||
smtpmail-starttls-credentials '(("smtp.gmail.com" 600 nil nil))
|
||||
smtpmail-auth-credentials '(("smtp.gmail.com" 700 "me@lisp.com" nil))
|
||||
smtpmail-default-smtp-server "smtp.gmail.com"
|
||||
smtpmail-smtp-server "smtp.gmail.com"
|
||||
smtpmail-smtp-service 800
|
||||
setq gnus-ignored-from-addresses "^from\\.Telstra[ \t\r\n]+Thanks")
|
||||
10
samples/Emacs Lisp/filenames/.viper
Normal file
10
samples/Emacs Lisp/filenames/.viper
Normal file
@@ -0,0 +1,10 @@
|
||||
(setq viper-inhibit-startup-message 't)
|
||||
(setq viper-expert-level '5)
|
||||
|
||||
; Key bindings
|
||||
(define-key viper-vi-global-user-map "\C-d" 'end-of-line)
|
||||
|
||||
; Return to top of window
|
||||
(defun my-viper-return-to-top ()
|
||||
(interactive)
|
||||
(beginning-of-buffer))
|
||||
34
samples/Emacs Lisp/filenames/Project.ede
Normal file
34
samples/Emacs Lisp/filenames/Project.ede
Normal file
@@ -0,0 +1,34 @@
|
||||
;; Object EDE
|
||||
(ede-proj-project "Linguist"
|
||||
:name "Linguist"
|
||||
:version "4.9"
|
||||
:file "Project.ede"
|
||||
:targets (list
|
||||
(ede-proj-target-elisp-autoloads "autoloads"
|
||||
:name "autoloads"
|
||||
:path "test/samples/Emacs Lisp"
|
||||
:autoload-file "dude.el"
|
||||
)
|
||||
(ede-proj-target-elisp "init"
|
||||
:name "init"
|
||||
:path ""
|
||||
:source '("ede-load.el" "wait-what.el")
|
||||
:compiler 'ede-emacs-preload-compiler
|
||||
:pre-load-packages '("sample-names")
|
||||
)
|
||||
(ede-proj-target-elisp "what"
|
||||
:name "the"
|
||||
:path ""
|
||||
:source '("h.el" "am-i-writing.el")
|
||||
:versionsource '("hell.el")
|
||||
:compiler 'ede-emacs-preload-compiler
|
||||
:aux-packages '("what" "the" "hell-files" "am-i-writing")
|
||||
)
|
||||
)
|
||||
:web-site-url "https://github.com/github/linguist"
|
||||
:web-site-directory "../"
|
||||
:web-site-file "CONTRIBUTING.md"
|
||||
:ftp-upload-site "/ftp@git.hub.com:/madeup"
|
||||
:configuration-variables 'nil
|
||||
:metasubproject 't
|
||||
)
|
||||
70
samples/Emacs Lisp/filenames/_emacs
Normal file
70
samples/Emacs Lisp/filenames/_emacs
Normal file
@@ -0,0 +1,70 @@
|
||||
;; UTF-8 support
|
||||
;; (set-language-environment "UTF-8")
|
||||
(setenv "LANG" "en_AU.UTF-8")
|
||||
(setenv "LC_ALL" "en_AU.UTF-8")
|
||||
(setq default-tab-width 4)
|
||||
|
||||
|
||||
;;; Function to load all ".el" files in ~/.emacs.d/config
|
||||
(defun load-directory (directory)
|
||||
"Recursively load all Emacs Lisp files in a directory."
|
||||
(dolist (element (directory-files-and-attributes directory nil nil nil))
|
||||
(let* ((path (car element))
|
||||
(fullpath (concat directory "/" path))
|
||||
(isdir (car (cdr element)))
|
||||
(ignore-dir (or (string= path ".") (string= path ".."))))
|
||||
(cond
|
||||
((and (eq isdir t) (not ignore-dir))
|
||||
(load-directory fullpath))
|
||||
((and (eq isdir nil) (string= (substring path -3) ".el"))
|
||||
(load (file-name-sans-extension fullpath)))))))
|
||||
|
||||
;; Tell Emacs we'd like to use Hunspell for spell-checking
|
||||
(setq ispell-program-name (executable-find "hunspell"))
|
||||
|
||||
;; Load Homebrew-installed packages
|
||||
(let ((default-directory "/usr/local/share/emacs/site-lisp/"))
|
||||
(normal-top-level-add-subdirs-to-load-path))
|
||||
(load "aggressive-indent")
|
||||
(add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
|
||||
(autoload 'rust-mode "rust-mode" nil t)
|
||||
(add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode))
|
||||
|
||||
;; Load Git-related syntax highlighting
|
||||
(add-to-list 'load-path "~/.emacs.d/lisp/")
|
||||
(load "git-modes")
|
||||
(load "git-commit")
|
||||
|
||||
;; Keybindings
|
||||
(global-set-key (kbd "C-u") (lambda ()
|
||||
(interactive)
|
||||
(kill-line 0)))
|
||||
|
||||
;; Show cursor's current column number
|
||||
(setq column-number-mode t)
|
||||
|
||||
;; Disable autosave
|
||||
(setq auto-save-default nil)
|
||||
|
||||
;; Use a single directory for storing backup files
|
||||
(setq backup-directory-alist `(("." . "~/.emacs.d/auto-save-list")))
|
||||
(setq backup-by-copying t)
|
||||
(setq delete-old-versions t
|
||||
kept-new-versions 6
|
||||
kept-old-versions 2
|
||||
version-control t)
|
||||
|
||||
(custom-set-variables
|
||||
;; custom-set-variables was added by Custom.
|
||||
;; If you edit it by hand, you could mess it up, so be careful.
|
||||
;; Your init file should contain only one such instance.
|
||||
;; If there is more than one, they won't work right.
|
||||
'(blink-cursor-mode nil)
|
||||
'(column-number-mode t)
|
||||
'(show-paren-mode t))
|
||||
(custom-set-faces
|
||||
;; custom-set-faces was added by Custom.
|
||||
;; If you edit it by hand, you could mess it up, so be careful.
|
||||
;; Your init file should contain only one such instance.
|
||||
;; If there is more than one, they won't work right.
|
||||
)
|
||||
8
samples/Emacs Lisp/filenames/abbrev_defs
Normal file
8
samples/Emacs Lisp/filenames/abbrev_defs
Normal file
@@ -0,0 +1,8 @@
|
||||
(define-abbrev-table 'fundamental-mode-abbrev-table '(
|
||||
("cat" "Concatenate" nil 0)
|
||||
("WTF" "World Trade Federation " nil 0)
|
||||
("rtbtm" "Read that back to me" nil 0)))
|
||||
|
||||
(define-abbrev-table 'shell-script-mode-abbrev-table '(
|
||||
("brake", "bundle rake exec" nil 0)
|
||||
("pls", "warning: setting Encoding.default_external")))
|
||||
6
samples/FORTRAN/bug-185631.f
Normal file
6
samples/FORTRAN/bug-185631.f
Normal file
@@ -0,0 +1,6 @@
|
||||
! Codes/HYCOM/hycom/ATLb2.00/src_2.0.01_22_one/
|
||||
real onemu, twomu
|
||||
data onemu/0.0098/
|
||||
data twomu/1./
|
||||
data threemu/0.e9/
|
||||
end
|
||||
51
samples/Filebench WML/copyfiles.f
Normal file
51
samples/Filebench WML/copyfiles.f
Normal file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
# CDDL HEADER START
|
||||
#
|
||||
# The contents of this file are subject to the terms of the
|
||||
# Common Development and Distribution License (the "License").
|
||||
# You may not use this file except in compliance with the License.
|
||||
#
|
||||
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
# or http://www.opensolaris.org/os/licensing.
|
||||
# See the License for the specific language governing permissions
|
||||
# and limitations under the License.
|
||||
#
|
||||
# When distributing Covered Code, include this CDDL HEADER in each
|
||||
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
# If applicable, add the following below this CDDL HEADER, with the
|
||||
# fields enclosed by brackets "[]" replaced with your own identifying
|
||||
# information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
#
|
||||
# CDDL HEADER END
|
||||
#
|
||||
#
|
||||
# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
|
||||
# Use is subject to license terms.
|
||||
#
|
||||
|
||||
set $dir=/tmp
|
||||
set $nfiles=1000
|
||||
set $meandirwidth=20
|
||||
set $meanfilesize=16k
|
||||
set $iosize=1m
|
||||
set $nthreads=1
|
||||
|
||||
set mode quit firstdone
|
||||
|
||||
define fileset name=bigfileset,path=$dir,size=$meanfilesize,entries=$nfiles,dirwidth=$meandirwidth,prealloc=100,paralloc
|
||||
define fileset name=destfiles,path=$dir,size=$meanfilesize,entries=$nfiles,dirwidth=$meandirwidth
|
||||
|
||||
define process name=filereader,instances=1
|
||||
{
|
||||
thread name=filereaderthread,memsize=10m,instances=$nthreads
|
||||
{
|
||||
flowop openfile name=openfile1,filesetname=bigfileset,fd=1
|
||||
flowop readwholefile name=readfile1,fd=1,iosize=$iosize
|
||||
flowop createfile name=createfile2,filesetname=destfiles,fd=2
|
||||
flowop writewholefile name=writefile2,fd=2,srcfd=1,iosize=$iosize
|
||||
flowop closefile name=closefile1,fd=1
|
||||
flowop closefile name=closefile2,fd=2
|
||||
}
|
||||
}
|
||||
|
||||
echo "Copyfiles Version 3.0 personality successfully loaded"
|
||||
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
|
||||
22
samples/Python/spec.linux.spec
Normal file
22
samples/Python/spec.linux.spec
Normal file
@@ -0,0 +1,22 @@
|
||||
a = Analysis(['portablizer.pyqt4.py'],
|
||||
hiddenimports=[],
|
||||
hookspath=None,
|
||||
runtime_hooks=None)
|
||||
pyz = PYZ(a.pure)
|
||||
exe = EXE(pyz,
|
||||
a.scripts,
|
||||
exclude_binaries=True,
|
||||
name='Portablizer',
|
||||
debug=False,
|
||||
strip=None,
|
||||
upx=True,
|
||||
console=False)
|
||||
node = Tree('node', prefix='node')
|
||||
collect = COLLECT(exe,
|
||||
a.binaries,
|
||||
a.zipfiles,
|
||||
a.datas,
|
||||
node,
|
||||
strip=None,
|
||||
upx=True,
|
||||
name='Portablizer')
|
||||
673
samples/RPM Spec/apache.spec
Normal file
673
samples/RPM Spec/apache.spec
Normal file
@@ -0,0 +1,673 @@
|
||||
%define _prefix /usr/local
|
||||
%define _mandir /usr/local/man
|
||||
%define _sysconfdir /etc
|
||||
|
||||
%define apache_ver 1.3.42
|
||||
%define mod_ssl_ver 2.8.31
|
||||
%define mod_perl_ver 1.31
|
||||
%define libapreq_ver 1.34
|
||||
|
||||
|
||||
%define aname apache
|
||||
%define pname httpd13
|
||||
%define contentdir %{_var}/www
|
||||
%define suexec_caller apache
|
||||
|
||||
Summary: The 1.x Apache webserver (with static mod_perl, mod_ssl)
|
||||
Name: apache
|
||||
Version: %{apache_ver}
|
||||
Release: 4%{?dist}
|
||||
License: Apache Software License 2.0
|
||||
URL: http://httpd.apache.org/
|
||||
Group: System Environment/Daemons
|
||||
|
||||
Requires: initscripts >= 3.25
|
||||
Requires: openssl >= 0.9.6
|
||||
|
||||
BuildRequires: openssl-devel mm-devel krb5-devel pkgconfig
|
||||
BuildRequires: perl-ExtUtils-MakeMaker perl-libwww-perl perl-HTML-Parser perl-ExtUtils-Embed
|
||||
BuildRequires: gdbm-devel flex
|
||||
Requires: /sbin/chkconfig /bin/mktemp /usr/sbin/useradd
|
||||
Requires: findutils procps
|
||||
|
||||
Provides: webserver
|
||||
Provides: mod_perl = %{mod_perl_ver}
|
||||
Provides: perl(mod_perl) = %{mod_perl_ver}
|
||||
Provides: mod_ssl = %{mod_ssl_ver}
|
||||
Provides: apache = %{apache_ver}
|
||||
|
||||
Source0: http://httpd.apache.org/dist/apache_%{apache_ver}.tar.bz2
|
||||
Source1: http://www.modssl.org/source/mod_ssl-%{mod_ssl_ver}-%{apache_ver}.tar.gz
|
||||
Source2: http://perl.apache.org/dist/mod_perl-%{mod_perl_ver}.tar.gz
|
||||
Source3: httpd.init
|
||||
Source4: apache.logrotate
|
||||
Source5: SSL-Certificate-Creation
|
||||
Source6: ftp://ftp.cpan.org/authors/id/J/JO/JOESUF/libapreq-%{libapreq_ver}.tar.gz
|
||||
|
||||
Patch0: sslcfg.patch
|
||||
Patch1: apache_1.3.39-config.patch
|
||||
Patch3: apache_1.3.39-Makefile.patch
|
||||
Patch5: apache_1.3.20-apachectl-init.patch
|
||||
Patch11: mod_ssl-2.8.4-openssl.patch
|
||||
Patch12: apache_1.3.42-db.patch
|
||||
Patch13: apache-1.3.39-gcc44.patch
|
||||
Patch14: mod_ssl-2.8.31-STACK.patch
|
||||
Patch15: apache_1.3.39-ap_getline.patch
|
||||
Patch16: mod_ssl-openssl-x86_64.patch
|
||||
Patch17: mp1+perl5.14.diff
|
||||
Patch18: apache_1.3.42-64bits.patch
|
||||
|
||||
|
||||
%description
|
||||
This package contains a powerful, full-featured, efficient, and
|
||||
freely-available Web server based on work done by the Apache Software
|
||||
Foundation. It is also the most popular Web server on the Internet.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
This package is a custom release containing the httpd server (v%{apache_ver})
|
||||
bundled with: mod_perl v.%{mod_ssl_ver},
|
||||
and mod_ssl v%{mod_ssl_ver}, all BUILT-IN.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
The Apache/Perl integration project brings together the full power
|
||||
of the Perl programming language and the Apache HTTP server.
|
||||
With mod_perl it is possible to write Apache modules entirely in Perl.
|
||||
In addition, the persistent interpreter embedded in the server avoids the
|
||||
overhead of starting an external interpreter and the penalty of Perl
|
||||
start-up time.
|
||||
Mod_SSL provides strong cryptography for the Apache 1.3 webserver
|
||||
via the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security
|
||||
(TLSv1) protocols by the help of the Open Source SSL/TLS toolkit OpenSSL.
|
||||
|
||||
|
||||
%package devel
|
||||
Group: Development/Libraries
|
||||
Summary: Module development tools for apache-mod_ssl
|
||||
Provides: eapi = %{mod_ssl_ver}
|
||||
Requires: %{name} = %{version}
|
||||
Provides: mod_perl-devel = %{mod_perl_ver}
|
||||
Provides: mod_ssl-devel = %{mod_ssl_ver}
|
||||
Provides: apache-devel = %{apache_ver}
|
||||
|
||||
%description devel
|
||||
The apache-devel package contains the APXS binary and other files
|
||||
that you need to build Dynamic Shared Objects (DSOs) for Apache.
|
||||
If you are installing the Apache Web server and you want to be able
|
||||
to compile or develop additional modules for Apache, you need to install
|
||||
this package.
|
||||
|
||||
|
||||
%package manual
|
||||
Group: Documentation
|
||||
Summary: Documentation for the Apache Web server
|
||||
|
||||
%description manual
|
||||
The apache-manual package contains the complete manual and reference
|
||||
guide for the Apache Web server.
|
||||
It also contains the basic web content (icons, default welcome messages,
|
||||
etc) provided with Apache's HTTPD distribution.
|
||||
|
||||
|
||||
%prep
|
||||
%setup -q -c -T -n %{name}-%{version} -a 0
|
||||
%setup -q -c -T -D -n %{name}-%{version} -a 1
|
||||
%setup -q -c -T -D -n %{name}-%{version} -a 2
|
||||
%setup -q -c -T -D -n %{name}-%{version} -a 6
|
||||
|
||||
pushd %{aname}_%{apache_ver}
|
||||
%patch0 -p0 -b .sslcfg
|
||||
%patch1 -p1 -b .config
|
||||
%patch3 -p0 -b .make
|
||||
%patch5 -p1 -b .apachectl-init
|
||||
%ifarch x86_64
|
||||
%patch18 -p1 -b .apache-x86_64
|
||||
%endif
|
||||
|
||||
#patch12 -p1 -b .dbmdb
|
||||
%patch13 -p1 -b .compile
|
||||
%patch15 -p0 -b .ap_getline
|
||||
|
||||
|
||||
patch -p0 < ../libapreq-%{libapreq_ver}/patches/apache-1.3+apreq.patch
|
||||
cp ../libapreq-%{libapreq_ver}/c/*.[ch] src/lib/apreq/
|
||||
popd
|
||||
|
||||
pushd mod_ssl-%{mod_ssl_ver}-%{apache_ver}
|
||||
%patch11 -p1 -b .openssl
|
||||
%patch14 -p0 -b .stack
|
||||
%ifarch x86_64
|
||||
%patch16 -p1 -b .openssl-x86_64
|
||||
%endif
|
||||
popd
|
||||
|
||||
pushd mod_perl-%{mod_perl_ver}
|
||||
%patch17 -p1 -b .mp1+perl5.14.diff
|
||||
popd
|
||||
|
||||
# Substitute values to match the configuration. The first two are
|
||||
# for the default httpd.conf file, the rest is for the mod_ssl
|
||||
# additions.
|
||||
pushd %{aname}_%{apache_ver}
|
||||
sed -e 's,@@ServerRoot@@,%{_sysconfdir}/%{pname},g' \
|
||||
-e 's,@@ContentRoot@@,%{contentdir},g' \
|
||||
-e 's,^DocumentRoot "@@ContentRoot@@",#DocumentRoot "%{_sysconfdir}/%{pname}/htdocs",g' \
|
||||
-e 's,^<Directory "@@ContentRoot@@/cgi-bin">,<Directory "%{contentdir}/cgi-bin">,g' \
|
||||
-e 's,^ServerName new.host.name,#ServerName new.host.name,g' \
|
||||
-e 's,^ServerAdmin you@your.address,#ServerAdmin you@your.address,g' \
|
||||
-e 's,^SSLCipherSuite,#SSLCipherSuite,g' \
|
||||
-e 's,^SSLLogLevel info,SSLLogLevel error,g' \
|
||||
-e 's,^SSLSessionCache dbm:logs/ssl_scache,SSLSessionCache shm:logs/ssl_scache(512000),g' \
|
||||
conf/httpd.conf-dist > conf/httpd.conf
|
||||
popd
|
||||
|
||||
cp %{SOURCE5} .
|
||||
|
||||
#cp %{_tmppath}/rpm-tmp* /tmp/01prep.sh
|
||||
|
||||
%build
|
||||
export CFLAGS="$RPM_OPT_FLAGS -fPIC $(pkg-config --cflags openssl)"
|
||||
export LIBS="-lpthread"
|
||||
export EAPI_MM=SYSTEM
|
||||
|
||||
###############################################
|
||||
echo mod_perl ...
|
||||
pushd mod_perl-%{mod_perl_ver}
|
||||
perl Makefile.PL CCFLAGS="$RPM_OPT_FLAGS -fPIC" \
|
||||
APACHE_SRC=../%{aname}_%{apache_ver}/src \
|
||||
DO_HTTPD=1 USE_APACI=1 PREP_HTTPD=1 EVERYTHING=1
|
||||
make %{?_smp_mflags}
|
||||
## put mod_perl docs in a safe place ;-]~
|
||||
mkdir mod_perl-doc
|
||||
cp -a eg/ faq/ mod_perl-doc/
|
||||
cp {CREDITS,LICENSE,README,SUPPORT,STATUS,Changes,INSTALL*} mod_perl-doc/
|
||||
cp *.{pod,html,gif} mod_perl-doc/
|
||||
find mod_perl-doc -type f -exec chmod 644 {} \;
|
||||
popd
|
||||
|
||||
###############################################
|
||||
echo mod_ssl ...
|
||||
export SSL_COMPAT=yes
|
||||
export SSL_EXPERIMENTAL=yes
|
||||
pushd mod_ssl-%{mod_ssl_ver}-%{apache_ver}
|
||||
./configure --with-apache=../apache_%{apache_ver} \
|
||||
--with-mm=SYSTEM --force
|
||||
popd
|
||||
|
||||
###############################################
|
||||
echo apache ...
|
||||
pushd %{aname}_%{apache_ver}
|
||||
./configure \
|
||||
--prefix=%{_prefix} \
|
||||
--exec-prefix=%{_prefix} \
|
||||
--bindir=%{_bindir} \
|
||||
--sbindir=%{_sbindir} \
|
||||
--mandir=%{_mandir} \
|
||||
--sysconfdir=%{_sysconfdir}/%{pname}/conf \
|
||||
--libexecdir=%{_libdir}/apache \
|
||||
--datadir=%{contentdir} \
|
||||
--iconsdir=%{contentdir}/icons \
|
||||
--htdocsdir=%{contentdir}/html \
|
||||
--manualdir=%{contentdir}/html/manual \
|
||||
--cgidir=%{contentdir}/cgi-bin \
|
||||
--localstatedir=%{_localstatedir} \
|
||||
--runtimedir=%{_sysconfdir}/%{pname}/run \
|
||||
--logfiledir=logs \
|
||||
--proxycachedir=%{_localstatedir}/cache/%{pname} \
|
||||
--with-perl=%{__perl} \
|
||||
--enable-rule=EAPI \
|
||||
--enable-rule=SSL_COMPAT \
|
||||
--enable-rule=SSL_EXPERIMENTAL \
|
||||
--disable-rule=SSL_VENDOR \
|
||||
--disable-rule=WANTHSREGEX \
|
||||
--disable-rule=EXPAT \
|
||||
%{?_with_backtrace:--activate-module=src/modules/experimental/mod_backtrace.c} \
|
||||
%{?_with_whatkilledus:--activate-module=src/modules/experimental/mod_whatkilledus.c} \
|
||||
--activate-module=src/modules/perl/libperl.a \
|
||||
--enable-module=auth_dbm \
|
||||
--enable-module=ssl \
|
||||
--enable-module=all \
|
||||
--enable-shared=max \
|
||||
--disable-shared=perl \
|
||||
--disable-shared=ssl \
|
||||
--disable-module=example \
|
||||
--disable-module=auth_db \
|
||||
--without-execstrip \
|
||||
%{?_with_suexec:--enable-suexec --suexec-docroot=%{contentdir}} \
|
||||
%{?_with_suexec:--suexec-uidmin=300 --suexec-gidmin=300} \
|
||||
%{?_with_suexec:--suexec-umask=022 --suexec-caller=%{suexec_caller}}
|
||||
|
||||
make %{?_smp_mflags}
|
||||
|
||||
popd
|
||||
#cp %{_tmppath}/rpm-tmp* /tmp/02build.sh
|
||||
|
||||
%install
|
||||
###############################################################################
|
||||
### install basic apache stuff
|
||||
pushd apache_%{apache_ver}
|
||||
make install root="$RPM_BUILD_ROOT"
|
||||
popd
|
||||
|
||||
### rename
|
||||
mv $RPM_BUILD_ROOT%{_sbindir}/httpd $RPM_BUILD_ROOT%{_sbindir}/%{pname}
|
||||
|
||||
### install SYSV init stuff
|
||||
mkdir -p $RPM_BUILD_ROOT%{_initrddir}
|
||||
install -m755 %{SOURCE3} $RPM_BUILD_ROOT%{_initrddir}/%{pname}
|
||||
|
||||
### install log rotation stuff
|
||||
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
|
||||
install -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/apache
|
||||
|
||||
### default rootdir links
|
||||
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/%{pname}
|
||||
pushd $RPM_BUILD_ROOT%{_sysconfdir}/%{pname}
|
||||
ln -s %{_localstatedir}/log/%{pname} logs
|
||||
ln -s %{_libdir}/%{aname} modules
|
||||
ln -s %{_localstatedir}/run run
|
||||
popd
|
||||
|
||||
### replace Apache's default config file with our patched version
|
||||
install -m644 apache_%{apache_ver}/conf/httpd.conf \
|
||||
$RPM_BUILD_ROOT%{_sysconfdir}/%{pname}/conf/httpd.conf
|
||||
|
||||
# fix up apxs so that it doesn't think it's in the build root
|
||||
perl -pi -e "s^$RPM_BUILD_ROOT^^g" $RPM_BUILD_ROOT%{_sbindir}/apxs
|
||||
|
||||
# fixup the documentation file naming
|
||||
find $RPM_BUILD_ROOT%{contentdir} -name "*.html.html" | xargs rename .html.html .html
|
||||
|
||||
###############################################################################
|
||||
### install mod_perl files
|
||||
pushd mod_perl-%{mod_perl_ver}
|
||||
export PERL_INSTALL_ROOT=$RPM_BUILD_ROOT
|
||||
make pure_install PREFIX=/usr INSTALLDIRS=vendor
|
||||
|
||||
# convert man pages to UTF-8
|
||||
recode() {
|
||||
iconv -f "$2" -t utf-8 < "$1" > "${1}_"
|
||||
%{__mv} -f "${1}_" "$1"
|
||||
}
|
||||
pushd $RPM_BUILD_ROOT/usr/share/man/man3/
|
||||
for i in * ; do
|
||||
recode "${i}" iso-8859-1
|
||||
done
|
||||
popd
|
||||
|
||||
# fix files mod
|
||||
find $RPM_BUILD_ROOT%{perl_vendorarch} -iname '*.pm' -exec chmod 0644 {} \;
|
||||
|
||||
# bake web docs...
|
||||
mkdir -p $RPM_BUILD_ROOT%{contentdir}/html/manual/mod/mod_perl
|
||||
install -c -m 644 htdocs/manual/mod/mod_perl.html \
|
||||
$RPM_BUILD_ROOT%{contentdir}/html/manual/mod/mod_perl/
|
||||
make -C faq
|
||||
rm -f faq/pod2htm*
|
||||
install -m644 faq/*.html \
|
||||
$RPM_BUILD_ROOT%{contentdir}/html/manual/mod/mod_perl/
|
||||
|
||||
popd
|
||||
|
||||
# remove special perl files this is specific for rpms , already have in own .packlist
|
||||
find $RPM_BUILD_ROOT%{perl_vendorarch}/.. -name perllocal.pod -o -name .packlist \
|
||||
-o -name '*.bs' | xargs -r -i rm -f {}
|
||||
|
||||
### ssl leftovers
|
||||
# point to the right makefile.
|
||||
ln -sf ../../../etc/pki/tls/certs/Makefile $RPM_BUILD_ROOT%{_sysconfdir}/%{pname}/conf
|
||||
# create a prototype session cache
|
||||
touch $RPM_BUILD_ROOT%{_localstatedir}/cache/ssl_gcache_data.{dir,pag,sem}
|
||||
|
||||
# drop shellbang from .exp files
|
||||
for exp in $RPM_BUILD_ROOT%{perl_vendorarch}/auto/Apache/mod_perl.exp $RPM_BUILD_ROOT%{_libdir}/%{aname}/httpd.exp
|
||||
do
|
||||
sed -i '/^#!/ d' $exp
|
||||
done
|
||||
|
||||
#cp %{_tmppath}/rpm-tmp* /tmp/03install.sh
|
||||
|
||||
%post
|
||||
/sbin/chkconfig --add %{pname}
|
||||
/sbin/ldconfig
|
||||
|
||||
# safely build a test certificate
|
||||
umask 077
|
||||
if [ ! -f %{_sysconfdir}/%{pname}/conf/ssl.key/server.key ] ; then
|
||||
openssl genrsa -rand /proc/apm:/proc/cpuinfo:/proc/dma:/proc/filesystems:/proc/interrupts:/proc/ioports:/proc/pci:/proc/rtc:/proc/uptime 1024 > %{_sysconfdir}/%{pname}/conf/ssl.key/server.key 2> /dev/null
|
||||
fi
|
||||
|
||||
if [ ! -f %{_sysconfdir}/%{pname}/conf/ssl.crt/server.crt ] ; then
|
||||
cat << EOF | openssl req -new -key %{_sysconfdir}/%{pname}/conf/ssl.key/server.key -x509 -days 365 -out %{_sysconfdir}/%{pname}/conf/ssl.crt/server.crt 2>/dev/null
|
||||
--
|
||||
SomeState
|
||||
SomeCity
|
||||
SomeOrganization
|
||||
SomeOrganizationalUnit
|
||||
localhost.localdomain
|
||||
root@localhost.localdomain
|
||||
EOF
|
||||
fi
|
||||
|
||||
# safely add .htm to mime types if it is not already there
|
||||
[ -f %{_sysconfdir}/mime.types ] || exit 0
|
||||
TEMPTYPES=`/bin/mktemp /tmp/mimetypes.XXXXXX`
|
||||
[ -z "$TEMPTYPES" ] && {
|
||||
echo "could not make temporary file, htm not added to %{_sysconfdir}/mime.types" >&2
|
||||
exit 1
|
||||
}
|
||||
( grep -v "^text/html" %{_sysconfdir}/mime.types
|
||||
types=$(grep "^text/html" %{_sysconfdir}/mime.types | cut -f2-)
|
||||
echo -en "text/html\t\t\t"
|
||||
for val in $types ; do
|
||||
if [ "$val" = "htm" ] ; then
|
||||
continue
|
||||
fi
|
||||
echo -n "$val "
|
||||
done
|
||||
echo "htm"
|
||||
) > $TEMPTYPES
|
||||
cat $TEMPTYPES > %{_sysconfdir}/mime.types && /bin/rm -f $TEMPTYPES
|
||||
|
||||
cp %{_tmppath}/rpm-tmp* /tmp/04post.sh
|
||||
|
||||
%pre
|
||||
# Add the "apache" user
|
||||
/usr/sbin/useradd -c "Apache" -u 48 \
|
||||
-s /sbin/nologin -r -d "%{contentdir}" apache 2> /dev/null || :
|
||||
|
||||
%preun
|
||||
if [ $1 = 0 ]; then
|
||||
if [ -f /var/lock/subsys/%{pname} ]; then
|
||||
%{_initrddir}/%{pname} stop
|
||||
fi
|
||||
if [ -f %{_initrddir}/%{pname} ]; then
|
||||
/sbin/chkconfig --del %{pname}
|
||||
fi
|
||||
fi
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%dir %{_sysconfdir}/%{pname}
|
||||
%dir %{_sysconfdir}/%{pname}/conf
|
||||
%config(noreplace) %{_sysconfdir}/%{pname}/conf/*.conf
|
||||
%config(noreplace) %{_sysconfdir}/%{pname}/conf/Makefile
|
||||
%config(noreplace) %{_sysconfdir}/%{pname}/conf/magic
|
||||
%config(noreplace) %{_sysconfdir}/%{pname}/conf/mime.types
|
||||
%config(noreplace) %{_sysconfdir}/logrotate.d/*
|
||||
%config(noreplace) %{_sysconfdir}/%{pname}/conf/ssl.*
|
||||
%doc %{_sysconfdir}/%{pname}/conf/*.default
|
||||
%attr(755,root,root) %{_initrddir}/*
|
||||
%{_sysconfdir}/%{pname}/logs
|
||||
%{_sysconfdir}/%{pname}/modules
|
||||
%{_sysconfdir}/%{pname}/run
|
||||
%{_libdir}/%{aname}
|
||||
%{perl_vendorarch}/Apache
|
||||
%{perl_vendorarch}/Bundle
|
||||
%{perl_vendorarch}/*.pm
|
||||
%{perl_vendorarch}/*.PL
|
||||
%dir %{perl_vendorarch}/auto/Apache
|
||||
%{perl_vendorarch}/auto/Apache/Leak
|
||||
%{perl_vendorarch}/auto/Apache/Symbol
|
||||
%{perl_vendorarch}/auto/Apache/mod_perl.exp
|
||||
%{perl_vendorarch}/auto/Apache/typemap
|
||||
%attr(0755,root,root) %{_bindir}/*
|
||||
%attr(0755,root,root) %{_sbindir}/ab
|
||||
%attr(0755,root,root) %{_sbindir}/apachectl
|
||||
%attr(0755,root,root) %{_sbindir}/httpd13
|
||||
%attr(0755,root,root) %{_sbindir}/logresolve
|
||||
%attr(0755,root,root) %{_sbindir}/rotatelogs
|
||||
%{?_with_suexec:%attr(4710,root,%{suexec_caller}) %{_sbindir}/suexec}
|
||||
%{_mandir}/man1*/*
|
||||
%{_mandir}/man8/ab.8*
|
||||
%{_mandir}/man8/apachectl.8*
|
||||
%{_mandir}/man8/httpd.8*
|
||||
%{_mandir}/man8/logresolve.8*
|
||||
%{_mandir}/man8/rotatelogs.8*
|
||||
%{?_with_suexec:%{_mandir}/man8/suexec.8*}
|
||||
%attr(0755,apache,root) %dir %{_localstatedir}/cache/%{pname}
|
||||
%attr(0640,apache,root) %{_localstatedir}/cache/ssl_*
|
||||
%attr(0750,root,apache) %dir %{_localstatedir}/log/%{pname}
|
||||
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root)
|
||||
%{_includedir}
|
||||
%attr(0755,root,root) %{_sbindir}/apxs
|
||||
%{_mandir}/man8/apxs.8*
|
||||
%doc %{perl_vendorarch}/*.pod
|
||||
%{perl_vendorarch}/auto/Apache/include
|
||||
|
||||
%files manual
|
||||
%defattr(-,root,root)
|
||||
%doc apache_%{apache_ver}/cgi-bin
|
||||
%dir %{contentdir}
|
||||
%dir %{contentdir}/cgi-bin
|
||||
%config(noreplace) %{contentdir}/cgi-bin/*
|
||||
%dir %{contentdir}/html
|
||||
%config(noreplace) %{contentdir}/html/*.html*
|
||||
%config(noreplace) %{contentdir}/html/*.gif
|
||||
%dir %{contentdir}/icons
|
||||
%dir %{contentdir}/icons/small
|
||||
%config(noreplace) %{contentdir}/icons/*.*
|
||||
%config(noreplace) %{contentdir}/icons/small/*.*
|
||||
%doc %{contentdir}/icons/README
|
||||
|
||||
%doc apache_%{apache_ver}/{ABOUT_APACHE,LICENSE*,NOTICE,README*,cgi-bin}
|
||||
%doc apache_%{apache_ver}/src/{CHANGES,README}*
|
||||
%doc mod_ssl-%{mod_ssl_ver}-%{apache_ver}/README.*
|
||||
%doc mod_ssl-%{mod_ssl_ver}-%{apache_ver}/NEWS
|
||||
%doc mod_perl-%{mod_perl_ver}/mod_perl-doc
|
||||
%doc SSL-Certificate-Creation
|
||||
|
||||
%doc %{contentdir}/html/manual
|
||||
%exclude %{contentdir}/html/manual/mod/mod_ssl/ssl_cover.wml
|
||||
#man3 conflicts with mod_perl2
|
||||
/usr/share/man/man3*/*
|
||||
|
||||
|
||||
%changelog
|
||||
* Sun May 13 2012 Sérgio Basto <sergio@serjux.com> - 1.3.42-4
|
||||
- Many improvements on defaults directories
|
||||
- Separate libapreq in other package, to compile libapreq is need other sources installed.
|
||||
- more cleanups.
|
||||
|
||||
* Wed Nov 16 2011 Sérgio Basto <sergio@serjux.com>
|
||||
- build for F16
|
||||
- mp1+perl5.14.diff (mod_perl1 + perl5.14)
|
||||
- many improvents.
|
||||
|
||||
* Sat Oct 29 2011 Sérgio Basto <sergio@serjux.com>
|
||||
- mock build add many buildrequires
|
||||
- many improvemts on confs
|
||||
|
||||
* Tue Oct 16 2007 Sérgio Basto <sergio@serjux.com>
|
||||
- UNDROPPED CONFIGURATION COMPLETELY: rpm it suposed do all alone.
|
||||
- rename httpd to http13 to work independently of apache 2.2
|
||||
- add patch to Makefile.tmp, resolve all problems at once
|
||||
- change server port number to run out of the box.
|
||||
- Update link to certs/Makefile.
|
||||
|
||||
* Tue Sep 11 2007 Marius FERARU <altblue@n0i.net> - 1.3.39-1.n0i.23.MPSSL
|
||||
- apache 1.3.39
|
||||
- mod_ssl 2.8.29
|
||||
|
||||
* Mon Apr 02 2007 Marius FERARU <altblue@n0i.net> - 1.3.37-3.n0i.22.MPSSL
|
||||
- mod_perl 1.30
|
||||
- initscript: use a "$pidfile" variable for all operations
|
||||
- initscript: added a dummy "alias" for "reload" (will do a 'restart'!)
|
||||
- initscript: added missing "fullstatus" option (will run through "apachectl")
|
||||
- dropped shellbang from .exp files
|
||||
- dropped 2 explicit provides (mod_perl and Apache::Constants)
|
||||
|
||||
* Fri Sep 08 2006 Marius FERARU <altblue@n0i.net> - 1.3.37-2.n0i.21.MPSSL
|
||||
- BR: gdbm-devel, db4-devel
|
||||
|
||||
* Mon Aug 21 2006 Marius FERARU <altblue@n0i.net> - 1.3.37-1.n0i.20.MPSSL
|
||||
- apache 1.3.37
|
||||
- mod_ssl 2.8.28
|
||||
- Dist macro
|
||||
- URL update
|
||||
- updated description
|
||||
- spec cleanups
|
||||
- use "--with backtrace" to activate "mod_backtrace"
|
||||
- use "--with whatkilledus" to activate "mod_whatkilledus"
|
||||
- use "--with suexec" to activate suexec functionality
|
||||
- moved default web content into documentation package
|
||||
|
||||
* Tue Jun 06 2006 Marius FERARU <altblue@n0i.net> - 1.3.36-2.n0i.19.MPSSL
|
||||
- changed "runtimedir" and "logfiledir" to relative paths,
|
||||
letting users run apache on their own
|
||||
|
||||
* Tue Jun 06 2006 Marius FERARU <altblue@n0i.net> - 1.3.36-1.n0i.19.MPSSL
|
||||
- apache 1.3.36
|
||||
- mod_ssl version 2.8.27
|
||||
- spec cleanups
|
||||
|
||||
* Mon Mar 13 2006 Marius FERARU <altblue@n0i.net> - 1.3.34-2.n0i.18.MPSSL
|
||||
- rebuild
|
||||
|
||||
* Thu Nov 24 2005 Marius FERARU <altblue@n0i.net> 1.3.34-1.n0i.17.MPSSL
|
||||
- apache 1.3.34
|
||||
- mod_ssl version 2.8.25
|
||||
|
||||
* Tue Sep 20 2005 Marius FERARU <altblue@n0i.net> 1.3.33-5.n0i.16.MPSSL
|
||||
- mod_ssl version 2.8.24
|
||||
|
||||
* Fri Sep 02 2005 Marius FERARU <altblue@n0i.net> 1.3.33-4.n0i.15.MPSSL
|
||||
- rebuild
|
||||
- dropped more requirements (which Fedora considers to "always have")
|
||||
|
||||
* Sat Jul 23 2005 Marius FERARU <altblue@n0i.net> 1.3.33-3.n0i.14.MPSSL
|
||||
- dropped Epoch
|
||||
- changed Summary and Description
|
||||
- rebuild (perl 5.8.7)
|
||||
|
||||
* Tue Jan 04 2005 Marius FERARU <altblue@n0i.net> 1.3.33-2.n0i.13.MPSSL
|
||||
- libapreq version 1.33
|
||||
|
||||
* Mon Dec 06 2004 Marius FERARU <altblue@n0i.net> 1.3.33-1.n0i.12.MPSSL
|
||||
- apache version 1.3.33
|
||||
- mod_ssl version 2.8.22
|
||||
- description update
|
||||
|
||||
* Tue Aug 17 2004 Marius FERARU <altblue@n0i.net> 1.3.31-5.n0i.11.MPSSL
|
||||
- mod_ssl version 2.8.19
|
||||
|
||||
* Thu Jul 15 2004 Marius FERARU <altblue@n0i.net> 1.3.31-4.n0i.10.MPSSL
|
||||
- mod_ssl version 2.8.18
|
||||
|
||||
* Tue Jul 13 2004 Marius FERARU <altblue@n0i.net> 1.3.31-3.n0i.9.MPSSL
|
||||
- tweaked rotatelog's build: drop linking with apache libs
|
||||
|
||||
* Tue Jul 13 2004 Marius FERARU <altblue@n0i.net> 1.3.31-2.n0i.8.MPSSL
|
||||
- applied some fixing patches from current CVS version
|
||||
|
||||
* Thu May 13 2004 Marius FERARU <altblue@n0i.net> 1.3.31-1.n0i.7.MPSSL
|
||||
- apache version 1.3.31
|
||||
- mod_ssl version 2.8.17
|
||||
- updated apxs patch
|
||||
- slight spec tweaks
|
||||
- enabled backtrace experimental module
|
||||
- updated config patch
|
||||
|
||||
* Fri Apr 30 2004 Marius Feraru <altblue@n0i.net> 1.3.29-6.n0i.6.MPSSL
|
||||
- automatic rebuild
|
||||
|
||||
* Thu Apr 22 2004 Marius FERARU <altblue@n0i.net> 1.3.29-5.n0i.5.MPSSL
|
||||
- rebuild (perl 5.8.4)
|
||||
|
||||
* Tue Feb 10 2004 Marius FERARU <altblue@n0i.net> 1.3.29-4.n0i.4.MPSSL
|
||||
- fixed the shameful bugs from my httpd.init script
|
||||
|
||||
* Fri Jan 23 2004 Marius FERARU <altblue@n0i.net> 1.3.29-3.n0i.3.MPSSL
|
||||
- rebuild (perl 5.8.3)
|
||||
|
||||
* Fri Jan 16 2004 Marius FERARU <altblue@n0i.net> 1.3.29-2.n0i.2.MPSSL
|
||||
- rebuilt on perl 5.8.2 / Fedora 1 Devel (tobe FC2)
|
||||
- finally clearly enabled modperl.c in apache_1.3.23-config.patch
|
||||
as many helpless people seem to use this dumb default configuration file :(
|
||||
- also updated the same patch to properly define SSL too :)
|
||||
- added a lame "MPSSL" extra tag in release to make people understand this
|
||||
is a !SPECIAL! apache + mod_perl + mod_ssl + libapreq package suite!!!
|
||||
- updated init script to do "real" server shutdown (in squid style) and to NOT
|
||||
shutdown all the apache servers, just the one started with /var/run/httpd.pid
|
||||
- added USE_MODULEARGS=[yes/no] and SHUTDOWN_TIMEOUT=[seconds] configuration
|
||||
parameters to init script
|
||||
|
||||
* Thu Nov 13 2003 Marius FERARU <altblue@n0i.net> 1.3.29-1.n0i.1
|
||||
- apache 1.3.29
|
||||
- modssl 2.8.16
|
||||
- dropped zombie patch
|
||||
- dropped fderr patch
|
||||
- dropped for good thttpd conflict note as THERE IS NO CONFLICT!!! In fact
|
||||
we really use them both for long time without a problem :))
|
||||
- added more Prereq stuff
|
||||
- more Fedora style spec updates
|
||||
|
||||
* Thu Oct 16 2003 Marius FERARU <altblue@n0i.net> 1.3.28-2.n0i
|
||||
- mod_perl 1.29
|
||||
- libapreq 1.3
|
||||
- replaced ALL direct 'etc' occurences to macros (some for other stuff)
|
||||
- perl %%files are now more properly quested.
|
||||
- switched krb5-config to pkg-config
|
||||
- switched textutils to coreutils
|
||||
- using mm 1.3
|
||||
- disabled internal expat linking
|
||||
- added the 'zombie' patch
|
||||
- added the 'file descriptors are erroneously closed' patch
|
||||
|
||||
* Mon Jul 28 2003 Marius FERARU <altblue.net> 1.3.28-1.n0i
|
||||
- mod_perl 1.28
|
||||
- added builtin libapreq
|
||||
|
||||
* Fri Jul 25 2003 Marius FERARU <altblue@n0i.net> 1.3.28-0.n0i
|
||||
- apache version 1.3.28
|
||||
- mod_ssl version 2.8.15
|
||||
- switched the old dbm-gdbm patch with a more elegant one (apache_1.3.27-db);
|
||||
yet, more tests are to be done on other systems before dropping the old one
|
||||
from our src.rpm
|
||||
- disabled suexec SSL env support patch as Apache ppl changed their code heavily
|
||||
and I do not yet have time to update this patch
|
||||
- moved mod_perl header files into apache-devel (are they needed by someone?!)
|
||||
- dropped using RPM_SOURCE_DIR/<filename> stuff.
|
||||
- disabled auth_db module (db4 API changes?!)
|
||||
|
||||
* Mon Apr 21 2003 Marius FERARU <altblue@n0i.net> 1.3.27-2.n0i
|
||||
- automatic rebuild on RHL9
|
||||
|
||||
* Wed Mar 26 2003 Marius FERARU <altblue@n0i.net> 1.3.27-1.n0i
|
||||
- mod_ssl version 2.8.14
|
||||
- dropped thttpd conflict note as THERE IS NO CONFLICT!!! In fact we really
|
||||
use them both :))
|
||||
|
||||
* Fri Oct 18 2002 Marius Feraru <altblue@n0i.net>
|
||||
- apache version 1.3.27
|
||||
- mod_ssl version 2.8.11
|
||||
- eliminated db4 patch
|
||||
- disabled thttpd conflict flag
|
||||
|
||||
* Tue Sep 24 2002 Marius Feraru <altblue@n0i.net>
|
||||
- automatic rebuild (to conform with the openssl update)
|
||||
|
||||
* Wed Sep 4 2002 Marius Feraru <altblue@n0i.net>
|
||||
- some spec cleanups (rpm 4.1.x compatibility)
|
||||
|
||||
* Tue Jul 23 2002 Marius FERARU <altblue@n0i.net>
|
||||
- apache 1.3.26
|
||||
- mod_perl 1.27
|
||||
- mod_ssl 2.8.10
|
||||
- lots of new tweaks to the spec file (hopefully it will be easier now for others to
|
||||
rebuild this package =] )
|
||||
|
||||
|
||||
* Sat Sep 1 2001 Marius FERARU <altblue@n0i.net>
|
||||
- updated apache to 1.3.22
|
||||
- reparsed and tweaked all RedHat patches
|
||||
- lots of spec file tweaks: optimisations,
|
||||
file location/integration/modes fixes...
|
||||
|
||||
* Sat Sep 1 2001 Marius FERARU <altblue@n0i.net>
|
||||
- updated mod_perl to version 1.26
|
||||
- based on apache-1.3.20-15.src.rpm from Red Hat RawHide
|
||||
- used apache_modperl-1.3.19-1.24-1.src.rpm from
|
||||
perl.apache.org as example spec.
|
||||
62
samples/RPM Spec/erlang-erlydtl.spec
Normal file
62
samples/RPM Spec/erlang-erlydtl.spec
Normal file
@@ -0,0 +1,62 @@
|
||||
%global debug_package %{nil}
|
||||
|
||||
Name: erlang-erlydtl
|
||||
Version: 0.6.0
|
||||
Release: 1%{?dist}
|
||||
Summary: Erlang implementation of the Django Template Language.
|
||||
|
||||
Group: Development/Libraries
|
||||
License: MIT
|
||||
URL: http://code.google.com/p/erlydtl/
|
||||
Source0: http://erlydtl.googlecode.com/files/erlydtl-0.6.0.tar.gz
|
||||
Patch0: erlang-erlydtl-0.6.0-tests.patch
|
||||
Patch1: erlang-erlydtl-0.6.0-r14a.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
Provides: ErlyDTL = %{version}-%{release}
|
||||
BuildRequires: erlang
|
||||
Requires: erlang
|
||||
|
||||
%description
|
||||
ErlyDTL is an Erlang implementation of the Django Template Language. The
|
||||
erlydtl module compiles Django Template source code into Erlang bytecode. The
|
||||
compiled template has a "render" function that takes a list of variables and
|
||||
returns a fully rendered document
|
||||
|
||||
%prep
|
||||
%setup -q -n erlydtl-%{version}
|
||||
find examples/ -type f -executable -exec chmod -x {} \;
|
||||
|
||||
%patch0 -p0
|
||||
%patch1 -p0
|
||||
|
||||
%build
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%check
|
||||
make test
|
||||
|
||||
|
||||
%install
|
||||
rm -rf %{buildroot}
|
||||
mkdir -p %{buildroot}/%{_libdir}/erlang/lib/erlydtl-%{version}/
|
||||
cp -r ebin %{buildroot}/%{_libdir}/erlang/lib/erlydtl-%{version}/
|
||||
cp -r bin %{buildroot}/%{_libdir}/erlang/lib/erlydtl-%{version}/
|
||||
cp -r priv %{buildroot}/%{_libdir}/erlang/lib/erlydtl-%{version}/
|
||||
|
||||
|
||||
%clean
|
||||
rm -rf %{buildroot}
|
||||
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%dir %{_libdir}/erlang/lib/erlydtl-%{version}
|
||||
%{_libdir}/erlang/lib/erlydtl-%{version}/*
|
||||
%doc README
|
||||
%doc examples
|
||||
|
||||
|
||||
%changelog
|
||||
* Sun Aug 1 2010 Ilia Cheishvili <ilia.cheishvili@gmail.com> - 0.6.0-1
|
||||
- Initial Package
|
||||
46
samples/RPM Spec/manos.spec
Normal file
46
samples/RPM Spec/manos.spec
Normal file
@@ -0,0 +1,46 @@
|
||||
#
|
||||
# spec file for package manos
|
||||
#
|
||||
# Copyright (c) 2010 Jackson Harper (jackson@novell.com)
|
||||
#
|
||||
#
|
||||
|
||||
Name: manos-devel
|
||||
Version: 0.1.1
|
||||
Release: 1
|
||||
License: MIT/X11
|
||||
BuildRoot: %{_tmppath}/manos-%{version}-build
|
||||
BuildRequires: mono-devel >= 2.6
|
||||
BuildRequires: mono-nunit >= 2.6
|
||||
Source0: manos-%{version}.tar.bz2
|
||||
Source1: rpmlintrc
|
||||
Summary: The Manos Web Application Framework
|
||||
Group: Development/Web/Servers
|
||||
BuildArch: noarch
|
||||
|
||||
%description
|
||||
Manos is an easy to use, easy to test, high performance web application framework that stays out of your way and makes your life ridiculously simple.
|
||||
|
||||
%files
|
||||
%defattr(-, root, root)
|
||||
%{_prefix}/lib/manos
|
||||
%{_bindir}/manos
|
||||
%{_datadir}/manos
|
||||
%{_prefix}/lib/pkgconfig/manos.pc
|
||||
%{_datadir}/man/man1/manos.1.gz
|
||||
|
||||
%prep
|
||||
%setup -q -n manos-%{version}
|
||||
|
||||
|
||||
%build
|
||||
./configure --prefix=%{buildroot}%{_prefix} --install-prefix=%{_prefix}
|
||||
make
|
||||
|
||||
%install
|
||||
make install
|
||||
|
||||
%clean
|
||||
rm -rf %{buildroot}
|
||||
|
||||
%changelog
|
||||
44
samples/Ruby/any.spec
Normal file
44
samples/Ruby/any.spec
Normal file
@@ -0,0 +1,44 @@
|
||||
require File.dirname(File.expand_path(__FILE__)) + '/../spec_helper'
|
||||
|
||||
describe Spira::Types::Any do
|
||||
|
||||
before :all do
|
||||
@uri = RDF::URI('http://example.org')
|
||||
end
|
||||
|
||||
# this spec is going to be necessarily loose. The 'Any' type is defined to
|
||||
# use RDF.rb's automatic RDF Literal boxing and unboxing, which may or may
|
||||
# not change between verions.
|
||||
#
|
||||
context "when serializing" do
|
||||
it "should serialize literals to RDF Literals" do
|
||||
serialized = Spira::Types::Any.serialize(15)
|
||||
serialized.should be_a RDF::Literal
|
||||
serialized = Spira::Types::Any.serialize("test")
|
||||
serialized.should be_a RDF::Literal
|
||||
end
|
||||
|
||||
it "should keep RDF::URIs as URIs" do
|
||||
Spira::Types::Any.serialize(@uri).should == @uri
|
||||
end
|
||||
|
||||
it "should fail to serialize collections" do
|
||||
lambda { Spira::Types::Any.serialize([]) }.should raise_error TypeError
|
||||
end
|
||||
end
|
||||
|
||||
context "when unserializing" do
|
||||
it "should unserialize to ruby types" do
|
||||
value = Spira::Types::Any.unserialize(RDF::Literal.new(5, :datatype => RDF::XSD.integer))
|
||||
value.should == 5
|
||||
value = Spira::Types::Any.unserialize(RDF::Literal.new("a string"))
|
||||
value.should == "a string"
|
||||
end
|
||||
|
||||
it "should unserialize URIs to URIs" do
|
||||
Spira::Types::Any.unserialize(@uri).should == @uri
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
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
|
||||
207
samples/XML/HITSP_C32.sch
Normal file
207
samples/XML/HITSP_C32.sch
Normal file
@@ -0,0 +1,207 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
|
||||
<!--
|
||||
Retrieved on 2016-08-30 from http://cda-validation.nist.gov/cda-validation/downloads.html.
|
||||
|
||||
Disclaimer from the National Institute of Standards and Technology website:
|
||||
|
||||
"Unless otherwise noted, this software was developed at the National Institute of Standards and Technology by employees of the Federal Government in the course of their official duties. Pursuant to title 17 Section 105 of the United States Code this software is not subject to copyright protection and is in the public domain. The CDA Guideline Validator is an experimental system. NIST assumes no responsibility whatsoever for its use by other parties, and makes no guarantees, expressed or implied, about its quality, reliability, or any other characteristic. We would appreciate acknowledgement if the software is used."
|
||||
-->
|
||||
|
||||
<!DOCTYPE schema [
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.1 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.1.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.2 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.2.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.3 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.3.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.4 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.4.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.5 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.5.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.6 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.6.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.7 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.7.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.8 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.8.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.9 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.9.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.10 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.10.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.11 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.11.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.12 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.12.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.13 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.13.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.14 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.14.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.15 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.15.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.16 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.16.ent'>
|
||||
<!ENTITY ent-2.16.840.1.113883.3.88.11.32.17 SYSTEM 'templates/2.16.840.1.113883.3.88.11.32.17.ent'>
|
||||
]>
|
||||
<schema xmlns="http://www.ascc.net/xml/schematron" xmlns:cda="urn:hl7-org:v3">
|
||||
<!--
|
||||
To use iso schematron instead of schematron 1.5,
|
||||
change the xmlns attribute from
|
||||
"http://www.ascc.net/xml/schematron"
|
||||
to
|
||||
"http://purl.oclc.org/dsdl/schematron"
|
||||
-->
|
||||
<title>HITSP_C32</title>
|
||||
<ns prefix="cda" uri="urn:hl7-org:v3"/>
|
||||
<ns prefix="sdtc" uri="urn:hl7-org:sdtc"/>
|
||||
<ns prefix="xsi" uri="http://www.w3.org/2001/XMLSchema-instance"/>
|
||||
|
||||
<phase id='errors'>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.1-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.2-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.3-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.4-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.5-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.6-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.7-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.8-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.9-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.10-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.11-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.12-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.13-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.14-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.15-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.16-errors'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.17-errors'/>
|
||||
</phase>
|
||||
|
||||
<phase id='warning'>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.1-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.2-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.3-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.4-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.5-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.6-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.7-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.8-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.9-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.10-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.11-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.12-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.13-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.14-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.15-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.16-warning'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.17-warning'/>
|
||||
</phase>
|
||||
|
||||
<phase id='note'>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.1-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.2-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.3-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.4-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.5-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.6-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.7-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.8-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.9-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.10-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.11-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.12-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.13-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.14-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.15-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.16-note'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.17-note'/>
|
||||
</phase>
|
||||
|
||||
<phase id='violation'>
|
||||
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.4-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.5-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.6-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.7-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.8-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.9-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.10-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.11-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.12-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.13-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.14-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.15-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.16-violation'/>
|
||||
<active pattern='p-2.16.840.1.113883.3.88.11.32.17-violation'/>
|
||||
|
||||
</phase>
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.1 -->
|
||||
<!-- HITSP/C32 Registration and Medication History -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.1;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.2 -->
|
||||
<!-- HITSP/C32 Language Spoken Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.2;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.3 -->
|
||||
<!-- HITSP/C32 Support Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.3;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.4 -->
|
||||
<!-- HITSP/C32 Healthcare Provider Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.4;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.5 -->
|
||||
<!-- HITSP/C32 Insurance Provider Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.5;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.6 -->
|
||||
<!-- HITSP/C32 Allergies and Drug Sensitivities Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.6;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.7 -->
|
||||
<!-- HITSP/C32 Conditions Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.7;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.8 -->
|
||||
<!-- HITSP/C32 Medications - Administration Information Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.8;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.9 -->
|
||||
<!-- HITSP/C32 Medications Module, Medication Information data element -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.9;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.10 -->
|
||||
<!-- HITSP/C32 Medications Module, Medication Information, Type of Medication data element -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.10;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.11 -->
|
||||
<!-- HITSP/C32 Order Information data element -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.11;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.12 -->
|
||||
<!-- HITSP/C32 Comments Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.12;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.13 -->
|
||||
<!-- HITSP/C32 Advance Directives Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.13;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.14 -->
|
||||
<!-- HITSP/C32 Immunizations Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.14;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.15 -->
|
||||
<!-- HITSP/C32 Vital Signs Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.15;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.16 -->
|
||||
<!-- HITSP/C32 Results Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.16;
|
||||
|
||||
<!-- Template_2.16.840.1.113883.3.88.11.32.17 -->
|
||||
<!-- HITSP/C32 Encounters Module -->
|
||||
|
||||
&ent-2.16.840.1.113883.3.88.11.32.17;
|
||||
|
||||
</schema>
|
||||
84
samples/XML/namespace-strict.sch
Normal file
84
samples/XML/namespace-strict.sch
Normal file
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
|
||||
queryBinding="xslt2"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<!-- XSLT 2.0 Schematron by Wendell Piez (Mulberry Technologies, Inc.),
|
||||
August 2011 -->
|
||||
|
||||
<!-- This Schematron is released into the public domain.
|
||||
Please credit your sources. -->
|
||||
|
||||
|
||||
<!-- Requires Schematron that allows embedded XSLT 2.0 with support for
|
||||
the namespace:: axis. Tested with Saxon 9.3.0.5. -->
|
||||
|
||||
<ns prefix="m" uri="http://www.mulberrytech.com/xslt/util"/>
|
||||
|
||||
<xsl:variable name="ns-set" xmlns:m="http://www.mulberrytech.com/xslt/util">
|
||||
<!-- include elements to declare expected namespace prefixes
|
||||
with their bindings, like so:
|
||||
|
||||
(prefix 'mml')
|
||||
<m:ns prefix="mml" uri="http://www.w3.org/1998/Math/MathML"/>
|
||||
(default namespace, no prefix)
|
||||
<m:ns prefix="" uri="http://www.w3.org/1998/Math/MathML"/>
|
||||
-->
|
||||
|
||||
<m:ns prefix="mml" uri="http://www.w3.org/1998/Math/MathML"/>
|
||||
<m:ns prefix="xlink" uri="http://www.w3.org/1999/xlink"/>>
|
||||
<m:ns prefix="oasis" uri="http://docs.oasis-open.org/ns/oasis-exchange/table"/>
|
||||
|
||||
<!-- 'xml' prefix is always in scope with this binding -->
|
||||
<m:ns prefix="xml" uri="http://www.w3.org/XML/1998/namespace"/>
|
||||
</xsl:variable>
|
||||
|
||||
<pattern>
|
||||
<!-- checking the document element against the spec given in ns-set -->
|
||||
<rule context="/*">
|
||||
<let name="new-prefixes" value="in-scope-prefixes(.)[not(. = $ns-set/m:ns/@prefix)]"/>
|
||||
<let name="new-namespaces" value="(for $p in (in-scope-prefixes(.)) return namespace-uri-for-prefix($p,.))
|
||||
[not(. = $ns-set/m:ns/@uri)]"/>
|
||||
<report test="exists($new-prefixes)">
|
||||
Unrecognized namespace prefix<xsl:value-of select="('es')[count($new-prefixes) gt 1]"/>:
|
||||
<value-of select="string-join(
|
||||
(for $p in $new-prefixes return m:label($p)),
|
||||
', ')"/>
|
||||
</report>
|
||||
<report test="exists($new-namespaces)">
|
||||
Unrecognized namespace URI<xsl:value-of select="('s')[count($new-namespaces) gt 1]"/>:
|
||||
<value-of select="string-join(($new-namespaces),', ')"/>
|
||||
</report>
|
||||
|
||||
<let name="misassigned-prefixes" value="in-scope-prefixes(.)[not(.=$new-prefixes)]
|
||||
[for $p in (.) return
|
||||
namespace-uri-for-prefix($p,current()) ne $ns-set/m:ns[@prefix=$p]/@uri]"/>
|
||||
<report test="exists($misassigned-prefixes)">
|
||||
Prefix<xsl:value-of select="('es')[count($misassigned-prefixes) gt 1]"/>
|
||||
assigned incorrectly: <value-of select="string-join(
|
||||
(for $p in $misassigned-prefixes return
|
||||
concat(m:label($p), ' (should be ''',$ns-set/m:ns[@prefix=$p]/@uri,''')')),
|
||||
'; ')"/>
|
||||
</report>
|
||||
</rule>
|
||||
|
||||
<!-- Elsewhere, all namespaces given must correspond with those
|
||||
on the parent -->
|
||||
<rule context="*">
|
||||
<assert test="every $n in (namespace::*) satisfies
|
||||
exists(../namespace::*[deep-equal(.,$n)])">
|
||||
Namespace may not be declared here.
|
||||
</assert>
|
||||
<assert test="every $n in (../namespace::*) satisfies
|
||||
exists(namespace::*[deep-equal(.,$n)])">
|
||||
Namespace may not be undeclared here.
|
||||
</assert>
|
||||
</rule>
|
||||
</pattern>
|
||||
|
||||
<xsl:function name="m:label" as="xs:string">
|
||||
<xsl:param name="label" as="xs:string"/>
|
||||
<xsl:sequence select="if (string($label)) then concat('''',$label,'''') else '[unprefixed]'"/>
|
||||
</xsl:function>
|
||||
|
||||
</schema>
|
||||
151
samples/XML/oasis-table.sch
Normal file
151
samples/XML/oasis-table.sch
Normal file
@@ -0,0 +1,151 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!-- ============================================================= -->
|
||||
<!--
|
||||
This work is in the public domain and may be reproduced, published or
|
||||
otherwise used without the permission of the National Library of Medicine (NLM).
|
||||
|
||||
We request only that the NLM is cited as the source of the work.
|
||||
|
||||
Although all reasonable efforts have been taken to ensure the accuracy and
|
||||
reliability of the software and data, the NLM and the U.S. Government do
|
||||
not and cannot warrant the performance or results that may be obtained by
|
||||
using this software or data. The NLM and the U.S. Government disclaim all
|
||||
warranties, express or implied, including warranties of performance,
|
||||
merchantability or fitness for any particular purpose.
|
||||
-->
|
||||
<!-- ============================================================= -->
|
||||
|
||||
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:m="http://mulberrytech.com/xslt/oasis-html/util"
|
||||
queryBinding="xslt2">
|
||||
|
||||
<title>OASIS/CALS table validation</title>
|
||||
|
||||
<!-- Mulberry Technologies (wap)
|
||||
|
||||
Designed for JATS, but probably also useful in other
|
||||
systems using OASIS/CALS/Docbook tables
|
||||
|
||||
Assumes a table DTD (or schema) valid to the OASIS/CALS/Docbook model
|
||||
-->
|
||||
|
||||
<ns prefix="o" uri="http://docs.oasis-open.org/ns/oasis-exchange/table"/>
|
||||
<ns prefix="m" uri="http://mulberrytech.com/xslt/oasis-html/util"/>
|
||||
<!--<ns prefix="xsl" uri="http://www.w3.org/1999/XSL/Transform"/>-->
|
||||
|
||||
<!-- the included stylesheet includes key and function declarations required -->
|
||||
<xsl:include href="oasis-exchange-support.xsl"/>
|
||||
|
||||
<let name="default-border-style" value="solid"/>
|
||||
|
||||
<pattern>
|
||||
<rule context="o:tgroup">
|
||||
<let name="okay-cols" value="@cols[. castable as xs:integer][. > 0]"/>
|
||||
<assert test="exists(@cols)">tgroup/@cols is not given</assert>
|
||||
<assert test="empty(@cols) or exists($okay-cols)">@cols should be a natural number
|
||||
(integer greater than zero).</assert>
|
||||
<assert test="empty($okay-cols) or empty(o:colspec) or (count(o:colspec) = @cols)">The tgroup has
|
||||
<value-of select="count(o:colspec)"/> colspec<value-of select="if (count(o:colspec) = 1) then '' else 's'"/>,
|
||||
but its @cols is given as '<value-of select="@cols"/>'.</assert>
|
||||
<report test="not(*/o:row/m:actual-cols(.) != */o:row/m:actual-cols(.))
|
||||
and ($okay-cols != m:actual-cols((*/o:row)[1]))">tgroup/@cols is given as
|
||||
<value-of select="$okay-cols"/>, but all rows have <value-of
|
||||
select="m:actual-cols((*/o:row)[1])"/> entr<value-of
|
||||
select="if (m:actual-cols((*/o:row)[1]) eq 1) then 'y' else 'ies'"/>.
|
||||
</report>
|
||||
<report test="@align='char'" role="warning">Without assigning @char or @charoff to everything,
|
||||
assigning @align='char' to tgroup only aligns contents to right of center.</report>
|
||||
</rule>
|
||||
|
||||
<rule context="o:colspec">
|
||||
<let name="okay-colwidth"
|
||||
value="@colwidth[exists(m:colwidth-unit(current()))]"/>
|
||||
<assert test="empty(@colwidth) or exists($okay-colwidth)">Malformed @colwidth.</assert>
|
||||
<assert test="empty($okay-colwidth) or
|
||||
(count(../o:colspec[m:colwidth-unit(.)=m:colwidth-unit(current())]) >
|
||||
count(../o:colspec[not(m:colwidth-unit(.)=m:colwidth-unit(current()))]))">@colwidth unit
|
||||
(<value-of select="m:colwidth-unit(.)"/>) is not consistent with the
|
||||
units on other colspecs.</assert>
|
||||
|
||||
<assert test="empty($okay-colwidth) or matches($okay-colwidth,'^\s*\*\s*$')
|
||||
or (xs:double(replace($okay-colwidth,'[\s\p{L}\*]','')[. castable as xs:double]) > 0)">@colwidth must be positive</assert>
|
||||
<report test="empty(m:colwidth-unit(.))
|
||||
and exists(../o:colspec/m:colwidth-unit(.))">The same unit of measure should be used on every
|
||||
colspec/@colwidth.</report>
|
||||
|
||||
<assert test="empty(@colnum) or (@colnum = count(.|preceding-sibling::o:colspec))">@colnum
|
||||
'<value-of select="@colnum"/>' does not correspond to
|
||||
the column's actual number (<value-of select="count(.|preceding-sibling::o:colspec)"/>)</assert>
|
||||
<report test="@colname = (../o:colspec except .)/@colname">The same @colname is assigned to more than
|
||||
one colspec.</report>
|
||||
<assert test="not(@align='char') or exists(@char)" role="warning">@align='char', but no @char is given.</assert>
|
||||
<report test="normalize-space(@char) and not((@align,../@align)[1]='char')">@char is given, but alignment is not 'char'.</report>
|
||||
<assert test="empty(@charoff) or ((@align,../@align)[1]='char')" role="warning">@charoff is given, but alignment is not 'char'.</assert>
|
||||
</rule>
|
||||
|
||||
<rule context="o:row">
|
||||
<let name="tgroup" value="ancestor::o:tgroup[1]"/>
|
||||
<let name="rowno" value="m:rowno(.)"/>
|
||||
<let name="given-entries" value="count(distinct-values(key('entry-by-row',$rowno,$tgroup)/m:across(.)))"/>
|
||||
<report test="$given-entries < $tgroup/@cols
|
||||
and exists($tgroup/@cols[. castable as xs:integer])" role="warning">
|
||||
The row doesn't have enough entries (<value-of select="$tgroup/@cols"/>
|
||||
<value-of select="if ($tgroup/@cols=1) then ' is' else ' are'"/> expected;
|
||||
<value-of select="$given-entries"/> <value-of select="if ($given-entries=1) then ' is' else ' are'"/> given).
|
||||
</report>
|
||||
</rule>
|
||||
<rule context="o:entry">
|
||||
<let name="tgroup" value="ancestor::o:tgroup[1]"/>
|
||||
<assert test="empty(@nameend) or exists(key('colspec-by-name',@nameend,$tgroup))">No colspec is
|
||||
named <value-of select="@nameend"/>.</assert>
|
||||
<assert test="empty(@nameend|@namest) or
|
||||
(key('colspec-by-name',@nameend,$tgroup) >> key('colspec-by-name',@namest,$tgroup))">Entry's end
|
||||
column (<value-of select="@nameend"/>) must follow its start column
|
||||
(<value-of select="@namest"/>).</assert>
|
||||
<assert test="empty(@namest) or exists(key('colspec-by-name',@namest,$tgroup))">No colspec is
|
||||
named <value-of select="@namest"/>.</assert>
|
||||
<assert test="empty(@colname) or exists(key('colspec-by-name',@colname,$tgroup))">No colspec is
|
||||
named <value-of select="@colname"/>.</assert>
|
||||
<assert test="empty(@nameend) or exists(@colname|@namest)">Entry is assigned an end
|
||||
column (<value-of select="@nameend"/>) but not a start column.</assert>
|
||||
<assert test="not(@colname != @namest)">Entry is assigned to column <value-of select="@colname"/>,
|
||||
so it can't start at column <value-of select="@namest"/>.
|
||||
</assert>
|
||||
|
||||
<assert test="m:across(.)[1] > (preceding-sibling::o:entry[1]/m:across(.)[last()],0)[1]">
|
||||
Entry must be assigned to a free column (after its preceding entries).
|
||||
</assert>
|
||||
|
||||
<report test="m:down(.) > m:rowno(../../o:row[last()])">This entry doesn't fit into
|
||||
its <value-of select="local-name(../..)"/>.</report>
|
||||
|
||||
<report test="(exists(@morerows) and
|
||||
(key('entry-by-row',m:down(.),$tgroup)/m:across(.)[last()] > $tgroup/@cols))
|
||||
or empty($tgroup/@cols)" role="warning">
|
||||
A row in which this entry appears has too many entries.
|
||||
</report>
|
||||
<!-- the next rule will never fire for entries spanning columns: they always
|
||||
fit by virtue of being assigned a @nameend -->
|
||||
<report test="(m:across(.)[last()] > $tgroup/@cols) or empty($tgroup/@cols)">
|
||||
Entry does not fit in row. (<value-of select="$tgroup/@cols"/> are allowed; entry
|
||||
is in column <value-of select="m:across(.)[last()]"/>.)
|
||||
<!-- Entry does not fit in row. (# columns are allowed; row ends in column #.) -->
|
||||
</report>
|
||||
|
||||
<assert test="empty(@char) or m:align(.)='char'" role="warning">@char is given, but alignment is not 'char'.</assert>
|
||||
<assert test="empty(@charoff) or m:align(.)='char'" role="warning">@charoff is given, but alignment is not 'char'.</assert>
|
||||
<assert test="empty(@charoff) or ((@charoff castable as xs:integer) and
|
||||
(@charoff >= 0) and (@charoff <= 100))">@charoff must be a whole number between 0 and 100.</assert>
|
||||
<assert test="not(m:align(.)='char') or exists(@char|m:colspec-for-entry(.)/@char)" role="warning">
|
||||
Entry is designated for character alignment, but no character (@char) is given on it or its colspec.
|
||||
</assert>
|
||||
<assert test="empty(@char) or not(@char != m:colspec-for-entry(.)/@char)">
|
||||
Entry is assigned an alignment character (<value-of select="@char"/>)
|
||||
different from its column's (<value-of select="m:colspec-for-entry(.)/@char"/>).</assert>
|
||||
<report test="exists(*) and (m:align(.)='char')" role="warning">With @align='char', markup of
|
||||
entry contents (<value-of select="string-join(distinct-values(*/name()),', ')"/>) will be ignored.</report>
|
||||
</rule>
|
||||
</pattern>
|
||||
</schema>
|
||||
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}"`
|
||||
@@ -42,7 +42,7 @@ class DirectoryPackage
|
||||
case File.extname(path.downcase)
|
||||
when '.plist'
|
||||
path.split('/')[-2] == 'Syntaxes'
|
||||
when '.tmlanguage', '.yaml-tmlanguage', '.sublime-syntax'
|
||||
when '.tmlanguage', '.yaml-tmlanguage'
|
||||
true
|
||||
when '.cson', '.json'
|
||||
path.split('/')[-2] == 'grammars'
|
||||
@@ -114,7 +114,7 @@ class SVNPackage
|
||||
def fetch(tmp_dir)
|
||||
`svn export -q "#{url}/Syntaxes" "#{tmp_dir}/Syntaxes"`
|
||||
raise "Failed to export SVN repository: #{url}: #{$?.to_s}" unless $?.success?
|
||||
Dir["#{tmp_dir}/Syntaxes/*.{plist,tmLanguage,tmlanguage,YAML-tmLanguage,sublime-syntax}"]
|
||||
Dir["#{tmp_dir}/Syntaxes/*.{plist,tmLanguage,tmlanguage,YAML-tmLanguage}"]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -148,7 +148,7 @@ def load_grammar(path)
|
||||
case File.extname(path.downcase)
|
||||
when '.plist', '.tmlanguage'
|
||||
Plist::parse_xml(path)
|
||||
when '.yaml-tmlanguage', '.sublime-syntax'
|
||||
when '.yaml-tmlanguage'
|
||||
content = File.read(path)
|
||||
# Attempt to parse YAML file even if it has a YAML 1.2 header
|
||||
if content.lines[0] =~ /^%YAML[ :]1\.2/
|
||||
@@ -180,7 +180,7 @@ def load_grammars(tmp_dir, source, all_scopes)
|
||||
else
|
||||
SingleFile.new(source)
|
||||
end
|
||||
elsif source.end_with?('.tmLanguage', '.plist', '.YAML-tmLanguage', '.sublime-syntax')
|
||||
elsif source.end_with?('.tmLanguage', '.plist', '.YAML-tmLanguage')
|
||||
SingleGrammar.new(source)
|
||||
elsif source.start_with?('https://github.com')
|
||||
GitHubPackage.new(source)
|
||||
|
||||
@@ -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?
|
||||
|
||||
82
script/set-language-ids
Executable file
82
script/set-language-ids
Executable file
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env ruby
|
||||
require 'yaml'
|
||||
require 'pry'
|
||||
|
||||
header = <<-EOF
|
||||
# Defines all Languages known to GitHub.
|
||||
#
|
||||
# type - Either data, programming, markup, prose, or nil
|
||||
# aliases - An Array of additional aliases (implicitly
|
||||
# includes name.downcase)
|
||||
# ace_mode - A String name of the Ace Mode used for highlighting whenever
|
||||
# a file is edited. This must match one of the filenames in http://git.io/3XO_Cg.
|
||||
# Use "text" if a mode does not exist.
|
||||
# wrap - Boolean wrap to enable line wrapping (default: false)
|
||||
# extensions - An Array of associated extensions (the first one is
|
||||
# considered the primary extension, the others should be
|
||||
# listed alphabetically)
|
||||
# interpreters - An Array of associated interpreters
|
||||
# searchable - Boolean flag to enable searching (defaults to true)
|
||||
# search_term - Deprecated: Some languages may be indexed under a
|
||||
# different alias. Avoid defining new exceptions.
|
||||
# language_id - Integer used as a language-name-independent indexed field so that we can rename
|
||||
# languages in Linguist without reindexing all the code on GitHub. Must not be
|
||||
# changed for existing languages without the explicit permission of GitHub staff.
|
||||
# color - CSS hex color to represent the language.
|
||||
# tm_scope - The TextMate scope that represents this programming
|
||||
# language. This should match one of the scopes listed in
|
||||
# the grammars.yml file. Use "none" if there is no grammar
|
||||
# for this language.
|
||||
# group - Name of the parent language. Languages in a group are counted
|
||||
# in the statistics as the parent language.
|
||||
#
|
||||
# Any additions or modifications (even trivial) should have corresponding
|
||||
# test changes in `test/test_blob.rb`.
|
||||
#
|
||||
# Please keep this list alphabetized. Capitalization comes before lowercase.
|
||||
|
||||
EOF
|
||||
|
||||
generated = true if ARGV[0] == "--force"
|
||||
update = true if ARGV[0] == "--update"
|
||||
|
||||
if generated
|
||||
puts "You're regenerating all of the language_id attributes for all Linguist "
|
||||
puts "languages defined in languages.yml. This is almost certainly NOT what"
|
||||
puts "you meant to do!"
|
||||
|
||||
language_index = 0
|
||||
|
||||
languages = YAML.load(File.read("lib/linguist/languages.yml"))
|
||||
languages.each do |name, vals|
|
||||
vals.merge!('language_id' => language_index)
|
||||
language_index += 1
|
||||
end
|
||||
|
||||
File.write("lib/linguist/languages.yml", header + YAML.dump(languages))
|
||||
elsif update
|
||||
puts "Adding new language_id attributes to languages.yml that don't have one set"
|
||||
languages = YAML.load(File.read("lib/linguist/languages.yml"))
|
||||
|
||||
# First grab the maximum language_id
|
||||
language_ids = []
|
||||
languages.each { |name, vals| language_ids << vals['language_id'] if vals.has_key?('language_id')}
|
||||
max_language_id = language_ids.max
|
||||
puts "Current maximum language_id is #{max_language_id}"
|
||||
|
||||
missing_count = 0
|
||||
language_index = max_language_id
|
||||
|
||||
languages.each do |name, vals|
|
||||
unless vals.has_key?('language_id')
|
||||
language_index += 1
|
||||
missing_count += 1
|
||||
vals.merge!('language_id' => language_index)
|
||||
end
|
||||
end
|
||||
|
||||
File.write("lib/linguist/languages.yml", header + YAML.dump(languages))
|
||||
puts "Updated language_id attributes for #{missing_count} languages"
|
||||
else
|
||||
puts "Whatever you want me to do, I can't figure it out. Giving up..."
|
||||
end
|
||||
3
test/fixtures/Data/Modelines/iamjs.pl
vendored
Normal file
3
test/fixtures/Data/Modelines/iamjs.pl
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# vim: noexpandtab: ft=javascript
|
||||
|
||||
"It's JavaScript, baby";
|
||||
4
test/fixtures/Data/Modelines/iamjs2.pl
vendored
Normal file
4
test/fixtures/Data/Modelines/iamjs2.pl
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
# vim:noexpandtab titlestring=hi\|there\\\ ft=perl ts=4
|
||||
# vim:noexpandtab titlestring=hi|there\\ ft=javascript ts=4
|
||||
|
||||
"Still JavaScript, bruh";
|
||||
3
test/fixtures/Data/Modelines/ruby10
vendored
Normal file
3
test/fixtures/Data/Modelines/ruby10
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
ex: noexpandtab: ft=ruby
|
||||
|
||||
# Still Ruby
|
||||
3
test/fixtures/Data/Modelines/ruby11
vendored
Normal file
3
test/fixtures/Data/Modelines/ruby11
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# vim600: ft=ruby
|
||||
|
||||
# Targets Vim 6.0 or later
|
||||
3
test/fixtures/Data/Modelines/ruby12
vendored
Normal file
3
test/fixtures/Data/Modelines/ruby12
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
vim<520: ft=ruby
|
||||
|
||||
# Targets Vim 5.20 and earlier
|
||||
3
test/fixtures/Data/Modelines/seeplusplusEmacs10
vendored
Normal file
3
test/fixtures/Data/Modelines/seeplusplusEmacs10
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
// -*- foo-bar mode: c++ -*-
|
||||
|
||||
"Malformed modeline, but still understood by Emacs to be C++."
|
||||
1
test/fixtures/Data/Modelines/seeplusplusEmacs11
vendored
Normal file
1
test/fixtures/Data/Modelines/seeplusplusEmacs11
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/* -*- mode: c++ -------*- */
|
||||
1
test/fixtures/Data/Modelines/seeplusplusEmacs12
vendored
Normal file
1
test/fixtures/Data/Modelines/seeplusplusEmacs12
vendored
Normal file
@@ -0,0 +1 @@
|
||||
-*--------- foo:bar mode: c++ -*-
|
||||
1
test/fixtures/go/food_vendor/candy.go
vendored
Normal file
1
test/fixtures/go/food_vendor/candy.go
vendored
Normal file
@@ -0,0 +1 @@
|
||||
// empty file for testing that paths with vendor in them don't get ingored
|
||||
@@ -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)
|
||||
@@ -212,6 +216,11 @@ class TestBlob < Minitest::Test
|
||||
# Generated by Zephir
|
||||
assert !sample_blob_memory("Zephir/Router.zep").generated?
|
||||
|
||||
# Go vendored dependencies
|
||||
refute sample_blob("vendor/vendor.json").generated?
|
||||
assert sample_blob("vendor/github.com/kr/s3/sign.go").generated?
|
||||
refute fixture_blob("go/food_vendor/candy.go").generated?
|
||||
|
||||
# Cython-generated C/C++
|
||||
assert sample_blob_memory("C/sgd_fast.c").generated?
|
||||
assert sample_blob_memory("C++/wrapper_inner.cpp").generated?
|
||||
|
||||
@@ -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?
|
||||
|
||||
|
||||
@@ -42,6 +42,11 @@ class TestGenerated < Minitest::Test
|
||||
generated_sample_without_loading_data("Dummy/foo.xcworkspacedata")
|
||||
generated_sample_without_loading_data("Dummy/foo.xcuserstate")
|
||||
|
||||
# Go-specific vendored paths
|
||||
generated_sample_without_loading_data("go/vendor/github.com/foo.go")
|
||||
generated_sample_without_loading_data("go/vendor/golang.org/src/foo.c")
|
||||
generated_sample_without_loading_data("go/vendor/gopkg.in/some/nested/path/foo.go")
|
||||
|
||||
# .NET designer file
|
||||
generated_sample_without_loading_data("Dummu/foo.designer.cs")
|
||||
|
||||
|
||||
@@ -5,9 +5,42 @@ class TestGrammars < Minitest::Test
|
||||
|
||||
# List of projects that are allowed without licenses
|
||||
PROJECT_WHITELIST = [
|
||||
# Dual MIT and GPL license
|
||||
"vendor/grammars/language-csharp",
|
||||
"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
|
||||
@@ -87,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
|
||||
@@ -123,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
|
||||
@@ -136,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
|
||||
@@ -122,9 +126,12 @@ class TestHeuristcs < Minitest::Test
|
||||
})
|
||||
end
|
||||
|
||||
# Candidate languages = ["Assembly", "C++", "HTML", "PAWN", "PHP",
|
||||
# "POV-Ray SDL", "Pascal", "SQL", "SourcePawn"]
|
||||
def test_inc_by_heuristics
|
||||
assert_heuristics({
|
||||
"PHP" => all_fixtures("PHP", "*.inc")
|
||||
"PHP" => all_fixtures("PHP", "*.inc"),
|
||||
"POV-Ray SDL" => all_fixtures("POV-Ray SDL", "*.inc")
|
||||
})
|
||||
end
|
||||
|
||||
@@ -142,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
|
||||
|
||||
@@ -67,6 +67,22 @@ class TestLanguage < Minitest::Test
|
||||
assert_nil Language.find_by_alias(nil)
|
||||
end
|
||||
|
||||
# Note these are set by script/set-language-ids. If these tests fail then someone
|
||||
# has changed the language_id fields set in languages.yml which is almost certainly
|
||||
# not what you want to happen (these fields are used in GitHub's search indexes)
|
||||
def test_language_ids
|
||||
assert_equal 4, Language['ANTLR'].language_id
|
||||
assert_equal 54, Language['Ceylon'].language_id
|
||||
assert_equal 326, Language['Ruby'].language_id
|
||||
assert_equal 421, Language['xBase'].language_id
|
||||
end
|
||||
|
||||
def test_find_by_id
|
||||
assert_equal Language['Elixir'], Language.find_by_id(100)
|
||||
assert_equal Language['Ruby'], Language.find_by_id(326)
|
||||
assert_equal Language['xBase'], Language.find_by_id(421)
|
||||
end
|
||||
|
||||
def test_groups
|
||||
# Test a couple identity cases
|
||||
assert_equal Language['Perl'], Language['Perl'].group
|
||||
@@ -329,8 +345,24 @@ 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
|
||||
@@ -386,6 +418,22 @@ class TestLanguage < Minitest::Test
|
||||
assert missing.empty?, message
|
||||
end
|
||||
|
||||
def test_all_languages_have_a_language_id_set
|
||||
missing = Language.all.select { |language| language.language_id.nil? }
|
||||
|
||||
message = "The following languages do not have a language_id listed in languages.yml. Please add language_id fields for all new languages.\n"
|
||||
missing.each { |language| message << "#{language.name}\n" }
|
||||
assert missing.empty?, message
|
||||
end
|
||||
|
||||
def test_all_language_id_are_unique
|
||||
duplicates = Language.all.group_by{ |language| language.language_id }.select { |k, v| v.size > 1 }.map(&:first)
|
||||
|
||||
message = "The following language_id are used several times in languages.yml. Please use script/set-language-ids --update as per the contribution guidelines.\n"
|
||||
duplicates.each { |language_id| message << "#{language_id}\n" }
|
||||
assert duplicates.empty?, message
|
||||
end
|
||||
|
||||
def test_all_languages_have_a_valid_ace_mode
|
||||
ace_fixture_path = File.join('test', 'fixtures', 'ace_modes.json')
|
||||
skip("No ace_modes.json file") unless File.exist?(ace_fixture_path)
|
||||
@@ -404,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__)))
|
||||
|
||||
@@ -412,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
|
||||
|
||||
@@ -17,6 +17,9 @@ class TestModelines < Minitest::Test
|
||||
assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby7")
|
||||
assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby8")
|
||||
assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby9")
|
||||
assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby10")
|
||||
assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby11")
|
||||
assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby12")
|
||||
assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplus")
|
||||
assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1")
|
||||
assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2")
|
||||
@@ -27,9 +30,14 @@ class TestModelines < Minitest::Test
|
||||
assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs7")
|
||||
assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs8")
|
||||
assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs9")
|
||||
assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs10")
|
||||
assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs11")
|
||||
assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs12")
|
||||
assert_modeline Language["Text"], fixture_blob("Data/Modelines/fundamentalEmacs.c")
|
||||
assert_modeline Language["Prolog"], fixture_blob("Data/Modelines/not_perl.pl")
|
||||
assert_modeline Language["Smalltalk"], fixture_blob("Data/Modelines/example_smalltalk.md")
|
||||
assert_modeline Language["JavaScript"], fixture_blob("Data/Modelines/iamjs.pl")
|
||||
assert_modeline Language["JavaScript"], fixture_blob("Data/Modelines/iamjs2.pl")
|
||||
assert_modeline Language["PHP"], fixture_blob("Data/Modelines/iamphp.inc")
|
||||
assert_modeline nil, sample_blob("C/main.c")
|
||||
end
|
||||
@@ -48,9 +56,14 @@ class TestModelines < Minitest::Test
|
||||
assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs7").language
|
||||
assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs8").language
|
||||
assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs9").language
|
||||
assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs10").language
|
||||
assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs11").language
|
||||
assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs12").language
|
||||
assert_equal Language["Text"], fixture_blob("Data/Modelines/fundamentalEmacs.c").language
|
||||
assert_equal Language["Prolog"], fixture_blob("Data/Modelines/not_perl.pl").language
|
||||
assert_equal Language["Smalltalk"], fixture_blob("Data/Modelines/example_smalltalk.md").language
|
||||
assert_equal Language["JavaScript"], fixture_blob("Data/Modelines/iamjs.pl").language
|
||||
assert_equal Language["JavaScript"], fixture_blob("Data/Modelines/iamjs2.pl").language
|
||||
assert_equal Language["PHP"], fixture_blob("Data/Modelines/iamphp.inc").language
|
||||
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: 08585643c0...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/NSIS
vendored
2
vendor/grammars/NSIS
vendored
Submodule vendor/grammars/NSIS updated: b9be931f41...696d06cb2b
2
vendor/grammars/Sublime-Inform/.gitignore
vendored
2
vendor/grammars/Sublime-Inform/.gitignore
vendored
@@ -1,2 +0,0 @@
|
||||
|
||||
.DS_Store
|
||||
@@ -1,6 +0,0 @@
|
||||
<snippet>
|
||||
<content><![CDATA[Book $1 - ${2:Title}
|
||||
]]></content>
|
||||
<tabTrigger>book</tabTrigger>
|
||||
<scope>source.Inform7</scope>
|
||||
</snippet>
|
||||
@@ -1,6 +0,0 @@
|
||||
<snippet>
|
||||
<content><![CDATA[Chapter $1 - ${2:Title}
|
||||
]]></content>
|
||||
<tabTrigger>chapter</tabTrigger>
|
||||
<scope>source.Inform7</scope>
|
||||
</snippet>
|
||||
@@ -1,7 +0,0 @@
|
||||
<snippet>
|
||||
<content><![CDATA[
|
||||
${1:DoorName} is a door. $1 is ${2:Direction} from ${3:Room}.
|
||||
]]></content>
|
||||
<tabTrigger>door</tabTrigger>
|
||||
<scope>source.Inform7</scope>
|
||||
</snippet>
|
||||
@@ -1,34 +0,0 @@
|
||||
{ "name": "Inform7",
|
||||
"scopeName": "source.Inform7",
|
||||
"fileTypes": ["i7x"],
|
||||
"patterns": [
|
||||
{ "name": "keyword.control.Inform7",
|
||||
"match": "\\b(Include|Release)\\b"
|
||||
},
|
||||
{ "name" : "comment.block.Inform7",
|
||||
"begin" : "\\[",
|
||||
"end" : "\\]",
|
||||
"comment" : "All comments in Inform7 are delimited this way."
|
||||
},
|
||||
{ "name" : "string.quoted.double.Inform7",
|
||||
"begin" : "\"",
|
||||
"end" : "\"",
|
||||
"patterns": [
|
||||
{ "name" : "keyword.operator.Inform7",
|
||||
"begin" : "\\[",
|
||||
"end" : "\\]",
|
||||
"comment" : "For logic inside of strings."
|
||||
}
|
||||
]
|
||||
},
|
||||
{ "name" : "storage.type.Inform7",
|
||||
"match" : "(Volume|Book|Chapter|Part|Section|Table)\\s+\\d?\\s+-?\\s+((?:\\w|\\s|-)*)",
|
||||
"comment": "Matches headings for major sections in Inform7"
|
||||
},
|
||||
{ "name": "constant.numeric.Inform7",
|
||||
"match": "([0-9])+",
|
||||
"comment":"Gotta call out the numbers!"
|
||||
}
|
||||
],
|
||||
"uuid": "0c4cbdee-beb7-4ea6-af56-27246d479373"
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>fileTypes</key>
|
||||
<array>
|
||||
<string>i7x</string>
|
||||
<string>inform</string>
|
||||
<string>ni</string>
|
||||
</array>
|
||||
<key>name</key>
|
||||
<string>Inform7</string>
|
||||
<key>patterns</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>match</key>
|
||||
<string>\b(Include|Release)\b</string>
|
||||
<key>name</key>
|
||||
<string>keyword.control.Inform7</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>begin</key>
|
||||
<string>\[</string>
|
||||
<key>comment</key>
|
||||
<string>All comments in Inform7 are delimited this way.</string>
|
||||
<key>end</key>
|
||||
<string>\]</string>
|
||||
<key>name</key>
|
||||
<string>comment.block.Inform7</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>begin</key>
|
||||
<string>"</string>
|
||||
<key>end</key>
|
||||
<string>"</string>
|
||||
<key>name</key>
|
||||
<string>string.quoted.double.Inform7</string>
|
||||
<key>patterns</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>begin</key>
|
||||
<string>\[</string>
|
||||
<key>comment</key>
|
||||
<string>For logic inside of strings.</string>
|
||||
<key>end</key>
|
||||
<string>\]</string>
|
||||
<key>name</key>
|
||||
<string>keyword.operator.Inform7</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>comment</key>
|
||||
<string>Matches headings for major sections in Inform7</string>
|
||||
<key>match</key>
|
||||
<string>(Volume|Book|Chapter|Part|Section|Table)\s+\d?\s+-?\s+((?:\w|\s|-)*)</string>
|
||||
<key>name</key>
|
||||
<string>storage.type.Inform7</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>comment</key>
|
||||
<string>Gotta call out the numbers!</string>
|
||||
<key>match</key>
|
||||
<string>([0-9])+</string>
|
||||
<key>name</key>
|
||||
<string>constant.numeric.Inform7</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>scopeName</key>
|
||||
<string>source.Inform7</string>
|
||||
<key>uuid</key>
|
||||
<string>0c4cbdee-beb7-4ea6-af56-27246d479373</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,8 +0,0 @@
|
||||
<snippet>
|
||||
<content><![CDATA[
|
||||
$1 is a portable thing in ${2:Room} ${3:ShortDescription}
|
||||
The description of $1 is ${4:Description}
|
||||
]]></content>
|
||||
<tabTrigger>object</tabTrigger>
|
||||
<scope>source.Inform7</scope>
|
||||
</snippet>
|
||||
@@ -1,6 +0,0 @@
|
||||
<snippet>
|
||||
<content><![CDATA[Part $1 - ${2:Title}
|
||||
]]></content>
|
||||
<tabTrigger>part</tabTrigger>
|
||||
<scope>source.Inform7</scope>
|
||||
</snippet>
|
||||
@@ -1,7 +0,0 @@
|
||||
<snippet>
|
||||
<content><![CDATA[
|
||||
${1:RoomName} is a room in ${2:Region}. "${3:Description}"
|
||||
]]></content>
|
||||
<tabTrigger>room</tabTrigger>
|
||||
<scope>source.Inform7</scope>
|
||||
</snippet>
|
||||
@@ -1,11 +0,0 @@
|
||||
<snippet>
|
||||
<content><![CDATA[
|
||||
${1:SceneName} is a Scene.
|
||||
$1 begins when $2 .
|
||||
$1 ends when $3 .
|
||||
When $1 begins: $4 .
|
||||
When $1 ends: $5 .
|
||||
]]></content>
|
||||
<tabTrigger>scene</tabTrigger>
|
||||
<scope>source.Inform7</scope>
|
||||
</snippet>
|
||||
@@ -1,6 +0,0 @@
|
||||
<snippet>
|
||||
<content><![CDATA[Section $1 - ${2:Title}
|
||||
]]></content>
|
||||
<tabTrigger>section</tabTrigger>
|
||||
<scope>source.Inform7</scope>
|
||||
</snippet>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user