Gebruiker:Elwin

Uit 3Dwiki

Ga naar: navigatie, zoeken

Deze pagina gebruik ik om wat te testen, verder weinig interessants te vinden hier vooralsnog. :)

Inhoud

[bewerken] Syntax highlighting

Geshi documentatie

[bewerken] Ideeën

  • Is er een syntax highlighter voor de AW acties mogelijk denk je? --Lode 5 jun 2008 10:44 (CEST)
Sure, ik zal er eens naar kijken. Tenzij jij me voor bent, vind ik ook goed. :) Elwin

[bewerken] C (3Dwiki)

Ik heb een nieuwe language file gemaakt voor de Geshi syntax highlighter: C (3Dwiki). Deze kan gebruikt worden door <source lang="c"> te gebruiken (zie hieronder voor een voorbeeld). De standaard C highlighting kan gebruikt worden met <source lang="c_old">.

De gebruikte kleuren zijn gebaseerd op wat de Microsoft Visual Studios gebruiken. Alle AW functies en attributes krijgen een link naar de pagina erover op de AW SDK. Ideeën voor verbeteringen zijn welkom.

[bewerken] Ideeën

  • Commentaar zou italic kunnen. -- Dat is mogelijk, maar helpt waarschijnlijk weinig. Het commentaar valt al genoeg op met de afwijkende kleur. Elwin
  • Escape character met een afwijkende opmaak aangeven in strings. -- Ik vind dit niet zo nodig, misschien vinden sommigen dit wel fijn? Elwin
  • Keywords bold maken? -- Zo is het ook wel duidelijk genoeg. Elwin
  • Nummers en haakjes speciale opmaak geven. -- Nummerieke constantes apart aangeven zou kunnen, haakjes lijkt me niet fijn. Elwin
  • Operatoren speciaal aangeven. -- Lijkt niet te werken met deze versie van Geshi. Elwin
Inmiddels is dit wel mogelijk, maar nog steeds niet gewenst, naar mijn mening althans. Elwin
  • De standaard C functies ook links geven naar een website met extra informatie (voorbeeld). -- Mogelijk; het is wel wat werk om alle functies te zoeken (overzicht). Elwin
  • De functie pagina's die al bestaan in de 3Dwiki wel hier "houden"? - Kvdk
Dat zou op zich kunnen, welke pagina's zijn er al? Elwin
Zie Categorie:SDK voor alle die al toegevoegt zijn, en wanneer ik tijd heb vertaal ik er steeds meer - Kvdk
Alle links verwijzen nu naar binnen de 3Dwiki. Elwin

[bewerken] Voorbeeldcode

C (3Dwiki) stijl

/* greeter.c : Een simpele Active Worlds greeterbot in C. */
 
#include "aw.h"
#include <stdio.h>
#include <stdlib.h>
 
#define HOST   "auth.activeworlds.com"  /* Het adres waar je bot moet inloggen. */
#define POORT  6702                     /* De poort waar je bot moet inloggen. */
#define WERELD "Beta"                   /* De wereld die je bot moet binnen gaan. */
 
#define BEWONERSNUMMER 1024             /* Je bewonersnummer. */
#define WACHTWOORD     "helloworld"     /* Je privilege-wachtwoord. */
#define BOTNAAM        "GreeterBot"     /* De naam van de bot. */
 
void handle_avatar_add(void);
 
