krysalis-version/src/java/org/krysalis/version/ant/stamp VersionSourceGenerator.java,1.1,1.2 Skeleton.java,1.1,1.2

Nick Chalko <[email protected]>
Newsgroups gmane.comp.krysalis.cvs
Message-ID <[email protected]>
Update of /cvsroot/krysalis/krysalis-version/src/java/org/krysalis/version/ant/stamp
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3849/src/java/org/krysalis/version/ant/stamp

Modified Files:
	VersionSourceGenerator.java Skeleton.java 
Log Message:
More basic work.

Index: VersionSourceGenerator.java
===================================================================
RCS file: /cvsroot/krysalis/krysalis-version/src/java/org/krysalis/version/ant/stamp/VersionSourceGenerator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** VersionSourceGenerator.java	4 Nov 2004 08:32:31 -0000	1.1
--- VersionSourceGenerator.java	4 Nov 2004 08:38:30 -0000	1.2
***************
*** 25,86 ****
                       
    protected final String NL = System.getProperties().getProperty("line.separator");
!   protected final String TEXT_1 = "/* " + NL + " *" + NL + " * NOTE: Automatically Generated File (see Depot Version from the Apache Incubator)" + NL + " * NOTE: http://incubator.apache.org/depot/version" + NL + " * NOTE: Ant Task: version-stamp" + NL + " * NOTE: AntLib:   apache-version" + NL + " *" + NL + " * $Header: ";
!   protected final String TEXT_2 = ".java $" + NL + " *" + NL + " */" + NL + "package ";
!   protected final String TEXT_3 = "; " + NL + "" + NL + "import java.util.Collections;" + NL + "import java.util.Date;" + NL + "import java.util.HashMap;" + NL + "import java.util.Map;" + NL + "/**" + NL + " * A autogenerated VersionStamp class for ";
!   protected final String TEXT_4 = " ." + NL + " * Generated at ";
!   protected final String TEXT_5 = " " + NL + " * on ";
!   protected final String TEXT_6 = NL + " * by ";
!   protected final String TEXT_7 = NL + " * @author <a href=\"http://incubator.apache.org/depot\">Depot Version</a> " + NL + " *         from the <a href=\"http://incubator.apache.org/\">Apache Incubator</a>, " + NL + "           version ";
!   protected final String TEXT_8 = NL + " * @version ";
!   protected final String TEXT_9 = NL + " * @generated" + NL + " */" + NL + "public final class ";
!   protected final String TEXT_10 = " { " + NL + "\t/* SINGLETON PATTERN */" + NL + "\tprivate final static  ";
!   protected final String TEXT_11 = " INSTANCE = new  ";
!   protected final String TEXT_12 = "();" + NL + "" + NL + "\t/**" + NL + "\t * Get the single instance of ";
!   protected final String TEXT_13 = "." + NL + "\t * @return the single instance of ";
!   protected final String TEXT_14 = "." + NL + "\t */" + NL + "    public static ";
!   protected final String TEXT_15 = " getInstance() {return INSTANCE ;}" + NL + "" + NL + "    " + NL + "    private final Map  attributes;" + NL + "\t" + NL + "\t/**" + NL + "\t * Private constructor for Singleton." + NL + "\t */" + NL + "\tprivate  ";
!   protected final String TEXT_16 = "()  {" + NL + "\tMap temp = new HashMap();" + NL + "\t";
!   protected final String TEXT_17 = NL + "    temp.put(";
!   protected final String TEXT_18 = ",";
!   protected final String TEXT_19 = NL + "             ";
!   protected final String TEXT_20 = ");// ";
!   protected final String TEXT_21 = NL + "\tattributes = Collections.unmodifiableMap(temp);" + NL + "\t" + NL + "\t}" + NL + "\t" + NL + "\t" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_22 = " is the Id of this project." + NL + "\t * @return the String \"";
!   protected final String TEXT_23 = "\"" + NL + "\t */" + NL + "\tpublic String getId() {return \"";
!   protected final String TEXT_24 = "\"; }" + NL + "\t" + NL + "\t\t" + NL + "\t/**" + NL + "\t * The user that built ";
!   protected final String TEXT_25 = " was ";
!   protected final String TEXT_26 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_27 = "\"" + NL + "\t */" + NL + "\tpublic String getUser() {return \"";
!   protected final String TEXT_28 = "\"; }" + NL + "\t" + NL + "\t\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_29 = " was built on ";
!   protected final String TEXT_30 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_31 = "\"" + NL + "\t */" + NL + "\tpublic String getHost() {return \"";
!   protected final String TEXT_32 = "\"; }" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_33 = " was built at ";
!   protected final String TEXT_34 = "." + NL + "\t * @return the Date \"";
!   protected final String TEXT_35 = "\"" + NL + "\t */" + NL + "\tpublic Date getDate() {return ";
!   protected final String TEXT_36 = "; }" + NL + "\t" + NL + "\t/**" + NL + "\t * The ID of the Version Specification." + NL + "\t * @return the String \"";
!   protected final String TEXT_37 = "\"." + NL + "\t * @see org.apache.depot.version.specification.VersionSpecificationFactory" + NL + "\t */" + NL + "\tpublic String getSpecificationId(){return \"";
!   protected final String TEXT_38 = "\";} " + NL + "\t" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_39 = " ";
!   protected final String TEXT_40 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_41 = "\"" + NL + "\t */" + NL + "\tpublic String getShortVersion() {return \"";
!   protected final String TEXT_42 = "\";}" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_43 = " ";
!   protected final String TEXT_44 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_45 = "\"" + NL + "\t */" + NL + "\tpublic String getLongVersion() {return \"";
!   protected final String TEXT_46 = "\";}" + NL + "" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_47 = " ";
!   protected final String TEXT_48 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_49 = "\"" + NL + "\t */" + NL + "\tpublic String getDefaultVersion() {return \"";
!   protected final String TEXT_50 = "\";}\t" + NL + "" + NL + "\t/**" + NL + "\t * Get the Unmodifiable map of attributes. \t" + NL + "\t * <dl>";
!   protected final String TEXT_51 = NL + "     *     <dt>";
!   protected final String TEXT_52 = "</dt>" + NL + "     *         <dd>";
!   protected final String TEXT_53 = "</dd>";
!   protected final String TEXT_54 = NL + "     * </dl>" + NL + "\t * @return unmodifiable Map of attributes." + NL + "\t */" + NL + "\tpublic Map getAttributes () {return attributes;}" + NL + "" + NL + "" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_55 = " ";
!   protected final String TEXT_56 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_57 = "\"" + NL + "\t */" + NL + "\tpublic String toString() {return \"";
!   protected final String TEXT_58 = "\";}" + NL + "}    ";
  
      public String generate(String packageName,  String className, VersionMarker marker)
