RbMake Class

Overview

The RbMake class is used to create new .rb files. You need to have called the RbMake_init() routine before you begin. When your program is all done making .rb files, you should call RbMake_cleanup().

You start the creation of a new .rb file by calling RbMake_new(), which returns a new RbMake object. You must pass in 3 function pointers that tell the code where to call-back as various events happen: RbMakeAllowUrlFunc, RbMakeScheduleUrlFunc, and RbMakeFinishInfoFunc.

The first function is called when the code wants to know if an URL shoud be accepted or not (and it is called for both HREF and IMG-SRC items). If you return "true", the second function pointer will be called to schedule the URL for retrevial (which typically means that you just pass it on to the RbFetch_getURL() function, unless you're not using the RbFetch class). The final function pointer is called when the .info file is being finalized and is about to be written out. This function should manipulate the supplied RbInfoHash as appropriate and then return.

After creating the RbMake object, you can now set whatever options you desire within the RbMake object (see the separate option section for a list).

Next, you should call RbMake_addPageName() for each of the known URLs that you will be adding to the .rb file. When the "followLinks" option is not set, you need to have told rbmake about all the upcoming pages or the hyperlinks will break. Even if the "followLinks" option is set, you have more control over file order by enumerating all the upcoming pages this way, and then you don't have to check before adding each page to see if it has already been scheduled to be included (which can happen if it was referenced in a link on a previously-added page).

Next, you call RbMake_create() to start the .rb file itself going.

You must now create all the RbPage objects that need to go in the file and write each one out. The easiest way to do this is to use the RbFetch routines since they can take your URLs and do everything necessary to add the content to your RbMake object.

If you want to add a menu item to the ReB's "Go To" menu, you can use the RbMake_addMenuItem() function, once per item. You simply specify the description and the URL as separate pointers, and RbMake does the rest.

Finally, you call RbMake_finish() to finalize and close the .rb file.

RbMake Options

Here are the available options that you can set in the RbMake object:

RbMake_{get,set}AllowHRSize0PageBreaks()
If this is set to "true", it allows the incoming HTML to specify a HR (horizontal rule) tag with a size of "0" and have this indiate that a page break should occur. Normally this is disabled, since some web sites can get spurious page breaks this way. Also, the recommended way to specify a page break in your source HTML is to use <HR NEW-PAGE> (which always works).
RbMake_{get,set}CoverImage()
Set this to an URL for an image that you want to be placed in front of all other content in your book. The image is resized to fill as much of the screen as possible in portrait mode. By default, no cover image is included.
RbMake_{get,set}CreateHkeyFile()
If you want to create a dictionary key file for the first HTML file in a book, set this to "1" and a .hkey file will be generated (and the info page will be properly modified to indicate that this is a reference work). You must use the right combination of tags in your HTML to indicate which words should be indexed: <P><BIG><B>word(s)</B></BIG>definition</P>.
RbMake_{get,set}EnhancePunctuation()
Set this to "1" if you want single and double quotes to be changed into their "curly" variety, while also changing multiple adjacent dashes into emdashes.
RbMake_{get,set}FollowLinks()
Set this to "-1" if you want the HTML parser to follow any depth of links to other web pages. Specifying a positive value will limit how many links deep we will traverse from a manually sheduled page. A user-callback routine (that was specified via the RbMakeAllowUrlFunc pointer when "new" was called) is first called to ensure that you want the URL we found, and if you do, a user-callback routine (that was specified via the RbMakeScheduleUrlFunc pointer) will be called. By default, only the pages you schedule yourself are included in the book.
RbMake_{get,set}IncludeAudio()
Set this to RB_INCLUDE_YES to include audio (.wav) files in your book. The setting RB_INCLUDE_MATCH is also provided, but it behaves the same as the "YES" setting -- it is up to your RbMakeAllocUrlFunc routine to check this option and decide how to limit the audio files that are included. The default, RB_INCLUDE_NO, includes no audio files (i.e. the files are ignored without calling the RbMakeAllocUrlFunc).
RbMake_{get,set}IncludeImages()
Set this to RB_INCLUDE_YES to include images in your book. The setting RB_INCLUDE_MATCH is also provided, but it behaves the same as the "YES" setting -- it is up to your RbMakeAllocUrlFunc routine to check this option and decide how to limit the images that are included. The default, RB_INCLUDE_NO, includes no images (i.e. the files are ignored without calling the RbMakeAllocUrlFunc).
RbMake_{get,set}PageJoining()
If you set this to "1", all HTML/text pages will be joined into a single document. If you set this to a larger value, that number of pages will be joined together into a unified page (this is sometimes needed to avoid going past the maximum page size limit in the ReB). By default, no pages are joined together.
RbMake_{get,set}TextConversion()
If you set this to RB_TEXTCONV_SIMPLE_PARA, all text files will be converted into HTML with paragraph breaks marked wherever an empty line exists. If you plan to do your own conversion of text files into HTML in some substitution rules you've provided, set this to RB_TEXTCONV_NONE. The default setting is RB_TEXTCONV_PRE, which translates text files into preformatted HTML (with all linebreaks intact, and a mono-spaced font).
RbMake_{get,set}UseBookParagraphs()
Set this to "1" to transform web-style paragraphs (i.e. those with an empty line between paragraphs) into book-style paragraphs (i.e. with indentation on the first line rather than a preceding empty line). The default is to leave the paragraphs in web-style.
RbMake_{get,set}VerboseOutput()
If you set this to "1", the HTML parser will output any HTML errors and warnings it finds to to the RbError_warn() function. The default version of this function outputs the error to stderr, but you can override this using the RbError_init() call. See the RbError routines for more details.
RbMake_addMenuItem()
You can use this to add items to the "go to" menu (and rbmake takes care of the low-level specifics of adding the menumark file).
RbMake_addSubstRules()
Calling this routine with an MBuf containing text to parse will add the resulting substitution rules to the RbMake object. This causes the associated rewriting rules to be used to modify HTML and/or text pages as they get processed.

Other Accessors

Use RbMake_getPageCount() to find out how many text/HTML/image/audio files have been scheduled for inclusion in the book.

Use RbMake_getBinaryCount() to find out how many image/audio items are scheduled for inclusion in the book (you can subtract this out of the previous call to figure out how many text pages there are).

Use RbMake_getDoneCount() to discover how many pages have already been successfully added.

Use RbMake_getHtmlDropCount() to discover how many text/HTML pages could not be added to the book because the total number of pages would have exceeded the maximum ToC size.

Use RbMake_getBinaryDropCount() to discover how many image/audio pages could not be added to the book because the total number of pages would have exceeded the maximum ToC size.

Use RbMake_getFileName() to discover what the name of the .rb file is (or is going to be).

Use RbMake_getNewFileName() to discover what the temporary name of the .rb file is during its creation.

Use RbMake_getInfoHash() to access the RbInfoHash object that will be used to create the .info file.

Use RbMake_getTextConvOptName() to turn an RB_TEXTCONV_* value into a human-readable string.

Use RbMake_getIncludeOptName() to turn an RB_INCLUDE_* value into a human-readable string.

Use RbMake_findTextConvOpt() to turn a string value into an RB_TEXTCONV_* value.

Use RbMake_findIncludeOpt() to turn a string value into an RB_INCLUDE_* value.