pygments.rb 0.3.7 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +9 -0
- data/CHANGELOG.md +6 -0
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/lexers +0 -0
- data/lib/pygments/version.rb +1 -1
- data/test/test_pygments.rb +0 -1
- data/vendor/pygments-main/AUTHORS +14 -1
- data/vendor/pygments-main/CHANGES +56 -6
- data/vendor/pygments-main/LICENSE +1 -1
- data/vendor/pygments-main/Makefile +1 -1
- data/vendor/pygments-main/REVISION +1 -0
- data/vendor/pygments-main/docs/generate.py +1 -1
- data/vendor/pygments-main/docs/src/api.txt +1 -1
- data/vendor/pygments-main/docs/src/index.txt +1 -1
- data/vendor/pygments-main/docs/src/integrate.txt +5 -0
- data/vendor/pygments-main/docs/src/java.txt +70 -0
- data/vendor/pygments-main/external/autopygmentize +64 -0
- data/vendor/pygments-main/external/markdown-processor.py +2 -2
- data/vendor/pygments-main/external/moin-parser.py +1 -1
- data/vendor/pygments-main/external/rst-directive-old.py +1 -1
- data/vendor/pygments-main/external/rst-directive.py +1 -1
- data/vendor/pygments-main/pygments/__init__.py +2 -2
- data/vendor/pygments-main/pygments/cmdline.py +14 -6
- data/vendor/pygments-main/pygments/console.py +1 -1
- data/vendor/pygments-main/pygments/filter.py +1 -1
- data/vendor/pygments-main/pygments/filters/__init__.py +1 -1
- data/vendor/pygments-main/pygments/formatter.py +1 -1
- data/vendor/pygments-main/pygments/formatters/__init__.py +1 -1
- data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -1
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
- data/vendor/pygments-main/pygments/formatters/html.py +73 -2
- data/vendor/pygments-main/pygments/formatters/img.py +1 -1
- data/vendor/pygments-main/pygments/formatters/latex.py +1 -1
- data/vendor/pygments-main/pygments/formatters/other.py +1 -1
- data/vendor/pygments-main/pygments/formatters/rtf.py +1 -1
- data/vendor/pygments-main/pygments/formatters/svg.py +1 -1
- data/vendor/pygments-main/pygments/formatters/terminal.py +1 -1
- data/vendor/pygments-main/pygments/formatters/terminal256.py +1 -1
- data/vendor/pygments-main/pygments/lexer.py +76 -12
- data/vendor/pygments-main/pygments/lexers/__init__.py +2 -2
- data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +4 -1
- data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_mapping.py +26 -10
- data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +11 -0
- data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +2 -2
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +4 -2
- data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +14 -3
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +11 -0
- data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +2 -2
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +6 -6
- data/vendor/pygments-main/pygments/lexers/agile.py +6 -4
- data/vendor/pygments-main/pygments/lexers/asm.py +40 -2
- data/vendor/pygments-main/pygments/lexers/compiled.py +751 -438
- data/vendor/pygments-main/pygments/lexers/dalvik.py +2 -2
- data/vendor/pygments-main/pygments/lexers/dotnet.py +1 -1
- data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
- data/vendor/pygments-main/pygments/lexers/functional.py +6 -5
- data/vendor/pygments-main/pygments/lexers/hdl.py +3 -3
- data/vendor/pygments-main/pygments/lexers/jvm.py +130 -16
- data/vendor/pygments-main/pygments/lexers/math.py +250 -9
- data/vendor/pygments-main/pygments/lexers/other.py +518 -13
- data/vendor/pygments-main/pygments/lexers/parsers.py +3 -2
- data/vendor/pygments-main/pygments/lexers/shell.py +48 -2
- data/vendor/pygments-main/pygments/lexers/special.py +1 -1
- data/vendor/pygments-main/pygments/lexers/sql.py +1 -1
- data/vendor/pygments-main/pygments/lexers/templates.py +7 -6
- data/vendor/pygments-main/pygments/lexers/text.py +9 -9
- data/vendor/pygments-main/pygments/lexers/web.py +264 -51
- data/vendor/pygments-main/pygments/plugin.py +1 -1
- data/vendor/pygments-main/pygments/scanner.py +1 -1
- data/vendor/pygments-main/pygments/style.py +1 -1
- data/vendor/pygments-main/pygments/styles/__init__.py +1 -1
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
- data/vendor/pygments-main/pygments/styles/borland.py +1 -1
- data/vendor/pygments-main/pygments/styles/bw.py +1 -1
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
- data/vendor/pygments-main/pygments/styles/default.py +1 -1
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
- data/vendor/pygments-main/pygments/styles/manni.py +1 -1
- data/vendor/pygments-main/pygments/styles/monokai.py +1 -1
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
- data/vendor/pygments-main/pygments/styles/native.py +1 -1
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
- data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
- data/vendor/pygments-main/pygments/styles/tango.py +1 -1
- data/vendor/pygments-main/pygments/styles/trac.py +1 -1
- data/vendor/pygments-main/pygments/styles/vim.py +1 -1
- data/vendor/pygments-main/pygments/styles/vs.py +1 -1
- data/vendor/pygments-main/pygments/token.py +1 -1
- data/vendor/pygments-main/pygments/unistring.py +1 -1
- data/vendor/pygments-main/pygments/util.py +1 -1
- data/vendor/pygments-main/scripts/check_sources.py +2 -2
- data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +2 -0
- data/vendor/pygments-main/scripts/find_codetags.py +1 -1
- data/vendor/pygments-main/scripts/find_error.py +5 -6
- data/vendor/pygments-main/setup.cfg +1 -0
- data/vendor/pygments-main/setup.py +6 -4
- data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
- data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
- data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
- data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
- data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
- data/vendor/pygments-main/tests/examplefiles/classes.dylan +89 -4
- data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
- data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
- data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
- data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
- data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +2 -2
- data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
- data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
- data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
- data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
- data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
- data/vendor/pygments-main/tests/examplefiles/rust_example.rs +191 -701
- data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
- data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
- data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
- data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
- data/vendor/pygments-main/tests/old_run.py +1 -1
- data/vendor/pygments-main/tests/run.py +3 -2
- data/vendor/pygments-main/tests/support/tags +36 -0
- data/vendor/pygments-main/tests/test_basic_api.py +3 -2
- data/vendor/pygments-main/tests/test_clexer.py +1 -1
- data/vendor/pygments-main/tests/test_cmdline.py +1 -1
- data/vendor/pygments-main/tests/test_examplefiles.py +1 -1
- data/vendor/pygments-main/tests/test_html_formatter.py +17 -1
- data/vendor/pygments-main/tests/test_latex_formatter.py +1 -1
- data/vendor/pygments-main/tests/test_perllexer.py +1 -1
- data/vendor/pygments-main/tests/test_regexlexer.py +1 -1
- data/vendor/pygments-main/tests/test_token.py +1 -1
- data/vendor/pygments-main/tests/test_using_api.py +1 -1
- data/vendor/pygments-main/tests/test_util.py +5 -4
- metadata +26 -2
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
module: nanomsg
|
|
2
|
+
synopsis: generated bindings for the nanomsg library
|
|
3
|
+
author: Bruce Mitchener, Jr.
|
|
4
|
+
copyright: See LICENSE file in this distribution.
|
|
5
|
+
|
|
6
|
+
define simple-C-mapped-subtype <C-buffer-offset> (<C-char*>)
|
|
7
|
+
export-map <machine-word>, export-function: identity;
|
|
8
|
+
end;
|
|
9
|
+
|
|
10
|
+
define interface
|
|
11
|
+
#include {
|
|
12
|
+
"sp/sp.h",
|
|
13
|
+
"sp/fanin.h",
|
|
14
|
+
"sp/inproc.h",
|
|
15
|
+
"sp/pair.h",
|
|
16
|
+
"sp/reqrep.h",
|
|
17
|
+
"sp/survey.h",
|
|
18
|
+
"sp/fanout.h",
|
|
19
|
+
"sp/ipc.h",
|
|
20
|
+
"sp/pubsub.h",
|
|
21
|
+
"sp/tcp.h"
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
exclude: {
|
|
25
|
+
"SP_HAUSNUMERO",
|
|
26
|
+
"SP_PAIR_ID",
|
|
27
|
+
"SP_PUBSUB_ID",
|
|
28
|
+
"SP_REQREP_ID",
|
|
29
|
+
"SP_FANIN_ID",
|
|
30
|
+
"SP_FANOUT_ID",
|
|
31
|
+
"SP_SURVEY_ID"
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
equate: {"char *" => <c-string>},
|
|
35
|
+
|
|
36
|
+
rename: {
|
|
37
|
+
"sp_recv" => %sp-recv,
|
|
38
|
+
"sp_send" => %sp-send,
|
|
39
|
+
"sp_setsockopt" => %sp-setsockopt
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
function "sp_version",
|
|
43
|
+
output-argument: 1,
|
|
44
|
+
output-argument: 2,
|
|
45
|
+
output-argument: 3;
|
|
46
|
+
|
|
47
|
+
function "sp_send",
|
|
48
|
+
map-argument: { 2 => <C-buffer-offset> };
|
|
49
|
+
|
|
50
|
+
function "sp_recv",
|
|
51
|
+
map-argument: { 2 => <C-buffer-offset> };
|
|
52
|
+
|
|
53
|
+
end interface;
|
|
54
|
+
|
|
55
|
+
// Function for adding the base address of the repeated slots of a <buffer>
|
|
56
|
+
// to an offset and returning the result as a <machine-word>. This is
|
|
57
|
+
// necessary for passing <buffer> contents across the FFI.
|
|
58
|
+
|
|
59
|
+
define function buffer-offset
|
|
60
|
+
(the-buffer :: <buffer>, data-offset :: <integer>)
|
|
61
|
+
=> (result-offset :: <machine-word>)
|
|
62
|
+
u%+(data-offset,
|
|
63
|
+
primitive-wrap-machine-word
|
|
64
|
+
(primitive-repeated-slot-as-raw
|
|
65
|
+
(the-buffer, primitive-repeated-slot-offset(the-buffer))))
|
|
66
|
+
end function;
|
|
67
|
+
|
|
68
|
+
define inline function sp-send (socket :: <integer>, data :: <buffer>, flags :: <integer>) => (res :: <integer>)
|
|
69
|
+
%sp-send(socket, buffer-offset(data, 0), data.size, flags)
|
|
70
|
+
end;
|
|
71
|
+
|
|
72
|
+
define inline function sp-recv (socket :: <integer>, data :: <buffer>, flags :: <integer>) => (res :: <integer>)
|
|
73
|
+
%sp-recv(socket, buffer-offset(data, 0), data.size, flags);
|
|
74
|
+
end;
|
|
75
|
+
|
|
76
|
+
define inline method sp-setsockopt (socket :: <integer>, level :: <integer>, option :: <integer>, value :: <integer>)
|
|
77
|
+
with-stack-structure (int :: <C-int*>)
|
|
78
|
+
pointer-value(int) := value;
|
|
79
|
+
let setsockopt-result =
|
|
80
|
+
%sp-setsockopt(socket, level, option, int, size-of(<C-int*>));
|
|
81
|
+
if (setsockopt-result < 0)
|
|
82
|
+
// Check error!
|
|
83
|
+
end;
|
|
84
|
+
setsockopt-result
|
|
85
|
+
end;
|
|
86
|
+
end;
|
|
87
|
+
|
|
88
|
+
define inline method sp-setsockopt (socket :: <integer>, level :: <integer>, option :: <integer>, data :: <byte-string>)
|
|
89
|
+
let setsockopt-result =
|
|
90
|
+
%sp-setsockopt(socket, level, option, as(<c-string>, data), data.size);
|
|
91
|
+
if (setsockopt-result < 0)
|
|
92
|
+
// Check error!
|
|
93
|
+
end;
|
|
94
|
+
setsockopt-result
|
|
95
|
+
end;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
%define _myadminpath /var/www/myadmin
|
|
2
|
+
%define pkgrelease rc1
|
|
3
|
+
%define microrelease 1
|
|
4
|
+
|
|
5
|
+
Name: phpMyAdmin
|
|
6
|
+
Version: 3.1.1
|
|
7
|
+
Release: %{pkgrelease}.%{microrelease}
|
|
8
|
+
License: GPL
|
|
9
|
+
Group: Applications/Databases/Interfaces
|
|
10
|
+
Source0: http://prdownloads.sourceforge.net/phpmyadmin/%{name}-%{version}-%{pkgrelease}.tar.bz2
|
|
11
|
+
Source1: phpMyAdmin-http.conf
|
|
12
|
+
URL: http://sourceforge.net/projects/phpmyadmin/
|
|
13
|
+
Requires: mysql
|
|
14
|
+
Requires: php-mysql
|
|
15
|
+
Buildarch: noarch
|
|
16
|
+
#BuildRoot: %{_tmppath}/%{name}-root
|
|
17
|
+
|
|
18
|
+
Summary: phpMyAdmin - web-based MySQL administration
|
|
19
|
+
|
|
20
|
+
%description
|
|
21
|
+
phpMyAdmin can manage a whole MySQL-server (needs a super-user) but
|
|
22
|
+
also a single database. To accomplish the latter you'll need a
|
|
23
|
+
properly set up MySQL-user which can read/write only the desired
|
|
24
|
+
database. It's up to you to look up the appropiate part in the MySQL
|
|
25
|
+
manual. Currently phpMyAdmin can:
|
|
26
|
+
- create and drop databases
|
|
27
|
+
- create, copy, drop and alter tables
|
|
28
|
+
- delete, edit and add fields
|
|
29
|
+
- execute any SQL-statement, even batch-queries
|
|
30
|
+
- manage keys on fields
|
|
31
|
+
- load text files into tables
|
|
32
|
+
- create (*) and read dumps of tables
|
|
33
|
+
- export (*) and import data to CSV values
|
|
34
|
+
- administer multiple servers and single databases
|
|
35
|
+
- check referencial integrity
|
|
36
|
+
- create complex queries automatically connecting required tables
|
|
37
|
+
- create PDF graphics of your database layout
|
|
38
|
+
- communicate in more than 38 different languages
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
%prep
|
|
42
|
+
%setup -q -n %{name}-%{version}-%{pkgrelease}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
%build
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
%install
|
|
49
|
+
[ "${RPM_BUILD_ROOT}" != "/" ] && [ -d "${RPM_BUILD_ROOT}" ] && \
|
|
50
|
+
rm -rf "${RPM_BUILD_ROOT}"
|
|
51
|
+
|
|
52
|
+
# Create directories.
|
|
53
|
+
|
|
54
|
+
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/{css,js,lang,libraries,themes}
|
|
55
|
+
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/{auth,dbg,dbi,engines}
|
|
56
|
+
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/{export,tcpdf,import}
|
|
57
|
+
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/transformations
|
|
58
|
+
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/libraries/tcpdf/font
|
|
59
|
+
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/themes/{darkblue_orange,original}
|
|
60
|
+
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/themes/darkblue_orange/{css,img}
|
|
61
|
+
install -d "${RPM_BUILD_ROOT}%{_myadminpath}"/themes/original/{css,img}
|
|
62
|
+
|
|
63
|
+
# Install files.
|
|
64
|
+
|
|
65
|
+
install libraries/config.default.php \
|
|
66
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}"/config.inc.php
|
|
67
|
+
install *.{php,ico} "${RPM_BUILD_ROOT}%{_myadminpath}"/
|
|
68
|
+
install ChangeLog LICENSE README "${RPM_BUILD_ROOT}%{_myadminpath}"/
|
|
69
|
+
install Documentation.html docs.css "${RPM_BUILD_ROOT}%{_myadminpath}"/
|
|
70
|
+
install css/* "${RPM_BUILD_ROOT}%{_myadminpath}/css"/
|
|
71
|
+
install js/* "${RPM_BUILD_ROOT}%{_myadminpath}/js"/
|
|
72
|
+
install lang/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/lang"/
|
|
73
|
+
install libraries/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries"/
|
|
74
|
+
install libraries/auth/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/auth"/
|
|
75
|
+
install libraries/dbg/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/dbg"/
|
|
76
|
+
install libraries/dbi/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/dbi"/
|
|
77
|
+
install libraries/engines/*.php \
|
|
78
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/engines"/
|
|
79
|
+
install libraries/export/*.php \
|
|
80
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/export"/
|
|
81
|
+
install libraries/tcpdf/*.php "${RPM_BUILD_ROOT}%{_myadminpath}/libraries/tcpdf"/
|
|
82
|
+
install libraries/tcpdf/font/*.{php,z} \
|
|
83
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/tcpdf/font"/
|
|
84
|
+
install libraries/import/*.php \
|
|
85
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/import"/
|
|
86
|
+
install libraries/transformations/*.php \
|
|
87
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/libraries/transformations"/
|
|
88
|
+
install themes/darkblue_orange/*.{php,png} \
|
|
89
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/darkblue_orange"/
|
|
90
|
+
install themes/darkblue_orange/css/*.php \
|
|
91
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/darkblue_orange/css"/
|
|
92
|
+
install themes/darkblue_orange/img/*.{png,ico} \
|
|
93
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/darkblue_orange/img"/
|
|
94
|
+
install themes/original/*.{php,png} \
|
|
95
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/original"/
|
|
96
|
+
install themes/original/css/*.php \
|
|
97
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/original/css"/
|
|
98
|
+
install themes/original/img/*.{png,ico} \
|
|
99
|
+
"${RPM_BUILD_ROOT}%{_myadminpath}/themes/original/img"/
|
|
100
|
+
|
|
101
|
+
# Create documentation directories.
|
|
102
|
+
|
|
103
|
+
DOCROOT="${RPM_BUILD_ROOT}%{_docdir}/%{name}-%{version}"
|
|
104
|
+
install -d "${DOCROOT}"
|
|
105
|
+
install -d "${DOCROOT}"/{lang,scripts,transformations}
|
|
106
|
+
|
|
107
|
+
# Install documentation files.
|
|
108
|
+
|
|
109
|
+
install RELEASE-DATE-* "${DOCROOT}"/
|
|
110
|
+
install CREDITS ChangeLog INSTALL LICENSE "${DOCROOT}"/
|
|
111
|
+
install README TODO "${DOCROOT}"/
|
|
112
|
+
install Documentation.* docs.css "${DOCROOT}"/
|
|
113
|
+
install translators.html "${DOCROOT}"/
|
|
114
|
+
install lang/*.sh "${DOCROOT}"/lang/
|
|
115
|
+
install scripts/* "${DOCROOT}"/scripts/
|
|
116
|
+
install libraries/tcpdf/README "${DOCROOT}"/README.tcpdf
|
|
117
|
+
install libraries/import/README "${DOCROOT}"/README.import
|
|
118
|
+
install libraries/transformations/README "${DOCROOT}"/transformations/
|
|
119
|
+
install libraries/transformations/TEMPLATE* "${DOCROOT}"/transformations/
|
|
120
|
+
install libraries/transformations/*.sh "${DOCROOT}"/transformations/
|
|
121
|
+
|
|
122
|
+
# Install configuration file for Apache.
|
|
123
|
+
|
|
124
|
+
install -d "${RPM_BUILD_ROOT}%{_sysconfdir}/httpd/conf.d"
|
|
125
|
+
install "%{SOURCE1}" \
|
|
126
|
+
"${RPM_BUILD_ROOT}%{_sysconfdir}/httpd/conf.d/phpMyAdmin.conf"
|
|
127
|
+
|
|
128
|
+
# Generate non-configuration file list.
|
|
129
|
+
|
|
130
|
+
(cd "${RPM_BUILD_ROOT}"; ls -d ."%{_myadminpath}"/*) |
|
|
131
|
+
sed -e '/\/config\.inc\.php$/d' -e 's/^.//' > files.list
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
%clean
|
|
136
|
+
[ "${RPM_BUILD_ROOT}" != "/" ] && [ -d "${RPM_BUILD_ROOT}" ] && \
|
|
137
|
+
rm -rf "${RPM_BUILD_ROOT}"
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
%files -f files.list
|
|
141
|
+
%defattr(644, root, root, 755)
|
|
142
|
+
%doc %{_docdir}/%{name}-%{version}
|
|
143
|
+
%dir %{_myadminpath}
|
|
144
|
+
%attr(640,root,apache) %config(noreplace) %verify(not size mtime md5) %{_myadminpath}/config.inc.php
|
|
145
|
+
%config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/httpd/conf.d/*
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
%changelog
|
|
149
|
+
* Thu Feb 23 2006 Patrick Monnerat <pm@datasphere.ch>
|
|
150
|
+
- Version 2.8.0-rc1.1.
|
|
151
|
+
|
|
152
|
+
* Thu Dec 22 2005 Patrick Monnerat <patrick.monnerat@econophone.ch>
|
|
153
|
+
- Path "nullpw" to allow trying connection with null password after failure.
|
|
154
|
+
- Version 2.7.0-pl1.1.
|
|
155
|
+
|
|
156
|
+
* Mon Aug 22 2005 Patrick Monnerat <patrick.monnerat@econophone.ch>
|
|
157
|
+
- Version 2.6.3-pl1.
|
|
158
|
+
|
|
159
|
+
* Wed Jul 21 2004 Patrick Monnerat <patrick.monnerat@econophone.ch>
|
|
160
|
+
- Version 2.5.7-pl1.
|
|
161
|
+
|
|
162
|
+
* Fri Nov 22 2002 Patrick Monnerat <patrick.monnerat@econophone.ch>
|
|
163
|
+
- Version 2.3.0-rc1.
|
|
@@ -1,743 +1,233 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#[
|
|
26
|
-
|
|
27
|
-
num(float),
|
|
28
|
-
string(str),
|
|
29
|
-
boolean(bool),
|
|
30
|
-
list([json]),
|
|
31
|
-
dict(map::hashmap<str,json>),
|
|
32
|
-
null,
|
|
1
|
+
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
|
2
|
+
// file at the top-level directory of this distribution and at
|
|
3
|
+
// http://rust-lang.org/COPYRIGHT.
|
|
4
|
+
//
|
|
5
|
+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
6
|
+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
7
|
+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
8
|
+
// option. This file may not be copied, modified, or distributed
|
|
9
|
+
// except according to those terms.
|
|
10
|
+
|
|
11
|
+
// based on:
|
|
12
|
+
// http://shootout.alioth.debian.org/u32/benchmark.php?test=nbody&lang=java
|
|
13
|
+
|
|
14
|
+
extern mod std;
|
|
15
|
+
|
|
16
|
+
use core::os;
|
|
17
|
+
|
|
18
|
+
// Using sqrt from the standard library is way slower than using libc
|
|
19
|
+
// directly even though std just calls libc, I guess it must be
|
|
20
|
+
// because the the indirection through another dynamic linker
|
|
21
|
+
// stub. Kind of shocking. Might be able to make it faster still with
|
|
22
|
+
// an llvm intrinsic.
|
|
23
|
+
#[nolink]
|
|
24
|
+
extern mod libc {
|
|
25
|
+
#[legacy_exports];
|
|
26
|
+
fn sqrt(n: float) -> float;
|
|
33
27
|
}
|
|
34
28
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
'\x0c' { escaped += "\\f"; }
|
|
54
|
-
'\n' { escaped += "\\n"; }
|
|
55
|
-
'\r' { escaped += "\\r"; }
|
|
56
|
-
'\t' { escaped += "\\t"; }
|
|
57
|
-
_ { escaped += str::from_char(c); }
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
wr.write_str(escaped);
|
|
61
|
-
wr.write_char('"');
|
|
62
|
-
}
|
|
63
|
-
boolean(b) {
|
|
64
|
-
wr.write_str(if b { "true" } else { "false" });
|
|
65
|
-
}
|
|
66
|
-
list(v) {
|
|
67
|
-
wr.write_char('[');
|
|
68
|
-
let mut first = true;
|
|
69
|
-
vec::iter(v) { |item|
|
|
70
|
-
if !first {
|
|
71
|
-
wr.write_str(", ");
|
|
72
|
-
}
|
|
73
|
-
first = false;
|
|
74
|
-
to_writer(wr, item);
|
|
75
|
-
};
|
|
76
|
-
wr.write_char(']');
|
|
77
|
-
}
|
|
78
|
-
dict(d) {
|
|
79
|
-
if d.size() == 0u {
|
|
80
|
-
wr.write_str("{}");
|
|
81
|
-
ret;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
wr.write_str("{ ");
|
|
85
|
-
let mut first = true;
|
|
86
|
-
d.items { |key, value|
|
|
87
|
-
if !first {
|
|
88
|
-
wr.write_str(", ");
|
|
89
|
-
}
|
|
90
|
-
first = false;
|
|
91
|
-
to_writer(wr, string(key));
|
|
92
|
-
wr.write_str(": ");
|
|
93
|
-
to_writer(wr, value);
|
|
94
|
-
};
|
|
95
|
-
wr.write_str(" }");
|
|
96
|
-
}
|
|
97
|
-
null {
|
|
98
|
-
wr.write_str("null");
|
|
99
|
-
}
|
|
100
|
-
}
|
|
29
|
+
fn main() {
|
|
30
|
+
let args = os::args();
|
|
31
|
+
let args = if os::getenv(~"RUST_BENCH").is_some() {
|
|
32
|
+
~[~"", ~"4000000"]
|
|
33
|
+
} else if args.len() <= 1u {
|
|
34
|
+
~[~"", ~"100000"]
|
|
35
|
+
} else {
|
|
36
|
+
args
|
|
37
|
+
};
|
|
38
|
+
let n = int::from_str(args[1]).get();
|
|
39
|
+
let mut bodies: ~[Body::props] = NBodySystem::make();
|
|
40
|
+
io::println(fmt!("%f", NBodySystem::energy(bodies)));
|
|
41
|
+
let mut i = 0;
|
|
42
|
+
while i < n {
|
|
43
|
+
NBodySystem::advance(bodies, 0.01);
|
|
44
|
+
i += 1;
|
|
45
|
+
}
|
|
46
|
+
io::println(fmt!("%f", NBodySystem::energy(bodies)));
|
|
101
47
|
}
|
|
102
48
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
io::with_str_writer { |wr| to_writer(wr, j) }
|
|
106
|
-
}
|
|
49
|
+
mod NBodySystem {
|
|
50
|
+
use Body;
|
|
107
51
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
52
|
+
pub fn make() -> ~[Body::props] {
|
|
53
|
+
let mut bodies: ~[Body::props] =
|
|
54
|
+
~[Body::sun(),
|
|
55
|
+
Body::jupiter(),
|
|
56
|
+
Body::saturn(),
|
|
57
|
+
Body::uranus(),
|
|
58
|
+
Body::neptune()];
|
|
114
59
|
|
|
115
|
-
|
|
116
|
-
|
|
60
|
+
let mut px = 0.0;
|
|
61
|
+
let mut py = 0.0;
|
|
62
|
+
let mut pz = 0.0;
|
|
117
63
|
|
|
118
|
-
|
|
119
|
-
|
|
64
|
+
let mut i = 0;
|
|
65
|
+
while i < 5 {
|
|
66
|
+
px += bodies[i].vx * bodies[i].mass;
|
|
67
|
+
py += bodies[i].vy * bodies[i].mass;
|
|
68
|
+
pz += bodies[i].vz * bodies[i].mass;
|
|
120
69
|
|
|
121
|
-
|
|
122
|
-
self.line += 1u;
|
|
123
|
-
self.col = 1u;
|
|
124
|
-
} else {
|
|
125
|
-
self.col += 1u;
|
|
70
|
+
i += 1;
|
|
126
71
|
}
|
|
127
|
-
}
|
|
128
72
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
self.ch
|
|
132
|
-
}
|
|
73
|
+
// side-effecting
|
|
74
|
+
Body::offset_momentum(&mut bodies[0], px, py, pz);
|
|
133
75
|
|
|
134
|
-
|
|
135
|
-
err({ line: self.line, col: self.col, msg: msg })
|
|
76
|
+
return bodies;
|
|
136
77
|
}
|
|
137
78
|
|
|
138
|
-
fn
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
} else {
|
|
147
|
-
self.error("trailing characters")
|
|
79
|
+
pub fn advance(bodies: &mut [Body::props], dt: float) {
|
|
80
|
+
let mut i = 0;
|
|
81
|
+
while i < 5 {
|
|
82
|
+
let mut j = i + 1;
|
|
83
|
+
while j < 5 {
|
|
84
|
+
advance_one(&mut bodies[i],
|
|
85
|
+
&mut bodies[j], dt);
|
|
86
|
+
j += 1;
|
|
148
87
|
}
|
|
149
|
-
}
|
|
150
|
-
e { e }
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
88
|
|
|
154
|
-
|
|
155
|
-
self.parse_whitespace();
|
|
156
|
-
|
|
157
|
-
if self.eof() { ret self.error("EOF while parsing value"); }
|
|
158
|
-
|
|
159
|
-
alt self.ch {
|
|
160
|
-
'n' { self.parse_ident("ull", null) }
|
|
161
|
-
't' { self.parse_ident("rue", boolean(true)) }
|
|
162
|
-
'f' { self.parse_ident("alse", boolean(false)) }
|
|
163
|
-
'0' to '9' | '-' { self.parse_number() }
|
|
164
|
-
'"' {
|
|
165
|
-
alt self.parse_str() {
|
|
166
|
-
ok(s) { ok(string(s)) }
|
|
167
|
-
err(e) { err(e) }
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
'[' { self.parse_list() }
|
|
171
|
-
'{' { self.parse_object() }
|
|
172
|
-
_ { self.error("invalid syntax") }
|
|
89
|
+
i += 1;
|
|
173
90
|
}
|
|
174
|
-
}
|
|
175
91
|
|
|
176
|
-
|
|
177
|
-
while
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
fn parse_ident(ident: str, value: json) -> result<json, error> {
|
|
181
|
-
if str::all(ident, { |c| c == self.next_char() }) {
|
|
182
|
-
self.bump();
|
|
183
|
-
ok(value)
|
|
184
|
-
} else {
|
|
185
|
-
self.error("invalid syntax")
|
|
92
|
+
i = 0;
|
|
93
|
+
while i < 5 {
|
|
94
|
+
move_(&mut bodies[i], dt);
|
|
95
|
+
i += 1;
|
|
186
96
|
}
|
|
187
97
|
}
|
|
188
98
|
|
|
189
|
-
fn
|
|
190
|
-
|
|
99
|
+
pub fn advance_one(bi: &mut Body::props,
|
|
100
|
+
bj: &mut Body::props,
|
|
101
|
+
dt: float) unsafe {
|
|
102
|
+
let dx = bi.x - bj.x;
|
|
103
|
+
let dy = bi.y - bj.y;
|
|
104
|
+
let dz = bi.z - bj.z;
|
|
191
105
|
|
|
192
|
-
|
|
193
|
-
self.bump();
|
|
194
|
-
neg = -1f;
|
|
195
|
-
}
|
|
106
|
+
let dSquared = dx * dx + dy * dy + dz * dz;
|
|
196
107
|
|
|
197
|
-
let
|
|
198
|
-
|
|
199
|
-
err(e) { ret err(e); }
|
|
200
|
-
};
|
|
108
|
+
let distance = ::libc::sqrt(dSquared);
|
|
109
|
+
let mag = dt / (dSquared * distance);
|
|
201
110
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
err(e) { ret err(e); }
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
if self.ch == 'e' || self.ch == 'E' {
|
|
210
|
-
alt self.parse_exponent(res) {
|
|
211
|
-
ok(r) { res = r; }
|
|
212
|
-
err(e) { ret err(e); }
|
|
213
|
-
}
|
|
214
|
-
}
|
|
111
|
+
bi.vx -= dx * bj.mass * mag;
|
|
112
|
+
bi.vy -= dy * bj.mass * mag;
|
|
113
|
+
bi.vz -= dz * bj.mass * mag;
|
|
215
114
|
|
|
216
|
-
|
|
115
|
+
bj.vx += dx * bi.mass * mag;
|
|
116
|
+
bj.vy += dy * bi.mass * mag;
|
|
117
|
+
bj.vz += dz * bi.mass * mag;
|
|
217
118
|
}
|
|
218
119
|
|
|
219
|
-
fn
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
'0' {
|
|
224
|
-
self.bump();
|
|
225
|
-
|
|
226
|
-
// There can be only one leading '0'.
|
|
227
|
-
alt self.ch {
|
|
228
|
-
'0' to '9' { ret self.error("invalid number"); }
|
|
229
|
-
_ {}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
'1' to '9' {
|
|
233
|
-
while !self.eof() {
|
|
234
|
-
alt self.ch {
|
|
235
|
-
'0' to '9' {
|
|
236
|
-
res *= 10f;
|
|
237
|
-
res += ((self.ch as int) - ('0' as int)) as float;
|
|
238
|
-
|
|
239
|
-
self.bump();
|
|
240
|
-
}
|
|
241
|
-
_ { break; }
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
_ { ret self.error("invalid number"); }
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
ok(res)
|
|
120
|
+
pub fn move_(b: &mut Body::props, dt: float) {
|
|
121
|
+
b.x += dt * b.vx;
|
|
122
|
+
b.y += dt * b.vy;
|
|
123
|
+
b.z += dt * b.vz;
|
|
249
124
|
}
|
|
250
125
|
|
|
251
|
-
fn
|
|
252
|
-
|
|
126
|
+
pub fn energy(bodies: &[Body::props]) -> float unsafe {
|
|
127
|
+
let mut dx;
|
|
128
|
+
let mut dy;
|
|
129
|
+
let mut dz;
|
|
130
|
+
let mut distance;
|
|
131
|
+
let mut e = 0.0;
|
|
253
132
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
let mut res = res;
|
|
261
|
-
let mut dec = 1f;
|
|
262
|
-
while !self.eof() {
|
|
263
|
-
alt self.ch {
|
|
264
|
-
'0' to '9' {
|
|
265
|
-
dec /= 10f;
|
|
266
|
-
res += (((self.ch as int) - ('0' as int)) as float) * dec;
|
|
267
|
-
|
|
268
|
-
self.bump();
|
|
269
|
-
}
|
|
270
|
-
_ { break; }
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
ok(res)
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
fn parse_exponent(res: float) -> result<float, error> {
|
|
278
|
-
self.bump();
|
|
133
|
+
let mut i = 0;
|
|
134
|
+
while i < 5 {
|
|
135
|
+
e +=
|
|
136
|
+
0.5 * bodies[i].mass *
|
|
137
|
+
(bodies[i].vx * bodies[i].vx + bodies[i].vy * bodies[i].vy
|
|
138
|
+
+ bodies[i].vz * bodies[i].vz);
|
|
279
139
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
140
|
+
let mut j = i + 1;
|
|
141
|
+
while j < 5 {
|
|
142
|
+
dx = bodies[i].x - bodies[j].x;
|
|
143
|
+
dy = bodies[i].y - bodies[j].y;
|
|
144
|
+
dz = bodies[i].z - bodies[j].z;
|
|
283
145
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
'-' { self.bump(); neg_exp = true; }
|
|
287
|
-
_ {}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// Make sure a digit follows the exponent place.
|
|
291
|
-
alt self.ch {
|
|
292
|
-
'0' to '9' {}
|
|
293
|
-
_ { ret self.error("invalid number"); }
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
while !self.eof() {
|
|
297
|
-
alt self.ch {
|
|
298
|
-
'0' to '9' {
|
|
299
|
-
exp *= 10u;
|
|
300
|
-
exp += (self.ch as uint) - ('0' as uint);
|
|
146
|
+
distance = ::libc::sqrt(dx * dx + dy * dy + dz * dz);
|
|
147
|
+
e -= bodies[i].mass * bodies[j].mass / distance;
|
|
301
148
|
|
|
302
|
-
|
|
303
|
-
}
|
|
304
|
-
_ { break; }
|
|
149
|
+
j += 1;
|
|
305
150
|
}
|
|
306
|
-
}
|
|
307
151
|
|
|
308
|
-
|
|
309
|
-
if neg_exp {
|
|
310
|
-
res /= exp;
|
|
311
|
-
} else {
|
|
312
|
-
res *= exp;
|
|
152
|
+
i += 1;
|
|
313
153
|
}
|
|
154
|
+
return e;
|
|
314
155
|
|
|
315
|
-
ok(res)
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
fn parse_str() -> result<str, error> {
|
|
319
|
-
let mut escape = false;
|
|
320
|
-
let mut res = "";
|
|
321
|
-
|
|
322
|
-
while !self.eof() {
|
|
323
|
-
self.bump();
|
|
324
|
-
|
|
325
|
-
if (escape) {
|
|
326
|
-
alt self.ch {
|
|
327
|
-
'"' { str::push_char(res, '"'); }
|
|
328
|
-
'\\' { str::push_char(res, '\\'); }
|
|
329
|
-
'/' { str::push_char(res, '/'); }
|
|
330
|
-
'b' { str::push_char(res, '\x08'); }
|
|
331
|
-
'f' { str::push_char(res, '\x0c'); }
|
|
332
|
-
'n' { str::push_char(res, '\n'); }
|
|
333
|
-
'r' { str::push_char(res, '\r'); }
|
|
334
|
-
't' { str::push_char(res, '\t'); }
|
|
335
|
-
'u' {
|
|
336
|
-
// Parse \u1234.
|
|
337
|
-
let mut i = 0u;
|
|
338
|
-
let mut n = 0u;
|
|
339
|
-
while i < 4u {
|
|
340
|
-
alt self.next_char() {
|
|
341
|
-
'0' to '9' {
|
|
342
|
-
n = n * 10u +
|
|
343
|
-
(self.ch as uint) - ('0' as uint);
|
|
344
|
-
}
|
|
345
|
-
_ { ret self.error("invalid \\u escape"); }
|
|
346
|
-
}
|
|
347
|
-
i += 1u;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// Error out if we didn't parse 4 digits.
|
|
351
|
-
if i != 4u {
|
|
352
|
-
ret self.error("invalid \\u escape");
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
str::push_char(res, n as char);
|
|
356
|
-
}
|
|
357
|
-
_ { ret self.error("invalid escape"); }
|
|
358
|
-
}
|
|
359
|
-
escape = false;
|
|
360
|
-
} else if self.ch == '\\' {
|
|
361
|
-
escape = true;
|
|
362
|
-
} else {
|
|
363
|
-
if self.ch == '"' {
|
|
364
|
-
self.bump();
|
|
365
|
-
ret ok(res);
|
|
366
|
-
}
|
|
367
|
-
str::push_char(res, self.ch);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
self.error("EOF while parsing string")
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
fn parse_list() -> result<json, error> {
|
|
375
|
-
self.bump();
|
|
376
|
-
self.parse_whitespace();
|
|
377
|
-
|
|
378
|
-
let mut values = [];
|
|
379
|
-
|
|
380
|
-
if self.ch == ']' {
|
|
381
|
-
self.bump();
|
|
382
|
-
ret ok(list(values));
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
loop {
|
|
386
|
-
alt self.parse_value() {
|
|
387
|
-
ok(v) { vec::push(values, v); }
|
|
388
|
-
e { ret e; }
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
self.parse_whitespace();
|
|
392
|
-
if self.eof() {
|
|
393
|
-
ret self.error("EOF while parsing list");
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
alt self.ch {
|
|
397
|
-
',' { self.bump(); }
|
|
398
|
-
']' { self.bump(); ret ok(list(values)); }
|
|
399
|
-
_ { ret self.error("expecting ',' or ']'"); }
|
|
400
|
-
}
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
fn parse_object() -> result<json, error> {
|
|
405
|
-
self.bump();
|
|
406
|
-
self.parse_whitespace();
|
|
407
|
-
|
|
408
|
-
let values = map::str_hash();
|
|
409
|
-
|
|
410
|
-
if self.ch == '}' {
|
|
411
|
-
self.bump();
|
|
412
|
-
ret ok(dict(values));
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
while !self.eof() {
|
|
416
|
-
self.parse_whitespace();
|
|
417
|
-
|
|
418
|
-
if self.ch != '"' {
|
|
419
|
-
ret self.error("key must be a string");
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
let key = alt self.parse_str() {
|
|
423
|
-
ok(key) { key }
|
|
424
|
-
err(e) { ret err(e); }
|
|
425
|
-
};
|
|
426
|
-
|
|
427
|
-
self.parse_whitespace();
|
|
428
|
-
|
|
429
|
-
if self.ch != ':' {
|
|
430
|
-
if self.eof() { break; }
|
|
431
|
-
ret self.error("expecting ':'");
|
|
432
|
-
}
|
|
433
|
-
self.bump();
|
|
434
|
-
|
|
435
|
-
alt self.parse_value() {
|
|
436
|
-
ok(value) { values.insert(key, value); }
|
|
437
|
-
e { ret e; }
|
|
438
|
-
}
|
|
439
|
-
self.parse_whitespace();
|
|
440
|
-
|
|
441
|
-
alt self.ch {
|
|
442
|
-
',' { self.bump(); }
|
|
443
|
-
'}' { self.bump(); ret ok(dict(values)); }
|
|
444
|
-
_ {
|
|
445
|
-
if self.eof() { break; }
|
|
446
|
-
ret self.error("expecting ',' or '}'");
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
ret self.error("EOF while parsing object");
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
#[doc = "Deserializes a json value from an io::reader"]
|
|
456
|
-
fn from_reader(rdr: io::reader) -> result<json, error> {
|
|
457
|
-
let parser = {
|
|
458
|
-
rdr: rdr,
|
|
459
|
-
mut ch: rdr.read_char(),
|
|
460
|
-
mut line: 1u,
|
|
461
|
-
mut col: 1u,
|
|
462
|
-
};
|
|
463
|
-
|
|
464
|
-
parser.parse()
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
#[doc = "Deserializes a json value from a string"]
|
|
468
|
-
fn from_str(s: str) -> result<json, error> {
|
|
469
|
-
io::with_str_reader(s, from_reader)
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
#[doc = "Test if two json values are equal"]
|
|
473
|
-
fn eq(value0: json, value1: json) -> bool {
|
|
474
|
-
alt (value0, value1) {
|
|
475
|
-
(num(f0), num(f1)) { f0 == f1 }
|
|
476
|
-
(string(s0), string(s1)) { s0 == s1 }
|
|
477
|
-
(boolean(b0), boolean(b1)) { b0 == b1 }
|
|
478
|
-
(list(l0), list(l1)) { vec::all2(l0, l1, eq) }
|
|
479
|
-
(dict(d0), dict(d1)) {
|
|
480
|
-
if d0.size() == d1.size() {
|
|
481
|
-
let mut equal = true;
|
|
482
|
-
d0.items { |k, v0|
|
|
483
|
-
alt d1.find(k) {
|
|
484
|
-
some(v1) {
|
|
485
|
-
if !eq(v0, v1) { equal = false; } }
|
|
486
|
-
none { equal = false; }
|
|
487
|
-
}
|
|
488
|
-
};
|
|
489
|
-
equal
|
|
490
|
-
} else {
|
|
491
|
-
false
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
(null, null) { true }
|
|
495
|
-
_ { false }
|
|
496
156
|
}
|
|
497
157
|
}
|
|
498
158
|
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
fn
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
159
|
+
mod Body {
|
|
160
|
+
use Body;
|
|
161
|
+
|
|
162
|
+
pub const PI: float = 3.141592653589793;
|
|
163
|
+
pub const SOLAR_MASS: float = 39.478417604357432;
|
|
164
|
+
// was 4 * PI * PI originally
|
|
165
|
+
pub const DAYS_PER_YEAR: float = 365.24;
|
|
166
|
+
|
|
167
|
+
pub type props =
|
|
168
|
+
{mut x: float,
|
|
169
|
+
mut y: float,
|
|
170
|
+
mut z: float,
|
|
171
|
+
mut vx: float,
|
|
172
|
+
mut vy: float,
|
|
173
|
+
mut vz: float,
|
|
174
|
+
mass: float};
|
|
175
|
+
|
|
176
|
+
pub fn jupiter() -> Body::props {
|
|
177
|
+
return {mut x: 4.84143144246472090e+00,
|
|
178
|
+
mut y: -1.16032004402742839e+00,
|
|
179
|
+
mut z: -1.03622044471123109e-01,
|
|
180
|
+
mut vx: 1.66007664274403694e-03 * DAYS_PER_YEAR,
|
|
181
|
+
mut vy: 7.69901118419740425e-03 * DAYS_PER_YEAR,
|
|
182
|
+
mut vz: -6.90460016972063023e-05 * DAYS_PER_YEAR,
|
|
183
|
+
mass: 9.54791938424326609e-04 * SOLAR_MASS};
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
pub fn saturn() -> Body::props {
|
|
187
|
+
return {mut x: 8.34336671824457987e+00,
|
|
188
|
+
mut y: 4.12479856412430479e+00,
|
|
189
|
+
mut z: -4.03523417114321381e-01,
|
|
190
|
+
mut vx: -2.76742510726862411e-03 * DAYS_PER_YEAR,
|
|
191
|
+
mut vy: 4.99852801234917238e-03 * DAYS_PER_YEAR,
|
|
192
|
+
mut vz: 2.30417297573763929e-05 * DAYS_PER_YEAR,
|
|
193
|
+
mass: 2.85885980666130812e-04 * SOLAR_MASS};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
pub fn uranus() -> Body::props {
|
|
197
|
+
return {mut x: 1.28943695621391310e+01,
|
|
198
|
+
mut y: -1.51111514016986312e+01,
|
|
199
|
+
mut z: -2.23307578892655734e-01,
|
|
200
|
+
mut vx: 2.96460137564761618e-03 * DAYS_PER_YEAR,
|
|
201
|
+
mut vy: 2.37847173959480950e-03 * DAYS_PER_YEAR,
|
|
202
|
+
mut vz: -2.96589568540237556e-05 * DAYS_PER_YEAR,
|
|
203
|
+
mass: 4.36624404335156298e-05 * SOLAR_MASS};
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
pub fn neptune() -> Body::props {
|
|
207
|
+
return {mut x: 1.53796971148509165e+01,
|
|
208
|
+
mut y: -2.59193146099879641e+01,
|
|
209
|
+
mut z: 1.79258772950371181e-01,
|
|
210
|
+
mut vx: 2.68067772490389322e-03 * DAYS_PER_YEAR,
|
|
211
|
+
mut vy: 1.62824170038242295e-03 * DAYS_PER_YEAR,
|
|
212
|
+
mut vz: -9.51592254519715870e-05 * DAYS_PER_YEAR,
|
|
213
|
+
mass: 5.15138902046611451e-05 * SOLAR_MASS};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
pub fn sun() -> Body::props {
|
|
217
|
+
return {mut x: 0.0,
|
|
218
|
+
mut y: 0.0,
|
|
219
|
+
mut z: 0.0,
|
|
220
|
+
mut vx: 0.0,
|
|
221
|
+
mut vy: 0.0,
|
|
222
|
+
mut vz: 0.0,
|
|
223
|
+
mass: SOLAR_MASS};
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
pub fn offset_momentum(props: &mut Body::props,
|
|
227
|
+
px: float, py: float, pz: float) {
|
|
228
|
+
props.vx = -px / SOLAR_MASS;
|
|
229
|
+
props.vy = -py / SOLAR_MASS;
|
|
230
|
+
props.vz = -pz / SOLAR_MASS;
|
|
566
231
|
}
|
|
567
232
|
|
|
568
|
-
#[test]
|
|
569
|
-
fn test_trailing_characters() {
|
|
570
|
-
assert from_str("nulla") ==
|
|
571
|
-
err({line: 1u, col: 5u, msg: "trailing characters"});
|
|
572
|
-
assert from_str("truea") ==
|
|
573
|
-
err({line: 1u, col: 5u, msg: "trailing characters"});
|
|
574
|
-
assert from_str("falsea") ==
|
|
575
|
-
err({line: 1u, col: 6u, msg: "trailing characters"});
|
|
576
|
-
assert from_str("1a") ==
|
|
577
|
-
err({line: 1u, col: 2u, msg: "trailing characters"});
|
|
578
|
-
assert from_str("[]a") ==
|
|
579
|
-
err({line: 1u, col: 3u, msg: "trailing characters"});
|
|
580
|
-
assert from_str("{}a") ==
|
|
581
|
-
err({line: 1u, col: 3u, msg: "trailing characters"});
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
#[test]
|
|
585
|
-
fn test_read_identifiers() {
|
|
586
|
-
assert from_str("n") ==
|
|
587
|
-
err({line: 1u, col: 2u, msg: "invalid syntax"});
|
|
588
|
-
assert from_str("nul") ==
|
|
589
|
-
err({line: 1u, col: 4u, msg: "invalid syntax"});
|
|
590
|
-
|
|
591
|
-
assert from_str("t") ==
|
|
592
|
-
err({line: 1u, col: 2u, msg: "invalid syntax"});
|
|
593
|
-
assert from_str("truz") ==
|
|
594
|
-
err({line: 1u, col: 4u, msg: "invalid syntax"});
|
|
595
|
-
|
|
596
|
-
assert from_str("f") ==
|
|
597
|
-
err({line: 1u, col: 2u, msg: "invalid syntax"});
|
|
598
|
-
assert from_str("faz") ==
|
|
599
|
-
err({line: 1u, col: 3u, msg: "invalid syntax"});
|
|
600
|
-
|
|
601
|
-
assert from_str("null") == ok(null);
|
|
602
|
-
assert from_str("true") == ok(boolean(true));
|
|
603
|
-
assert from_str("false") == ok(boolean(false));
|
|
604
|
-
assert from_str(" null ") == ok(null);
|
|
605
|
-
assert from_str(" true ") == ok(boolean(true));
|
|
606
|
-
assert from_str(" false ") == ok(boolean(false));
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
#[test]
|
|
610
|
-
fn test_read_num() {
|
|
611
|
-
assert from_str("+") ==
|
|
612
|
-
err({line: 1u, col: 1u, msg: "invalid syntax"});
|
|
613
|
-
assert from_str(".") ==
|
|
614
|
-
err({line: 1u, col: 1u, msg: "invalid syntax"});
|
|
615
|
-
|
|
616
|
-
assert from_str("-") ==
|
|
617
|
-
err({line: 1u, col: 2u, msg: "invalid number"});
|
|
618
|
-
assert from_str("00") ==
|
|
619
|
-
err({line: 1u, col: 2u, msg: "invalid number"});
|
|
620
|
-
assert from_str("1.") ==
|
|
621
|
-
err({line: 1u, col: 3u, msg: "invalid number"});
|
|
622
|
-
assert from_str("1e") ==
|
|
623
|
-
err({line: 1u, col: 3u, msg: "invalid number"});
|
|
624
|
-
assert from_str("1e+") ==
|
|
625
|
-
err({line: 1u, col: 4u, msg: "invalid number"});
|
|
626
|
-
|
|
627
|
-
assert from_str("3") == ok(num(3f));
|
|
628
|
-
assert from_str("3.1") == ok(num(3.1f));
|
|
629
|
-
assert from_str("-1.2") == ok(num(-1.2f));
|
|
630
|
-
assert from_str("0.4") == ok(num(0.4f));
|
|
631
|
-
assert from_str("0.4e5") == ok(num(0.4e5f));
|
|
632
|
-
assert from_str("0.4e+15") == ok(num(0.4e15f));
|
|
633
|
-
assert from_str("0.4e-01") == ok(num(0.4e-01f));
|
|
634
|
-
assert from_str(" 3 ") == ok(num(3f));
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
#[test]
|
|
638
|
-
fn test_read_str() {
|
|
639
|
-
assert from_str("\"") ==
|
|
640
|
-
err({line: 1u, col: 2u, msg: "EOF while parsing string"});
|
|
641
|
-
assert from_str("\"lol") ==
|
|
642
|
-
err({line: 1u, col: 5u, msg: "EOF while parsing string"});
|
|
643
|
-
|
|
644
|
-
assert from_str("\"\"") == ok(string(""));
|
|
645
|
-
assert from_str("\"foo\"") == ok(string("foo"));
|
|
646
|
-
assert from_str("\"\\\"\"") == ok(string("\""));
|
|
647
|
-
assert from_str("\"\\b\"") == ok(string("\x08"));
|
|
648
|
-
assert from_str("\"\\n\"") == ok(string("\n"));
|
|
649
|
-
assert from_str("\"\\r\"") == ok(string("\r"));
|
|
650
|
-
assert from_str("\"\\t\"") == ok(string("\t"));
|
|
651
|
-
assert from_str(" \"foo\" ") == ok(string("foo"));
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
#[test]
|
|
655
|
-
fn test_read_list() {
|
|
656
|
-
assert from_str("[") ==
|
|
657
|
-
err({line: 1u, col: 2u, msg: "EOF while parsing value"});
|
|
658
|
-
assert from_str("[1") ==
|
|
659
|
-
err({line: 1u, col: 3u, msg: "EOF while parsing list"});
|
|
660
|
-
assert from_str("[1,") ==
|
|
661
|
-
err({line: 1u, col: 4u, msg: "EOF while parsing value"});
|
|
662
|
-
assert from_str("[1,]") ==
|
|
663
|
-
err({line: 1u, col: 4u, msg: "invalid syntax"});
|
|
664
|
-
assert from_str("[6 7]") ==
|
|
665
|
-
err({line: 1u, col: 4u, msg: "expecting ',' or ']'"});
|
|
666
|
-
|
|
667
|
-
assert from_str("[]") == ok(list([]));
|
|
668
|
-
assert from_str("[ ]") == ok(list([]));
|
|
669
|
-
assert from_str("[true]") == ok(list([boolean(true)]));
|
|
670
|
-
assert from_str("[ false ]") == ok(list([boolean(false)]));
|
|
671
|
-
assert from_str("[null]") == ok(list([null]));
|
|
672
|
-
assert from_str("[3, 1]") == ok(list([num(3f), num(1f)]));
|
|
673
|
-
assert from_str("\n[3, 2]\n") == ok(list([num(3f), num(2f)]));
|
|
674
|
-
assert from_str("[2, [4, 1]]") ==
|
|
675
|
-
ok(list([num(2f), list([num(4f), num(1f)])]));
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
#[test]
|
|
679
|
-
fn test_read_dict() {
|
|
680
|
-
assert from_str("{") ==
|
|
681
|
-
err({line: 1u, col: 2u, msg: "EOF while parsing object"});
|
|
682
|
-
assert from_str("{ ") ==
|
|
683
|
-
err({line: 1u, col: 3u, msg: "EOF while parsing object"});
|
|
684
|
-
assert from_str("{1") ==
|
|
685
|
-
err({line: 1u, col: 2u, msg: "key must be a string"});
|
|
686
|
-
assert from_str("{ \"a\"") ==
|
|
687
|
-
err({line: 1u, col: 6u, msg: "EOF while parsing object"});
|
|
688
|
-
assert from_str("{\"a\"") ==
|
|
689
|
-
err({line: 1u, col: 5u, msg: "EOF while parsing object"});
|
|
690
|
-
assert from_str("{\"a\" ") ==
|
|
691
|
-
err({line: 1u, col: 6u, msg: "EOF while parsing object"});
|
|
692
|
-
|
|
693
|
-
assert from_str("{\"a\" 1") ==
|
|
694
|
-
err({line: 1u, col: 6u, msg: "expecting ':'"});
|
|
695
|
-
assert from_str("{\"a\":") ==
|
|
696
|
-
err({line: 1u, col: 6u, msg: "EOF while parsing value"});
|
|
697
|
-
assert from_str("{\"a\":1") ==
|
|
698
|
-
err({line: 1u, col: 7u, msg: "EOF while parsing object"});
|
|
699
|
-
assert from_str("{\"a\":1 1") ==
|
|
700
|
-
err({line: 1u, col: 8u, msg: "expecting ',' or '}'"});
|
|
701
|
-
assert from_str("{\"a\":1,") ==
|
|
702
|
-
err({line: 1u, col: 8u, msg: "EOF while parsing object"});
|
|
703
|
-
|
|
704
|
-
assert eq(result::get(from_str("{}")), mk_dict([]));
|
|
705
|
-
assert eq(result::get(from_str("{\"a\": 3}")),
|
|
706
|
-
mk_dict([("a", num(3.0f))]));
|
|
707
|
-
|
|
708
|
-
assert eq(result::get(from_str("{ \"a\": null, \"b\" : true }")),
|
|
709
|
-
mk_dict([("a", null), ("b", boolean(true))]));
|
|
710
|
-
assert eq(result::get(from_str("\n{ \"a\": null, \"b\" : true }\n")),
|
|
711
|
-
mk_dict([("a", null), ("b", boolean(true))]));
|
|
712
|
-
assert eq(result::get(from_str("{\"a\" : 1.0 ,\"b\": [ true ]}")),
|
|
713
|
-
mk_dict([
|
|
714
|
-
("a", num(1.0)),
|
|
715
|
-
("b", list([boolean(true)]))
|
|
716
|
-
]));
|
|
717
|
-
assert eq(result::get(from_str(
|
|
718
|
-
"{" +
|
|
719
|
-
"\"a\": 1.0, " +
|
|
720
|
-
"\"b\": [" +
|
|
721
|
-
"true," +
|
|
722
|
-
"\"foo\\nbar\", " +
|
|
723
|
-
"{ \"c\": {\"d\": null} } " +
|
|
724
|
-
"]" +
|
|
725
|
-
"}")),
|
|
726
|
-
mk_dict([
|
|
727
|
-
("a", num(1.0f)),
|
|
728
|
-
("b", list([
|
|
729
|
-
boolean(true),
|
|
730
|
-
string("foo\nbar"),
|
|
731
|
-
mk_dict([
|
|
732
|
-
("c", mk_dict([("d", null)]))
|
|
733
|
-
])
|
|
734
|
-
]))
|
|
735
|
-
]));
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
#[test]
|
|
739
|
-
fn test_multiline_errors() {
|
|
740
|
-
assert from_str("{\n \"foo\":\n \"bar\"") ==
|
|
741
|
-
err({line: 3u, col: 8u, msg: "EOF while parsing object"});
|
|
742
|
-
}
|
|
743
233
|
}
|