--- 25,85 ----
                       
    protected final String NL = System.getProperties().getProperty("line.separator");
!   protected final String TEXT_1 = "/* " + NL + " *" + NL + " * NOTE: Automatically Generated File (see Depot Version from the Apache Incubator)" + NL + " * NOTE: http://incubator.apache.org/depot/version" + NL + " * NOTE: Ant Task: version-stamp" + NL + " * NOTE: AntLib:   apache-version" + NL + " *" + NL + " * $Header$" + NL + " *" + NL + " */" + NL + "package ";
!   protected final String TEXT_2 = "; " + NL + "" + NL + "import java.util.Collections;" + NL + "import java.util.Date;" + NL + "import java.util.HashMap;" + NL + "import java.util.Map;" + NL + "/**" + NL + " * A autogenerated VersionStamp class for ";
!   protected final String TEXT_3 = " ." + NL + " * Generated at ";
!   protected final String TEXT_4 = " " + NL + " * on ";
!   protected final String TEXT_5 = NL + " * by ";
!   protected final String TEXT_6 = NL + " * @author <a href=\"http://incubator.apache.org/depot\">Depot Version</a> " + NL + " *         from the <a href=\"http://incubator.apache.org/\">Apache Incubator</a>, " + NL + "           version ";
!   protected final String TEXT_7 = NL + " * @version ";
!   protected final String TEXT_8 = NL + " * @generated" + NL + " */" + NL + "public final class ";
!   protected final String TEXT_9 = " { " + NL + "\t/* SINGLETON PATTERN */" + NL + "\tprivate final static  ";
!   protected final String TEXT_10 = " INSTANCE = new  ";
!   protected final String TEXT_11 = "();" + NL + "" + NL + "\t/**" + NL + "\t * Get the single instance of ";
!   protected final String TEXT_12 = "." + NL + "\t * @return the single instance of ";
!   protected final String TEXT_13 = "." + NL + "\t */" + NL + "    public static ";
!   protected final String TEXT_14 = " getInstance() {return INSTANCE ;}" + NL + "" + NL + "    " + NL + "    private final Map  attributes;" + NL + "\t" + NL + "\t/**" + NL + "\t * Private constructor for Singleton." + NL + "\t */" + NL + "\tprivate  ";
!   protected final String TEXT_15 = "()  {" + NL + "\tMap temp = new HashMap();" + NL + "\t";
!   protected final String TEXT_16 = NL + "    temp.put(";
!   protected final String TEXT_17 = ",";
!   protected final String TEXT_18 = NL + "             ";
!   protected final String TEXT_19 = ");// ";
!   protected final String TEXT_20 = NL + "\tattributes = Collections.unmodifiableMap(temp);" + NL + "\t" + NL + "\t}" + NL + "\t" + NL + "\t" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_21 = " is the Id of this project." + NL + "\t * @return the String \"";
!   protected final String TEXT_22 = "\"" + NL + "\t */" + NL + "\tpublic String getId() {return \"";
!   protected final String TEXT_23 = "\"; }" + NL + "\t" + NL + "\t\t" + NL + "\t/**" + NL + "\t * The user that built ";
!   protected final String TEXT_24 = " was ";
!   protected final String TEXT_25 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_26 = "\"" + NL + "\t */" + NL + "\tpublic String getUser() {return \"";
!   protected final String TEXT_27 = "\"; }" + NL + "\t" + NL + "\t\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_28 = " was built on ";
!   protected final String TEXT_29 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_30 = "\"" + NL + "\t */" + NL + "\tpublic String getHost() {return \"";
!   protected final String TEXT_31 = "\"; }" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_32 = " was built at ";
!   protected final String TEXT_33 = "." + NL + "\t * @return the Date \"";
!   protected final String TEXT_34 = "\"" + NL + "\t */" + NL + "\tpublic Date getDate() {return ";
!   protected final String TEXT_35 = "; }" + NL + "\t" + NL + "\t/**" + NL + "\t * The ID of the Version Specification." + NL + "\t * @return the String \"";
!   protected final String TEXT_36 = "\"." + NL + "\t * @see org.apache.depot.version.specification.VersionSpecificationFactory" + NL + "\t */" + NL + "\tpublic String getSpecificationId(){return \"";
!   protected final String TEXT_37 = "\";} " + NL + "\t" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_38 = " ";
!   protected final String TEXT_39 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_40 = "\"" + NL + "\t */" + NL + "\tpublic String getShortVersion() {return \"";
!   protected final String TEXT_41 = "\";}" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_42 = " ";
!   protected final String TEXT_43 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_44 = "\"" + NL + "\t */" + NL + "\tpublic String getLongVersion() {return \"";
!   protected final String TEXT_45 = "\";}" + NL + "" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_46 = " ";
!   protected final String TEXT_47 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_48 = "\"" + NL + "\t */" + NL + "\tpublic String getDefaultVersion() {return \"";
!   protected final String TEXT_49 = "\";}\t" + NL + "" + NL + "\t/**" + NL + "\t * Get the Unmodifiable map of attributes. \t" + NL + "\t * <dl>";
!   protected final String TEXT_50 = NL + "     *     <dt>";
!   protected final String TEXT_51 = "</dt>" + NL + "     *         <dd>";
!   protected final String TEXT_52 = "</dd>";
!   protected final String TEXT_53 = NL + "     * </dl>" + NL + "\t * @return unmodifiable Map of attributes." + NL + "\t */" + NL + "\tpublic Map getAttributes () {return attributes;}" + NL + "" + NL + "" + NL + "\t" + NL + "\t/**" + NL + "\t * ";
!   protected final String TEXT_54 = " ";
!   protected final String TEXT_55 = "." + NL + "\t * @return the String \"";
!   protected final String TEXT_56 = "\"" + NL + "\t */" + NL + "\tpublic String toString() {return \"";
!   protected final String TEXT_57 = "\";}" + NL + "}    ";
  
      public String generate(String packageName,  String className, VersionMarker marker)