int main()
{
    // single line comment.
 
    // continued single line comment \
    #define int 5;
 
    0x55
 
    13246f
    .3
 
    12987L
 
    09823
 
(a + b) / 4;
array[4] = 2;
ptr->age = 34;
obj.age = 34;
for( i = 0; i < 10; i++ )
for( i = 10; i > 0; i-- )
 
if( !done ) ...
flags = ~flags;
for( i = 0; i < 10; ++i )
for( i = 10; i > 0; --i )
int i = -1;
int i = +1;
data = *ptr;
address = &obj;
int i = (int) floatNum;
int size = sizeof(floatNum);
 
int i = 2 * 4;
float f = 10 / 3;
int rem = 4 % 3;
 
 
int i = 2 + 3;
int i = 5 - 1;
 
int flags = 33 << 1;
int flags = 33 >> 1;
 
if( i < 42 )
if( i <= 42 )
if( i > 42 )
if( i >= 42 )
 
 
if( i == 42 )
if( i != 42 )
 
 	flags = flags & 42;
 
 	flags = flags ^ 42;
flags = flags | 42;
 
 	if( conditionA && conditionB )
 
 	if( conditionA || conditionB )
 
 	int i = (a > b) ? a : b;
 
int a = b;
a += 3;
b -= 4;
a *= 5;
a /= 2;
a %= 3;
flags &= new_flags;
flags ^= new_flags;
flags |= new_flags;
flags <<= 2;
flags >>= 2;
 
 	for( i = 0, j = 0; i < 10; i++, j++ )
    int rc;
 
    /* Initialiseer de Active Worlds API. */
    if (rc = aw_init(AW_BUILD))
    {
        printf("Kan AW API niet initialiseren (reden: %d).\n", rc);
        exit(1);
    }
 
    /* Als een avatar de wereld binnenkomt: een functie aanroepen. */
    aw_event_set(AW_EVENT_AVATAR_ADD, handle_avatar_add);
 
    /* Een nieuwe bot aanmaken. */
    if (rc = aw_create(HOST, POORT, 0))
    {
        printf("Kan geen bot aanmaken (reden: %d).\n", rc);
        exit(1);
    }
 
    /* De bot inloggen in het universum. */
    aw_int_set(AW_LOGIN_OWNER, BEWONERSNUMMER);
    aw_string_set(AW_LOGIN_PRIVILEGE_PASSWORD, WACHTWOORD);
    aw_string_set(AW_LOGIN_APPLICATION, "SDK voorbeeld");
    aw_string_set(AW_LOGIN_NAME, BOTNAAM);
    if (rc = aw_login())
    {
        printf("Kan niet inloggen (reden: %d).\n", rc);
        exit(1);
    }
 
    /* Laat de bot de wereld binnengaan. */
    if (rc = aw_enter(WERELD))
    {
        printf("Kan wereld niet binnengaan (reden: %d).\n", rc);
        exit(1);
    }
 
    /* De positie van de bot bekend maken in de wereld. */
    aw_int_set(AW_MY_X, 1000);    /* 1W */
    aw_int_set(AW_MY_Z, 1000);    /* 1N */
    aw_int_set(AW_MY_YAW, 2250);  /* Kijkend naar GZ */
    if (rc = aw_state_change())
    {
        printf("Kan status niet veranderen (reden: %d).\n", rc);
        exit(1);
    }
 
    /* Event loop. */
    while (!aw_wait(-1))
        ;
 
    /* Afsluiten. */
    aw_destroy();
    aw_term();
    return 0;
}
 
/* handle_avatar_add() : Deze functie wordt aangeroepen als een avatar de wereld binnenkomt. */
void handle_avatar_add(void)
{
    char message[64];
 
    /* Groet de nieuwe avatar en schrijf ook een berichtje naar de console. */
    sprintf(message, "Hoi, %s!", aw_string(AW_AVATAR_NAME));
    aw_say(message);
 
    printf("avatar_add: %s\n", aw_string(AW_AVATAR_NAME));
}

Standaard C stijl

/* greeter.c : Een simpele Active Worlds greeterbot in C. */
 
#include "aw.h"
#include <stdio.h>
#include <stdlib.h>
 
#define HOST   "auth.activeworlds.com"  /* Het adres waar je bot moet inloggen. */
#define POORT  6702                     /* De poort waar je bot moet inloggen. */
#define WERELD "Beta"                   /* De wereld die je bot moet binnen gaan. */
 
#define BEWONERSNUMMER 1024             /* Je bewonersnummer. */
#define WACHTWOORD     "helloworld"     /* Je privilege-wachtwoord. */
#define BOTNAAM        "GreeterBot"     /* De naam van de bot. */
 
void handle_avatar_add(void);
 
int main()
{
    int rc;
 
    /* Initialiseer de Active Worlds API. */
    if (rc = aw_init(AW_BUILD))
    {
        printf("Kan AW API niet initialiseren (reden: %d).\n", rc);
        exit(1);
    }
 
    /* Als een avatar de wereld binnenkomt: een functie aanroepen. */
    aw_event_set(AW_EVENT_AVATAR_ADD, handle_avatar_add);
 
    /* Een nieuwe bot aanmaken. */
    if (rc = aw_create(HOST, POORT, 0))
    {
        printf("Kan geen bot aanmaken (reden: %d).\n", rc);
        exit(1);
    }
 
    /* De bot inloggen in het universum. */
    aw_int_set(AW_LOGIN_OWNER, BEWONERSNUMMER);
    aw_string_set(AW_LOGIN_PRIVILEGE_PASSWORD, WACHTWOORD);
    aw_string_set(AW_LOGIN_APPLICATION, "SDK voorbeeld");
    aw_string_set(AW_LOGIN_NAME, BOTNAAM);
    if (rc = aw_login())
    {
        printf("Kan niet inloggen (reden: %d).\n", rc);
        exit(1);
    }
 
    /* Laat de bot de wereld binnengaan. */
    if (rc = aw_enter(WERELD))
    {
        printf("Kan wereld niet binnengaan (reden: %d).\n", rc);
        exit(1);
    }
 
    /* De positie van de bot bekend maken in de wereld. */
    aw_int_set(AW_MY_X, 1000);    /* 1W */
    aw_int_set(AW_MY_Z, 1000);    /* 1N */
    aw_int_set(AW_MY_YAW, 2250);  /* Kijkend naar GZ */
    if (rc = aw_state_change())
    {
        printf("Kan status niet veranderen (reden: %d).\n", rc);
        exit(1);
    }
 
    /* Event loop. */
    while (!aw_wait(-1))
        ;
 
    /* Afsluiten. */
    aw_destroy();
    aw_term();
    return 0;
}
 
