Resolve conflicts from upstream changes

This commit is contained in:
Alhadis
2016-10-06 17:00:28 +11:00
123 changed files with 4724 additions and 2615 deletions

1
.gitignore vendored
View File

@@ -1,5 +1,6 @@
/Gemfile.lock
.bundle/
.idea
benchmark/
lib/linguist/samples.json
/grammars

37
.gitmodules vendored
View File

@@ -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
@@ -412,9 +412,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 +559,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 +602,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 +666,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,3 +782,15 @@ 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

View File

@@ -33,6 +33,7 @@ To add support for a new language:
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 samples for your language to the [samples directory][samples] in the correct subdirectory.
0. Add a `language_id` for your language. See `script/set-language-ids` for more information. **You should only ever need to run `script/set-language-ids --update`. Anything other than this risks breaking GitHub search :cry:**
0. 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:
@@ -84,7 +85,7 @@ Linguist is maintained with :heart: by:
- @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

View File

@@ -23,7 +23,7 @@ class GitLinguist
if @incremental && stats = load_language_stats
old_commit_oid, old_stats = stats
# A cache with NULL oid means that we want to froze
# A cache with NULL oid means that we want to freeze
# these language stats in place and stop computing
# them (for performance reasons)
return old_stats if old_commit_oid == NULL_OID
@@ -111,7 +111,7 @@ def git_linguist(args)
parser.parse!(args)
git_dir = `git rev-parse --git-dir`.strip
raise "git-linguist must be ran in a Git repository (#{Dir.pwd})" unless $?.success?
raise "git-linguist must be run in a Git repository (#{Dir.pwd})" unless $?.success?
wrapper = GitLinguist.new(git_dir, commit, incremental)
case args.pop

View File

@@ -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

View File

@@ -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,11 +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
@@ -37,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
@@ -48,7 +50,7 @@ vendor/grammars/LiveScript.tmbundle:
vendor/grammars/MagicPython:
- source.python
- source.regexp.python
vendor/grammars/Modelica/:
vendor/grammars/Modelica:
- source.modelica
vendor/grammars/NSIS:
- source.nsis
@@ -58,7 +60,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
@@ -73,10 +75,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
@@ -86,7 +88,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
@@ -101,26 +103,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
@@ -149,20 +149,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
@@ -172,16 +172,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:
@@ -192,7 +192,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
@@ -217,7 +217,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
@@ -241,9 +241,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
@@ -268,9 +266,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
@@ -298,7 +296,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
@@ -330,12 +328,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
@@ -354,6 +354,8 @@ vendor/grammars/language-csound:
- source.csound
- source.csound-document
- source.csound-score
vendor/grammars/language-emacs-lisp:
- source.emacs.lisp
vendor/grammars/language-gfm:
- source.gfm
vendor/grammars/language-graphql:
@@ -375,10 +377,10 @@ vendor/grammars/language-javascript:
- source.js
- 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
@@ -398,6 +400,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
@@ -407,6 +412,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
@@ -414,7 +421,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
@@ -448,11 +455,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
@@ -486,9 +493,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:
@@ -499,7 +506,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
@@ -538,11 +545,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
@@ -553,9 +560,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
@@ -563,12 +570,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
@@ -577,29 +584,31 @@ 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
- text.find-refs
vendor/grammars/sublime-varnish:
- source.varnish.vcl
vendor/grammars/sublime_cobol:
@@ -607,9 +616,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:
@@ -632,7 +641,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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -165,7 +165,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 +229,9 @@
# Fabric
- Fabric.framework/
# BuddyBuild
- BuddyBuildSDK.framework/
# git config files
- gitattributes$
- gitignore$

View File

@@ -1,3 +1,3 @@
module Linguist
VERSION = "4.8.9"
VERSION = "4.8.15"
end

View File

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

View 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)))

View 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")

View File

