close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Ticket #1220: descriptions.tol

File descriptions.tol, 7.6 KB (added by Pedro Gea, 14 years ago)
Line 
1
2//////////////////////////////////////////////////////////////////////////////
3// Tipos de objetos con descripción:
4
5NameBlock modulo = [[
6  Real variable1 = 1;
7  Real _.variable2 = 1;
8  Real _variable3 = 1;
9  Real funcion1(Real void) { ? };
10  Real _.funcion2(Real void) { ? };
11  Real _funcion3(Real void) { ? };
12  Class @clase {
13      Text _.autodoc.member.atributo1 = "";
14    Real atributo1;
15    Real _.atributo2;
16    Real _atributo3;
17      Text _.autodoc.member.metodo1 = "";
18    Real metodo1(Real void) { ? };
19    Real _.metodo2(Real void) { ? };
20    Real _metodo3(Real void) { ? };
21      Text _.autodoc.member.atributoClase1 = "";
22    Static Real atributoClase1 = 0;
23    Static Real _.atributoClase2 = 0;
24    Static Real _atributoClase3 = 0;
25    Static Real metodoClase1(Real void) { ? };
26    Static Real _.metodoClase2(Real void) { ? };
27      Text _.autodoc.member._metodoClase3 = "";
28    Static Real _metodoClase3(Real void) { ? }
29  };
30  Struct @estructura {
31    Real elemento
32  };
33  @clase instancia = [[
34    Real atributo1 = 2;
35    Real _.atributo2 = 3;
36    Real _atributo3 = 1
37  ]];
38  Set conjunto = @estructura(1)
39]];
40
41//////////////////////////////////////////////////////////////////////////////
42
43Anything PutDescription("Variable 1", modulo::variable1);
44Anything PutDescription("Variable 2", modulo::_.variable2);
45//! Anything PutDescription("Variable 3", modulo::_variable3);
46Anything PutDescription("Función 1", modulo::funcion1);
47Anything PutDescription("Función 2", modulo::_.funcion2);
48//! Anything PutDescription("Función 3", modulo::_funcion3);
49
50Anything PutDescription("La clase", "modulo::@clase");
51Anything PutDescription("Atributo 1", "modulo::@clase", "atributo1");
52Anything PutDescription("Atributo 2", "modulo::@clase", "_.atributo2");
53Anything PutDescription("Atributo 3", "modulo::@clase", "_atributo3");
54Anything PutDescription("Método 1", "modulo::@clase", "metodo1");
55Anything PutDescription("Método 2", "modulo::@clase", "_.metodo2");
56Anything PutDescription("Método 3", "modulo::@clase", "_metodo3");
57Anything PutDescription("Atributo de clase 1", "modulo::@clase", "atributoClase1");
58Anything PutDescription("Atributo de clase 2", "modulo::@clase", "_.atributoClase2");
59Anything PutDescription("Atributo de clase 3", "modulo::@clase", "_atributoClase3");
60Anything PutDescription("Método de clase 1", "modulo::@clase", "metodoClase1");
61Anything PutDescription("Método de clase 2", "modulo::@clase", "_.metodoClase2");
62Anything PutDescription("Método de clase 3", "modulo::@clase", "_metodoClase3");
63
64Anything PutDescription("La estructura", "modulo::@estructura");
65//! Anything PutDescription("Elemento", "modulo::@estructura", "elemento");
66
67Anything PutDescription("La instancia", modulo::instancia);
68Anything PutDescription("El conjunto", modulo::conjunto);
69
70//////////////////////////////////////////////////////////////////////////////
71
72Set Members(modulo);
73Set ClassMembers("modulo::@clase"); //! Sólo encuentra descripciones autodoc
74Set Members(modulo::instancia); //! No encuentra descripciones
75
76Text Description(modulo::variable1);
77Text Description(modulo::_.variable2);
78//! Text Description(modulo::_variable3);
79Text Description(modulo::funcion1);
80Text Description(modulo::_.funcion2);
81//! Text Description(modulo::_funcion3);
82
83Text Description("modulo::@clase"); //! => Atributo 3
84Set [[ //! NADA
85  Text Description("modulo::@clase::atributo1");
86  Text Description("modulo::@clase::_.atributo2");
87  Text Description("modulo::@clase::_atributo3");
88  Text Description("modulo::@clase::metodo1");
89  Text Description("modulo::@clase::_.metodo2");
90  Text Description("modulo::@clase::_metodo3");
91  Text Description("modulo::@clase::atributoClase1");
92  Text Description("modulo::@clase::_.atributoClase2");
93  Text Description("modulo::@clase::_atributoClase3");
94  Text Description("modulo::@clase::metodoClase1");
95  Text Description("modulo::@clase::_.metodoClase2");
96  Text Description("modulo::@clase::_metodoClase3")
97]];
98
99Text Description("modulo::@estructura");
100//! Text Description("modulo::@estructura", "elemento");
101
102Text Description(modulo::instancia);
103Text Description(modulo::conjunto);
104
105//////////////////////////////////////////////////////////////////////////////
106// Problemas y dificultades
107//
108// * La función PutDescription NO tiene un funcionamiento homogéneo.
109//   Tiene dos funcionamientos:
110//    * Sobre objetos (como PutName) pasados como argumento
111//    * Sobre objetos pasando su nombre completo como argumento mediante un
112//      texto entrecomillado. No vale usar una variable texto, pues como
113//      parece lógico, en ese caso sería ella la receptora de la descripción.
114//   El primero funciona para objetos 'comunes' de TOL
115//   El segundo está destinado para clases y estructuras. Está extendido
116//   para miembros de una clase pasando su nombre como tercer argumento.
117//   Esto presenta algunas limitaciones:
118//    * No se puede usar el funcionamiento via nombres para objetos 'comunes'.
119//    * No se puede usar cómodamente en un ciclo ya que no se pueden pasar
120//      los nombres como argumento texto y hay que apañar un Eval.
121//    * No se puede modificar la descripción de un miembro privado de un
122//      nameblock (aunque sí de una clase).
123//    * La función no devuelve nada.
124//    * La función no advierte que poner una descripción al atributo
125//      de una clase que no tiene _.autodoc.member no sirve de nada.
126//      Bueno, sí, para cambiar la descripción de la clase por error.
127//
128// * La función Description aún anda peor, pues presenta el doble
129//   funcionamiento, pero sin la extensión para miembros de clases.
130//   De modo que debe buscarse otro mecanismo para acceder a esa información.
131// 
132// * La función Members permite acceder a la información de elementos de un
133//   nameblock, incluido sus descripciones.
134//   Accede sin dificultad a las descripciones de los miemebros de un
135//   nameblock 'común' pero no a las de una instancia.
136//   Concretamente, al utilizar la función sobre una instancia se obtiene
137//   información de sus atributos y sin descripciones.
138//
139// * La función ClassMembers permite accecer a la información de miembros
140//   de una clase incluyendo sus descripciones, pero sólo muestra
141//   descripciones de los miembros con _.autodoc.member (sea atributos o
142//   métodos).
143
144// Sugerencias:
145//   
146//  * En PutDescription aceptaría el funcionamiento vía texto, también para
147//    objetos cualesquiera, de modo que funcionara:
148//      Anything PutDescription("Variable 1", "modulo::variable1");
149//      Anything PutDescription("Variable 3", "modulo::_variable3");
150//    consiguiendo así poner descripciones también a elementos privados.
151//
152//  * En Description añadiría la extensión del tercer argumento para
153//    miembros de una clase, equiparándola a PutDescription.
154//
155//  * Buscaría alguna manera de forzar la declaración interna de los
156//    _.autodoc.member de los atributos en una clase, y así evitar que el
157//    PutDescription no tenga efecto.
158//    Si no, en cualquier caso, solucionaría el bug que asigna la descripción
159//    a la clase y quizá incorporaría una advertencia.
160//
161//  * Intentaría que Members respondiera sobre una instancia devolviendo
162//    también la información que como instancia hereda de la clase: las
163//    descripciones de los atributos e información completa de métodos.
164//
165//  * Solucionaría la limitación de ClassMembers a la hora de localizar las
166//    descripciones de los miembros que no tienen _.autodoc.member sean
167//    atributos o métodos
168//
169//////////////////////////////////////////////////////////////////////////////
170