001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.cocoon.components.language.programming;
018:
019: import org.apache.avalon.framework.component.Component;
020:
021: import org.apache.cocoon.components.language.LanguageException;
022: import org.apache.cocoon.components.language.generator.CompiledComponent;
023:
024: import java.io.File;
025:
026: /**
027: * This interface states the functionality of a programming language processor
028: *
029: * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
030: * @version CVS $Id: ProgrammingLanguage.java 433543 2006-08-22 06:22:54Z crossley $
031: */
032: public interface ProgrammingLanguage extends Component {
033:
034: String ROLE = ProgrammingLanguage.class.getName();
035:
036: /**
037: * Return the programming language's source file extension
038: *
039: * @return The canonical source file extension
040: */
041: String getSourceExtension();
042:
043: /**
044: * Preload a program from a file
045: *
046: * @param filename The program base file name
047: * @param baseDirectory The directory containing the program file
048: * @param encoding The encoding expected in the source file or
049: * <code>null</code> if it is the platform's default encoding
050: * @return The loaded program
051: * @exception LanguageException If an error occurs during loading
052: */
053: Program preload(String filename, File baseDirectory, String encoding)
054: throws LanguageException;
055:
056: /**
057: * Load a program from a file
058: *
059: * @param filename The program base file name
060: * @param baseDirectory The directory containing the program file
061: * @param encoding The encoding expected in the source file or
062: * <code>null</code> if it is the platform's default encoding
063: * @return The loaded program
064: * @exception LanguageException If an error occurs during loading
065: */
066: Program load(String filename, File baseDirectory, String encoding)
067: throws LanguageException;
068:
069: /**
070: * Create a new instance for the given program type
071: *
072: * @param program The program type
073: * @return A new program type instance
074: * @exception LanguageException If an instantiation error occurs
075: */
076: // FIXME(VG): Not used
077: CompiledComponent instantiate(Program program)
078: throws LanguageException;
079:
080: /**
081: * Unload from memory and invalidate a given program
082: *
083: * @param program The program
084: * @param filename The name of the file this program was loaded from
085: * @param baseDirectory The directory containing the program file
086: * @exception LanguageException If an error occurs
087: */
088: void unload(Object program, String filename, File baseDirectory) // unload(Program ?
089: throws LanguageException;
090:
091: /**
092: * Return the <code>CodeFormatter</code> associated with this programming
093: * language
094: *
095: * @return The code formatter object or <code>null</code> if none is
096: * available
097: */
098: CodeFormatter getCodeFormatter();
099:
100: /**
101: * Escape a <code>String</code> according to the programming language's
102: * string constant encoding rules.
103: *
104: * @param constant The string to be escaped
105: * @return The escaped string
106: */
107: String quoteString(String constant);
108:
109: /**
110: * Set Language Name
111: *
112: * @param name The name of the language
113: */
114: void setLanguageName(String name);
115:
116: /**
117: * Get Language Name
118: *
119: * @return The name of the language
120: */
121: String getLanguageName();
122: }
|