/* handle_avatar_add() : Deze functie wordt aangeroepen als een avatar de wereld binnenkomt. */
void handle_avatar_add(void)
{
    char message[64];
 
    /* Groet de nieuwe avatar en schrijf ook een berichtje naar de console. */
    sprintf(message, "Hoi, %s!", aw_string(AW_AVATAR_NAME));
    aw_say(message);
 
    printf("avatar_add: %s\n", aw_string(AW_AVATAR_NAME));
}

[bewerken] C++ (3Dwiki)

Ik heb ook een nieuwe language file gemaakt voor C++. Deze kan gebruikt worden door <source lang="cpp"> te gebruiken. De standaard C++ highlighting kan gebruikt worden met <source lang="cpp_old">.

Deze is behalve het toevoegen van de extra keywords van C++ verder identiek aan de bovenstaande stijl voor C.

[bewerken] RWX (3Dwiki)

Ik heb een syntax highlighting file gemaakt voor RWX code. De kleuren zijn min of meer hetzelfde als bij C en C++. Deze RWX stijl kan gebruikt worden door <source lang="rwx"> te gebruiken.

[bewerken] Ideeën

  • Tof dat je dit hebt gemaakt! Er zijn wat problemen met keywords in variabelen en comments, is zoiets op te lossen? --Lode 4 jun 2008 00:37 (CEST)
Texture vierkant-uv.jpg
Quad 12 11 10 9 #linker zijkant (rechter texture)
Ik had het inderdaad al opgemerkt en wat zitten testen. Het lijkt dat Geshi het standaard zo doet (en niet instelbaar). Een keyword wordt altijd als zodanig ge-highlight als er spaties of leestekens omheen staan, maar niet als het onderdeel is van een langer woord. In die namen die je gekozen had voor dat voorbeeld gaat dat dus net verkeerd.
Daarbij komt nog dat het commentaar van RWX eigenlijk niet op de normale geshi manier kan volgens mij, om de uitzondering van '#!' mee te nemen. Anders zou het keywords-in-commentaar-probleem er niet zijn.
In dit geval is dat dus niet zo handig. Een oplossing zou het maken van wat uitzonderingen in de language file zijn voor woorden die misschien vaak in commentaar gaan voorkomen, maar heel elegant is dat niet. Een andere oplossing is het kiezen van iets andere namen, zodat de highlighting niet faalt ('vierkant-uvs.jpg', misschien 'rechter textuur' ofzo); en een nieuwere versie van Geshi zou misschien ook werken. Elwin
Is er een nieuwe versie van Geshi dat jij weet? Ik ga anders later vandaag wel even kijken. --Lode 5 jun 2008 10:43 (CEST)
Mogelijk geen stabiele versie. Elwin
Ik heb net in ieder geval GeSHi geüpdatet, de vorige versie was mogelijk zo'n 1,5 jaar oud. Ook heb ik een andere (meer officiële) extensie gebruikt als syntax highlighter. De code is wel veranderd van <code .. in <source ... Met extra mogelijkheden voor linenumbers (line= & start=). --Lode 5 jun 2008 16:58 (CEST)
Prima. :) Elwin
  • Het lijkt me prima om de code taal gewoon rwx te noemen, ipv rwx3dwiki, typt sneller, en er komt voorlopig toch geen RWX versie van Geshi zelf gok ik :) --Lode 5 jun 2008 10:43 (CEST)
Jah, zou kunnen. Het leek mij op zich fijn om het onderscheid te bewaren tussen language files die standaard bij Geshi zitten en degene die we zelf maken, maar dat valt uit de headers verder ook wel op te maken. Ik zal het wel hernoemen naar 'rwx' inderdaad. Elwin
Misschien ook de andere (C/C++)? De oude versies kunnen dan cold/coriginal/cdefault genoemd worden? Heb ik met de php code ook gedaan. Dat maakt het wel makkelijker om gewoon als standaard de verbeterde versie te gebruiken. --Lode 5 jun 2008 17:05 (CEST)
Hernamen gedaan; de oude versies heb ik c_old genoemd (anders is het zo koud). Elwin
Ja, dat is waar :) --Lode 5 jun 2008 19:37 (CEST)

