mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Compare commits
	
		
			19 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e60384b018 | ||
| 
						 | 
					470a82d9f5 | ||
| 
						 | 
					37979b26b0 | ||
| 
						 | 
					1a6df12902 | ||
| 
						 | 
					24e196df4e | ||
| 
						 | 
					8d178bfaed | ||
| 
						 | 
					e9ec699931 | ||
| 
						 | 
					9a6c3f2c4d | ||
| 
						 | 
					648720301d | ||
| 
						 | 
					c552e25bd7 | ||
| 
						 | 
					d5c8db3fb9 | ||
| 
						 | 
					632bcdc1ad | ||
| 
						 | 
					6b221172c0 | ||
| 
						 | 
					6f0d801375 | ||
| 
						 | 
					128abe3533 | ||
| 
						 | 
					9312353d20 | ||
| 
						 | 
					b6460f8ed6 | ||
| 
						 | 
					60f864a138 | ||
| 
						 | 
					ca6121e3ea | 
							
								
								
									
										15
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -836,6 +836,9 @@
 | 
			
		||||
[submodule "vendor/grammars/language-jolie"]
 | 
			
		||||
	path = vendor/grammars/language-jolie
 | 
			
		||||
	url = https://github.com/fmontesi/language-jolie
 | 
			
		||||
[submodule "vendor/grammars/language-typelanguage"]
 | 
			
		||||
	path = vendor/grammars/language-typelanguage
 | 
			
		||||
	url = https://github.com/goodmind/language-typelanguage
 | 
			
		||||
[submodule "vendor/grammars/sublime-shen"]
 | 
			
		||||
	path = vendor/grammars/sublime-shen
 | 
			
		||||
	url = https://github.com/rkoeninger/sublime-shen
 | 
			
		||||
@@ -848,3 +851,15 @@
 | 
			
		||||
[submodule "vendor/grammars/language-closure-templates"]
 | 
			
		||||
	path = vendor/grammars/language-closure-templates
 | 
			
		||||
	url = https://github.com/mthadley/language-closure-templates
 | 
			
		||||
[submodule "vendor/grammars/language-webassembly"]
 | 
			
		||||
	path = vendor/grammars/language-webassembly
 | 
			
		||||
	url = https://github.com/Alhadis/language-webassembly
 | 
			
		||||
[submodule "vendor/grammars/language-ring"]
 | 
			
		||||
	path = vendor/grammars/language-ring
 | 
			
		||||
	url = https://github.com/MahmoudFayed/atom-language-ring
 | 
			
		||||
[submodule "vendor/grammars/sublime-fantom"]
 | 
			
		||||
	path = vendor/grammars/sublime-fantom
 | 
			
		||||
	url = https://github.com/rkoeninger/sublime-fantom
 | 
			
		||||
[submodule "vendor/grammars/language-pan"]
 | 
			
		||||
	path = vendor/grammars/language-pan
 | 
			
		||||
	url = https://github.com/quattor/language-pan
 | 
			
		||||
 
 | 
			
		||||
@@ -67,6 +67,16 @@ For development you are going to want to checkout out the source. To get it, clo
 | 
			
		||||
    cd linguist/
 | 
			
		||||
    script/bootstrap
 | 
			
		||||
 | 
			
		||||
To run Linguist from the cloned repository, you will need to generate the code samples first:
 | 
			
		||||
 | 
			
		||||
    bundle exec rake samples
 | 
			
		||||
 | 
			
		||||
Run this command each time a [sample][samples] has been modified.
 | 
			
		||||
 | 
			
		||||
To run Linguist from the cloned repository:
 | 
			
		||||
 | 
			
		||||
    bundle exec bin/linguist --breakdown
 | 
			
		||||
 | 
			
		||||
To run the tests:
 | 
			
		||||
 | 
			
		||||
    bundle exec rake test
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								grammars.yml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								grammars.yml
									
									
									
									
									
								
							@@ -427,6 +427,8 @@ vendor/grammars/language-ncl:
 | 
			
		||||
- source.ncl
 | 
			
		||||
vendor/grammars/language-ninja:
 | 
			
		||||
- source.ninja
 | 
			
		||||
vendor/grammars/language-pan:
 | 
			
		||||
- source.pan
 | 
			
		||||
vendor/grammars/language-povray:
 | 
			
		||||
- source.pov-ray sdl
 | 
			
		||||
vendor/grammars/language-regexp:
 | 
			
		||||
@@ -436,6 +438,8 @@ vendor/grammars/language-renpy:
 | 
			
		||||
- source.renpy
 | 
			
		||||
vendor/grammars/language-restructuredtext:
 | 
			
		||||
- text.restructuredtext
 | 
			
		||||
vendor/grammars/language-ring:
 | 
			
		||||
- source.ring
 | 
			
		||||
vendor/grammars/language-roff:
 | 
			
		||||
- source.ditroff
 | 
			
		||||
- source.ditroff.desc
 | 
			
		||||
@@ -455,11 +459,15 @@ vendor/grammars/language-toc-wow:
 | 
			
		||||
- source.toc
 | 
			
		||||
vendor/grammars/language-turing:
 | 
			
		||||
- source.turing
 | 
			
		||||
vendor/grammars/language-typelanguage:
 | 
			
		||||
- source.tl
 | 
			
		||||
vendor/grammars/language-viml:
 | 
			
		||||
- source.viml
 | 
			
		||||
vendor/grammars/language-wavefront:
 | 
			
		||||
- source.wavefront.mtl
 | 
			
		||||
- source.wavefront.obj
 | 
			
		||||
vendor/grammars/language-webassembly:
 | 
			
		||||
- source.webassembly
 | 
			
		||||
vendor/grammars/language-xbase:
 | 
			
		||||
- source.harbour
 | 
			
		||||
vendor/grammars/language-xcompose:
 | 
			
		||||
@@ -620,6 +628,8 @@ vendor/grammars/sublime-cirru:
 | 
			
		||||
- source.cirru
 | 
			
		||||
vendor/grammars/sublime-clips:
 | 
			
		||||
- source.clips
 | 
			
		||||
vendor/grammars/sublime-fantom:
 | 
			
		||||
- source.fan
 | 
			
		||||
vendor/grammars/sublime-glsl:
 | 
			
		||||
- source.essl
 | 
			
		||||
- source.glsl
 | 
			
		||||
 
 | 
			
		||||
