class UmlAttribute
!!!128352.cpp!!!	sKind() : string
  return "attribute";
!!!128352.java!!!	sKind() : string
  return "attribute";
!!!204162.cpp!!!	memo_ref() : void
  if (visibility() == PublicVisibility) {
   
    QCString s = parent()->stereotype();
    
    if ((s != "enum") && (s != "enum_pattern"))
      attrs.addElement(this);
  }
  UmlItem::memo_ref();
!!!204162.java!!!	memo_ref() : void
  if (visibility() == aVisibility.PublicVisibility) {
   
    String s = parent().stereotype();
    
    if ((s != "enum") && (s != "enum_pattern"))
      attrs.addElement(this);
  }
  super.memo_ref();
!!!129907.cpp!!!	html(in pfix : string, in rank : uint, in level : uint) : void
  define();

  fw.write("<table><tr><td><div class=\"element\">Attribute <b>");
  writeq(name());
  fw.write("</b></div></td></tr></table>\n");

  QCString s = description();
  
  if (!s.isEmpty()) {
    fw.write("<p>");
    if (! javaDecl().isEmpty())
      gen_java_decl(s, TRUE);
    else if (! phpDecl().isEmpty())
      gen_php_decl(s, TRUE);
    else if (! pythonDecl().isEmpty())
      gen_python_decl(s);
    else
      gen_cpp_decl(s, TRUE);
    fw.write("<br /></p>");
  }

  fw.write("<p>Declaration :</p><ul>");
  
  fw.write("<li>Uml : ");
  gen_uml_decl();
  fw.write("</li>");
  
  s = cppDecl();

  if (!s.isEmpty()) {
    fw.write("<li>C++ : ");
    gen_cpp_decl(s, FALSE);
    fw.write("</li>");
  }

  s = javaDecl();

  if (!s.isEmpty()) {
    fw.write("<li>Java : ");
    gen_java_decl(s, FALSE);
    fw.write("</li>");
  }

  s = phpDecl();

  if (!s.isEmpty()) {
    fw.write("<li>Php : ");
    gen_php_decl(s, FALSE);
    fw.write("</li>");
  }

  s = pythonDecl();

  if (!s.isEmpty()) {
    fw.write("<li>Python : ");
    gen_python_decl(s);
    fw.write("</li>");
  }

  fw.write("</ul>");
  
  annotation_constraint();
  write_properties();
 
  unload(FALSE, FALSE);
!!!129907.java!!!	html(in pfix : string, in rank : uint, in level : uint) : void
  define();

  fw.write("<table><tr><td><div class=\"element\">Attribute <b>");
  writeq(name());
  fw.write("</b></div></td></tr></table>\n");

  String s = description();
  
  if (s.length() != 0) {
    fw.write("<p>");
    if (javaDecl().length() != 0)
      gen_java_decl(s, true);
    else if (phpDecl().length() != 0)
      gen_php_decl(s, true);
    else if (pythonDecl().length() != 0)
      gen_python_decl(s);
    else 
      gen_cpp_decl(s, true);
    fw.write("<br /></p>");
  }

  fw.write("<p>Declaration :</p><ul>");
  
  fw.write("<li>Uml : ");
  gen_uml_decl();
  fw.write("</li>");
  
  s = cppDecl();

  if (s.length() != 0) {
    fw.write("<li>C++ : ");
    gen_cpp_decl(s, false);
    fw.write("</li>");
  }

  s = javaDecl();

  if (s.length() != 0) {
    fw.write("<li>Java : ");
    gen_java_decl(s, false);
    fw.write("</li>");
  }

  s = phpDecl();

  if (s.length() != 0) {
    fw.write("<li>Php : ");
    gen_php_decl(s, false);
    fw.write("</li>");
  }

  s = pythonDecl();

  if (s.length() != 0) {
    fw.write("<li>Python : ");
    gen_python_decl(s);
    fw.write("</li>");
  }

  fw.write("</ul>");
  
  annotation_constraint();
  write_properties();

  unload(false, false);
