%{ //@auto=0 //@class index %} %class lex %{ #include #include #include "ctype.h" #include int in_flex=0; int mycmp(char *s1, char *s2); char flexdoc[] = "http://livedocs.adobe.com/flex/201/langref/"; char flashdoc[] = "http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/"; // http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/media/Video.html char ascore[] = "mx/core/"; char fisixdoc[] = "local/api/"; char rockdoc[] = "http://www.rockonflash.com/demos/RockOnFlashLogoDemo/asdoc/RockOnFlashLogo/"; char *s,*strcpy(); char* tol(char*); char* tod(char*); char buf[BUFSIZ]; static int in_link = 0; void printref(char* id, char* f, char* pre="n-") { if (in_link) cout << id; else cout << "" << id << ""; } void printflex(char* id, char* f, char* pre="mx/") { in_flex = 1; if (in_link) cout << id; else cout << "" << id << ""; } void printflash(char* id, char* f, char* pre="flash/") { in_flex = 1; if (in_link) cout << id; else cout << "" << id << ""; } void printfisix(char* id, char* f, char* pre="fisix/") { in_flex = 1; if (in_link) cout << id; else cout << "" << id << ""; } void printrock(char* id, char* f, char* pre="") { in_flex = 1; if (in_link) cout << id; else cout << "" << id << ""; } %} %% "]*">" { cout << yytext; in_link = 1; } "" { cout << yytext; in_link = 0; } "]*">" { cout << yytext; } "mx:"[A-Za-z]+ { int noc = 3; string x = (char*) yytext+noc; if ( x == "Application" ) { printflex(yytext,(char*)x,"mx/core/" ); } else if ( x == "Panel" ) { printflex(yytext,(char*)x,"mx/containers/" ); } else { printflex(yytext,(char*)x ); } } "mx."[A-Za-z\.]+ { int noc = 3; string x = (char*) yytext+noc; if ( x == "containers.Panel" ) { printflex(yytext,tod((char*)x) ); } else { printflex(yytext,tod((char*)x) ); } } "flash."[A-Za-z\.]+ { int noc = 6; string x = (char*) yytext+noc; if ( x == "media.Video" ) { printflash(yytext,tod((char*)x) ); } else { printflash(yytext,tod((char*)x) ); } } "com.fileitup.fisixengine."[A-Za-z\.]+ { int noc = 25; string x = (char*) yytext+noc; if ( x == "core.Vector" ) { printfisix(yytext,tod((char*)yytext) ); } else { printfisix(yytext,tod((char*)yytext) ); } } "org."[A-Za-z0-9\.]+ { int noc = 4; string x = (char*) yytext+noc; if ( x == "core.Vector" ) { printrock(yytext,tod((char*)yytext) ); } else { printrock(yytext,tod((char*)yytext) ); } } [A-Za-z][A-Za-z[0-9]+ { string x = (char*) yytext; //cerr << (char*) x << endl; if (in_flex) { cout << yytext; } else if (x == "Anchor") { printref(yytext, tol(yytext)); } else if (x == "Appearance" ) { printref(yytext, tol(yytext)); } else if (x == "AudioClip" ) { printref(yytext, tol(yytext)); } else if (x == "Background" ) { printref(yytext, tol(yytext)); } else if (x == "Billboard" ) { printref(yytext, tol(yytext)); } else if (x == "Box" ) { printref(yytext, tol(yytext)); } else if (x == "Collision" ) { printref(yytext, tol(yytext)); } else if (x == "Color" ) { printref(yytext, tol(yytext)); } else if (x == "ColorInterpolator" ) { printref(yytext, tol(yytext)); } else if (x == "Cone" ) { printref(yytext, tol(yytext)); } else if (x == "Coordinate" ) { printref(yytext, tol(yytext)); } else if (x == "CoordinateInterpolator" ) { printref(yytext, tol("Coordinateinterpol")); } else if (x == "Cylinder" ) { printref(yytext, tol(yytext)); } else if (x == "CylinderSensor" ) { printref(yytext, tol(yytext)); } else if (x == "DirectionalLight" ) { printref(yytext, tol(yytext)); } else if (x == "ElevationGrid" ) { printref(yytext, tol(yytext)); } else if (x == "Extrusion" ) { printref(yytext, tol(yytext)); } else if (x == "Fog" ) { printref(yytext, tol(yytext)); } else if (x == "FontStyle" ) { printref(yytext, tol(yytext)); } else if (x == "Group" ) { printref(yytext, tol(yytext)); } else if (x == "ImageTexture" ) { printref(yytext, tol(yytext)); } else if (x == "IndexedFaceSet" ) { printref(yytext, tol(yytext)); } else if (x == "IndexedLineSet" ) { printref(yytext, tol(yytext)); } else if (x == "Inline" ) { printref(yytext, tol(yytext)); } else if (x == "LOD" ) { printref(yytext, tol(yytext)); } else if (x == "Material" ) { printref(yytext, tol(yytext)); } else if (x == "MovieTexture" ) { printref(yytext, tol(yytext)); } else if (x == "NavigationInfo" ) { printref(yytext, tol(yytext)); } else if (x == "Normal" ) { printref(yytext, tol(yytext)); } else if (x == "NormalInterpolator" ) { printref(yytext, tol(yytext)); } else if (x == "OrientationInterpolator" ) { printref(yytext, tol("OrientationInterpo")); } else if (x == "PictureTexture" ) { printref(yytext, tol(yytext)); } else if (x == "PlanarSensor" ) { printref(yytext, tol(yytext)); } else if (x == "PointLight" ) { printref(yytext, tol(yytext)); } else if (x == "PointSet" ) { printref(yytext, tol(yytext)); } else if (x == "PositionInterpolator" ) { printref(yytext, tol("Positioninterp")); } else if (x == "ProximitySensor" ) { printref(yytext, tol(yytext)); } else if (x == "ScalarInterpolator" ) { printref(yytext, tol(yytext)); } else if (x == "Script" ) { printref(yytext, tol(yytext)); } else if (x == "Shape" ) { printref(yytext, tol(yytext)); } else if (x == "Sound" ) { printref(yytext, tol(yytext)); } else if (x == "Sphere" ) { printref(yytext, tol(yytext)); } else if (x == "SphereSensor" ) { printref(yytext, tol(yytext)); } else if (x == "SpotLight" ) { printref(yytext, tol(yytext)); } else if (x == "Switch" ) { printref(yytext, tol(yytext)); } else if (x == "Text" ) { printref(yytext, tol(yytext)); } else if (x == "TextureCoordinate" ) { printref(yytext, tol(yytext)); } else if (x == "TimeSensor" ) { printref(yytext, tol(yytext)); } else if (x == "TouchSensor" ) { printref(yytext, tol(yytext)); } else if (x == "Transform" ) { printref(yytext, tol(yytext)); } else if (x == "Viewpoint" ) { printref(yytext, tol(yytext)); } else if (x == "VisibilitySensor" ) { printref(yytext, tol(yytext)); } else if (x == "WorldInfo" ) { printref(yytext, tol(yytext)); } else if (x == "Camera" ) { printref(yytext, tol(yytext),"b-"); } else if (x == "DeviceSensor" ) { printref(yytext, tol(yytext),"b-"); } else if (x == "Event" ) { printref(yytext, tol(yytext),"b-"); } else if (x == "KeySensor" ) { printref(yytext, tol(yytext),"b-"); } else if (x == "Layer2D" ) { printref(yytext, tol(yytext),"b-"); } else if (x == "Layer3D" ) { printref(yytext, tol(yytext),"b-"); } else if (x == "MouseSensor" ) { printref(yytext, tol(yytext),"b-"); } else if (x == "MultiTexture" ) { printref(yytext, tol(yytext),"b-"); } else if (x == "Particles" ) { printref(yytext, tol(yytext),"b-"); } else if (x == "TextureCoordGen" ) { printref(yytext, tol(yytext),"b-"); } else cout << yytext; } \n { ECHO; } . { ECHO; } %% //@ main int main() { lex l; l(); return 0; } char *tol(char *s) { char buf[1024]; strcpy(buf,s); char *p = buf; char *q = buf; while (*q != '\0') { if (isupper(*q)) *q = tolower(*q); q++; } return(p); } char *tod(char *s) { char buf[1024]; strcpy(buf,s); char *p = buf; char *q = buf; while (*q != '\0') { if (*q == '.') *q = '/'; q++; } return(p); } int mycmp(char *s1, char *s2) { while (*s1 != '\0' && *s2 != '\0' && *s1 == tolower(*s2) ) { s1++; s2++; } if (*s1 == '\0') return(1); else return(0); }