[bewerken] Voorbeeldcode

#####  COBDump3:      V3.00.346 by HamFon@ActiveWorlds.com
#####  Source File:   C:\3D\3DWEBP~1\SCIFI1\NEWFOL~1\AD1.COB
#####  VRT Timestamp: Mon Aug 27 00:59:15 2001
ModelBegin
 ProtoBegin cube_0_0
  Surface 1 1 0
  TextureModes Lit Foreshorten
  Transform 0.021631 0. 0. 0. 0. 0.021631 0. 0. 0. 0. 0.897437 0. 0. 0. 1.0243 1.
  Vertex 4.376825 4.376825 -1.138733 #! prelight 1 1 1 UV 0. 0. # 1
  Vertex -4.376825 4.376825 -1.138733 #! prelight 1 1 1 UV 1. 0. # 2
  Vertex -4.376825 -4.376825 -1.138733 #! prelight 1 1 1 UV 1. 1. # 3
  Vertex 4.376825 -4.376825 -1.138733 #! prelight 1 1 1 UV 0. 1. # 4
  Vertex -1. 1. 1. #! prelight 1 1 1 UV 0.25 1. # 5
  Vertex 1. 1. 1. #! prelight 1 1 1 UV 0. 1. # 6
  Vertex 1. -1. 1. #! prelight 1 1 1 UV 0.75 1. # 7
  Vertex -1. -1. 1. #! prelight 1 1 1 UV 0.5 1. # 8
  Vertex -4.376825 4.376825 -1.138733 #! prelight 1 1 1 UV 0.25 0. # 9
  Vertex 4.376825 4.376825 -1.138733 #! prelight 1 1 1 UV 0.5 0. # 10
  Vertex 1. 1. -1. #! prelight 1 1 1 UV 0.5 1. # 11
  Vertex -1. 1. -1. #! prelight 1 1 1 UV 0.25 1. # 12
  Vertex -4.376825 -4.376825 -1.138733 #! prelight 1 1 1 UV 0. 0. # 13
  Vertex -1. -1. -1. #! prelight 1 1 1 UV 0. 1. # 14
  Vertex 4.376825 -4.376825 -1.138733 #! prelight 1 1 1 UV 0.75 0. # 15
  Vertex -4.376825 -4.376825 -1.138733 #! prelight 1 1 1 UV 1. 0. # 16
  Vertex -1. -1. -1. #! prelight 1 1 1 UV 1. 1. # 17
  Vertex 1. -1. -1. #! prelight 1 1 1 UV 0.75 1. # 18
  Vertex -1. 1. 1. #! prelight 1 1 1 UV 0. 0. # 19
  Vertex -1. -1. 1. #! prelight 1 1 1 UV 1. 0. # 20
  Vertex -1. 1. -1. #! prelight 1 1 1 UV 0. 1. # 21
  Vertex 1. 1. 1. #! prelight 1 1 1 UV 0. 0. # 22
  Vertex -1. 1. 1. #! prelight 1 1 1 UV 1. 0. # 23
  Vertex -1. 1. -1. #! prelight 1 1 1 UV 1. 1. # 24
  Vertex 1. 1. -1. #! prelight 1 1 1 UV 0. 1. # 25
  Vertex 1. -1. 1. #! prelight 1 1 1 UV 0. 0. # 26
  Vertex 1. 1. 1. #! prelight 1 1 1 UV 1. 0. # 27
  Vertex 1. 1. -1. #! prelight 1 1 1 UV 1. 1. # 28
  Vertex 1. -1. -1. #! prelight 1 1 1 UV 0. 1. # 29
  Vertex -1. -1. 1. #! prelight 1 1 1 UV 0. 0. # 30
  Vertex 1. -1. 1. #! prelight 1 1 1 UV 1. 0. # 31
  Vertex 1. -1. -1. #! prelight 1 1 1 UV 1. 1. # 32
  Vertex -1. -1. -1. #! prelight 1 1 1 UV 0. 1. # 33
  Color 1. 1. 1.
  Opacity 1.
  Texture mon3
  LightSampling Facet
  Quad 33 32 31 30
  Quad 29 28 27 26
  Quad 25 24 23 22
  Quad 21 17 20 19
  Texture mon2
  Quad 11 18 15 10
  Quad 18 17 16 15
  Quad 14 12 9 13
  Quad 12 11 10 9
  Quad 8 7 6 5
  Quad 4 3 2 1
 ProtoEnd # cube_0_0
 ClumpBegin
  Rotate 0 1 0 180
  Rotate 1 0 0 -90
  Scale .1 .1 .1
  ProtoInstance cube_0_0
 ClumpEnd
ModelEnd
Persoonlijke instellingen