!!!204418.cpp!!!	ref_index() : void
  if (!attrs.isEmpty())
    fw.write("<a href=\"public_properties.html\" target = \"projectFrame\"><b> -Public properties- </b></a>");
!!!204418.java!!!	ref_index() : void
  if (!attrs.isEmpty())
    fw.write("<a href=\"public_properties.html\" target = \"projectFrame\"><b> -Public Properties- </b></a>");
!!!204290.cpp!!!	generate_index() : void
  unsigned n = attrs.size();
  
  if (n != 0) {
    sort(attrs);
    
    start_file("public_properties", "Public Properties Index", TRUE);
    
    fw.write("<table>\n");
    fw.write("<tr bgcolor=\"#f0f0f0\"><td align=\"center\"><b>Property</b></td><td align=\"center\"><b>Class</b></td><td align=\"center\"><b>Description</b></td></tr>\n");
      
    for (unsigned i = 0; i != n; i += 1) {
      UmlItem * prop = attrs.elementAt(i);
      
      fw.write("<tr bgcolor=\"#f0f0f0\"><td>");
      prop->write();
      fw.write("</td><td>");
      prop->parent()->write();
      fw.write("</td><td>");
      writeq(prop->description());
      fw.write("</td></tr>\n");
    }
    fw.write("</table>\n");
    
    end_file();
  }
!!!204290.java!!!	generate_index() : void
  int n = attrs.size();
  
  if (n != 0) {
    sort(attrs);  

    start_file("public_properties", "Public Properties Index", true);
    
    fw.write("<table>\n");
    fw.write("<tr bgcolor=\"#f0f0f0\"><td align=\"center\"><b>Property</b></td><td align=\"center\"><b>Class</b></td><td align=\"center\"><b>Description</b></td></tr>\n");
      
    for (int i = 0; i != n; i += 1) {
      UmlItem prop = (UmlItem) attrs.elementAt(i);
      
      fw.write("<tr bgcolor=\"#f0f0f0\"><td>");
      prop.write();
      fw.write("</td><td>");
      prop.parent().write();
      fw.write("</td><td>");
      writeq(prop.description());
      fw.write("</td></tr>\n");
    }
    fw.write("</table>\n");
    
    end_file();
  }
!!!130035.cpp!!!	gen_cpp_decl(in s : string, in descr : bool) : void
  const char * p;
  
  if (! descr) {
    write((cppVisibility() == DefaultVisibility)
	  ? visibility() : cppVisibility(),
	  cppLanguage);
    fw.write(": ");
    p = bypass_comment(s);
  }
  else
    p = s;
  
  for (;;) {
    switch (*p) {
    case 0:
      return;
    case '$':
      if (!strncmp(p, "${comment}", 10))
	p += 10;
      else if (!strncmp(p, "${description}", 14))
	p += 14;
      else if (!strncmp(p, "${name}", 7)) {
	p += 7;
	writeq(name());
      }
      else if (!strncmp(p, "${multiplicity}", 15)) {
	p += 15;
	
	QCString m = multiplicity();
	
	if (m.isEmpty() || (((const char *) m)[0] != '[')) {
	  fw.write("[");
	  writeq(m);
	  fw.write("]");
	}
	else
	  writeq(m);
      }
      else if (!strncmp(p, "${stereotype}", 13)) {
	p += 13;
	writeq(CppSettings::relationAttributeStereotype(stereotype()));
      }
      else if (!strncmp(p, "${value}", 8) || !strncmp(p, "${h_value}", 10))
	return;
      else if (!strncmp(p, "${static}", 9)) {
	p += 9;
	if (isClassMember())
	  fw.write("static ");
      }
      else if (!strncmp(p, "${const}", 8)) {
	p += 8;
	if (isReadOnly())
	  fw.write("const ");
      }
      else if (!strncmp(p, "${mutable}", 10)) {
	p += 10;
	if (isCppMutable())
	  fw.write("mutable ");
      }
      else if (!strncmp(p, "${volatile}", 11)) {
	p += 11;
	if (isVolatile())
	  fw.write("volatile ");
      }
      else if (!strncmp(p, "${type}", 7)) {
	p += 7;
	write(type(), cppLanguage);
      }
      else
	fw.write(*p++);
      break;
    case '\r':
      p += 1;
      break;
    case '\n':
      if (descr) {
	fw.write("<br />");
	p += 1;
      }
      else {
	fw.write(' ');
	
	do
	  p += 1;
	while ((*p != 0) && (*p <= ' '));
      }
      break;
    case ';':
      if (descr)
	fw.write(*p++);
      else
	return;
      break;
    case '@':
      manage_alias(p);
      break;
    default:
      writeq(*p++);
    }
  }
