~snowball-yiddish-dev/snowball-yiddish/trunk

« back to all changes in this revision

Viewing changes to snowball/libstemmer/mkmodules.c

  • Committer: richard
  • Date: 2003-03-30 12:08:09 UTC
  • Revision ID: svn-v4:633ccae0-01f4-0310-8c99-d3591da6f01f:trunk:216
This module will contain only the code and build system, and documentation
for building and running the stemming library.
All sample data will be in a separate module, and the website will be in
its own module too.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include <stdlib.h>
 
3
#include <stdio.h>
 
4
#include <errno.h>
 
5
 
 
6
#ifndef NULL
 
7
#define NULL (void *)0
 
8
#endif
 
9
 
 
10
int main(int argc, char ** argv)
 
11
        /*@globals fileSystem @*/
 
12
{
 
13
    int i;
 
14
    int x;
 
15
    char * outname;
 
16
    FILE * out = stdout;
 
17
    char * progname = argv[0];
 
18
 
 
19
    if (argc <= 2) {
 
20
        fprintf(stderr,
 
21
                "Usage: %s <output filename> <language> <language> ...\n",
 
22
                progname);
 
23
        exit(EXIT_FAILURE);
 
24
    }
 
25
    outname = argv[1];
 
26
 
 
27
    out = fopen(outname, "w");
 
28
    if (out == NULL) {
 
29
        fprintf(stderr,
 
30
                "Can't open output file \"%s\": %s\n",
 
31
                outname, strerror(errno));
 
32
        exit(EXIT_FAILURE);
 
33
    }
 
34
 
 
35
    fprintf(out, 
 
36
            "/* %s: List of stemming modules.\n"
 
37
            " *\n"
 
38
            " * This file is generated by mkmodules.c from a list of module names.\n"
 
39
            " * Do not edit manually.\n"
 
40
            " *\n"
 
41
            " * Modules included by this file are: "
 
42
            , outname);
 
43
    x = strlen(" * Modules included by this file are: ");
 
44
    for (i = 2; i < argc; i++) {
 
45
        char * lang = argv[i];
 
46
        if (i != 2) {
 
47
            if (x + 2 + strlen(lang) > 77) {
 
48
                fprintf(out, ",\n * ");
 
49
                x = 3;
 
50
            } else {
 
51
                fprintf(out, ", ");
 
52
                x += 2;
 
53
            }
 
54
        }
 
55
        fprintf(out, "%s", lang);
 
56
        x += strlen(lang);
 
57
    }
 
58
    fprintf(out, 
 
59
            "\n */\n\n"
 
60
           );
 
61
    for (i = 2; i < argc; i++) {
 
62
        char * lang = argv[i];
 
63
        fprintf(out, "#include \"../%s/stem.h\"\n", lang);
 
64
    }
 
65
    fprintf(out, 
 
66
            "\n"
 
67
            "struct stemmer_modules {\n"
 
68
            "  const char * name;\n"
 
69
            "  struct SN_env * (*create)(void);\n"
 
70
            "  void (*close)(struct SN_env *);\n"
 
71
            "  int (*stem)(struct SN_env *);\n"
 
72
            "} modules[] = {\n"
 
73
           );
 
74
    for (i = 2; i < argc; i++) {
 
75
        char * lang = argv[i];
 
76
        fprintf(out, "  {\"%s\", %s_create_env, %s_close_env, %s_stem},\n",
 
77
                lang, lang, lang, lang);
 
78
    }
 
79
    fprintf(out,
 
80
            "  {0,0,0,0}\n"
 
81
            "};\n"
 
82
           );
 
83
 
 
84
    if (fclose(out) != 0) {
 
85
        fprintf(stderr,
 
86
                "Can't close output file \"%s\": %s\n",
 
87
                outname, strerror(errno));
 
88
        exit(EXIT_FAILURE);
 
89
    }
 
90
 
 
91
 
 
92
    return 0;
 
93
}