@@ -297,7 +297,7 @@ module Linguist
 | 
			
		||||
    disambiguate ".ms" do |data|
 | 
			
		||||
      if /^[.'][a-z][a-z](\s|$)/i.match(data)
 | 
			
		||||
        Language["Roff"]
 | 
			
		||||
      elsif /(?<!\S)\.(include|globa?l)\s/.match(data) || /(?<!\/\*)(\A|\n)\s*\.[A-Za-z]/.match(data.gsub(/"([^\\"]|\\.)*"|'([^\\']|\\.)*'|\\\s*(?:--.*)?\n/, ""))
 | 
			
		||||
      elsif /(?<!\S)\.(include|globa?l)\s/.match(data) || /(?<!\/\*)(\A|\n)\s*\.[A-Za-z][_A-Za-z0-9]*:/.match(data.gsub(/"([^\\"]|\\.)*"|'([^\\']|\\.)*'|\\\s*(?:--.*)?\n/, ""))
 | 
			
		||||
        Language["Unix Assembly"]
 | 
			
		||||
      else
 | 
			
		||||
        Language["MAXScript"]
 | 
			
		||||
@@ -340,13 +340,13 @@ module Linguist
 | 
			
		||||
      elsif /use strict|use\s+v?5\./.match(data)
 | 
			
		||||
        Language["Perl"]
 | 
			
		||||
      elsif /^(use v6|(my )?class|module)/.match(data)
 | 
			
		||||
        Language["Perl6"]
 | 
			
		||||
        Language["Perl 6"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".pm" do |data|
 | 
			
		||||
      if /^\s*(?:use\s+v6\s*;|(?:\bmy\s+)?class|module)\b/.match(data)
 | 
			
		||||
        Language["Perl6"]
 | 
			
		||||
        Language["Perl 6"]
 | 
			
		||||
      elsif /\buse\s+(?:strict\b|v?5\.)/.match(data)
 | 
			
		||||
        Language["Perl"]
 | 
			
		||||
      end
 | 
			
		||||
@@ -446,7 +446,7 @@ module Linguist
 | 
			
		||||
      if /^\s*%[ \t]+|^\s*var\s+\w+\s*:=\s*\w+/.match(data)
 | 
			
		||||
        Language["Turing"]
 | 
			
		||||
      elsif /^\s*(?:use\s+v6\s*;|\bmodule\b|\b(?:my\s+)?class\b)/.match(data)
 | 
			
		||||
        Language["Perl6"]
 | 
			
		||||
        Language["Perl 6"]
 | 
			
		||||
      elsif /\buse\s+(?:strict\b|v?5\.)/.match(data)
 | 
			
		||||
        Language["Perl"]
 | 
			
		||||
      end
 | 
			
		||||
 
 | 
			
		||||
@@ -1084,6 +1084,16 @@ Eagle:
 | 
			
		||||
  codemirror_mode: xml
 | 
			
		||||
  codemirror_mime_type: text/xml
 | 
			
		||||
  language_id: 97
 | 
			
		||||
Easybuild:
 | 
			
		||||
  type: data
 | 
			
		||||
  group: Python
 | 
			
		||||
  ace_mode: python
 | 
			
		||||
  codemirror_mode: python
 | 
			
		||||
  codemirror_mime_type: text/x-python
 | 
			
		||||
  tm_scope: source.python
 | 
			
		||||
  extensions:
 | 
			
		||||
  - ".eb"
 | 
			
		||||
  language_id: 342840477
 | 
			
		||||
Ecere Projects:
 | 
			
		||||
  type: data
 | 
			
		||||
  group: JavaScript
 | 
			
		||||
@@ -1231,10 +1241,10 @@ Fancy:
 | 
			
		||||
  language_id: 109
 | 
			
		||||
Fantom:
 | 
			
		||||
  type: programming
 | 
			
		||||
  color: "#dbded5"
 | 
			
		||||
  color: "#14253c"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - ".fan"
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  tm_scope: source.fan
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  language_id: 110
 | 
			
		||||
Filebench WML:
 | 
			
		||||
@@ -2469,6 +2479,7 @@ Makefile:
 | 
			
		||||
  - Makefile.frag
 | 
			
		||||
  - Makefile.in
 | 
			
		||||
  - Makefile.inc
 | 
			
		||||
  - Makefile.wat
 | 
			
		||||
  - makefile
 | 
			
		||||
  - makefile.sco
 | 
			
		||||
  - mkfile
 | 
			
		||||
@@ -3119,7 +3130,7 @@ Pan:
 | 
			
		||||
  color: "#cc0000"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - ".pan"
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  tm_scope: source.pan
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  language_id: 276
 | 
			
		||||
Papyrus:
 | 
			
		||||
@@ -3206,10 +3217,12 @@ Perl:
 | 
			
		||||
  - ".pod"
 | 
			
		||||
  - ".psgi"
 | 
			
		||||
  - ".t"
 | 
			
		||||
  filenames:
 | 
			
		||||
  - cpanfile
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - perl
 | 
			
		||||
  language_id: 282
 | 
			
		||||
Perl6:
 | 
			
		||||
Perl 6:
 | 
			
		||||
  type: programming
 | 
			
		||||
  color: "#0000fb"
 | 
			
		||||
  extensions:
 | 
			
		||||
@@ -3735,6 +3748,14 @@ RenderScript:
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  language_id: 323
 | 
			
		||||
Ring:
 | 
			
		||||
  type: programming
 | 
			
		||||
  color: "#0e60e3"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .ring
 | 
			
		||||
  tm_scope: source.ring
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  language_id: 431  
 | 
			
		||||
RobotFramework:
 | 
			
		||||
  type: programming
 | 
			
		||||
  extensions:
 | 
			
		||||
@@ -4101,7 +4122,12 @@ Shell:
 | 
			
		||||
  - PKGBUILD
 | 
			
		||||
  - gradlew
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - ash
 | 
			
		||||
  - bash
 | 
			
		||||
  - dash
 | 
			
		||||
  - ksh
 | 
			
		||||
  - mksh
 | 
			
		||||
  - pdksh
 | 
			
		||||
  - rc
 | 
			
		||||
  - sh
 | 
			
		||||
  - zsh
 | 
			
		||||
@@ -4487,6 +4513,15 @@ Twig:
 | 
			
		||||
  codemirror_mode: twig
 | 
			
		||||
  codemirror_mime_type: text/x-twig
 | 
			
		||||
  language_id: 377
 | 
			
		||||
Type Language:
 | 
			
		||||
  type: data
 | 
			
		||||
  aliases:
 | 
			
		||||
  - tl
 | 
			
		||||
  extensions:
 | 
			
		||||
  - ".tl"
 | 
			
		||||
  tm_scope: source.tl
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  language_id: 632765617
 | 
			
		||||
TypeScript:
 | 
			
		||||
  type: programming
 | 
			
		||||
  color: "#2b7489"
 | 
			
		||||
@@ -4684,6 +4719,20 @@ Web Ontology Language:
 | 
			
		||||
  tm_scope: text.xml
 | 
			
		||||
  ace_mode: xml
 | 
			
		||||
  language_id: 394
 | 
			
		||||
WebAssembly:
 | 
			
		||||
  type: programming
 | 
			
		||||
  color: "#04133b"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - ".wast"
 | 
			
		||||
  - ".wat"
 | 
			
		||||
  aliases:
 | 
			
		||||
  - wast
 | 
			
		||||
  - wasm
 | 
			
		||||
  tm_scope: source.webassembly
 | 
			
		||||
  ace_mode: lisp
 | 
			
		||||
  codemirror_mode: commonlisp
 | 
			
		||||
  codemirror_mime_type: text/x-common-lisp
 | 
			
		||||
  language_id: 956556503
 | 
			
		||||
WebIDL:
 | 
			
		||||
  type: programming
 | 
			
		||||
  extensions:
 | 
			
		||||
@@ -4828,6 +4877,7 @@ XML:
 | 
			
		||||
  - ".xml.dist"
 | 
			
		||||
  - ".xproj"
 | 
			
		||||
  - ".xsd"
 | 
			
		||||
  - ".xspec"
 | 
			
		||||
  - ".xul"
 | 
			
		||||
  - ".zcml"
 | 
			
		||||
  filenames:
 | 
			
		||||
 
 | 
			
		||||
@@ -72,6 +72,9 @@
 | 
			
		||||
# Normalize.css
 | 
			
		||||
- (^|/)normalize\.(css|less|scss|styl)$
 | 
			
		||||
 | 
			
		||||
# Skeleton.css
 | 
			
		||||
- (^|/)skeleton\.(css|less|scss|styl)$
 | 
			
		||||
 | 
			
		||||
# Bourbon css
 | 
			
		||||
- (^|/)[Bb]ourbon/.*\.(css|less|scss|styl)$
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,3 @@
 | 
			
		||||
module Linguist
 | 
			
		||||
  VERSION = "5.0.11"
 | 
			
		||||
  VERSION = "5.1.0"
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								samples/C/asm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								samples/C/asm.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
/* CarbonOS System/Kernel
 | 
			
		||||
 * Copyright 2015-2017 David Aylaian
 | 
			
		||||
 * Licensed under Apache 2.0: https://github.com/DavidAylaian/CarbonOS/blob/master/LICENSE.md
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ASM_H
 | 
			
		||||
#define ASM_H
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
// macros for enabling and disabling interrupts
 | 
			
		||||
#define enable()	asm("sti");
 | 
			
		||||
#define disable()	asm("cli");
 | 
			
		||||
 | 
			
		||||
// inb instruction
 | 
			
		||||
uint8_t inb (uint16_t port) {
 | 
			
		||||
	uint8_t val;
 | 
			
		||||
	asm volatile ("inb %0, %1" : "=a"(val): "Nd"(port));
 | 
			
		||||
	return val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// outb instruction
 | 
			
		||||
void outb (uint16_t port, uint8_t val) {
 | 
			
		||||
	asm volatile ("outb %1, %0" : : "a"(val), "Nd"(port));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										25
									
								
								samples/C/cpuid.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								samples/C/cpuid.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
#ifndef CPUID_H
 | 
			
		||||
#define CPUID_H
 | 
			
		||||
 | 
			
		||||
#include "misc.h"
 | 
			
		||||
 | 
			
		||||
static inline void do_cpuid(dword_t *eax, dword_t *ebx, dword_t *ecx, dword_t *edx) {
 | 
			
		||||
    dword_t leaf = *eax;
 | 
			
		||||
    switch (leaf) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            *eax = 0x01; // we support barely anything
 | 
			
		||||
            *ebx = 0x756e6547; // Genu
 | 
			
		||||
            *edx = 0x49656e69; // ineI
 | 
			
		||||
            *ecx = 0x6c65746e; // ntel
 | 
			
		||||
            break;
 | 
			
		||||
        default: // if leaf is too high, use highest supported leaf
 | 
			
		||||
        case 1:
 | 
			
		||||
            *eax = 0x0; // say nothing about cpu model number
 | 
			
		||||
            *ebx = 0x0; // processor number 0, flushes 0 bytes on clflush
 | 
			
		||||
            *ecx = 0b00000000000000000000000000000000; // we support none of the features in ecx
 | 
			
		||||
            *edx = 0b00000000000000000000000000000000; // we also support none of the features in edx
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										20
									
								
								samples/Easybuild/bzip2-1.0.6-GCC-4.9.2.eb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								samples/Easybuild/bzip2-1.0.6-GCC-4.9.2.eb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
# not really (there's an EB_bzip2 easyblock), but fine for use in unit tests
 | 
			
		||||
easyblock = 'ConfigureMake'
 | 
			
		||||
 | 
			
		||||
name = 'bzip2'
 | 
			
		||||
version = '1.0.6'
 | 
			
		||||
 | 
			
		||||
homepage = 'http://www.bzip.org/'
 | 
			
		||||
description = """bzip2 is a freely available, patent free, high-quality data compressor. It typically
 | 
			
		||||
compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical
 | 
			
		||||
compressors), whilst being around twice as fast at compression and six times faster at decompression."""
 | 
			
		||||
 | 
			
		||||
toolchain = {'name': 'GCC', 'version': '4.9.2'}
 | 
			
		||||
toolchainopts = {'pic': True}
 | 
			
		||||
 | 
			
		||||
sources = [SOURCE_TAR_GZ]
 | 
			
		||||
source_urls = ['http://www.bzip.org/%(version)s']
 | 
			
		||||
 | 
			
		||||
builddependencies = [('gzip', '1.6')]
 | 
			
		||||
 | 
			
		||||
moduleclass = 'tools'
 | 
			
		||||
							
								
								
									
										97
									
								
								samples/Fantom/sample1.fan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								samples/Fantom/sample1.fan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Author: Robert Koeninger
 | 
			
		||||
 * License: WTFPL (http://www.wtfpl.net/)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class Spelling {
 | 
			
		||||
 | 
			
		||||
  ** Load sample text and offer corrections for input
 | 
			
		||||
  static Void main(Str[] args) {
 | 
			
		||||
    text := File.os("big.txt").readAllStr
 | 
			
		||||
    counts := Str:Int[:] { def = 0 }
 | 
			
		||||
    text.split.each |word| { counts[word] += 1 }
 | 
			
		||||
    args.each |arg| { echo(correction(counts, arg)) }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static const Range letters := Range.makeInclusive(97, 122)
 | 
			
		||||
 | 
			
		||||
  ** Most probable spelling correction for `word`.
 | 
			
		||||
  static Str correction(Str:Int counts, Str word) {
 | 
			
		||||
    candidates(counts, word).max |x, y| { counts[x] <=> counts[y] }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ** Generate possible spelling corrections for `word`.
 | 
			
		||||
  static Str[] candidates(Str:Int counts, Str word) {
 | 
			
		||||
    result := known(counts, Str[word])
 | 
			
		||||
    if (result.size > 0) return result
 | 
			
		||||
 | 
			
		||||
    result = known(counts, edits1(word))
 | 
			
		||||
    if (result.size > 0) return result
 | 
			
		||||
 | 
			
		||||
    result = known(counts, edits2(word))
 | 
			
		||||
    if (result.size > 0) return result
 | 
			
		||||
 | 
			
		||||
    return Str[word]
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ** The subset of `words` that appear in the map of `counts`.
 | 
			
		||||
  static Str[] known(Str:Int counts, Str[] words) {
 | 
			
		||||
    words.findAll |word, i| { counts[word] > 0 }.unique
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ** All edits that are one edit away from `word`.
 | 
			
		||||
  static Str[] edits1(Str word) {
 | 
			
		||||
    edits := Str[,]
 | 
			
		||||
 | 
			
		||||
    for (i := 0; i < word.size; ++i) {
 | 
			
		||||
      edits.add(delete(word, i))
 | 
			
		||||
 | 
			
		||||
      if (i < word.size - 2) {
 | 
			
		||||
        edits.add(transpose(word, i))
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      edits.addAll(replace(word, i))
 | 
			
		||||
      edits.addAll(insert(word, i))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    edits = edits.unique
 | 
			
		||||
    edits.remove(word)
 | 
			
		||||
    return edits
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ** Word with `i`th letter removed.
 | 
			
		||||
  static Str delete(Str word, Int i) {
 | 
			
		||||
    left := word.getRange(Range.makeExclusive(0, i))
 | 
			
		||||
    right := word.getRange(Range.makeExclusive(i + 1, word.size))
 | 
			
		||||
    return left + right
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ** Word with `i`th and `i+1`st letter swapped.
 | 
			
		||||
  static Str transpose(Str word, Int i) {
 | 
			
		||||
    left := word.getRange(Range.makeExclusive(0, i))
 | 
			
		||||
    right := word.getRange(Range.makeExclusive(i, word.size))
 | 
			
		||||
    first := right.get(0).toChar
 | 
			
		||||
    second := right.get(1).toChar
 | 
			
		||||
    rest := right.getRange(Range.makeExclusive(2, right.size))
 | 
			
		||||
    return left + second + first + rest
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ** Word with `i`th letter replaced with every other letter.
 | 
			
		||||
  static Str[] replace(Str word, Int i) {
 | 
			
		||||
    left := word.getRange(Range.makeExclusive(0, i))
 | 
			
		||||
    right := word.getRange(Range.makeExclusive(i + 1, word.size))
 | 
			
		||||
    return letters.map |ch| { left + ch.toChar + right }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ** Word with each letter inserted at `i`.
 | 
			
		||||
  static Str[] insert(Str word, Int i) {
 | 
			
		||||
    left := word.getRange(Range.makeExclusive(0, i))
 | 
			
		||||
    right := word.getRange(Range.makeExclusive(i, word.size))
 | 
			
		||||
    return letters.map |ch| { left + ch.toChar + right }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ** All edits that are two edits away from `word`.
 | 
			
		||||
  static Str[] edits2(Str word) {
 | 
			
		||||
    (Str[])(edits1(word).map |w| { edits1(w) }.flatten)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										50
									
								
								samples/Fantom/sample2.fan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								samples/Fantom/sample2.fan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Author: Robert Koeninger
 | 
			
		||||
 * License: WTFPL (http://www.wtfpl.net/)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
mixin Expr
 | 
			
		||||
{
 | 
			
		||||
  abstract Obj? eval()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Constant : Expr
 | 
			
		||||
{
 | 
			
		||||
  Obj? value
 | 
			
		||||
 | 
			
		||||
  new make(Obj? value) { this.value = value }
 | 
			
		||||
  override Obj? eval() { value }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum class Op
 | 
			
		||||
{
 | 
			
		||||
  plus,
 | 
			
		||||
  minus
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Infix : Expr
 | 
			
		||||
{
 | 
			
		||||
  Op op
 | 
			
		||||
  Expr left
 | 
			
		||||
  Expr right
 | 
			
		||||
 | 
			
		||||
  new make(Op op, Expr left, Expr right)
 | 
			
		||||
  {
 | 
			
		||||
    this.op = op
 | 
			
		||||
    this.left = left
 | 
			
		||||
    this.right = right
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  override Obj? eval()
 | 
			
		||||
  {
 | 
			
		||||
    switch (op)
 | 
			
		||||
    {
 | 
			
		||||
      case Op.plus:
 | 
			
		||||
        return (Int)left.eval() + (Int)right.eval()
 | 
			
		||||
      case Op.minus:
 | 
			
		||||
        return (Int)left.eval() - (Int)right.eval()
 | 
			
		||||
      default:
 | 
			
		||||
        throw Err("undefined Op")
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										176
									
								
								samples/MAXScript/rolloutCreator.ms
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								samples/MAXScript/rolloutCreator.ms
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,176 @@
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
--   
 | 
			
		||||
--  File:		rolloutCreator.ms
 | 
			
		||||
--  Description:	Localization friendly helper struct for dynamically creating rollouts
 | 
			
		||||
--  By:		Ravi Karra [Discreet] 			ravi.karra@discreet.com
 | 
			
		||||
--	 
 | 
			
		||||
--  Version:	1.01
 | 
			
		||||
--  Version:	1.02 - Larry Minton [Discreet] 
 | 
			
		||||
--						changed <string1> += <string2> to append string1 string2
 | 
			
		||||
--						added addText method
 | 
			
		||||
--  Declarations:
 | 
			
		||||
/*
 | 
			
		||||
	rolloutCreator <rollout_name> <rollout_caption> [width:] [height:]
 | 
			
		||||
		creates an instance of rolloutCreator, assign it to a variable
 | 
			
		||||
		width - width of the rollout/dialog to be created
 | 
			
		||||
		height - of the rollout/dialog to be created
 | 
			
		||||
		
 | 
			
		||||
		eg:
 | 
			
		||||
	 	rci = rolloutCreator "myRollout" "My Rollout"
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	.begin()
 | 
			
		||||
		this function needs to be called immediately after the instance is created, this does the initialization
 | 
			
		||||
 | 
			
		||||
	.addLocal <local_name> [init:]
 | 
			
		||||
		<local_name> 
 | 
			
		||||
		name of the local
 | 
			
		||||
		
 | 
			
		||||
		[init:]
 | 
			
		||||
		what the local should be initialized to
 | 
			
		||||
	
 | 
			
		||||
	.addControl <control_type> <control_name> <control_caption> [paramStr:<string>] =
 | 
			
		||||
		adds a control to the rollout
 | 
			
		||||
		
 | 
			
		||||
		<control_type>
 | 
			
		||||
		can be any of named rolloutControls eg: #button, #spinner, #activeXControl etc
 | 
			
		||||
		
 | 
			
		||||
		<control_name>
 | 
			
		||||
		variable name of the control by which it is referred eg: #btnButton
 | 
			
		||||
		
 | 
			
		||||
		<control_caption>
 | 
			
		||||
		caption of the control "My Button"
 | 
			
		||||
		
 | 
			
		||||
		[paramStr:]
 | 
			
		||||
		an optional string representation of all the keyword parameters that needs to be passed to the control
 | 
			
		||||
		eg: "width:100 height:20 align:#right"
 | 
			
		||||
		
 | 
			
		||||
		eg:
 | 
			
		||||
		rci.addControl #button #myButton "My Button"
 | 
			
		||||
	
 | 
			
		||||
	.addHandler <control_name> <event_type> [paramStr:<string>]  [codeStr:<string>] [filter:<boolean>]
 | 
			
		||||
		adds an event handler for the controls previously added 
 | 
			
		||||
		
 | 
			
		||||
		<control_name>
 | 
			
		||||
		the variable passed during the control creation
 | 
			
		||||
		 
 | 
			
		||||
		<event_type>
 | 
			
		||||
		any of the events supported by the control, eg: #changed, #pressed, #selected
 | 
			
		||||
		
 | 
			
		||||
		[paramStr:<string>]
 | 
			
		||||
		an optional string representation of all the positional and keyword parameters that are passed to the event	
 | 
			
		||||
 | 
			
		||||
		[codeStr:<string>]
 | 
			
		||||
		a string representation of the event handler code, if the string contains sub-strings, enclose them in two character '@' 
 | 
			
		||||
		and pass on\true for the filter: parameter
 | 
			
		||||
 | 
			
		||||
		[filter:<boolean>]
 | 
			
		||||
		if true, converts '@' to quote in codeStr
 | 
			
		||||
				
 | 
			
		||||
		eg:
 | 
			
		||||
		rci.addHandler #myButton #pressed codeStr:"MessageBox @Hey@" filter:on
 | 
			
		||||
		will add an event handler for button named "myButton". When the button is clicked, messagebox pops up with text "hey" in it.
 | 
			
		||||
		
 | 
			
		||||
	.addText <string> [filter:<boolean>]
 | 
			
		||||
		adds string to rollout definition. Typically used for function definitions.
 | 
			
		||||
 | 
			
		||||
		[filter:<boolean>]
 | 
			
		||||
		if true, converts '@' to quote in string
 | 
			
		||||
				
 | 
			
		||||
	.end()
 | 
			
		||||
		this function has to be called whenever all the required control and their event handler's are called. This function forms 
 | 
			
		||||
		the rollout string, evaluates it and returns the definition which can passed to createDialog and addRollout functions.
 | 
			
		||||
	
 | 
			
		||||
	Complete Example:
 | 
			
		||||
		 rci = rolloutCreator "myRollout" "My Rollout"
 | 
			
		||||
		 rci.begin()
 | 
			
		||||
			rci.addControl #button #myButton "My Button"
 | 
			
		||||
			rci.addHandler #myButton #pressed filter:on codeStr:"MessageBox @Isn't this cool@ title:@Wow@"
 | 
			
		||||
		createDialog (rci.end())
 | 
			
		||||
*/
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __rcCounter == undefined then global __rcCounter = 0
 | 
			
		||||
struct rolloutCreator
 | 
			
		||||
(
 | 
			
		||||
	-- variables
 | 
			
		||||
	name, caption, str, def, width, height, quote="\"",
 | 
			
		||||
	
 | 
			
		||||
	-- functions
 | 
			
		||||
	fn begin = 
 | 
			
		||||
( 
 | 
			
		||||
		if name == undefined then
 | 
			
		||||
	(
 | 
			
		||||
			__rcCounter += 1
 | 
			
		||||
			name = "rolloutCreator" + __rcCounter as string
 | 
			
		||||
	)
 | 
			
		||||
		if caption == undefined then caption = ""
 | 
			
		||||
		str = ""
 | 
			
		||||
	),
 | 
			
		||||
	
 | 
			
		||||
	fn addLocal name init: = 
 | 
			
		||||
(
 | 
			
		||||
		local dStr = "\tlocal " + name as string
 | 
			
		||||
		if init != unsupplied then append dStr (" = " + init as string)
 | 
			
		||||
		append dStr "\n"
 | 
			
		||||
		append str dStr
 | 
			
		||||
	),
 | 
			
		||||
 | 
			
		||||
	fn addControl type name caption paramStr:"" =
 | 
			
		||||
(	
 | 
			
		||||
		append str ("\t" + type as string + " " + name as string + " " + quote + caption + quote + paramStr + "\n")
 | 
			
		||||
	),
 | 
			
		||||
	
 | 
			
		||||
	fn strFilter codeStr =
 | 
			
		||||
(
 | 
			
		||||
			local last_is_at = codeStr[codeStr.count] == "@"
 | 
			
		||||
			local fltStr = filterString codeStr "@"
 | 
			
		||||
			local rep = "\""
 | 
			
		||||
			codeStr = (if (codeStr[1] == "@") then rep else "") + fltStr[1]
 | 
			
		||||
			for i=2 to fltStr.count do
 | 
			
		||||
		(
 | 
			
		||||
				append codeStr (rep + fltStr[i])
 | 
			
		||||
		)
 | 
			
		||||
			if last_is_at then append codeStr rep
 | 
			
		||||
			codeStr
 | 
			
		||||
	),
 | 
			
		||||
 | 
			
		||||
	fn addHandler ctrl event paramStr:"" filter:on codeStr:"" =
 | 
			
		||||
(
 | 
			
		||||
		if filter do codeStr = (strFilter codeStr)
 | 
			
		||||
		append str ("\non " + ctrl as string + " " + event as string + " " + paramStr as string + " do \n(\n" + codeStr + ";ok\n)\n")
 | 
			
		||||
	),
 | 
			
		||||
	
 | 
			
		||||
	fn addText txt filter:on =
 | 
			
		||||
(
 | 
			
		||||
		if filter do txt = (strFilter txt )
 | 
			
		||||
		append str ("\t " + txt + "\n")
 | 
			
		||||
	),
 | 
			
		||||
	
 | 
			
		||||
	fn end = 
 | 
			
		||||
( 
 | 
			
		||||
		local dStr = "rollout " + name + " " + quote + caption + quote
 | 
			
		||||
		if width != undefined then
 | 
			
		||||
 			append dStr (" width:" + width as string)
 | 
			
		||||
		if height != undefined then
 | 
			
		||||
			append dStr (" height:" + height as string)
 | 
			
		||||
		append dStr "\n(\n" 
 | 
			
		||||
		append dStr str
 | 
			
		||||
		append dStr "\n)\n"
 | 
			
		||||
		str = dStr
 | 
			
		||||
		def = execute str
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*-- Usage
 | 
			
		||||
-- Create an instance of the rolloutCreator passing the name and the caption
 | 
			
		||||
rfTest = rolloutCreator "rfTestN" "rfTestC" --width:300 height:100
 | 
			
		||||
-- Start creating the rollout
 | 
			
		||||
rfTest.begin()
 | 
			
		||||
	rfTest.addControl #button #myButton "My Button"			-- add a button
 | 
			
		||||
--	rfTest.addHandler #myButton #pressed filter:on codeStr:"MessageBox @Hey@"
 | 
			
		||||
rfTest.addHandler #myButton #pressed filter:on codeStr:"MessageBox @Look to the \@Light\@ thing@" 
 | 
			
		||||
rfTest.end()
 | 
			
		||||
createDialog rfTest.def
 | 
			
		||||
*/
 | 
			
		||||
							
								
								
									
										248
									
								
								samples/Makefile/filenames/Makefile.wat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										248
									
								
								samples/Makefile/filenames/Makefile.wat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,248 @@
 | 
			
		||||
#
 | 
			
		||||
#                     The FreeType Project LICENSE
 | 
			
		||||
#                     ----------------------------
 | 
			
		||||
# 
 | 
			
		||||
#                        Copyright 1996-1999 by
 | 
			
		||||
#           David Turner, Robert Wilhelm, and Werner Lemberg
 | 
			
		||||
# 
 | 
			
		||||
# 
 | 
			
		||||
# 
 | 
			
		||||
# Introduction
 | 
			
		||||
# ============
 | 
			
		||||
# 
 | 
			
		||||
#   The FreeType  Project is distributed in  several archive packages;
 | 
			
		||||
#   some of them may contain, in addition to the FreeType font engine,
 | 
			
		||||
#   various tools and  contributions which rely on, or  relate to, the
 | 
			
		||||
#   FreeType Project.
 | 
			
		||||
# 
 | 
			
		||||
#   This  license applies  to all  files found  in such  packages, and
 | 
			
		||||
#   which do not  fall under their own explicit  license.  The license
 | 
			
		||||
#   affects  thus  the  FreeType   font  engine,  the  test  programs,
 | 
			
		||||
#   documentation and makefiles, at the very least.
 | 
			
		||||
# 
 | 
			
		||||
#   This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
 | 
			
		||||
#   (Independent JPEG  Group) licenses, which  all encourage inclusion
 | 
			
		||||
#   and  use of  free  software in  commercial  and freeware  products
 | 
			
		||||
#   alike.  As a consequence, its main points are that:
 | 
			
		||||
# 
 | 
			
		||||
#     o We don't promise that this software works.  However, we are be
 | 
			
		||||
#       interested in any kind of bug reports. (`as is' distribution)
 | 
			
		||||
# 
 | 
			
		||||
#     o You can  use this software for whatever you  want, in parts or
 | 
			
		||||
#       full form, without having to pay us. (`royalty-free' usage)
 | 
			
		||||
# 
 | 
			
		||||
#     o You may not pretend that  you wrote this software.  If you use
 | 
			
		||||
#       it, or  only parts of it,  in a program,  you must acknowledge
 | 
			
		||||
#       somewhere in your documentation  that you've used the FreeType
 | 
			
		||||
#       code. (`credits')
 | 
			
		||||
# 
 | 
			
		||||
#   We  specifically  permit  and  encourage  the  inclusion  of  this
 | 
			
		||||
#   software,  with  or without modifications, in commercial products,
 | 
			
		||||
#   provided that all warranty or  liability claims are assumed by the
 | 
			
		||||
#   product vendor.
 | 
			
		||||
# 
 | 
			
		||||
# 
 | 
			
		||||
# Legal Terms
 | 
			
		||||
# ===========
 | 
			
		||||
# 
 | 
			
		||||
# 0. Definitions
 | 
			
		||||
# --------------
 | 
			
		||||
# 
 | 
			
		||||
#   Throughout this license,  the terms `package', `FreeType Project',
 | 
			
		||||
#   and  `FreeType  archive' refer  to  the  set  of files  originally
 | 
			
		||||
#   distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
 | 
			
		||||
#   Werner Lemberg) as the `FreeType project', be they named as alpha,
 | 
			
		||||
#   beta or final release.
 | 
			
		||||
# 
 | 
			
		||||
#   `You' refers to  the licensee, or person using  the project, where
 | 
			
		||||
#   `using' is a generic term including compiling the project's source
 | 
			
		||||
#   code as  well as linking it  to form a  `program' or `executable'.
 | 
			
		||||
#   This  program is  referred to  as  `a program  using the  FreeType
 | 
			
		||||
#   engine'.
 | 
			
		||||
# 
 | 
			
		||||
#   This  license applies  to all  files distributed  in  the original
 | 
			
		||||
#   FreeType  archive,   including  all  source   code,  binaries  and
 | 
			
		||||
#   documentation,  unless  otherwise  stated   in  the  file  in  its
 | 
			
		||||
#   original, unmodified form as  distributed in the original archive.
 | 
			
		||||
#   If you are  unsure whether or not a particular  file is covered by
 | 
			
		||||
#   this license, you must contact us to verify this.
 | 
			
		||||
# 
 | 
			
		||||
#   The FreeType  project is copyright (C) 1996-1999  by David Turner,
 | 
			
		||||
#   Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
 | 
			
		||||
#   specified below.
 | 
			
		||||
# 
 | 
			
		||||
# 1. No Warranty
 | 
			
		||||
# --------------
 | 
			
		||||
# 
 | 
			
		||||
#   THE FREETYPE ARCHIVE  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
 | 
			
		||||
#   KIND, EITHER EXPRESSED OR  IMPLIED, INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
#   WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
 | 
			
		||||
#   PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
 | 
			
		||||
#   BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
 | 
			
		||||
#   USE, OF THE FREETYPE PROJECT.
 | 
			
		||||
# 
 | 
			
		||||
#   As  you have  not signed  this license,  you are  not  required to
 | 
			
		||||
#   accept  it.   However,  as  the FreeType  project  is  copyrighted
 | 
			
		||||
#   material, only  this license, or  another one contracted  with the
 | 
			
		||||
#   authors, grants you  the right to use, distribute,  and modify it.
 | 
			
		||||
#   Therefore,  by  using,  distributing,  or modifying  the  FreeType
 | 
			
		||||
#   project, you indicate that you understand and accept all the terms
 | 
			
		||||
#   of this license.
 | 
			
		||||
# 
 | 
			
		||||
# 2. Redistribution
 | 
			
		||||
# -----------------
 | 
			
		||||
# 
 | 
			
		||||
#   Redistribution and use in source and binary forms, with or without
 | 
			
		||||
#   modification, are permitted provided that the following conditions
 | 
			
		||||
#   are met:
 | 
			
		||||
# 
 | 
			
		||||
#     o Redistribution  of source code  must retain this  license file
 | 
			
		||||
#       (`licence.txt') unaltered; any additions, deletions or changes
 | 
			
		||||
#       to   the  original   files  must   be  clearly   indicated  in
 | 
			
		||||
#       accompanying  documentation.   The  copyright notices  of  the
 | 
			
		||||
#       unaltered, original  files must be preserved in  all copies of
 | 
			
		||||
#       source files.
 | 
			
		||||
# 
 | 
			
		||||
#     o Redistribution in binary form must provide a  disclaimer  that
 | 
			
		||||
#       states  that  the software is based in part of the work of the
 | 
			
		||||
#       FreeType Team,  in  the  distribution  documentation.  We also
 | 
			
		||||
#       encourage you to put an URL to the FreeType web page  in  your
 | 
			
		||||
#       documentation, though this isn't mandatory.
 | 
			
		||||
# 
 | 
			
		||||
#   These conditions  apply to any  software derived from or  based on
 | 
			
		||||
#   the FreeType code, not just  the unmodified files.  If you use our
 | 
			
		||||
#   work, you  must acknowledge us.  However,  no fee need  be paid to
 | 
			
		||||
#   us.
 | 
			
		||||
# 
 | 
			
		||||
# 3. Advertising
 | 
			
		||||
# --------------
 | 
			
		||||
# 
 | 
			
		||||
#   The names of  FreeType's authors and contributors may  not be used
 | 
			
		||||
#   to endorse or promote  products derived from this software without
 | 
			
		||||
#   specific prior written permission.
 | 
			
		||||
#   
 | 
			
		||||
#   We suggest,  but do not require, that  you use one or  more of the
 | 
			
		||||
#   following phrases to refer  to this software in your documentation
 | 
			
		||||
#   or advertising  materials: `FreeType Project',  `FreeType Engine',
 | 
			
		||||
#   `FreeType library', or `FreeType Distribution'.
 | 
			
		||||
# 
 | 
			
		||||
# 4. Contacts
 | 
			
		||||
# -----------
 | 
			
		||||
# 
 | 
			
		||||
#   There are two mailing lists related to FreeType:
 | 
			
		||||
# 
 | 
			
		||||
#     o freetype@freetype.org
 | 
			
		||||
# 
 | 
			
		||||
#       Discusses general use and applications of FreeType, as well as
 | 
			
		||||
#       future and  wanted additions to the  library and distribution.
 | 
			
		||||
#       If  you are looking  for support,  start in  this list  if you
 | 
			
		||||
#       haven't found anything to help you in the documentation.
 | 
			
		||||
# 
 | 
			
		||||
#     o devel@freetype.org
 | 
			
		||||
# 
 | 
			
		||||
#       Discusses bugs,  as well  as engine internals,  design issues,
 | 
			
		||||
#       specific licenses, porting, etc.
 | 
			
		||||
# 
 | 
			
		||||
#     o http://www.freetype.org
 | 
			
		||||
# 
 | 
			
		||||
#       Holds the current  FreeType web page, which will  allow you to
 | 
			
		||||
#       download  our  latest  development  version  and  read  online
 | 
			
		||||
#       documentation.
 | 
			
		||||
# 
 | 
			
		||||
#   You can also contact us individually at:
 | 
			
		||||
# 
 | 
			
		||||
#     David Turner      <david.turner@freetype.org>
 | 
			
		||||
#     Robert Wilhelm    <robert.wilhelm@freetype.org>
 | 
			
		||||
#     Werner Lemberg    <werner.lemberg@freetype.org>
 | 
			
		||||
# 
 | 
			
		||||
# 
 | 
			
		||||
# --- end of license ---
 | 
			
		||||
#
 | 
			
		||||
# This file is part of the FreeType project.
 | 
			
		||||
#
 | 
			
		||||
# This builds the Watcom library with Watcom's wcc386 under OS/2.
 | 
			
		||||
#
 | 
			
		||||
# You'll need Watcom's wmake.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# Invoke by "wmake -f arch\os2\Makefile.wat" when in the "lib" directory
 | 
			
		||||
#
 | 
			
		||||
# This will build "freetype\lib\libttf.lib"
 | 
			
		||||
 | 
			
		||||
ARCH = arch\os2
 | 
			
		||||
FT_MAKEFILE = $(ARCH)\Makefile.wat
 | 
			
		||||
FT_MAKE = wmake -h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.EXTENSIONS:
 | 
			
		||||
.EXTENSIONS: .lib .obj .c .h
 | 
			
		||||
.obj:.;.\extend;.\$(ARCH)
 | 
			
		||||
.c:.;.\extend;.\$(ARCH)
 | 
			
		||||
.h:.;.\extend;.\$(ARCH)
 | 
			
		||||
 | 
			
		||||
CC = wcc386
 | 
			
		||||
 | 
			
		||||
CCFLAGS = /otexanl+ /s /w5 /zq -Iarch\os2 -I. -Iextend
 | 
			
		||||
 | 
			
		||||
TTFILE   = .\ttfile.c
 | 
			
		||||
TTMEMORY = .\ttmemory.c
 | 
			
		||||
TTMUTEX  = .\ttmutex.c
 | 
			
		||||
 | 
			
		||||
TTFILE_OBJ = ttfile.obj
 | 
			
		||||
TTMEMORY_OBJ = ttmemory.obj
 | 
			
		||||
TTMUTEX_OBJ = ttmutex.obj
 | 
			
		||||
 | 
			
		||||
PORT = $(TTFILE) $(TTMEMORY) $(TTMUTEX)
 | 
			
		||||
PORT_OBJS = $(TTFILE_OBJ) $(TTMEMORY_OBJ) $(TTMUTEX_OBJ)
 | 
			
		||||
 | 
			
		||||
SRC_X = extend\ftxgasp.c extend\ftxkern.c  extend\ftxpost.c &
 | 
			
		||||
        extend\ftxcmap.c extend\ftxwidth.c extend\ftxsbit.c &
 | 
			
		||||
        extend\ftxgsub.c extend\ftxgpos.c  extend\ftxopen.c &
 | 
			
		||||
        extend\ftxgdef.c
 | 
			
		||||
 | 
			
		||||
OBJS_X = extend\ftxgasp.obj extend\ftxkern.obj  extend\ftxpost.obj &
 | 
			
		||||
         extend\ftxcmap.obj extend\ftxwidth.obj extend\ftxsbit.obj &
 | 
			
		||||
         extend\ftxgsub.obj extend\ftxgpos.obj  extend\ftxopen.obj &
 | 
			
		||||
         extend\ftxgdef.obj
 | 
			
		||||
 | 
			
		||||
SRC_M = ttapi.c     ttcache.c   ttcalc.c   ttcmap.c  &
 | 
			
		||||
        ttgload.c   ttinterp.c  ttload.c   ttobjs.c  &
 | 
			
		||||
        ttraster.c  ttextend.c  $(PORT)
 | 
			
		||||
 | 
			
		||||
OBJS_M = ttapi.obj     ttcache.obj   ttcalc.obj   ttcmap.obj  &
 | 
			
		||||
         ttgload.obj   ttinterp.obj  ttload.obj   ttobjs.obj  &
 | 
			
		||||
         ttraster.obj  ttextend.obj  $(PORT_OBJS) $(OBJS_X)
 | 
			
		||||
 | 
			
		||||
SRC_S = freetype.c
 | 
			
		||||
OBJ_S = freetype.obj
 | 
			
		||||
OBJS_S = $(OBJ_S) $(OBJS_X)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.c.obj:
 | 
			
		||||
  $(CC) $(CCFLAGS) $[* /fo=$[*.obj
 | 
			
		||||
 | 
			
		||||
all: .symbolic
 | 
			
		||||
  $(FT_MAKE) -f $(FT_MAKEFILE) libttf.lib
 | 
			
		||||
 | 
			
		||||
debug: .symbolic
 | 
			
		||||
  $(FT_MAKE) -f $(FT_MAKEFILE) LIB_FILES="$(OBJS_M)" libttf.lib
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
libttf.lib: $(OBJS_M)
 | 
			
		||||
  wlib -q -n libttf.lib $(OBJS_M)
 | 
			
		||||
 | 
			
		||||
# is this correct? Know nothing about wmake and the Watcom compiler...
 | 
			
		||||
$(OBJ_S): $(SRC_S) $(SRC_M)
 | 
			
		||||
  $(CC) $(CCFLAGS) $(SRC_S) /fo=$(OBJ_S)
 | 
			
		||||
 | 
			
		||||
clean: .symbolic
 | 
			
		||||
  @-erase $(OBJS_M)
 | 
			
		||||
  @-erase *.err
 | 
			
		||||
 | 
			
		||||
distclean: .symbolic clean
 | 
			
		||||
  @-erase libttf.lib
 | 
			
		||||
 | 
			
		||||
new: .symbolic
 | 
			
		||||
  @-wtouch *.c
 | 
			
		||||
 | 
			
		||||
# end of Makefile.wat
 | 
			
		||||
							
								
								
									
										59
									
								
								samples/Pan/ceph-raid.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								samples/Pan/ceph-raid.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
unique template site/filesystems/ceph-raid;
 | 
			
		||||
 | 
			
		||||
prefix '/system/blockdevices';
 | 
			
		||||
 | 
			
		||||
variable CEPH_OSD_DISKS = {
 | 
			
		||||
    # SAS disks partitions
 | 
			
		||||
    disks = list();
 | 
			
		||||
    foreach (disk; data; value('/hardware/harddisks')) {
 | 
			
		||||
        if (data['capacity'] > 1000 * GB) {
 | 
			
		||||
            append(disks, disk);
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    disks;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
'partitions' = {
 | 
			
		||||
    foreach (idx; disk; CEPH_OSD_DISKS) {
 | 
			
		||||
        partitions_add(
 | 
			
		||||
            disk, dict(
 | 
			
		||||
                format('%s1', disk), 10 * GB,
 | 
			
		||||
                format('%s2', disk), 5 * GB,
 | 
			
		||||
                format('%s3', disk), -1));
 | 
			
		||||
        SELF[format('%s1', disk)]['offset'] = 1;
 | 
			
		||||
    };
 | 
			
		||||
    SELF;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#raid for data
 | 
			
		||||
'md' = {
 | 
			
		||||
    for (i = 0; i < length(CEPH_OSD_DISKS); i = i + 2) {
 | 
			
		||||
        for (j = 2; j <= 3; j = j + 1) {
 | 
			
		||||
            SELF[escape(format('md/%s0%s%d', CEPH_OSD_DISKS[i], CEPH_OSD_DISKS[i+1], j ))] = dict(
 | 
			
		||||
                "device_list", list(format('partitions/%s%d', CEPH_OSD_DISKS[i], j), format('partitions/%s%d', CEPH_OSD_DISKS[i+1], j)),
 | 
			
		||||
                "raid_level", 'RAID0',
 | 
			
		||||
                "metadata", '1.2',
 | 
			
		||||
            );
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    SELF;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
# ceph OSD and journal fs
 | 
			
		||||
'/system/filesystems' = {
 | 
			
		||||
    # ga over software raids..
 | 
			
		||||
    foreach (disk; data; value('/system/blockdevices/md')) { #check for data part/disk
 | 
			
		||||
        if (match(unescape(disk), '^md/.+0.+3$')) {
 | 
			
		||||
            append(merge(CEPH_FSOPTS_BASE, CEPH_DISK_OPTIONS[CEPH_FS], dict(
 | 
			
		||||
                'mountpoint', format('/var/lib/ceph/osd/%s', replace('md/([a-z0A-Z]+)[0-9]*$', '$1', unescape(disk))),
 | 
			
		||||
                'block_device', format('md/%s', disk),
 | 
			
		||||
            )));
 | 
			
		||||
        } else if (match(unescape(disk), '^md/.+0.+2$')) {
 | 
			
		||||
            append(merge(CEPH_FSOPTS_DUMMY, dict(
 | 
			
		||||
                'mountpoint', format('/dummy/%s', unescape(disk)),
 | 
			
		||||
                'block_device', format('md/%s', disk)
 | 
			
		||||
            )));
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    SELF;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										11
									
								
								samples/Pan/cluster-A.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								samples/Pan/cluster-A.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
structure template site/nagios/hosts/cluster-A;
 | 
			
		||||
 | 
			
		||||
# let Nagios server A monitor B
 | 
			
		||||
# just an example to make the templates compile
 | 
			
		||||
"nagios-slave-B.example.org" = create (NAGIOS_QUATTOR_HOST);
 | 
			
		||||
"nagios-slave-B.example.org/alias" = "slave B";
 | 
			
		||||
"nagios-slave-B.example.org/hostgroups" = list( "quattor-nodes" );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# "another-host-in-A.example.org" = create (NAGIOS_QUATTOR_HOST);
 | 
			
		||||
# "another-host-in-A.example.org/alias" = "another monitored host in cluster A";
 | 
			
		||||
							
								
								
									
										18
									
								
								samples/Pan/databases.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								samples/Pan/databases.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
template site/databases;
 | 
			
		||||
 | 
			
		||||
# Defines the mapping between the full hostname and the IP
 | 
			
		||||
# address.
 | 
			
		||||
final variable DB_IP = dict(
 | 
			
		||||
    escape("one"), "192.168.0.24",
 | 
			
		||||
    escape("hyp01"), "192.168.0.25",
 | 
			
		||||
    escape("vm"), "192.168.0.26",
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Defines the mapping between the full hostname and the
 | 
			
		||||
# physical machine.
 | 
			
		||||
# A different hardware template must be used for each machine
 | 
			
		||||
final variable DB_MACHINE = dict(
 | 
			
		||||
    escape("one"), "hardware/machine/ibm/x3550/x_KDXXXX",
 | 
			
		||||
    escape("hyp01"), "hardware/machine/ibm/hs21xm/blade_99HXXXX",
 | 
			
		||||
    escape("vm"), "hardware/machine/one/example",
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										56
									
								
								samples/Pan/functions.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								samples/Pan/functions.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
################################################################################
 | 
			
		||||
# This is 'namespaces/standard/pan/functions.tpl', a pan-templates's file
 | 
			
		||||
################################################################################
 | 
			
		||||
#
 | 
			
		||||
# VERSION:    3.2.7, 21/08/09 22:22
 | 
			
		||||
# AUTHOR:     Martin Bock
 | 
			
		||||
# MAINTAINER: Example Maintainer <support@example.org>
 | 
			
		||||
# LICENSE:    http://cern.ch/eu-datagrid/license.html
 | 
			
		||||
#
 | 
			
		||||
################################################################################
 | 
			
		||||
# Coding style: emulate <TAB> characters with 4 spaces, thanks!
 | 
			
		||||
################################################################################
 | 
			
		||||
#
 | 
			
		||||
# Function definitions
 | 
			
		||||
#
 | 
			
		||||
################################################################################
 | 
			
		||||
 | 
			
		||||
declaration template pan/functions;
 | 
			
		||||
 | 
			
		||||
include 'pan/types';
 | 
			
		||||
 | 
			
		||||
############################################################
 | 
			
		||||
##=
 | 
			
		||||
## @function push
 | 
			
		||||
## @# push zero or more values onto the end of a list.
 | 
			
		||||
##+If the list does not exist or is not defined a new list is
 | 
			
		||||
##+created.
 | 
			
		||||
## @syntax value:element
 | 
			
		||||
## @param:value... the values to push onto list
 | 
			
		||||
## @example
 | 
			
		||||
##+# "/data" will contain list (1,2,3,4)
 | 
			
		||||
##+"/data" = list(1,2);
 | 
			
		||||
##+"/data" = push(3,4);
 | 
			
		||||
##=
 | 
			
		||||
############################################################
 | 
			
		||||
function push = {
 | 
			
		||||
    # Get the reference to SELF or create an empty list
 | 
			
		||||
    # as necessary.
 | 
			
		||||
    if (exists(SELF) && is_list(SELF)) {
 | 
			
		||||
        v = SELF;
 | 
			
		||||
    } else if (!exists(SELF) || !is_defined(SELF)) {
 | 
			
		||||
        v = list();
 | 
			
		||||
    } else {
 | 
			
		||||
        error("push can only be applied to a list");
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    # Merge the arguments into the given array.  Neither the
 | 
			
		||||
    # first/next or merge functions can be used because the
 | 
			
		||||
    # ARGV array cannot be directly referenced.
 | 
			
		||||
    i = 0;
 | 
			
		||||
    while (i < ARGC) {
 | 
			
		||||
        v[length(v)] = ARGV[i];
 | 
			
		||||
        i = i + 1;
 | 
			
		||||
    };
 | 
			
		||||
    v;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										22
									
								
								samples/Pan/infernalis.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								samples/Pan/infernalis.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
unique template site/ceph/server/infernalis;
 | 
			
		||||
 | 
			
		||||
include 'components/dirperm/config';
 | 
			
		||||
 | 
			
		||||
"/software/components/dirperm/paths" = {
 | 
			
		||||
    foreach (idx; mp; value('/system/filesystems')) {
 | 
			
		||||
        if (match(mp['mountpoint'], format('^%s', CEPH_OSD_MP_BASE))) {
 | 
			
		||||
            append(SELF, dict(
 | 
			
		||||
                "path", mp['mountpoint'],
 | 
			
		||||
                "owner", "ceph:ceph",
 | 
			
		||||
                "perm", "0755",
 | 
			
		||||
                "type", "d",
 | 
			
		||||
            ));
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    SELF;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
include 'common/sysctl/service';
 | 
			
		||||
prefix "/software/components/metaconfig/services/{/etc/sysctl.conf}/contents";
 | 
			
		||||
 | 
			
		||||
'kernel.pid_max' = 4194303;
 | 
			
		||||
							
								
								
									
										20
									
								
								samples/Pan/libvirt.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								samples/Pan/libvirt.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
unique template site/ceph/client/libvirt;
 | 
			
		||||
 | 
			
		||||
include 'site/ceph/client/config';
 | 
			
		||||
 | 
			
		||||
variable CEPH_LIBVIRT_USER ?= 'oneadmin';
 | 
			
		||||
variable CEPH_LIBVIRT_GROUP ?= CEPH_LIBVIRT_USER;
 | 
			
		||||
prefix '/software/components/metaconfig/services/{/etc/ceph/ceph.client.libvirt.keyring}';
 | 
			
		||||
 | 
			
		||||
"contents" = if (is_defined(CEPH_LIBVIRT_SECRET)) {
 | 
			
		||||
    dict("client.libvirt", dict(
 | 
			
		||||
        "key", CEPH_LIBVIRT_SECRET,
 | 
			
		||||
        )
 | 
			
		||||
    );
 | 
			
		||||
} else {
 | 
			
		||||
    dict();
 | 
			
		||||
};
 | 
			
		||||
'module' = 'tiny';
 | 
			
		||||
'mode' = 0600;
 | 
			
		||||
'owner' = CEPH_LIBVIRT_USER;
 | 
			
		||||
'group' = CEPH_LIBVIRT_GROUP;
 | 
			
		||||
							
								
								
									
										19
									
								
								samples/Pan/link.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								samples/Pan/link.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
unique template site/dcache/link;
 | 
			
		||||
 | 
			
		||||
include 'components/dcache/config';
 | 
			
		||||
 | 
			
		||||
## links
 | 
			
		||||
## default preference value
 | 
			
		||||
"/software/components/dcache/link/def_pref" = "10";
 | 
			
		||||
## list of links that will be ignored during configuration
 | 
			
		||||
"/software/components/dcache/link/ignore_link" = list();
 | 
			
		||||
##
 | 
			
		||||
"/software/components/dcache/link/links" = dict(
 | 
			
		||||
    ## out_buf_write: all outside to write to the storage through this buffer
 | 
			
		||||
    "out", dict("ugroup", list("all_net", "any_store"), "pgroup", list("out_buf"), "read", "10", "write", "10", "cache", "10"),
 | 
			
		||||
    "in", dict("ugroup", list("in_net", "any_store"), "pgroup", list("priv"), "read", "20", "write", "20", "cache", "20"),
 | 
			
		||||
    "dteam", dict("ugroup", list("dteam_store"), "pgroup", list("out_buf"), "read", "10", "write", "10", "cache", "10"),
 | 
			
		||||
    "ops", dict("ugroup", list("ops_store"), "pgroup", list("out_buf"), "read", "10", "write", "10", "cache", "10"),
 | 
			
		||||
    "cms", dict("ugroup", list("cms_store"), "pgroup", list("out_buf"), "read", "10", "write", "10", "cache", "10"),
 | 
			
		||||
    "test", dict("ugroup", list("test_store"), "pgroup", list("behar_test"), "read", "10", "write", "10", "cache", "10"),
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										29
									
								
								samples/Pan/mysql.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								samples/Pan/mysql.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
unique template common/opennebula/mysql;
 | 
			
		||||
 | 
			
		||||
prefix "/software/packages";
 | 
			
		||||
"{mysql-server}" = dict();
 | 
			
		||||
 | 
			
		||||
include 'components/mysql/config';
 | 
			
		||||
 | 
			
		||||
prefix  "/software/components/mysql";
 | 
			
		||||
"serviceName" = {
 | 
			
		||||
    if (RPM_BASE_FLAVOUR_VERSIONID == 7) {
 | 
			
		||||
        "mariadb";
 | 
			
		||||
    } else {
 | 
			
		||||
        "mysqld";
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
prefix "/software/components/mysql/servers/one";
 | 
			
		||||
"host" = FULL_HOSTNAME; # localhost is added by component
 | 
			
		||||
"adminpwd" = OPENNEBULA_MYSQL_ADMIN;
 | 
			
		||||
"adminuser" = "root";
 | 
			
		||||
 | 
			
		||||
prefix "/software/components/mysql/databases/opennebula";
 | 
			
		||||
"server" = "one";
 | 
			
		||||
"users/oneadmin/password" = OPENNEBULA_MYSQL_ONEADMIN;
 | 
			
		||||
"users/oneadmin/rights" = list("ALL PRIVILEGES");
 | 
			
		||||
"createDb" = false; # if false, run script
 | 
			
		||||
"initScript/file" = "/dev/null";
 | 
			
		||||
 | 
			
		||||
prefix "/software/components/chkconfig/service";
 | 
			
		||||
"mysqld" = dict("on", "", "startstop", true);
 | 
			
		||||
							
								
								
									
										18
									
								
								samples/Pan/nodes_properties.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								samples/Pan/nodes_properties.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
template config/nodes_properties;
 | 
			
		||||
 | 
			
		||||
variable SITES ?= list('example');
 | 
			
		||||
 | 
			
		||||
#variable NEW_NODES_PROPS ?= {
 | 
			
		||||
 | 
			
		||||
variable NODES_PROPS = {
 | 
			
		||||
    nodes_add = dict();
 | 
			
		||||
    nodes_props = dict();
 | 
			
		||||
    allsites = SITES;
 | 
			
		||||
    ok = first(allsites, k, v);
 | 
			
		||||
    while (ok) {
 | 
			
		||||
        nodes_add = merge(create(format("config/%s_nodes_properties", v)), nodes_props);
 | 
			
		||||
        nodes_props = merge(nodes_add[v], nodes_props);
 | 
			
		||||
        ok = next(allsites, k, v);
 | 
			
		||||
    };
 | 
			
		||||
    nodes_props;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										14
									
								
								samples/Pan/onevm.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								samples/Pan/onevm.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
unique template site/one/onevm;
 | 
			
		||||
 | 
			
		||||
include 'components/chkconfig/config';
 | 
			
		||||
 | 
			
		||||
# set opennebula map
 | 
			
		||||
include 'quattor/aii/opennebula/schema';
 | 
			
		||||
bind "/system/opennebula" = opennebula_vmtemplate;
 | 
			
		||||
 | 
			
		||||
include 'site/config-vm';
 | 
			
		||||
 | 
			
		||||
include 'quattor/aii/opennebula/default';
 | 
			
		||||
 | 
			
		||||
"/software/packages/{acpid}" = dict();
 | 
			
		||||
"/software/components/chkconfig/service/acpid" = dict('on', '', 'startstop', true);
 | 
			
		||||
							
								
								
									
										26
									
								
								samples/Pan/osd-fetch.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								samples/Pan/osd-fetch.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
unique template site/ceph/osdschemas/osd-fetch;
 | 
			
		||||
 | 
			
		||||
prefix '/software/components/ceph/clusters/ceph';
 | 
			
		||||
 | 
			
		||||
variable FETCHED_OSDS = {
 | 
			
		||||
    t = dict();
 | 
			
		||||
    rep = 2;
 | 
			
		||||
    foreach(idx; host; CEPH_NODES) {
 | 
			
		||||
        prof = replace('.data$', '.os', host);
 | 
			
		||||
        d = value(format('%s:/software/components/ceph/localdaemons/osds', prof));
 | 
			
		||||
        t[shorten_fqdn(host)] = dict(
 | 
			
		||||
            'fqdn', host,
 | 
			
		||||
            'osds', d
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        numosd = length(d);
 | 
			
		||||
        if (numosd > rep){
 | 
			
		||||
            rep = numosd;
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    all = dict('osdhosts', t, 'maxosd', rep);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
'osdhosts' = FETCHED_OSDS['osdhosts'];
 | 
			
		||||
variable CEPH_OSD_DOWN_REPORTERS ?= FETCHED_OSDS['maxosd'] + 2;
 | 
			
		||||
variable CEPH_OSD_DOWN_REPORTS ?=  CEPH_OSD_DOWN_REPORTERS + CEPH_OSD_DOWN_REPORTERS / 4 + 1;
 | 
			
		||||
							
								
								
									
										45
									
								
								samples/Pan/pakiti.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								samples/Pan/pakiti.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
#
 | 
			
		||||
# Generated by RepositoryTask on 12/09/13 15:41
 | 
			
		||||
#
 | 
			
		||||
# name = pakiti
 | 
			
		||||
# owner = support@example.org
 | 
			
		||||
# url = http://quattor.web.lal.in2p3.fr/packages/pakiti
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
structure template repository/pakiti;
 | 
			
		||||
 | 
			
		||||
"name" = "pakiti";
 | 
			
		||||
"owner" = "support@example.org";
 | 
			
		||||
"protocols" = list(
 | 
			
		||||
    dict("name", "http",
 | 
			
		||||
    "url", "http://quattor.web.lal.in2p3.fr/packages/pakiti")
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
"contents" = dict(
 | 
			
		||||
    # pkg = pakiti-client-2.1.4-1-noarch
 | 
			
		||||
escape("pakiti-client-2.1.4-1-noarch"), dict("name", "pakiti-client", "version", "2.1.4-1", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-client-2.1.4-2-noarch
 | 
			
		||||
escape("pakiti-client-2.1.4-2-noarch"), dict("name", "pakiti-client", "version", "2.1.4-2", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-client-2.1.4-3-noarch
 | 
			
		||||
escape("pakiti-client-2.1.4-3-noarch"), dict("name", "pakiti-client", "version", "2.1.4-3", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-client-2.1.4-4-noarch
 | 
			
		||||
escape("pakiti-client-2.1.4-4-noarch"), dict("name", "pakiti-client", "version", "2.1.4-4", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-client-2.1.5-0-noarch
 | 
			
		||||
escape("pakiti-client-2.1.5-0-noarch"), dict("name", "pakiti-client", "version", "2.1.5-0", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-client-manual-2.1.4-2-noarch
 | 
			
		||||
escape("pakiti-client-manual-2.1.4-2-noarch"), dict("name", "pakiti-client-manual", "version", "2.1.4-2", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-client-manual-2.1.4-3-noarch
 | 
			
		||||
escape("pakiti-client-manual-2.1.4-3-noarch"), dict("name", "pakiti-client-manual", "version", "2.1.4-3", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-client-manual-2.1.4-4-noarch
 | 
			
		||||
escape("pakiti-client-manual-2.1.4-4-noarch"), dict("name", "pakiti-client-manual", "version", "2.1.4-4", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-server-2.1.4-1-noarch
 | 
			
		||||
escape("pakiti-server-2.1.4-1-noarch"), dict("name", "pakiti-server", "version", "2.1.4-1", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-server-2.1.4-2-noarch
 | 
			
		||||
escape("pakiti-server-2.1.4-2-noarch"), dict("name", "pakiti-server", "version", "2.1.4-2", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-server-2.1.4-3-noarch
 | 
			
		||||
escape("pakiti-server-2.1.4-3-noarch"), dict("name", "pakiti-server", "version", "2.1.4-3", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-server-2.1.4-4-noarch
 | 
			
		||||
escape("pakiti-server-2.1.4-4-noarch"), dict("name", "pakiti-server", "version", "2.1.4-4", "arch", "noarch"),
 | 
			
		||||
    # pkg = pakiti-server-2.1.5-0-noarch
 | 
			
		||||
escape("pakiti-server-2.1.5-0-noarch"), dict("name", "pakiti-server", "version", "2.1.5-0", "arch", "noarch"),
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										30
									
								
								samples/Pan/purge_fqan_accounts.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								samples/Pan/purge_fqan_accounts.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
# Template installing a script to remove all accounts with 'fqan' in
 | 
			
		||||
# their name. Used after fixing VOConfigTask in SCDB 2.3.2 to remove
 | 
			
		||||
# obsolete accounts not removed by ncm-accounts.
 | 
			
		||||
#
 | 
			
		||||
# The script is added and executed only on nodes where NODE_VO_ACCOUNTS
 | 
			
		||||
# is true. It is intended to be run as GLITE_BASE_CONFIG_SITE (define
 | 
			
		||||
# this variable to the script namespace).
 | 
			
		||||
#
 | 
			
		||||
# Michel Jouvin - 13/9/09
 | 
			
		||||
 | 
			
		||||
unique template site/misc/purge_fqan_accounts;
 | 
			
		||||
 | 
			
		||||
variable LAL_PURGE_ACCOUNTS_SCRIPT = '/tmp/purge_fqan_accounts';
 | 
			
		||||
 | 
			
		||||
include 'components/filecopy/config';
 | 
			
		||||
 | 
			
		||||
'/software/components/filecopy/services' = {
 | 
			
		||||
    if ( is_defined(NODE_VO_ACCOUNTS) && NODE_VO_ACCOUNTS ) {
 | 
			
		||||
        debug('Adding purge_fqan_accounts');
 | 
			
		||||
        SELF[escape(LAL_PURGE_ACCOUNTS_SCRIPT)] = dict(
 | 
			
		||||
            'config', file_contents('site/misc/purge_fqan_accounts.sh'),
 | 
			
		||||
            'owner', 'root:root',
 | 
			
		||||
            'perms', '0755',
 | 
			
		||||
            'restart', LAL_PURGE_ACCOUNTS_SCRIPT,
 | 
			
		||||
        );
 | 
			
		||||
    } else {
 | 
			
		||||
        debug(format('VO accounts disabled (NODE_VO_ACCOUNTS=%s', NODE_VO_ACCOUNTS));
 | 
			
		||||
    };
 | 
			
		||||
    SELF;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										30
									
								
								samples/Pan/resources.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								samples/Pan/resources.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
unique template site/one/resources;
 | 
			
		||||
 | 
			
		||||
# datastores templates
 | 
			
		||||
prefix "/software/components/opennebula/datastores/0";
 | 
			
		||||
"name" = "ceph.example";
 | 
			
		||||
"bridge_list" = list(FULL_HOSTNAME); # for now, do this from the headnode
 | 
			
		||||
"ceph_host" = CEPH_MON_HOSTS;
 | 
			
		||||
"ceph_secret" = CEPH_LIBVIRT_UUID;
 | 
			
		||||
"ceph_user" = "libvirt";
 | 
			
		||||
"ceph_user_key" = CEPH_LIBVIRT_SECRET;
 | 
			
		||||
"datastore_capacity_check" = true;
 | 
			
		||||
"pool_name" = "one";
 | 
			
		||||
"type" = "IMAGE_DS";
 | 
			
		||||
"rbd_format" = 2;
 | 
			
		||||
 | 
			
		||||
prefix "/software/components/opennebula/datastores/1";
 | 
			
		||||
"name" = "nfs.example";
 | 
			
		||||
"datastore_capacity_check" = true;
 | 
			
		||||
"ds_mad" = "fs";
 | 
			
		||||
"tm_mad" = "shared";
 | 
			
		||||
"type" = "IMAGE_DS";
 | 
			
		||||
 | 
			
		||||
# untouchables resources
 | 
			
		||||
prefix "/software/components/opennebula/untouchables";
 | 
			
		||||
"datastores" = list('system');
 | 
			
		||||
 | 
			
		||||
# extra conf
 | 
			
		||||
prefix "/software/components/opennebula";
 | 
			
		||||
"ssh_multiplex" = true;
 | 
			
		||||
"tm_system_ds" = "ssh";
 | 
			
		||||
							
								
								
									
										20
									
								
								samples/Pan/simple.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								samples/Pan/simple.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
unique template site/ceph/osdlocal/simple;
 | 
			
		||||
 | 
			
		||||
variable CEPH_JOURNAL_PART ?= dict();
 | 
			
		||||
 | 
			
		||||
prefix '/software/components/ceph';
 | 
			
		||||
 | 
			
		||||
'localdaemons/osds' = {
 | 
			
		||||
    d = dict();
 | 
			
		||||
    foreach(idx; osdmnt; value('/system/filesystems')) {
 | 
			
		||||
        part = osdmnt['block_device'];
 | 
			
		||||
        disk = replace('\S+/([a-zA-Z]+)[0-9]*$', '$1', part);
 | 
			
		||||
        if (match(osdmnt['mountpoint'], '/var/lib/ceph/osd/\w+')){
 | 
			
		||||
            d[escape(osdmnt['mountpoint'])] = dict(
 | 
			
		||||
                'journal_path', format('/dev/%s%d', disk, CEPH_JOURNAL_PART['data']),
 | 
			
		||||
                'crush_weight', weight_of(part),
 | 
			
		||||
            );
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    d;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										151
									
								
								samples/Pan/types.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								samples/Pan/types.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,151 @@
 | 
			
		||||
@contributor{
 | 
			
		||||
  name = First Contributor
 | 
			
		||||
  email = first@example.org
 | 
			
		||||
}
 | 
			
		||||
@contributor{
 | 
			
		||||
  name = Second Contributor
 | 
			
		||||
  email = second@example.org
 | 
			
		||||
}
 | 
			
		||||
@documentation{
 | 
			
		||||
Data type and function definitions for basic types
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declaration template pan/types;
 | 
			
		||||
 | 
			
		||||
include 'pan/legacy';
 | 
			
		||||
 | 
			
		||||
@documentation{
 | 
			
		||||
This type implements a date/time format consistent with
 | 
			
		||||
ASN.1 typically used by LDAP.  The actual specification is the
 | 
			
		||||
"GeneralizedTime" format as specified on page 38 of the X.208
 | 
			
		||||
ITU-T recommendation and references within.
 | 
			
		||||
 | 
			
		||||
Ex: 20040825120123Z
 | 
			
		||||
    20040825120123+0100
 | 
			
		||||
    20040825120123,5
 | 
			
		||||
    20040825120123.5
 | 
			
		||||
    20040825120123.5-0123
 | 
			
		||||
}
 | 
			
		||||
function is_asndate = {
 | 
			
		||||
    # Check cardinality and type of argument.
 | 
			
		||||
    if (ARGC != 1 || !is_string(ARGV[0]))
 | 
			
		||||
        error("usage: is_asndate(string)");
 | 
			
		||||
 | 
			
		||||
    # Match the datetime pattern, extracting interesting fields.
 | 
			
		||||
    result = matches(ARGV[0],
 | 
			
		||||
        '^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(?:[,\.](\d+))?([Zz]|(?:[-+]\d{2}\d{2}))?$');
 | 
			
		||||
 | 
			
		||||
    if (length(result) >= 7) {
 | 
			
		||||
        # Do further tests on various components of the date.
 | 
			
		||||
        # NOTE: the to_long(to_double(x)) construct below is to avoid having
 | 
			
		||||
        # the to_long function treat strings with leading zeros as octal
 | 
			
		||||
        # numbers.  E.g. to_long("09") will throw an exception because '9' is
 | 
			
		||||
        # not a valid octal digit.
 | 
			
		||||
        year = to_long(result[1]);
 | 
			
		||||
        month = to_long(to_double(result[2]));
 | 
			
		||||
        day = to_long(to_double(result[3]));
 | 
			
		||||
        hour = to_long(to_double(result[4]));
 | 
			
		||||
        minute = to_long(to_double(result[5]));
 | 
			
		||||
        second = to_long(to_double(result[6]));
 | 
			
		||||
 | 
			
		||||
        frac = 0;
 | 
			
		||||
        if (length(result) > 7) {
 | 
			
		||||
            frac = to_long(to_double(result[7]));
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        zone = '+0000';
 | 
			
		||||
        if (length(result) > 8) {
 | 
			
		||||
            zone = result[8];
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Check the range of months.
 | 
			
		||||
        if (month < 1 || month > 12) {
 | 
			
		||||
            error("is_asndate: invalid month");
 | 
			
		||||
            return(false);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Check the range of days.
 | 
			
		||||
        if (day < 1 || day > 31) {
 | 
			
		||||
            error("is_asndate: invalid day");
 | 
			
		||||
            return(false);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Be more specific on the days in each month.
 | 
			
		||||
        if (month == 4 || month == 6 || month == 9 || month == 11) {
 | 
			
		||||
            if (day > 30) {
 | 
			
		||||
                error("is_asndate: invalid day");
 | 
			
		||||
            };
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # February is always a bother.  Too lazy to check that the leap
 | 
			
		||||
        # years have been specified correctly.
 | 
			
		||||
        if (month == 2 && day > 29) {
 | 
			
		||||
            error("is_asndate: invalid day");
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Check the time.
 | 
			
		||||
        if (hour > 23) {
 | 
			
		||||
            error("is_asndate: invalid hour");
 | 
			
		||||
            return(false);
 | 
			
		||||
        };
 | 
			
		||||
        if (minute > 59) {
 | 
			
		||||
            error("is_asndate: invalid minute");
 | 
			
		||||
            return(false);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Allow for leap seconds here (since it is easy).
 | 
			
		||||
        if (second > 60) {
 | 
			
		||||
            error("is_asndate: invalid minute");
 | 
			
		||||
            return(false);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Check the time zone format.
 | 
			
		||||
        if (zone != "Z" && zone != "z") {
 | 
			
		||||
            tz = matches(zone, '^[-+](\d{2})(\d{2})$');
 | 
			
		||||
 | 
			
		||||
            hoffset = to_long(to_double(tz[1]));
 | 
			
		||||
            moffset = to_long(to_double(tz[2]));
 | 
			
		||||
 | 
			
		||||
            if (hoffset >= 12) {
 | 
			
		||||
                error("is_asndate: invalid hour offset in time zone");
 | 
			
		||||
                return(false);
 | 
			
		||||
            };
 | 
			
		||||
            if (moffset > 59) {
 | 
			
		||||
                error("is_asndate: invalid minute offset in time zone");
 | 
			
		||||
                return(false);
 | 
			
		||||
            };
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    } else {
 | 
			
		||||
        error("is_asndate: invalid format for time");
 | 
			
		||||
        return(false);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    # If it gets to this point, then the date must be OK.
 | 
			
		||||
    true;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
type type_asndate = string with {
 | 
			
		||||
    is_asndate(SELF);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@documentation{
 | 
			
		||||
    desc = Type that enforces the existence of a named interface.
 | 
			
		||||
}
 | 
			
		||||
type valid_interface = string with {
 | 
			
		||||
    if (exists(format('/system/network/interfaces/%s', SELF))) {
 | 
			
		||||
        return(true);
 | 
			
		||||
    };
 | 
			
		||||
    foreach(ifc; attr; value('/system/network/interfaces')) {
 | 
			
		||||
        if (attr['device'] == SELF){
 | 
			
		||||
            return(true);
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
    false;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@documentation{
 | 
			
		||||
    desc = CPU architectures understood by Quattor
 | 
			
		||||
}
 | 
			
		||||
type cpu_architecture = string with match (SELF, '^(i386|ia64|x86_64|sparc|aarch64|ppc64(le)?)$');
 | 
			
		||||
							
								
								
									
										32
									
								
								samples/Pan/unit.pan
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								samples/Pan/unit.pan
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
unique template site/dcache/unit;
 | 
			
		||||
 | 
			
		||||
include 'components/dcache/config';
 | 
			
		||||
 | 
			
		||||
## unit/ugroups
 | 
			
		||||
## list of ugroups that will be ignored during configuration
 | 
			
		||||
"/software/components/dcache/unit/ignore_ugroup" = list();
 | 
			
		||||
"/software/components/dcache/unit/units" = dict(
 | 
			
		||||
    "protocol", list(
 | 
			
		||||
        dict("cond", "*/*", "ugroup", list("default_protocol"))
 | 
			
		||||
    ),
 | 
			
		||||
    "net", list(
 | 
			
		||||
        dict("cond", "192.168.0.0/255.255.0.0", "ugroup", list("in_net", "all_net")),
 | 
			
		||||
        dict("cond", "192.168.10.0/255.255.255.0", "ugroup", list("in_server", "in_net", "all_net")),
 | 
			
		||||
        dict("cond", "192.168.11.0/255.255.255.0", "ugroup", list("in_wn", "in_net", "all_net")),
 | 
			
		||||
        dict("cond", "192.168.12.0/255.255.255.0", "ugroup", list("in_wn", "in_net", "all_net")),
 | 
			
		||||
        dict("cond", "192.168.13.0/255.255.255.0", "ugroup", list("in_wn", "in_net", "all_net")),
 | 
			
		||||
        dict("cond", "192.168.14.0/255.255.255.0", "ugroup", list("in_wn", "in_net", "all_net")),
 | 
			
		||||
        dict("cond", "192.168.15.0/255.255.255.0", "ugroup", list("in_wn", "in_net", "all_net")),
 | 
			
		||||
        dict("cond", "192.168.16.0/255.255.255.0", "ugroup", list("in_wn", "in_net", "all_net")),
 | 
			
		||||
        dict("cond", "192.168.17.0/255.255.255.0", "ugroup", list("in_wn", "in_net", "all_net")),
 | 
			
		||||
        dict("cond", "0.0.0.0/0.0.0.0", "ugroup", list("all_net")),
 | 
			
		||||
        ),
 | 
			
		||||
    "store", list(
 | 
			
		||||
        dict("cond", "*@*", "ugroup", list("any_store")),
 | 
			
		||||
        dict("cond", "myStore:STRING@osm", "ugroup", list("default_store", "any_store")),
 | 
			
		||||
        dict("cond", "dteam:dteam-base@osm", "ugroup", list("dteam_store", "any_store")),
 | 
			
		||||
        dict("cond", "ops:ops-base@osm", "ugroup", list("ops_store", "any_store")),
 | 
			
		||||
        dict("cond", "cms:cms-base@osm", "ugroup", list("cms_store", "any_store")),
 | 
			
		||||
        dict("cond", "test:cms-test@osm", "ugroup", list("test_store")),
 | 
			
		||||
    ),
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										11
									
								
								samples/Perl/filenames/cpanfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								samples/Perl/filenames/cpanfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
requires 'perl', '5.008001';
 | 
			
		||||
 | 
			
		||||
requires 'JSON';
 | 
			
		||||
requires 'Path::Class', 0.26;
 | 
			
		||||
requires 'WebService::Dropbox', 2.06;
 | 
			
		||||
requires 'DateTime::Format::Strptime';
 | 
			
		||||
requires 'Encode::Locale';
 | 
			
		||||
 | 
			
		||||
if ($^O eq 'darwin') {
 | 
			
		||||
	requires 'Encode::UTF8Mac';
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										335
									
								
								samples/Ring/hello.ring
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										335
									
								
								samples/Ring/hello.ring
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,335 @@
 | 
			
		||||
# The Ring Standard Library
 | 
			
		||||
# Game Engine for 2D Games
 | 
			
		||||
# Flappy Bird 3000 Game
 | 
			
		||||
# 2016, Mahmoud Fayed <msfclipper@yahoo.com>
 | 
			
		||||
 | 
			
		||||
oGameState = NULL
 | 
			
		||||
 | 
			
		||||
Load "gameengine.ring"
 | 
			
		||||
 | 
			
		||||
func main
 | 
			
		||||
 | 
			
		||||
	oGame = New Game  
 | 
			
		||||
 | 
			
		||||
	while true
 | 
			
		||||
 | 
			
		||||
	oGameState = New GameState
 | 
			
		||||
 | 
			
		||||
	oGame {
 | 
			
		||||
		title = "Flappy Bird 3000"
 | 
			
		||||
		sprite
 | 
			
		||||
		{
 | 
			
		||||
			file = "images/fbback.png"
 | 
			
		||||
			x = 0 y=0 width=800 height = 600 scaled = true animate = false
 | 
			
		||||
			keypress = func ogame,oself,nKey {
 | 
			
		||||
				if nkey = key_esc or nKey = GE_AC_BACK
 | 
			
		||||
					ogame.shutdown()
 | 
			
		||||
				but nKey = key_space
 | 
			
		||||
					oGameState.startplay=true
 | 
			
		||||
					ogame.shutdown=true
 | 
			
		||||
				ok
 | 
			
		||||
			}
 | 
			
		||||
			mouse = func ogame,oself,nType,aMouseList {
 | 
			
		||||
				if nType = GE_MOUSE_UP
 | 
			
		||||
					call oself.keypress(oGame,oSelf,Key_Space)
 | 
			
		||||
				ok
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		text {
 | 
			
		||||
			animate = false
 | 
			
		||||
			size = 35
 | 
			
		||||
			file = "fonts/pirulen.ttf"
 | 
			
		||||
			text = "Flappy Bird 3000"
 | 
			
		||||
			x = 150	y=50
 | 
			
		||||
		}
 | 
			
		||||
		text {
 | 
			
		||||
			animate = false
 | 
			
		||||
			size = 25
 | 
			
		||||
			file = "fonts/pirulen.ttf"
 | 
			
		||||
			text = "Version 1.0"
 | 
			
		||||
			x = 280	y=100
 | 
			
		||||
		}
 | 
			
		||||
		text {
 | 
			
		||||
			animate = false
 | 
			
		||||
			size = 16
 | 
			
		||||
			file = "fonts/pirulen.ttf"
 | 
			
		||||
			text = "(C) 2016, Mahmoud Fayed"
 | 
			
		||||
			x = 245	y=140
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		text {
 | 
			
		||||
			animate = false
 | 
			
		||||
			size = 25
 | 
			
		||||
			file = "fonts/pirulen.ttf"
 | 
			
		||||
			text = "To Win Get Score = 3000"
 | 
			
		||||
			x = 150	y=270
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		text {
 | 
			
		||||
			animate = false
 | 
			
		||||
			size = 25
 | 
			
		||||
			file = "fonts/pirulen.ttf"
 | 
			
		||||
			text = "Press Space to start"
 | 
			
		||||
			x = 190	y=470
 | 
			
		||||
		}
 | 
			
		||||
		text {
 | 
			
		||||
			animate = false
 | 
			
		||||
			size = 20
 | 
			
		||||
			file = "fonts/pirulen.ttf"
 | 
			
		||||
			text = "Press Esc to Exit"
 | 
			
		||||
			x = 260	y=510
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		animate {
 | 
			
		||||
			file = "images/fbbird.png"
 | 
			
		||||
			x = 200
 | 
			
		||||
			y = 200
 | 
			
		||||
			framewidth = 20
 | 
			
		||||
			scaled = true
 | 
			
		||||
			height = 50
 | 
			
		||||
			width = 50
 | 
			
		||||
			nStep = 3
 | 
			
		||||
			transparent = true
 | 
			
		||||
			animate = true
 | 
			
		||||
			direction = ge_direction_random
 | 
			
		||||
			state = func oGame,oSelf {
 | 
			
		||||
				oSelf {
 | 
			
		||||
					nStep--
 | 
			
		||||
					if nStep = 0
 | 
			
		||||
						nStep = 3
 | 
			
		||||
						if frame < 3
 | 
			
		||||
							frame++
 | 
			
		||||
						else
 | 
			
		||||
							frame=1
 | 
			
		||||
						ok
 | 
			
		||||
					ok
 | 
			
		||||
					if x <= 0 x=0 ok
 | 
			
		||||
					if y <= 0 y=0 ok
 | 
			
		||||
					if x >= 750 x= 750 ok
 | 
			
		||||
					if y > 550 y=550 ok
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Sound {
 | 
			
		||||
			file = "sound/music2.wav"
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if oGameState.startplay
 | 
			
		||||
		oGame.refresh()
 | 
			
		||||
		playstart(oGame)
 | 
			
		||||
		oGame.refresh()
 | 
			
		||||
	ok
 | 
			
		||||
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func playstart oGame
 | 
			
		||||
 | 
			
		||||
	oGame {
 | 
			
		||||
		FPS = 60
 | 
			
		||||
		FixedFPS = 120
 | 
			
		||||
		Title = "Flappy Bird 3000"
 | 
			
		||||
		Sprite {
 | 
			
		||||
			file = "images/fbback.png"
 | 
			
		||||
			x = 0 y=0 width=800 height = 600 scaled = true animate = false
 | 
			
		||||
			keypress = func ogame,oself,nKey {
 | 
			
		||||
				if nkey = key_esc or nKey = GE_AC_BACK
 | 
			
		||||
					ogame.shutdown()
 | 
			
		||||
				ok
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Map {
 | 
			
		||||
			blockwidth = 80
 | 
			
		||||
			blockheight = 80
 | 
			
		||||
			aMap = [
 | 
			
		||||
				 	[0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
 | 
			
		||||
					[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
 | 
			
		||||
					[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
 | 
			
		||||
					[0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
 | 
			
		||||
					[0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
 | 
			
		||||
					[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
 | 
			
		||||
					[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
 | 
			
		||||
					[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
 | 
			
		||||
				]
 | 
			
		||||
			newmap(aMap)
 | 
			
		||||
			aImages = ["images/fbwall.png","images/fbwallup.png",
 | 
			
		||||
					"images/fbwalldown.png"]
 | 
			
		||||
			state = func oGame,oSelf {
 | 
			
		||||
				if oGameState.gameresult = false
 | 
			
		||||
					px = oGame.aObjects[3].x
 | 
			
		||||
					py = oGame.aObjects[3].y
 | 
			
		||||
					oSelf {
 | 
			
		||||
						x -=  3
 | 
			
		||||
						if x < - 2100
 | 
			
		||||
							x = 0
 | 
			
		||||
							newmap(aMap)
 | 
			
		||||
						ok
 | 
			
		||||
						nCol =  getcol(px,0)
 | 
			
		||||
						if nCol=11 or nCol=15 or nCol=19 or nCol=23 or nCol=27
 | 
			
		||||
							if nCol != oGameState.lastcol
 | 
			
		||||
								oGameState.lastcol = nCol
 | 
			
		||||
								oGameState.Score += 100
 | 
			
		||||
								oGame { Sound {
 | 
			
		||||
									once = true
 | 
			
		||||
									file = "sound/sfx_point.wav"
 | 
			
		||||
								} }
 | 
			
		||||
								checkwin(oGame)
 | 
			
		||||
							ok
 | 
			
		||||
						ok
 | 
			
		||||
					}
 | 
			
		||||
					if  oSelf.getvalue(px+40,py) != 0 or
 | 
			
		||||
					    oSelf.getvalue(px+40,py+40) != 0 or
 | 
			
		||||
					    oSelf.getvalue(px,py) != 0 or
 | 
			
		||||
					    oSelf.getvalue(px,py+40) != 0
 | 
			
		||||
						oGameState.gameresult = true
 | 
			
		||||
						oGame {
 | 
			
		||||
							text {
 | 
			
		||||
								point = 550
 | 
			
		||||
								size = 30
 | 
			
		||||
								nStep = 3
 | 
			
		||||
								file = "fonts/pirulen.ttf"
 | 
			
		||||
								text = "Game Over !!!"
 | 
			
		||||
								x = 500	y=10
 | 
			
		||||
								state = func ogame,oself {
 | 
			
		||||
									if oself.y >= 550
 | 
			
		||||
											ogame.shutdown = true
 | 
			
		||||
									ok
 | 
			
		||||
										if oself.y = 90
 | 
			
		||||
										ogame {
 | 
			
		||||
											Sound {
 | 
			
		||||
												once = true
 | 
			
		||||
												file = "sound/sfx_die.wav"
 | 
			
		||||
											}
 | 
			
		||||
										}
 | 
			
		||||
									ok
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
							Sound {
 | 
			
		||||
								once = true
 | 
			
		||||
								file = "sound/sfx_hit.wav"
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					ok
 | 
			
		||||
				ok
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		animate {
 | 
			
		||||
			file = "images/fbbird.png"
 | 
			
		||||
			x = 10
 | 
			
		||||
			y = 10
 | 
			
		||||
			framewidth = 20
 | 
			
		||||
			scaled = true
 | 
			
		||||
			height = 50
 | 
			
		||||
			width = 50
 | 
			
		||||
			nStep = 3
 | 
			
		||||
			transparent = true
 | 
			
		||||
			state = func oGame,oSelf {
 | 
			
		||||
				oSelf {
 | 
			
		||||
					nStep--
 | 
			
		||||
					if nStep = 0
 | 
			
		||||
						nStep = 3
 | 
			
		||||
						if frame < 3
 | 
			
		||||
							frame++
 | 
			
		||||
						else
 | 
			
		||||
							frame=1
 | 
			
		||||
						ok
 | 
			
		||||
					ok
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if not oGameState.playerwin
 | 
			
		||||
					oGameState.down --
 | 
			
		||||
					if oGameState.down = 0
 | 
			
		||||
						oGameState.down = 3
 | 
			
		||||
						oself {
 | 
			
		||||
							y += 25
 | 
			
		||||
							if y > 550 y=550 ok
 | 
			
		||||
						}
 | 
			
		||||
					ok
 | 
			
		||||
				ok
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			keypress = func ogame,oself,nKey {
 | 
			
		||||
				if oGameState.gameresult = false
 | 
			
		||||
					oself {
 | 
			
		||||
						if nkey = key_space
 | 
			
		||||
							y -= 55
 | 
			
		||||
							oGameState.down = 60
 | 
			
		||||
							if y<=0 y=0 ok
 | 
			
		||||
						ok
 | 
			
		||||
					}
 | 
			
		||||
				ok
 | 
			
		||||
			}
 | 
			
		||||
			mouse = func ogame,oself,nType,aMouseList {
 | 
			
		||||
				if nType = GE_MOUSE_UP
 | 
			
		||||
					call oself.keypress(oGame,oSelf,Key_Space)
 | 
			
		||||
				ok
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		text {
 | 
			
		||||
			animate = false
 | 
			
		||||
			point = 400
 | 
			
		||||
			size = 30
 | 
			
		||||
			file = "fonts/pirulen.ttf"
 | 
			
		||||
			text = "Score : " + oGameState.score
 | 
			
		||||
			x = 500	y=10
 | 
			
		||||
			state = func oGame,oSelf {
 | 
			
		||||
				oSelf { text = "Score : " + oGameState.score }
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
func newmap aMap
 | 
			
		||||
	aV = [
 | 
			
		||||
	[1,1,3,0,0,2,1,1],
 | 
			
		||||
	[1,3,0,0,0,2,1,1],
 | 
			
		||||
	[1,1,1,3,0,2,1,1],
 | 
			
		||||
	[1,1,1,3,0,0,0,0],
 | 
			
		||||
	[0,0,0,0,2,1,1,1],
 | 
			
		||||
	[0,0,2,1,1,1,1,1],
 | 
			
		||||
	[0,0,0,2,1,1,1,1],
 | 
			
		||||
	[1,1,1,3,0,2,1,1],
 | 
			
		||||
	[1,1,1,1,1,3,0,0],
 | 
			
		||||
	[3,0,0,2,1,1,1,1],
 | 
			
		||||
	[3,0,0,2,3,0,0,2]
 | 
			
		||||
	]
 | 
			
		||||
	for x = 10 to 24 step 4
 | 
			
		||||
		aVar = aV[ (random(10)+1) ]
 | 
			
		||||
		for y = 1 to 8
 | 
			
		||||
			aMap[y][x] = aVar[y]
 | 
			
		||||
		next
 | 
			
		||||
	next
 | 
			
		||||
 | 
			
		||||
func checkwin ogame
 | 
			
		||||
	if oGameState.score = 3000
 | 
			
		||||
		oGameState.gameresult = true
 | 
			
		||||
		oGameState.playerwin = true
 | 
			
		||||
		oGame {
 | 
			
		||||
			text {
 | 
			
		||||
				point = 400
 | 
			
		||||
				size = 30
 | 
			
		||||
				nStep = 3
 | 
			
		||||
				file = "fonts/pirulen.ttf"
 | 
			
		||||
				text = "You Win !!!"
 | 
			
		||||
				x = 500	y=10
 | 
			
		||||
				state = func ogame,oself {
 | 
			
		||||
					if oself.y >= 400
 | 
			
		||||
						ogame.shutdown = true
 | 
			
		||||
						oGameState.Score = 0
 | 
			
		||||
					ok
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	ok
 | 
			
		||||
 | 
			
		||||
Class GameState
 | 
			
		||||
	down = 3
 | 
			
		||||
	gameresult = false
 | 
			
		||||
	Score = 0
 | 
			
		||||
	startplay=false
 | 
			
		||||
	lastcol = 0
 | 
			
		||||
	playerwin = false
 | 
			
		||||
							
								
								
									
										44
									
								
								samples/Ring/natural.ring
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								samples/Ring/natural.ring
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
New App
 | 
			
		||||
{
 | 
			
		||||
        I want window
 | 
			
		||||
        The window title = "hello world"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Class App
 | 
			
		||||
 | 
			
		||||
        func geti
 | 
			
		||||
                if nIwantwindow = 0
 | 
			
		||||
                        nIwantwindow++
 | 
			
		||||
                ok
 | 
			
		||||
 | 
			
		||||
        func getwant
 | 
			
		||||
                if nIwantwindow = 1
 | 
			
		||||
                        nIwantwindow++
 | 
			
		||||
                ok
 | 
			
		||||
 | 
			
		||||
        func getwindow
 | 
			
		||||
                if nIwantwindow = 2
 | 
			
		||||
                        nIwantwindow= 0
 | 
			
		||||
                        see "Instruction : I want window" + nl
 | 
			
		||||
                ok
 | 
			
		||||
                if nWindowTitle = 0
 | 
			
		||||
                        nWindowTitle++
 | 
			
		||||
                ok
 | 
			
		||||
 | 
			
		||||
        func settitle cValue
 | 
			
		||||
                if nWindowTitle = 1
 | 
			
		||||
                        nWindowTitle=0
 | 
			
		||||
                        see "Instruction : Window Title = " + cValue + nl
 | 
			
		||||
                ok
 | 
			
		||||
 | 
			
		||||
        private
 | 
			
		||||
 | 
			
		||||
                # Attributes for the instruction I want window
 | 
			
		||||
                        i want window
 | 
			
		||||
                        nIwantwindow = 0
 | 
			
		||||
                # Attributes for the instruction Window title
 | 
			
		||||
                # Here we don't define the window attribute again
 | 
			
		||||
                        title
 | 
			
		||||
                        nWindowTitle = 0
 | 
			
		||||
                # Keywords to ignore, just give them any value
 | 
			
		||||
                        the=0
 | 
			
		||||
							
								
								
									
										48
									
								
								samples/Ring/weblib.ring
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								samples/Ring/weblib.ring
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
# Sample : Using the Web Library
 | 
			
		||||
 | 
			
		||||
Load "weblib.ring"
 | 
			
		||||
Load "datalib.ring"
 | 
			
		||||
Import System.Web
 | 
			
		||||
 | 
			
		||||
website = "ex24.ring"
 | 
			
		||||
 | 
			
		||||
New SalaryController { Routing() }
 | 
			
		||||
 | 
			
		||||
Class SalaryModel from ModelBase
 | 
			
		||||
 | 
			
		||||
Class SalaryController From ControllerBase
 | 
			
		||||
 | 
			
		||||
Class SalaryView From ViewBase
 | 
			
		||||
 | 
			
		||||
  oLanguage = new SalaryLanguageEnglish
 | 
			
		||||
 | 
			
		||||
  Func AddFuncScript oPage,oController
 | 
			
		||||
        return   oPage.scriptfuncajax("myadd",oController.cMainURL+
 | 
			
		||||
                 oController.cOperation+"=add","mysubpage")
 | 
			
		||||
 | 
			
		||||
  Func FormViewContent oController,oTranslation,oPage
 | 
			
		||||
        return [
 | 
			
		||||
                        [ oTranslation.aColumnsTitles[2], "textbox", "name",
 | 
			
		||||
                          oController.oModel.Name, oPage.stylewidth("100%")    ],
 | 
			
		||||
                        [ oTranslation.aColumnsTitles[3], "textbox", "salary",
 | 
			
		||||
                          oController.oModel.Salary, oPage.stylewidth("50%") ]
 | 
			
		||||
                   ]
 | 
			
		||||
 | 
			
		||||
Class SalaryLanguageEnglish
 | 
			
		||||
  cTitle = "Salary Table"
 | 
			
		||||
  cBack = "back"
 | 
			
		||||
  aColumnsTitles = ["ID","Name","Salary"]
 | 
			
		||||
  cOptions = "Options"
 | 
			
		||||
  cSearch = "Search"
 | 
			
		||||
  comboitems = ["Select Option...","Edit","Delete"]
 | 
			
		||||
  cAddRecord = "Add Record"
 | 
			
		||||
  cEditRecord = "Edit Record"
 | 
			
		||||
  cRecordDeleted = "Record Deleted!"
 | 
			
		||||
  aMovePages = ["First","Prev","Next","Last"]
 | 
			
		||||
  cPage = "Page"
 | 
			
		||||
  cOf = "of"
 | 
			
		||||
  cRecordsCount = "Records Count"
 | 
			
		||||
  cSave = "Save"
 | 
			
		||||
  temp = new page
 | 
			
		||||
  cTextAlign = temp.StyleTextRight()
 | 
			
		||||
  cNoRecords = "No records!"
 | 
			
		||||
							
								
								
									
										174
									
								
								samples/Ring/weighthistory.ring
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										174
									
								
								samples/Ring/weighthistory.ring
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,174 @@
 | 
			
		||||
Load "guilib.ring"
 | 
			
		||||
 | 
			
		||||
MyApp = new qApp
 | 
			
		||||
{
 | 
			
		||||
  $ApplicationObject = "oApp"   # To be used when calling events
 | 
			
		||||
  oApp = new App
 | 
			
		||||
  exec()
 | 
			
		||||
  oApp.CloseDatabase()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class App
 | 
			
		||||
 | 
			
		||||
  cDir = currentdir() + "/"
 | 
			
		||||
  oCon
 | 
			
		||||
  aIDs = []
 | 
			
		||||
 | 
			
		||||
  win1 = new qWidget()
 | 
			
		||||
  {
 | 
			
		||||
        setWindowTitle("Weight History")
 | 
			
		||||
        resize(600,600)
 | 
			
		||||
        layoutButtons = new qhboxlayout()
 | 
			
		||||
        {
 | 
			
		||||
          label1 = new qLabel(win1) { setText("Weight") }
 | 
			
		||||
          text1 = new qlineedit(win1)
 | 
			
		||||
          btnAdd = new qpushbutton(win1) {
 | 
			
		||||
                  setText("Add")
 | 
			
		||||
                  setClickEvent($ApplicationObject+".AddWeight()")
 | 
			
		||||
          }
 | 
			
		||||
          btnDelete = new qpushbutton(win1) {
 | 
			
		||||
                  setText("Delete")
 | 
			
		||||
                  setClickEvent($ApplicationObject+".Deleteweight()")
 | 
			
		||||
          }
 | 
			
		||||
          addwidget(label1)
 | 
			
		||||
          addwidget(text1)
 | 
			
		||||
          addwidget(btnAdd)
 | 
			
		||||
          addwidget(btnDelete)
 | 
			
		||||
        }
 | 
			
		||||
        layoutData  = new qhboxlayout()
 | 
			
		||||
        {
 | 
			
		||||
          Table1 = new qTableWidget(win1) {
 | 
			
		||||
                setrowcount(0)
 | 
			
		||||
                setcolumncount(3)
 | 
			
		||||
                setselectionbehavior(QAbstractItemView_SelectRows)
 | 
			
		||||
                setHorizontalHeaderItem(0, new QTableWidgetItem("Date"))
 | 
			
		||||
                setHorizontalHeaderItem(1, new QTableWidgetItem("Time"))
 | 
			
		||||
                setHorizontalHeaderItem(2, new QTableWidgetItem("Weight"))
 | 
			
		||||
                setitemChangedEvent($ApplicationObject+".ItemChanged()")
 | 
			
		||||
                                   setAlternatingRowColors(true)
 | 
			
		||||
                                   horizontalHeader().setStyleSheet("color: blue")
 | 
			
		||||
                                   verticalHeader().setStyleSheet("color: red")
 | 
			
		||||
          }
 | 
			
		||||
          addWidget(Table1)
 | 
			
		||||
        }
 | 
			
		||||
        layoutClose = new qhboxlayout()
 | 
			
		||||
        {
 | 
			
		||||
          btnclose = new qpushbutton(win1) {
 | 
			
		||||
            setText("Close")
 | 
			
		||||
            setClickEvent("MyApp.Quit()")
 | 
			
		||||
          }
 | 
			
		||||
          addwidget(btnClose)
 | 
			
		||||
        }
 | 
			
		||||
        layoutMain = new qvboxlayout()
 | 
			
		||||
        {
 | 
			
		||||
          addlayout(layoutButtons)
 | 
			
		||||
          addLayout(LayoutData)
 | 
			
		||||
          addLayout(layoutClose)
 | 
			
		||||
        }
 | 
			
		||||
        setlayout(layoutMain)
 | 
			
		||||
        self.OpenDatabase()
 | 
			
		||||
        self.ShowRecords()
 | 
			
		||||
        show()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Func OpenDatabase
 | 
			
		||||
        lCreate = False
 | 
			
		||||
        if not fexists(cDir + "weighthistory.db")
 | 
			
		||||
          lCreate = True
 | 
			
		||||
        ok
 | 
			
		||||
        new QSqlDatabase() {
 | 
			
		||||
          this.oCon = addDatabase("QSQLITE") {
 | 
			
		||||
                setDatabaseName("weighthistory.db")
 | 
			
		||||
                Open()
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        if lCreate
 | 
			
		||||
          new QSqlQuery( ) {
 | 
			
		||||
                exec("create table weighthistory (id integer primary key,"+
 | 
			
		||||
                     " f_date varchar(10),"+
 | 
			
		||||
                     " f_time varchar(8), f_weight varchar(8) );")
 | 
			
		||||
                delete()
 | 
			
		||||
          }
 | 
			
		||||
        ok
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  Func CloseDatabase
 | 
			
		||||
        oCon.Close()
 | 
			
		||||
 | 
			
		||||
  Func AddWeight
 | 
			
		||||
        cWeight = text1.text()
 | 
			
		||||
        AddRecord(cWeight)
 | 
			
		||||
 | 
			
		||||
  Func DeleteWeight
 | 
			
		||||
        Table1 {
 | 
			
		||||
           nRow = CurrentRow()
 | 
			
		||||
          if nRow >= 0
 | 
			
		||||
                nID = this.aIDs[nROW+1]
 | 
			
		||||
                new QSqlQuery( ) {
 | 
			
		||||
                  exec("delete from weighthistory where id = " + nID )
 | 
			
		||||
                }
 | 
			
		||||
                Del(this.aIDs,nRow+1)
 | 
			
		||||
                removerow(nRow)
 | 
			
		||||
                selectrow(nRow)
 | 
			
		||||
          ok
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  Func AddRecord cWeight
 | 
			
		||||
        new QSqlQuery( ) {
 | 
			
		||||
          cStr = "insert into weighthistory (f_date,f_time,f_weight) values"+
 | 
			
		||||
          " ('%f1','%f2','%f3')"
 | 
			
		||||
          cDate = Date()
 | 
			
		||||
          cTime = Time()
 | 
			
		||||
          cStr = substr(cStr,"%f1",cDate)
 | 
			
		||||
          cStr = substr(cStr,"%f2",cTime)
 | 
			
		||||
          cStr = substr(cStr,"%f3",cWeight)
 | 
			
		||||
          exec(cStr)
 | 
			
		||||
          delete()
 | 
			
		||||
        }
 | 
			
		||||
        ShowRecords()
 | 
			
		||||
        Table1.selectrow(table1.rowcount()-1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  Func ShowRecords
 | 
			
		||||
        table1.setitemChangedEvent("")
 | 
			
		||||
        aIDs = []
 | 
			
		||||
        query = new QSqlQuery() {
 | 
			
		||||
          exec("select * from weighthistory")
 | 
			
		||||
          nRows = 0
 | 
			
		||||
          this.Table1.setrowcount(0)
 | 
			
		||||
          while movenext()
 | 
			
		||||
                this.table1 {
 | 
			
		||||
                  insertRow(nRows)
 | 
			
		||||
                  this.aIDs + query.value(0).tostring()
 | 
			
		||||
                  for x = 1 to 3
 | 
			
		||||
                        cStr = query.value(x).tostring()
 | 
			
		||||
                        item = new qTableWidgetItem(cStr)
 | 
			
		||||
                        setItem(nRows,x-1,item)
 | 
			
		||||
                  next
 | 
			
		||||
                }
 | 
			
		||||
                nRows++
 | 
			
		||||
          end
 | 
			
		||||
          delete()
 | 
			
		||||
        }
 | 
			
		||||
        table1.setitemChangedEvent($ApplicationObject+".ItemChanged()")
 | 
			
		||||
 | 
			
		||||
  Func ItemChanged
 | 
			
		||||
        nRow =  table1.currentrow()
 | 
			
		||||
        if nRow >= 0
 | 
			
		||||
          myitem = Table1.item(table1.currentrow(),0)
 | 
			
		||||
          cDate = myitem.text()
 | 
			
		||||
          myitem = Table1.item(table1.currentrow(),1)
 | 
			
		||||
          cTime = myitem.text()
 | 
			
		||||
          myitem = Table1.item(table1.currentrow(),2)
 | 
			
		||||
          cWeight = myitem.text()
 | 
			
		||||
          new QSqlQuery( ) {
 | 
			
		||||
                cStr = "update weighthistory set f_date ='%f1' , f_time = '%f2' , "+
 | 
			
		||||
                "f_weight ='%f3' where id = " +  this.aIDs[nROW+1]
 | 
			
		||||
                cStr = substr(cStr,"%f1",cDate)
 | 
			
		||||
                cStr = substr(cStr,"%f2",cTime)
 | 
			
		||||
                cStr = substr(cStr,"%f3",cWeight)
 | 
			
		||||
                exec(cStr)
 | 
			
		||||
                delete()
 | 
			
		||||
          }
 | 
			
		||||
        ok
 | 
			
		||||
							
								
								
									
										39
									
								
								samples/Type Language/builtin.tl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								samples/Type Language/builtin.tl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
// built-in types
 | 
			
		||||
int#a8509bda ? = Int;
 | 
			
		||||
long ? = Long;
 | 
			
		||||
double ? = Double;
 | 
			
		||||
string ? = String;
 | 
			
		||||
null = Null;
 | 
			
		||||
 | 
			
		||||
vector {t:Type} # [ t ] = Vector t;
 | 
			
		||||
coupleInt {alpha:Type} int alpha = CoupleInt<alpha>;
 | 
			
		||||
coupleStr {gamma:Type} string gamma = CoupleStr gamma;
 | 
			
		||||
 | 
			
		||||
/* The name of the type variable is irrelevant: "gamma" could be replaced with "alpha"
 | 
			
		||||
  However, the combinator number will depend on the specific choice. */
 | 
			
		||||
 | 
			
		||||
intHash {alpha:Type} vector<coupleInt<alpha>> = IntHash<alpha>;
 | 
			
		||||
strHash {alpha:Type} (vector (coupleStr alpha)) = StrHash alpha;
 | 
			
		||||
intSortedHash {alpha:Type} intHash<alpha> = IntSortedHash<alpha>;
 | 
			
		||||
strSortedHash {alpha:Type} (strHash alpha) = StrSortedHash alpha;
 | 
			
		||||
 | 
			
		||||
// custom types
 | 
			
		||||
pair x:Object y:Object = Pair;
 | 
			
		||||
triple x:Object y:Object z:Object = Triple;
 | 
			
		||||
 | 
			
		||||
user#d23c81a3 id:int first_name:string last_name:string = User;
 | 
			
		||||
no_user#c67599d1 id:int = User;
 | 
			
		||||
group id:int title:string last_name:string = Group;
 | 
			
		||||
no_group = Group;
 | 
			
		||||
 | 
			
		||||
---functions---
 | 
			
		||||
 | 
			
		||||
// Maybe some built-in arithmetic functions; inverse quotes make "identifiers" out of arbitrary non-alphanumeric strings
 | 
			
		||||
`+` Int Int = Int;
 | 
			
		||||
`-` Int Int = Int;
 | 
			
		||||
`+` Double Double = Double;
 | 
			
		||||
// ...
 | 
			
		||||
 | 
			
		||||
// API functions (aka RPC functions)
 | 
			
		||||
getUser#b0f732d5 int = User;
 | 
			
		||||
getUsers#2d84d5f5 (Vector int) = Vector User;
 | 
			
		||||
							
								
								
									
										1102
									
								
								samples/Type Language/scheme.tl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1102
									
								
								samples/Type Language/scheme.tl
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										14
									
								
								samples/WebAssembly/add.wat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								samples/WebAssembly/add.wat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
(module
 | 
			
		||||
  (import "env" "printInt" (func $printInt (param i32)))
 | 
			
		||||
  (func $add (param $lhs i32) (param $rhs i32) (result i32)
 | 
			
		||||
    get_local $lhs
 | 
			
		||||
    get_local $rhs
 | 
			
		||||
    i32.add
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  (func $main
 | 
			
		||||
    (call $printInt
 | 
			
		||||
      (call $add (i32.const 9) (i32.const 8))))
 | 
			
		||||
 | 
			
		||||
  (export "main" (func $main))
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										41
									
								
								samples/WebAssembly/fibonacci.wat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								samples/WebAssembly/fibonacci.wat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
(module
 | 
			
		||||
  (import "env" "printInt" (func $printInt (param i32)))
 | 
			
		||||
  (import "env" "print" (func $print (param i32 i32)))
 | 
			
		||||
 | 
			
		||||
  (memory $memory 1)
 | 
			
		||||
  (data (i32.const 0) "\n")
 | 
			
		||||
  (data (i32.const 1) " ")
 | 
			
		||||
 | 
			
		||||
  (func $endl
 | 
			
		||||
    (call $print (i32.const 0) (i32.const 1)))
 | 
			
		||||
  (func $space
 | 
			
		||||
    (call $print (i32.const 1) (i32.const 1)))
 | 
			
		||||
 | 
			
		||||
  (func $fibonacci_rec (param $a i32) (param $b i32) (param $n i32) (result i32)
 | 
			
		||||
    (if (i32.eqz (get_local $n)) (return (get_local $a)))
 | 
			
		||||
    (call $printInt (get_local $b))
 | 
			
		||||
    (call $space)
 | 
			
		||||
    (set_local $a (i32.add (get_local $a) (get_local $b)))
 | 
			
		||||
    (call $fibonacci_rec (get_local $b) (get_local $a) (i32.sub (get_local $n) (i32.const 1)))
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  (func $fibonacci_iter (param $a i32) (param $b i32) (param $n i32) (result i32)
 | 
			
		||||
    (loop $fi
 | 
			
		||||
      (if (i32.eqz (get_local $n)) (return (get_local $a)))
 | 
			
		||||
      (call $printInt (get_local $b))
 | 
			
		||||
      (call $space)
 | 
			
		||||
      (set_local $b (i32.add (get_local $a) (get_local $b)))
 | 
			
		||||
      (set_local $a (i32.sub (get_local $b) (get_local $a)))
 | 
			
		||||
      (set_local $n (i32.sub (get_local $n) (i32.const 1)))
 | 
			
		||||
      (br $fi))
 | 
			
		||||
    (get_local $b))
 | 
			
		||||
 | 
			
		||||
  (func $main
 | 
			
		||||
    (drop (call $fibonacci_rec (i32.const 0) (i32.const 1) (i32.const 9)))
 | 
			
		||||
    (call $endl)
 | 
			
		||||
    (drop (call $fibonacci_iter (i32.const 0) (i32.const 1) (i32.const 9))))
 | 
			
		||||
 | 
			
		||||
  (export "main" (func $main))
 | 
			
		||||
  (export "memory" (memory $memory))
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										48
									
								
								samples/WebAssembly/imported-min.wast
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								samples/WebAssembly/imported-min.wast
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
(module
 | 
			
		||||
  (memory 256 256)
 | 
			
		||||
  (data (i32.const 10) "waka waka waka waka waka")
 | 
			
		||||
  ;; stack imports are special
 | 
			
		||||
  (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32))
 | 
			
		||||
  (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32))
 | 
			
		||||
  ;; other imports must not be touched!
 | 
			
		||||
  (import "env" "tempDoublePtr" (global $tempDoublePtr i32))
 | 
			
		||||
  (export "test1" $test1)
 | 
			
		||||
  (export "test2" $test2)
 | 
			
		||||
  (export "test3" $test3)
 | 
			
		||||
  ;; ok to modify a global, if we keep it the same value
 | 
			
		||||
  (global $mine (mut i32) (i32.const 1))
 | 
			
		||||
  ;; stack imports are ok to use. their uses are the same as other
 | 
			
		||||
  ;; globals - must keep the same value (which means, unwind the stack)
 | 
			
		||||
  ;; here the global names are "minified"
 | 
			
		||||
  (global $global0 (mut i32) (get_global $STACKTOP$asm2wasm$import))
 | 
			
		||||
  (global $global1 (mut i32) (get_global $STACK_MAX$asm2wasm$import))
 | 
			
		||||
  ;; a global initialized by an import, so bad, but ok if not used
 | 
			
		||||
  (global $do-not-use (mut i32) (get_global $tempDoublePtr))
 | 
			
		||||
  (func $test1
 | 
			
		||||
    (local $temp i32)
 | 
			
		||||
    (set_global $mine (i32.const 1))
 | 
			
		||||
    (set_local $temp (get_global $global0))
 | 
			
		||||
    (set_global $global0 (i32.const 1337)) ;; bad
 | 
			
		||||
    (set_global $global0 (get_local $temp)) ;; save us
 | 
			
		||||
    (set_global $global1 (i32.const 913370)) ;; bad
 | 
			
		||||
    (set_global $global1 (get_local $temp)) ;; save us
 | 
			
		||||
    ;; use the stack memory
 | 
			
		||||
    (i32.store (get_local $temp) (i32.const 1337))
 | 
			
		||||
    (if
 | 
			
		||||
      (i32.ne
 | 
			
		||||
        (i32.load (get_local $temp))
 | 
			
		||||
        (i32.const 1337)
 | 
			
		||||
      )
 | 
			
		||||
      (unreachable) ;; they should be equal, never get here
 | 
			
		||||
    )
 | 
			
		||||
    ;; finally, do a valid store
 | 
			
		||||
    (i32.store8 (i32.const 12) (i32.const 115))
 | 
			
		||||
  )
 | 
			
		||||
  (func $test2
 | 
			
		||||
    (set_global $tempDoublePtr (i32.const 1)) ;; bad!
 | 
			
		||||
    (i32.store8 (i32.const 13) (i32.const 115))
 | 
			
		||||
  )
 | 
			
		||||
  (func $test3
 | 
			
		||||
    (i32.store8 (i32.const 14) (i32.const 115))
 | 
			
		||||
  )
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										164
									
								
								samples/WebAssembly/local-cse.wast
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								samples/WebAssembly/local-cse.wast
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
(module
 | 
			
		||||
  (memory 100 100)
 | 
			
		||||
  (func $basics
 | 
			
		||||
    (local $x i32)
 | 
			
		||||
    (local $y i32)
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add (i32.const 1) (i32.const 2))
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add (i32.const 1) (i32.const 2))
 | 
			
		||||
    )
 | 
			
		||||
    (if (i32.const 0) (nop))
 | 
			
		||||
    (drop ;; we can't do this yet, non-linear
 | 
			
		||||
      (i32.add (i32.const 1) (i32.const 2))
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add (get_local $x) (get_local $y))
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add (get_local $x) (get_local $y))
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add (get_local $x) (get_local $y))
 | 
			
		||||
    )
 | 
			
		||||
    (call $basics) ;; side effects, but no matter for our locals
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add (get_local $x) (get_local $y))
 | 
			
		||||
    )
 | 
			
		||||
    (set_local $x (i32.const 100))
 | 
			
		||||
    (drop ;; x was changed!
 | 
			
		||||
      (i32.add (get_local $x) (get_local $y))
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
  (func $recursive1
 | 
			
		||||
    (local $x i32)
 | 
			
		||||
    (local $y i32)
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add
 | 
			
		||||
        (i32.const 1)
 | 
			
		||||
        (i32.add
 | 
			
		||||
          (i32.const 2)
 | 
			
		||||
          (i32.const 3)
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add
 | 
			
		||||
        (i32.const 1)
 | 
			
		||||
        (i32.add
 | 
			
		||||
          (i32.const 2)
 | 
			
		||||
          (i32.const 3)
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add
 | 
			
		||||
        (i32.const 2)
 | 
			
		||||
        (i32.const 3)
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
  (func $recursive2
 | 
			
		||||
    (local $x i32)
 | 
			
		||||
    (local $y i32)
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add
 | 
			
		||||
        (i32.const 1)
 | 
			
		||||
        (i32.add
 | 
			
		||||
          (i32.const 2)
 | 
			
		||||
          (i32.const 3)
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add
 | 
			
		||||
        (i32.const 2)
 | 
			
		||||
        (i32.const 3)
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add
 | 
			
		||||
        (i32.const 1)
 | 
			
		||||
        (i32.add
 | 
			
		||||
          (i32.const 2)
 | 
			
		||||
          (i32.const 3)
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
  (func $self
 | 
			
		||||
    (local $x i32)
 | 
			
		||||
    (local $y i32)
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add
 | 
			
		||||
        (i32.add
 | 
			
		||||
          (i32.const 2)
 | 
			
		||||
          (i32.const 3)
 | 
			
		||||
        )
 | 
			
		||||
        (i32.add
 | 
			
		||||
          (i32.const 2)
 | 
			
		||||
          (i32.const 3)
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.add
 | 
			
		||||
        (i32.const 2)
 | 
			
		||||
        (i32.const 3)
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
  (func $loads
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.load (i32.const 10))
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (i32.load (i32.const 10)) ;; implicit traps, sad
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
  (func $8 (param $var$0 i32) (result i32)
 | 
			
		||||
    (local $var$1 i32)
 | 
			
		||||
    (local $var$2 i32)
 | 
			
		||||
    (local $var$3 i32)
 | 
			
		||||
    (block $label$0 i32
 | 
			
		||||
      (i32.store
 | 
			
		||||
        (tee_local $var$2
 | 
			
		||||
          (i32.add
 | 
			
		||||
            (get_local $var$1)
 | 
			
		||||
            (i32.const 4)
 | 
			
		||||
          )
 | 
			
		||||
        )
 | 
			
		||||
        (i32.and
 | 
			
		||||
          (i32.load
 | 
			
		||||
            (get_local $var$2)
 | 
			
		||||
          )
 | 
			
		||||
          (i32.xor
 | 
			
		||||
            (tee_local $var$2
 | 
			
		||||
              (i32.const 74)
 | 
			
		||||
            )
 | 
			
		||||
            (i32.const -1)
 | 
			
		||||
          )
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
      (i32.store
 | 
			
		||||
        (tee_local $var$1
 | 
			
		||||
          (i32.add
 | 
			
		||||
            (get_local $var$1)
 | 
			
		||||
            (i32.const 4)
 | 
			
		||||
          )
 | 
			
		||||
        )
 | 
			
		||||
        (i32.or
 | 
			
		||||
          (i32.load
 | 
			
		||||
            (get_local $var$1)
 | 
			
		||||
          )
 | 
			
		||||
          (i32.and
 | 
			
		||||
            (get_local $var$2)
 | 
			
		||||
            (i32.const 8)
 | 
			
		||||
          )
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
      (i32.const 0)
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										23
									
								
								samples/WebAssembly/print.wat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								samples/WebAssembly/print.wat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
(module
 | 
			
		||||
  (import "env" "printInt" (func $printInt (param i32)))
 | 
			
		||||
  (import "env" "printFloat" (func $printFloat (param f32)))
 | 
			
		||||
  (import "env" "print" (func $print (param i32 i32)))
 | 
			
		||||
 | 
			
		||||
  (memory $memory 1)
 | 
			
		||||
  (data (i32.const 0) "\n")
 | 
			
		||||
  (data (i32.const 1) "Hello World!")
 | 
			
		||||
 | 
			
		||||
  (func $endl
 | 
			
		||||
    (call $print (i32.const 0) (i32.const 1)))
 | 
			
		||||
 | 
			
		||||
  (func $main
 | 
			
		||||
    (call $printInt (i32.const 9))
 | 
			
		||||
    (call $endl)
 | 
			
		||||
    (call $printFloat (f32.const 6.28))
 | 
			
		||||
    (call $endl)
 | 
			
		||||
    (call $print (i32.const 1) (i32.const 12))
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
  (export "main" (func $main))
 | 
			
		||||
  (export "memory" (memory $memory))
 | 
			
		||||
)
 | 
			
		||||
@@ -0,0 +1,81 @@
 | 
			
		||||
(module
 | 
			
		||||
  (memory 256 256)
 | 
			
		||||
  (type $0 (func (param i32)))
 | 
			
		||||
  (type $1 (func))
 | 
			
		||||
  (type $2 (func (result i32)))
 | 
			
		||||
  (func $b14 (type $2)
 | 
			
		||||
    (drop
 | 
			
		||||
      (if i32 ;; with shrinking, this can become a select
 | 
			
		||||
        (i32.const 1)
 | 
			
		||||
        (block $block1 i32
 | 
			
		||||
          (i32.const 12)
 | 
			
		||||
        )
 | 
			
		||||
        (block $block3 i32
 | 
			
		||||
          (i32.const 27)
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (if i32
 | 
			
		||||
        (i32.const 1)
 | 
			
		||||
        (i32.load (i32.const 10)) ;; load may have side effects, unless ignored
 | 
			
		||||
        (i32.const 27)
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (if i32
 | 
			
		||||
        (i32.const 1)
 | 
			
		||||
        (i32.rem_s (i32.const 11) (i32.const 12)) ;; rem may have side effects, unless ignored
 | 
			
		||||
        (i32.const 27)
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    (drop
 | 
			
		||||
      (if i32
 | 
			
		||||
        (i32.const 1)
 | 
			
		||||
        (i32.trunc_u/f64 (f64.const 12.34)) ;; float to int may have side effects, unless ignored
 | 
			
		||||
        (i32.const 27)
 | 
			
		||||
      )
 | 
			
		||||
    )
 | 
			
		||||
    (i32.const 0)
 | 
			
		||||
  )
 | 
			
		||||
  (func $join-br_ifs
 | 
			
		||||
    (block $out
 | 
			
		||||
      (br_if $out (i32.const 1))
 | 
			
		||||
      (br_if $out (i32.const 2))
 | 
			
		||||
      (br_if $out (i32.const 3))
 | 
			
		||||
    )
 | 
			
		||||
    (block $out2
 | 
			
		||||
      (block $out3
 | 
			
		||||
        (br_if $out2 (i32.const 1))
 | 
			
		||||
        (br_if $out3 (i32.const 2))
 | 
			
		||||
        (br_if $out2 (i32.const 3))
 | 
			
		||||
      )
 | 
			
		||||
      (unreachable)
 | 
			
		||||
    )
 | 
			
		||||
    (block $out4
 | 
			
		||||
      (block $out5
 | 
			
		||||
        (br_if $out4 (i32.const 1))
 | 
			
		||||
        (br_if $out5 (i32.const 2))
 | 
			
		||||
        (br_if $out5 (i32.const 3))
 | 
			
		||||
      )
 | 
			
		||||
      (unreachable)
 | 
			
		||||
    )
 | 
			
		||||
    (block $out6
 | 
			
		||||
      (block $out7
 | 
			
		||||
        (br_if $out6 (i32.const 1))
 | 
			
		||||
        (br_if $out6 (i32.const 2))
 | 
			
		||||
        (br_if $out7 (i32.const 3))
 | 
			
		||||
      )
 | 
			
		||||
      (unreachable)
 | 
			
		||||
    )
 | 
			
		||||
    (block $out8
 | 
			
		||||
      (br_if $out8 (call $b14)) ;; side effect
 | 
			
		||||
      (br_if $out8 (i32.const 0))
 | 
			
		||||
    )
 | 
			
		||||
    (block $out8
 | 
			
		||||
      (br_if $out8 (i32.const 1))
 | 
			
		||||
      (br_if $out8 (call $b14)) ;; side effect
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								samples/XML/xquery-tutorial.xspec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								samples/XML/xquery-tutorial.xspec
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<x:description xmlns:x="http://www.jenitennison.com/xslt/xspec" 
 | 
			
		||||
               xmlns:functx="http://www.functx.com"
 | 
			
		||||
               query="http://www.functx.com" 
 | 
			
		||||
               query-at="xquery-tutorial.xq">
 | 
			
		||||
 | 
			
		||||
  <x:scenario label="Calling function capitalize-first">
 | 
			
		||||
    <x:call function="functx:capitalize-first">
 | 
			
		||||
      <x:param select="'hello'"/>
 | 
			
		||||
    </x:call>
 | 
			
		||||
 | 
			
		||||
    <x:expect label="should capitalize the first character of the string" select="'Hello'"/>
 | 
			
		||||
 | 
			
		||||
  </x:scenario>
 | 
			
		||||
 | 
			
		||||
</x:description>
 | 
			
		||||
							
								
								
									
										2
									
								
								test/fixtures/Shell/ash-env
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								test/fixtures/Shell/ash-env
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/usr/bin/env ash
 | 
			
		||||
echo "ash"
 | 
			
		||||
							
								
								
									
										2
									
								
								test/fixtures/Shell/dash-env
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								test/fixtures/Shell/dash-env
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/usr/bin/env dash
 | 
			
		||||
echo "dash"
 | 
			
		||||
							
								
								
									
										2
									
								
								test/fixtures/Shell/ksh-env
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								test/fixtures/Shell/ksh-env
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/usr/bin/env ksh
 | 
			
		||||
echo "ksh"
 | 
			
		||||
							
								
								
									
										2
									
								
								test/fixtures/Shell/mksh
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								test/fixtures/Shell/mksh
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/bin/mksh
 | 
			
		||||
echo "mksh"
 | 
			
		||||
							
								
								
									
										2
									
								
								test/fixtures/Shell/pdksh-env
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								test/fixtures/Shell/pdksh-env
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/usr/bin/env pdksh
 | 
			
		||||
echo "pdksh"
 | 
			
		||||
@@ -6,7 +6,6 @@ class TestGrammars < Minitest::Test
 | 
			
		||||
  # List of projects that are allowed without licenses
 | 
			
		||||
  PROJECT_WHITELIST = [
 | 
			
		||||
    "vendor/grammars/Sublime-Lasso",
 | 
			
		||||
    "vendor/grammars/sublime-spintools",
 | 
			
		||||
    "vendor/grammars/blitzmax"
 | 
			
		||||
  ].freeze
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -212,20 +212,20 @@ class TestHeuristcs < Minitest::Test
 | 
			
		||||
    })
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Candidate languages = ["Perl", "Perl6", "Prolog"]
 | 
			
		||||
  # Candidate languages = ["Perl", "Perl 6", "Prolog"]
 | 
			
		||||
  def test_pl_prolog_perl_by_heuristics
 | 
			
		||||
    assert_heuristics({
 | 
			
		||||
      "Prolog" => all_fixtures("Prolog", "*.pl"),
 | 
			
		||||
      "Perl" => ["Perl/oo1.pl", "Perl/oo2.pl", "Perl/oo3.pl", "Perl/fib.pl", "Perl/use5.pl"],
 | 
			
		||||
      "Perl6" => all_fixtures("Perl6", "*.pl")
 | 
			
		||||
      "Perl 6" => all_fixtures("Perl 6", "*.pl")
 | 
			
		||||
    })
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Candidate languages = ["Perl", "Perl6"]
 | 
			
		||||
  # Candidate languages = ["Perl", "Perl 6"]
 | 
			
		||||
  def test_pm_perl_by_heuristics
 | 
			
		||||
    assert_heuristics({
 | 
			
		||||
      "Perl" => all_fixtures("Perl", "*.pm"),
 | 
			
		||||
      "Perl6" => all_fixtures("Perl6", "*.pm")
 | 
			
		||||
      "Perl 6" => all_fixtures("Perl 6", "*.pm")
 | 
			
		||||
    })
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@@ -279,13 +279,13 @@ class TestHeuristcs < Minitest::Test
 | 
			
		||||
    })
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Candidate languages = ["Perl", "Perl6"]
 | 
			
		||||
  # Candidate languages = ["Perl", "Perl 6"]
 | 
			
		||||
  def test_t_perl_by_heuristics
 | 
			
		||||
    assert_heuristics({
 | 
			
		||||
      "Perl" => all_fixtures("Perl", "*.t"),
 | 
			
		||||
      "Perl6" => ["Perl6/01-dash-uppercase-i.t", "Perl6/01-parse.t", "Perl6/advent2009-day16.t",
 | 
			
		||||
                  "Perl6/basic-open.t", "Perl6/calendar.t", "Perl6/for.t", "Perl6/hash.t",
 | 
			
		||||
                  "Perl6/listquote-whitespace.t"]
 | 
			
		||||
      "Perl 6" => ["Perl 6/01-dash-uppercase-i.t", "Perl 6/01-parse.t", "Perl 6/advent2009-day16.t",
 | 
			
		||||
                   "Perl 6/basic-open.t", "Perl 6/calendar.t", "Perl 6/for.t", "Perl 6/hash.t",
 | 
			
		||||
                   "Perl 6/listquote-whitespace.t"]
 | 
			
		||||
    })
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,8 +16,14 @@ class TestMD5 < Minitest::Test
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_hexdigest_integer
 | 
			
		||||
    assert_equal "7605ec17fd7fd213fdcd23cac302cbb4", MD5.hexdigest(1)
 | 
			
		||||
    assert_equal "097c311a46d330e4e119ba2b1dc0f9a5", MD5.hexdigest(2)
 | 
			
		||||
    # Ruby 2.4.0 merged Bignum and Fixnum into Integer which means we get different digests
 | 
			
		||||
    if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.4.0")
 | 
			
		||||
      assert_equal "eb70b9dc51f70acc91b4d984ef81570e", MD5.hexdigest(1)
 | 
			
		||||
      assert_equal "41f415a79361937c28fff32c2c6d056d", MD5.hexdigest(2)
 | 
			
		||||
    else
 | 
			
		||||
      assert_equal "7605ec17fd7fd213fdcd23cac302cbb4", MD5.hexdigest(1)
 | 
			
		||||
      assert_equal "097c311a46d330e4e119ba2b1dc0f9a5", MD5.hexdigest(2)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    refute_equal MD5.hexdigest("1"), MD5.hexdigest(1)
 | 
			
		||||
  end
 | 
			
		||||
@@ -38,16 +44,30 @@ class TestMD5 < Minitest::Test
 | 
			
		||||
 | 
			
		||||
  def test_hexdigest_array
 | 
			
		||||
    assert_equal "4410ec34d9e6c1a68100ca0ce033fb17", MD5.hexdigest([])
 | 
			
		||||
    assert_equal "759f28c1d0c20c22e79c91d339855d95", MD5.hexdigest([1])
 | 
			
		||||
    assert_equal "9efe07b352dd94cd1cdc9d1a8d054f8f", MD5.hexdigest([1, 2])
 | 
			
		||||
    assert_equal "60b1ef7201404f20c3d12f47499c3a1f", MD5.hexdigest([1, 2, 3])
 | 
			
		||||
    assert_equal "2f82cdc166616208077ff1dd0a8faeff", MD5.hexdigest([1, 2, [3]])
 | 
			
		||||
    # Ruby 2.4.0 merged Bignum and Fixnum into Integer which means we get different digests
 | 
			
		||||
    if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.4.0")
 | 
			
		||||
      assert_equal "7c6285c53bb82c9b58c0c28329f8d8f4", MD5.hexdigest([1])
 | 
			
		||||
      assert_equal "fdfbe9b65f652acb927b50ccba9f3270", MD5.hexdigest([1, 2])
 | 
			
		||||
      assert_equal "ba631f6acc179689c45be854705c08c9", MD5.hexdigest([1, 2, 3])
 | 
			
		||||
      assert_equal "d6eed665798037ebccaa2cc54a37ce93", MD5.hexdigest([1, 2, [3]])
 | 
			
		||||
    else
 | 
			
		||||
      assert_equal "759f28c1d0c20c22e79c91d339855d95", MD5.hexdigest([1])
 | 
			
		||||
      assert_equal "9efe07b352dd94cd1cdc9d1a8d054f8f", MD5.hexdigest([1, 2])
 | 
			
		||||
      assert_equal "60b1ef7201404f20c3d12f47499c3a1f", MD5.hexdigest([1, 2, 3])
 | 
			
		||||
      assert_equal "2f82cdc166616208077ff1dd0a8faeff", MD5.hexdigest([1, 2, [3]])
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_hexdigest_hash
 | 
			
		||||
    assert_equal "fae8a9257e154175da4193dbf6552ef6", MD5.hexdigest({})
 | 
			
		||||
    assert_equal "868ee214faf277829a85667cf332749f", MD5.hexdigest({:a => 1})
 | 
			
		||||
    assert_equal "fa9df957c2b26de6fcca9d062ea8701e", MD5.hexdigest({:b => 2})
 | 
			
		||||
    # Ruby 2.4.0 merged Bignum and Fixnum into Integer which means we get different digests
 | 
			
		||||
    if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.4.0")
 | 
			
		||||
      assert_equal "edfd4aed358b4d346b7eb7adf0fd21d1", MD5.hexdigest({:a => 1})
 | 
			
		||||
      assert_equal "39bb725ffe02392759e0a075001e6119", MD5.hexdigest({:b => 2})
 | 
			
		||||
    else
 | 
			
		||||
      assert_equal "868ee214faf277829a85667cf332749f", MD5.hexdigest({:a => 1})
 | 
			
		||||
      assert_equal "fa9df957c2b26de6fcca9d062ea8701e", MD5.hexdigest({:b => 2})
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    refute_equal MD5.hexdigest([:b, 2]), MD5.hexdigest({:b => 2})
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/CodeMirror
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/CodeMirror
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/CodeMirror updated: 5600b5ed14...99c8d8b902
									
								
							
							
								
								
									
										6
									
								
								vendor/README.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/README.md
									
									
									
									
										vendored
									
									
								
							@@ -107,6 +107,7 @@ This is a list of grammars that Linguist selects to provide syntax highlighting
 | 
			
		||||
- **F#:** [fsprojects/atom-fsharp](https://github.com/fsprojects/atom-fsharp)
 | 
			
		||||
- **Factor:** [slavapestov/factor](https://github.com/slavapestov/factor)
 | 
			
		||||
- **Fancy:** [fancy-lang/fancy-tmbundle](https://github.com/fancy-lang/fancy-tmbundle)
 | 
			
		||||
- **Fantom** [rkoeninger/sublime-fantom](https://github.com/rkoeninger/sublime-fantom)
 | 
			
		||||
- **fish:** [l15n/fish-tmbundle](https://github.com/l15n/fish-tmbundle)
 | 
			
		||||
- **Forth:** [textmate/forth.tmbundle](https://github.com/textmate/forth.tmbundle)
 | 
			
		||||
- **Fortran:** [textmate/fortran.tmbundle](https://github.com/textmate/fortran.tmbundle)
 | 
			
		||||
@@ -249,13 +250,14 @@ This is a list of grammars that Linguist selects to provide syntax highlighting
 | 
			
		||||
- **Ox:** [andreashetland/sublime-text-ox](https://github.com/andreashetland/sublime-text-ox)
 | 
			
		||||
- **Oz:** [eregon/oz-tmbundle](https://github.com/eregon/oz-tmbundle)
 | 
			
		||||
- **P4:** [TakeshiTseng/atom-language-p4](https://github.com/TakeshiTseng/atom-language-p4)
 | 
			
		||||
- **Pan:** [quattor/language-pan](https://github.com/quattor/language-pan)
 | 
			
		||||
- **Papyrus:** [Kapiainen/SublimePapyrus](https://github.com/Kapiainen/SublimePapyrus)
 | 
			
		||||
- **Parrot Internal Representation:** [textmate/parrot.tmbundle](https://github.com/textmate/parrot.tmbundle)
 | 
			
		||||
- **Pascal:** [textmate/pascal.tmbundle](https://github.com/textmate/pascal.tmbundle)
 | 
			
		||||
- **PAWN:** [Southclaw/pawn-sublime-language](https://github.com/Southclaw/pawn-sublime-language)
 | 
			
		||||
- **Pep8:** [R4PaSs/Sublime-Pep8](https://github.com/R4PaSs/Sublime-Pep8)
 | 
			
		||||
- **Perl:** [textmate/perl.tmbundle](https://github.com/textmate/perl.tmbundle)
 | 
			
		||||
- **Perl6:** [perl6/atom-language-perl6](https://github.com/perl6/atom-language-perl6)
 | 
			
		||||
- **Perl 6:** [perl6/atom-language-perl6](https://github.com/perl6/atom-language-perl6)
 | 
			
		||||
- **PHP:** [textmate/php.tmbundle](https://github.com/textmate/php.tmbundle)
 | 
			
		||||
- **Pic:** [Alhadis/language-roff](https://github.com/Alhadis/language-roff)
 | 
			
		||||
- **PicoLisp:** [textmate/lisp.tmbundle](https://github.com/textmate/lisp.tmbundle)
 | 
			
		||||
@@ -351,6 +353,7 @@ This is a list of grammars that Linguist selects to provide syntax highlighting
 | 
			
		||||
- **Turtle:** [peta/turtle.tmbundle](https://github.com/peta/turtle.tmbundle)
 | 
			
		||||
- **Twig:** [Anomareh/PHP-Twig.tmbundle](https://github.com/Anomareh/PHP-Twig.tmbundle)
 | 
			
		||||
- **TXL:** [MikeHoffert/Sublime-Text-TXL-syntax](https://github.com/MikeHoffert/Sublime-Text-TXL-syntax)
 | 
			
		||||
- **Type Language:** [goodmind/language-typelanguage](https://github.com/goodmind/language-typelanguage)
 | 
			
		||||
- **TypeScript:** [Microsoft/TypeScript-Sublime-Plugin](https://github.com/Microsoft/TypeScript-Sublime-Plugin)
 | 
			
		||||
- **Unified Parallel C:** [textmate/c.tmbundle](https://github.com/textmate/c.tmbundle)
 | 
			
		||||
- **Unity3D Asset:** [atom/language-yaml](https://github.com/atom/language-yaml)
 | 
			
		||||
@@ -369,6 +372,7 @@ This is a list of grammars that Linguist selects to provide syntax highlighting
 | 
			
		||||
- **Wavefront Material:** [Alhadis/language-wavefront](https://github.com/Alhadis/language-wavefront)
 | 
			
		||||
- **Wavefront Object:** [Alhadis/language-wavefront](https://github.com/Alhadis/language-wavefront)
 | 
			
		||||
- **Web Ontology Language:** [textmate/xml.tmbundle](https://github.com/textmate/xml.tmbundle)
 | 
			
		||||
- **WebAssembly:** [Alhadis/language-webassembly](https://github.com/Alhadis/language-webassembly)
 | 
			
		||||
- **WebIDL:** [andik/IDL-Syntax](https://github.com/andik/IDL-Syntax)
 | 
			
		||||
- **wisp:** [atom/language-clojure](https://github.com/atom/language-clojure)
 | 
			
		||||
- **World of Warcraft Addon Data:** [nebularg/language-toc-wow](https://github.com/nebularg/language-toc-wow)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/grammars/Elm
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Elm
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Elm updated: 556f669c79...581b9e6f5b
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Handlebars
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Handlebars
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Handlebars updated: 63c28f7aa9...fa350d393d
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/LiveScript.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/LiveScript.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/LiveScript.tmbundle updated: 05dc46397a...2575013851
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/MagicPython
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/MagicPython
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/MagicPython updated: 68c88ccfc2...ffab3f1ec0
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/NimLime
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/NimLime
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/NimLime updated: 61d59cb352...bf48175e71
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Sublime-SQF-Language
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Sublime-SQF-Language
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Sublime-SQF-Language updated: 5f7dd13f59...ee30a860e0
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/SublimeGDB
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/SublimeGDB
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/SublimeGDB updated: c39ee600ba...4e968ddd57
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Terraform.tmLanguage
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Terraform.tmLanguage
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Terraform.tmLanguage updated: 0594ba9ec7...3ca5d5d3de
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/antlr.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/antlr.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/antlr.tmbundle updated: 8cb9b53107...a1bcd15856
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/api-blueprint-sublime-plugin
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/api-blueprint-sublime-plugin
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/api-blueprint-sublime-plugin updated: 076ee9bd62...cd4b76c3e4
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/atom-language-clean
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/atom-language-clean
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/atom-language-clean updated: 15502ecb30...82829c50aa
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/atom-language-perl6
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/atom-language-perl6
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/atom-language-perl6 updated: 2519ab86da...611c924d0f
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/atom-language-rust
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/atom-language-rust
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/atom-language-rust updated: c24ef01b9f...0a5774f20d
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/c.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/c.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/c.tmbundle updated: 9aa3658822...6cd89588c9
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/capnproto.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/capnproto.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/capnproto.tmbundle updated: 2f661649a3...9fab42eb8a
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/chapel-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/chapel-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/chapel-tmbundle updated: d6c9e926e7...d1f8d3555b
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/cython
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/cython
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/cython updated: a816e2c05d...43a86f0e97
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/d.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/d.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/d.tmbundle updated: 8017dc8419...927f34339a
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/dartlang
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/dartlang
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/dartlang updated: b2d27b5bc9...1e326b0595
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/elixir-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/elixir-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/elixir-tmbundle updated: 995f2ab735...1b4315ffd8
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/erlang.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/erlang.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/erlang.tmbundle updated: 39c144ddb7...cdfa8d3535
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/fancy-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/fancy-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/fancy-tmbundle updated: c9cdcd61f5...cf144f25a0
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user