function SongBlockPart(partType) 
{
     /**
      * song part type - derived classes should set this
      * @type BLOCKPART_TYPE
      */
     this.fPartType      = partType;

     /**
      * serialize contents to xml - derived classes should override this
      */
     this.toXML = function() {
	return null;
     }

     /**
      * create a new node from an xml node (created presumably using 
      * {@link SongBlockPart#toXML}
      * @param {XMLNode} xml
      * @return a {@link FromXMLResult} object, with song block part as result
      * @type FromXMLResult
      */
    this.fromXML = function(xml) {
	return new FromXMLResult(null, "internal error: SongBlockPart.fromXML not overridden" );
    }

    /**
     * does this part follow a page break 
     * (meaningful only for headings and for swaras (that start a row)
     */
    this.followsPageBreak = function() {
	return this.fFollowsPageBreak;
    }

    /**
     * set/unset the flag that indicates that part follows a page break 
     * (meaningful only for headings and for swaras (that start a row)
     */
    this.setFollowsPageBreak = function(val) {
	this.fFollowsPageBreak = val;
    }

     /**
      * set/unset the flag that indicates that part follows a page break 
      * (meaningful only for headings and for swaras (that start a row)
      * @type Boolean
      * @private
      */
    this.fFollowsPageBreak = false;
}
/**
 * @class
 * represent base class for all song block parts
 * @constructor
 * @param {BLOCKPART_TYPE} partType the song block part type
 */
@class
represent base class for all song block parts
@constructor
@param {BLOCKPART_TYPE} partType the song block part type
@class represent base class for all song block parts @constructor @param { BLOCKPART_TYPE } partType the song block part type
function SongBlockPart(partType) 
{
     this.fPartType      = partType;
     this.toXML = function() {
	return null;
     }
    this.fromXML = function(xml) {
	return new FromXMLResult(null, "internal error: SongBlockPart.fromXML not overridden" );
    }
    this.followsPageBreak = function() {
	return this.fFollowsPageBreak;
    }
    this.setFollowsPageBreak = function(val) {
	this.fFollowsPageBreak = val;
    }
    this.fFollowsPageBreak = false;
}
function SongBlockPart ( partType ) { this . fPartType = partType ; this . toXML = function ( ) { return null ; } this . fromXML = function ( xml ) { return new FromXMLResult ( null , "internal error: SongBlockPart.fromXML not overridden" ) ; } this . followsPageBreak = function ( ) { return this . fFollowsPageBreak ; } this . setFollowsPageBreak = function ( val ) { this . fFollowsPageBreak = val ; } this . fFollowsPageBreak = false ; }
@class
 represent base class for all song block parts
 @constructor
 @param {BLOCKPART_TYPE} partType the song block part type
@class represent base class for all song block parts @constructor @param { BLOCKPART_TYPE } partType the song block part type
/**
      * song part type - derived classes should set this
      * @type BLOCKPART_TYPE
      */ /**
      * serialize contents to xml - derived classes should override this
      */ /**
      * create a new node from an xml node (created presumably using 
      * {@link SongBlockPart#toXML}
      * @param {XMLNode} xml
      * @return a {@link FromXMLResult} object, with song block part as result
      * @type FromXMLResult
      */ /**
     * does this part follow a page break 
     * (meaningful only for headings and for swaras (that start a row)
     */ /**
     * set/unset the flag that indicates that part follows a page break 
     * (meaningful only for headings and for swaras (that start a row)
     */ /**
      * set/unset the flag that indicates that part follows a page break 
      * (meaningful only for headings and for swaras (that start a row)
      * @type Boolean
      * @private
      */