***************
*** 108,126 ****
   
      stringBuffer.append(TEXT_1);
-     stringBuffer.append(className);
-     stringBuffer.append(TEXT_2);
      stringBuffer.append(packageName);
!     stringBuffer.append(TEXT_3);
      stringBuffer.append(marker.getId());
!     stringBuffer.append(TEXT_4);
      stringBuffer.append(new java.util.Date() );
!     stringBuffer.append(TEXT_5);
      stringBuffer.append(getHost());
!     stringBuffer.append(TEXT_6);
      stringBuffer.append(getUser());
!     stringBuffer.append(TEXT_7);
      stringBuffer.append(depotVersion.getLongVersion() );
!     stringBuffer.append(TEXT_8);
      stringBuffer.append(marker.getLongVersion());
      stringBuffer.append(TEXT_9);
      stringBuffer.append(className);
--- 107,125 ----
   
      stringBuffer.append(TEXT_1);
      stringBuffer.append(packageName);
!     stringBuffer.append(TEXT_2);
      stringBuffer.append(marker.getId());
!     stringBuffer.append(TEXT_3);
      stringBuffer.append(new java.util.Date() );
!     stringBuffer.append(TEXT_4);
      stringBuffer.append(getHost());
!     stringBuffer.append(TEXT_5);
      stringBuffer.append(getUser());
