mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Merge branch 'master' into 2821-slim
This commit is contained in:
3
samples/CSV/cars.csv
Normal file
3
samples/CSV/cars.csv
Normal file
@@ -0,0 +1,3 @@
|
||||
Year,Make,Model,Length
|
||||
1997,Ford,E350,2.34
|
||||
2000,Mercury,Cougar,2.38
|
||||
|
54
samples/FLUX/gameserver.fx
Normal file
54
samples/FLUX/gameserver.fx
Normal file
@@ -0,0 +1,54 @@
|
||||
typedef engine isEngineMessage;
|
||||
typedef turn isTurnMessage;
|
||||
typedef connect isConnectMessage;
|
||||
typedef disconnect isDisconnectMessage;
|
||||
|
||||
ClientMessage(char* data) => ();
|
||||
ParseMessage(char* data) => (int type, int client, char* data);
|
||||
ReadMessage(int type, int client, char* data) => ();
|
||||
|
||||
ParseEngine(int type, int client, char* data) => (int client, int direction);
|
||||
DoEngine(int client, int direction) => ();
|
||||
|
||||
ParseTurn(int type, int client, char* data) => (int client, int direction);
|
||||
DoTurn(int client, int direction) => ();
|
||||
|
||||
ParseConnect(int type, int client, char* data)
|
||||
=> (int client, char* host, int port);
|
||||
DoConnect(int client, char* host, int port) => ();
|
||||
|
||||
ParseDisconnect(int type, int client, char* data) => (int client);
|
||||
DoDisconnect(int client) => ();
|
||||
|
||||
UpdateBoard(ClientList clients) => (ClientList clients);
|
||||
SendData(ClientList clients) => ();
|
||||
|
||||
DoUpdate(ClientList clients) => ();
|
||||
|
||||
DataTimer() => (ClientList clients);
|
||||
|
||||
GetClients() => (ClientList clients);
|
||||
|
||||
Wait(ClientList clients) => (ClientList clients);
|
||||
|
||||
Listen () => (char* data);
|
||||
|
||||
source Listen => ClientMessage;
|
||||
source DataTimer => DoUpdate;
|
||||
|
||||
DataTimer = GetClients -> Wait;
|
||||
|
||||
DoUpdate = UpdateBoard -> SendData;
|
||||
|
||||
ClientMessage=ParseMessage -> ReadMessage;
|
||||
|
||||
ReadMessage:[engine, _, _] = ParseEngine -> DoEngine;
|
||||
ReadMessage:[turn, _, _] = ParseTurn -> DoTurn;
|
||||
ReadMessage:[connect, _, _] = ParseConnect -> DoConnect;
|
||||
ReadMessage:[disconnect, _, _] = ParseDisconnect -> DoDisconnect;
|
||||
|
||||
atomic GetClients:{client_lock};
|
||||
atomic DoConnect:{client_lock};
|
||||
atomic DoDisconnect:{client_lock};
|
||||
|
||||
|
||||
44
samples/FLUX/imageserver.fx
Normal file
44
samples/FLUX/imageserver.fx
Normal file
@@ -0,0 +1,44 @@
|
||||
typedef xml TestXML;
|
||||
typedef html TestHTML;
|
||||
|
||||
typedef inCache TestInCache;
|
||||
|
||||
Page (int socket) => ();
|
||||
|
||||
ReadRequest (int socket) => (int socket, bool close, image_tag *request);
|
||||
|
||||
CheckCache (int socket, bool close, image_tag *request)
|
||||
=> (int socket, bool close, image_tag *request);
|
||||
|
||||
Handler (int socket, bool close, image_tag *request)
|
||||
=> (int socket, bool close, image_tag *request);
|
||||
|
||||
Complete (int socket, bool close, image_tag *request) => ();
|
||||
|
||||
ReadInFromDisk (int socket, bool close, image_tag *request)
|
||||
=> (int socket, bool close, image_tag *request, __u8 *rgb_data);
|
||||
|
||||
Write (int socket, bool close, image_tag *request)
|
||||
=> (int socket, bool close, image_tag *request);
|
||||
|
||||
Compress(int socket, bool close, image_tag *request, __u8 *rgb_data)
|
||||
=> (int socket, bool close, image_tag *request);
|
||||
|
||||
StoreInCache(int socket, bool close, image_tag *request)
|
||||
=> (int socket, bool close, image_tag *request);
|
||||
|
||||
Listen ()
|
||||
=> (int socket);
|
||||
|
||||
source Listen => Page;
|
||||
|
||||
Handler:[_, _, inCache]=;
|
||||
Handler:[_, _, _]=ReadInFromDisk -> Compress -> StoreInCache;
|
||||
|
||||
Page = ReadRequest -> CheckCache-> Handler -> Write -> Complete;
|
||||
|
||||
atomic CheckCache:{cache};
|
||||
atomic StoreInCache:{cache};
|
||||
atomic Complete:{cache};
|
||||
|
||||
handle error ReadInFromDisk => FourOhFor;
|
||||
151
samples/FLUX/mbittorrent.fx
Normal file
151
samples/FLUX/mbittorrent.fx
Normal file
@@ -0,0 +1,151 @@
|
||||
typedef choke TestChoke;
|
||||
typedef unchoke TestUnchoke;
|
||||
typedef interested TestInterested;
|
||||
typedef uninterested TestUninterested;
|
||||
typedef request TestRequest;
|
||||
typedef cancel TestCancel;
|
||||
typedef piece TestPiece;
|
||||
typedef bitfield TestBitfield;
|
||||
typedef have TestHave;
|
||||
typedef piececomplete TestPieceComplete;
|
||||
|
||||
CheckinWithTracker (torrent_data_t *tdata)
|
||||
=> ();
|
||||
|
||||
SendRequestToTracker (torrent_data_t *tdata)
|
||||
=> (torrent_data_t *tdata, int socket);
|
||||
|
||||
GetTrackerResponse (torrent_data_t *tdata, int socket)
|
||||
=> ();
|
||||
|
||||
UpdateChokeList (torrent_data_t *tdata)
|
||||
=> ();
|
||||
|
||||
PickChoked (torrent_data_t *tdata)
|
||||
=> (torrent_data_t *tdata, chokelist_t clist);
|
||||
|
||||
SendChokeUnchoke (torrent_data_t *tdata, chokelist_t clist)
|
||||
=> ();
|
||||
|
||||
SetupConnection (torrent_data_t *tdata, int socket)
|
||||
=> ();
|
||||
|
||||
Handshake (torrent_data_t *tdata, int socket)
|
||||
=> (torrent_data_t *tdata, client_data_t *client);
|
||||
|
||||
SendBitfield (torrent_data_t *tdata, client_data_t *client)
|
||||
=> ();
|
||||
|
||||
Message (torrent_data_t *tdata, client_data_t *client)
|
||||
=> ();
|
||||
|
||||
ReadMessage (torrent_data_t *tdata, client_data_t *client)
|
||||
=> (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload);
|
||||
|
||||
HandleMessage (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (client_data_t *client);
|
||||
|
||||
MessageDone (client_data_t *client)
|
||||
=> ();
|
||||
|
||||
CompletePiece (torrent_data_t *tdata, client_data_t *client, int piece)
|
||||
=> (torrent_data_t *tdata, client_data_t *client);
|
||||
|
||||
VerifyPiece (torrent_data_t *tdata, client_data_t *client, int piece)
|
||||
=> (torrent_data_t *tdata, client_data_t *client, int piece);
|
||||
|
||||
SendHave (torrent_data_t *tdata, client_data_t *client, int piece)
|
||||
=> (torrent_data_t *tdata, client_data_t *client);
|
||||
|
||||
SendUninterested (torrent_data_t *tdata, client_data_t *client)
|
||||
=> (torrent_data_t *tdata, client_data_t *client);
|
||||
|
||||
Choke (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (client_data_t *client);
|
||||
|
||||
Cancel (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (client_data_t *client);
|
||||
|
||||
Interested (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (client_data_t *client);
|
||||
|
||||
Uninterested (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (client_data_t *client);
|
||||
|
||||
Bitfield (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (client_data_t *client);
|
||||
|
||||
Unchoke (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (torrent_data_t *tdata, client_data_t *client);
|
||||
|
||||
SendRequest (torrent_data_t *tdata, client_data_t *client)
|
||||
=> (client_data_t *client);
|
||||
|
||||
Have (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (torrent_data_t *tdata, client_data_t *client);
|
||||
|
||||
Piece (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (torrent_data_t *tdata, client_data_t *client, int piece);
|
||||
|
||||
Request (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
|
||||
=> (client_data_t *client);
|
||||
|
||||
SendKeepAlives (torrent_data_t *tdata)
|
||||
=> ();
|
||||
|
||||
GetClients ()
|
||||
=> (int maxfd, fd_set *fds);
|
||||
|
||||
SelectSockets (int maxfd, fd_set *fds)
|
||||
=> (fd_set *fds);
|
||||
|
||||
CheckSockets (fd_set *fds)
|
||||
=> (torrent_data_t *tdata, client_data_t *client);
|
||||
|
||||
TrackerTimer ()
|
||||
=> (torrent_data_t *tdata);
|
||||
|
||||
ChokeTimer ()
|
||||
=> (torrent_data_t *tdata);
|
||||
|
||||
Connect ()
|
||||
=> (torrent_data_t *tdata, int socket);
|
||||
|
||||
KeepAliveTimer ()
|
||||
=> (torrent_data_t *tdata);
|
||||
|
||||
Listen ()
|
||||
=> (torrent_data_t *tdata, client_data_t *client);
|
||||
|
||||
source TrackerTimer => CheckinWithTracker;
|
||||
source ChokeTimer => UpdateChokeList;
|
||||
source Connect => SetupConnection;
|
||||
source Listen => Message;
|
||||
source KeepAliveTimer => SendKeepAlives;
|
||||
|
||||
Listen = GetClients -> SelectSockets -> CheckSockets;
|
||||
CheckinWithTracker = SendRequestToTracker -> GetTrackerResponse;
|
||||
UpdateChokeList = PickChoked -> SendChokeUnchoke;
|
||||
SetupConnection = Handshake -> SendBitfield;
|
||||
Message = ReadMessage -> HandleMessage -> MessageDone;
|
||||
|
||||
CompletePiece:[_, _, piececomplete] = VerifyPiece -> SendHave -> SendUninterested;
|
||||
|
||||
HandleMessage:[_, _, choke, _, _] = Choke;
|
||||
HandleMessage:[_, _, unchoke, _, _] = Unchoke -> SendRequest;
|
||||
HandleMessage:[_, _, interested, _, _] = Interested;
|
||||
|
||||
HandleMessage:[_, _, uninterested, _, _] = Uninterested;
|
||||
HandleMessage:[_, _, request, _, _] = Request;
|
||||
HandleMessage:[_, _, cancel, _, _] = Cancel;
|
||||
HandleMessage:[_, _, piece, _, _] = Piece -> CompletePiece -> SendRequest;
|
||||
HandleMessage:[_, _, bitfield, _, _] = Bitfield;
|
||||
HandleMessage:[_, _, have, _, _] = Have -> SendRequest;
|
||||
|
||||
atomic GetClients:{BigLock};
|
||||
atomic CheckSockets:{BigLock};
|
||||
atomic Message:{BigLock};
|
||||
atomic CheckinWithTracker:{BigLock};
|
||||
atomic UpdateChokeList:{BigLock};
|
||||
atomic SetupConnection:{BigLock};
|
||||
atomic SendKeepAlives:{BigLock};
|
||||
38
samples/FLUX/test.fx
Normal file
38
samples/FLUX/test.fx
Normal file
@@ -0,0 +1,38 @@
|
||||
// concrete node signatures
|
||||
Listen ()
|
||||
=> (int socket);
|
||||
|
||||
ReadRequest (int socket)
|
||||
=> (int socket, bool close, image_tag *request);
|
||||
|
||||
CheckCache (int socket, bool close, image_tag *request)
|
||||
=> (int socket, bool close, image_tag *request);
|
||||
|
||||
// omitted for space:
|
||||
// ReadInFromDisk, StoreInCache
|
||||
Compress (int socket, bool close, image_tag *request, __u8 *rgb_data)
|
||||
=> (int socket, bool close, image_tag *request);
|
||||
Write (int socket, bool close, image_tag *request)
|
||||
=> (int socket, bool close, image_tag *request);
|
||||
Complete (int socket, bool close, image_tag *request) => ();
|
||||
|
||||
// source node
|
||||
source Listen => Image;
|
||||
|
||||
// abstract node
|
||||
Image = ReadRequest -> CheckCache -> Handler -> Write -> Complete;
|
||||
|
||||
// predicate type & dispatch
|
||||
typedef hit TestInCache;
|
||||
Handler:[_, _, hit] = ;
|
||||
Handler:[_, _, _] =
|
||||
ReadInFromDisk -> Compress -> StoreInCache;
|
||||
|
||||
// error handler
|
||||
handle error ReadInFromDisk => FourOhFor;
|
||||
|
||||
// atomicity constraints
|
||||
atomic CheckCache:{cache};
|
||||
atomic StoreInCache:{cache};
|
||||
atomic Complete:{cache};
|
||||
|
||||
46
samples/Groovy/filenames/Jenkinsfile
vendored
Normal file
46
samples/Groovy/filenames/Jenkinsfile
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
jettyUrl = 'http://localhost:8081/'
|
||||
|
||||
def servers
|
||||
|
||||
stage 'Dev'
|
||||
node {
|
||||
checkout scm
|
||||
servers = load 'servers.groovy'
|
||||
mvn '-o clean package'
|
||||
dir('target') {stash name: 'war', includes: 'x.war'}
|
||||
}
|
||||
|
||||
stage 'QA'
|
||||
parallel(longerTests: {
|
||||
runTests(servers, 30)
|
||||
}, quickerTests: {
|
||||
runTests(servers, 20)
|
||||
})
|
||||
|
||||
stage name: 'Staging', concurrency: 1
|
||||
node {
|
||||
servers.deploy 'staging'
|
||||
}
|
||||
|
||||
input message: "Does ${jettyUrl}staging/ look good?"
|
||||
|
||||
stage name: 'Production', concurrency: 1
|
||||
node {
|
||||
sh "wget -O - -S ${jettyUrl}staging/"
|
||||
echo 'Production server looks to be alive'
|
||||
servers.deploy 'production'
|
||||
echo "Deployed to ${jettyUrl}production/"
|
||||
}
|
||||
|
||||
def mvn(args) {
|
||||
sh "${tool 'Maven 3.x'}/bin/mvn ${args}"
|
||||
}
|
||||
|
||||
def runTests(servers, duration) {
|
||||
node {
|
||||
checkout scm
|
||||
servers.runWithServer {id ->
|
||||
mvn "-o -f sometests test -Durl=${jettyUrl}${id}/ -Dduration=${duration}"
|
||||
}
|
||||
}
|
||||
}
|
||||
27
samples/HLSL/accelerated_surface_win.hlsl
Normal file
27
samples/HLSL/accelerated_surface_win.hlsl
Normal file
@@ -0,0 +1,27 @@
|
||||
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// To compile these two shaders:
|
||||
// fxc /E pixelMain /T ps_2_0 accelerated_surface_win.hlsl
|
||||
// fxc /E vertexMain /T vs_2_0 accelerated_surface_win.hlsl
|
||||
//
|
||||
// fxc is in the DirectX SDK.
|
||||
|
||||
struct Vertex {
|
||||
float4 position : POSITION;
|
||||
float2 texCoord : TEXCOORD0;
|
||||
};
|
||||
|
||||
texture t;
|
||||
sampler s;
|
||||
|
||||
// Passes a position and texture coordinate to the pixel shader.
|
||||
Vertex vertexMain(Vertex input) {
|
||||
return input;
|
||||
};
|
||||
|
||||
// Samples a texture at the given texture coordinate and returns the result.
|
||||
float4 pixelMain(float2 texCoord : TEXCOORD0) : COLOR0 {
|
||||
return tex2D(s, texCoord);
|
||||
};
|
||||
105
samples/HLSL/corridor.fx
Normal file
105
samples/HLSL/corridor.fx
Normal file
@@ -0,0 +1,105 @@
|
||||
float4x4 matWorldView : WORLDVIEW;
|
||||
float4x4 matWorldViewProjection : WORLDVIEWPROJECTION;
|
||||
|
||||
struct VS_INPUT {
|
||||
float4 Position : POSITION0;
|
||||
float3 Normal : NORMAL;
|
||||
float3 Tangent : TANGENT;
|
||||
float3 Binormal : BINORMAL;
|
||||
float2 TexCoord0 : TEXCOORD0;
|
||||
float2 TexCoord1 : TEXCOORD1;
|
||||
};
|
||||
|
||||
struct VS_OUTPUT {
|
||||
float4 Position : POSITION0;
|
||||
float2 TexCoord0 : TEXCOORD0;
|
||||
float2 TexCoord1 : TEXCOORD1;
|
||||
float3x3 TangentToView : TEXCOORD2;
|
||||
};
|
||||
|
||||
VS_OUTPUT vs_main(VS_INPUT input)
|
||||
{
|
||||
VS_OUTPUT output;
|
||||
output.Position = mul(input.Position, matWorldViewProjection);
|
||||
output.TexCoord0 = input.TexCoord0 * 5;
|
||||
output.TexCoord1 = input.TexCoord1;
|
||||
output.TangentToView[0] = mul(float4(input.Tangent, 0), matWorldView).xyz;
|
||||
output.TangentToView[1] = mul(float4(input.Binormal, 0), matWorldView).xyz;
|
||||
output.TangentToView[2] = mul(float4(input.Normal, 0), matWorldView).xyz;
|
||||
return output;
|
||||
}
|
||||
|
||||
struct PS_OUTPUT {
|
||||
float4 gbuffer0 : COLOR0;
|
||||
float4 gbuffer1 : COLOR1;
|
||||
};
|
||||
|
||||
texture albedo_tex;
|
||||
sampler albedo_samp = sampler_state {
|
||||
Texture = (albedo_tex);
|
||||
MipFilter = Linear;
|
||||
MinFilter = Linear;
|
||||
MagFilter = Linear;
|
||||
AddressU = Wrap;
|
||||
AddressV = Wrap;
|
||||
sRGBTexture = True;
|
||||
};
|
||||
|
||||
texture normal_tex;
|
||||
sampler normal_samp = sampler_state {
|
||||
Texture = (normal_tex);
|
||||
MipFilter = Linear;
|
||||
MinFilter = Linear;
|
||||
MagFilter = Linear;
|
||||
AddressU = Wrap;
|
||||
AddressV = Wrap;
|
||||
sRGBTexture = False;
|
||||
};
|
||||
|
||||
texture specular_tex;
|
||||
sampler specular_samp = sampler_state {
|
||||
Texture = (specular_tex);
|
||||
MipFilter = Linear;
|
||||
MinFilter = Linear;
|
||||
MagFilter = Linear;
|
||||
AddressU = Wrap;
|
||||
AddressV = Wrap;
|
||||
sRGBTexture = True;
|
||||
};
|
||||
|
||||
texture ao_tex;
|
||||
sampler ao_samp = sampler_state {
|
||||
Texture = (ao_tex);
|
||||
MipFilter = Linear;
|
||||
MinFilter = Linear;
|
||||
MagFilter = Linear;
|
||||
AddressU = Wrap;
|
||||
AddressV = Wrap;
|
||||
sRGBTexture = True;
|
||||
};
|
||||
|
||||
PS_OUTPUT ps_main(VS_OUTPUT Input)
|
||||
{
|
||||
PS_OUTPUT o;
|
||||
|
||||
float3 tangentNormal = normalize(tex2D(normal_samp, Input.TexCoord0).xyz * 2 - 1);
|
||||
float3 eyeNormal = normalize(mul(tangentNormal, Input.TangentToView));
|
||||
|
||||
float3 albedo = tex2D(albedo_samp, Input.TexCoord0).rgb;
|
||||
float ao = tex2D(ao_samp, Input.TexCoord1).r * 0.75;
|
||||
float spec = tex2D(specular_samp, Input.TexCoord0).r;
|
||||
|
||||
o.gbuffer0 = float4(eyeNormal, spec * ao);
|
||||
o.gbuffer1 = float4(albedo, 1 - ao);
|
||||
return o;
|
||||
}
|
||||
|
||||
technique mesh {
|
||||
pass Geometry {
|
||||
VertexShader = compile vs_3_0 vs_main();
|
||||
PixelShader = compile ps_3_0 ps_main();
|
||||
|
||||
AlphaBlendEnable = False;
|
||||
ZWriteEnable = True;
|
||||
}
|
||||
}
|
||||
119
samples/HLSL/jellyfish.fx
Normal file
119
samples/HLSL/jellyfish.fx
Normal file
@@ -0,0 +1,119 @@
|
||||
float4x4 matWorldViewProjection : WORLDVIEWPROJECTION;
|
||||
float4x4 matWorldView : WORLDVIEW;
|
||||
float4x4 matWorld : WORLD;
|
||||
float4x4 matView : VIEW;
|
||||
|
||||
uniform float4 vViewPosition;
|
||||
|
||||
struct VS_INPUT
|
||||
{
|
||||
float3 Pos: POSITION;
|
||||
float3 Normal: NORMAL;
|
||||
float3 Tangent: TANGENT;
|
||||
float3 Binormal: BINORMAL;
|
||||
};
|
||||
|
||||
struct VS_OUTPUT
|
||||
{
|
||||
float4 Pos : POSITION;
|
||||
float3 reflection : TEXCOORD1;
|
||||
float3 refraction : TEXCOORD2;
|
||||
float fresnel : TEXCOORD3;
|
||||
};
|
||||
|
||||
uniform float3 amt;
|
||||
uniform float3 scale;
|
||||
uniform float3 phase;
|
||||
|
||||
float3 deform(float3 p)
|
||||
{
|
||||
float s = 3;
|
||||
float3 p2 = p * scale + phase;
|
||||
s += sin(p2.x) * amt.x;
|
||||
s += sin(p2.y) * amt.y;
|
||||
s += sin(p2.z) * amt.z;
|
||||
return p * s / 3;
|
||||
}
|
||||
|
||||
VS_OUTPUT vs_main( VS_INPUT In )
|
||||
{
|
||||
VS_OUTPUT Out;
|
||||
|
||||
float3 pos = In.Pos;
|
||||
float3 norm = In.Normal;
|
||||
|
||||
float3 p1 = pos + In.Tangent * 0.05;
|
||||
float3 p2 = pos + In.Binormal * 0.05;
|
||||
pos = deform(pos);
|
||||
p1 = deform(p1);
|
||||
p2 = deform(p2);
|
||||
|
||||
p1 -= pos;
|
||||
p2 -= pos;
|
||||
norm = normalize(cross(p1, p2));
|
||||
|
||||
float3 view = normalize(pos - vViewPosition.xyz);
|
||||
|
||||
Out.Pos = mul(float4(pos, 1.0), matWorldViewProjection);
|
||||
Out.reflection = reflect(view, norm);
|
||||
Out.refraction = reflect(view, norm * 0.4f); /* fake, but who cares? */
|
||||
Out.fresnel = dot(view, norm);
|
||||
norm = mul(float4(norm, 0.0), matWorldViewProjection);
|
||||
|
||||
return Out;
|
||||
}
|
||||
|
||||
#define PS_INPUT VS_OUTPUT
|
||||
|
||||
#if 0
|
||||
textureCUBE reflectionMap;
|
||||
samplerCUBE reflectionMapSampler = sampler_state
|
||||
{
|
||||
Texture = (reflectionMap);
|
||||
MipFilter = LINEAR;
|
||||
MinFilter = LINEAR;
|
||||
MagFilter = LINEAR;
|
||||
};
|
||||
#else
|
||||
// textures
|
||||
texture reflectionMap
|
||||
<
|
||||
string type = "CUBE";
|
||||
string name = "test_cube.dds";
|
||||
>;
|
||||
|
||||
samplerCUBE reflectionMapSampler = sampler_state
|
||||
{
|
||||
Texture = (reflectionMap);
|
||||
MipFilter = LINEAR;
|
||||
MinFilter = LINEAR;
|
||||
MagFilter = LINEAR;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct PS_OUTPUT
|
||||
{
|
||||
float4 color : COLOR0;
|
||||
};
|
||||
|
||||
PS_OUTPUT ps_main( PS_INPUT In )
|
||||
{
|
||||
PS_OUTPUT Out;
|
||||
|
||||
float4 reflection = texCUBE(reflectionMapSampler, normalize(In.reflection)) * 1.5;
|
||||
float4 refraction = texCUBE(reflectionMapSampler, normalize(In.refraction));
|
||||
float fresnel = In.fresnel;
|
||||
// float fresnel = abs(normalize(In.normal).z);
|
||||
Out.color = lerp(reflection, refraction, fresnel) * pow(1.0 - fresnel * 0.75, 1.0);
|
||||
|
||||
return Out;
|
||||
}
|
||||
|
||||
technique blur_ps_vs_2_0
|
||||
{
|
||||
pass P0
|
||||
{
|
||||
VertexShader = compile vs_2_0 vs_main();
|
||||
PixelShader = compile ps_2_0 ps_main();
|
||||
}
|
||||
}
|
||||
41
samples/HLSL/noise.fx
Normal file
41
samples/HLSL/noise.fx
Normal file
@@ -0,0 +1,41 @@
|
||||
float alpha = 1.f;
|
||||
|
||||
texture tex;
|
||||
sampler tex_sampler = sampler_state
|
||||
{
|
||||
Texture = (tex);
|
||||
MipFilter = LINEAR;
|
||||
MinFilter = LINEAR;
|
||||
MagFilter = LINEAR;
|
||||
|
||||
AddressU = WRAP;
|
||||
AddressV = WRAP;
|
||||
};
|
||||
|
||||
struct VS_OUTPUT
|
||||
{
|
||||
float4 pos : POSITION;
|
||||
float2 tex : TEXCOORD1;
|
||||
};
|
||||
|
||||
VS_OUTPUT vertex(float4 ipos : POSITION, float2 tex : TEXCOORD0)
|
||||
{
|
||||
VS_OUTPUT Out;
|
||||
Out.pos = ipos;
|
||||
Out.tex = tex * 2;
|
||||
return Out;
|
||||
}
|
||||
|
||||
float4 pixel(VS_OUTPUT In) : COLOR
|
||||
{
|
||||
return tex2D(tex_sampler, In.tex) * alpha;
|
||||
}
|
||||
|
||||
technique blur_ps_vs_2_0
|
||||
{
|
||||
pass P0
|
||||
{
|
||||
VertexShader = compile vs_2_0 vertex();
|
||||
PixelShader = compile ps_2_0 pixel();
|
||||
}
|
||||
}
|
||||
625
samples/Java/GrammarKit.java
Normal file
625
samples/Java/GrammarKit.java
Normal file
@@ -0,0 +1,625 @@
|
||||
// This is a generated file. Not intended for manual editing.
|
||||
package org.intellij.grammar.parser;
|
||||
|
||||
import com.intellij.lang.PsiBuilder;
|
||||
import com.intellij.lang.PsiBuilder.Marker;
|
||||
import static org.intellij.grammar.psi.BnfTypes.*;
|
||||
import static org.intellij.grammar.parser.GeneratedParserUtilBase.*;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import com.intellij.lang.PsiParser;
|
||||
import com.intellij.lang.LightPsiParser;
|
||||
|
||||
@SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"})
|
||||
public class GrammarParser implements PsiParser, LightPsiParser {
|
||||
|
||||
public ASTNode parse(IElementType t, PsiBuilder b) {
|
||||
parseLight(t, b);
|
||||
return b.getTreeBuilt();
|
||||
}
|
||||
|
||||
public void parseLight(IElementType t, PsiBuilder b) {
|
||||
boolean r;
|
||||
b = adapt_builder_(t, b, this, EXTENDS_SETS_);
|
||||
Marker m = enter_section_(b, 0, _COLLAPSE_, null);
|
||||
if (t == BNF_ATTR) {
|
||||
r = attr(b, 0);
|
||||
}
|
||||
else if (t == BNF_ATTR_PATTERN) {
|
||||
r = attr_pattern(b, 0);
|
||||
}
|
||||
else if (t == BNF_ATTR_VALUE) {
|
||||
r = attr_value(b, 0);
|
||||
}
|
||||
else if (t == BNF_ATTRS) {
|
||||
r = attrs(b, 0);
|
||||
}
|
||||
else if (t == BNF_CHOICE) {
|
||||
r = choice(b, 0);
|
||||
}
|
||||
else if (t == BNF_EXPRESSION) {
|
||||
r = expression(b, 0);
|
||||
}
|
||||
else if (t == BNF_LITERAL_EXPRESSION) {
|
||||
r = literal_expression(b, 0);
|
||||
}
|
||||
else if (t == BNF_MODIFIER) {
|
||||
r = modifier(b, 0);
|
||||
}
|
||||
else if (t == BNF_PAREN_EXPRESSION) {
|
||||
r = paren_expression(b, 0);
|
||||
}
|
||||
else if (t == BNF_PREDICATE) {
|
||||
r = predicate(b, 0);
|
||||
}
|
||||
else if (t == BNF_PREDICATE_SIGN) {
|
||||
r = predicate_sign(b, 0);
|
||||
}
|
||||
else if (t == BNF_QUANTIFIED) {
|
||||
r = quantified(b, 0);
|
||||
}
|
||||
else if (t == BNF_QUANTIFIER) {
|
||||
r = quantifier(b, 0);
|
||||
}
|
||||
else if (t == BNF_REFERENCE_OR_TOKEN) {
|
||||
r = reference_or_token(b, 0);
|
||||
}
|
||||
else if (t == BNF_RULE) {
|
||||
r = rule(b, 0);
|
||||
}
|
||||
else if (t == BNF_SEQUENCE) {
|
||||
r = sequence(b, 0);
|
||||
}
|
||||
else if (t == BNF_STRING_LITERAL_EXPRESSION) {
|
||||
r = string_literal_expression(b, 0);
|
||||
}
|
||||
else {
|
||||
r = parse_root_(t, b, 0);
|
||||
}
|
||||
exit_section_(b, 0, m, t, r, true, TRUE_CONDITION);
|
||||
}
|
||||
|
||||
protected boolean parse_root_(IElementType t, PsiBuilder b, int l) {
|
||||
return grammar(b, l + 1);
|
||||
}
|
||||
|
||||
public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[] {
|
||||
create_token_set_(BNF_LITERAL_EXPRESSION, BNF_STRING_LITERAL_EXPRESSION),
|
||||
create_token_set_(BNF_CHOICE, BNF_EXPRESSION, BNF_LITERAL_EXPRESSION, BNF_PAREN_EXPRESSION,
|
||||
BNF_PREDICATE, BNF_QUANTIFIED, BNF_REFERENCE_OR_TOKEN, BNF_SEQUENCE,
|
||||
BNF_STRING_LITERAL_EXPRESSION),
|
||||
};
|
||||
|
||||
/* ********************************************************** */
|
||||
// id attr_pattern? '=' attr_value ';'?
|
||||
public static boolean attr(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attr")) return false;
|
||||
boolean r, p;
|
||||
Marker m = enter_section_(b, l, _NONE_, "<attr>");
|
||||
r = consumeToken(b, BNF_ID);
|
||||
p = r; // pin = 1
|
||||
r = r && report_error_(b, attr_1(b, l + 1));
|
||||
r = p && report_error_(b, consumeToken(b, BNF_OP_EQ)) && r;
|
||||
r = p && report_error_(b, attr_value(b, l + 1)) && r;
|
||||
r = p && attr_4(b, l + 1) && r;
|
||||
exit_section_(b, l, m, BNF_ATTR, r, p, attr_recover_until_parser_);
|
||||
return r || p;
|
||||
}
|
||||
|
||||
// attr_pattern?
|
||||
private static boolean attr_1(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attr_1")) return false;
|
||||
attr_pattern(b, l + 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ';'?
|
||||
private static boolean attr_4(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attr_4")) return false;
|
||||
consumeToken(b, BNF_SEMICOLON);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// '(' string ')'
|
||||
public static boolean attr_pattern(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attr_pattern")) return false;
|
||||
if (!nextTokenIs(b, BNF_LEFT_PAREN)) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = consumeToken(b, BNF_LEFT_PAREN);
|
||||
r = r && consumeToken(b, BNF_STRING);
|
||||
r = r && consumeToken(b, BNF_RIGHT_PAREN);
|
||||
exit_section_(b, m, BNF_ATTR_PATTERN, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// !'}'
|
||||
static boolean attr_recover_until(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attr_recover_until")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _NOT_, null);
|
||||
r = !consumeToken(b, BNF_RIGHT_BRACE);
|
||||
exit_section_(b, l, m, null, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// (reference_or_token | literal_expression) !'='
|
||||
public static boolean attr_value(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attr_value")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _NONE_, "<attr value>");
|
||||
r = attr_value_0(b, l + 1);
|
||||
r = r && attr_value_1(b, l + 1);
|
||||
exit_section_(b, l, m, BNF_ATTR_VALUE, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
// reference_or_token | literal_expression
|
||||
private static boolean attr_value_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attr_value_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = reference_or_token(b, l + 1);
|
||||
if (!r) r = literal_expression(b, l + 1);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// !'='
|
||||
private static boolean attr_value_1(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attr_value_1")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _NOT_, null);
|
||||
r = !consumeToken(b, BNF_OP_EQ);
|
||||
exit_section_(b, l, m, null, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// '{' attr* '}'
|
||||
public static boolean attrs(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attrs")) return false;
|
||||
if (!nextTokenIs(b, BNF_LEFT_BRACE)) return false;
|
||||
boolean r, p;
|
||||
Marker m = enter_section_(b, l, _NONE_, null);
|
||||
r = consumeToken(b, BNF_LEFT_BRACE);
|
||||
p = r; // pin = 1
|
||||
r = r && report_error_(b, attrs_1(b, l + 1));
|
||||
r = p && consumeToken(b, BNF_RIGHT_BRACE) && r;
|
||||
exit_section_(b, l, m, BNF_ATTRS, r, p, null);
|
||||
return r || p;
|
||||
}
|
||||
|
||||
// attr*
|
||||
private static boolean attrs_1(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "attrs_1")) return false;
|
||||
int c = current_position_(b);
|
||||
while (true) {
|
||||
if (!attr(b, l + 1)) break;
|
||||
if (!empty_element_parsed_guard_(b, "attrs_1", c)) break;
|
||||
c = current_position_(b);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// '{' sequence ('|' sequence)* '}' | sequence choice_tail*
|
||||
public static boolean choice(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "choice")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _COLLAPSE_, "<choice>");
|
||||
r = choice_0(b, l + 1);
|
||||
if (!r) r = choice_1(b, l + 1);
|
||||
exit_section_(b, l, m, BNF_CHOICE, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
// '{' sequence ('|' sequence)* '}'
|
||||
private static boolean choice_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "choice_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = consumeToken(b, BNF_LEFT_BRACE);
|
||||
r = r && sequence(b, l + 1);
|
||||
r = r && choice_0_2(b, l + 1);
|
||||
r = r && consumeToken(b, BNF_RIGHT_BRACE);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// ('|' sequence)*
|
||||
private static boolean choice_0_2(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "choice_0_2")) return false;
|
||||
int c = current_position_(b);
|
||||
while (true) {
|
||||
if (!choice_0_2_0(b, l + 1)) break;
|
||||
if (!empty_element_parsed_guard_(b, "choice_0_2", c)) break;
|
||||
c = current_position_(b);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// '|' sequence
|
||||
private static boolean choice_0_2_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "choice_0_2_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = consumeToken(b, BNF_OP_OR);
|
||||
r = r && sequence(b, l + 1);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// sequence choice_tail*
|
||||
private static boolean choice_1(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "choice_1")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = sequence(b, l + 1);
|
||||
r = r && choice_1_1(b, l + 1);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// choice_tail*
|
||||
private static boolean choice_1_1(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "choice_1_1")) return false;
|
||||
int c = current_position_(b);
|
||||
while (true) {
|
||||
if (!choice_tail(b, l + 1)) break;
|
||||
if (!empty_element_parsed_guard_(b, "choice_1_1", c)) break;
|
||||
c = current_position_(b);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// '|' sequence
|
||||
static boolean choice_tail(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "choice_tail")) return false;
|
||||
if (!nextTokenIs(b, BNF_OP_OR)) return false;
|
||||
boolean r, p;
|
||||
Marker m = enter_section_(b, l, _NONE_, null);
|
||||
r = consumeToken(b, BNF_OP_OR);
|
||||
p = r; // pin = 1
|
||||
r = r && sequence(b, l + 1);
|
||||
exit_section_(b, l, m, null, r, p, null);
|
||||
return r || p;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// choice?
|
||||
public static boolean expression(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "expression")) return false;
|
||||
Marker m = enter_section_(b, l, _COLLAPSE_, "<expression>");
|
||||
choice(b, l + 1);
|
||||
exit_section_(b, l, m, BNF_EXPRESSION, true, false, null);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// (attrs | rule) *
|
||||
static boolean grammar(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "grammar")) return false;
|
||||
int c = current_position_(b);
|
||||
while (true) {
|
||||
if (!grammar_0(b, l + 1)) break;
|
||||
if (!empty_element_parsed_guard_(b, "grammar", c)) break;
|
||||
c = current_position_(b);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// attrs | rule
|
||||
private static boolean grammar_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "grammar_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = attrs(b, l + 1);
|
||||
if (!r) r = rule(b, l + 1);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// string_literal_expression | number
|
||||
public static boolean literal_expression(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "literal_expression")) return false;
|
||||
if (!nextTokenIs(b, "<literal expression>", BNF_NUMBER, BNF_STRING)) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _COLLAPSE_, "<literal expression>");
|
||||
r = string_literal_expression(b, l + 1);
|
||||
if (!r) r = consumeToken(b, BNF_NUMBER);
|
||||
exit_section_(b, l, m, BNF_LITERAL_EXPRESSION, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// 'private' | 'external' | 'wrapped'
|
||||
public static boolean modifier(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "modifier")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _NONE_, "<modifier>");
|
||||
r = consumeToken(b, "private");
|
||||
if (!r) r = consumeToken(b, "external");
|
||||
if (!r) r = consumeToken(b, "wrapped");
|
||||
exit_section_(b, l, m, BNF_MODIFIER, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// quantified | predicate
|
||||
static boolean option(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "option")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = quantified(b, l + 1);
|
||||
if (!r) r = predicate(b, l + 1);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// '(' expression ')'
|
||||
public static boolean paren_expression(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "paren_expression")) return false;
|
||||
if (!nextTokenIs(b, BNF_LEFT_PAREN)) return false;
|
||||
boolean r, p;
|
||||
Marker m = enter_section_(b, l, _NONE_, null);
|
||||
r = consumeToken(b, BNF_LEFT_PAREN);
|
||||
p = r; // pin = 1
|
||||
r = r && report_error_(b, expression(b, l + 1));
|
||||
r = p && consumeToken(b, BNF_RIGHT_PAREN) && r;
|
||||
exit_section_(b, l, m, BNF_PAREN_EXPRESSION, r, p, null);
|
||||
return r || p;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// predicate_sign simple
|
||||
public static boolean predicate(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "predicate")) return false;
|
||||
if (!nextTokenIs(b, "<predicate>", BNF_OP_NOT, BNF_OP_AND)) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _NONE_, "<predicate>");
|
||||
r = predicate_sign(b, l + 1);
|
||||
r = r && simple(b, l + 1);
|
||||
exit_section_(b, l, m, BNF_PREDICATE, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// '&' | '!'
|
||||
public static boolean predicate_sign(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "predicate_sign")) return false;
|
||||
if (!nextTokenIs(b, "<predicate sign>", BNF_OP_NOT, BNF_OP_AND)) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _NONE_, "<predicate sign>");
|
||||
r = consumeToken(b, BNF_OP_AND);
|
||||
if (!r) r = consumeToken(b, BNF_OP_NOT);
|
||||
exit_section_(b, l, m, BNF_PREDICATE_SIGN, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// '[' expression ']' | simple quantifier?
|
||||
public static boolean quantified(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "quantified")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _COLLAPSE_, "<quantified>");
|
||||
r = quantified_0(b, l + 1);
|
||||
if (!r) r = quantified_1(b, l + 1);
|
||||
exit_section_(b, l, m, BNF_QUANTIFIED, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
// '[' expression ']'
|
||||
private static boolean quantified_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "quantified_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = consumeToken(b, BNF_LEFT_BRACKET);
|
||||
r = r && expression(b, l + 1);
|
||||
r = r && consumeToken(b, BNF_RIGHT_BRACKET);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// simple quantifier?
|
||||
private static boolean quantified_1(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "quantified_1")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = simple(b, l + 1);
|
||||
r = r && quantified_1_1(b, l + 1);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// quantifier?
|
||||
private static boolean quantified_1_1(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "quantified_1_1")) return false;
|
||||
quantifier(b, l + 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// '?' | '+' | '*'
|
||||
public static boolean quantifier(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "quantifier")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _NONE_, "<quantifier>");
|
||||
r = consumeToken(b, BNF_OP_OPT);
|
||||
if (!r) r = consumeToken(b, BNF_OP_ONEMORE);
|
||||
if (!r) r = consumeToken(b, BNF_OP_ZEROMORE);
|
||||
exit_section_(b, l, m, BNF_QUANTIFIER, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// id
|
||||
public static boolean reference_or_token(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "reference_or_token")) return false;
|
||||
if (!nextTokenIs(b, BNF_ID)) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = consumeToken(b, BNF_ID);
|
||||
exit_section_(b, m, BNF_REFERENCE_OR_TOKEN, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// modifier* id '::=' expression attrs? ';'?
|
||||
public static boolean rule(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "rule")) return false;
|
||||
boolean r, p;
|
||||
Marker m = enter_section_(b, l, _NONE_, "<rule>");
|
||||
r = rule_0(b, l + 1);
|
||||
r = r && consumeToken(b, BNF_ID);
|
||||
r = r && consumeToken(b, BNF_OP_IS);
|
||||
p = r; // pin = 3
|
||||
r = r && report_error_(b, expression(b, l + 1));
|
||||
r = p && report_error_(b, rule_4(b, l + 1)) && r;
|
||||
r = p && rule_5(b, l + 1) && r;
|
||||
exit_section_(b, l, m, BNF_RULE, r, p, rule_recover_until_parser_);
|
||||
return r || p;
|
||||
}
|
||||
|
||||
// modifier*
|
||||
private static boolean rule_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "rule_0")) return false;
|
||||
int c = current_position_(b);
|
||||
while (true) {
|
||||
if (!modifier(b, l + 1)) break;
|
||||
if (!empty_element_parsed_guard_(b, "rule_0", c)) break;
|
||||
c = current_position_(b);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// attrs?
|
||||
private static boolean rule_4(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "rule_4")) return false;
|
||||
attrs(b, l + 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ';'?
|
||||
private static boolean rule_5(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "rule_5")) return false;
|
||||
consumeToken(b, BNF_SEMICOLON);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// !'{'
|
||||
static boolean rule_recover_until(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "rule_recover_until")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _NOT_, null);
|
||||
r = !consumeToken(b, BNF_LEFT_BRACE);
|
||||
exit_section_(b, l, m, null, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// option +
|
||||
public static boolean sequence(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "sequence")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _COLLAPSE_, "<sequence>");
|
||||
r = option(b, l + 1);
|
||||
int c = current_position_(b);
|
||||
while (r) {
|
||||
if (!option(b, l + 1)) break;
|
||||
if (!empty_element_parsed_guard_(b, "sequence", c)) break;
|
||||
c = current_position_(b);
|
||||
}
|
||||
exit_section_(b, l, m, BNF_SEQUENCE, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// !(modifier* id '::=' ) reference_or_token | literal_expression | paren_expression
|
||||
static boolean simple(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "simple")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = simple_0(b, l + 1);
|
||||
if (!r) r = literal_expression(b, l + 1);
|
||||
if (!r) r = paren_expression(b, l + 1);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// !(modifier* id '::=' ) reference_or_token
|
||||
private static boolean simple_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "simple_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = simple_0_0(b, l + 1);
|
||||
r = r && reference_or_token(b, l + 1);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// !(modifier* id '::=' )
|
||||
private static boolean simple_0_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "simple_0_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b, l, _NOT_, null);
|
||||
r = !simple_0_0_0(b, l + 1);
|
||||
exit_section_(b, l, m, null, r, false, null);
|
||||
return r;
|
||||
}
|
||||
|
||||
// modifier* id '::='
|
||||
private static boolean simple_0_0_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "simple_0_0_0")) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = simple_0_0_0_0(b, l + 1);
|
||||
r = r && consumeToken(b, BNF_ID);
|
||||
r = r && consumeToken(b, BNF_OP_IS);
|
||||
exit_section_(b, m, null, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
// modifier*
|
||||
private static boolean simple_0_0_0_0(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "simple_0_0_0_0")) return false;
|
||||
int c = current_position_(b);
|
||||
while (true) {
|
||||
if (!modifier(b, l + 1)) break;
|
||||
if (!empty_element_parsed_guard_(b, "simple_0_0_0_0", c)) break;
|
||||
c = current_position_(b);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ********************************************************** */
|
||||
// string
|
||||
public static boolean string_literal_expression(PsiBuilder b, int l) {
|
||||
if (!recursion_guard_(b, l, "string_literal_expression")) return false;
|
||||
if (!nextTokenIs(b, BNF_STRING)) return false;
|
||||
boolean r;
|
||||
Marker m = enter_section_(b);
|
||||
r = consumeToken(b, BNF_STRING);
|
||||
exit_section_(b, m, BNF_STRING_LITERAL_EXPRESSION, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
final static Parser attr_recover_until_parser_ = new Parser() {
|
||||
public boolean parse(PsiBuilder b, int l) {
|
||||
return attr_recover_until(b, l + 1);
|
||||
}
|
||||
};
|
||||
final static Parser rule_recover_until_parser_ = new Parser() {
|
||||
public boolean parse(PsiBuilder b, int l) {
|
||||
return rule_recover_until(b, l + 1);
|
||||
}
|
||||
};
|
||||
}
|
||||
482
samples/Java/JFlexLexer.java
Normal file
482
samples/Java/JFlexLexer.java
Normal file
@@ -0,0 +1,482 @@
|
||||
/* The following code was generated by JFlex 1.4.3 on 28/01/16 11:27 */
|
||||
|
||||
package test;
|
||||
import com.intellij.lexer.*;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import static org.intellij.grammar.psi.BnfTypes.*;
|
||||
|
||||
|
||||
/**
|
||||
* This class is a scanner generated by
|
||||
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
|
||||
* on 28/01/16 11:27 from the specification file
|
||||
* <tt>/home/abigail/code/intellij-grammar-kit-test/src/test/_GrammarLexer.flex</tt>
|
||||
*/
|
||||
public class _GrammarLexer implements FlexLexer {
|
||||
/** initial size of the lookahead buffer */
|
||||
private static final int ZZ_BUFFERSIZE = 16384;
|
||||
|
||||
/** lexical states */
|
||||
public static final int YYINITIAL = 0;
|
||||
|
||||
/**
|
||||
* ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
|
||||
* ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
|
||||
* at the beginning of a line
|
||||
* l is of the form l = 2*k, k a non negative integer
|
||||
*/
|
||||
private static final int ZZ_LEXSTATE[] = {
|
||||
0, 0
|
||||
};
|
||||
|
||||
/**
|
||||
* Translates characters to character classes
|
||||
*/
|
||||
private static final String ZZ_CMAP_PACKED =
|
||||
"\11\0\1\1\1\1\1\0\1\1\1\1\22\0\1\1\101\0\1\13"+
|
||||
"\1\0\1\3\1\14\1\0\1\10\1\0\1\2\3\0\1\12\1\7"+
|
||||
"\3\0\1\6\1\4\1\5\1\11\uff8a\0";
|
||||
|
||||
/**
|
||||
* Translates characters to character classes
|
||||
*/
|
||||
private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
|
||||
|
||||
/**
|
||||
* Translates DFA states to action switch labels.
|
||||
*/
|
||||
private static final int [] ZZ_ACTION = zzUnpackAction();
|
||||
|
||||
private static final String ZZ_ACTION_PACKED_0 =
|
||||
"\1\0\1\1\1\2\3\1\1\3\10\0\1\4\1\5";
|
||||
|
||||
private static int [] zzUnpackAction() {
|
||||
int [] result = new int[17];
|
||||
int offset = 0;
|
||||
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static int zzUnpackAction(String packed, int offset, int [] result) {
|
||||
int i = 0; /* index in packed string */
|
||||
int j = offset; /* index in unpacked array */
|
||||
int l = packed.length();
|
||||
while (i < l) {
|
||||
int count = packed.charAt(i++);
|
||||
int value = packed.charAt(i++);
|
||||
do result[j++] = value; while (--count > 0);
|
||||
}
|
||||
return j;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Translates a state to a row index in the transition table
|
||||
*/
|
||||
private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
|
||||
|
||||
private static final String ZZ_ROWMAP_PACKED_0 =
|
||||
"\0\0\0\15\0\32\0\47\0\64\0\101\0\15\0\116"+
|
||||
"\0\133\0\150\0\165\0\202\0\217\0\234\0\251\0\15"+
|
||||
"\0\15";
|
||||
|
||||
private static int [] zzUnpackRowMap() {
|
||||
int [] result = new int[17];
|
||||
int offset = 0;
|
||||
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static int zzUnpackRowMap(String packed, int offset, int [] result) {
|
||||
int i = 0; /* index in packed string */
|
||||
int j = offset; /* index in unpacked array */
|
||||
int l = packed.length();
|
||||
while (i < l) {
|
||||
int high = packed.charAt(i++) << 16;
|
||||
result[j++] = high | packed.charAt(i++);
|
||||
}
|
||||
return j;
|
||||
}
|
||||
|
||||
/**
|
||||
* The transition table of the DFA
|
||||
*/
|
||||
private static final int [] ZZ_TRANS = zzUnpackTrans();
|
||||
|
||||
private static final String ZZ_TRANS_PACKED_0 =
|
||||
"\1\2\1\3\1\4\1\2\1\5\2\2\1\6\5\2"+
|
||||
"\16\0\1\3\16\0\1\7\16\0\1\10\20\0\1\11"+
|
||||
"\11\0\1\12\20\0\1\13\4\0\1\14\25\0\1\15"+
|
||||
"\10\0\1\16\21\0\1\17\10\0\1\20\12\0\1\21"+
|
||||
"\6\0";
|
||||
|
||||
private static int [] zzUnpackTrans() {
|
||||
int [] result = new int[182];
|
||||
int offset = 0;
|
||||
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static int zzUnpackTrans(String packed, int offset, int [] result) {
|
||||
int i = 0; /* index in packed string */
|
||||
int j = offset; /* index in unpacked array */
|
||||
int l = packed.length();
|
||||
while (i < l) {
|
||||
int count = packed.charAt(i++);
|
||||
int value = packed.charAt(i++);
|
||||
value--;
|
||||
do result[j++] = value; while (--count > 0);
|
||||
}
|
||||
return j;
|
||||
}
|
||||
|
||||
|
||||
/* error codes */
|
||||
private static final int ZZ_UNKNOWN_ERROR = 0;
|
||||
private static final int ZZ_NO_MATCH = 1;
|
||||
private static final int ZZ_PUSHBACK_2BIG = 2;
|
||||
private static final char[] EMPTY_BUFFER = new char[0];
|
||||
private static final int YYEOF = -1;
|
||||
private static java.io.Reader zzReader = null; // Fake
|
||||
|
||||
/* error messages for the codes above */
|
||||
private static final String ZZ_ERROR_MSG[] = {
|
||||
"Unkown internal scanner error",
|
||||
"Error: could not match input",
|
||||
"Error: pushback value was too large"
|
||||
};
|
||||
|
||||
/**
|
||||
* ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
|
||||
*/
|
||||
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
|
||||
|
||||
private static final String ZZ_ATTRIBUTE_PACKED_0 =
|
||||
"\1\0\1\11\4\1\1\11\10\0\2\11";
|
||||
|
||||
private static int [] zzUnpackAttribute() {
|
||||
int [] result = new int[17];
|
||||
int offset = 0;
|
||||
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static int zzUnpackAttribute(String packed, int offset, int [] result) {
|
||||
int i = 0; /* index in packed string */
|
||||
int j = offset; /* index in unpacked array */
|
||||
int l = packed.length();
|
||||
while (i < l) {
|
||||
int count = packed.charAt(i++);
|
||||
int value = packed.charAt(i++);
|
||||
do result[j++] = value; while (--count > 0);
|
||||
}
|
||||
return j;
|
||||
}
|
||||
|
||||
/** the current state of the DFA */
|
||||
private int zzState;
|
||||
|
||||
/** the current lexical state */
|
||||
private int zzLexicalState = YYINITIAL;
|
||||
|
||||
/** this buffer contains the current text to be matched and is
|
||||
the source of the yytext() string */
|
||||
private CharSequence zzBuffer = "";
|
||||
|
||||
/** this buffer may contains the current text array to be matched when it is cheap to acquire it */
|
||||
private char[] zzBufferArray;
|
||||
|
||||
/** the textposition at the last accepting state */
|
||||
private int zzMarkedPos;
|
||||
|
||||
/** the textposition at the last state to be included in yytext */
|
||||
private int zzPushbackPos;
|
||||
|
||||
/** the current text position in the buffer */
|
||||
private int zzCurrentPos;
|
||||
|
||||
/** startRead marks the beginning of the yytext() string in the buffer */
|
||||
private int zzStartRead;
|
||||
|
||||
/** endRead marks the last character in the buffer, that has been read
|
||||
from input */
|
||||
private int zzEndRead;
|
||||
|
||||
/**
|
||||
* zzAtBOL == true <=> the scanner is currently at the beginning of a line
|
||||
*/
|
||||
private boolean zzAtBOL = true;
|
||||
|
||||
/** zzAtEOF == true <=> the scanner is at the EOF */
|
||||
private boolean zzAtEOF;
|
||||
|
||||
/* user code: */
|
||||
public _GrammarLexer() {
|
||||
this((java.io.Reader)null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new scanner
|
||||
*
|
||||
* @param in the java.io.Reader to read input from.
|
||||
*/
|
||||
public _GrammarLexer(java.io.Reader in) {
|
||||
this.zzReader = in;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Unpacks the compressed character translation table.
|
||||
*
|
||||
* @param packed the packed character translation table
|
||||
* @return the unpacked character translation table
|
||||
*/
|
||||
private static char [] zzUnpackCMap(String packed) {
|
||||
char [] map = new char[0x10000];
|
||||
int i = 0; /* index in packed string */
|
||||
int j = 0; /* index in unpacked array */
|
||||
while (i < 52) {
|
||||
int count = packed.charAt(i++);
|
||||
char value = packed.charAt(i++);
|
||||
do map[j++] = value; while (--count > 0);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
public final int getTokenStart(){
|
||||
return zzStartRead;
|
||||
}
|
||||
|
||||
public final int getTokenEnd(){
|
||||
return getTokenStart() + yylength();
|
||||
}
|
||||
|
||||
public void reset(CharSequence buffer, int start, int end,int initialState){
|
||||
zzBuffer = buffer;
|
||||
zzBufferArray = com.intellij.util.text.CharArrayUtil.fromSequenceWithoutCopying(buffer);
|
||||
zzCurrentPos = zzMarkedPos = zzStartRead = start;
|
||||
zzPushbackPos = 0;
|
||||
zzAtEOF = false;
|
||||
zzAtBOL = true;
|
||||
zzEndRead = end;
|
||||
yybegin(initialState);
|
||||
}
|
||||
|
||||
/**
|
||||
* Refills the input buffer.
|
||||
*
|
||||
* @return <code>false</code>, iff there was new input.
|
||||
*
|
||||
* @exception java.io.IOException if any I/O-Error occurs
|
||||
*/
|
||||
private boolean zzRefill() throws java.io.IOException {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the current lexical state.
|
||||
*/
|
||||
public final int yystate() {
|
||||
return zzLexicalState;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Enters a new lexical state
|
||||
*
|
||||
* @param newState the new lexical state
|
||||
*/
|
||||
public final void yybegin(int newState) {
|
||||
zzLexicalState = newState;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the text matched by the current regular expression.
|
||||
*/
|
||||
public final CharSequence yytext() {
|
||||
return zzBuffer.subSequence(zzStartRead, zzMarkedPos);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the character at position <tt>pos</tt> from the
|
||||
* matched text.
|
||||
*
|
||||
* It is equivalent to yytext().charAt(pos), but faster
|
||||
*
|
||||
* @param pos the position of the character to fetch.
|
||||
* A value from 0 to yylength()-1.
|
||||
*
|
||||
* @return the character at position pos
|
||||
*/
|
||||
public final char yycharat(int pos) {
|
||||
return zzBufferArray != null ? zzBufferArray[zzStartRead+pos]:zzBuffer.charAt(zzStartRead+pos);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the length of the matched text region.
|
||||
*/
|
||||
public final int yylength() {
|
||||
return zzMarkedPos-zzStartRead;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reports an error that occured while scanning.
|
||||
*
|
||||
* In a wellformed scanner (no or only correct usage of
|
||||
* yypushback(int) and a match-all fallback rule) this method
|
||||
* will only be called with things that "Can't Possibly Happen".
|
||||
* If this method is called, something is seriously wrong
|
||||
* (e.g. a JFlex bug producing a faulty scanner etc.).
|
||||
*
|
||||
* Usual syntax/scanner level error handling should be done
|
||||
* in error fallback rules.
|
||||
*
|
||||
* @param errorCode the code of the errormessage to display
|
||||
*/
|
||||
private void zzScanError(int errorCode) {
|
||||
String message;
|
||||
try {
|
||||
message = ZZ_ERROR_MSG[errorCode];
|
||||
}
|
||||
catch (ArrayIndexOutOfBoundsException e) {
|
||||
message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
|
||||
}
|
||||
|
||||
throw new Error(message);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Pushes the specified amount of characters back into the input stream.
|
||||
*
|
||||
* They will be read again by then next call of the scanning method
|
||||
*
|
||||
* @param number the number of characters to be read again.
|
||||
* This number must not be greater than yylength()!
|
||||
*/
|
||||
public void yypushback(int number) {
|
||||
if ( number > yylength() )
|
||||
zzScanError(ZZ_PUSHBACK_2BIG);
|
||||
|
||||
zzMarkedPos -= number;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Resumes scanning until the next regular expression is matched,
|
||||
* the end of input is encountered or an I/O-Error occurs.
|
||||
*
|
||||
* @return the next token
|
||||
* @exception java.io.IOException if any I/O-Error occurs
|
||||
*/
|
||||
public IElementType advance() throws java.io.IOException {
|
||||
int zzInput;
|
||||
int zzAction;
|
||||
|
||||
// cached fields:
|
||||
int zzCurrentPosL;
|
||||
int zzMarkedPosL;
|
||||
int zzEndReadL = zzEndRead;
|
||||
CharSequence zzBufferL = zzBuffer;
|
||||
char[] zzBufferArrayL = zzBufferArray;
|
||||
char [] zzCMapL = ZZ_CMAP;
|
||||
|
||||
int [] zzTransL = ZZ_TRANS;
|
||||
int [] zzRowMapL = ZZ_ROWMAP;
|
||||
int [] zzAttrL = ZZ_ATTRIBUTE;
|
||||
|
||||
while (true) {
|
||||
zzMarkedPosL = zzMarkedPos;
|
||||
|
||||
zzAction = -1;
|
||||
|
||||
zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
|
||||
|
||||
zzState = ZZ_LEXSTATE[zzLexicalState];
|
||||
|
||||
|
||||
zzForAction: {
|
||||
while (true) {
|
||||
|
||||
if (zzCurrentPosL < zzEndReadL)
|
||||
zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
|
||||
else if (zzAtEOF) {
|
||||
zzInput = YYEOF;
|
||||
break zzForAction;
|
||||
}
|
||||
else {
|
||||
// store back cached positions
|
||||
zzCurrentPos = zzCurrentPosL;
|
||||
zzMarkedPos = zzMarkedPosL;
|
||||
boolean eof = zzRefill();
|
||||
// get translated positions and possibly new buffer
|
||||
zzCurrentPosL = zzCurrentPos;
|
||||
zzMarkedPosL = zzMarkedPos;
|
||||
zzBufferL = zzBuffer;
|
||||
zzEndReadL = zzEndRead;
|
||||
if (eof) {
|
||||
zzInput = YYEOF;
|
||||
break zzForAction;
|
||||
}
|
||||
else {
|
||||
zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
|
||||
}
|
||||
}
|
||||
int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
|
||||
if (zzNext == -1) break zzForAction;
|
||||
zzState = zzNext;
|
||||
|
||||
int zzAttributes = zzAttrL[zzState];
|
||||
if ( (zzAttributes & 1) == 1 ) {
|
||||
zzAction = zzState;
|
||||
zzMarkedPosL = zzCurrentPosL;
|
||||
if ( (zzAttributes & 8) == 8 ) break zzForAction;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// store back cached position
|
||||
zzMarkedPos = zzMarkedPosL;
|
||||
|
||||
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
|
||||
case 1:
|
||||
{ return com.intellij.psi.TokenType.BAD_CHARACTER;
|
||||
}
|
||||
case 6: break;
|
||||
case 4:
|
||||
{ return BNF_STRING;
|
||||
}
|
||||
case 7: break;
|
||||
case 5:
|
||||
{ return BNF_NUMBER;
|
||||
}
|
||||
case 8: break;
|
||||
case 3:
|
||||
{ return BNF_ID;
|
||||
}
|
||||
case 9: break;
|
||||
case 2:
|
||||
{ return com.intellij.psi.TokenType.WHITE_SPACE;
|
||||
}
|
||||
case 10: break;
|
||||
default:
|
||||
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
|
||||
zzAtEOF = true;
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
zzScanError(ZZ_NO_MATCH);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
38
samples/M4/htmlgen.m4
Normal file
38
samples/M4/htmlgen.m4
Normal file
@@ -0,0 +1,38 @@
|
||||
dnl Took from https://en.wikipedia.org/wiki/M4_(computer_language)
|
||||
divert(-1)
|
||||
|
||||
M4 has multiple output queues that can be manipulated with the
|
||||
`divert' macro. Valid queues range from 0 to 10, inclusive, with
|
||||
the default queue being 0.
|
||||
|
||||
Calling the `divert' macro with an invalid queue causes text to be
|
||||
discarded until another call. Note that even while output is being
|
||||
discarded, quotes around `divert' and other macros are needed to
|
||||
prevent expansion.
|
||||
|
||||
# Macros aren't expanded within comments, meaning that keywords such
|
||||
# as divert and other built-ins may be used without consequence.
|
||||
|
||||
# HTML utility macro:
|
||||
|
||||
define(`H2_COUNT', 0)
|
||||
|
||||
# The H2_COUNT macro is redefined every time the H2 macro is used:
|
||||
|
||||
define(`H2',
|
||||
`define(`H2_COUNT', incr(H2_COUNT))<h2>H2_COUNT. $1</h2>')
|
||||
|
||||
divert(1)dnl
|
||||
dnl
|
||||
dnl The dnl macro causes m4 to discard the rest of the line, thus
|
||||
dnl preventing unwanted blank lines from appearing in the output.
|
||||
dnl
|
||||
H2(First Section)
|
||||
H2(Second Section)
|
||||
H2(Conclusion)
|
||||
dnl
|
||||
divert(0)dnl
|
||||
dnl
|
||||
<HTML>
|
||||
undivert(1)dnl One of the queues is being pushed to output.
|
||||
</HTML>
|
||||
172
samples/M4Sugar/ax_ruby_devel.m4
Normal file
172
samples/M4Sugar/ax_ruby_devel.m4
Normal file
@@ -0,0 +1,172 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_ruby_devel.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_RUBY_DEVEL([version])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro checks for Ruby and tries to get the include path to
|
||||
# 'ruby.h'. It provides the $(RUBY_CPPFLAGS) and $(RUBY_LDFLAGS) output
|
||||
# variables. It also exports $(RUBY_EXTRA_LIBS) for embedding Ruby in your
|
||||
# code.
|
||||
#
|
||||
# You can search for some particular version of Ruby by passing a
|
||||
# parameter to this macro, for example "1.8.6".
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Rafal Rzepecki <divided.mind@gmail.com>
|
||||
# Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de>
|
||||
# Copyright (c) 2008 Alan W. Irwin
|
||||
# Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net>
|
||||
# Copyright (c) 2008 Andrew Collier
|
||||
# Copyright (c) 2008 Matteo Settenvini <matteo@member.fsf.org>
|
||||
# Copyright (c) 2008 Horst Knorr <hk_classes@knoda.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 11
|
||||
|
||||
AC_DEFUN([AX_RUBY_DEVEL],[
|
||||
AC_REQUIRE([AX_WITH_RUBY])
|
||||
AS_IF([test -n "$1"], [AX_PROG_RUBY_VERSION([$1])])
|
||||
|
||||
#
|
||||
# Check if you have mkmf, else fail
|
||||
#
|
||||
AC_MSG_CHECKING([for the mkmf Ruby package])
|
||||
ac_mkmf_result=`$RUBY -rmkmf -e ";" 2>&1`
|
||||
if test -z "$ac_mkmf_result"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_ERROR([cannot import Ruby module "mkmf".
|
||||
Please check your Ruby installation. The error was:
|
||||
$ac_mkmf_result])
|
||||
fi
|
||||
|
||||
#
|
||||
# Check for Ruby include path
|
||||
#
|
||||
AC_MSG_CHECKING([for Ruby include path])
|
||||
if test -z "$RUBY_CPPFLAGS"; then
|
||||
ruby_path=`$RUBY -rmkmf -e 'print Config::CONFIG[["archdir"]]'`
|
||||
if test -n "${ruby_path}"; then
|
||||
ruby_path="-I$ruby_path"
|
||||
fi
|
||||
RUBY_CPPFLAGS=$ruby_path
|
||||
fi
|
||||
AC_MSG_RESULT([$RUBY_CPPFLAGS])
|
||||
AC_SUBST([RUBY_CPPFLAGS])
|
||||
|
||||
#
|
||||
# Check for Ruby library path
|
||||
#
|
||||
AC_MSG_CHECKING([for Ruby library path])
|
||||
if test -z "$RUBY_LDFLAGS"; then
|
||||
RUBY_LDFLAGS=`$RUBY -rmkmf -e 'print Config::CONFIG[["LIBRUBYARG_SHARED"]]'`
|
||||
fi
|
||||
AC_MSG_RESULT([$RUBY_LDFLAGS])
|
||||
AC_SUBST([RUBY_LDFLAGS])
|
||||
|
||||
#
|
||||
# Check for site packages
|
||||
#
|
||||
AC_MSG_CHECKING([for Ruby site-packages path])
|
||||
if test -z "$RUBY_SITE_PKG"; then
|
||||
RUBY_SITE_PKG=`$RUBY -rmkmf -e 'print Config::CONFIG[["sitearchdir"]]'`
|
||||
fi
|
||||
AC_MSG_RESULT([$RUBY_SITE_PKG])
|
||||
AC_SUBST([RUBY_SITE_PKG])
|
||||
|
||||
#
|
||||
# libraries which must be linked in when embedding
|
||||
#
|
||||
AC_MSG_CHECKING(ruby extra libraries)
|
||||
if test -z "$RUBY_EXTRA_LIBS"; then
|
||||
RUBY_EXTRA_LIBS=`$RUBY -rmkmf -e 'print Config::CONFIG[["SOLIBS"]]'`
|
||||
fi
|
||||
AC_MSG_RESULT([$RUBY_EXTRA_LIBS])
|
||||
AC_SUBST(RUBY_EXTRA_LIBS)
|
||||
|
||||
#
|
||||
# linking flags needed when embedding
|
||||
# (is it even needed for Ruby?)
|
||||
#
|
||||
# AC_MSG_CHECKING(ruby extra linking flags)
|
||||
# if test -z "$RUBY_EXTRA_LDFLAGS"; then
|
||||
# RUBY_EXTRA_LDFLAGS=`$RUBY -rmkmf -e 'print Config::CONFIG[["LINKFORSHARED"]]'`
|
||||
# fi
|
||||
# AC_MSG_RESULT([$RUBY_EXTRA_LDFLAGS])
|
||||
# AC_SUBST(RUBY_EXTRA_LDFLAGS)
|
||||
|
||||
# this flags breaks ruby.h, and is sometimes defined by KDE m4 macros
|
||||
CFLAGS="`echo "$CFLAGS" | sed -e 's/-std=iso9899:1990//g;'`"
|
||||
#
|
||||
# final check to see if everything compiles alright
|
||||
#
|
||||
AC_MSG_CHECKING([consistency of all components of ruby development environment])
|
||||
AC_LANG_PUSH([C])
|
||||
# save current global flags
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="$ac_save_LIBS $RUBY_LDFLAGS"
|
||||
ac_save_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$ac_save_CPPFLAGS $RUBY_CPPFLAGS"
|
||||
AC_TRY_LINK([
|
||||
#include <ruby.h>
|
||||
],[
|
||||
ruby_init();
|
||||
],[rubyexists=yes],[rubyexists=no])
|
||||
|
||||
AC_MSG_RESULT([$rubyexists])
|
||||
|
||||
if test ! "$rubyexists" = "yes"; then
|
||||
AC_MSG_ERROR([
|
||||
Could not link test program to Ruby. Maybe the main Ruby library has been
|
||||
installed in some non-standard library path. If so, pass it to configure,
|
||||
via the LDFLAGS environment variable.
|
||||
Example: ./configure LDFLAGS="-L/usr/non-standard-path/ruby/lib"
|
||||
============================================================================
|
||||
ERROR!
|
||||
You probably have to install the development version of the Ruby package
|
||||
for your distribution. The exact name of this package varies among them.
|
||||
============================================================================
|
||||
])
|
||||
RUBY_VERSION=""
|
||||
fi
|
||||
AC_LANG_POP
|
||||
# turn back to default flags
|
||||
CPPFLAGS="$ac_save_CPPFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
#
|
||||
# all done!
|
||||
#
|
||||
])
|
||||
143
samples/M4Sugar/filenames/configure.ac
Normal file
143
samples/M4Sugar/filenames/configure.ac
Normal file
@@ -0,0 +1,143 @@
|
||||
# -*- Autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.68)
|
||||
AC_INIT([GARDEN],
|
||||
[1.0.9],
|
||||
[bubla@users.sourceforge.net])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AM_INIT_AUTOMAKE([-Wall])
|
||||
AC_CONFIG_SRCDIR([src/input.h])
|
||||
AC_CONFIG_HEADERS([src/configure.h])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
AC_ARG_ENABLE([debug],
|
||||
[AS_HELP_STRING([--enable-debug],
|
||||
[Builds the debug version of the library [[default = no]]]) ],
|
||||
[],
|
||||
[enable_debug="no"])
|
||||
|
||||
AS_IF([test "x$enable_debug" = "xyes"],
|
||||
[CFLAGS="${CFLAGS} -g -O0"])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_LIBTOOL
|
||||
LT_PROG_RC
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
dnl
|
||||
dnl Check whether it makes sense to install a garden.desktop file
|
||||
dnl
|
||||
AC_CHECK_PROG([have_freedesktop],
|
||||
[update-desktop-database],
|
||||
[yes])
|
||||
|
||||
AM_CONDITIONAL([HAVE_FREEDESKTOP],
|
||||
[test "x$have_freedesktop" = "xyes"])
|
||||
|
||||
AM_CONDITIONAL([WANT_FREEDESKTOP],
|
||||
[test "x$enable_desktop_install" = "xyes"])
|
||||
|
||||
AC_ARG_ENABLE([desktop-install],
|
||||
[AS_HELP_STRING([--enable-desktop-install],
|
||||
[Whether you want to install the garden.desktop file if applicable. !!! DO NOT USE if you are a PACKAGER!!!])]
|
||||
)
|
||||
|
||||
AS_CASE([$host],
|
||||
[*mingw* | *cygwin*],
|
||||
[AC_DEFINE([WINDOWS_VERSION],
|
||||
[1],
|
||||
[Define when building for Windows])
|
||||
windows_version="yes"])
|
||||
|
||||
AM_CONDITIONAL([WINDOWS_VERSION],
|
||||
[test "x$windows_version" = "xyes" ])
|
||||
|
||||
dnl now the datadir specification, that is useful if one does want to play without installing
|
||||
AC_ARG_ENABLE([datadir],
|
||||
[AS_HELP_STRING([--enable-datadir=path-to-your-garden-datafiles],
|
||||
[Normally you dont have to use this, but it is handy when you want to play the game without installing it or if you want to use already installed data. In the first case, use for instance --enable-datadir=`pwd`/data (if it makes sense)])],
|
||||
[DATADIR_NAME="$enableval"],
|
||||
[DATADIR_NAME='$(datadir)/'garden])
|
||||
|
||||
# Sets the data subdirectory
|
||||
AC_SUBST([DATADIR_NAME])
|
||||
|
||||
# Checks for libraries.
|
||||
AC_CHECK_HEADER([allegro.h],
|
||||
[],
|
||||
[have_allegro="no"
|
||||
AC_MSG_ERROR([You don't even have Allegro headers... Get Allegro first!]) ])
|
||||
|
||||
AC_CHECK_LIB([m], [sin])
|
||||
|
||||
test "x$host_os" != "x$build_os" && CROSS_COMPILING="yes"
|
||||
|
||||
try_link_allegro ()
|
||||
{
|
||||
LIBS_SAVE=$LIBS
|
||||
LIBS="$LIBS $1"
|
||||
AC_MSG_CHECKING([for Allegro using $1])
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
|
||||
[ #include <allegro.h> ]],
|
||||
[allegro_init();])END_OF_MAIN() ],
|
||||
[have_allegro="yes"],
|
||||
[have_allegro="no"])
|
||||
AC_MSG_RESULT([$have_allegro])
|
||||
LIBS=$LIBS_SAVE
|
||||
AS_IF([test "x$have_allegro" == "xyes"],
|
||||
[return 0],
|
||||
[return 1])
|
||||
}
|
||||
# first check for 'official allegro'
|
||||
# The official allegro does not support cross-compiling, though...
|
||||
AM_PATH_ALLEGRO([4.2.0])
|
||||
|
||||
try_link_allegro "$allegro_LIBS"
|
||||
AS_IF([test "x$?" == "x0"],
|
||||
[[LIBS="$LIBS $allegro_LIBS"
|
||||
ALLEGRO_LIB=`echo $allegro_LIBS | sed -e 's/.*-l\([^[:blank:]]*\).*/\1/'`
|
||||
have_allegro="yes"]])
|
||||
|
||||
ALLEGRO_RELEASE_LIBS="alleg alleg42 alleg44"
|
||||
ALLEGRO_DEBUG_LIBS="alld42 alleg44-debug"
|
||||
AS_IF([test "x$enable_debug" = "xyes"],
|
||||
[ALLEGRO_LIBS="$ALLEGRO_DEBUG_LIBS $ALLEGRO_RELEASE_LIBS"],
|
||||
[ALLEGRO_LIBS="$ALLEGRO_RELEASE_LIBS $ALLEGRO_DEBUG_LIBS"])
|
||||
|
||||
for lib in $ALLEGRO_LIBS
|
||||
do
|
||||
ldflag="-l$lib"
|
||||
AS_IF([test "x$have_allegro" == "xyes"],
|
||||
[break])
|
||||
try_link_allegro $ldflag
|
||||
AS_IF([test "x$?" == "x0"],
|
||||
[LIBS="$LIBS $ldflag"
|
||||
ALLEGRO_LIB="$lib"
|
||||
have_allegro="yes"])
|
||||
done
|
||||
|
||||
AS_IF([test "x$have_allegro" != "xyes"],
|
||||
[AC_MSG_ERROR([Unable to find Allegro game programming library 4.2, check out www.allegro.cc (or your distro repositories if you use a unix-like system)]) ])
|
||||
|
||||
# Checks for header files.
|
||||
AC_CHECK_HEADERS([string.h sys/stat.h])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_INLINE
|
||||
AC_HEADER_STDBOOL
|
||||
|
||||
# Checks for library functions.
|
||||
|
||||
AC_SUBST([ALLEGRO_LIB])
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
src/Makefile
|
||||
data/Makefile
|
||||
resources/Makefile
|
||||
docs/garden.doxyfile
|
||||
pkgs/w32/winstaller.nsi])
|
||||
|
||||
AC_OUTPUT
|
||||
46
samples/M4Sugar/list.m4
Normal file
46
samples/M4Sugar/list.m4
Normal file
@@ -0,0 +1,46 @@
|
||||
m4_define([m4_list_declare], [m4_do(
|
||||
[m4_define([$1_GET], [m4_expand([m4_list_nth([$1], $][1)])])],
|
||||
[m4_define([$1_FOREACH], [m4_foreach([item], [m4_dquote_elt(m4_list_contents([$1]))], m4_quote($][1))])],
|
||||
)])
|
||||
|
||||
m4_define([m4_list_add], [m4_do(
|
||||
[m4_pushdef([_LIST_NAME], [[_LIST_$1]])],
|
||||
[m4_ifndef(_LIST_NAME,
|
||||
[m4_define(_LIST_NAME, m4_dquote(m4_escape([$2])))],
|
||||
[m4_define(_LIST_NAME, m4_dquote(m4_list_contents([$1]), m4_escape([$2])))],
|
||||
)],
|
||||
[m4_popdef([_LIST_NAME])],
|
||||
)])
|
||||
|
||||
m4_define([m4_list_contents], [m4_do(
|
||||
[m4_pushdef([_LIST_NAME], [[_LIST_$1]])],
|
||||
[m4_ifndef(_LIST_NAME, [], m4_quote(_LIST_NAME))],
|
||||
[m4_popdef([_LIST_NAME])],
|
||||
)])
|
||||
|
||||
m4_define([m4_list_nth], [m4_argn([$2], m4_list_contents([$1]))])
|
||||
|
||||
m4_define([m4_list_pop_front], [m4_do(
|
||||
[m4_pushdef([_LIST_NAME], [[_LIST_$1]])],
|
||||
[m4_car(m4_unquote(_LIST_NAME))],
|
||||
[m4_define(_LIST_NAME, m4_cdr(m4_unquote(_LIST_NAME)))],
|
||||
[m4_popdef([_LIST_NAME])],
|
||||
)])
|
||||
|
||||
m4_define([m4_list_pop_back], [m4_do(
|
||||
[m4_pushdef([_LIST_NAME], [[_LIST_$1]])],
|
||||
[m4_define(_LIST_NAME, m4_dquote(m4_reverse(m4_unquote(_LIST_NAME))))],
|
||||
[m4_list_pop_front([$1])],
|
||||
[m4_define(_LIST_NAME, m4_dquote(m4_reverse(m4_unquote(_LIST_NAME))))],
|
||||
[m4_popdef([_LIST_NAME])],
|
||||
)])
|
||||
|
||||
dnl
|
||||
dnl $1: List name
|
||||
dnl $2: What
|
||||
dnl $3: If contains
|
||||
dnl $4: If not
|
||||
m4_define([m4_list_contains], [m4_do(
|
||||
[m4_foreach([item], m4_list_contents([$1]), m4_if(item, [$2], [[$3]], [[$4]]))]
|
||||
)])
|
||||
|
||||
207
samples/POV-Ray SDL/balcony.pov
Executable file
207
samples/POV-Ray SDL/balcony.pov
Executable file
@@ -0,0 +1,207 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence Of Vision Ray Tracer Scene Description File
|
||||
// File: balcony.pov
|
||||
// Desc: Povray demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
//
|
||||
// ***********************************************************************
|
||||
//
|
||||
// -------------------- 'balcony' demonstration scene --------------------
|
||||
//
|
||||
// written July-August 2001 by Christoph Hormann <chris_hormann@gmx.de>
|
||||
//
|
||||
// demonstrates use of various new or changed features:
|
||||
//
|
||||
// - isosurface (for the rail columns)
|
||||
// - mesh2 object (table cloth)
|
||||
// - uv-mapping (table cloth)
|
||||
// - pattern image type (background heightfield)
|
||||
// - slope pattern (background heightfield)
|
||||
// - variable reflection (water & glass)
|
||||
// - metallic reflection
|
||||
// - conserve_energy
|
||||
// - function pattern (water)
|
||||
// - fading interior (water, drink)
|
||||
// - 'circular' and 'orient' area_light
|
||||
// - radiosity
|
||||
// - photons (objects on the table)
|
||||
//
|
||||
// ***********************************************************************
|
||||
//
|
||||
// Command line options:
|
||||
//
|
||||
// -w240 -h320
|
||||
// -w480 -h640 +a0.3
|
||||
// -w600 -h800 +a0.3
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#version 3.6;
|
||||
|
||||
#include "functions.inc"
|
||||
#include "colors.inc"
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#declare AreaLight=on;
|
||||
#declare Radiosity=on;
|
||||
#declare Photons=on;
|
||||
#declare TestLight=off;
|
||||
#declare show_Fog=true;
|
||||
#declare show_Water=true;
|
||||
#declare show_Terrain=true;
|
||||
#declare show_Building=true;
|
||||
#declare show_Table=true;
|
||||
#declare show_TableCloth=true;
|
||||
#declare show_Chair=true;
|
||||
#declare show_Table_Stuff=true;
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
global_settings{
|
||||
max_trace_level 15
|
||||
assumed_gamma 1
|
||||
|
||||
#if (Radiosity=on)
|
||||
radiosity{
|
||||
pretrace_start 0.08
|
||||
pretrace_end 0.01
|
||||
count 130
|
||||
nearest_count 5
|
||||
error_bound 0.3
|
||||
|
||||
recursion_limit 1
|
||||
low_error_factor 0.5
|
||||
gray_threshold 0.0
|
||||
minimum_reuse 0.015
|
||||
brightness 1.0
|
||||
adc_bailout 0.01/2
|
||||
normal on
|
||||
}
|
||||
#end
|
||||
|
||||
#if (Photons=on)
|
||||
photons {
|
||||
spacing 0.002
|
||||
}
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
// This scene uses a non-standard camera set-up.
|
||||
// (See CAMERA in the included documentation for details.)
|
||||
// If you are new to POV-Ray, you might want to try a different demo scene.
|
||||
|
||||
camera {
|
||||
location <0.5, 0.5, 1.2>
|
||||
direction y
|
||||
sky z
|
||||
up z
|
||||
right x*image_width/image_height // keep propotions with any aspect ratio
|
||||
look_at <5, 4.3, 0.9>
|
||||
angle 36
|
||||
}
|
||||
|
||||
/*
|
||||
camera { // table detail camera
|
||||
location <1.5, 1.5, 1.0>
|
||||
direction y
|
||||
sky z
|
||||
up z
|
||||
right x*image_width/image_height // keep propotions with any aspect ratio
|
||||
look_at <3.3,2.52,0.5>
|
||||
angle 30
|
||||
}
|
||||
*/
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
|
||||
#if (TestLight=on)
|
||||
light_source {
|
||||
<2, 2, 2>
|
||||
color rgb 0.7
|
||||
}
|
||||
#end
|
||||
|
||||
|
||||
light_source {
|
||||
<3.0, -2.5, 2.6>*10000
|
||||
color rgb <3.43,2.87,1.95>
|
||||
#if (AreaLight=on)
|
||||
area_light 400*x 400*y 4,4
|
||||
jitter
|
||||
circular
|
||||
orient
|
||||
#end
|
||||
|
||||
photons {
|
||||
reflection on
|
||||
refraction on
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if (show_Fog)
|
||||
|
||||
fog{
|
||||
fog_type 2
|
||||
fog_alt 1.2
|
||||
fog_offset 0
|
||||
color rgbt <0.60, 0.68, 0.82, 0.0>
|
||||
distance 700
|
||||
up z
|
||||
}
|
||||
|
||||
#end
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include "sky.inc"
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (show_Water)
|
||||
#include "water.inc"
|
||||
#end
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (show_Building)
|
||||
#include "building.inc"
|
||||
#end
|
||||
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (show_Terrain)
|
||||
#include "terrain.inc"
|
||||
#end
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (show_Table)
|
||||
#include "table.inc"
|
||||
#end
|
||||
|
||||
#if (show_TableCloth)
|
||||
#include "table_cloth.inc"
|
||||
#end
|
||||
|
||||
#if (show_Table_Stuff)
|
||||
#include "table_stuff.inc"
|
||||
#end
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (show_Chair)
|
||||
#include "chair.inc"
|
||||
#end
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
117
samples/POV-Ray SDL/bglass.inc
Executable file
117
samples/POV-Ray SDL/bglass.inc
Executable file
@@ -0,0 +1,117 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence Of Vision Ray Tracer Include File
|
||||
// File: bglass.inc
|
||||
// Desc: drinking glass for 'balcony.pov' demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
|
||||
// Updated: 09Aug2008 (jh) for v3.7 distribution
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (version < 3.7)
|
||||
#version 3.5;
|
||||
#end
|
||||
|
||||
#declare Mat_Glass=
|
||||
material {
|
||||
texture {
|
||||
pigment { color rgbt 1 }
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.1
|
||||
specular 0.5
|
||||
roughness 0.05
|
||||
|
||||
reflection {
|
||||
0.0, 1.0
|
||||
fresnel on
|
||||
}
|
||||
|
||||
conserve_energy
|
||||
}
|
||||
}
|
||||
interior {
|
||||
ior 1.5
|
||||
fade_distance 0.1
|
||||
fade_power 1001
|
||||
fade_color <0.4,0.4,0.4>
|
||||
}
|
||||
}
|
||||
|
||||
#declare Mat_Liquid=
|
||||
material {
|
||||
texture {
|
||||
pigment { color rgbt 1 }
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.1
|
||||
specular 0.5
|
||||
roughness 0.01
|
||||
|
||||
reflection {
|
||||
0.0, 1.0
|
||||
fresnel on
|
||||
}
|
||||
|
||||
conserve_energy
|
||||
}
|
||||
}
|
||||
interior {
|
||||
ior 1.3
|
||||
fade_distance 0.03
|
||||
fade_power 1001
|
||||
fade_color <0.8,0.3,0.4>
|
||||
}
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include "shapes.inc"
|
||||
|
||||
#local Content_Shape=
|
||||
merge {
|
||||
cylinder {
|
||||
0*z, 5*z, 3.0
|
||||
}
|
||||
|
||||
object { Round_Cylinder_Merge (2*z, -3*z, 3.0, 0.25) }
|
||||
|
||||
material { Mat_Liquid }
|
||||
}
|
||||
|
||||
#declare Glass=
|
||||
union {
|
||||
merge {
|
||||
difference {
|
||||
cylinder {
|
||||
0.01*z, 14*z, 3.2
|
||||
}
|
||||
|
||||
cylinder {
|
||||
0*z, 10*z, 3.0
|
||||
translate 4.6*z
|
||||
}
|
||||
|
||||
object { Round_Cylinder_Merge (2*z, -3*z, 3.0, 0.25) translate 4.6*z }
|
||||
}
|
||||
torus {
|
||||
3.1, 0.1
|
||||
rotate 90*x
|
||||
translate 14*z
|
||||
}
|
||||
|
||||
material { Mat_Glass }
|
||||
}
|
||||
|
||||
object { Content_Shape scale 0.99 translate 4.6*z }
|
||||
|
||||
scale 1.1
|
||||
scale 0.01
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
212
samples/POV-Ray SDL/building.inc
Executable file
212
samples/POV-Ray SDL/building.inc
Executable file
@@ -0,0 +1,212 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence Of Vision Ray Tracer Include File
|
||||
// File: building.inc
|
||||
// Desc: building for 'balcony.pov' demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
|
||||
// Updated: 09Aug2008 (jh) for v3.7 distribution
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (version < 3.7)
|
||||
#version 3.5;
|
||||
#end
|
||||
|
||||
#declare Tex_Stone=
|
||||
texture {
|
||||
pigment {
|
||||
|
||||
agate
|
||||
color_map {
|
||||
[0.7 color rgb <0.6,0.6,0.6> ]
|
||||
[1.0 color rgb 0.46 ]
|
||||
}
|
||||
warp { turbulence <0.7,0.4,0.4> }
|
||||
scale <0.3,1.2,1.2>*0.25
|
||||
rotate -60*y
|
||||
rotate 70*z
|
||||
}
|
||||
finish {
|
||||
ambient 0.0//0.1
|
||||
diffuse 0.5
|
||||
specular 0.15
|
||||
}
|
||||
normal {
|
||||
granite 0.2
|
||||
warp {turbulence 1}
|
||||
scale 0.1
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Floor_A=
|
||||
texture {
|
||||
pigment {
|
||||
color rgb <0.6,0.6,0.6>
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.5
|
||||
specular 0.15
|
||||
}
|
||||
normal {
|
||||
granite 0.2
|
||||
warp {turbulence 1}
|
||||
scale 0.25
|
||||
translate 2
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Floor_B=
|
||||
texture {
|
||||
pigment {
|
||||
color rgb <0.18,0.18,0.22>
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.5
|
||||
specular 0.15
|
||||
}
|
||||
normal {
|
||||
granite 0.2
|
||||
warp {turbulence 1}
|
||||
scale 0.25
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Floor=
|
||||
texture {
|
||||
checker
|
||||
texture { Tex_Floor_A },
|
||||
texture { Tex_Floor_B }
|
||||
scale 0.4
|
||||
rotate 45*z
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include "shapes.inc"
|
||||
|
||||
#declare fn_Rad=
|
||||
function {
|
||||
sin(pow(abs(z*0.4),1.8))+0.4
|
||||
}
|
||||
|
||||
#declare Small_Column_part1=
|
||||
isosurface {
|
||||
function { min(sqrt( x*x + y*y ) - fn_Rad(x, y, z), sqrt( x*x + y*y + pow(abs(z*2),1.4)) - 1.0) }
|
||||
max_gradient 1.8
|
||||
//eval
|
||||
accuracy 0.001
|
||||
contained_by { box { -4, 4 } }
|
||||
translate 4*z
|
||||
scale 6
|
||||
|
||||
texture { Tex_Stone }
|
||||
}
|
||||
|
||||
#declare Small_Column=
|
||||
union {
|
||||
object { Small_Column_part1 translate 3*z }
|
||||
object { Round_Cylinder_Union (0, 3*z, 10, 1) }
|
||||
object { Round_Cylinder_Union (51*z, 54*z, 10, 1) }
|
||||
|
||||
scale 0.01
|
||||
|
||||
translate 0.1*z
|
||||
texture { Tex_Stone }
|
||||
}
|
||||
|
||||
#declare Large_Column=
|
||||
union {
|
||||
object { Round_Cylinder_Merge (0.7*z, 0.8*z, 0.22, 0.02) }
|
||||
|
||||
cylinder { 0.75*z, 3*z, 0.2 }
|
||||
object { Round_Box_Union (<-0.23,-0.23,-0.1>, <0.23,0.23,0.15>, 0.02) }
|
||||
object { Round_Box_Union (<-0.20,-0.20,0.00>, <0.20,0.20,0.70>, 0.02) }
|
||||
object { Round_Box_Union (<-0.23,-0.23,0.58>, <0.23,0.23,0.70>, 0.02) }
|
||||
object { Round_Box_Union (<-0.26,-0.26,0.64>, <0.26,0.26,0.74>, 0.02) }
|
||||
|
||||
torus { 0.2, 0.06 rotate 90*x translate 2.74*z }
|
||||
|
||||
object { Round_Box_Union (<-0.26,-0.26,2.80>, <0.26,0.26,2.88>, 0.01) }
|
||||
|
||||
texture { Tex_Stone }
|
||||
}
|
||||
|
||||
#declare Balustrade=
|
||||
union {
|
||||
object { Round_Box_Union (<0.0,-0.15,0>, <5,0.15,0.1>, 0.02) }
|
||||
object { Round_Box_Union (<0.0,-0.15,0.64>, <5,0.15,0.74>, 0.02) }
|
||||
|
||||
#declare Cnt=0;
|
||||
|
||||
#while (Cnt<10)
|
||||
object { Small_Column translate(Cnt*0.5+0.6)*x }
|
||||
#declare Cnt=Cnt+1;
|
||||
#end
|
||||
|
||||
texture { Tex_Stone }
|
||||
}
|
||||
|
||||
#declare Walls=
|
||||
union {
|
||||
box { <-0.5,-0.5,-1>, <-2,5.5,3.2> }
|
||||
box { <-0.5,-0.5,-1>, <5.5,-2,3.2> }
|
||||
|
||||
texture { Tex_Stone }
|
||||
}
|
||||
|
||||
#declare Ceiling_Segment=
|
||||
union {
|
||||
box { <-0.20,-0.20,2.94>, <0.20,0.20,2.98> }
|
||||
box { <-0.14,-0.14,2.94>, <0.14,0.14,3.01> }
|
||||
}
|
||||
|
||||
#declare Ceiling=
|
||||
union {
|
||||
box { <5.6,5.6,3.04>, <-2,-2,3.5> }
|
||||
|
||||
union {
|
||||
object { Round_Box_Union (<0.0,-0.26,3.1>, <6,0.26,2.88>, 0.02) rotate 180*z }
|
||||
object { Round_Box_Union (<0.0,-0.26,3.1>, <6,0.26,2.88>, 0.02) rotate -90*z }
|
||||
translate <5,5,0>
|
||||
}
|
||||
|
||||
difference {
|
||||
box { <5.0,5.0,2.95>, <-2,-2,3.5> }
|
||||
object { Ceiling_Segment translate <4.44,4.44,0> }
|
||||
object { Ceiling_Segment translate <4.44,3.94,0> }
|
||||
object { Ceiling_Segment translate <3.94,4.44,0> }
|
||||
object { Ceiling_Segment translate <3.94,3.94,0> }
|
||||
object { Ceiling_Segment translate <4.44,3.44,0> }
|
||||
object { Ceiling_Segment translate <3.44,4.44,0> }
|
||||
object { Ceiling_Segment translate <3.94,3.44,0> }
|
||||
object { Ceiling_Segment translate <3.44,3.94,0> }
|
||||
object { Ceiling_Segment translate <4.44,2.94,0> }
|
||||
object { Ceiling_Segment translate <2.94,4.44,0> }
|
||||
}
|
||||
|
||||
texture { Tex_Stone }
|
||||
}
|
||||
|
||||
#declare Base=
|
||||
union {
|
||||
box { <5.4,5.4,0>, <0,0,-1> texture { Tex_Floor } }
|
||||
box { <6,6,-1>, <0,0,-2> }
|
||||
|
||||
texture { Tex_Stone }
|
||||
}
|
||||
|
||||
object { Balustrade rotate 180*z translate <5,5,0> }
|
||||
object { Balustrade rotate -90*z translate <5,5,0> }
|
||||
object { Large_Column translate <5,5,0> }
|
||||
object { Base }
|
||||
object { Walls }
|
||||
object { Ceiling }
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
382
samples/POV-Ray SDL/chair.inc
Executable file
382
samples/POV-Ray SDL/chair.inc
Executable file
@@ -0,0 +1,382 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence Of Vision Ray Tracer Include File
|
||||
// File: chair.inc
|
||||
// Desc: chair for 'balcony.pov' demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
|
||||
// Updated: 09Aug2008 (jh) for v3.7 distribution
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (version < 3.7)
|
||||
#version 3.5;
|
||||
#end
|
||||
|
||||
#declare Tex_Table_Foot=
|
||||
texture {
|
||||
pigment {
|
||||
color rgb 0.4
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.3
|
||||
specular 0.4
|
||||
roughness 0.01
|
||||
metallic
|
||||
|
||||
reflection {
|
||||
0.8
|
||||
metallic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Table_Foot_Bottom=
|
||||
texture {
|
||||
pigment {
|
||||
color rgb 0.2
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.3
|
||||
specular 0.4
|
||||
roughness 0.02
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Dark_Wood=
|
||||
texture {
|
||||
pigment {
|
||||
bozo
|
||||
color_map {
|
||||
[0.3 color rgb <0.0,0.0,0.16> ]
|
||||
[0.5 color rgb <0.0,0.0,0.08> ]
|
||||
[0.7 color rgb <0.0,0.0,0.0> ]
|
||||
}
|
||||
scale <4,1,1>*0.036
|
||||
}
|
||||
finish {
|
||||
ambient 0.09
|
||||
diffuse 0.3
|
||||
specular 0.5
|
||||
roughness 0.025
|
||||
|
||||
reflection {
|
||||
0.15
|
||||
metallic
|
||||
}
|
||||
}
|
||||
normal {
|
||||
granite 0.1
|
||||
scale 0.03
|
||||
accuracy 0.007
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include "shapes.inc"
|
||||
|
||||
#local Chair_Tube_Rad=0.01;
|
||||
#local Chair_Tube_Curve_Rad=0.045;
|
||||
#local Chair_Leg_Angle=7;
|
||||
#local Chair_Leg_AngleA=4;
|
||||
#local Chair_Leg_Depth=0.13;
|
||||
|
||||
#local Chair_Plate_Curve_Rad=0.03;
|
||||
#local Chair_Plate_Thickness=0.008;
|
||||
#local Chair_Plate_Width=0.48;
|
||||
#local Chair_Plate_UWidth=0.22;
|
||||
#local Chair_Plate_Height=0.45;
|
||||
#local Chair_Plate_UAngle=5;
|
||||
#local Chair_Plate_Depth=0.26;
|
||||
|
||||
#local Chair_Leg=
|
||||
union {
|
||||
|
||||
intersection {
|
||||
torus { Chair_Tube_Curve_Rad, Chair_Tube_Rad }
|
||||
plane { x, 0 }
|
||||
plane { -x, 0 rotate (-90+Chair_Leg_Angle)*y }
|
||||
}
|
||||
|
||||
cylinder {
|
||||
<-Chair_Tube_Curve_Rad,0,0>,
|
||||
<-Chair_Tube_Curve_Rad,0,-Chair_Plate_Height+0.01>, Chair_Tube_Rad
|
||||
rotate Chair_Leg_Angle*y
|
||||
}
|
||||
cylinder {
|
||||
<0,0,Chair_Tube_Curve_Rad>,
|
||||
<Chair_Leg_Depth,0,Chair_Tube_Curve_Rad>, Chair_Tube_Rad
|
||||
}
|
||||
|
||||
object { Round_Cylinder_Merge (
|
||||
<-Chair_Tube_Curve_Rad,0,-Chair_Plate_Height-0.003>,
|
||||
<-Chair_Tube_Curve_Rad,0,-Chair_Plate_Height+0.025>, Chair_Tube_Rad+0.001, 0.005)
|
||||
rotate Chair_Leg_Angle*y
|
||||
texture { Tex_Table_Foot_Bottom }
|
||||
}
|
||||
|
||||
translate -Chair_Leg_Depth*x
|
||||
|
||||
translate Chair_Plate_Height*cos(radians(Chair_Leg_Angle))*z
|
||||
|
||||
}
|
||||
|
||||
#macro Chair_Back(Rotate)
|
||||
union {
|
||||
|
||||
intersection {
|
||||
torus { Chair_Tube_Curve_Rad, Chair_Tube_Rad }
|
||||
plane { x, 0 }
|
||||
plane { z, 0 }
|
||||
|
||||
translate <-Chair_Leg_Depth, 0.0,Chair_Tube_Curve_Rad*2>
|
||||
}
|
||||
|
||||
cylinder {
|
||||
<-0.08, 0.0,Chair_Tube_Curve_Rad>,
|
||||
< 0.05, 0.0,Chair_Tube_Curve_Rad>, Chair_Tube_Rad
|
||||
}
|
||||
|
||||
intersection {
|
||||
torus { 4, Chair_Tube_Rad }
|
||||
plane { z, 0.4 }
|
||||
plane { -z, 0 }
|
||||
|
||||
translate <-4-Chair_Leg_Depth-Chair_Tube_Curve_Rad, 0.0,Chair_Tube_Curve_Rad*2>
|
||||
}
|
||||
|
||||
translate -Chair_Tube_Curve_Rad*z
|
||||
|
||||
rotate 3*y
|
||||
rotate Rotate*x
|
||||
|
||||
translate Chair_Tube_Curve_Rad*z
|
||||
|
||||
translate Chair_Plate_Height*cos(radians(Chair_Leg_Angle))*z
|
||||
|
||||
|
||||
}
|
||||
#end
|
||||
|
||||
#local Chair_Base=
|
||||
union {
|
||||
|
||||
union {
|
||||
object { Chair_Back(-0.25) translate Chair_Tube_Rad*2*y }
|
||||
|
||||
object { Chair_Leg }
|
||||
object { Chair_Leg rotate 180*z }
|
||||
rotate -Chair_Leg_AngleA*x
|
||||
translate -0.23*y
|
||||
}
|
||||
union {
|
||||
object { Chair_Back( 0.25) translate -Chair_Tube_Rad*2*y }
|
||||
|
||||
object { Chair_Leg }
|
||||
object { Chair_Leg rotate 180*z }
|
||||
rotate Chair_Leg_AngleA*x
|
||||
translate 0.23*y
|
||||
}
|
||||
|
||||
texture { Tex_Table_Foot }
|
||||
}
|
||||
|
||||
#local Chair_Plate=
|
||||
union {
|
||||
|
||||
intersection {
|
||||
merge {
|
||||
torus { Chair_Plate_Curve_Rad, Chair_Plate_Thickness translate (Chair_Plate_Width/2)*y }
|
||||
torus { Chair_Plate_Curve_Rad, Chair_Plate_Thickness translate -(Chair_Plate_Width/2)*y }
|
||||
|
||||
difference {
|
||||
cylinder {
|
||||
-(Chair_Plate_Width/2)*y, (Chair_Plate_Width/2)*y,
|
||||
Chair_Plate_Curve_Rad+Chair_Plate_Thickness
|
||||
}
|
||||
cylinder {
|
||||
-(Chair_Plate_Width/1.8)*y, (Chair_Plate_Width/1.8)*y,
|
||||
Chair_Plate_Curve_Rad-Chair_Plate_Thickness
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
plane { -z, 0 rotate -20*y}
|
||||
plane { -x, 0 }
|
||||
}
|
||||
|
||||
|
||||
merge {
|
||||
cylinder {
|
||||
<0.0, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad>
|
||||
<0.0, Chair_Plate_Width/2, Chair_Plate_Curve_Rad>,
|
||||
Chair_Plate_Thickness
|
||||
}
|
||||
|
||||
sphere { <0.0, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad>, Chair_Plate_Thickness }
|
||||
sphere { <0.0, Chair_Plate_Width/2, Chair_Plate_Curve_Rad>, Chair_Plate_Thickness }
|
||||
|
||||
rotate 70*y
|
||||
}
|
||||
|
||||
box {
|
||||
< 0.00, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad-Chair_Plate_Thickness>,
|
||||
<-Chair_Plate_Depth, Chair_Plate_Width/2, Chair_Plate_Curve_Rad+Chair_Plate_Thickness>
|
||||
}
|
||||
cylinder {
|
||||
< 0.00, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad>
|
||||
<-Chair_Plate_Depth, -Chair_Plate_Width/2, Chair_Plate_Curve_Rad>,
|
||||
Chair_Plate_Thickness
|
||||
}
|
||||
cylinder {
|
||||
< 0.00, Chair_Plate_Width/2, Chair_Plate_Curve_Rad>
|
||||
<-Chair_Plate_Depth, Chair_Plate_Width/2, Chair_Plate_Curve_Rad>,
|
||||
Chair_Plate_Thickness
|
||||
}
|
||||
|
||||
box {
|
||||
<-Chair_Plate_Depth, -Chair_Plate_Width/2+Chair_Plate_Curve_Rad,
|
||||
Chair_Plate_Curve_Rad-Chair_Plate_Thickness>,
|
||||
<-Chair_Plate_Depth-Chair_Plate_Curve_Rad, Chair_Plate_Width/2-Chair_Plate_Curve_Rad,
|
||||
Chair_Plate_Curve_Rad+Chair_Plate_Thickness>
|
||||
}
|
||||
|
||||
cylinder {
|
||||
<-Chair_Plate_Depth, Chair_Plate_Width/2-Chair_Plate_Curve_Rad,
|
||||
Chair_Plate_Curve_Rad-Chair_Plate_Thickness>
|
||||
<-Chair_Plate_Depth, Chair_Plate_Width/2-Chair_Plate_Curve_Rad,
|
||||
Chair_Plate_Curve_Rad+Chair_Plate_Thickness>,
|
||||
Chair_Plate_Curve_Rad
|
||||
}
|
||||
cylinder {
|
||||
<-Chair_Plate_Depth, -Chair_Plate_Width/2+Chair_Plate_Curve_Rad,
|
||||
Chair_Plate_Curve_Rad-Chair_Plate_Thickness>
|
||||
<-Chair_Plate_Depth, -Chair_Plate_Width/2+Chair_Plate_Curve_Rad,
|
||||
Chair_Plate_Curve_Rad+Chair_Plate_Thickness>,
|
||||
Chair_Plate_Curve_Rad
|
||||
}
|
||||
torus {
|
||||
Chair_Plate_Curve_Rad, Chair_Plate_Thickness
|
||||
rotate 90*x
|
||||
translate <-Chair_Plate_Depth,
|
||||
-Chair_Plate_Width/2+Chair_Plate_Curve_Rad, Chair_Plate_Curve_Rad>
|
||||
}
|
||||
torus {
|
||||
Chair_Plate_Curve_Rad, Chair_Plate_Thickness
|
||||
rotate 90*x
|
||||
translate <-Chair_Plate_Depth,
|
||||
Chair_Plate_Width/2-Chair_Plate_Curve_Rad, Chair_Plate_Curve_Rad>
|
||||
}
|
||||
|
||||
translate (Chair_Plate_Height+0.03)*z
|
||||
translate 0.18*x
|
||||
}
|
||||
|
||||
#local Chair_Back_Plate=
|
||||
union {
|
||||
intersection {
|
||||
union {
|
||||
intersection {
|
||||
difference {
|
||||
cylinder { <0.0, -0.30, 0.0>, <0.0, 0.30, 0.0>, 4+2*Chair_Plate_Thickness }
|
||||
cylinder { <0.0, -0.40, 0.0>, <0.0, 0.40, 0.0>, 4 }
|
||||
}
|
||||
plane { y, Chair_Plate_UWidth rotate Chair_Plate_UAngle*x }
|
||||
plane { -y, Chair_Plate_UWidth rotate -Chair_Plate_UAngle*x }
|
||||
}
|
||||
|
||||
torus {
|
||||
4+Chair_Plate_Thickness, Chair_Plate_Thickness
|
||||
scale <1, 1, 1/cos(radians(Chair_Plate_UAngle))>
|
||||
rotate Chair_Plate_UAngle*x
|
||||
translate Chair_Plate_UWidth*y
|
||||
}
|
||||
|
||||
torus {
|
||||
4+Chair_Plate_Thickness, Chair_Plate_Thickness
|
||||
scale <1, 1, 1/cos(radians(Chair_Plate_UAngle))>
|
||||
rotate -Chair_Plate_UAngle*x
|
||||
translate -Chair_Plate_UWidth*y
|
||||
}
|
||||
}
|
||||
|
||||
plane { z, 0 rotate -8*y }
|
||||
plane { -z, 0 rotate -0.2*y }
|
||||
}
|
||||
|
||||
intersection {
|
||||
union {
|
||||
cylinder {
|
||||
<4+Chair_Plate_Thickness, 0.3, 0.0>,
|
||||
<4+Chair_Plate_Thickness, -0.3, 0.0>,
|
||||
Chair_Plate_Thickness
|
||||
rotate -0.2*y
|
||||
}
|
||||
cylinder {
|
||||
<4+Chair_Plate_Thickness, 0.3, 0.0>,
|
||||
<4+Chair_Plate_Thickness, -0.3, 0.0>,
|
||||
Chair_Plate_Thickness
|
||||
rotate -8*y
|
||||
}
|
||||
}
|
||||
plane { y, Chair_Plate_UWidth rotate Chair_Plate_UAngle*x }
|
||||
plane { -y, Chair_Plate_UWidth rotate -Chair_Plate_UAngle*x }
|
||||
}
|
||||
sphere {
|
||||
<4+Chair_Plate_Thickness, Chair_Plate_UWidth, 0.0>,
|
||||
Chair_Plate_Thickness
|
||||
rotate -0.2*y
|
||||
}
|
||||
sphere {
|
||||
<4+Chair_Plate_Thickness, -Chair_Plate_UWidth, 0.0>,
|
||||
Chair_Plate_Thickness
|
||||
rotate -0.2*y
|
||||
}
|
||||
|
||||
sphere {
|
||||
<4+Chair_Plate_Thickness,
|
||||
Chair_Plate_UWidth-4*sin(radians(Chair_Plate_UAngle))*sin(radians(8)), 0.0>,
|
||||
Chair_Plate_Thickness
|
||||
rotate -8*y
|
||||
}
|
||||
sphere {
|
||||
<4+Chair_Plate_Thickness,
|
||||
-Chair_Plate_UWidth+4*sin(radians(Chair_Plate_UAngle))*sin(radians(8)), 0.0>,
|
||||
Chair_Plate_Thickness
|
||||
rotate -8*y
|
||||
}
|
||||
|
||||
|
||||
translate <-4-Chair_Leg_Depth-Chair_Tube_Curve_Rad+Chair_Tube_Rad,
|
||||
0.0, Chair_Tube_Curve_Rad*2>
|
||||
|
||||
translate -Chair_Tube_Curve_Rad*z
|
||||
|
||||
rotate 3*y
|
||||
|
||||
translate Chair_Tube_Curve_Rad*z
|
||||
|
||||
translate Chair_Plate_Height*cos(radians(Chair_Leg_Angle))*z
|
||||
|
||||
}
|
||||
|
||||
|
||||
union {
|
||||
object { Chair_Back_Plate texture { Tex_Dark_Wood rotate 90*y } }
|
||||
object { Chair_Plate texture { Tex_Dark_Wood } }
|
||||
|
||||
object { Chair_Base }
|
||||
scale 0.92
|
||||
rotate -60*z
|
||||
translate <2.68,3.35,0>
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
12217
samples/POV-Ray SDL/cloth.inc
Executable file
12217
samples/POV-Ray SDL/cloth.inc
Executable file
File diff suppressed because it is too large
Load Diff
188
samples/POV-Ray SDL/gamma_showcase.pov
Executable file
188
samples/POV-Ray SDL/gamma_showcase.pov
Executable file
@@ -0,0 +1,188 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence of Vision Ray Tracer Scene Description File
|
||||
// File: gamma_showcase.pov
|
||||
// Vers: 3.7
|
||||
// Desc: Gamma Handling Test Scene - An arrangement of spheres on a marble plane
|
||||
// Date: 2010-12-21
|
||||
// Auth: Christoph Lipka
|
||||
//
|
||||
|
||||
// +w640 +h480 +a0.3 +am1 +fN -d File_Gamma=sRGB Output_File_Name=gamma_showcase.png
|
||||
// +w640 +h480 +a0.3 +am1 +fN -d File_Gamma=1.0 Output_File_Name=gamma_showcase_linear.png
|
||||
// +w320 +h240 +a0.3 +am1 +fN -d File_Gamma=sRGB Output_File_Name=gamma_showcase_ref0.png Declare=Stripes=off
|
||||
// +w320 +h240 +a0.3 +am1 +fN -d File_Gamma=sRGB Output_File_Name=gamma_showcase_ref1.png Declare=Stripes=off Declare=Gamma=1.2
|
||||
// +w320 +h240 +a0.3 +am1 +fN -d File_Gamma=sRGB Output_File_Name=gamma_showcase_ref2.png Declare=Stripes=off Declare=Gamma=0.8
|
||||
// +w640 +h480 +a0.3 +am1 -f +d
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "colors.inc"
|
||||
#include "stones.inc"
|
||||
|
||||
#ifndef (Stripes)
|
||||
#declare Stripes = on;
|
||||
#end
|
||||
#ifndef (Gamma)
|
||||
#declare Gamma = 1.0;
|
||||
#end
|
||||
|
||||
global_settings {
|
||||
max_trace_level 5
|
||||
assumed_gamma 1.0
|
||||
radiosity {
|
||||
pretrace_start 0.08
|
||||
pretrace_end 0.01
|
||||
count 35
|
||||
nearest_count 5
|
||||
error_bound 1.8
|
||||
recursion_limit 2
|
||||
low_error_factor .5
|
||||
gray_threshold 0.0
|
||||
minimum_reuse 0.015
|
||||
brightness 1
|
||||
adc_bailout 0.01/2
|
||||
}
|
||||
}
|
||||
|
||||
#default {
|
||||
texture {
|
||||
pigment {rgb 1}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.6
|
||||
specular 0.6 roughness 0.001
|
||||
reflection { 0.0 1.0 fresnel on }
|
||||
conserve_energy
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------
|
||||
|
||||
#local TestRed = rgb <0.5,0.1,0.1>;
|
||||
#local TestGreen = rgb <0.1,0.5,0.1>;
|
||||
#local TestBlue = rgb <0.1,0.1,0.5>;
|
||||
|
||||
#local CameraFocus = <0,0.5,0>;
|
||||
#local CameraDist = 8;
|
||||
#local CameraDepth = 1.8;
|
||||
#local CameraTilt = 20;
|
||||
|
||||
camera {
|
||||
location <0,0,0>
|
||||
direction z*CameraDepth
|
||||
right x*image_width/image_height
|
||||
up y
|
||||
translate <0,0,-CameraDist>
|
||||
rotate x*CameraTilt
|
||||
translate CameraFocus
|
||||
}
|
||||
|
||||
#macro LightSource(Pos,Color)
|
||||
light_source {
|
||||
Pos
|
||||
color Color
|
||||
spotlight
|
||||
point_at <0,0,0>
|
||||
radius 175/vlength(Pos)
|
||||
falloff 200/vlength(Pos)
|
||||
area_light x*vlength(Pos)/10, y*vlength(Pos)/10, 9,9 adaptive 1 jitter circular orient
|
||||
}
|
||||
|
||||
#end
|
||||
|
||||
LightSource(<-500,500,-500>,TestRed + <0.2,0.2,0.2>)
|
||||
LightSource(< 0,500,-500>,TestGreen + <0.2,0.2,0.2>)
|
||||
LightSource(< 500,500,-500>,TestBlue + <0.2,0.2,0.2>)
|
||||
|
||||
// ----------------------------------------
|
||||
|
||||
#macro DarkStripeBW(TargetBrightness)
|
||||
#if (TargetBrightness < 0.5)
|
||||
(0.0)
|
||||
#else
|
||||
(TargetBrightness*2 - 1.0)
|
||||
#end
|
||||
#end
|
||||
|
||||
#macro BrightStripeBW(TargetBrightness)
|
||||
#if (TargetBrightness < 0.5)
|
||||
(TargetBrightness*2)
|
||||
#else
|
||||
(1.0)
|
||||
#end
|
||||
#end
|
||||
|
||||
#macro DarkStripeRGB(TargetColor)
|
||||
<DarkStripeBW(TargetColor.red),DarkStripeBW(TargetColor.green),DarkStripeBW(TargetColor.blue)>
|
||||
#end
|
||||
|
||||
#macro BrightStripeRGB(TargetColor)
|
||||
<BrightStripeBW(TargetColor.red),BrightStripeBW(TargetColor.green),BrightStripeBW(TargetColor.blue)>
|
||||
#end
|
||||
|
||||
#macro StripedPigment(TargetColor)
|
||||
#if (Stripes)
|
||||
function { abs(mod(abs(image_height*CameraDepth*y/z+0.5),2.0)-1.0) }
|
||||
color_map {
|
||||
[0.5 color rgb DarkStripeRGB(TargetColor) ]
|
||||
[0.5 color rgb BrightStripeRGB(TargetColor) ]
|
||||
}
|
||||
translate <0,0,-CameraDist>
|
||||
rotate x*CameraTilt
|
||||
translate CameraFocus
|
||||
#else
|
||||
color TargetColor
|
||||
#end
|
||||
#end
|
||||
|
||||
|
||||
plane {
|
||||
y, 0
|
||||
texture { T_Stone11 }
|
||||
interior { ior 1.5 }
|
||||
}
|
||||
|
||||
#macro GammaAdjust(C,G)
|
||||
#local C2 = color rgbft <pow(C.red,G),pow(C.green,G),pow(C.blue,G),pow(C.filter,G),pow(C.transmit,G)>;
|
||||
(C2)
|
||||
#end
|
||||
|
||||
#macro TestSphere(Pos,Radius,TargetColor,Split)
|
||||
sphere {
|
||||
Pos + y*Radius, Radius
|
||||
texture { pigment { color GammaAdjust(TargetColor,Gamma) } }
|
||||
interior { ior 1.5 }
|
||||
}
|
||||
#if (Split)
|
||||
sphere {
|
||||
Pos + y*Radius + x*0.001, Radius
|
||||
texture { pigment { StripedPigment(TargetColor) } }
|
||||
interior { ior 1.5 }
|
||||
}
|
||||
#end
|
||||
#end
|
||||
|
||||
TestSphere(<-2,0,1>, 1, TestRed, true)
|
||||
TestSphere(< 0,0,1>, 1, TestGreen, true)
|
||||
TestSphere(< 2,0,1>, 1, TestBlue, true)
|
||||
|
||||
#local Steps = 6;
|
||||
#for(I,0,1,1/Steps)
|
||||
#if (I < 0.5)
|
||||
#local Color2 = TestRed;
|
||||
#else
|
||||
#local Color2 = TestBlue;
|
||||
#end
|
||||
#local P = abs(I-0.5)*2;
|
||||
TestSphere(<I*4-2,0,-0.5>, 2/Steps, (1-P)*TestGreen + P*Color2, true)
|
||||
#end
|
||||
|
||||
#local Steps = 8;
|
||||
#for(I,0,1,1/Steps)
|
||||
TestSphere(<I*4-2,0,-1.5>, 2/Steps, rgb I, true)
|
||||
TestSphere(<I*4-2,0,-2.0>, 2/Steps, GammaAdjust(rgb I, 2.2*Gamma), false)
|
||||
#end
|
||||
91
samples/POV-Ray SDL/sky.inc
Executable file
91
samples/POV-Ray SDL/sky.inc
Executable file
@@ -0,0 +1,91 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence Of Vision Ray Tracer Include File
|
||||
// File: sky.inc
|
||||
// Desc: sky for 'balcony.pov' demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
|
||||
// Updated: 09Aug2008 (jh) for v3.7 distribution
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (version < 3.7)
|
||||
#version 3.5;
|
||||
#end
|
||||
|
||||
#local P_Clouds=
|
||||
pigment {
|
||||
gradient z
|
||||
pigment_map {
|
||||
[ 0.0 color rgbt 1]
|
||||
[ 0.1
|
||||
bozo
|
||||
color_map {
|
||||
[0.0 color rgbt < 0.85, 0.88, 0.94, 0.0>]
|
||||
[0.15 color rgbt < 0.91, 0.96, 0.99, 0.0>]
|
||||
[0.35 color rgbt < 0.91, 0.96, 0.99, 1.0>]
|
||||
}
|
||||
turbulence 0.75
|
||||
lambda 2.4
|
||||
omega 0.6
|
||||
octaves 8
|
||||
scale <0.4,0.4,0.15>
|
||||
]
|
||||
[ 0.4
|
||||
bozo
|
||||
color_map {
|
||||
[0.0 color rgbt < 0.85, 0.88, 0.94, 0.0>]
|
||||
[0.15 color rgbt < 0.91, 0.96, 0.99, 0.0>]
|
||||
[0.35 color rgbt < 0.91, 0.96, 0.99, 1.0>]
|
||||
}
|
||||
turbulence 0.75
|
||||
lambda 2.4
|
||||
omega 0.6
|
||||
octaves 8
|
||||
scale <0.4,0.4,0.15>
|
||||
]
|
||||
[ 0.65 color rgbt 1]
|
||||
|
||||
}
|
||||
rotate 10*z
|
||||
}
|
||||
|
||||
|
||||
#local Tex_Sky =
|
||||
texture {
|
||||
pigment {
|
||||
function { abs(z) }
|
||||
color_map {
|
||||
[0.0 color rgb < 0.640, 0.685, 0.800 >]
|
||||
[0.3 color rgb < 0.400, 0.550, 0.900 >]
|
||||
}
|
||||
turbulence 0.05
|
||||
}
|
||||
|
||||
finish {
|
||||
diffuse 0
|
||||
ambient 1
|
||||
}
|
||||
}
|
||||
texture {
|
||||
pigment { P_Clouds }
|
||||
finish {
|
||||
diffuse 0
|
||||
ambient 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sphere {
|
||||
<0, 0, 0>, 1
|
||||
texture { Tex_Sky }
|
||||
scale<1000000, 1000000, 300000>
|
||||
no_shadow
|
||||
hollow on
|
||||
photons{ collect off }
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
171
samples/POV-Ray SDL/table.inc
Executable file
171
samples/POV-Ray SDL/table.inc
Executable file
@@ -0,0 +1,171 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence Of Vision Ray Tracer Include File
|
||||
// File: table.inc
|
||||
// Desc: table for 'balcony.pov' demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
|
||||
// Updated: 09Aug2008 (jh) for v3.7 distribution
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (version < 3.7)
|
||||
#version 3.5;
|
||||
#end
|
||||
|
||||
#declare Tex_Table_Foot=
|
||||
texture {
|
||||
pigment {
|
||||
color rgb 0.4
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.3
|
||||
specular 0.4
|
||||
roughness 0.01
|
||||
metallic
|
||||
|
||||
reflection {
|
||||
0.8
|
||||
metallic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Table_Foot_Bottom=
|
||||
texture {
|
||||
pigment {
|
||||
color rgb 0.2
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.3
|
||||
specular 0.4
|
||||
roughness 0.02
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Dark_Wood=
|
||||
texture {
|
||||
pigment {
|
||||
bozo
|
||||
color_map {
|
||||
[0.3 color rgb <0.0,0.0,0.16> ]
|
||||
[0.5 color rgb <0.0,0.0,0.08> ]
|
||||
[0.7 color rgb <0.0,0.0,0.0> ]
|
||||
}
|
||||
scale <4,1,1>*0.036
|
||||
}
|
||||
finish {
|
||||
ambient 0.09
|
||||
diffuse 0.3
|
||||
specular 0.5
|
||||
roughness 0.025
|
||||
|
||||
reflection {
|
||||
0.15
|
||||
metallic
|
||||
}
|
||||
}
|
||||
normal {
|
||||
granite 0.1
|
||||
scale 0.03
|
||||
accuracy 0.007
|
||||
}
|
||||
scale 0.5
|
||||
rotate 90*y
|
||||
}
|
||||
|
||||
#declare Tex_Dark_Wood2 =
|
||||
texture {
|
||||
pigment {
|
||||
wood
|
||||
color_map {
|
||||
[ 0.0000 color rgb<0.6431, 0.3176, 0.0824> ]
|
||||
[ 0.1000 color rgb<0.6196, 0.2824, 0.0588> ]
|
||||
[ 0.2000 color rgb<0.7137, 0.3725, 0.1529> ]
|
||||
[ 0.3000 color rgb<0.7529, 0.4157, 0.1922> ]
|
||||
[ 0.4000 color rgb<0.8157, 0.4941, 0.2588> ]
|
||||
[ 0.5000 color rgb<0.7686, 0.4745, 0.2196> ]
|
||||
[ 0.6000 color rgb<0.8471, 0.5647, 0.2980> ]
|
||||
[ 0.7000 color rgb<0.8627, 0.5843, 0.3137> ]
|
||||
[ 0.8000 color rgb<0.8902, 0.6314, 0.3529> ]
|
||||
[ 0.9000 color rgb<0.8627, 0.6118, 0.3294> ]
|
||||
[ 1.0000 color rgb<0.8392, 0.5922, 0.3098> ]
|
||||
}
|
||||
|
||||
turbulence <0.075, 0.075, 0.65>
|
||||
scale <0.04, 0.04, 0.6>
|
||||
|
||||
scale 0.27
|
||||
rotate 91*y
|
||||
translate -0.1*z
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.4
|
||||
specular 0.3
|
||||
roughness 0.025
|
||||
|
||||
reflection {
|
||||
0.17
|
||||
metallic
|
||||
}
|
||||
}
|
||||
normal {
|
||||
granite 0.015
|
||||
scale <0.02, 0.02, 0.06>
|
||||
rotate 91*y
|
||||
accuracy 0.007
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include "shapes.inc"
|
||||
|
||||
#declare Table_Height=0.66;
|
||||
|
||||
#declare Table=
|
||||
union {
|
||||
|
||||
torus { 0.49, 0.01 sturm rotate 90*x translate z*(Table_Height-0.01) }
|
||||
cylinder { z*(Table_Height-0.05), z*(Table_Height-0.01), 0.5 }
|
||||
cylinder { z*(Table_Height-0.01), z*Table_Height, 0.49 }
|
||||
|
||||
union {
|
||||
cylinder { z*0.01, z*0.63, 0.03 translate 0.37*x }
|
||||
cylinder { z*0.01, z*0.63, 0.03 translate 0.37*x rotate 120*z }
|
||||
cylinder { z*0.01, z*0.63, 0.03 translate 0.37*x rotate 240*z }
|
||||
|
||||
texture { Tex_Table_Foot }
|
||||
|
||||
rotate -70*z
|
||||
}
|
||||
|
||||
union {
|
||||
object { Round_Cylinder_Merge (0, z*0.03, 0.031, 0.005) translate 0.37*x }
|
||||
object { Round_Cylinder_Merge (0, z*0.03, 0.031, 0.005) translate 0.37*x rotate 120*z }
|
||||
object { Round_Cylinder_Merge (0, z*0.03, 0.031, 0.005) translate 0.37*x rotate 240*z }
|
||||
|
||||
texture { Tex_Table_Foot_Bottom }
|
||||
|
||||
rotate -70*z
|
||||
}
|
||||
|
||||
texture { Tex_Dark_Wood2 }
|
||||
|
||||
#if (show_TableCloth)
|
||||
scale <0.97, 0.97, 0.99>
|
||||
#else
|
||||
scale <0.97, 0.97, 1.00>
|
||||
#end
|
||||
}
|
||||
|
||||
object { Table translate <3.3,2.52,0> }
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
91
samples/POV-Ray SDL/table_cloth.inc
Executable file
91
samples/POV-Ray SDL/table_cloth.inc
Executable file
@@ -0,0 +1,91 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence Of Vision Ray Tracer Include File
|
||||
// File: table_cloth.inc
|
||||
// Desc: table cloth for 'balcony.pov' demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
|
||||
// Updated: 09Aug2008 (jh) for v3.7 distribution
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (version < 3.7)
|
||||
#version 3.5;
|
||||
#end
|
||||
|
||||
#declare ClCol01=color rgb <0.8, 0.7, 0.4>;
|
||||
#declare ClCol02=color rgb <0.07, 0.12, 0.4>;
|
||||
|
||||
#declare CPig1=
|
||||
pigment {
|
||||
gradient x
|
||||
triangle_wave
|
||||
color_map {
|
||||
[0.04 ClCol01 ]
|
||||
[0.04 ClCol02 ]
|
||||
[0.06 ClCol02 ]
|
||||
[0.06 ClCol01 ]
|
||||
[0.09 ClCol01 ]
|
||||
[0.09 ClCol02 ]
|
||||
[0.13 ClCol02 ]
|
||||
[0.13 ClCol01 ]
|
||||
[0.16 ClCol01 ]
|
||||
[0.16 ClCol02 ]
|
||||
[0.18 ClCol02 ]
|
||||
[0.18 ClCol01 ]
|
||||
}
|
||||
}
|
||||
|
||||
#declare CPig2=
|
||||
pigment {
|
||||
gradient y
|
||||
triangle_wave
|
||||
pigment_map {
|
||||
[0.04 CPig1 ]
|
||||
[0.04 ClCol02 ]
|
||||
[0.06 ClCol02 ]
|
||||
[0.06 CPig1 ]
|
||||
[0.09 CPig1 ]
|
||||
[0.09 ClCol02 ]
|
||||
[0.13 ClCol02 ]
|
||||
[0.13 CPig1 ]
|
||||
[0.16 CPig1 ]
|
||||
[0.16 ClCol02 ]
|
||||
[0.18 ClCol02 ]
|
||||
[0.18 CPig1 ]
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
#include "clothutil.inc"
|
||||
|
||||
ReadClothFile("cloth.cth")
|
||||
DrawSmoothTriangles2(Points, 90, 90, on, true, "cloth.inc")
|
||||
*/
|
||||
#declare Table_Cloth=
|
||||
mesh2{
|
||||
#include "cloth.inc"
|
||||
texture {
|
||||
uv_mapping
|
||||
pigment {
|
||||
CPig2
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.6
|
||||
}
|
||||
normal {
|
||||
quilted 0.16
|
||||
scale 0.008
|
||||
}
|
||||
}
|
||||
rotate -30*z
|
||||
}
|
||||
|
||||
object { Table_Cloth translate <3.3,2.52,0> }
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
136
samples/POV-Ray SDL/table_stuff.inc
Executable file
136
samples/POV-Ray SDL/table_stuff.inc
Executable file
@@ -0,0 +1,136 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence Of Vision Ray Tracer Include File
|
||||
// File: table_stuff.inc
|
||||
// Desc: stuff on the table for 'balcony.pov' demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
|
||||
// Updated: 09Aug2008 (jh) for v3.7 distribution
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (version < 3.7)
|
||||
#version 3.5;
|
||||
#end
|
||||
|
||||
#declare Mat_Glass=
|
||||
material {
|
||||
texture {
|
||||
pigment { color rgbt 1 }
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.1
|
||||
specular 0.5
|
||||
roughness 0.01
|
||||
|
||||
reflection {
|
||||
0.15, 1.0
|
||||
fresnel on
|
||||
}
|
||||
|
||||
conserve_energy
|
||||
}
|
||||
}
|
||||
interior {
|
||||
ior 1.5
|
||||
fade_distance 0.1
|
||||
fade_power 1001
|
||||
fade_color <0.4,0.4,0.8>
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Box_Metal=
|
||||
texture {
|
||||
pigment {
|
||||
color rgb <0.5,0.45,0.4>
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.05
|
||||
specular 0.5
|
||||
roughness 0.01
|
||||
metallic
|
||||
|
||||
reflection {
|
||||
0.8
|
||||
metallic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#include "shapes.inc"
|
||||
#include "functions.inc"
|
||||
|
||||
#declare Table_Height=0.66;
|
||||
|
||||
#declare Box_Iso=
|
||||
isosurface {
|
||||
function { -f_superellipsoid(x,y,z, 0.2, 0.2) }
|
||||
contained_by {box { -1.2, 1.2 }}
|
||||
max_gradient 1.1
|
||||
|
||||
translate 1.001*z
|
||||
}
|
||||
|
||||
#declare Box=
|
||||
union {
|
||||
intersection {
|
||||
object { Box_Iso }
|
||||
object { Round_Box_Merge (<-1.1,-1.1,1.6>, <1.1,1.1,-0.1>, 0.4) }
|
||||
|
||||
}
|
||||
intersection {
|
||||
object { Box_Iso }
|
||||
object { Round_Box_Merge (<-1.1,-1.1,1.6>, <1.1,1.1,2.2>, 0.4) }
|
||||
scale 1.01
|
||||
rotate 0.2
|
||||
}
|
||||
torus {
|
||||
0.6, 0.13
|
||||
rotate 90*z
|
||||
translate 2*z
|
||||
}
|
||||
|
||||
scale <1,1,0.6>
|
||||
}
|
||||
|
||||
#include "bglass.inc"
|
||||
|
||||
union {
|
||||
object {
|
||||
Glass
|
||||
|
||||
photons{
|
||||
target 1.0
|
||||
refraction on
|
||||
reflection on
|
||||
}
|
||||
|
||||
translate <-0.16,-0.1,0>
|
||||
}
|
||||
|
||||
object {
|
||||
Box
|
||||
|
||||
texture {
|
||||
Tex_Box_Metal
|
||||
}
|
||||
photons{
|
||||
target 1.0
|
||||
reflection on
|
||||
}
|
||||
|
||||
scale 0.06
|
||||
translate <-0.1,0.2,0>
|
||||
}
|
||||
|
||||
|
||||
translate <3.3,2.52,Table_Height>
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
118
samples/POV-Ray SDL/terrain.inc
Executable file
118
samples/POV-Ray SDL/terrain.inc
Executable file
@@ -0,0 +1,118 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence of Vision Ray Tracer Include File
|
||||
// File: terrain.inc
|
||||
// Desc: terrain for 'balcony.pov' demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
|
||||
// Updated: 09Aug2008 (jh) for v3.7 distribution
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (version < 3.7)
|
||||
#version 3.5;
|
||||
#end
|
||||
|
||||
#declare Tex_Vegetation=
|
||||
texture {
|
||||
pigment {
|
||||
bozo
|
||||
color_map {
|
||||
[0.3 color rgb <0.20,0.35,0.1>*0.9 ]
|
||||
[0.8 color rgb <0.12,0.35,0.1>*0.7 ]
|
||||
}
|
||||
scale 4
|
||||
}
|
||||
finish {
|
||||
ambient 0.0
|
||||
diffuse 0.5
|
||||
brilliance 0.8
|
||||
specular 0.1
|
||||
}
|
||||
normal {
|
||||
granite 0.4
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Stone=
|
||||
texture {
|
||||
pigment {
|
||||
color rgb <0.6,0.6,0.6>
|
||||
}
|
||||
finish {
|
||||
ambient 0.0//0.1
|
||||
diffuse 0.45
|
||||
specular 0.15
|
||||
}
|
||||
}
|
||||
|
||||
#declare Tex_Terrain=
|
||||
texture {
|
||||
slope -z
|
||||
texture_map {
|
||||
[0.34 Tex_Vegetation ]
|
||||
[0.34 Tex_Stone ]
|
||||
}
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
|
||||
|
||||
#declare Terrain=
|
||||
object {
|
||||
height_field {
|
||||
|
||||
function 300,300 {
|
||||
pigment {
|
||||
function { 1-(min(pow(x*x + z*z,1.3), 1) -0.0001) }
|
||||
color_map {
|
||||
[0.0 color rgb 0.0]
|
||||
[1.0 color rgb 1.0]
|
||||
}
|
||||
scale 0.35
|
||||
translate <0.5,0,0.5>
|
||||
|
||||
warp { turbulence 0.3 }
|
||||
|
||||
scale 3
|
||||
warp { turbulence 0.4 lambda 2.2 octaves 8 }
|
||||
scale 1/3
|
||||
|
||||
rotate -90*x
|
||||
translate -0.5*y
|
||||
scale <1, -1, 1>
|
||||
translate 0.5*y
|
||||
}
|
||||
}
|
||||
|
||||
water_level 0.02
|
||||
|
||||
rotate 90*x
|
||||
rotate -10*z
|
||||
|
||||
scale <4, 4, 1>
|
||||
scale 30
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
union {
|
||||
object {
|
||||
Terrain
|
||||
translate <130, 368, -10>
|
||||
}
|
||||
|
||||
object {
|
||||
Terrain
|
||||
rotate -180*z
|
||||
scale 0.3
|
||||
translate <90, 97, -6>
|
||||
}
|
||||
texture { Tex_Terrain }
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
74
samples/POV-Ray SDL/water.inc
Executable file
74
samples/POV-Ray SDL/water.inc
Executable file
@@ -0,0 +1,74 @@
|
||||
// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
|
||||
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
|
||||
|
||||
// Persistence Of Vision Ray Tracer Include File
|
||||
// File: water.inc
|
||||
// Desc: water for 'balcony.pov' demonstration scene
|
||||
// Date: July/August 2001
|
||||
// Auth: Christoph Hormann
|
||||
|
||||
// Updated: 09Aug2008 (jh) for v3.7 distribution
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
|
||||
#if (version < 3.7)
|
||||
#version 3.5;
|
||||
#end
|
||||
|
||||
#include "functions.inc"
|
||||
|
||||
#declare RMF=function{ f_ridged_mf(x, y, z, 0.07, 2.2, 7, 0.6, 0.9, 1)}
|
||||
|
||||
#declare M_Watx4 =
|
||||
material {
|
||||
texture {
|
||||
pigment {
|
||||
color rgbt <0.2, 0.22, 0.21, 0.94>
|
||||
}
|
||||
finish {
|
||||
diffuse 0.0
|
||||
ambient -0.2
|
||||
|
||||
reflection {
|
||||
0.0, 0.95
|
||||
fresnel on
|
||||
}
|
||||
|
||||
conserve_energy
|
||||
|
||||
specular 0.4
|
||||
roughness 0.007
|
||||
}
|
||||
normal{
|
||||
function { RMF(x, y, z) } 0.8
|
||||
scale 0.3
|
||||
}
|
||||
}
|
||||
interior {
|
||||
ior 1.31
|
||||
fade_distance 5
|
||||
fade_power 1001.0
|
||||
fade_color <0.02, 0.20, 0.06>
|
||||
}
|
||||
}
|
||||
|
||||
plane {
|
||||
z, -1
|
||||
material {
|
||||
M_Watx4
|
||||
}
|
||||
hollow on
|
||||
}
|
||||
|
||||
plane {
|
||||
z, -12.0
|
||||
|
||||
texture {
|
||||
pigment { color rgb 0 }
|
||||
finish { ambient 0.0 diffuse 0.0 }
|
||||
}
|
||||
hollow on
|
||||
}
|
||||
|
||||
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
||||
280
samples/Prolog/queues.yap
Normal file
280
samples/Prolog/queues.yap
Normal file
@@ -0,0 +1,280 @@
|
||||
% This file has been included as an YAP library by Vitor Santos Costa, 1999
|
||||
|
||||
% File : QUEUES.PL
|
||||
% Author : R.A.O'Keefe
|
||||
% Updated: Friday November 18th, 1983, 8:09:31 pm
|
||||
% Purpose: define queue operations
|
||||
% Needs : lib(lists) for append/3.
|
||||
|
||||
/** @defgroup Queues Queues
|
||||
@ingroup library
|
||||
@{
|
||||
|
||||
The following queue manipulation routines are available once
|
||||
included with the `use_module(library(queues))` command. Queues are
|
||||
implemented with difference lists.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@pred make_queue(+ _Queue_)
|
||||
|
||||
|
||||
Creates a new empty queue. It should only be used to create a new queue.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** @pred empty_queue(+ _Queue_)
|
||||
|
||||
|
||||
Tests whether the queue is empty.
|
||||
|
||||
|
||||
*/
|
||||
/** @pred head_queue(+ _Queue_, ? _Head_)
|
||||
|
||||
|
||||
Unifies Head with the first element of the queue.
|
||||
|
||||
|
||||
*/
|
||||
/** @pred join_queue(+ _Element_, + _OldQueue_, - _NewQueue_)
|
||||
|
||||
|
||||
Adds the new element at the end of the queue.
|
||||
|
||||
|
||||
*/
|
||||
/** @pred jump_queue(+ _Element_, + _OldQueue_, - _NewQueue_)
|
||||
|
||||
|
||||
Adds the new element at the front of the list.
|
||||
|
||||
|
||||
*/
|
||||
/** @pred length_queue(+ _Queue_, - _Length_)
|
||||
|
||||
|
||||
Counts the number of elements currently in the queue.
|
||||
|
||||
|
||||
*/
|
||||
/** @pred list_join_queue(+ _List_, + _OldQueue_, - _NewQueue_)
|
||||
|
||||
|
||||
Ads the new elements at the end of the queue.
|
||||
|
||||
|
||||
*/
|
||||
/** @pred list_jump_queue(+ _List_, + _OldQueue_, + _NewQueue_)
|
||||
|
||||
|
||||
Adds all the elements of _List_ at the front of the queue.
|
||||
|
||||
|
||||
*/
|
||||
/** @pred list_to_queue(+ _List_, - _Queue_)
|
||||
|
||||
|
||||
Creates a new queue with the same elements as _List._
|
||||
|
||||
|
||||
*/
|
||||
/** @pred queue_to_list(+ _Queue_, - _List_)
|
||||
|
||||
|
||||
Creates a new list with the same elements as _Queue_.
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
/** @pred serve_queue(+ _OldQueue_, + _Head_, - _NewQueue_)
|
||||
|
||||
|
||||
Removes the first element of the queue for service.
|
||||
|
||||
|
||||
*/
|
||||
:- module(queues, [
|
||||
make_queue/1, % create empty queue
|
||||
join_queue/3, % add element to end of queue
|
||||
list_join_queue/3, % add many elements to end of queue
|
||||
jump_queue/3, % add element to front of queue
|
||||
list_jump_queue/3, % add many elements to front of queue
|
||||
head_queue/2, % look at first element of queue
|
||||
serve_queue/3, % remove first element of queue
|
||||
length_queue/2, % count elements of queue
|
||||
empty_queue/1, % test whether queue is empty
|
||||
list_to_queue/2, % convert list to queue
|
||||
queue_to_list/2 % convert queue to list
|
||||
]).
|
||||
|
||||
:- use_module(library(lists), [append/3]).
|
||||
|
||||
/*
|
||||
:- mode
|
||||
make_queue(-),
|
||||
join_queue(+, +, -),
|
||||
list_join_queue(+, +, -),
|
||||
jump_queue(+, +, -),
|
||||
list_jump_queue(+, +, -),
|
||||
head_queue(+, ?),
|
||||
serve_queue(+, ?, -),
|
||||
length_queue(+, ?),
|
||||
length_queue(+, +, +, -),
|
||||
empty_queue(+),
|
||||
list_to_queue(+, -),
|
||||
queue_to_list(+, -),
|
||||
queue_to_list(+, +, -).
|
||||
*/
|
||||
|
||||
/* In this package, a queue is represented as a term Front-Back, where
|
||||
Front is a list and Back is a tail of that list, and is normally a
|
||||
variable. join_queue will only work when the Back is a variable,
|
||||
the other routines will accept any tail. The elements of the queue
|
||||
are the list difference, that is, all the elements starting at Front
|
||||
and stopping at Back. Examples:
|
||||
|
||||
[a,b,c,d,e|Z]-Z has elements a,b,c,d,e
|
||||
[a,b,c,d,e]-[d,e] has elements a,b,c
|
||||
Z-Z has no elements
|
||||
[1,2,3]-[1,2,3] has no elements
|
||||
*/
|
||||
|
||||
% make_queue(Queue)
|
||||
% creates a new empty queue. It will also match empty queues, but
|
||||
% because Prolog doesn't do the occurs check, it will also match
|
||||
% other queues, creating circular lists. So this should ONLY be
|
||||
% used to make new queues.
|
||||
|
||||
make_queue(X-X).
|
||||
|
||||
|
||||
|
||||
% join_queue(Element, OldQueue, NewQueue)
|
||||
% adds the new element at the end of the queue. The old queue is
|
||||
% side-effected, so you *can't* do
|
||||
% join_queue(1, OldQ, NewQ1),
|
||||
% join_queue(2, OldQ, NewQ2).
|
||||
% There isn't any easy way of doing that, sensible though it might
|
||||
% be. You *can* do
|
||||
% join_queue(1, OldQ, MidQ),
|
||||
% join_queue(2, MidQ, NewQ).
|
||||
% See list_join_queue.
|
||||
|
||||
join_queue(Element, Front-[Element|Back], Front-Back).
|
||||
|
||||
|
||||
|
||||
% list_join_queue(List, OldQueue, NewQueue)
|
||||
% adds the new elements at the end of the queue. The elements are
|
||||
% added in the same order that they appear in the list, e.g.
|
||||
% list_join_queue([y,z], [a,b,c|M]-M, [a,b,c,y,z|N]-N).
|
||||
|
||||
list_join_queue(List, Front-OldBack, Front-NewBack) :-
|
||||
append(List, OldBack, NewBack).
|
||||
|
||||
|
||||
|
||||
% jump_queue(Element, OldQueue, NewQueue)
|
||||
% adds the new element at the front of the list. Unlike join_queue,
|
||||
% jump_queue(1, OldQ, NewQ1),
|
||||
% jump_queue(2, OldQ, NewQ2)
|
||||
% *does* work, though if you add things at the end of NewQ1 they
|
||||
% will also show up in NewQ2. Note that
|
||||
% jump_queue(1, OldQ, MidQ),
|
||||
% jump_queue(2, MidQ, NewQ)
|
||||
% makes NewQ start 2, 1, ...
|
||||
|
||||
jump_queue(Element, Front-Back, [Element|Front]-Back).
|
||||
|
||||
|
||||
|
||||
% list_jump_queue(List, OldQueue, NewQueue)
|
||||
% adds all the elements of List at the front of the queue. There are
|
||||
% two ways we might do this. We could add all the elements one at a
|
||||
% time, so that they would appear at the beginning of the queue in the
|
||||
% opposite order to the order they had in the list, or we could add
|
||||
% them in one lump, so that they have the same order in the queue as
|
||||
% in the list. As you can easily add the elements one at a time if
|
||||
% that is what you want, I have chosen the latter.
|
||||
|
||||
list_jump_queue(List, OldFront-Back, NewFront-Back) :-
|
||||
append(List, OldFront, NewFront).
|
||||
% reverse(List, OldFront, NewFront). % for the other definition
|
||||
|
||||
|
||||
|
||||
% head_queue(Queue, Head)
|
||||
% unifies Head with the first element of the queue. The tricky part
|
||||
% is that we might be at the end of a queue: Back-Back, with Back a
|
||||
% variable, and in that case this predicate should not succeed, as we
|
||||
% don't know what that element is or whether it exists yet.
|
||||
|
||||
head_queue(Front-Back, Head) :-
|
||||
Front \== Back, % the queue is not empty
|
||||
Front = [Head|_].
|
||||
|
||||
|
||||
|
||||
% serve_queue(OldQueue, Head, NewQueue)
|
||||
% removes the first element of the queue for service.
|
||||
|
||||
serve_queue(OldFront-Back, Head, NewFront-Back) :-
|
||||
OldFront \== Back,
|
||||
OldFront = [Head|NewFront].
|
||||
|
||||
|
||||
|
||||
% empty_queue(Queue)
|
||||
% tests whether the queue is empty. If the back of a queue were
|
||||
% guaranteed to be a variable, we could have
|
||||
% empty_queue(Front-Back) :- var(Front).
|
||||
% but I don't see why you shouldn't be able to treat difference
|
||||
% lists as queues if you want to.
|
||||
|
||||
empty_queue(Front-Back) :-
|
||||
Front == Back.
|
||||
|
||||
|
||||
|
||||
% length_queue(Queue, Length)
|
||||
% counts the number of elements currently in the queue. Note that
|
||||
% we have to be careful in checking for the end of the list, we
|
||||
% can't test for [] the way length(List) does.
|
||||
|
||||
length_queue(Front-Back, Length) :-
|
||||
length_queue(Front, Back, 0, N),
|
||||
Length = N.
|
||||
|
||||
length_queue(Front, Back, N, N) :-
|
||||
Front == Back, !.
|
||||
length_queue([_|Front], Back, K, N) :-
|
||||
L is K+1,
|
||||
length_queue(Front, Back, L, N).
|
||||
|
||||
|
||||
|
||||
% list_to_queue(List, Queue)
|
||||
% creates a new queue with the same elements as List.
|
||||
|
||||
list_to_queue(List, Front-Back) :-
|
||||
append(List, Back, Front).
|
||||
|
||||
|
||||
|
||||
% queue_to_list(Queue, List)
|
||||
% creates a new list with the same elements as Queue.
|
||||
|
||||
queue_to_list(Front-Back, List) :-
|
||||
queue_to_list(Front, Back, List).
|
||||
|
||||
queue_to_list(Front, Back, Ans) :-
|
||||
Front == Back, !, Ans = [].
|
||||
queue_to_list([Head|Front], Back, [Head|Tail]) :-
|
||||
queue_to_list(Front, Back, Tail).
|
||||
|
||||
124
samples/Python/closure_js_binary.bzl
Normal file
124
samples/Python/closure_js_binary.bzl
Normal file
@@ -0,0 +1,124 @@
|
||||
# Copyright 2015 The Bazel Authors. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
"""Build definitions for JavaScript binaries compiled with the Closure Compiler.
|
||||
|
||||
A single file is produced with the _compiled.js suffix.
|
||||
|
||||
By default, the name of the entry point is assumed to be the same as that of the
|
||||
build target. This behaviour may be overridden with the "main" attribute.
|
||||
|
||||
The optimization level may be set with the "compilation_level" attribute.
|
||||
Supported values are: unobfuscated, simple, and advanced.
|
||||
|
||||
Example:
|
||||
|
||||
closure_js_binary(
|
||||
name = "hello",
|
||||
compilation_level = "simple",
|
||||
language_in = "ecmascript6",
|
||||
language_out = "ecmascript3",
|
||||
externs = ["//third_party/javascript/google_cast/cast.js"],
|
||||
deps = [
|
||||
"@closure_library//:closure_library",
|
||||
":hello_lib",
|
||||
],
|
||||
)
|
||||
|
||||
This rule will produce hello_combined.js.
|
||||
"""
|
||||
|
||||
_COMPILATION_LEVELS = {
|
||||
"whitespace_only": [
|
||||
"--compilation_level=WHITESPACE_ONLY",
|
||||
"--formatting=PRETTY_PRINT"
|
||||
],
|
||||
"simple": ["--compilation_level=SIMPLE"],
|
||||
"advanced": ["--compilation_level=ADVANCED"]
|
||||
}
|
||||
|
||||
_SUPPORTED_LANGUAGES = {
|
||||
"es3": ["ES3"],
|
||||
"ecmascript3": ["ECMASCRIPT3"],
|
||||
"es5": ["ES5"],
|
||||
"ecmascript5": ["ECMASCRIPT5"],
|
||||
"es5_strict": ["ES5_STRICT"],
|
||||
"ecmascript5_strict": ["ECMASCRIPT5_STRICT"],
|
||||
"es6": ["ES6"],
|
||||
"ecmascript6": ["ECMASCRIPT6"],
|
||||
"es6_strict": ["ES6_STRICT"],
|
||||
"ecmascript6_strict": ["ECMASCRIPT6_STRICT"],
|
||||
"es6_typed": ["ES6_TYPED"],
|
||||
"ecmascript6_typed": ["ECMASCRIPT6_TYPED"],
|
||||
}
|
||||
|
||||
def _impl(ctx):
|
||||
externs = set(order="compile")
|
||||
srcs = set(order="compile")
|
||||
for dep in ctx.attr.deps:
|
||||
externs += dep.transitive_js_externs
|
||||
srcs += dep.transitive_js_srcs
|
||||
|
||||
args = [
|
||||
"--entry_point=goog:%s" % ctx.attr.main,
|
||||
"--js_output_file=%s" % ctx.outputs.out.path,
|
||||
"--dependency_mode=LOOSE",
|
||||
"--warning_level=VERBOSE",
|
||||
] + (["--js=%s" % src.path for src in srcs] +
|
||||
["--externs=%s" % extern.path for extern in externs])
|
||||
|
||||
# Set the compilation level.
|
||||
if ctx.attr.compilation_level in _COMPILATION_LEVELS:
|
||||
args += _COMPILATION_LEVELS[ctx.attr.compilation_level]
|
||||
else:
|
||||
fail("Invalid compilation_level '%s', expected one of %s" %
|
||||
(ctx.attr.compilation_level, _COMPILATION_LEVELS.keys()))
|
||||
|
||||
# Set the language in.
|
||||
if ctx.attr.language_in in _SUPPORTED_LANGUAGES:
|
||||
args += "--language_in=" + _SUPPORTED_LANGUAGES[ctx.attr.language_in]
|
||||
else:
|
||||
fail("Invalid language_in '%s', expected one of %s" %
|
||||
(ctx.attr.language_in, _SUPPORTED_LANGUAGES.keys()))
|
||||
|
||||
# Set the language out.
|
||||
if ctx.attr.language_out in _SUPPORTED_LANGUAGES:
|
||||
args += "--language_out=" + _SUPPORTED_LANGUAGES[ctx.attr.language_out]
|
||||
else:
|
||||
fail("Invalid language_out '%s', expected one of %s" %
|
||||
(ctx.attr.language_out, _SUPPORTED_LANGUAGES.keys()))
|
||||
|
||||
ctx.action(
|
||||
inputs=list(srcs) + list(externs),
|
||||
outputs=[ctx.outputs.out],
|
||||
arguments=args,
|
||||
executable=ctx.executable._closure_compiler)
|
||||
|
||||
return struct(files=set([ctx.outputs.out]))
|
||||
|
||||
closure_js_binary = rule(
|
||||
implementation=_impl,
|
||||
attrs={
|
||||
"deps": attr.label_list(
|
||||
allow_files=False,
|
||||
providers=["transitive_js_externs", "transitive_js_srcs"]),
|
||||
"main": attr.string(default="%{name}"),
|
||||
"compilation_level": attr.string(default="advanced"),
|
||||
"language_in": attr.string(default="ecmascript6"),
|
||||
"language_out": attr.string(default="ecmascript3"),
|
||||
"_closure_compiler": attr.label(
|
||||
default=Label("//external:closure_compiler_"),
|
||||
executable=True),
|
||||
},
|
||||
outputs={"out": "%{name}_combined.js"})
|
||||
31
samples/Python/filenames/BUCK
Normal file
31
samples/Python/filenames/BUCK
Normal file
@@ -0,0 +1,31 @@
|
||||
include_defs('//tools/build.defs')
|
||||
|
||||
gerrit_war(name = 'gerrit')
|
||||
gerrit_war(name = 'gwtgerrit', ui = 'ui_dbg')
|
||||
gerrit_war(name = 'headless', ui = None)
|
||||
gerrit_war(name = 'chrome', ui = 'ui_chrome')
|
||||
gerrit_war(name = 'firefox', ui = 'ui_firefox')
|
||||
gerrit_war(name = 'safari', ui = 'ui_safari')
|
||||
gerrit_war(name = 'polygerrit', ui = 'polygerrit')
|
||||
gerrit_war(name = 'withdocs', docs = True)
|
||||
gerrit_war(name = 'release', ui = 'ui_optdbg_r', docs = True, context = ['//plugins:core'], visibility = ['//tools/maven:'])
|
||||
|
||||
API_DEPS = [
|
||||
'//gerrit-acceptance-framework:acceptance-framework',
|
||||
'//gerrit-acceptance-framework:acceptance-framework-src',
|
||||
'//gerrit-acceptance-framework:acceptance-framework-javadoc',
|
||||
'//gerrit-extension-api:extension-api',
|
||||
'//gerrit-extension-api:extension-api-src',
|
||||
'//gerrit-extension-api:extension-api-javadoc',
|
||||
'//gerrit-plugin-api:plugin-api',
|
||||
'//gerrit-plugin-api:plugin-api-src',
|
||||
'//gerrit-plugin-api:plugin-api-javadoc',
|
||||
'//gerrit-plugin-gwtui:gwtui-api',
|
||||
'//gerrit-plugin-gwtui:gwtui-api-src',
|
||||
'//gerrit-plugin-gwtui:gwtui-api-javadoc',
|
||||
]
|
||||
|
||||
zip_file(
|
||||
name = 'api',
|
||||
srcs = API_DEPS,
|
||||
)
|
||||
45
samples/Python/filenames/BUILD
Normal file
45
samples/Python/filenames/BUILD
Normal file
@@ -0,0 +1,45 @@
|
||||
package(default_visibility = ["//scripts/release:__pkg__"])
|
||||
|
||||
filegroup(
|
||||
name = "git",
|
||||
srcs = glob([".git/**"]),
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "dummy",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "srcs",
|
||||
srcs = glob(
|
||||
["**"],
|
||||
exclude = [
|
||||
"bazel-*/**",
|
||||
"output/**",
|
||||
".*/**",
|
||||
],
|
||||
) + [
|
||||
"//examples:srcs",
|
||||
"//scripts:srcs",
|
||||
"//site:srcs",
|
||||
"//src:srcs",
|
||||
"//tools:srcs",
|
||||
"//third_party:srcs",
|
||||
],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
load("//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
|
||||
|
||||
pkg_tar(
|
||||
name = "bazel-srcs",
|
||||
files = [":srcs"],
|
||||
strip_prefix = ".",
|
||||
# Public but bazel-only visibility.
|
||||
visibility = ["//:__subpackages__"],
|
||||
)
|
||||
|
||||
load("//tools/build_rules/go:def.bzl", "go_prefix")
|
||||
|
||||
go_prefix("github.com/bazelbuild/bazel")
|
||||
49
samples/Python/simpleclient.rpy
Normal file
49
samples/Python/simpleclient.rpy
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
# Copyright (c) Twisted Matrix Laboratories.
|
||||
# See LICENSE for details.
|
||||
|
||||
|
||||
"""
|
||||
An example client. Run simpleserv.py first before running this.
|
||||
"""
|
||||
|
||||
from twisted.internet import reactor, protocol
|
||||
|
||||
|
||||
# a client protocol
|
||||
|
||||
class EchoClient(protocol.Protocol):
|
||||
"""Once connected, send a message, then print the result."""
|
||||
|
||||
def connectionMade(self):
|
||||
self.transport.write("hello, world!")
|
||||
|
||||
def dataReceived(self, data):
|
||||
"As soon as any data is received, write it back."
|
||||
print "Server said:", data
|
||||
self.transport.loseConnection()
|
||||
|
||||
def connectionLost(self, reason):
|
||||
print "connection lost"
|
||||
|
||||
class EchoFactory(protocol.ClientFactory):
|
||||
protocol = EchoClient
|
||||
|
||||
def clientConnectionFailed(self, connector, reason):
|
||||
print "Connection failed - goodbye!"
|
||||
reactor.stop()
|
||||
|
||||
def clientConnectionLost(self, connector, reason):
|
||||
print "Connection lost - goodbye!"
|
||||
reactor.stop()
|
||||
|
||||
|
||||
# this connects the protocol to a server running on port 8000
|
||||
def main():
|
||||
f = EchoFactory()
|
||||
reactor.connectTCP("localhost", 8000, f)
|
||||
reactor.run()
|
||||
|
||||
# this only runs if the module was *not* imported
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -1421,7 +1421,4 @@ init:
|
||||
# $ renpy.pause(1.0)
|
||||
# hide text with dissolve
|
||||
#
|
||||
# return
|
||||
|
||||
|
||||
Return to the tutorial.
|
||||
# return
|
||||
41
samples/Text/aptitude-defaults.nb
Normal file
41
samples/Text/aptitude-defaults.nb
Normal file
@@ -0,0 +1,41 @@
|
||||
Pakker uten en bestemt bolk\n Disse pakkene tilhører ingen bestemt bolk. Kanskje det er noe feil ved dem?
|
||||
Virtuelle pakker\n Disse pakkene finnes ikke, de er navn som andre pakker bruker for å oppnå en eller annen egenskap.
|
||||
Pakker som setter opp systemet ditt til å utføre en bestemt oppgave\n Pakkene i bolken «oppgaver» inneholder ingen filer, det kan hende de bare er avhengige av andre pakker. Disse pakkene gjør det mulig å installere pakker for en bestemt oppgave på en lett måte.
|
||||
Administrative verktøy\n Pakkene i bolken «admin» gjør det mulig å utføre administrative oppgaver, som å installere programmer, opprette eller slette brukere, vise informasjon om systemet eller nettverkstrafikken osv.
|
||||
Pakker som er laget av pakker i et annet format (rpm, tgz mm)\n Pakkene i bolken «alien» ble laget av programmet «alien» fra et annet format enn Debians eget pakkeformat, f.eks fra RPM-pakker
|
||||
Debians grunnsystem\n Pakkene i bolken «grunnsystem» hører med til første del av Debian-installasjonen.
|
||||
Programmer for faksmodem og andre kommunikasjonsenheter\n Pakkene i bolken «Kommunikasjon» brukes til å styre modemer og andre enheter på maskinen, deriblant programvare for styring av faksmodemer (for eksempel, PPP for oppringt internettforbindelse og programmer som opprinnelig er skrevet for dette, slik som zmodem og kermit), og programmer for å styre mobiltelefoner, snakke med FidoNet og kjøre et BBS.
|
||||
Verktøy og programmer for programvareutvikling\n Pakker i seksjonen «utvikling» blir brukt til å skrive nye programmer og for å jobbe med videre med programmer som allerede er laget. Vanlige brukere som ikke kompilerer (setter sammen) sine egne programmer trenger neppe så mange programmer herfra.\n .\n Her finner du kompilatorer, avlusingsverktøy, skriveprogrammer som hjelper til med programmeringen, verktøy for håndtering av kildekode og andre ting som har med utvikling av programmer å gjøre.
|
||||
Dokumentasjon og spesialiserte program for visning av dokumentasjon\n Pakker i «dok»-seksjonen dokumenterer deler av Debian-systemet eller viser fram dokumenter i forskjellige format.
|
||||
Skriveprogram og tekstbehandlere\n Pakker i bolken «skriveprogram» lar deg redigere ren ASCII-tekst. Dette er nødvendigvis ikke tekstbehandlere, selv om du kan finne noen av dem her i denne bolken.
|
||||
Program for å jobba med elektronikk og elektriske kretser\n Pakker i «elektronikk»-seksjonen inneholder verktøy for design av elektriske kretser, simulatorer og assemblere for mikrokontrollere og andre liknende programmer.
|
||||
Programmer for innebygde systemer\nPakker i bolken «innebygd» er ment til å kjøre på innebygde systemer. Dette er spesialisert maskinvare med mye mindre datakraft enn en typisk skrivebordssystem, for eksempel en PDA, en mobiltelefon eller en Tivo.
|
||||
Skrivebordssystemet GNOME\n GNOME er en samling programvare som danner et lettbrukt skrivbordsmiljø for Linux. Pakker i «gnome»-bolken er enten deler av GNOME-miljøet eller tett sammenvevd med det.
|
||||
Spill, leketøy og andre programmer som bare er for gøy\n Pakker i «spill»-bolken er stort sett bare til for underholdningens skyld.
|
||||
Verktøy for å lage, vise og redigere grafikkfiler\n Pakker i «grafikk»-bolken er programmer for visning av bildefiler, bildebehandlingsprogrammer, støtteprogrammer for forskjellig utstyr (som videokort, skanner og digitalt kamera) og programmeringsverktøy for å håndtere grafikk.
|
||||
Programvare for radioamatører\n Pakker i «hamradio»-bolken er stort sett ment for radioamatører.
|
||||
Programmer som kjører skriptspråk\n Pakker i «tolkeprogram»-bolken er programmer som kompilerer og kjører språk som Python, Perl og Ruby, og som sørger for standardbibliotek for disse språkene.
|
||||
Skrivebordssystemet KDE\n KDE er en samling programvare som danner et lettbrukt skrivbordsmiljø for Linux. Pakker i «kde»-bolken er enten deler av KDE-miljøet eller tett sammenvevd med det.
|
||||
Utviklingsfiler for biblioteker\n Pakker i «libdevel»-bolken inneholder filer som trengs for å lage programmer som bruker biblioteker i «libs»-bolken. Du trenger ikke pakker fra denne bolken hvis du ikke har tenkt å lage programmer selv.
|
||||
Samling av programvarerutiner\n Pakker i «libs»-seksjonen sørger for nødvendige funksjoner som er felles for andre programmer på maskinen. Med svært få unntak skal det ikke værenødvendig å be om at slike pakker blir installert. Pakkesystemet sørger for å installere dem når de andre programmene trenger dem.
|
||||
Perl-tolker og biblioteker\n Pakker i «perl»-bolken sørger for programmeringsspråket Perl og mange tredjeparts-biblioteker til Perl. Hvis du ikke er Perl-programmerer selv, så trenger du ikke uttrykkelig installere pakker fra denne bolken, pakkesystemet installerer dem selv hvis det er nødvendig.
|
||||
Python-tolker og biblioteker\n Pakker i «python»-bolken sørger for programmeringsspråket Python og mange tredjeparts-biblioteker til det. Hvis du ikke er Python-programmerer selv, så trenger du ikke uttrykkelig installere pakker fra denne bolken, pakkesystemet installerer dem selv hvis det er nødvendig.
|
||||
Program for å skrive, sende og omdirigere epostmeldinger\n Pakker i «epost»-bolken inneholder epostlesere, nisser som flytter eposten dit den skal, programvare for epostlister og filter for søppelpost. Det fins også diverse andre programmer som gjør noe med elektronisk post, men som ikke er så lette å plassere i grupper.
|
||||
Numerisk analyse og andre matematikkrelaterte programmer\n Blant pakker i «matte»-bolken fins kalkulatorer, språk for matematiske utregninger, symbolsk algebra og programmer for å tegne ut matematiske objekter.
|
||||
Ymse programvare\n Pakker i «ymse»-bolken er ofte vanskelige å klassifisere, men det betyr ikke at de ikke finnes.
|
||||
Programmer for å koble til og tilby ulike tjenester i et nettverk\n Blant pakker i «nett»-bolken finner du klienter og tjenere for mange protokoller, verktøy for å manipulere og avluse lavnivå nettverksprotokoller, system for direkte meldingstjeneste og andre nettverksrelaterte programmer.
|
||||
Klienter og tjenere for Usenet\n Pakker i bolken «nyheter» henger sammen med til det distribuerte nyhetssystemet Usenet. Seksjonen tjenere og leseprogrammer (klienter) for dette systemet.
|
||||
Foreldede programbibliotek\n Pakker i bolken «gamle bibliotek» er foreldede og bør ikke brukes i ny programvare. De er tilgjengelige for at eldre programmer som er avhengige av programmene her fortsatt skal kunne virke.\n .\n Du skal normalt ikke behøve å be om å få installert pakker herfra. Pakkesystemet vil ta med disse pakkene når andre pakker krever det.
|
||||
Programmer som etterlikner andre datasystemer og og programmer som hjelper deg med å lese fremmede filsystem\n Pakker i bolken «andreosfs» etterlikner maskinvare og operativsystem og tilbyr verktøy for å overføre data mellom ulike operativsystem og maskinvareplattformer. (For eksempel verktøy for å lese DOS-disketter, og verktøy til å kommunisere med håndholdte maskiner som Palm Pilot)\n .\n Programmer for å brenne CD-plater er også med i denne seksjonen.
|
||||
Programvare for vitenskaplig arbeid\n Pakker i «vitenskap»-bolken er verktøy for astronomi, biologi og kjemi, pluss andre programmer man bruker i vitenskapelig arbeide.
|
||||
Kommandoskall og alternative konsollmiljø\n Pakker i «skall» er programmer som tilbyr grensesnitt med kommandolinje.
|
||||
Verktøy for å spille av og ta opp lyd\nI «lyd»-bolken finner du lydavspillere, opptakere, lydkomprimeringsprogram for mange format, miksere og lydstyring, program for MIDI-sekvenser og program for å lage noter. Her finner du også drivere for lydkort og programmer for lydprosessering.
|
||||
TeX typografi-systemet\n Pakker i bolken «tex» er deler i et system for å produsere utskrifter og andre slags utdata med høy typografisk kvalitet. Det omfatter selve TeX, TeX-pakker, skriveprogrammer som hjelper deg med å lage dokumenter i TeX, verktøy for å gjøre om TeX og TeX utdatafiler til ulike andre format, TeX-skrifttyper og annen programvare knyttet TeX.
|
||||
Tekstverktøy\n I bolken «tekst» finner du skriveprogrammer og tekstfiltere, stavekontroll, ordbøker og verktøy for å oversette mellom tegnkoding og tekst-filformater (for eksempel Unix og DOS) og programmer for å formatere, skrive ut og redigere som ren tekst.
|
||||
Forskjellige systemverktøy\n Pakkene i bolken «verktøy» har oppgaver som faller utenfor de andre kategoriene.
|
||||
Nettlesere, tjenere, mellomtjenere og andre verktøy\n I bolken «nett» finner du blant annet nettlesere, tjenere og mellomtjenere, programmer for å skrive CGI-skript eller nettbaserte programmer og andre programmer som har med verdensveven å gjøre.
|
||||
Vindussystemet «X» og beslektede programmer\n Pakkene i bolken «X11» inneholder også grunnpakka for vindussystemet «X», vindusbehandlere, verktøy for X og andre programmer med en X-grensesnitt som ble plassert her fordi de ikke passet inn noen andre steder.
|
||||
Debians hovedarkiv\n Selve Debian-distribusjonen består av pakker fra hovedbolken. Alle pakkene her er fri programvare.\n .\n For mer informasjon om hva Debian mener med «fri programvare», se http://www.debian.org/social_contract#guidelines
|
||||
Programmer som avhenger av programvare utenfor Debian.\n Pakker i bolken«bidrag» er ikke med i Debian.\n\n Disse pakkene er fri programvare, men de avhenger av programmer som ikke er en del av Debian. Dette kan skyldes at de ikke er fri programvare og ligger i bolken «ufri» i pakkearkivet, og disse kan Debian slett ikke distribuere, eller - i noen sjeldne tilfeller - at ingen har laget en pakke av dette ennå.\n .\n For mer informasjon om hva Debian mener med «fri programvare», se http://www.debian.org/social_contract#guidelines
|
||||
Programmer som ikke er fri programvare \n Pakkene i bolken «ufri» er ikke en del av Debian\n .\n Disse pakkene passet ikke med en eller flere av betingelsene i Debians retningslinjer for fri programvare (Debian Free Software Guidelines; se nedenfor). Du bør lese lisensen for programmene i denne bolken for å være sikker på at du har rett til å bruke dem slik du har tenkt.\n .\n For mer informasjon om hva Debian mener med «Fri programvare», se http://www.debian.org/social_contract#guidelines
|
||||
Programmer som er lagret utenfor USA på grunn av eksportforbud.\n Det er stor sjanse for at pakkene i «utenfor USA» inneholder kryptografi, og noen få av dem inneholder patenterte algoritmer. På grunn av dette kan de ikke eksporteres ut av USA, og lagres derfor på en tjener i «den frie verden».\n .\n Merk: Debian-prosjektet er, etter samtale med eksperter på rettsvesenet om nye endringer i eksporteringsreglene, i ferd med å flette kryptografiske programmer inn i de USA-baserte arkivene. De fleste pakkene som før lå i denne bolken er derfor flyttet til «hoved».
|
||||
1
samples/Text/filenames/README.me
Normal file
1
samples/Text/filenames/README.me
Normal file
@@ -0,0 +1 @@
|
||||
Please read me.
|
||||
9
samples/Text/filenames/click.me
Normal file
9
samples/Text/filenames/click.me
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
To run the "Conway's game of life" macros:
|
||||
|
||||
1. Type ":so life.vim". This loads the macros.
|
||||
2. Type "g" to run the macros.
|
||||
3. Type CTRL-C to interrupt.
|
||||
4. Type ":q!" to get out.
|
||||
|
||||
See life.vim for more advanced usage.
|
||||
1
samples/Text/filenames/delete.me
Normal file
1
samples/Text/filenames/delete.me
Normal file
@@ -0,0 +1 @@
|
||||
Delete me.
|
||||
1
samples/Text/filenames/keep.me
Normal file
1
samples/Text/filenames/keep.me
Normal file
@@ -0,0 +1 @@
|
||||
Keep me.
|
||||
1
samples/Text/filenames/read.me
Normal file
1
samples/Text/filenames/read.me
Normal file
@@ -0,0 +1 @@
|
||||
Read me now!
|
||||
1
samples/Text/filenames/test.me
Normal file
1
samples/Text/filenames/test.me
Normal file
@@ -0,0 +1 @@
|
||||
Test me.
|
||||
973
samples/Text/tutor.nb
Normal file
973
samples/Text/tutor.nb
Normal file
@@ -0,0 +1,973 @@
|
||||
===============================================================================
|
||||
= V e l k o m m e n t i l i n n f ø r i n g e n i V i m -- Ver. 1.7 =
|
||||
===============================================================================
|
||||
|
||||
Vim er en meget kraftig editor med mange kommandoer, alt for mange til å
|
||||
kunne gå gjennom alle i en innføring som denne. Den er beregnet på å
|
||||
sette deg inn i bruken av nok kommandoer så du vil være i stand til lett
|
||||
å kunne bruke Vim som en editor til alle formål.
|
||||
|
||||
Tiden som kreves for å gå gjennom denne innføringen tar ca. 25-30
|
||||
minutter, avhengig av hvor mye tid du bruker til eksperimentering.
|
||||
|
||||
MERK:
|
||||
Kommandoene i leksjonene vil modifisere teksten. Lag en kopi av denne
|
||||
filen som du kan øve deg på (hvis du kjørte Ŧvimtutorŧ-kommandoen, er
|
||||
dette allerede en kopi).
|
||||
|
||||
Det er viktig å huske at denne innføringen er beregnet på læring gjennom
|
||||
bruk. Det betyr at du må utføre kommandoene for å lære dem skikkelig.
|
||||
Hvis du bare leser teksten, vil du glemme kommandoene!
|
||||
|
||||
Først av alt, sjekk at ŦCaps Lockŧ IKKE er aktiv og trykk Ŧjŧ-tasten for
|
||||
å flytte markøren helt til leksjon 1.1 fyller skjermen.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.1: FLYTTING AV MARKØREN
|
||||
|
||||
|
||||
** For å flytte markøren, trykk tastene h, j, k, l som vist. **
|
||||
^
|
||||
k Tips: h-tasten er til venstre og flytter til venstre.
|
||||
< h l > l-tasten er til høyre og flytter til høyre.
|
||||
j j-tasten ser ut som en pil som peker nedover.
|
||||
v
|
||||
1. Flytt markøren rundt på skjermen til du har fått det inn i fingrene.
|
||||
|
||||
2. Hold inne nedovertasten (j) til den repeterer.
|
||||
Nå vet du hvordan du beveger deg til neste leksjon.
|
||||
|
||||
3. Gå til leksjon 1.2 ved hjelp av nedovertasten.
|
||||
|
||||
Merk: Hvis du blir usikker på noe du har skrevet, trykk <ESC> for å gå til
|
||||
normalmodus. Skriv deretter kommandoen du ønsket på nytt.
|
||||
|
||||
Merk: Piltastene skal også virke. Men ved å bruke hjkl vil du være i stand til
|
||||
å bevege markøren mye raskere når du er blitt vant til det. Helt sant!
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.2: AVSLUTTE VIM
|
||||
|
||||
|
||||
!! MERK: Før du utfører noen av punktene nedenfor, les hele leksjonen!!
|
||||
|
||||
1. Trykk <ESC>-tasten (for å forsikre deg om at du er i normalmodus).
|
||||
|
||||
2. Skriv: :q! <ENTER>.
|
||||
Dette avslutter editoren og FORKASTER alle forandringer som du har gjort.
|
||||
|
||||
3. Når du ser kommandolinjen i skallet, skriv kommandoen som startet denne
|
||||
innføringen. Den er: vimtutor <ENTER>
|
||||
|
||||
4. Hvis du er sikker på at du husker dette, utfør punktene 1 til 3 for å
|
||||
avslutte og starte editoren på nytt.
|
||||
|
||||
MERK: :q! <ENTER> forkaster alle forandringer som du gjorde. I løpet av noen
|
||||
få leksjoner vil du lære hvordan du lagrer forandringene til en fil.
|
||||
|
||||
5. Flytt markøren ned til leksjon 1.3.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.3: REDIGERING AV TEKST -- SLETTING
|
||||
|
||||
|
||||
** Trykk x for å slette tegnet under markøren. **
|
||||
|
||||
1. Flytt markøren til den første linjen merket med --->.
|
||||
|
||||
2. For å ordne feilene på linjen, flytt markøren til den er oppå tegnet som
|
||||
skal slettes.
|
||||
|
||||
3. Trykk tasten x for å slette det uønskede tegnet.
|
||||
|
||||
4. Repeter punkt 2 til 4 til setningen er lik den som er under.
|
||||
|
||||
---> Hessstennnn brrråsnudddde ii gaaata.
|
||||
---> Hesten bråsnudde i gata.
|
||||
|
||||
5. Nå som linjen er korrekt, gå til leksjon 1.4.
|
||||
|
||||
MERK: Når du går gjennom innføringen, ikke bare prøv å huske kommandoene, men
|
||||
bruk dem helt til de sitter.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.4: REDIGERING AV TEKST -- INNSETTING
|
||||
|
||||
|
||||
** Trykk i for å sette inn tekst. **
|
||||
|
||||
1. Flytt markøren til den første linjen som er merket med --->.
|
||||
|
||||
2. For å gjøre den første linjen lik den andre, flytt markøren til den står
|
||||
på tegnet ETTER posisjonen der teksten skal settes inn.
|
||||
|
||||
3. Trykk i og skriv inn teksten som mangler.
|
||||
|
||||
4. Etterhvert som hver feil er fikset, trykk <ESC> for å returnere til
|
||||
normalmodus. Repeter punkt 2 til 4 til setningen er korrekt.
|
||||
|
||||
---> Det er tkst som mnglr .
|
||||
---> Det er ganske mye tekst som mangler her.
|
||||
|
||||
5. Når du føler deg komfortabel med å sette inn tekst, gå til oppsummeringen
|
||||
nedenfor.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.5: REDIGERING AV TEKST -- LEGGE TIL
|
||||
|
||||
|
||||
** Trykk A for å legge til tekst. **
|
||||
|
||||
1. Flytt markøren til den første linjen nedenfor merket --->.
|
||||
Det har ikke noe å si hvor markøren er plassert på den linjen.
|
||||
|
||||
2. Trykk A og skriv inn det som skal legges til.
|
||||
|
||||
3. Når teksten er lagt til, trykk <ESC> for å returnere til normalmodusen.
|
||||
|
||||
4. Flytt markøren til den andre linjen markert med ---> og repeter steg 2 og
|
||||
3 for å reparere denne setningen.
|
||||
|
||||
---> Det mangler noe tekst p
|
||||
Det mangler noe tekst på denne linjen.
|
||||
---> Det mangler også litt tek
|
||||
Det mangler også litt tekst på denne linjen.
|
||||
|
||||
5. Når du føler at du behersker å legge til tekst, gå til leksjon 1.6.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.6: REDIGERE EN FIL
|
||||
|
||||
|
||||
** Bruk :wq for å lagre en fil og avslutte. **
|
||||
|
||||
!! MERK: Før du utfører noen av stegene nedenfor, les hele denne leksjonen!!
|
||||
|
||||
1. Avslutt denne innføringen som du gjorde i leksjon 1.2: :q!
|
||||
|
||||
2. Skriv denne kommandoen på kommandolinja: vim tutor <ENTER>
|
||||
Ŧvimŧ er kommandoen for å starte Vim-editoren, Ŧtutorŧ er navnet på fila
|
||||
som du vil redigere. Bruk en fil som kan forandres.
|
||||
|
||||
3. Sett inn og slett tekst som du lærte i de foregående leksjonene.
|
||||
|
||||
4. Lagre filen med forandringene og avslutt Vim med: :wq <ENTER>
|
||||
|
||||
5. Start innføringen på nytt og flytt ned til oppsummeringen som følger.
|
||||
|
||||
6. Etter å ha lest og forstått stegene ovenfor: Sett i gang.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 1
|
||||
|
||||
|
||||
1. Markøren beveges ved hjelp av piltastene eller hjkl-tastene.
|
||||
h (venstre) j (ned) k (opp) l (høyre)
|
||||
|
||||
2. For å starte Vim fra skall-kommandolinjen, skriv: vim FILNAVN <ENTER>
|
||||
|
||||
3. For å avslutte Vim, skriv: <ESC> :q! <ENTER> for å forkaste endringer.
|
||||
ELLER skriv: <ESC> :wq <ENTER> for å lagre forandringene.
|
||||
|
||||
4. For å slette tegnet under markøren, trykk: x
|
||||
|
||||
5. For å sette inn eller legge til tekst, trykk:
|
||||
i skriv innsatt tekst <ESC> sett inn før markøren
|
||||
A skriv tillagt tekst <ESC> legg til på slutten av linjen
|
||||
|
||||
MERK: Når du trykker <ESC> går du til normalmodus eller du avbryter en uønsket
|
||||
og delvis fullført kommando.
|
||||
|
||||
Nå kan du gå videre til leksjon 2.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.1: SLETTEKOMMANDOER
|
||||
|
||||
|
||||
** Trykk dw for å slette et ord. **
|
||||
|
||||
1. Trykk <ESC> for å være sikker på at du er i normalmodus.
|
||||
|
||||
2. Flytt markøren til den første linjen nedenfor merket --->.
|
||||
|
||||
3. Flytt markøren til begynnelsen av ordet som skal slettes.
|
||||
|
||||
4. Trykk dw og ordet vil forsvinne.
|
||||
|
||||
MERK: Bokstaven d vil komme til syne på den nederste linjen på skjermen når
|
||||
du skriver den. Vim venter på at du skal skrive w . Hvis du ser et annet
|
||||
tegn enn d har du skrevet noe feil; trykk <ESC> og start på nytt.
|
||||
|
||||
---> Det er agurk tre ord eple som ikke hører pære hjemme i denne setningen.
|
||||
---> Det er tre ord som ikke hører hjemme i denne setningen.
|
||||
|
||||
5. Repeter punkt 3 og 4 til den første setningen er lik den andre. Gå
|
||||
deretter til leksjon 2.2.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.2: FLERE SLETTEKOMMANDOER
|
||||
|
||||
|
||||
** Trykk d$ for å slette til slutten av linjen. **
|
||||
|
||||
1. Trykk <ESC> for å være sikker på at du er i normalmodus.
|
||||
|
||||
2. Flytt markøren til linjen nedenfor merket --->.
|
||||
|
||||
3. Flytt markøren til punktet der linjen skal kuttes (ETTER første punktum).
|
||||
|
||||
4. Trykk d$ for å slette alt til slutten av linjen.
|
||||
|
||||
---> Noen skrev slutten på linjen en gang for mye. linjen en gang for mye.
|
||||
|
||||
5. Gå til leksjon 2.3 for å forstå hva som skjer.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.3: OM OPERATORER OG BEVEGELSER
|
||||
|
||||
|
||||
Mange kommandoer som forandrer teksten er laget ut i fra en operator og en
|
||||
bevegelse. Formatet for en slettekommando med sletteoperatoren d er:
|
||||
|
||||
d bevegelse
|
||||
|
||||
Der:
|
||||
d - er sletteoperatoren.
|
||||
bevegelse - er hva operatoren vil opere på (listet nedenfor).
|
||||
|
||||
En kort liste med bevegelser:
|
||||
w - til starten av det neste ordet, UNNTATT det første tegnet.
|
||||
e - til slutten av det nåværende ordet, INKLUDERT det siste tegnet.
|
||||
$ - til slutten av linjen, INKLUDERT det siste tegnet.
|
||||
|
||||
Ved å skrive de vil altså alt fra markøren til slutten av ordet bli
|
||||
slettet.
|
||||
|
||||
MERK: Ved å skrive kun bevegelsen i normalmodusen uten en operator vil
|
||||
markøren flyttes som spesifisert.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
LEKSJON 2.4: BRUK AV TELLER FOR EN BEVEGELSE
|
||||
|
||||
|
||||
** Ved å skrive et tall foran en bevegelse repeterer den så mange ganger. **
|
||||
|
||||
1. Flytt markøren til starten av linjen markert ---> nedenfor.
|
||||
|
||||
2. Skriv 2w for å flytte markøren to ord framover.
|
||||
|
||||
3. Skriv 3e for å flytte markøren framover til slutten av det tredje
|
||||
ordet.
|
||||
|
||||
4. Skriv 0 (null) for å flytte til starten av linjen.
|
||||
|
||||
5. Repeter steg 2 og 3 med forskjellige tall.
|
||||
|
||||
---> Dette er en linje med noen ord som du kan bevege deg rundt på.
|
||||
|
||||
6. Gå videre til leksjon 2.5.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.5: BRUK AV ANTALL FOR Å SLETTE MER
|
||||
|
||||
|
||||
** Et tall sammen med en operator repeterer den så mange ganger. **
|
||||
|
||||
I kombinasjonen med sletteoperatoren og en bevegelse nevnt ovenfor setter du
|
||||
inn antall før bevegelsen for å slette mer:
|
||||
d nummer bevegelse
|
||||
|
||||
1. Flytt markøren til det første ordet med STORE BOKSTAVER på linjen markert
|
||||
med --->.
|
||||
|
||||
2. Skriv 2dw for å slette de to ordene med store bokstaver.
|
||||
|
||||
3. Repeter steg 1 og 2 med forskjelling antall for å slette de etterfølgende
|
||||
ordene som har store bokstaver.
|
||||
|
||||
---> Denne ABC DE linjen FGHI JK LMN OP er nå Q RS TUV litt mer lesbar.
|
||||
|
||||
MERK: Et antall mellom operatoren d og bevegelsen virker på samme måte som å
|
||||
bruke bevegelsen uten en operator.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.6: OPERERE PÅ LINJER
|
||||
|
||||
|
||||
** Trykk dd for å slette en hel linje. **
|
||||
|
||||
På grunn av at sletting av linjer er mye brukt, fant utviklerne av Vi ut at
|
||||
det vil være lettere å rett og slett trykke to d-er for å slette en linje.
|
||||
|
||||
1. Flytt markøren til den andre linjen i verset nedenfor.
|
||||
2. Trykk dd å slette linjen.
|
||||
3. Flytt deretter til den fjerde linjen.
|
||||
4. Trykk 2dd for å slette to linjer.
|
||||
|
||||
---> 1) Roser er røde,
|
||||
---> 2) Gjørme er gøy,
|
||||
---> 3) Fioler er blå,
|
||||
---> 4) Jeg har en bil,
|
||||
---> 5) Klokker viser tiden,
|
||||
---> 6) Druer er søte
|
||||
---> 7) Og du er likeså.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.7: ANGRE-KOMMANDOEN
|
||||
|
||||
|
||||
** Trykk u for å angre siste kommando, U for å fikse en hel linje. **
|
||||
|
||||
1. Flytt markøren til linjen nedenfor merket ---> og plasser den på den
|
||||
første feilen.
|
||||
2. Trykk x for å slette det første uønskede tegnet.
|
||||
3. Trykk så u for å angre den siste utførte kommandoen.
|
||||
4. Deretter ordner du alle feilene på linjene ved å bruke kommandoen x .
|
||||
5. Trykk nå en stor U for å sette linjen tilbake til det den var
|
||||
originalt.
|
||||
6. Trykk u noen ganger for å angre U og foregående kommandoer.
|
||||
7. Deretter trykker du CTRL-R (hold CTRL nede mens du trykker R) noen
|
||||
ganger for å gjenopprette kommandoene (omgjøre angrekommandoene).
|
||||
|
||||
---> RReparer feiilene påå denne linnnjen oog erssstatt dem meed angre.
|
||||
|
||||
8. Dette er meget nyttige kommandoer. Nå kan du gå til oppsummeringen av
|
||||
leksjon 2.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 2
|
||||
|
||||
|
||||
1. For å slette fra markøren fram til det neste ordet, trykk: dw
|
||||
2. For å slette fra markøren til slutten av en linje, trykk: d$
|
||||
3. For å slette en hel linje, trykk: dd
|
||||
|
||||
4. For å repetere en bevegelse, sett et nummer foran: 2w
|
||||
5. Formatet for en forandringskommando er:
|
||||
operator [nummer] bevegelse
|
||||
der:
|
||||
operator - hva som skal gjøres, f.eks. d for å slette
|
||||
[nummer] - et valgfritt antall for å repetere bevegelsen
|
||||
bevegelse - hva kommandoen skal operere på, eksempelvis w (ord),
|
||||
$ (til slutten av linjen) og så videre.
|
||||
|
||||
6. For å gå til starten av en linje, bruk en null: 0
|
||||
|
||||
7. For å angre tidligere endringer, skriv: u (liten u)
|
||||
For å angre alle forandringer på en linje, skriv: U (stor U)
|
||||
For å omgjøre angringen, trykk: CTRL-R
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 3.1: ŦLIM INNŧ-KOMMANDOEN
|
||||
|
||||
|
||||
** Trykk p for å lime inn tidligere slettet tekst etter markøren **
|
||||
|
||||
1. Flytt markøren til den første linjen med ---> nedenfor.
|
||||
|
||||
2. Trykk dd for å slette linjen og lagre den i et Vim-register.
|
||||
|
||||
3. Flytt markøren til c)-linjen, OVER posisjonen linjen skal settes inn.
|
||||
|
||||
4. Trykk p for å legge linjen under markøren.
|
||||
|
||||
5. Repeter punkt 2 til 4 helt til linjene er i riktig rekkefølge.
|
||||
|
||||
---> d) Kan du også lære?
|
||||
---> b) Fioler er blå,
|
||||
---> c) Intelligens må læres,
|
||||
---> a) Roser er røde,
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 3.2: ŦERSTATTŧ-KOMMANDOEN
|
||||
|
||||
|
||||
** Trykk rx for å erstatte tegnet under markøren med x. **
|
||||
|
||||
1. Flytt markøren til den første linjen nedenfor merket --->.
|
||||
|
||||
2. Flytt markøren så den står oppå den første feilen.
|
||||
|
||||
3. Trykk r og deretter tegnet som skal være der.
|
||||
|
||||
4. Repeter punkt 2 og 3 til den første linjen er lik den andre.
|
||||
|
||||
---> Da dfnne lynjxn ble zkrevet, var det nøen som tjykket feite taster!
|
||||
---> Da denne linjen ble skrevet, var det noen som trykket feile taster!
|
||||
|
||||
5. Gå videre til leksjon 3.2.
|
||||
|
||||
MERK: Husk at du bør lære ved å BRUKE, ikke pugge.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 3.3: ŦFORANDREŧ-OPERATOREN
|
||||
|
||||
|
||||
** For å forandre til slutten av et ord, trykk ce . **
|
||||
|
||||
1. Flytt markøren til den første linjen nedenfor som er merket --->.
|
||||
|
||||
2. Plasser markøren på u i Ŧlubjwrŧ.
|
||||
|
||||
3. Trykk ce og det korrekte ordet (i dette tilfellet, skriv Ŧinjenŧ).
|
||||
|
||||
4. Trykk <ESC> og gå til det neste tegnet som skal forandres.
|
||||
|
||||
5. Repeter punkt 3 og 4 helt til den første setningen er lik den andre.
|
||||
|
||||
---> Denne lubjwr har noen wgh som må forkwåp med Ŧforækzryasŧ-kommandoen.
|
||||
---> Denne linjen har noen ord som må forandres med Ŧforandreŧ-kommandoen.
|
||||
|
||||
Vær oppmerksom på at ce sletter ordet og går inn i innsettingsmodus.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 3.4: FLERE FORANDRINGER VED BRUK AV c
|
||||
|
||||
|
||||
** Forandringskommandoen blir brukt med de samme bevegelser som Ŧslettŧ. **
|
||||
|
||||
1. Forandringsoperatoren fungerer på samme måte som Ŧslettŧ. Formatet er:
|
||||
|
||||
c [nummer] bevegelse
|
||||
|
||||
2. Bevegelsene er de samme, som for eksempel w (ord) og $ (slutten av en
|
||||
linje).
|
||||
|
||||
3. Gå til den første linjen nedenfor som er merket --->.
|
||||
|
||||
4. Flytt markøren til den første feilen.
|
||||
|
||||
5. Skriv c$ og skriv resten av linjen lik den andre og trykk <ESC>.
|
||||
|
||||
---> Slutten på denne linjen trenger litt hjelp for å gjøre den lik den neste.
|
||||
---> Slutten på denne linjen trenger å bli rettet ved bruk av c$-kommandoen.
|
||||
|
||||
MERK: Du kan bruke slettetasten for å rette feil mens du skriver.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 3
|
||||
|
||||
|
||||
1. For å legge tilbake tekst som nettopp er blitt slettet, trykk p . Dette
|
||||
limer inn den slettede teksten ETTER markøren (hvis en linje ble slettet
|
||||
vil den bli limt inn på linjen under markøren).
|
||||
|
||||
2. For å erstatte et tegn under markøren, trykk r og deretter tegnet som
|
||||
du vil ha der.
|
||||
|
||||
3. Forandringsoperatoren lar deg forandre fra markøren til dit bevegelsen
|
||||
tar deg. Det vil si, skriv ce for å forandre fra markøren til slutten
|
||||
av ordet, c$ for å forandre til slutten av linjen.
|
||||
|
||||
4. Formatet for Ŧforandreŧ er:
|
||||
|
||||
c [nummer] bevegelse
|
||||
|
||||
Nå kan du gå til neste leksjon.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 4.1: POSISJONERING AV MARKØREN OG FILSTATUS
|
||||
|
||||
** Trykk CTRL-G for å vise posisjonen i filen og filstatusen.
|
||||
Trykk G for å gå til en spesifikk linje i filen. **
|
||||
|
||||
Merk: Les hele leksjonen før du utfører noen av punktene!
|
||||
|
||||
1. Hold nede Ctrl-tasten og trykk g . Vi kaller dette CTRL-G. En melding
|
||||
vil komme til syne på bunnen av skjermen med filnavnet og posisjonen i
|
||||
filen. Husk linjenummeret for bruk i steg 3.
|
||||
|
||||
Merk: Du kan se markørposisjonen i nederste høyre hjørne av skjermen. Dette
|
||||
skjer når Ŧrulerŧ-valget er satt (forklart i leksjon 6).
|
||||
|
||||
2. Trykk G for å gå til bunnen av filen.
|
||||
Skriv gg for å gå til begynnelsen av filen.
|
||||
|
||||
3. Skriv inn linjenummeret du var på og deretter G . Dette vil føre deg
|
||||
tilbake til linjen du var på da du først trykket CTRL-G.
|
||||
|
||||
4. Utfør steg 1 til 3 hvis du føler deg sikker på prosedyren.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 4.2: SØKEKOMMANDOEN
|
||||
|
||||
** Skriv / etterfulgt av en søkestreng som du vil lete etter. **
|
||||
|
||||
1. Trykk / når du er i normalmodusen. Legg merke til at skråstreken og
|
||||
markøren kommer til syne på bunnen av skjermen i likhet med
|
||||
Ŧ:ŧ-kommandoene.
|
||||
|
||||
2. Skriv Ŧfeeeiilŧ og trykk <ENTER>. Dette er teksten du vil lete etter.
|
||||
|
||||
3. For å finne neste forekomst av søkestrengen, trykk n .
|
||||
For å lete etter samme søketeksten i motsatt retning, trykk N .
|
||||
|
||||
4. For å lete etter en tekst bakover i filen, bruk ? istedenfor / .
|
||||
|
||||
5. For å gå tilbake til der du kom fra, trykk CTRL-O (Hold Ctrl nede mens
|
||||
du trykker bokstaven o ). Repeter for å gå enda lengre tilbake. CTRL-I
|
||||
går framover.
|
||||
|
||||
---> Ŧfeeeiilŧ er ikke måten å skrive Ŧfeilŧ på, feeeiil er helt feil.
|
||||
Merk: Når søkingen når slutten av filen, vil den fortsette fra starten unntatt
|
||||
hvis Ŧwrapscanŧ-valget er resatt.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 4.3: FINN SAMSVARENDE PARENTESER
|
||||
|
||||
|
||||
** Trykk % for å finne en samsvarende ), ] eller } . **
|
||||
|
||||
1. Plasser markøren på en (, [ eller { på linjen nedenfor merket --->.
|
||||
|
||||
2. Trykk % .
|
||||
|
||||
3. Markøren vil gå til den samsvarende parentesen eller hakeparentesen.
|
||||
|
||||
4. Trykk % for å flytte markøren til den andre samsvarende parentesen.
|
||||
|
||||
5. Flytt markøren til en annen (, ), [, ], { eller } og se hva % gjør.
|
||||
|
||||
---> Dette ( er en testlinje med (, [ ] og { } i den )).
|
||||
|
||||
Merk: Dette er veldig nyttig til feilsøking i programmer som har ubalansert
|
||||
antall parenteser!
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 4.4: ERSTATT-KOMMANDOEN
|
||||
|
||||
|
||||
** Skriv :s/gammel/ny/g for å erstatte Ŧgammelŧ med Ŧnyŧ. **
|
||||
|
||||
1. Flytt markøren til linjen nedenfor som er merket med --->.
|
||||
|
||||
2. Skriv :s/deen/den/ <ENTER> . Legg merke til at denne kommandoen bare
|
||||
forandrer den første forekomsten av Ŧdeenŧ på linjen.
|
||||
|
||||
3. Skriv :s/deen/den/g . Når g-flagget legges til, betyr dette global
|
||||
erstatning på linjen og erstatter alle forekomster av Ŧdeenŧ på linjen.
|
||||
|
||||
---> deen som kan kaste deen tyngste steinen lengst er deen beste
|
||||
|
||||
4. For å erstatte alle forekomster av en tekststreng mellom to linjer,
|
||||
skriv :#,#s/gammel/ny/g der #,# er linjenumrene på de to linjene for
|
||||
linjeområdet erstatningen skal gjøres.
|
||||
Skriv :%s/gammel/ny/g for å erstatte tekst i hele filen.
|
||||
Skriv :%s/gammel/ny/gc for å finne alle forekomster i hele filen, og
|
||||
deretter spørre om teksten skal erstattes eller
|
||||
ikke.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 4
|
||||
|
||||
|
||||
1. Ctrl-G viser nåværende posisjon i filen og filstatusen.
|
||||
G går til slutten av filen.
|
||||
nummer G går til det linjenummeret.
|
||||
gg går til den første linjen.
|
||||
|
||||
2. Skriv / etterfulgt av en søketekst for å lete FRAMOVER etter teksten.
|
||||
Skriv ? etterfulgt av en søketekst for å lete BAKOVER etter teksten.
|
||||
Etter et søk kan du trykke n for å finne neste forekomst i den samme
|
||||
retningen eller N for å lete i motsatt retning.
|
||||
CTRL-O tar deg tilbake til gamle posisjoner, CTRL-I til nyere posisjoner.
|
||||
|
||||
3. Skriv % når markøren står på en (, ), [, ], { eller } for å finne den
|
||||
som samsvarer.
|
||||
|
||||
4. Erstatte Ŧgammelŧ med første Ŧnyŧ på en linje: :s/gammel/ny
|
||||
Erstatte alle Ŧgammelŧ med Ŧnyŧ på en linje: :s/gammel/ny/g
|
||||
Erstatte tekst mellom to linjenumre: :#,#s/gammel/ny/g
|
||||
Erstatte alle forekomster i en fil: :%s/gammel/ny/g
|
||||
For å godkjenne hver erstatning, legg til Ŧcŧ: :%s/gammel/ny/gc
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 5.1: HVORDAN UTFØRE EN EKSTERN KOMMANDO
|
||||
|
||||
|
||||
** Skriv :! etterfulgt av en ekstern kommando for å utføre denne. **
|
||||
|
||||
1. Skriv den velkjente kommandoen : for å plassere markøren på bunnen av
|
||||
skjermen. Dette lar deg skrive en kommandolinjekommando.
|
||||
|
||||
2. Nå kan du skrive tegnet ! . Dette lar deg utføre en hvilken som helst
|
||||
ekstern kommando.
|
||||
|
||||
3. Som et eksempel, skriv ls etter utropstegnet og trykk <ENTER>. Du vil
|
||||
nå få en liste over filene i katalogen, akkurat som om du hadde kjørt
|
||||
kommandoen direkte fra kommandolinjen i skallet. Eller bruk :!dir hvis
|
||||
Ŧlsŧ ikke virker.
|
||||
|
||||
MERK: Det er mulig å kjøre alle eksterne kommandoer på denne måten, også med
|
||||
parametere.
|
||||
|
||||
MERK: Alle Ŧ:ŧ-kommandoer må avsluttes med <ENTER>. Fra dette punktet er det
|
||||
ikke alltid vi nevner det.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 5.2: MER OM LAGRING AV FILER
|
||||
|
||||
|
||||
** For å lagre endringene gjort i en tekst, skriv :w FILNAVN. **
|
||||
|
||||
1. Skriv :!dir eller :!ls for å få en liste over filene i katalogen. Du
|
||||
vet allerede at du må trykke <ENTER> etter dette.
|
||||
|
||||
2. Velg et filnavn på en fil som ikke finnes, som for eksempel TEST .
|
||||
|
||||
3. Skriv :w TEST (der TEST er filnavnet du velger).
|
||||
|
||||
4. Dette lagrer hele filen (denne innføringen) under navnet TEST . For å
|
||||
sjekke dette, skriv :!dir eller :!ls igjen for å se innholdet av
|
||||
katalogen.
|
||||
|
||||
Merk: Hvis du nå hadde avsluttet Vim og startet på nytt igjen med Ŧvim TESTŧ,
|
||||
ville filen vært en eksakt kopi av innføringen da du lagret den.
|
||||
|
||||
5. Fjern filen ved å skrive :!rm TEST hvis du er på et Unix-lignende
|
||||
operativsystem, eller :!del TEST hvis du bruker MS-DOS.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 5.3: VELGE TEKST SOM SKAL LAGRES
|
||||
|
||||
|
||||
** For å lagre en del av en fil, skriv v bevegelse :w FILNAVN **
|
||||
|
||||
1. Flytt markøren til denne linjen.
|
||||
|
||||
2. Trykk v og flytt markøren til det femte elementet nedenfor. Legg merke
|
||||
til at teksten blir markert.
|
||||
|
||||
3. Trykk : (kolon). På bunnen av skjermen vil :'<,'> komme til syne.
|
||||
|
||||
4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller
|
||||
at du ser :'<,'>w TEST før du trykker Enter.
|
||||
|
||||
5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls
|
||||
for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
|
||||
|
||||
MERK: Ved å trykke v startes visuelt valg. Du kan flytte markøren rundt for
|
||||
å gjøre det valgte området større eller mindre. Deretter kan du bruke en
|
||||
operator for å gjøre noe med teksten. For eksempel sletter d teksten.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 5.4: HENTING OG SAMMENSLÅING AV FILER
|
||||
|
||||
|
||||
** For å lese inn en annen fil inn i nåværende buffer, skriv :r FILNAVN **
|
||||
|
||||
1. Plasser markøren like over denne linjen.
|
||||
|
||||
MERK: Etter å ha utført steg 2 vil du se teksten fra leksjon 5.3. Gå deretter
|
||||
NED for å se denne leksjonen igjen.
|
||||
|
||||
2. Hent TEST-filen ved å bruke kommandoen :r TEST der TEST er navnet på
|
||||
filen du brukte. Filen du henter blir plassert nedenfor markørlinjen.
|
||||
|
||||
3. For å sjekke at filen ble hentet, gå tilbake og se at det er to kopier av
|
||||
leksjon 5.3, originalen og denne versjonen.
|
||||
|
||||
MERK: Du kan også lese utdataene av en ekstern kommando. For eksempel, :r !ls
|
||||
leser utdataene av ls-kommandoen og legger dem nedenfor markøren.
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 5
|
||||
|
||||
|
||||
1. :!kommando utfører en ekstern kommandio.
|
||||
|
||||
Noen nyttige eksempler er:
|
||||
(MS-DOS) (Unix)
|
||||
:!dir :!ls - List filene i katalogen.
|
||||
:!del FILNAVN :!rm FILNAVN - Slett filen FILNAVN.
|
||||
|
||||
2. :w FILNAVN skriver den nåværende Vim-filen disken med navnet FILNAVN .
|
||||
|
||||
3. v bevegelse :w FILNAVN lagrer de visuelt valgte linjene til filen
|
||||
FILNAVN.
|
||||
|
||||
4. :r FILNAVN henter filen FILNAVN og legger den inn nedenfor markøren.
|
||||
|
||||
5. :r !dir leser utdataene fra Ŧdirŧ-kommandoen og legger dem nedenfor
|
||||
markørposisjonen.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.1: ŦÅPNE LINJEŧ-KOMMANDOEN
|
||||
|
||||
|
||||
** Skriv o for å Ŧåpne oppŧ for en ny linje etter markøren og gå til
|
||||
innsettingsmodus **
|
||||
|
||||
1. Flytt markøren til linjen nedenfor merket --->.
|
||||
|
||||
2. Skriv o (liten o) for å åpne opp en linje NEDENFOR markøren og gå inn i
|
||||
innsettingsmodus.
|
||||
|
||||
3. Skriv litt tekst og trykk <ESC> for å gå ut av innsettingsmodusen.
|
||||
|
||||
---> Etter at o er skrevet blir markøren plassert på den tomme linjen.
|
||||
|
||||
4. For å åpne en ny linje OVER markøren, trykk rett og slett en stor O
|
||||
istedenfor en liten o . Prøv dette på linjen nedenfor.
|
||||
|
||||
---> Lag ny linje over denne ved å trykke O mens markøren er på denne linjen.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.2: ŦLEGG TILŧ-KOMMANDOEN
|
||||
|
||||
|
||||
** Skriv a for å legge til tekst ETTER markøren. **
|
||||
|
||||
1. Flytt markøren til starten av linjen merket ---> nedenfor.
|
||||
|
||||
2. Trykk e til markøren er på slutten av Ŧliŧ.
|
||||
|
||||
3. Trykk a (liten a) for å legge til tekst ETTER markøren.
|
||||
|
||||
4. Fullfør ordet sånn som på linjen nedenfor. Trykk <ESC> for å gå ut av
|
||||
innsettingsmodusen.
|
||||
|
||||
5. Bruk e for å gå til det neste ufullstendige ordet og repeter steg 3 og
|
||||
4.
|
||||
|
||||
---> Denne li lar deg øve på å leg til tek på en linje.
|
||||
---> Denne linjen lar deg øve på å legge til tekst på en linje.
|
||||
|
||||
Merk: a, i og A går alle til den samme innsettingsmodusen, den eneste
|
||||
forskjellen er hvor tegnene blir satt inn.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.3: EN ANNEN MÅTE Å ERSTATTE PÅ
|
||||
|
||||
|
||||
** Skriv en stor R for å erstatte mer enn ett tegn. **
|
||||
|
||||
1. Flytt markøren til den første linjen nedenfor merket --->. Flytt markøren
|
||||
til begynnelsen av den første Ŧxxxŧ-en.
|
||||
|
||||
2. Trykk R og skriv inn tallet som står nedenfor på den andre linjen så
|
||||
det erstatter xxx.
|
||||
|
||||
3. Trykk <ESC> for å gå ut av erstatningsmodusen. Legg merke til at resten
|
||||
av linjen forblir uforandret.
|
||||
|
||||
4. Repeter stegene for å erstatte den gjenværende xxx.
|
||||
|
||||
---> Ved å legge 123 til xxx får vi xxx.
|
||||
---> Ved å legge 123 til 456 får vi 579.
|
||||
|
||||
MERK: Erstatningsmodus er lik insettingsmodus, men hvert tegn som skrives
|
||||
erstatter et eksisterende tegn.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.4: KOPIERE OG LIME INN TEKST
|
||||
|
||||
|
||||
** Bruk y-operatoren for å kopiere tekst og p for å lime den inn **
|
||||
|
||||
1. Gå til linjen merket ---> nedenfor og plasser markøren etter Ŧa)ŧ.
|
||||
|
||||
2. Gå inn i visuell modus med v og flytt markøren til like før Ŧførsteŧ.
|
||||
|
||||
3. Trykk y for å kopiere (engelsk: Ŧyankŧ) den uthevede teksten.
|
||||
|
||||
4. Flytt markøren til slutten av den neste linjen: j$
|
||||
|
||||
5. Trykk p for å lime inn teksten. Trykk deretter: a andre <ESC> .
|
||||
|
||||
6. Bruk visuell modus for å velge Ŧ valget.ŧ, kopier det med y , gå til
|
||||
slutten av den neste linjen med j$ og legg inn teksten der med p .
|
||||
|
||||
---> a) Dette er det første valget.
|
||||
b)
|
||||
|
||||
Merk: Du kan også bruke y som en operator; yw kopierer ett ord.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.5: SETT VALG
|
||||
|
||||
|
||||
** Sett et valg så søk eller erstatning ignorerer store/små bokstaver. **
|
||||
|
||||
1. Let etter Ŧignoreŧ ved å skrive: /ignore <ENTER>
|
||||
Repeter flere ganger ved å trykke n .
|
||||
|
||||
2. Sett Ŧicŧ-valget (Ignore Case) ved å skrive: :set ic
|
||||
|
||||
3. Søk etter Ŧignoreŧ igjen ved å trykke n .
|
||||
Legg merke til at både ŦIgnoreŧ og ŦIGNOREŧ blir funnet.
|
||||
|
||||
4. Sett Ŧhlsearchŧ- og Ŧincsearchŧ-valgene: :set hls is
|
||||
|
||||
5. Skriv søkekommandoen igjen og se hva som skjer: /ignore <ENTER>
|
||||
|
||||
6. For å slå av ignorering av store/små bokstaver, skriv: :set noic
|
||||
|
||||
Merk: For å fjerne uthevingen av treff, skriv: :nohlsearch
|
||||
Merk: Hvis du vil ignorere store/små bokstaver for kun en søkekommando, bruk
|
||||
\c i uttrykket: /ignore\c <ENTER>
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 6
|
||||
|
||||
1. Trykk o for å legge til en linje NEDENFOR markøren og gå inn i
|
||||
innsettingsmodus.
|
||||
Trykk O for å åpne en linje OVER markøren.
|
||||
|
||||
2. Skriv a for å sette inn tekst ETTER markøren.
|
||||
Skriv A for å sette inn tekst etter slutten av linjen.
|
||||
|
||||
3. Kommandoen e går til slutten av et ord.
|
||||
|
||||
4. Operatoren y (Ŧyankŧ) kopierer tekst, p (Ŧpasteŧ) limer den inn.
|
||||
|
||||
5. Ved å trykke R går du inn i erstatningsmodus helt til <ESC> trykkes.
|
||||
|
||||
6. Skriv Ŧ:set xxxŧ for å sette valget Ŧxxxŧ. Noen valg er:
|
||||
Ŧicŧ Ŧignorecaseŧ ignorer store/små bokstaver under søk
|
||||
Ŧisŧ Ŧincsearchŧ vis delvise treff for en søketekst
|
||||
Ŧhlsŧ Ŧhlsearchŧ uthev alle søketreff
|
||||
|
||||
7. Legg til Ŧnoŧ foran valget for å slå det av: :set noic
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 7.1: FÅ HJELP
|
||||
|
||||
|
||||
** Bruk det innebygde hjelpesystemet. **
|
||||
|
||||
Vim har et omfattende innebygget hjelpesystem. For å starte det, prøv en av
|
||||
disse måtene:
|
||||
- Trykk Hjelp-tasten (hvis du har en)
|
||||
- Trykk F1-tasten (hvis du har en)
|
||||
- Skriv :help <ENTER>
|
||||
|
||||
Les teksten i hjelpevinduet for å finne ut hvordan hjelpen virker.
|
||||
Skriv CTRL-W CTRL-W for å hoppe fra et vindu til et annet
|
||||
Skriv :q <ENTER> for å lukke hjelpevinduet.
|
||||
|
||||
Du kan få hjelp for omtrent alle temaer om Vim ved å skrive et parameter til
|
||||
Ŧ:helpŧ-kommandoen. Prøv disse (ikke glem å trykke <ENTER>):
|
||||
|
||||
:help w
|
||||
:help c_CTRL-D
|
||||
:help insert-index
|
||||
:help user-manual
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 7.2: LAG ET OPPSTARTSSKRIPT
|
||||
|
||||
|
||||
** Slå på funksjoner i Vim **
|
||||
|
||||
Vim har mange flere funksjoner enn Vi, men flesteparten av dem er slått av
|
||||
som standard. For å begynne å bruke flere funksjoner må du lage en
|
||||
Ŧvimrcŧ-fil.
|
||||
|
||||
1. Start redigeringen av Ŧvimrcŧ-filen. Dette avhenger av systemet ditt:
|
||||
:e ~/.vimrc for Unix
|
||||
:e $VIM/_vimrc for MS Windows
|
||||
|
||||
2. Les inn eksempelfilen for Ŧvimrcŧ:
|
||||
:r $VIMRUNTIME/vimrc_example.vim
|
||||
|
||||
3. Lagre filen med:
|
||||
:w
|
||||
|
||||
Neste gang du starter Vim vil den bruke syntaks-utheving. Du kan legge til
|
||||
alle dine foretrukne oppsett i denne Ŧvimrcŧ-filen.
|
||||
For mer informasjon, skriv :help vimrc-intro
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 7.3: FULLFØRING
|
||||
|
||||
|
||||
** Kommandolinjefullføring med CTRL-D og <TAB> **
|
||||
|
||||
1. Vær sikker på at Vim ikke er i Vi-kompatibel modus: :set nocp
|
||||
|
||||
2. Se hvilke filer som er i katalogen: :!ls eller :!dir
|
||||
|
||||
3. Skriv starten på en kommando: :e
|
||||
|
||||
4. Trykk CTRL-D og Vim vil vise en liste over kommandoer som starter med
|
||||
Ŧeŧ.
|
||||
|
||||
5. Trykk <TAB> og Vim vil fullføre kommandonavnet til Ŧ:editŧ.
|
||||
|
||||
6. Legg til et mellomrom og starten på et eksisterende filnavn: :edit FIL
|
||||
|
||||
7. Trykk <TAB>. Vim vil fullføre navnet (hvis det er unikt).
|
||||
|
||||
MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og
|
||||
<TAB>. Det er spesielt nyttig for bruk sammen med :help .
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 7
|
||||
|
||||
|
||||
1. Skriv :help eller trykk <F1> eller <Help> for å åpne et hjelpevindu.
|
||||
|
||||
2. Skriv :help kommando for å få hjelp om kommando .
|
||||
|
||||
3. Trykk CTRL-W CTRL-W for å hoppe til et annet vindu.
|
||||
|
||||
4. Trykk :q for å lukke hjelpevinduet.
|
||||
|
||||
5. Opprett et vimrc-oppstartsskript for å lagre favorittvalgene dine.
|
||||
|
||||
6. Når du skriver en Ŧ:ŧ-kommando, trykk CTRL-D for å se mulige
|
||||
fullføringer. Trykk <TAB> for å bruke en fullføring.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Her slutter innføringen i Vim. Den var ment som en rask oversikt over
|
||||
editoren, akkurat nok til å la deg sette i gang med enkel bruk. Den er på
|
||||
langt nær komplett, da Vim har mange flere kommandoer. Les bruksanvisningen
|
||||
ved å skrive :help user-manual .
|
||||
|
||||
For videre lesing og studier, kan denne boken anbefales:
|
||||
ŦVim - Vi Improvedŧ av Steve Oualline
|
||||
Utgiver: New Riders
|
||||
Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for
|
||||
nybegynnere. Inneholder mange eksempler og illustrasjoner.
|
||||
Se http://iccf-holland.org/click5.html
|
||||
|
||||
Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også:
|
||||
ŦLearning the Vi Editorŧ av Linda Lamb
|
||||
Utgiver: O'Reilly & Associates Inc.
|
||||
Det er en god bok for å få vite omtrent hva som helst om Vi.
|
||||
Den sjette utgaven inneholder også informasjon om Vim.
|
||||
|
||||
Denne innføringen er skrevet av Michael C. Pierce og Robert K. Ware,
|
||||
Colorado School of Mines med idéer av Charles Smith, Colorado State
|
||||
University. E-mail: bware@mines.colorado.edu .
|
||||
|
||||
Modifisert for Vim av Bram Moolenaar.
|
||||
Oversatt av Øyvind A. Holm. E-mail: vimtutor _AT_ sunbase.org
|
||||
Id: tutor.no 406 2007-03-18 22:48:36Z sunny
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
vim: set ts=8 :
|
||||
973
samples/Text/tutor.no
Normal file
973
samples/Text/tutor.no
Normal file
@@ -0,0 +1,973 @@
|
||||
===============================================================================
|
||||
= V e l k o m m e n t i l i n n f ø r i n g e n i V i m -- Ver. 1.7 =
|
||||
===============================================================================
|
||||
|
||||
Vim er en meget kraftig editor med mange kommandoer, alt for mange til å
|
||||
kunne gå gjennom alle i en innføring som denne. Den er beregnet på å
|
||||
sette deg inn i bruken av nok kommandoer så du vil være i stand til lett
|
||||
å kunne bruke Vim som en editor til alle formål.
|
||||
|
||||
Tiden som kreves for å gå gjennom denne innføringen tar ca. 25-30
|
||||
minutter, avhengig av hvor mye tid du bruker til eksperimentering.
|
||||
|
||||
MERK:
|
||||
Kommandoene i leksjonene vil modifisere teksten. Lag en kopi av denne
|
||||
filen som du kan øve deg på (hvis du kjørte «vimtutor»-kommandoen, er
|
||||
dette allerede en kopi).
|
||||
|
||||
Det er viktig å huske at denne innføringen er beregnet på læring gjennom
|
||||
bruk. Det betyr at du må utføre kommandoene for å lære dem skikkelig.
|
||||
Hvis du bare leser teksten, vil du glemme kommandoene!
|
||||
|
||||
Først av alt, sjekk at «Caps Lock» IKKE er aktiv og trykk «j»-tasten for
|
||||
å flytte markøren helt til leksjon 1.1 fyller skjermen.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.1: FLYTTING AV MARKØREN
|
||||
|
||||
|
||||
** For å flytte markøren, trykk tastene h, j, k, l som vist. **
|
||||
^
|
||||
k Tips: h-tasten er til venstre og flytter til venstre.
|
||||
< h l > l-tasten er til høyre og flytter til høyre.
|
||||
j j-tasten ser ut som en pil som peker nedover.
|
||||
v
|
||||
1. Flytt markøren rundt på skjermen til du har fått det inn i fingrene.
|
||||
|
||||
2. Hold inne nedovertasten (j) til den repeterer.
|
||||
Nå vet du hvordan du beveger deg til neste leksjon.
|
||||
|
||||
3. Gå til leksjon 1.2 ved hjelp av nedovertasten.
|
||||
|
||||
Merk: Hvis du blir usikker på noe du har skrevet, trykk <ESC> for å gå til
|
||||
normalmodus. Skriv deretter kommandoen du ønsket på nytt.
|
||||
|
||||
Merk: Piltastene skal også virke. Men ved å bruke hjkl vil du være i stand til
|
||||
å bevege markøren mye raskere når du er blitt vant til det. Helt sant!
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.2: AVSLUTTE VIM
|
||||
|
||||
|
||||
!! MERK: Før du utfører noen av punktene nedenfor, les hele leksjonen!!
|
||||
|
||||
1. Trykk <ESC>-tasten (for å forsikre deg om at du er i normalmodus).
|
||||
|
||||
2. Skriv: :q! <ENTER>.
|
||||
Dette avslutter editoren og FORKASTER alle forandringer som du har gjort.
|
||||
|
||||
3. Når du ser kommandolinjen i skallet, skriv kommandoen som startet denne
|
||||
innføringen. Den er: vimtutor <ENTER>
|
||||
|
||||
4. Hvis du er sikker på at du husker dette, utfør punktene 1 til 3 for å
|
||||
avslutte og starte editoren på nytt.
|
||||
|
||||
MERK: :q! <ENTER> forkaster alle forandringer som du gjorde. I løpet av noen
|
||||
få leksjoner vil du lære hvordan du lagrer forandringene til en fil.
|
||||
|
||||
5. Flytt markøren ned til leksjon 1.3.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.3: REDIGERING AV TEKST -- SLETTING
|
||||
|
||||
|
||||
** Trykk x for å slette tegnet under markøren. **
|
||||
|
||||
1. Flytt markøren til den første linjen merket med --->.
|
||||
|
||||
2. For å ordne feilene på linjen, flytt markøren til den er oppå tegnet som
|
||||
skal slettes.
|
||||
|
||||
3. Trykk tasten x for å slette det uønskede tegnet.
|
||||
|
||||
4. Repeter punkt 2 til 4 til setningen er lik den som er under.
|
||||
|
||||
---> Hessstennnn brrråsnudddde ii gaaata.
|
||||
---> Hesten bråsnudde i gata.
|
||||
|
||||
5. Nå som linjen er korrekt, gå til leksjon 1.4.
|
||||
|
||||
MERK: Når du går gjennom innføringen, ikke bare prøv å huske kommandoene, men
|
||||
bruk dem helt til de sitter.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.4: REDIGERING AV TEKST -- INNSETTING
|
||||
|
||||
|
||||
** Trykk i for å sette inn tekst. **
|
||||
|
||||
1. Flytt markøren til den første linjen som er merket med --->.
|
||||
|
||||
2. For å gjøre den første linjen lik den andre, flytt markøren til den står
|
||||
på tegnet ETTER posisjonen der teksten skal settes inn.
|
||||
|
||||
3. Trykk i og skriv inn teksten som mangler.
|
||||
|
||||
4. Etterhvert som hver feil er fikset, trykk <ESC> for å returnere til
|
||||
normalmodus. Repeter punkt 2 til 4 til setningen er korrekt.
|
||||
|
||||
---> Det er tkst som mnglr .
|
||||
---> Det er ganske mye tekst som mangler her.
|
||||
|
||||
5. Når du føler deg komfortabel med å sette inn tekst, gå til oppsummeringen
|
||||
nedenfor.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.5: REDIGERING AV TEKST -- LEGGE TIL
|
||||
|
||||
|
||||
** Trykk A for å legge til tekst. **
|
||||
|
||||
1. Flytt markøren til den første linjen nedenfor merket --->.
|
||||
Det har ikke noe å si hvor markøren er plassert på den linjen.
|
||||
|
||||
2. Trykk A og skriv inn det som skal legges til.
|
||||
|
||||
3. Når teksten er lagt til, trykk <ESC> for å returnere til normalmodusen.
|
||||
|
||||
4. Flytt markøren til den andre linjen markert med ---> og repeter steg 2 og
|
||||
3 for å reparere denne setningen.
|
||||
|
||||
---> Det mangler noe tekst p
|
||||
Det mangler noe tekst på denne linjen.
|
||||
---> Det mangler også litt tek
|
||||
Det mangler også litt tekst på denne linjen.
|
||||
|
||||
5. Når du føler at du behersker å legge til tekst, gå til leksjon 1.6.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 1.6: REDIGERE EN FIL
|
||||
|
||||
|
||||
** Bruk :wq for å lagre en fil og avslutte. **
|
||||
|
||||
!! MERK: Før du utfører noen av stegene nedenfor, les hele denne leksjonen!!
|
||||
|
||||
1. Avslutt denne innføringen som du gjorde i leksjon 1.2: :q!
|
||||
|
||||
2. Skriv denne kommandoen på kommandolinja: vim tutor <ENTER>
|
||||
«vim» er kommandoen for å starte Vim-editoren, «tutor» er navnet på fila
|
||||
som du vil redigere. Bruk en fil som kan forandres.
|
||||
|
||||
3. Sett inn og slett tekst som du lærte i de foregående leksjonene.
|
||||
|
||||
4. Lagre filen med forandringene og avslutt Vim med: :wq <ENTER>
|
||||
|
||||
5. Start innføringen på nytt og flytt ned til oppsummeringen som følger.
|
||||
|
||||
6. Etter å ha lest og forstått stegene ovenfor: Sett i gang.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 1
|
||||
|
||||
|
||||
1. Markøren beveges ved hjelp av piltastene eller hjkl-tastene.
|
||||
h (venstre) j (ned) k (opp) l (høyre)
|
||||
|
||||
2. For å starte Vim fra skall-kommandolinjen, skriv: vim FILNAVN <ENTER>
|
||||
|
||||
3. For å avslutte Vim, skriv: <ESC> :q! <ENTER> for å forkaste endringer.
|
||||
ELLER skriv: <ESC> :wq <ENTER> for å lagre forandringene.
|
||||
|
||||
4. For å slette tegnet under markøren, trykk: x
|
||||
|
||||
5. For å sette inn eller legge til tekst, trykk:
|
||||
i skriv innsatt tekst <ESC> sett inn før markøren
|
||||
A skriv tillagt tekst <ESC> legg til på slutten av linjen
|
||||
|
||||
MERK: Når du trykker <ESC> går du til normalmodus eller du avbryter en uønsket
|
||||
og delvis fullført kommando.
|
||||
|
||||
Nå kan du gå videre til leksjon 2.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.1: SLETTEKOMMANDOER
|
||||
|
||||
|
||||
** Trykk dw for å slette et ord. **
|
||||
|
||||
1. Trykk <ESC> for å være sikker på at du er i normalmodus.
|
||||
|
||||
2. Flytt markøren til den første linjen nedenfor merket --->.
|
||||
|
||||
3. Flytt markøren til begynnelsen av ordet som skal slettes.
|
||||
|
||||
4. Trykk dw og ordet vil forsvinne.
|
||||
|
||||
MERK: Bokstaven d vil komme til syne på den nederste linjen på skjermen når
|
||||
du skriver den. Vim venter på at du skal skrive w . Hvis du ser et annet
|
||||
tegn enn d har du skrevet noe feil; trykk <ESC> og start på nytt.
|
||||
|
||||
---> Det er agurk tre ord eple som ikke hører pære hjemme i denne setningen.
|
||||
---> Det er tre ord som ikke hører hjemme i denne setningen.
|
||||
|
||||
5. Repeter punkt 3 og 4 til den første setningen er lik den andre. Gå
|
||||
deretter til leksjon 2.2.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.2: FLERE SLETTEKOMMANDOER
|
||||
|
||||
|
||||
** Trykk d$ for å slette til slutten av linjen. **
|
||||
|
||||
1. Trykk <ESC> for å være sikker på at du er i normalmodus.
|
||||
|
||||
2. Flytt markøren til linjen nedenfor merket --->.
|
||||
|
||||
3. Flytt markøren til punktet der linjen skal kuttes (ETTER første punktum).
|
||||
|
||||
4. Trykk d$ for å slette alt til slutten av linjen.
|
||||
|
||||
---> Noen skrev slutten på linjen en gang for mye. linjen en gang for mye.
|
||||
|
||||
5. Gå til leksjon 2.3 for å forstå hva som skjer.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.3: OM OPERATORER OG BEVEGELSER
|
||||
|
||||
|
||||
Mange kommandoer som forandrer teksten er laget ut i fra en operator og en
|
||||
bevegelse. Formatet for en slettekommando med sletteoperatoren d er:
|
||||
|
||||
d bevegelse
|
||||
|
||||
Der:
|
||||
d - er sletteoperatoren.
|
||||
bevegelse - er hva operatoren vil opere på (listet nedenfor).
|
||||
|
||||
En kort liste med bevegelser:
|
||||
w - til starten av det neste ordet, UNNTATT det første tegnet.
|
||||
e - til slutten av det nåværende ordet, INKLUDERT det siste tegnet.
|
||||
$ - til slutten av linjen, INKLUDERT det siste tegnet.
|
||||
|
||||
Ved å skrive de vil altså alt fra markøren til slutten av ordet bli
|
||||
slettet.
|
||||
|
||||
MERK: Ved å skrive kun bevegelsen i normalmodusen uten en operator vil
|
||||
markøren flyttes som spesifisert.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
LEKSJON 2.4: BRUK AV TELLER FOR EN BEVEGELSE
|
||||
|
||||
|
||||
** Ved å skrive et tall foran en bevegelse repeterer den så mange ganger. **
|
||||
|
||||
1. Flytt markøren til starten av linjen markert ---> nedenfor.
|
||||
|
||||
2. Skriv 2w for å flytte markøren to ord framover.
|
||||
|
||||
3. Skriv 3e for å flytte markøren framover til slutten av det tredje
|
||||
ordet.
|
||||
|
||||
4. Skriv 0 (null) for å flytte til starten av linjen.
|
||||
|
||||
5. Repeter steg 2 og 3 med forskjellige tall.
|
||||
|
||||
---> Dette er en linje med noen ord som du kan bevege deg rundt på.
|
||||
|
||||
6. Gå videre til leksjon 2.5.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.5: BRUK AV ANTALL FOR Å SLETTE MER
|
||||
|
||||
|
||||
** Et tall sammen med en operator repeterer den så mange ganger. **
|
||||
|
||||
I kombinasjonen med sletteoperatoren og en bevegelse nevnt ovenfor setter du
|
||||
inn antall før bevegelsen for å slette mer:
|
||||
d nummer bevegelse
|
||||
|
||||
1. Flytt markøren til det første ordet med STORE BOKSTAVER på linjen markert
|
||||
med --->.
|
||||
|
||||
2. Skriv 2dw for å slette de to ordene med store bokstaver.
|
||||
|
||||
3. Repeter steg 1 og 2 med forskjelling antall for å slette de etterfølgende
|
||||
ordene som har store bokstaver.
|
||||
|
||||
---> Denne ABC DE linjen FGHI JK LMN OP er nå Q RS TUV litt mer lesbar.
|
||||
|
||||
MERK: Et antall mellom operatoren d og bevegelsen virker på samme måte som å
|
||||
bruke bevegelsen uten en operator.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.6: OPERERE PÅ LINJER
|
||||
|
||||
|
||||
** Trykk dd for å slette en hel linje. **
|
||||
|
||||
På grunn av at sletting av linjer er mye brukt, fant utviklerne av Vi ut at
|
||||
det vil være lettere å rett og slett trykke to d-er for å slette en linje.
|
||||
|
||||
1. Flytt markøren til den andre linjen i verset nedenfor.
|
||||
2. Trykk dd å slette linjen.
|
||||
3. Flytt deretter til den fjerde linjen.
|
||||
4. Trykk 2dd for å slette to linjer.
|
||||
|
||||
---> 1) Roser er røde,
|
||||
---> 2) Gjørme er gøy,
|
||||
---> 3) Fioler er blå,
|
||||
---> 4) Jeg har en bil,
|
||||
---> 5) Klokker viser tiden,
|
||||
---> 6) Druer er søte
|
||||
---> 7) Og du er likeså.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 2.7: ANGRE-KOMMANDOEN
|
||||
|
||||
|
||||
** Trykk u for å angre siste kommando, U for å fikse en hel linje. **
|
||||
|
||||
1. Flytt markøren til linjen nedenfor merket ---> og plasser den på den
|
||||
første feilen.
|
||||
2. Trykk x for å slette det første uønskede tegnet.
|
||||
3. Trykk så u for å angre den siste utførte kommandoen.
|
||||
4. Deretter ordner du alle feilene på linjene ved å bruke kommandoen x .
|
||||
5. Trykk nå en stor U for å sette linjen tilbake til det den var
|
||||
originalt.
|
||||
6. Trykk u noen ganger for å angre U og foregående kommandoer.
|
||||
7. Deretter trykker du CTRL-R (hold CTRL nede mens du trykker R) noen
|
||||
ganger for å gjenopprette kommandoene (omgjøre angrekommandoene).
|
||||
|
||||
---> RReparer feiilene påå denne linnnjen oog erssstatt dem meed angre.
|
||||
|
||||
8. Dette er meget nyttige kommandoer. Nå kan du gå til oppsummeringen av
|
||||
leksjon 2.
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 2
|
||||
|
||||
|
||||
1. For å slette fra markøren fram til det neste ordet, trykk: dw
|
||||
2. For å slette fra markøren til slutten av en linje, trykk: d$
|
||||
3. For å slette en hel linje, trykk: dd
|
||||
|
||||
4. For å repetere en bevegelse, sett et nummer foran: 2w
|
||||
5. Formatet for en forandringskommando er:
|
||||
operator [nummer] bevegelse
|
||||
der:
|
||||
operator - hva som skal gjøres, f.eks. d for å slette
|
||||
[nummer] - et valgfritt antall for å repetere bevegelsen
|
||||
bevegelse - hva kommandoen skal operere på, eksempelvis w (ord),
|
||||
$ (til slutten av linjen) og så videre.
|
||||
|
||||
6. For å gå til starten av en linje, bruk en null: 0
|
||||
|
||||
7. For å angre tidligere endringer, skriv: u (liten u)
|
||||
For å angre alle forandringer på en linje, skriv: U (stor U)
|
||||
For å omgjøre angringen, trykk: CTRL-R
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 3.1: «LIM INN»-KOMMANDOEN
|
||||
|
||||
|
||||
** Trykk p for å lime inn tidligere slettet tekst etter markøren **
|
||||
|
||||
1. Flytt markøren til den første linjen med ---> nedenfor.
|
||||
|
||||
2. Trykk dd for å slette linjen og lagre den i et Vim-register.
|
||||
|
||||
3. Flytt markøren til c)-linjen, OVER posisjonen linjen skal settes inn.
|
||||
|
||||
4. Trykk p for å legge linjen under markøren.
|
||||
|
||||
5. Repeter punkt 2 til 4 helt til linjene er i riktig rekkefølge.
|
||||
|
||||
---> d) Kan du også lære?
|
||||
---> b) Fioler er blå,
|
||||
---> c) Intelligens må læres,
|
||||
---> a) Roser er røde,
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 3.2: «ERSTATT»-KOMMANDOEN
|
||||
|
||||
|
||||
** Trykk rx for å erstatte tegnet under markøren med x. **
|
||||
|
||||
1. Flytt markøren til den første linjen nedenfor merket --->.
|
||||
|
||||
2. Flytt markøren så den står oppå den første feilen.
|
||||
|
||||
3. Trykk r og deretter tegnet som skal være der.
|
||||
|
||||
4. Repeter punkt 2 og 3 til den første linjen er lik den andre.
|
||||
|
||||
---> Da dfnne lynjxn ble zkrevet, var det nøen som tjykket feite taster!
|
||||
---> Da denne linjen ble skrevet, var det noen som trykket feile taster!
|
||||
|
||||
5. Gå videre til leksjon 3.2.
|
||||
|
||||
MERK: Husk at du bør lære ved å BRUKE, ikke pugge.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 3.3: «FORANDRE»-OPERATOREN
|
||||
|
||||
|
||||
** For å forandre til slutten av et ord, trykk ce . **
|
||||
|
||||
1. Flytt markøren til den første linjen nedenfor som er merket --->.
|
||||
|
||||
2. Plasser markøren på u i «lubjwr».
|
||||
|
||||
3. Trykk ce og det korrekte ordet (i dette tilfellet, skriv «injen»).
|
||||
|
||||
4. Trykk <ESC> og gå til det neste tegnet som skal forandres.
|
||||
|
||||
5. Repeter punkt 3 og 4 helt til den første setningen er lik den andre.
|
||||
|
||||
---> Denne lubjwr har noen wgh som må forkwåp med «forækzryas»-kommandoen.
|
||||
---> Denne linjen har noen ord som må forandres med «forandre»-kommandoen.
|
||||
|
||||
Vær oppmerksom på at ce sletter ordet og går inn i innsettingsmodus.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 3.4: FLERE FORANDRINGER VED BRUK AV c
|
||||
|
||||
|
||||
** Forandringskommandoen blir brukt med de samme bevegelser som «slett». **
|
||||
|
||||
1. Forandringsoperatoren fungerer på samme måte som «slett». Formatet er:
|
||||
|
||||
c [nummer] bevegelse
|
||||
|
||||
2. Bevegelsene er de samme, som for eksempel w (ord) og $ (slutten av en
|
||||
linje).
|
||||
|
||||
3. Gå til den første linjen nedenfor som er merket --->.
|
||||
|
||||
4. Flytt markøren til den første feilen.
|
||||
|
||||
5. Skriv c$ og skriv resten av linjen lik den andre og trykk <ESC>.
|
||||
|
||||
---> Slutten på denne linjen trenger litt hjelp for å gjøre den lik den neste.
|
||||
---> Slutten på denne linjen trenger å bli rettet ved bruk av c$-kommandoen.
|
||||
|
||||
MERK: Du kan bruke slettetasten for å rette feil mens du skriver.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 3
|
||||
|
||||
|
||||
1. For å legge tilbake tekst som nettopp er blitt slettet, trykk p . Dette
|
||||
limer inn den slettede teksten ETTER markøren (hvis en linje ble slettet
|
||||
vil den bli limt inn på linjen under markøren).
|
||||
|
||||
2. For å erstatte et tegn under markøren, trykk r og deretter tegnet som
|
||||
du vil ha der.
|
||||
|
||||
3. Forandringsoperatoren lar deg forandre fra markøren til dit bevegelsen
|
||||
tar deg. Det vil si, skriv ce for å forandre fra markøren til slutten
|
||||
av ordet, c$ for å forandre til slutten av linjen.
|
||||
|
||||
4. Formatet for «forandre» er:
|
||||
|
||||
c [nummer] bevegelse
|
||||
|
||||
Nå kan du gå til neste leksjon.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 4.1: POSISJONERING AV MARKØREN OG FILSTATUS
|
||||
|
||||
** Trykk CTRL-G for å vise posisjonen i filen og filstatusen.
|
||||
Trykk G for å gå til en spesifikk linje i filen. **
|
||||
|
||||
Merk: Les hele leksjonen før du utfører noen av punktene!
|
||||
|
||||
1. Hold nede Ctrl-tasten og trykk g . Vi kaller dette CTRL-G. En melding
|
||||
vil komme til syne på bunnen av skjermen med filnavnet og posisjonen i
|
||||
filen. Husk linjenummeret for bruk i steg 3.
|
||||
|
||||
Merk: Du kan se markørposisjonen i nederste høyre hjørne av skjermen. Dette
|
||||
skjer når «ruler»-valget er satt (forklart i leksjon 6).
|
||||
|
||||
2. Trykk G for å gå til bunnen av filen.
|
||||
Skriv gg for å gå til begynnelsen av filen.
|
||||
|
||||
3. Skriv inn linjenummeret du var på og deretter G . Dette vil føre deg
|
||||
tilbake til linjen du var på da du først trykket CTRL-G.
|
||||
|
||||
4. Utfør steg 1 til 3 hvis du føler deg sikker på prosedyren.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 4.2: SØKEKOMMANDOEN
|
||||
|
||||
** Skriv / etterfulgt av en søkestreng som du vil lete etter. **
|
||||
|
||||
1. Trykk / når du er i normalmodusen. Legg merke til at skråstreken og
|
||||
markøren kommer til syne på bunnen av skjermen i likhet med
|
||||
«:»-kommandoene.
|
||||
|
||||
2. Skriv «feeeiil» og trykk <ENTER>. Dette er teksten du vil lete etter.
|
||||
|
||||
3. For å finne neste forekomst av søkestrengen, trykk n .
|
||||
For å lete etter samme søketeksten i motsatt retning, trykk N .
|
||||
|
||||
4. For å lete etter en tekst bakover i filen, bruk ? istedenfor / .
|
||||
|
||||
5. For å gå tilbake til der du kom fra, trykk CTRL-O (Hold Ctrl nede mens
|
||||
du trykker bokstaven o ). Repeter for å gå enda lengre tilbake. CTRL-I
|
||||
går framover.
|
||||
|
||||
---> «feeeiil» er ikke måten å skrive «feil» på, feeeiil er helt feil.
|
||||
Merk: Når søkingen når slutten av filen, vil den fortsette fra starten unntatt
|
||||
hvis «wrapscan»-valget er resatt.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 4.3: FINN SAMSVARENDE PARENTESER
|
||||
|
||||
|
||||
** Trykk % for å finne en samsvarende ), ] eller } . **
|
||||
|
||||
1. Plasser markøren på en (, [ eller { på linjen nedenfor merket --->.
|
||||
|
||||
2. Trykk % .
|
||||
|
||||
3. Markøren vil gå til den samsvarende parentesen eller hakeparentesen.
|
||||
|
||||
4. Trykk % for å flytte markøren til den andre samsvarende parentesen.
|
||||
|
||||
5. Flytt markøren til en annen (, ), [, ], { eller } og se hva % gjør.
|
||||
|
||||
---> Dette ( er en testlinje med (, [ ] og { } i den )).
|
||||
|
||||
Merk: Dette er veldig nyttig til feilsøking i programmer som har ubalansert
|
||||
antall parenteser!
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 4.4: ERSTATT-KOMMANDOEN
|
||||
|
||||
|
||||
** Skriv :s/gammel/ny/g for å erstatte «gammel» med «ny». **
|
||||
|
||||
1. Flytt markøren til linjen nedenfor som er merket med --->.
|
||||
|
||||
2. Skriv :s/deen/den/ <ENTER> . Legg merke til at denne kommandoen bare
|
||||
forandrer den første forekomsten av «deen» på linjen.
|
||||
|
||||
3. Skriv :s/deen/den/g . Når g-flagget legges til, betyr dette global
|
||||
erstatning på linjen og erstatter alle forekomster av «deen» på linjen.
|
||||
|
||||
---> deen som kan kaste deen tyngste steinen lengst er deen beste
|
||||
|
||||
4. For å erstatte alle forekomster av en tekststreng mellom to linjer,
|
||||
skriv :#,#s/gammel/ny/g der #,# er linjenumrene på de to linjene for
|
||||
linjeområdet erstatningen skal gjøres.
|
||||
Skriv :%s/gammel/ny/g for å erstatte tekst i hele filen.
|
||||
Skriv :%s/gammel/ny/gc for å finne alle forekomster i hele filen, og
|
||||
deretter spørre om teksten skal erstattes eller
|
||||
ikke.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 4
|
||||
|
||||
|
||||
1. Ctrl-G viser nåværende posisjon i filen og filstatusen.
|
||||
G går til slutten av filen.
|
||||
nummer G går til det linjenummeret.
|
||||
gg går til den første linjen.
|
||||
|
||||
2. Skriv / etterfulgt av en søketekst for å lete FRAMOVER etter teksten.
|
||||
Skriv ? etterfulgt av en søketekst for å lete BAKOVER etter teksten.
|
||||
Etter et søk kan du trykke n for å finne neste forekomst i den samme
|
||||
retningen eller N for å lete i motsatt retning.
|
||||
CTRL-O tar deg tilbake til gamle posisjoner, CTRL-I til nyere posisjoner.
|
||||
|
||||
3. Skriv % når markøren står på en (, ), [, ], { eller } for å finne den
|
||||
som samsvarer.
|
||||
|
||||
4. Erstatte «gammel» med første «ny» på en linje: :s/gammel/ny
|
||||
Erstatte alle «gammel» med «ny» på en linje: :s/gammel/ny/g
|
||||
Erstatte tekst mellom to linjenumre: :#,#s/gammel/ny/g
|
||||
Erstatte alle forekomster i en fil: :%s/gammel/ny/g
|
||||
For å godkjenne hver erstatning, legg til «c»: :%s/gammel/ny/gc
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 5.1: HVORDAN UTFØRE EN EKSTERN KOMMANDO
|
||||
|
||||
|
||||
** Skriv :! etterfulgt av en ekstern kommando for å utføre denne. **
|
||||
|
||||
1. Skriv den velkjente kommandoen : for å plassere markøren på bunnen av
|
||||
skjermen. Dette lar deg skrive en kommandolinjekommando.
|
||||
|
||||
2. Nå kan du skrive tegnet ! . Dette lar deg utføre en hvilken som helst
|
||||
ekstern kommando.
|
||||
|
||||
3. Som et eksempel, skriv ls etter utropstegnet og trykk <ENTER>. Du vil
|
||||
nå få en liste over filene i katalogen, akkurat som om du hadde kjørt
|
||||
kommandoen direkte fra kommandolinjen i skallet. Eller bruk :!dir hvis
|
||||
«ls» ikke virker.
|
||||
|
||||
MERK: Det er mulig å kjøre alle eksterne kommandoer på denne måten, også med
|
||||
parametere.
|
||||
|
||||
MERK: Alle «:»-kommandoer må avsluttes med <ENTER>. Fra dette punktet er det
|
||||
ikke alltid vi nevner det.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 5.2: MER OM LAGRING AV FILER
|
||||
|
||||
|
||||
** For å lagre endringene gjort i en tekst, skriv :w FILNAVN. **
|
||||
|
||||
1. Skriv :!dir eller :!ls for å få en liste over filene i katalogen. Du
|
||||
vet allerede at du må trykke <ENTER> etter dette.
|
||||
|
||||
2. Velg et filnavn på en fil som ikke finnes, som for eksempel TEST .
|
||||
|
||||
3. Skriv :w TEST (der TEST er filnavnet du velger).
|
||||
|
||||
4. Dette lagrer hele filen (denne innføringen) under navnet TEST . For å
|
||||
sjekke dette, skriv :!dir eller :!ls igjen for å se innholdet av
|
||||
katalogen.
|
||||
|
||||
Merk: Hvis du nå hadde avsluttet Vim og startet på nytt igjen med «vim TEST»,
|
||||
ville filen vært en eksakt kopi av innføringen da du lagret den.
|
||||
|
||||
5. Fjern filen ved å skrive :!rm TEST hvis du er på et Unix-lignende
|
||||
operativsystem, eller :!del TEST hvis du bruker MS-DOS.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 5.3: VELGE TEKST SOM SKAL LAGRES
|
||||
|
||||
|
||||
** For å lagre en del av en fil, skriv v bevegelse :w FILNAVN **
|
||||
|
||||
1. Flytt markøren til denne linjen.
|
||||
|
||||
2. Trykk v og flytt markøren til det femte elementet nedenfor. Legg merke
|
||||
til at teksten blir markert.
|
||||
|
||||
3. Trykk : (kolon). På bunnen av skjermen vil :'<,'> komme til syne.
|
||||
|
||||
4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller
|
||||
at du ser :'<,'>w TEST før du trykker Enter.
|
||||
|
||||
5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls
|
||||
for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
|
||||
|
||||
MERK: Ved å trykke v startes visuelt valg. Du kan flytte markøren rundt for
|
||||
å gjøre det valgte området større eller mindre. Deretter kan du bruke en
|
||||
operator for å gjøre noe med teksten. For eksempel sletter d teksten.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 5.4: HENTING OG SAMMENSLÅING AV FILER
|
||||
|
||||
|
||||
** For å lese inn en annen fil inn i nåværende buffer, skriv :r FILNAVN **
|
||||
|
||||
1. Plasser markøren like over denne linjen.
|
||||
|
||||
MERK: Etter å ha utført steg 2 vil du se teksten fra leksjon 5.3. Gå deretter
|
||||
NED for å se denne leksjonen igjen.
|
||||
|
||||
2. Hent TEST-filen ved å bruke kommandoen :r TEST der TEST er navnet på
|
||||
filen du brukte. Filen du henter blir plassert nedenfor markørlinjen.
|
||||
|
||||
3. For å sjekke at filen ble hentet, gå tilbake og se at det er to kopier av
|
||||
leksjon 5.3, originalen og denne versjonen.
|
||||
|
||||
MERK: Du kan også lese utdataene av en ekstern kommando. For eksempel, :r !ls
|
||||
leser utdataene av ls-kommandoen og legger dem nedenfor markøren.
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 5
|
||||
|
||||
|
||||
1. :!kommando utfører en ekstern kommandio.
|
||||
|
||||
Noen nyttige eksempler er:
|
||||
(MS-DOS) (Unix)
|
||||
:!dir :!ls - List filene i katalogen.
|
||||
:!del FILNAVN :!rm FILNAVN - Slett filen FILNAVN.
|
||||
|
||||
2. :w FILNAVN skriver den nåværende Vim-filen disken med navnet FILNAVN .
|
||||
|
||||
3. v bevegelse :w FILNAVN lagrer de visuelt valgte linjene til filen
|
||||
FILNAVN.
|
||||
|
||||
4. :r FILNAVN henter filen FILNAVN og legger den inn nedenfor markøren.
|
||||
|
||||
5. :r !dir leser utdataene fra «dir»-kommandoen og legger dem nedenfor
|
||||
markørposisjonen.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.1: «ÅPNE LINJE»-KOMMANDOEN
|
||||
|
||||
|
||||
** Skriv o for å «åpne opp» for en ny linje etter markøren og gå til
|
||||
innsettingsmodus **
|
||||
|
||||
1. Flytt markøren til linjen nedenfor merket --->.
|
||||
|
||||
2. Skriv o (liten o) for å åpne opp en linje NEDENFOR markøren og gå inn i
|
||||
innsettingsmodus.
|
||||
|
||||
3. Skriv litt tekst og trykk <ESC> for å gå ut av innsettingsmodusen.
|
||||
|
||||
---> Etter at o er skrevet blir markøren plassert på den tomme linjen.
|
||||
|
||||
4. For å åpne en ny linje OVER markøren, trykk rett og slett en stor O
|
||||
istedenfor en liten o . Prøv dette på linjen nedenfor.
|
||||
|
||||
---> Lag ny linje over denne ved å trykke O mens markøren er på denne linjen.
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.2: «LEGG TIL»-KOMMANDOEN
|
||||
|
||||
|
||||
** Skriv a for å legge til tekst ETTER markøren. **
|
||||
|
||||
1. Flytt markøren til starten av linjen merket ---> nedenfor.
|
||||
|
||||
2. Trykk e til markøren er på slutten av «li».
|
||||
|
||||
3. Trykk a (liten a) for å legge til tekst ETTER markøren.
|
||||
|
||||
4. Fullfør ordet sånn som på linjen nedenfor. Trykk <ESC> for å gå ut av
|
||||
innsettingsmodusen.
|
||||
|
||||
5. Bruk e for å gå til det neste ufullstendige ordet og repeter steg 3 og
|
||||
4.
|
||||
|
||||
---> Denne li lar deg øve på å leg til tek på en linje.
|
||||
---> Denne linjen lar deg øve på å legge til tekst på en linje.
|
||||
|
||||
Merk: a, i og A går alle til den samme innsettingsmodusen, den eneste
|
||||
forskjellen er hvor tegnene blir satt inn.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.3: EN ANNEN MÅTE Å ERSTATTE PÅ
|
||||
|
||||
|
||||
** Skriv en stor R for å erstatte mer enn ett tegn. **
|
||||
|
||||
1. Flytt markøren til den første linjen nedenfor merket --->. Flytt markøren
|
||||
til begynnelsen av den første «xxx»-en.
|
||||
|
||||
2. Trykk R og skriv inn tallet som står nedenfor på den andre linjen så
|
||||
det erstatter xxx.
|
||||
|
||||
3. Trykk <ESC> for å gå ut av erstatningsmodusen. Legg merke til at resten
|
||||
av linjen forblir uforandret.
|
||||
|
||||
4. Repeter stegene for å erstatte den gjenværende xxx.
|
||||
|
||||
---> Ved å legge 123 til xxx får vi xxx.
|
||||
---> Ved å legge 123 til 456 får vi 579.
|
||||
|
||||
MERK: Erstatningsmodus er lik insettingsmodus, men hvert tegn som skrives
|
||||
erstatter et eksisterende tegn.
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.4: KOPIERE OG LIME INN TEKST
|
||||
|
||||
|
||||
** Bruk y-operatoren for å kopiere tekst og p for å lime den inn **
|
||||
|
||||
1. Gå til linjen merket ---> nedenfor og plasser markøren etter «a)».
|
||||
|
||||
2. Gå inn i visuell modus med v og flytt markøren til like før «første».
|
||||
|
||||
3. Trykk y for å kopiere (engelsk: «yank») den uthevede teksten.
|
||||
|
||||
4. Flytt markøren til slutten av den neste linjen: j$
|
||||
|
||||
5. Trykk p for å lime inn teksten. Trykk deretter: a andre <ESC> .
|
||||
|
||||
6. Bruk visuell modus for å velge « valget.», kopier det med y , gå til
|
||||
slutten av den neste linjen med j$ og legg inn teksten der med p .
|
||||
|
||||
---> a) Dette er det første valget.
|
||||
b)
|
||||
|
||||
Merk: Du kan også bruke y som en operator; yw kopierer ett ord.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 6.5: SETT VALG
|
||||
|
||||
|
||||
** Sett et valg så søk eller erstatning ignorerer store/små bokstaver. **
|
||||
|
||||
1. Let etter «ignore» ved å skrive: /ignore <ENTER>
|
||||
Repeter flere ganger ved å trykke n .
|
||||
|
||||
2. Sett «ic»-valget (Ignore Case) ved å skrive: :set ic
|
||||
|
||||
3. Søk etter «ignore» igjen ved å trykke n .
|
||||
Legg merke til at både «Ignore» og «IGNORE» blir funnet.
|
||||
|
||||
4. Sett «hlsearch»- og «incsearch»-valgene: :set hls is
|
||||
|
||||
5. Skriv søkekommandoen igjen og se hva som skjer: /ignore <ENTER>
|
||||
|
||||
6. For å slå av ignorering av store/små bokstaver, skriv: :set noic
|
||||
|
||||
Merk: For å fjerne uthevingen av treff, skriv: :nohlsearch
|
||||
Merk: Hvis du vil ignorere store/små bokstaver for kun en søkekommando, bruk
|
||||
\c i uttrykket: /ignore\c <ENTER>
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 6
|
||||
|
||||
1. Trykk o for å legge til en linje NEDENFOR markøren og gå inn i
|
||||
innsettingsmodus.
|
||||
Trykk O for å åpne en linje OVER markøren.
|
||||
|
||||
2. Skriv a for å sette inn tekst ETTER markøren.
|
||||
Skriv A for å sette inn tekst etter slutten av linjen.
|
||||
|
||||
3. Kommandoen e går til slutten av et ord.
|
||||
|
||||
4. Operatoren y («yank») kopierer tekst, p («paste») limer den inn.
|
||||
|
||||
5. Ved å trykke R går du inn i erstatningsmodus helt til <ESC> trykkes.
|
||||
|
||||
6. Skriv «:set xxx» for å sette valget «xxx». Noen valg er:
|
||||
«ic» «ignorecase» ignorer store/små bokstaver under søk
|
||||
«is» «incsearch» vis delvise treff for en søketekst
|
||||
«hls» «hlsearch» uthev alle søketreff
|
||||
|
||||
7. Legg til «no» foran valget for å slå det av: :set noic
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 7.1: FÅ HJELP
|
||||
|
||||
|
||||
** Bruk det innebygde hjelpesystemet. **
|
||||
|
||||
Vim har et omfattende innebygget hjelpesystem. For å starte det, prøv en av
|
||||
disse måtene:
|
||||
- Trykk Hjelp-tasten (hvis du har en)
|
||||
- Trykk F1-tasten (hvis du har en)
|
||||
- Skriv :help <ENTER>
|
||||
|
||||
Les teksten i hjelpevinduet for å finne ut hvordan hjelpen virker.
|
||||
Skriv CTRL-W CTRL-W for å hoppe fra et vindu til et annet
|
||||
Skriv :q <ENTER> for å lukke hjelpevinduet.
|
||||
|
||||
Du kan få hjelp for omtrent alle temaer om Vim ved å skrive et parameter til
|
||||
«:help»-kommandoen. Prøv disse (ikke glem å trykke <ENTER>):
|
||||
|
||||
:help w
|
||||
:help c_CTRL-D
|
||||
:help insert-index
|
||||
:help user-manual
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 7.2: LAG ET OPPSTARTSSKRIPT
|
||||
|
||||
|
||||
** Slå på funksjoner i Vim **
|
||||
|
||||
Vim har mange flere funksjoner enn Vi, men flesteparten av dem er slått av
|
||||
som standard. For å begynne å bruke flere funksjoner må du lage en
|
||||
«vimrc»-fil.
|
||||
|
||||
1. Start redigeringen av «vimrc»-filen. Dette avhenger av systemet ditt:
|
||||
:e ~/.vimrc for Unix
|
||||
:e $VIM/_vimrc for MS Windows
|
||||
|
||||
2. Les inn eksempelfilen for «vimrc»:
|
||||
:r $VIMRUNTIME/vimrc_example.vim
|
||||
|
||||
3. Lagre filen med:
|
||||
:w
|
||||
|
||||
Neste gang du starter Vim vil den bruke syntaks-utheving. Du kan legge til
|
||||
alle dine foretrukne oppsett i denne «vimrc»-filen.
|
||||
For mer informasjon, skriv :help vimrc-intro
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Leksjon 7.3: FULLFØRING
|
||||
|
||||
|
||||
** Kommandolinjefullføring med CTRL-D og <TAB> **
|
||||
|
||||
1. Vær sikker på at Vim ikke er i Vi-kompatibel modus: :set nocp
|
||||
|
||||
2. Se hvilke filer som er i katalogen: :!ls eller :!dir
|
||||
|
||||
3. Skriv starten på en kommando: :e
|
||||
|
||||
4. Trykk CTRL-D og Vim vil vise en liste over kommandoer som starter med
|
||||
«e».
|
||||
|
||||
5. Trykk <TAB> og Vim vil fullføre kommandonavnet til «:edit».
|
||||
|
||||
6. Legg til et mellomrom og starten på et eksisterende filnavn: :edit FIL
|
||||
|
||||
7. Trykk <TAB>. Vim vil fullføre navnet (hvis det er unikt).
|
||||
|
||||
MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og
|
||||
<TAB>. Det er spesielt nyttig for bruk sammen med :help .
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OPPSUMMERING AV LEKSJON 7
|
||||
|
||||
|
||||
1. Skriv :help eller trykk <F1> eller <Help> for å åpne et hjelpevindu.
|
||||
|
||||
2. Skriv :help kommando for å få hjelp om kommando .
|
||||
|
||||
3. Trykk CTRL-W CTRL-W for å hoppe til et annet vindu.
|
||||
|
||||
4. Trykk :q for å lukke hjelpevinduet.
|
||||
|
||||
5. Opprett et vimrc-oppstartsskript for å lagre favorittvalgene dine.
|
||||
|
||||
6. Når du skriver en «:»-kommando, trykk CTRL-D for å se mulige
|
||||
fullføringer. Trykk <TAB> for å bruke en fullføring.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Her slutter innføringen i Vim. Den var ment som en rask oversikt over
|
||||
editoren, akkurat nok til å la deg sette i gang med enkel bruk. Den er på
|
||||
langt nær komplett, da Vim har mange flere kommandoer. Les bruksanvisningen
|
||||
ved å skrive :help user-manual .
|
||||
|
||||
For videre lesing og studier, kan denne boken anbefales:
|
||||
«Vim - Vi Improved» av Steve Oualline
|
||||
Utgiver: New Riders
|
||||
Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for
|
||||
nybegynnere. Inneholder mange eksempler og illustrasjoner.
|
||||
Se http://iccf-holland.org/click5.html
|
||||
|
||||
Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også:
|
||||
«Learning the Vi Editor» av Linda Lamb
|
||||
Utgiver: O'Reilly & Associates Inc.
|
||||
Det er en god bok for å få vite omtrent hva som helst om Vi.
|
||||
Den sjette utgaven inneholder også informasjon om Vim.
|
||||
|
||||
Denne innføringen er skrevet av Michael C. Pierce og Robert K. Ware,
|
||||
Colorado School of Mines med idéer av Charles Smith, Colorado State
|
||||
University. E-mail: bware@mines.colorado.edu .
|
||||
|
||||
Modifisert for Vim av Bram Moolenaar.
|
||||
Oversatt av Øyvind A. Holm. E-mail: vimtutor _AT_ sunbase.org
|
||||
Id: tutor.no 406 2007-03-18 22:48:36Z sunny
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
vim: set ts=8 :
|
||||
154
samples/Uno/PlayerPads.uno
Normal file
154
samples/Uno/PlayerPads.uno
Normal file
@@ -0,0 +1,154 @@
|
||||
using Uno;
|
||||
using Uno.Collections;
|
||||
using Uno.Graphics;
|
||||
using Uno.Scenes;
|
||||
using Uno.Designer;
|
||||
using Uno.Content;
|
||||
using Uno.Content.Models;
|
||||
using Uno.UI;
|
||||
|
||||
namespace PONG2D
|
||||
{
|
||||
public class PlayerPads : Node
|
||||
{
|
||||
|
||||
Image _player1Image;
|
||||
Image _player2Image;
|
||||
|
||||
[Inline]
|
||||
public Image Player1
|
||||
{
|
||||
get { return _player1Image; }
|
||||
set
|
||||
{
|
||||
if (_player1Image != value)
|
||||
{
|
||||
_player1Image = value;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Inline]
|
||||
public Image Player2
|
||||
{
|
||||
get { return _player2Image; }
|
||||
set
|
||||
{
|
||||
if (_player2Image != value)
|
||||
{
|
||||
_player2Image = value;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Hide]
|
||||
public float2 Player1Pos
|
||||
{
|
||||
get { return (Player1.ActualPosition); }
|
||||
set
|
||||
{
|
||||
if (Player1 != null)
|
||||
Player1.Position = value;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
[Hide]
|
||||
public float2 Player2Pos
|
||||
{
|
||||
get { return (Player2.ActualPosition); }
|
||||
set
|
||||
{
|
||||
if (Player2 != null)
|
||||
Player2.Position = value;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public Rect Player1Rect
|
||||
{
|
||||
get { return new Rect(Player1Pos, float2(Player1.Width, Player2.Height)); }
|
||||
set
|
||||
{
|
||||
Player1Pos = value.Position;
|
||||
if (Player1 != null)
|
||||
{
|
||||
Player1.Width = value.Size.X;
|
||||
Player1.Height = value.Size.Y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Rect Player2Rect
|
||||
{
|
||||
get { return new Rect(Player2Pos, float2(Player2.Width, Player2.Height)); }
|
||||
set
|
||||
{
|
||||
Player2Pos = value.Position;
|
||||
if (Player2 != null)
|
||||
{
|
||||
Player2.Width = value.Size.X;
|
||||
Player2.Height = value.Size.Y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Ball Ball
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public float PadVelocity { get; set; }
|
||||
|
||||
public PlayerPads()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void UpdatePositions()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
base.OnUpdate();
|
||||
|
||||
if (Input.IsKeyDown(Uno.Platform.Key.W))
|
||||
{
|
||||
Player1Pos = float2(0, Player1Pos.Y - PadVelocity);
|
||||
}
|
||||
|
||||
if (Input.IsKeyDown(Uno.Platform.Key.S))
|
||||
{
|
||||
Player1Pos = float2(0, Player1Pos.Y + PadVelocity);
|
||||
}
|
||||
|
||||
if (Input.IsKeyDown(Uno.Platform.Key.Up))
|
||||
{
|
||||
Player2Pos = float2(0, Player2Pos.Y - PadVelocity);
|
||||
}
|
||||
|
||||
if (Input.IsKeyDown(Uno.Platform.Key.Down))
|
||||
{
|
||||
Player2Pos = float2(0, Player2Pos.Y + PadVelocity);
|
||||
}
|
||||
|
||||
if (Ball != null)
|
||||
{
|
||||
|
||||
if (Ball.BallRectangle.Intersects(Player1Rect) ||
|
||||
Ball.BallRectangle.Intersects(Player2Rect))
|
||||
{
|
||||
|
||||
Ball.BallVelocity = float2(Ball.BallVelocity.X * -1f, Ball.BallVelocity.Y);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
139
samples/Uno/Pong.uno
Normal file
139
samples/Uno/Pong.uno
Normal file
@@ -0,0 +1,139 @@
|
||||
using Uno;
|
||||
using Uno.Collections;
|
||||
using Uno.Graphics;
|
||||
using Uno.Scenes;
|
||||
using Uno.Content;
|
||||
using Uno.Content.Models;
|
||||
|
||||
namespace PONG2D
|
||||
{
|
||||
public class Pong : Node
|
||||
{
|
||||
float2 _player1Pos;
|
||||
float2 _player2Pos;
|
||||
float2 ballPosition;
|
||||
float2 ballVelocity;
|
||||
float2 rectangleSize;
|
||||
|
||||
Rect player1Rect;
|
||||
Rect player2Rect;
|
||||
Rect ballRect;
|
||||
|
||||
float2 resolution = Context.VirtualResolution;
|
||||
|
||||
Random random = new Random(1);
|
||||
|
||||
|
||||
float2 Player1Pos
|
||||
{
|
||||
get { return _player1Pos; }
|
||||
set
|
||||
{
|
||||
_player1Pos = Math.Clamp(value, float2(0, 0), resolution - rectangleSize);
|
||||
}
|
||||
}
|
||||
|
||||
float2 Player2Pos
|
||||
{
|
||||
get { return _player2Pos; }
|
||||
set
|
||||
{
|
||||
_player2Pos = Math.Clamp(value, float2(0, 0), resolution - rectangleSize);
|
||||
}
|
||||
}
|
||||
|
||||
public Pong()
|
||||
{
|
||||
Uno.Scenes.Input.AddGlobalListener(this);
|
||||
}
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
base.OnInitialize();
|
||||
UpdateValues();
|
||||
|
||||
}
|
||||
|
||||
void UpdateValues()
|
||||
{
|
||||
rectangleSize = float2(resolution.X / 80f, resolution.Y / 5f);
|
||||
_player1Pos = float2(0f);
|
||||
_player2Pos = float2(Context.VirtualResolution.X - rectangleSize.X, 0f);
|
||||
|
||||
player1Rect = new Rect(_player1Pos, rectangleSize);
|
||||
player2Rect = new Rect(_player2Pos, rectangleSize);
|
||||
|
||||
ballPosition = float2(resolution.X * 0.5f - 10f, resolution.Y * 0.5f - 10f);
|
||||
ballRect = new Rect(ballPosition, float2(20f));
|
||||
|
||||
|
||||
SpwanBall();
|
||||
|
||||
}
|
||||
|
||||
void SpwanBall()
|
||||
{
|
||||
ballRect.Position = float2(resolution.X * 0.5f - 10f, resolution.Y * 0.5f - 10f);
|
||||
ballVelocity = float2(5f, 10f) * 0.5f;
|
||||
}
|
||||
|
||||
void OnWindowResize(object sender, EventArgs args)
|
||||
{
|
||||
//UpdateValues();
|
||||
}
|
||||
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
base.OnUpdate();
|
||||
|
||||
var padVelocity = resolution.Y * (float)Application.Current.FrameInterval * 4f;
|
||||
if (Input.IsKeyDown(Uno.Platform.Key.Up))
|
||||
{
|
||||
Player1Pos = float2(Player1Pos.X, Player1Pos.Y - padVelocity);
|
||||
}
|
||||
|
||||
if (Input.IsKeyDown(Uno.Platform.Key.Down))
|
||||
{
|
||||
Player1Pos = float2(Player1Pos.X, Player1Pos.Y + padVelocity);
|
||||
}
|
||||
|
||||
if (Input.IsKeyDown(Uno.Platform.Key.W))
|
||||
{
|
||||
Player2Pos = float2(Player2Pos.X, Player2Pos.Y - padVelocity);
|
||||
}
|
||||
|
||||
if (Input.IsKeyDown(Uno.Platform.Key.S))
|
||||
{
|
||||
Player2Pos = float2(Player2Pos.X, Player2Pos.Y + padVelocity);
|
||||
}
|
||||
player1Rect.Position = Player1Pos;
|
||||
player2Rect.Position = Player2Pos;
|
||||
|
||||
if (ballRect.Position.X > resolution.X || ballRect.Position.X < 0)
|
||||
{
|
||||
SpwanBall();
|
||||
}
|
||||
if (ballRect.Position.Y > resolution.Y ||
|
||||
ballRect.Position.Y < 0)
|
||||
{
|
||||
ballVelocity.Y *= -1f;
|
||||
}
|
||||
|
||||
if (ballRect.Intersects(player1Rect) ||
|
||||
ballRect.Intersects(player2Rect))
|
||||
{
|
||||
ballVelocity.X *= -1f;
|
||||
}
|
||||
|
||||
ballRect.Position += ballVelocity;
|
||||
|
||||
}
|
||||
|
||||
protected override void OnDraw()
|
||||
{
|
||||
Uno.Drawing.RoundedRectangle.Draw(player1Rect.Position, player1Rect.Size, float4(1f), 0);
|
||||
Uno.Drawing.RoundedRectangle.Draw(player2Rect.Position, player2Rect.Size, float4(1f), 0);
|
||||
Uno.Drawing.RoundedRectangle.Draw(ballRect.Position, ballRect.Size, float4(1f), 0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
136
samples/Uno/TowerBlock.uno
Normal file
136
samples/Uno/TowerBlock.uno
Normal file
@@ -0,0 +1,136 @@
|
||||
using Uno;
|
||||
using Uno.Collections;
|
||||
using Uno.Graphics;
|
||||
using Uno.Scenes;
|
||||
using Uno.Content;
|
||||
using Uno.Content.Models;
|
||||
using Uno.Physics.Box2D;
|
||||
|
||||
using TowerBuilder.Box2DMath;
|
||||
|
||||
namespace TowerBuilder
|
||||
{
|
||||
public class TowerBlock : TestBed
|
||||
{
|
||||
Body floorBody, deleteBody, mouseBody;
|
||||
|
||||
private List<Body> bodies = new List<Body>();
|
||||
private List<Body> bodiesToDelete = new List<Body>();
|
||||
|
||||
private ContactListener contactListener;
|
||||
|
||||
protected override void OnInitializeTestBed()
|
||||
{
|
||||
World.Gravity = float2(0, -25.0f);
|
||||
World.ContactListener = contactListener = new ContactListener(this);
|
||||
|
||||
bodies.Clear();
|
||||
bodiesToDelete.Clear();
|
||||
|
||||
CreateFloor();
|
||||
CreateDeleteBody();
|
||||
CreateBox2();
|
||||
}
|
||||
|
||||
void CreateFloor()
|
||||
{
|
||||
var bodyDef = new BodyDef();
|
||||
bodyDef.position = float2(0, -40.0f);
|
||||
|
||||
floorBody = World.CreateBody(bodyDef);
|
||||
|
||||
var shape = new PolygonShape();
|
||||
shape.SetAsBox(30.0f, 10.0f);
|
||||
|
||||
var fixtureDef = new FixtureDef();
|
||||
fixtureDef.shape = shape;
|
||||
fixtureDef.density = 1.0f;
|
||||
|
||||
floorBody.CreateFixture(fixtureDef);
|
||||
}
|
||||
|
||||
void CreateDeleteBody()
|
||||
{
|
||||
var bodyDef = new BodyDef();
|
||||
bodyDef.position = float2(0, -44.0f);
|
||||
|
||||
deleteBody = World.CreateBody(bodyDef);
|
||||
|
||||
var shape = new PolygonShape();
|
||||
shape.SetAsBox(200.0f, 10.0f);
|
||||
|
||||
var fixtureDef = new FixtureDef();
|
||||
fixtureDef.shape = shape;
|
||||
fixtureDef.density = 1.0f;
|
||||
|
||||
deleteBody.CreateFixture(fixtureDef);
|
||||
}
|
||||
|
||||
Random random = new Random((int) (Uno.Diagnostics.Clock.GetSeconds() * 1000000));
|
||||
void CreateBox2()
|
||||
{
|
||||
var bodyDef = new BodyDef();
|
||||
bodyDef.type = BodyType.Dynamic;
|
||||
bodyDef.position = float2(random.NextFloat(-25f, 25f), 50.0f);
|
||||
bodyDef.angularVelocity = random.NextFloat() * 40 - 20;
|
||||
bodyDef.userData = float3(0, 0, 0);
|
||||
|
||||
var body = World.CreateBody(bodyDef);
|
||||
|
||||
var shape = new PolygonShape();
|
||||
shape.SetAsBox(0.75f, 0.75f);
|
||||
|
||||
var fixtureDef = new FixtureDef();
|
||||
fixtureDef.shape = shape;
|
||||
fixtureDef.density = 5.0f;
|
||||
//fixtureDef.friction = 0.75f;
|
||||
|
||||
body.CreateFixture(fixtureDef);
|
||||
|
||||
bodies.Add(body);
|
||||
}
|
||||
|
||||
private int c = 0;
|
||||
protected override void OnFixedUpdate()
|
||||
{
|
||||
base.OnFixedUpdate();
|
||||
|
||||
debug_log bodies.Count;
|
||||
if(c++ % 8 == 0 && bodies.Count < 20) CreateBox2();
|
||||
|
||||
foreach(var body in bodiesToDelete)
|
||||
{
|
||||
World.DestroyBody(body);
|
||||
bodies.Remove(body);
|
||||
}
|
||||
|
||||
bodiesToDelete.Clear();
|
||||
}
|
||||
|
||||
public class ContactListener : IContactListener
|
||||
{
|
||||
private TowerBlock b;
|
||||
public ContactListener(TowerBlock b)
|
||||
{
|
||||
this.b = b;
|
||||
}
|
||||
|
||||
public void BeginContact(Contact contact)
|
||||
{
|
||||
if(contact.GetFixtureA().GetBody() == b.deleteBody)
|
||||
{
|
||||
b.bodiesToDelete.Add(contact.GetFixtureB().GetBody());
|
||||
}
|
||||
else if(contact.GetFixtureB().GetBody() == b.deleteBody)
|
||||
{
|
||||
b.bodiesToDelete.Add(contact.GetFixtureA().GetBody());
|
||||
}
|
||||
}
|
||||
|
||||
public void EndContact(Contact contact) {}
|
||||
public void PreSolve(Contact contact, ref Manifold manifold) {}
|
||||
public void PostSolve(Contact contact, ref ContactImpulse impulse) {}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
57
samples/XML/MainView.ux
Normal file
57
samples/XML/MainView.ux
Normal file
@@ -0,0 +1,57 @@
|
||||
<App Theme="Basic">
|
||||
<DockPanel>
|
||||
<TopFrameBackground Dock="Top" />
|
||||
<Panel>
|
||||
<Rectangle ux:Name="newLayoutMaster" Width="50" Height="50" Color="#8889" Alignment="TopLeft" Margin="20,50"/>
|
||||
<StackPanel Alignment="Top">
|
||||
<TextInput PlaceholderText="Click me to show the keyboard" Alignment="Center">
|
||||
<WhileKeyboardVisible>
|
||||
<Move Target="rect3" RelativeTo="Keyboard" Y="-1" Duration="0.5" />
|
||||
</WhileKeyboardVisible>
|
||||
</TextInput>
|
||||
<Button Text="Click me" Alignment="Center">
|
||||
<WhilePressed>
|
||||
<Move Target="rect1" RelativeTo="Size" Y="-1" Duration="0.5" />
|
||||
<Move Target="rect2" RelativeTo="ParentSize" Y="-1" Duration="0.5" />
|
||||
<Move Target="rect5" RelativeTo="Size" RelativeNode="relativeNode" Y="-1" Duration="0.5" />
|
||||
</WhilePressed>
|
||||
</Button>
|
||||
<Switch>
|
||||
<WhileTrue>
|
||||
<Change rect4.LayoutMaster="newLayoutMaster" />
|
||||
</WhileTrue>
|
||||
</Switch>
|
||||
</StackPanel>
|
||||
<Rectangle ux:Name="relativeNode" Height="400" Width="50" Color="#bbf" Alignment="BottomRight">
|
||||
<VerticalText Alignment="Center" Width="200">relativeNode</VerticalText>
|
||||
</Rectangle>
|
||||
|
||||
<Text ux:Class="VerticalText" TransformOrigin="Center" Alignment="Bottom" TextColor="#000">
|
||||
<Rotation Degrees="-90" />
|
||||
</Text>
|
||||
|
||||
<Grid ColumnCount="5" Rows="3*,1*" Color="#ddd" Width="80%" Height="100%" Alignment="BottomLeft">
|
||||
<VerticalText Width="200">RelativeTo="Size"</VerticalText>
|
||||
<VerticalText Width="200">RelativeTo="ParentSize"</VerticalText>
|
||||
<VerticalText Width="200">RelativeTo="Keyboard"</VerticalText>
|
||||
<VerticalText Width="200">RelativeTo="PositionChange"</VerticalText>
|
||||
<VerticalText Width="200">RelativeNode="relativeNode"</VerticalText>
|
||||
|
||||
|
||||
|
||||
<Rectangle ux:Name="rect1" Width="50" Height="50" Color="#f00" Alignment="Bottom"/>
|
||||
<Rectangle ux:Name="rect2" Width="50" Height="50" Color="#0f0" Alignment="Bottom"/>
|
||||
<Rectangle ux:Name="rect3" Width="50" Height="50" Color="#00f" Alignment="Bottom"/>
|
||||
<Panel Alignment="Bottom" Width="50" Height="50">
|
||||
<Rectangle ux:Name="rect4" Width="50" Height="50" Color="#0ff" LayoutMaster="layoutMaster">
|
||||
<LayoutAnimation>
|
||||
<Move RelativeTo="PositionChange" X="1" Y="1" Duration="0.5" />
|
||||
</LayoutAnimation>
|
||||
</Rectangle>
|
||||
<Rectangle ux:Name="layoutMaster" Width="50" Height="50"/>
|
||||
</Panel>
|
||||
<Rectangle ux:Name="rect5" Width="50" Height="50" Color="#f0f" Alignment="Bottom"/>
|
||||
</Grid>
|
||||
</Panel>
|
||||
</DockPanel>
|
||||
</App>
|
||||
11
samples/XML/MyApp.ux
Normal file
11
samples/XML/MyApp.ux
Normal file
@@ -0,0 +1,11 @@
|
||||
<App Theme="Basic">
|
||||
<EdgeNavigator HitTestMode="LocalBoundsAndChildren">
|
||||
<Panel Width="150" EdgeNavigation.Edge="Left" Background="#f63" />
|
||||
|
||||
<Panel>
|
||||
<Text Alignment="Center">
|
||||
This is an example of EdgeNavigator!
|
||||
</Text>
|
||||
</Panel>
|
||||
</EdgeNavigator>
|
||||
</App>
|
||||
29
samples/YAML/HexInspect.sublime-syntax
Normal file
29
samples/YAML/HexInspect.sublime-syntax
Normal file
@@ -0,0 +1,29 @@
|
||||
%YAML 1.2
|
||||
---
|
||||
# http://www.sublimetext.com/docs/3/syntax.html
|
||||
name: Hex Inspect
|
||||
file_extensions: []
|
||||
hidden: true
|
||||
scope: source.inspect
|
||||
contexts:
|
||||
main:
|
||||
- match: '([\w\-]+)\s*(:)\s*'
|
||||
captures:
|
||||
1: support.function.key.inspect
|
||||
2: support.function.punctuation.inspect
|
||||
push:
|
||||
- meta_scope: item.inspect
|
||||
- match: '([\d\-\w]+)'
|
||||
captures:
|
||||
1: data.inspect
|
||||
pop: true
|
||||
- match: '^(\s*[\w\-\s]+)\s*(:)\s*'
|
||||
captures:
|
||||
1: keyword.title.inspect
|
||||
2: keyword.title-punctuation.inspect
|
||||
push:
|
||||
- meta_scope: item.inspect
|
||||
- match: $
|
||||
pop: true
|
||||
- match: '[\w\s]+'
|
||||
scope: title-info.inspect
|
||||
55
samples/YANG/sfc-lisp-impl.yang
Normal file
55
samples/YANG/sfc-lisp-impl.yang
Normal file
@@ -0,0 +1,55 @@
|
||||
module sfc-lisp-impl {
|
||||
|
||||
yang-version 1;
|
||||
namespace "urn:opendaylight:params:xml:ns:yang:controller:config:sfc-lisp:impl";
|
||||
prefix "sfc-lisp-impl";
|
||||
|
||||
import config { prefix config; revision-date 2013-04-05; }
|
||||
import rpc-context { prefix rpcx; revision-date 2013-06-17; }
|
||||
import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
|
||||
|
||||
|
||||
description
|
||||
"This module contains the base YANG definitions for
|
||||
sfc-lisp implementation.";
|
||||
|
||||
revision "2015-04-27" {
|
||||
description
|
||||
"Initial revision.";
|
||||
}
|
||||
|
||||
// This is the definition of the service implementation as a module identity
|
||||
identity sfc-lisp-impl {
|
||||
base config:module-type;
|
||||
|
||||
// Specifies the prefix for generated java classes.
|
||||
config:java-name-prefix SfcLisp;
|
||||
}
|
||||
|
||||
|
||||
// Augments the 'configuration' choice node under modules/module.
|
||||
augment "/config:modules/config:module/config:configuration" {
|
||||
case sfc-lisp-impl {
|
||||
when "/config:modules/config:module/config:type = 'sfc-lisp-impl'";
|
||||
|
||||
//wires in the data-broker service
|
||||
container data-broker {
|
||||
uses config:service-ref {
|
||||
refine type {
|
||||
mandatory false;
|
||||
config:required-identity mdsal:binding-async-data-broker;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
container rpc-registry {
|
||||
uses config:service-ref {
|
||||
refine type {
|
||||
mandatory true;
|
||||
config:required-identity mdsal:binding-rpc-registry;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
329
samples/reStructuredText/HACKING.rst.txt
Normal file
329
samples/reStructuredText/HACKING.rst.txt
Normal file
@@ -0,0 +1,329 @@
|
||||
Contributing to SciPy
|
||||
=====================
|
||||
|
||||
This document aims to give an overview of how to contribute to SciPy. It
|
||||
tries to answer commonly asked questions, and provide some insight into how the
|
||||
community process works in practice. Readers who are familiar with the SciPy
|
||||
community and are experienced Python coders may want to jump straight to the
|
||||
`git workflow`_ documentation.
|
||||
|
||||
|
||||
Contributing new code
|
||||
---------------------
|
||||
|
||||
If you have been working with the scientific Python toolstack for a while, you
|
||||
probably have some code lying around of which you think "this could be useful
|
||||
for others too". Perhaps it's a good idea then to contribute it to SciPy or
|
||||
another open source project. The first question to ask is then, where does
|
||||
this code belong? That question is hard to answer here, so we start with a
|
||||
more specific one: *what code is suitable for putting into SciPy?*
|
||||
Almost all of the new code added to scipy has in common that it's potentially
|
||||
useful in multiple scientific domains and it fits in the scope of existing
|
||||
scipy submodules. In principle new submodules can be added too, but this is
|
||||
far less common. For code that is specific to a single application, there may
|
||||
be an existing project that can use the code. Some scikits (`scikit-learn`_,
|
||||
`scikits-image`_, `statsmodels`_, etc.) are good examples here; they have a
|
||||
narrower focus and because of that more domain-specific code than SciPy.
|
||||
|
||||
Now if you have code that you would like to see included in SciPy, how do you
|
||||
go about it? After checking that your code can be distributed in SciPy under a
|
||||
compatible license (see FAQ for details), the first step is to discuss on the
|
||||
scipy-dev mailing list. All new features, as well as changes to existing code,
|
||||
are discussed and decided on there. You can, and probably should, already
|
||||
start this discussion before your code is finished.
|
||||
|
||||
Assuming the outcome of the discussion on the mailing list is positive and you
|
||||
have a function or piece of code that does what you need it to do, what next?
|
||||
Before code is added to SciPy, it at least has to have good documentation, unit
|
||||
tests and correct code style.
|
||||
|
||||
1. Unit tests
|
||||
In principle you should aim to create unit tests that exercise all the code
|
||||
that you are adding. This gives some degree of confidence that your code
|
||||
runs correctly, also on Python versions and hardware or OSes that you don't
|
||||
have available yourself. An extensive description of how to write unit
|
||||
tests is given in the NumPy `testing guidelines`_.
|
||||
|
||||
2. Documentation
|
||||
Clear and complete documentation is essential in order for users to be able
|
||||
to find and understand the code. Documentation for individual functions
|
||||
and classes -- which includes at least a basic description, type and
|
||||
meaning of all parameters and returns values, and usage examples in
|
||||
`doctest`_ format -- is put in docstrings. Those docstrings can be read
|
||||
within the interpreter, and are compiled into a reference guide in html and
|
||||
pdf format. Higher-level documentation for key (areas of) functionality is
|
||||
provided in tutorial format and/or in module docstrings. A guide on how to
|
||||
write documentation is given in `how to document`_.
|
||||
|
||||
3. Code style
|
||||
Uniformity of style in which code is written is important to others trying
|
||||
to understand the code. SciPy follows the standard Python guidelines for
|
||||
code style, `PEP8`_. In order to check that your code conforms to PEP8,
|
||||
you can use the `pep8 package`_ style checker. Most IDEs and text editors
|
||||
have settings that can help you follow PEP8, for example by translating
|
||||
tabs by four spaces. Using `pyflakes`_ to check your code is also a good
|
||||
idea.
|
||||
|
||||
At the end of this document a checklist is given that may help to check if your
|
||||
code fulfills all requirements for inclusion in SciPy.
|
||||
|
||||
Another question you may have is: *where exactly do I put my code*? To answer
|
||||
this, it is useful to understand how the SciPy public API (application
|
||||
programming interface) is defined. For most modules the API is two levels
|
||||
deep, which means your new function should appear as
|
||||
``scipy.submodule.my_new_func``. ``my_new_func`` can be put in an existing or
|
||||
new file under ``/scipy/<submodule>/``, its name is added to the ``__all__``
|
||||
dict in that file (which lists all public functions in the file), and those
|
||||
public functions are then imported in ``/scipy/<submodule>/__init__.py``. Any
|
||||
private functions/classes should have a leading underscore (``_``) in their
|
||||
name. A more detailed description of what the public API of SciPy is, is given
|
||||
in `SciPy API`_.
|
||||
|
||||
Once you think your code is ready for inclusion in SciPy, you can send a pull
|
||||
request (PR) on Github. We won't go into the details of how to work with git
|
||||
here, this is described well in the `git workflow`_ section of the NumPy
|
||||
documentation and in the Github help pages. When you send the PR for a new
|
||||
feature, be sure to also mention this on the scipy-dev mailing list. This can
|
||||
prompt interested people to help review your PR. Assuming that you already got
|
||||
positive feedback before on the general idea of your code/feature, the purpose
|
||||
of the code review is to ensure that the code is correct, efficient and meets
|
||||
the requirements outlined above. In many cases the code review happens
|
||||
relatively quickly, but it's possible that it stalls. If you have addressed
|
||||
all feedback already given, it's perfectly fine to ask on the mailing list
|
||||
again for review (after a reasonable amount of time, say a couple of weeks, has
|
||||
passed). Once the review is completed, the PR is merged into the "master"
|
||||
branch of SciPy.
|
||||
|
||||
The above describes the requirements and process for adding code to SciPy. It
|
||||
doesn't yet answer the question though how decisions are made exactly. The
|
||||
basic answer is: decisions are made by consensus, by everyone who chooses to
|
||||
participate in the discussion on the mailing list. This includes developers,
|
||||
other users and yourself. Aiming for consensus in the discussion is important
|
||||
-- SciPy is a project by and for the scientific Python community. In those
|
||||
rare cases that agreement cannot be reached, the `maintainers`_ of the module
|
||||
in question can decide the issue.
|
||||
|
||||
|
||||
Contributing by helping maintain existing code
|
||||
----------------------------------------------
|
||||
|
||||
The previous section talked specifically about adding new functionality to
|
||||
SciPy. A large part of that discussion also applies to maintenance of existing
|
||||
code. Maintenance means fixing bugs, improving code quality or style,
|
||||
documenting existing functionality better, adding missing unit tests, keeping
|
||||
build scripts up-to-date, etc. The SciPy `Trac`_ bug tracker contains all
|
||||
reported bugs, build/documentation issues, etc. Fixing issues described in
|
||||
Trac tickets helps improve the overall quality of SciPy, and is also a good way
|
||||
of getting familiar with the project. You may also want to fix a bug because
|
||||
you ran into it and need the function in question to work correctly.
|
||||
|
||||
The discussion on code style and unit testing above applies equally to bug
|
||||
fixes. It is usually best to start by writing a unit test that shows the
|
||||
problem, i.e. it should pass but doesn't. Once you have that, you can fix the
|
||||
code so that the test does pass. That should be enough to send a PR for this
|
||||
issue. Unlike when adding new code, discussing this on the mailing list may
|
||||
not be necessary - if the old behavior of the code is clearly incorrect, no one
|
||||
will object to having it fixed. It may be necessary to add some warning or
|
||||
deprecation message for the changed behavior. This should be part of the
|
||||
review process.
|
||||
|
||||
|
||||
Other ways to contribute
|
||||
------------------------
|
||||
|
||||
There are many ways to contribute other than contributing code. Participating
|
||||
in discussions on the scipy-user and scipy-dev *mailing lists* is a contribution
|
||||
in itself. The `scipy.org`_ *website* contains a lot of information on the
|
||||
SciPy community and can always use a new pair of hands. A redesign of this
|
||||
website is ongoing, see `scipy.github.com`_. The redesigned website is a
|
||||
static site based on Sphinx, the sources for it are
|
||||
also on Github at `scipy.org-new`_.
|
||||
|
||||
The SciPy *documentation* is constantly being improved by many developers and
|
||||
users. You can contribute by sending a PR on Github that improves the
|
||||
documentation, but there's also a `documentation wiki`_ that is very convenient
|
||||
for making edits to docstrings (and doesn't require git knowledge). Anyone can
|
||||
register a username on that wiki, ask on the scipy-dev mailing list for edit
|
||||
rights and make edits. The documentation there is updated every day with the
|
||||
latest changes in the SciPy master branch, and wiki edits are regularly
|
||||
reviewed and merged into master. Another advantage of the documentation wiki
|
||||
is that you can immediately see how the reStructuredText (reST) of docstrings
|
||||
and other docs is rendered as html, so you can easily catch formatting errors.
|
||||
|
||||
Code that doesn't belong in SciPy itself or in another package but helps users
|
||||
accomplish a certain task is valuable. `SciPy Central`_ is the place to share
|
||||
this type of code (snippets, examples, plotting code, etc.).
|
||||
|
||||
|
||||
Useful links, FAQ, checklist
|
||||
----------------------------
|
||||
|
||||
Checklist before submitting a PR
|
||||
````````````````````````````````
|
||||
|
||||
- Are there unit tests with good code coverage?
|
||||
- Do all public function have docstrings including examples?
|
||||
- Is the code style correct (PEP8, pyflakes)
|
||||
- Is the new functionality tagged with ``.. versionadded:: X.Y.Z`` (with
|
||||
X.Y.Z the version number of the next release - can be found in setup.py)?
|
||||
- Is the new functionality mentioned in the release notes of the next
|
||||
release?
|
||||
- Is the new functionality added to the reference guide?
|
||||
- In case of larger additions, is there a tutorial or more extensive
|
||||
module-level description?
|
||||
- In case compiled code is added, is it integrated correctly via setup.py
|
||||
(and preferably also Bento/Numscons configuration files)?
|
||||
- If you are a first-time contributor, did you add yourself to THANKS.txt?
|
||||
Please note that this is perfectly normal and desirable - the aim is to
|
||||
give every single contributor credit, and if you don't add yourself it's
|
||||
simply extra work for the reviewer (or worse, the reviewer may forget).
|
||||
- Did you check that the code can be distributed under a BSD license?
|
||||
|
||||
|
||||
Useful SciPy documents
|
||||
``````````````````````
|
||||
|
||||
- The `how to document`_ guidelines
|
||||
- NumPy/SciPy `testing guidelines`_
|
||||
- `SciPy API`_
|
||||
- SciPy `maintainers`_
|
||||
- NumPy/SciPy `git workflow`_
|
||||
|
||||
|
||||
FAQ
|
||||
```
|
||||
|
||||
*I based my code on existing Matlab/R/... code I found online, is this OK?*
|
||||
|
||||
It depends. SciPy is distributed under a BSD license, so if the code that you
|
||||
based your code on is also BSD licensed or has a BSD-compatible license (MIT,
|
||||
Apache, ...) then it's OK. Code which is GPL-licensed, has no clear license,
|
||||
requires citation or is free for academic use only can't be included in SciPy.
|
||||
Therefore if you copied existing code with such a license or made a direct
|
||||
translation to Python of it, your code can't be included. See also `license
|
||||
compatibility`_.
|
||||
|
||||
|
||||
*How do I set up SciPy so I can edit files, run the tests and make commits?*
|
||||
|
||||
The simplest method is setting up an in-place build. To create your local git
|
||||
repo and do the in-place build::
|
||||
|
||||
$ git clone https://github.com/scipy/scipy.git scipy
|
||||
$ cd scipy
|
||||
$ python setup.py build_ext -i
|
||||
|
||||
Then you need to either set up a symlink in your site-packages or add this
|
||||
directory to your PYTHONPATH environment variable, so Python can find it. Some
|
||||
IDEs (Spyder for example) have utilities to manage PYTHONPATH. On Linux and OS
|
||||
X, you can for example edit your .bash_login file to automatically add this dir
|
||||
on startup of your terminal. Add the line::
|
||||
|
||||
export PYTHONPATH="$HOME/scipy:${PYTHONPATH}"
|
||||
|
||||
Alternatively, to set up the symlink, use (prefix only necessary if you want to
|
||||
use your local instead of global site-packages dir)::
|
||||
|
||||
$ python setupegg.py develop --prefix=${HOME}
|
||||
|
||||
To test that everything works, start the interpreter (not inside the scipy/
|
||||
source dir) and run the tests::
|
||||
|
||||
$ python
|
||||
>>> import scipy as sp
|
||||
>>> sp.test()
|
||||
|
||||
Now editing a Python source file in SciPy allows you to immediately test and
|
||||
use your changes, by simply restarting the interpreter.
|
||||
|
||||
Note that while the above procedure is the most straightforward way to get
|
||||
started, you may want to look into using Bento or numscons for faster and more
|
||||
flexible building, or virtualenv to maintain development environments for
|
||||
multiple Python versions.
|
||||
|
||||
|
||||
*How do I set up a development version of SciPy in parallel to a released
|
||||
version that I use to do my job/research?*
|
||||
|
||||
One simple way to achieve this is to install the released version in
|
||||
site-packages, by using a binary installer or pip for example, and set up the
|
||||
development version with an in-place build in a virtualenv. First install
|
||||
`virtualenv`_ and `virtualenvwrapper`_, then create your virtualenv (named
|
||||
scipy-dev here) with::
|
||||
|
||||
$ mkvirtualenv scipy-dev
|
||||
|
||||
Now, whenever you want to switch to the virtual environment, you can use the
|
||||
command ``workon scipy-dev``, while the command ``deactivate`` exits from the
|
||||
virtual environment and brings back your previous shell. With scipy-dev
|
||||
activated, follow the in-place build with the symlink install above to actually
|
||||
install your development version of SciPy.
|
||||
|
||||
|
||||
*Can I use a programming language other than Python to speed up my code?*
|
||||
|
||||
Yes. The languages used in SciPy are Python, Cython, C, C++ and Fortran. All
|
||||
of these have their pros and cons. If Python really doesn't offer enough
|
||||
performance, one of those languages can be used. Important concerns when
|
||||
using compiled languages are maintainability and portability. For
|
||||
maintainability, Cython is clearly preferred over C/C++/Fortran. Cython and C
|
||||
are more portable than C++/Fortran. A lot of the existing C and Fortran code
|
||||
in SciPy is older, battle-tested code that was only wrapped in (but not
|
||||
specifically written for) Python/SciPy. Therefore the basic advice is: use
|
||||
Cython. If there's specific reasons why C/C++/Fortran should be preferred,
|
||||
please discuss those reasons first.
|
||||
|
||||
|
||||
*There's overlap between Trac and Github, which do I use for what?*
|
||||
|
||||
Trac_ is the bug tracker, Github_ the code repository. Before the SciPy code
|
||||
repository moved to Github, the preferred way to contribute code was to create
|
||||
a patch and attach it to a Trac ticket. The overhead of this approach is much
|
||||
larger than sending a PR on Github, so please don't do this anymore. Use Trac
|
||||
for bug reports, Github for patches.
|
||||
|
||||
|
||||
.. _scikit-learn: http://scikit-learn.org
|
||||
|
||||
.. _scikits-image: http://scikits-image.org/
|
||||
|
||||
.. _statsmodels: http://statsmodels.sourceforge.net/
|
||||
|
||||
.. _testing guidelines: https://github.com/numpy/numpy/blob/master/doc/TESTS.rst.txt
|
||||
|
||||
.. _how to document: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt
|
||||
|
||||
.. _PEP8: http://www.python.org/dev/peps/pep-0008/
|
||||
|
||||
.. _pep8 package: http://pypi.python.org/pypi/pep8
|
||||
|
||||
.. _pyflakes: http://pypi.python.org/pypi/pyflakes
|
||||
|
||||
.. _SciPy API: http://docs.scipy.org/doc/scipy/reference/api.html
|
||||
|
||||
.. _git workflow: http://docs.scipy.org/doc/numpy/dev/gitwash/index.html
|
||||
|
||||
.. _maintainers: https://github.com/scipy/scipy/blob/master/doc/MAINTAINERS.rst.txt
|
||||
|
||||
.. _Trac: http://projects.scipy.org/scipy/timeline
|
||||
|
||||
.. _Github: https://github.com/scipy/scipy
|
||||
|
||||
.. _scipy.org: http://scipy.org/
|
||||
|
||||
.. _scipy.github.com: http://scipy.github.com/
|
||||
|
||||
.. _scipy.org-new: https://github.com/scipy/scipy.org-new
|
||||
|
||||
.. _documentation wiki: http://docs.scipy.org/scipy/Front%20Page/
|
||||
|
||||
.. _SciPy Central: http://scipy-central.org/
|
||||
|
||||
.. _license compatibility: http://www.scipy.org/License_Compatibility
|
||||
|
||||
.. _doctest: http://www.doughellmann.com/PyMOTW/doctest/
|
||||
|
||||
.. _virtualenv: http://www.virtualenv.org/
|
||||
|
||||
.. _virtualenvwrapper: http://www.doughellmann.com/projects/virtualenvwrapper/
|
||||
|
||||
Reference in New Issue
Block a user