!!!130035.java!!!	gen_cpp_decl(in s : string, in descr : bool) : void
  int n = s.length();
  int index;

  if (! descr) {
    write((cppVisibility() == aVisibility.DefaultVisibility)
	  ? visibility() : cppVisibility(),
	  aLanguage.cppLanguage);
    fw.write(": ");
    index = bypass_comment(s);
  }
  else
    index = 0;
  
  while (index != n) {
    if (s.startsWith("${comment}", index))
      index += 10;
    else if (s.startsWith("${description}", index))
      index += 14;
    else if (s.startsWith("${name}", index)) {
      index += 7;
      writeq(name());
    }
    else if (s.startsWith("${multiplicity}", index)) {
      index += 15;
      
      String m = multiplicity();
      
      if ((m.length() == 0) || (m.charAt(0) != '[')) {
  	fw.write("[");
  	writeq(m);
  	fw.write("]");
      }
      else
  	writeq(m);
    }
    else if (s.startsWith("${stereotype}", index)) {
      index += 13;
      writeq(CppSettings.relationAttributeStereotype(stereotype()));
    }
    else if (s.startsWith("${value}", index) ||
	     s.startsWith("${h_value}", index))
      break;
    else if (s.startsWith("${static}", index)) {
      index += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (s.startsWith("${const}", index)) {
      index += 8;
      if (isReadOnly())
	fw.write("const ");
    }
    else if (s.startsWith("${mutable}", index)) {
      index += 10;
      if (isCppMutable())
	fw.write("mutable ");
    }
    else if (s.startsWith("${volatile}", index)) {
      index += 11;
      if (isVolatile())
	fw.write("volatile ");
    }
    else if (s.startsWith("${type}", index)) {
      index += 7;
      write(type(), aLanguage.cppLanguage);
    }
    else if (s.charAt(index) == '\r')
      index += 1;
    else if (s.charAt(index) == '\n') {
      if (descr) {
	fw.write("<br />");
	index += 1;
      }
      else {
	fw.write(' ');
	
	do
	  index += 1;
	while ((index != n) && Character.isWhitespace(s.charAt(index)));
      }
    }
    else if (s.charAt(index) == ';') {
      if (descr)
	fw.write(s.charAt(index++));
      else
	break;
    }
    else if (s.charAt(index) == '@')
      index = manage_alias(s, index);
    else
      writeq(s.charAt(index++));
  }
!!!130163.cpp!!!	gen_java_decl(in s : string, in descr : bool) : void
  const char * p = bypass_comment(s);

  while (*p) {
    if (!strncmp(p, "${comment}", 10))
      p += 10;
    else if (!strncmp(p, "${description}", 14))
      p += 14;
    else if (!strncmp(p, "${name}", 7)) {
      p += 7;
      writeq(name());
    }
    else if (!strncmp(p, "${multiplicity}", 15)) {
      p += 15;
      
      QCString m = multiplicity();

      if (! m.isEmpty()) {
	const char * s = m;
	
	if (*s != '[')
	  fw.write("[]");
	else {
	  while (*s) {
	    switch (*s++) {
	    case '[':
	      fw.write('[');
	      break;
	    case ']':
	      fw.write(']');
	    default:
	      break;
	    }
	  }
	}
      }
    }
    else if (!strncmp(p, "${stereotype}", 13)) {
      p += 13;
      writeq(JavaSettings::relationAttributeStereotype(stereotype()));
    }
    else if (!strncmp(p, "${value}", 8)) {
      p += 8;
    }
    else if (!strncmp(p, "${class}", 8)) {
      p += 8;
      writeq(parent()->name());
    }
    else if (!strncmp(p, "${visibility}", 13)) {
      p += 13;
      write(visibility(), javaLanguage);
      fw.write(' ');
    }
    else if (!strncmp(p, "${static}", 9)) {
      p += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (!strncmp(p, "${transient}", 12)) {
      p += 12;
      if (isJavaTransient())
	fw.write("transient ");
    }
    else if (!strncmp(p, "${volatile}", 11)) {
      p += 11;
      if (isVolatile())
	fw.write("volatile ");
    }
    else if (!strncmp(p, "${final}", 8)) {
      p += 8;
      if (isReadOnly())
	fw.write("final ");
    }
    else if (!strncmp(p, "${type}", 7)) {
      p += 7;
      write(type(), javaLanguage);
    }
    else if (!strncmp(p, "${@}", 4))
      p += 4;
    else if (*p == '\r')
      p += 1;
    else if (*p == '\n') {
      if (descr) {
	fw.write("<br />");
	p += 1;
      }
      else {
	fw.write(' ');
	
	do
	  p += 1;
	while ((*p != 0) && (*p <= ' '));
      }
    }
    else if ((*p == '{') || (*p == ';')) {
      if (descr)
	fw.write(*p++);
      else
	break;
    }
    else if (*p == '@')
      manage_alias(p);
    else
      writeq(*p++);
  }
!!!130163.java!!!	gen_java_decl(in s : string, in descr : bool) : void
  int n = s.length();
  int index = bypass_comment(s);

  while (index != n) {
    if (s.startsWith("${comment}", index))
      index += 10;
    else if (s.startsWith("${description}", index))
      index += 14;
    else if (s.startsWith("${name}", index)) {
      index += 7;
      writeq(name());
    }
    else if (s.startsWith("${multiplicity}", index)) {
      index += 15;
      
      String m = multiplicity();
      int mn = m.length();
      
      if (mn != 0) {
  	if (m.charAt(0) != '[')
  	  fw.write("[]");
  	else {
  	  for (int index2 = 0; index2 != mn; index2 += 1) {
  	    switch (m.charAt(index2++)) {
  	    case '[':
  	      fw.write('[');
  	      break;
  	    case ']':
  	      fw.write(']');
  	    default:
  	      break;
  	    }
  	  }
  	}
      }
    }
    else if (s.startsWith("${stereotype}", index)) {
      index += 13;
      writeq(JavaSettings.relationAttributeStereotype(stereotype()));
    }
    else if (s.startsWith("${value}", index)) {
      index += 8;
    }
    else if (s.startsWith("${class}", index)) {
      index += 8;
      writeq(parent().name());
    }
    else if (s.startsWith("${visibility}", index)) {
      index += 13;
      write(visibility(), aLanguage.javaLanguage);
      fw.write(' ');
    }
    else if (s.startsWith("${static}", index)) {
      index += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (s.startsWith("${transient}", index)) {
      index += 12;
      if (isJavaTransient())
	fw.write("transient ");
    }
    else if (s.startsWith("${volatile}", index)) {
      index += 11;
      if (isVolatile())
	fw.write("volatile ");
    }
    else if (s.startsWith("${final}", index)) {
      index += 8;
      if (isReadOnly())
	fw.write("final ");
    }
    else if (s.startsWith("${type}", index)) {
      index += 7;
      write(type(), aLanguage.javaLanguage);
    }
    else if (s.startsWith("${@}", index)) {
      index += 4;
    }
    else if (s.charAt(index) == '\r')
      index += 1;
    else if (s.charAt(index) == '\r') {
      if (descr) {
	fw.write("<br />");
	index += 1;
      }
      else {
	fw.write(' ');
	
	do
	  index += 1;
	while ((index != n) && Character.isWhitespace(s.charAt(index)));
      }
    }
    else if ((s.charAt(index) == '{') || (s.charAt(index) == ';')) {
      if (descr)
	fw.write(s.charAt(index++));
      else
	break;
    }
    else if (s.charAt(index) == '@')
      index = manage_alias(s, index);
    else
      writeq(s.charAt(index++));
  }
!!!211330.cpp!!!	gen_php_decl(in s : string, in descr : bool) : void
  QCString st = PhpSettings::classStereotype(stereotype());
  const char * p = bypass_comment(s);

  while (*p) {
    if (!strncmp(p, "${comment}", 10))
      p += 10;
    else if (!strncmp(p, "${description}", 14))
      p += 14;
    else if (!strncmp(p, "${name}", 7)) {
      p += 7;
      if ((st != "enum") && !isReadOnly())
	fw.write('$');
      writeq(name());
    }
    else if (!strncmp(p, "${var}", 6)) {
      p += 6;
      if ((st != "enum") &&
	  !isReadOnly() &&
	  !isClassMember() &&
	  (visibility() == PackageVisibility))
	fw.write("var ");
    }
    else if (!strncmp(p, "${value}", 8)) {
      p += 8;
    }
    else if (!strncmp(p, "${visibility}", 13)) {
      p += 13;
      write(visibility(), phpLanguage);
      fw.write(' ');
    }
    else if (!strncmp(p, "${static}", 9)) {
      p += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (!strncmp(p, "${type}", 7)) {
      p += 7;
      write(type(), phpLanguage);
    }
    else if (!strncmp(p, "${const}", 8)) {
      p += 8;
      if (isReadOnly())
	fw.write("const ");
    }
    else if (*p == '\r')
      p += 1;
    else if (*p == '\n') {
      if (descr) {
	fw.write("<br />");
	p += 1;
      }
      else {
	fw.write(' ');
	
	do
	  p += 1;
	while ((*p != 0) && (*p <= ' '));
      }
    }
    else if ((*p == '{') || (*p == ';')){
      if (descr)
	fw.write(*p++);
      else
	break;
    }
    else if (*p == '@')
      manage_alias(p);
    else
      writeq(*p++);
  }
!!!211330.java!!!	gen_php_decl(in s : string, in descr : bool) : void
  String st = PhpSettings.classStereotype(stereotype());
  int n = s.length();
  int index = bypass_comment(s);

  while (index != n) {
    if (s.startsWith("${comment}", index))
      index += 10;
    else if (s.startsWith("${description}", index))
      index += 14;
    else if (s.startsWith("${name}", index)) {
      index += 7;
      if ((st != "enum") && !isReadOnly())
	fw.write('$');
      writeq(name());
    }
    else if (s.startsWith("${var}", index)) {
      index += 6;
      if ((st != "enum") &&
	  !isReadOnly() &&
	  !isClassMember() &&
	  (visibility() == aVisibility.PackageVisibility))
	fw.write("var ");
    }
    else if (s.startsWith("${value}", index)) {
      index += 8;
    }
    else if (s.startsWith("${visibility}", index)) {
      index += 13;
      write(visibility(), aLanguage.phpLanguage);
      fw.write(' ');
    }
    else if (s.startsWith("${static}", index)) {
      index += 9;
      if (isClassMember())
	fw.write("static ");
    }
    else if (s.startsWith("${type}", index)) {
      index += 7;
      write(type(), aLanguage.phpLanguage);
    }
    else if (s.startsWith("${const}")) {
      index += 8;
      if (isReadOnly())
	fw.write("const ");
    }
    else if (s.charAt(index) == '\r')
      index += 1;
    else if (s.charAt(index) == '\n') {
      if (descr) {
	fw.write("<br />");
	index += 1;
      }
      else {
	fw.write(' ');
	
	do
	  index += 1;
	while ((index != n) && Character.isWhitespace(s.charAt(index)));
      }
    }
    else if ((s.charAt(index) == '{') || (s.charAt(index) == ';')) {
      if (descr)
	fw.write(s.charAt(index++));
      else
	break;
    }
    else if (s.charAt(index) == '@')
      index = manage_alias(s, index);
    else
      writeq(s.charAt(index++));
  }
!!!129283.cpp!!!	gen_python_decl(in s : string) : void
  QCString st = PythonSettings::classStereotype(stereotype());
  const char * p = bypass_comment(s);

  while (*p) {
    if (!strncmp(p, "${comment}", 10))
      p += 10;
    else if (!strncmp(p, "${description}", 14))
      p += 14;
    else if (!strncmp(p, "${name}", 7)) {
      p += 7;
      writeq(name());
    }
    else if (!strncmp(p, "${value}", 8)) {
      p += 8;
      writeq((defaultValue().isEmpty()) ? "None" : defaultValue());
    }
    else if (!strncmp(p, "${self}", 7)) {
      p += 7;
      if (!isClassMember())
	fw.write("self.");
    }
    else if (!strncmp(p, "${type}", 7)) {
      p += 7;
      write(type(), pythonLanguage);
    }
    else if (!strncmp(p, "${stereotype}", 13)) {
      p += 13;
      writeq(st);
    }
    else if (*p == '\r')
      p += 1;
    else if (*p == '@')
      manage_alias(p);
    else
      writeq(*p++);
  }
!!!129283.java!!!	gen_python_decl(in s : string) : void
  String st = PythonSettings.classStereotype(stereotype());
  int n = s.length();
  int index = bypass_comment(s);

  while (index != n) {
    if (s.startsWith("${comment}", index))
      index += 10;
    else if (s.startsWith("${description}", index))
      index += 14;
    else if (s.startsWith("${name}", index)) {
      index += 7;
      writeq(name());
    }
    else if (s.startsWith("${value}", index)) {
      index += 8;
      writeq((defaultValue() == "") ? "None" : defaultValue());
    }
    else if (s.startsWith("${self}", index)) {
      index += 7;
      if (!isClassMember())
	fw.write("self.");
    }
    else if (s.startsWith("${type}", index)) {
      index += 7;
      write(type(), aLanguage.pythonLanguage);
    }
    else if (s.startsWith("${stereotype}")) {
      index += 13;
      writeq(st);
    }
    else if (s.charAt(index) == '\r')
      index += 1;
    else if (s.charAt(index) == '@')
      index = manage_alias(s, index);
    else
      writeq(s.charAt(index++));
  }
!!!203906.cpp!!!	gen_uml_decl() : void
  if (isClassMember())
    fw.write("static, ");
  write(visibility());
  writeq(name());
  fw.write(" : ");
  write(type());
  
  QCString s;
  
  s = defaultValue();
  if (!s.isEmpty()) {
    if (s[0] != '=')
      fw.write(" = ");
    writeq(s);
  }

  s = multiplicity();
  if (!s.isEmpty()) {
    fw.write(", multiplicity : ");
    writeq(s);
  }

  if (isDerived())
    fw.write((isDerivedUnion()) ? ", derived union" : ", derived");
    
  if (isReadOnly())
    fw.write(", read only");
    
  if (isOrdered())
    fw.write(", ordered");
    
  if (isUnique())
    fw.write(", unique");
!!!203906.java!!!	gen_uml_decl() : void
  if (isClassMember())
    fw.write("static, ");
  write(visibility());
  writeq(name());
  fw.write(" : ");
  write(type());
  
  String s;
  
  s = defaultValue();
  if (s.length() != 0) {
    if (s.charAt(0) != '=')
      fw.write(" = ");
    writeq(s);
  }
  
  s = multiplicity();
  if (s.length() != 0) {
    fw.write(", multiplicity : ");
    writeq(s);
  }

  if (isDerived())
    fw.write((isDerivedUnion()) ? ", derived union" : ", derived");
    
  if (isReadOnly())
    fw.write(", read only");
    
  if (isOrdered())
    fw.write(", ordered");
    
  if (isUnique())
    fw.write(", unique");