!     stringBuffer.append(TEXT_6);
      stringBuffer.append(depotVersion.getLongVersion() );
!     stringBuffer.append(TEXT_7);
      stringBuffer.append(marker.getLongVersion());
+     stringBuffer.append(TEXT_8);
+     stringBuffer.append(className);
      stringBuffer.append(TEXT_9);
      stringBuffer.append(className);
***************
*** 136,141 ****
      stringBuffer.append(className);
      stringBuffer.append(TEXT_15);
-     stringBuffer.append(className);
-     stringBuffer.append(TEXT_16);
      
  	for (Iterator i = marker.getAttributes().entrySet().iterator(); i.hasNext();) {
--- 135,138 ----
***************
*** 143,155 ****
           // TODO need to escape key and value.
           
!     stringBuffer.append(TEXT_17);
      stringBuffer.append(getValueFrom(entry.getKey()));
      stringBuffer.append(TEXT_18);
-     stringBuffer.append(TEXT_19);
      stringBuffer.append(getValueFrom(entry.getValue()));
!     stringBuffer.append(TEXT_20);
      stringBuffer.append(entry.getValue());
      
      }
      stringBuffer.append(TEXT_21);
      stringBuffer.append(marker.getId());
--- 140,154 ----
           // TODO need to escape key and value.
           
!     stringBuffer.append(TEXT_16);
      stringBuffer.append(getValueFrom(entry.getKey()));
+     stringBuffer.append(TEXT_17);
      stringBuffer.append(TEXT_18);
      stringBuffer.append(getValueFrom(entry.getValue()));
!     stringBuffer.append(TEXT_19);
      stringBuffer.append(entry.getValue());
      
      }
+     stringBuffer.append(TEXT_20);
+     stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_21);
      stringBuffer.append(marker.getId());
***************
*** 159,163 ****
      stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_24);
!     stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_25);
      stringBuffer.append(getUser());
--- 158,162 ----
      stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_24);
!     stringBuffer.append(getUser());
      stringBuffer.append(TEXT_25);
      stringBuffer.append(getUser());
***************
*** 165,171 ****
      stringBuffer.append(getUser());
      stringBuffer.append(TEXT_27);
-     stringBuffer.append(getUser());
-     stringBuffer.append(TEXT_28);
      stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_29);
      stringBuffer.append(getHost());
--- 164,170 ----
      stringBuffer.append(getUser());
      stringBuffer.append(TEXT_27);
      stringBuffer.append(marker.getId());
+     stringBuffer.append(TEXT_28);
+     stringBuffer.append(getHost());
      stringBuffer.append(TEXT_29);
      stringBuffer.append(getHost());
***************
*** 173,191 ****
      stringBuffer.append(getHost());
      stringBuffer.append(TEXT_31);
-     stringBuffer.append(getHost());
-     stringBuffer.append(TEXT_32);
      stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_33);
      stringBuffer.append(getDate());
      stringBuffer.append(TEXT_34);
-     stringBuffer.append(getDate());
-     stringBuffer.append(TEXT_35);
      stringBuffer.append(getValueFrom(getDate()));
      stringBuffer.append(TEXT_36);
      stringBuffer.append(marker.getSpecification().getId());
      stringBuffer.append(TEXT_37);
-     stringBuffer.append(marker.getSpecification().getId());
-     stringBuffer.append(TEXT_38);
      stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_39);
      stringBuffer.append(marker.getShortVersion());
--- 172,190 ----
      stringBuffer.append(getHost());
      stringBuffer.append(TEXT_31);
      stringBuffer.append(marker.getId());
+     stringBuffer.append(TEXT_32);
+     stringBuffer.append(getDate());
      stringBuffer.append(TEXT_33);
      stringBuffer.append(getDate());
      stringBuffer.append(TEXT_34);
      stringBuffer.append(getValueFrom(getDate()));