@@ -0,0 +1,197 @@
;; -*- mode: emacs-lisp -*-
;; This file is loaded by Spacemacs at startup.
;; It must be stored in your home directory.
(defun dotspacemacs/layers ()
"Configuration Layers declaration."
(setq-default
;; List of additional paths where to look for configuration layers.
;; Paths must have a trailing slash (i.e. `~/.mycontribs/')
dotspacemacs-configuration-layer-path '()
;; List of configuration layers to load. If it is the symbol `all' instead
;; of a list then all discovered layers will be installed.
dotspacemacs-configuration-layers
'(
;; ----------------------------------------------------------------
;; Example of useful layers you may want to use right away.
;; Uncomment some layer names and press <SPC f e R> (Vim style) or
;; <M-m f e R> (Emacs style) to install them.
;; ----------------------------------------------------------------
emacs-lisp
charlock_holmes
escape_utils
mime-types
rugged
minitest
mocha
plist
pry
rake
yajl-ruby
colour-proximity
licensed
licensee
;; List of additional packages that will be installed without being
;; wrapped in a layer. If you need some configuration for these
;; packages then consider to create a layer, you can also put the
;; configuration in `dotspacemacs/config'.
dotspacemacs-additional-packages '()
;; A list of packages and/or extensions that will not be install and loaded.
dotspacemacs-excluded-packages '()
;; If non-nil spacemacs will delete any orphan packages, i.e. packages that
;; are declared in a layer which is not a member of
;; the list `dotspacemacs-configuration-layers'
dotspacemacs-delete-orphan-packages t))
(defun dotspacemacs/init ()
"Initialization function.
This function is called at the very startup of Spacemacs initialization
before layers configuration."
;; This setq-default sexp is an exhaustive list of all the supported
;; spacemacs settings.
(setq-default
;; Either `vim' or `emacs'. Evil is always enabled but if the variable
;; is `emacs' then the `holy-mode' is enabled at startup.
dotspacemacs-editing-style 'vim
;; If non nil output loading progress in `*Messages*' buffer.
dotspacemacs-verbose-loading nil
;; Specify the startup banner. Default value is `official', it displays
;; the official spacemacs logo. An integer value is the index of text
;; banner, `random' chooses a random text banner in `core/banners'
;; directory. A string value must be a path to an image format supported
;; by your Emacs build.
;; If the value is nil then no banner is displayed.
dotspacemacs-startup-banner 'official
;; List of items to show in the startup buffer. If nil it is disabled.
;; Possible values are: `recents' `bookmarks' `projects'."
dotspacemacs-startup-lists '(bookmarks projects recents)
;; List of themes, the first of the list is loaded when spacemacs starts.
;; Press <SPC> T n to cycle to the next theme in the list (works great
;; with 2 themes variants, one dark and one light)
dotspacemacs-themes '(
spacemacs-dark
spacemacs-light
solarized-dark
solarized-light
atom-light-ui
atom-dark-ui
atom-material-ui
zenburn
;; If non nil the cursor colour matches the state colour.
dotspacemacs-colorize-cursor-according-to-state t
;; Default font. `powerline-scale' allows to quickly tweak the mode-line
;; size to make separators look not too crappy.
dotspacemacs-default-font '("Menloco"
:size 11
:weight normal
:width normal
:powerline-scale 1.1)
;; The leader key
dotspacemacs-leader-key "SPC"
;; The leader key accessible in `emacs state' and `insert state'
dotspacemacs-emacs-leader-key "M-m"
;; Major mode leader key is a shortcut key which is the equivalent of
;; pressing `<leader> m`. Set it to `nil` to disable it.
dotspacemacs-major-mode-leader-key ","
;; Major mode leader key accessible in `emacs state' and `insert state'
dotspacemacs-major-mode-emacs-leader-key "C-M-m"
;; The command key used for Evil commands (ex-commands) and
;; Emacs commands (M-x).
;; By default the command key is `:' so ex-commands are executed like in Vim
;; with `:' and Emacs commands are executed with `<leader> :'.
dotspacemacs-command-key ":"
;; Location where to auto-save files. Possible values are `original' to
;; auto-save the file in-place, `cache' to auto-save the file to another
;; file stored in the cache directory and `nil' to disable auto-saving.
;; Default value is `cache'.
dotspacemacs-auto-save-file-location 'cache
;; If non nil then `ido' replaces `helm' for some commands. For now only
;; `find-files' (SPC f f) is replaced.
dotspacemacs-use-ido nil
;; If non nil the paste micro-state is enabled. When enabled pressing `p`
;; several times cycle between the kill ring content.
dotspacemacs-enable-paste-micro-state nil
;; Guide-key delay in seconds. The Guide-key is the popup buffer listing
;; the commands bound to the current keystrokes.
dotspacemacs-guide-key-delay 0.4
;; If non nil a progress bar is displayed when spacemacs is loading. This
;; may increase the boot time on some systems and emacs builds, set it to
;; nil ;; to boost the loading time.
dotspacemacs-loading-progress-bar t
;; If non nil the frame is fullscreen when Emacs starts up.
;; (Emacs 24.4+ only)
dotspacemacs-fullscreen-at-startup nil
;; If non nil `spacemacs/toggle-fullscreen' will not use native fullscreen.
;; Use to disable fullscreen animations in OSX."
dotspacemacs-fullscreen-use-non-native nil
;; If non nil the frame is maximized when Emacs starts up.
;; Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil.
;; (Emacs 24.4+ only)
dotspacemacs-maximized-at-startup nil
;; A value from the range (0..100), in increasing opacity, which describes
;; the transparency level of a frame when it's active or selected.
;; Transparency can be toggled through `toggle-transparency'.
dotspacemacs-active-transparency 90
;; A value from the range (0..100), in increasing opacity, which describes
;; the transparency level of a frame when it's inactive or deselected.
;; Transparency can be toggled through `toggle-transparency'.
dotspacemacs-inactive-transparency 90
;; If non nil unicode symbols are displayed in the mode line.
dotspacemacs-mode-line-unicode-symbols t
;; If non nil smooth scrolling (native-scrolling) is enabled. Smooth
;; scrolling overrides the default behavior of Emacs which recenters the
;; point when it reaches the top or bottom of the screen.
dotspacemacs-smooth-scrolling t
;; If non-nil smartparens-strict-mode will be enabled in programming modes.
dotspacemacs-smartparens-strict-mode nil
;; Select a scope to highlight delimiters. Possible value is `all',
;; `current' or `nil'. Default is `all'
dotspacemacs-highlight-delimiters 'all
;; If non nil advises quit functions to keep server open when quitting.
dotspacemacs-persistent-server nil
;; List of search tool executable names. Spacemacs uses the first installed
;; tool of the list. Supported tools are `ag', `pt', `ack' and `grep'.
dotspacemacs-search-tools '("ag" "pt" "ack" "grep")
;; The default package repository used if no explicit repository has been
;; specified with an installed package.
;; Not used for now.
dotspacemacs-default-package-repository nil
;; If non nil line numbers are turned on in all `prog-mode' and `text-mode'
;; derivatives. If set to `relative', also turns on relative line numbers.
;; (default nil)
dotspacemacs-line-numbers 'relative
;; Delete whitespace while saving buffer. Possible values are `all',
;; `trailing', `changed' or `nil'. Default is `changed' (cleanup whitespace
;; on changed lines) (default 'changed)
dotspacemacs-whitespace-cleanup 'changed
)
;; User initialization goes here
)
(defun dotspacemacs/user-config ()
"Configuration function.
This function is called at the very end of Spacemacs initialization after
layers configuration."
(add-hook 'alchemist-mode-hook 'company-mode)
(add-hook 'projectile-mode-hook 'projectile-rails-on)
(setq ruby-insert-encoding-magic-comment nil)
(setq web-mode-markup-indent-offset 2)
(setq web-mode-code-indent-offset 2)
(spacemacs/toggle-golden-ratio-on)
(spacemacs/toggle-indent-guide-globally-on)
(spacemacs/toggle-centered-point-globally-on)
)
;; Do not write anything past this comment. This is where Emacs will
;; auto-generate custom variable definitions.
(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.
)

View 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))

View 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
)

View 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.
)

View 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")))

View 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

View 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"

View 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, &current);
if (_glfwCompareVideoModes(&current, 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;
}

View 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')

View 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.

View 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

View 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
View 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

207
samples/XML/HITSP_C32.sch Normal file
View 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>

View 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
View 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())]) &gt;
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]) &gt; 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 &lt; $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] &gt; (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(.) &gt; 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()] &gt; $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()] &gt; $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 &gt;= 0) and (@charoff &lt;= 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>

View File

@@ -42,7 +42,7 @@ class DirectoryPackage
case File.extname(path.downcase)
when '.plist'
path.split('/')[-2] == 'Syntaxes'
when '.tmlanguage'
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}"]
Dir["#{tmp_dir}/Syntaxes/*.{plist,tmLanguage,tmlanguage,YAML-tmLanguage}"]
end
end
@@ -148,6 +148,17 @@ def load_grammar(path)
case File.extname(path.downcase)
when '.plist', '.tmlanguage'
Plist::parse_xml(path)
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/
content = content.lines[1..-1].join
end
begin
YAML.load(content)
rescue Psych::SyntaxError => e
$stderr.puts "Failed to parse YAML grammar '#{path}'"
end
when '.cson'
cson = `"#{CSONC}" "#{path}"`
raise "Failed to convert CSON grammar '#{path}': #{$?.to_s}" unless $?.success?
@@ -169,7 +180,7 @@ def load_grammars(tmp_dir, source, all_scopes)
else
SingleFile.new(source)
end
elsif source.end_with?('.tmLanguage', '.plist')
elsif source.end_with?('.tmLanguage', '.plist', '.YAML-tmLanguage')
SingleGrammar.new(source)
elsif source.start_with?('https://github.com')
GitHubPackage.new(source)
@@ -185,7 +196,7 @@ def load_grammars(tmp_dir, source, all_scopes)
p.fetch(tmp_dir).map do |path|
grammar = load_grammar(path)
scope = grammar['scopeName']
scope = grammar['scopeName'] || grammar['scope']
if all_scopes.key?(scope)
unless all_scopes[scope] == p.url
@@ -204,7 +215,7 @@ def install_grammars(grammars, path)
installed = []
grammars.each do |grammar|
scope = grammar['scopeName']
scope = grammar['scopeName'] || grammar['scope']
File.write(File.join(GRAMMARS_PATH, "#{scope}.json"), JSON.pretty_generate(grammar))
installed << scope
end

82
script/set-language-ids Executable file
View 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
View File

@@ -0,0 +1,3 @@
# vim: noexpandtab: ft=javascript
"It's JavaScript, baby";

View 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
View File

@@ -0,0 +1,3 @@
ex: noexpandtab: ft=ruby
# Still Ruby

3
test/fixtures/Data/Modelines/ruby11 vendored Normal file
View File

@@ -0,0 +1,3 @@
# vim600: ft=ruby
# Targets Vim 6.0 or later

3
test/fixtures/Data/Modelines/ruby12 vendored Normal file
View File

@@ -0,0 +1,3 @@
vim<520: ft=ruby
# Targets Vim 5.20 and earlier

View File

@@ -0,0 +1,3 @@
// -*- foo-bar mode: c++ -*-
"Malformed modeline, but still understood by Emacs to be C++."

View File

@@ -0,0 +1 @@
/* -*- mode: c++ -------*- */

View File

@@ -0,0 +1 @@
-*--------- foo:bar mode: c++ -*-

View File

@@ -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

View File

@@ -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)

View File

@@ -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?

View File

@@ -5,9 +5,44 @@ 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
"2d4f8807be850efd925751a8e1839cfc539985b0", # actionscript3-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
"9d8b5626cfe00f3c8a076173913c3b0312b5b122", # ejs-tmbundle
"bdab9fdc21e6790b479ccb5945b78bc0f6ce2493" # language-blade
].freeze
# List of allowed SPDX license names
@@ -87,12 +122,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 +176,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 +189,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

View File

@@ -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

View File

@@ -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__)))

View File

@@ -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

Submodule vendor/CodeMirror added at 39ffcd8701

View File

@@ -1,2 +0,0 @@
.DS_Store

View File

@@ -1,6 +0,0 @@
<snippet>
<content><![CDATA[Book $1 - ${2:Title}
]]></content>
<tabTrigger>book</tabTrigger>
<scope>source.Inform7</scope>
</snippet>

View File

@@ -1,6 +0,0 @@
<snippet>
<content><![CDATA[Chapter $1 - ${2:Title}
]]></content>
<tabTrigger>chapter</tabTrigger>
<scope>source.Inform7</scope>
</snippet>

View File

@@ -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>

View File

@@ -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"
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -1,6 +0,0 @@
<snippet>
<content><![CDATA[Part $1 - ${2:Title}
]]></content>
<tabTrigger>part</tabTrigger>
<scope>source.Inform7</scope>
</snippet>

View File

@@ -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>

View File

@@ -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>

View File

@@ -1,6 +0,0 @@
<snippet>
<content><![CDATA[Section $1 - ${2:Title}
]]></content>
<tabTrigger>section</tabTrigger>
<scope>source.Inform7</scope>
</snippet>

View File

@@ -1,6 +0,0 @@
<snippet>
<content><![CDATA[Volume $1 - ${2:Title}
]]></content>
<tabTrigger>volume</tabTrigger>
<scope>source.Inform7</scope>
</snippet>

View File

@@ -1,21 +0,0 @@
The MIT License (MIT)
Copyright (c) 2014 Nate Dickson
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.

View File

@@ -1,8 +0,0 @@
#Inform7 Package for Sublime Text 2
This package has a lot of little files that make Inform7 easier to edit in Sublime Text 2. that's why it's called what it is, you see.
##Usage
Grab the zip file, unzip it, and put it in your ```Packages``` Directory.
That's pretty much it. Open an ```i7x``` file in Sublime Text 2 and it'll be all highlighted and there's a bunch of snippets you can use and all that.
##Want to submit a pull request for this readme file?
Please, please do.

View File

@@ -1,47 +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>beforeRunningCommand</key>
<string>saveActiveFile</string>
<key>command</key>
<string>#!/usr/bin/env ruby18
file = ENV["TM_FILEPATH"]
target = file.sub(/\.less$/, ".css")
system("lessc \"#{file}\" \"#{target}\"")
puts "Compiled CSS to '#{target}'"</string>
<key>input</key>
<string>document</string>
<key>inputFormat</key>
<string>text</string>
<key>keyEquivalent</key>
<string>@b</string>
<key>name</key>
<string>Save to CSS</string>
<key>outputCaret</key>
<string>afterOutput</string>
<key>outputFormat</key>
<string>text</string>
<key>outputLocation</key>
<string>toolTip</string>
<key>requiredCommands</key>
<array>
<dict>
<key>command</key>
<string>lessc</string>
<key>locations</key>
<array>
<string>/opt/local/bin/lessc</string>
<string>/usr/local/bin/lessc</string>
</array>
</dict>
</array>
<key>scope</key>
<string>source.css.less</string>
<key>uuid</key>
<string>78788223-5E5E-434E-98BE-17BCDF600611</string>
<key>version</key>
<integer>2</integer>
</dict>
</plist>

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