+     stringBuffer.append(TEXT_35);
+     stringBuffer.append(marker.getSpecification().getId());
      stringBuffer.append(TEXT_36);
      stringBuffer.append(marker.getSpecification().getId());
      stringBuffer.append(TEXT_37);
      stringBuffer.append(marker.getId());
+     stringBuffer.append(TEXT_38);
+     stringBuffer.append(marker.getShortVersion());
      stringBuffer.append(TEXT_39);
      stringBuffer.append(marker.getShortVersion());
***************
*** 193,199 ****
      stringBuffer.append(marker.getShortVersion());
      stringBuffer.append(TEXT_41);
-     stringBuffer.append(marker.getShortVersion());
-     stringBuffer.append(TEXT_42);
      stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_43);
      stringBuffer.append(marker.getLongVersion());
--- 192,198 ----
      stringBuffer.append(marker.getShortVersion());
      stringBuffer.append(TEXT_41);
      stringBuffer.append(marker.getId());
+     stringBuffer.append(TEXT_42);
+     stringBuffer.append(marker.getLongVersion());
      stringBuffer.append(TEXT_43);
      stringBuffer.append(marker.getLongVersion());
***************
*** 201,207 ****
      stringBuffer.append(marker.getLongVersion());
      stringBuffer.append(TEXT_45);
-     stringBuffer.append(marker.getLongVersion());
-     stringBuffer.append(TEXT_46);
      stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_47);
      stringBuffer.append(marker.getDefaultVersion());
--- 200,206 ----
      stringBuffer.append(marker.getLongVersion());
      stringBuffer.append(TEXT_45);
      stringBuffer.append(marker.getId());
+     stringBuffer.append(TEXT_46);
+     stringBuffer.append(marker.getDefaultVersion());
      stringBuffer.append(TEXT_47);
      stringBuffer.append(marker.getDefaultVersion());
***************
*** 209,214 ****
      stringBuffer.append(marker.getDefaultVersion());
      stringBuffer.append(TEXT_49);
-     stringBuffer.append(marker.getDefaultVersion());
-     stringBuffer.append(TEXT_50);
      
  	for (Iterator i = marker.getAttributes().entrySet().iterator(); i.hasNext();) {
--- 208,211 ----
***************
*** 216,228 ****
           // TODO need to escape key and value.
           
!     stringBuffer.append(TEXT_51);
      stringBuffer.append(entry.getKey());
!     stringBuffer.append(TEXT_52);
      stringBuffer.append(entry.getValue());
!     stringBuffer.append(TEXT_53);
      
      }
!     stringBuffer.append(TEXT_54);
      stringBuffer.append(marker.getId());
      stringBuffer.append(TEXT_55);
      stringBuffer.append(marker.getLongVersion());
--- 213,227 ----
           // TODO need to escape key and value.
           
!     stringBuffer.append(TEXT_50);
      stringBuffer.append(entry.getKey());
!     stringBuffer.append(TEXT_51);
      stringBuffer.append(entry.getValue());
!     stringBuffer.append(TEXT_52);
      
      }
!     stringBuffer.append(TEXT_53);
      stringBuffer.append(marker.getId());
+     stringBuffer.append(TEXT_54);
+     stringBuffer.append(marker.getLongVersion());
      stringBuffer.append(TEXT_55);
      stringBuffer.append(marker.getLongVersion());
***************
*** 230,235 ****
      stringBuffer.append(marker.getLongVersion());
      stringBuffer.append(TEXT_57);
-     stringBuffer.append(marker.getLongVersion());
-     stringBuffer.append(TEXT_58);
      return stringBuffer.toString();
    }
--- 229,232 ----

Index: Skeleton.java
===================================================================
RCS file: /cvsroot/krysalis/krysalis-version/src/java/org/krysalis/version/ant/stamp/Skeleton.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Skeleton.java	4 Nov 2004 08:32:31 -0000	1.1
--- Skeleton.java	4 Nov 2004 08:38:31 -0000	1.2
***************
*** 34,38 ****
          VersionMarker temp = VersionMarker.UNKNOWN;
          try {
!             temp = new org.apache.depot.version.version.Version();
  
          } catch (org.apache.depot.version.VersionException e) {
--- 34,38 ----
          VersionMarker temp = VersionMarker.UNKNOWN;
          try {
!             temp =  org.krysalis.version.version.VersionStamp.getInstance();
  
          } catch (org.apache.depot.version.VersionException e) {



-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.