Date   

Re: Page and Column breaks #PDF

despopoulos_chriss
 

John says, "I'm guessing many of us using DITA receive similar feedback from reviewers that they don't like how text flows in documents...."

For quite some time we used FrameMaker to publish our PDFs.  That's right...  Generate a FrameMaker book, then manually paginate.  This is really the only (affordable) way to get exquisite page breaks. The range of decisions is just too great to devise a general approach.  As Eliot points out, it depends on page format, document design, styles, and even the type of content (tables, lists, etc.). 

In a previous life I implemented a FrameMaker plugin that would try a range of changes in order of preference to fit everything on a page.  That was for the end-page, only...  It could be extended to go one page at a time, I suppose (if I had saved the code!!!).  AFIK, there have been layout programs in the past (perhaps Quark???) that do these types of try-by-rule processes.  In fact, Quark probably does offer something you can do.  But again, that's pouring your DITA into a DTP system and using what it has to offer.

We have since abandoned FrameMaker as our PDF engine.  We're a tiny team producing lots of doc.  We need the push-button output that DITA is able to deliver.  We switched to oXygen and Chemistry.  That is great, but not even close in the quality of pagination.  CSS is just not rich enough to handle the nuances.  We hard-code attributes in some elements to not break.  But there's no concept of TRY not to break (AFIK). 


conkeyref to <steps> #conref #FrameMaker

Frank Dissinger
 

Hi Bob,


Thank you for your reply. I wasn't aware of this restriction. Seems illogical...


I entered the code you suggested (had to switch to XML View):


<steps conkeyref="key/id">
<step><cmd/></step>
</steps>


but FrameMaker still displays the error message on file save. The conkeyref is resolved, its content displayed, but the content after the conkeyref is discarded.

Error at file xxx.dita.591, line 12, char 133, Message: Expected an element name
Error at line 12, char 183, Message: No character data is allowed by content model
Error at line 12, char 191, Message: Empty content not valid for content model '(stepsection?,step)+'
Parse error at line 12, char 132: Not well-formed (invalid token)
Parsing aborted.

When I switch to XML View, I see the FrameMaker has replaced the dita code with the following:

<steps conkeyref = "key/id"><((stepsection)?,(step))></((stepsection)?,(step))></steps>

Has anyone found out what I have to do to make FrameMaker accept the code?


Thank you also to Lief, but FrameMaker does not even accept that code. It seems that a <cmd> element is also required.


Regards,

Frank




Am 25.11.2019 um 16:10 schrieb Bob Thomas:
Hi Frank,

The content model for <steps> requires at least one <step>, and the content model for <step> requires at least one <cmd>. This true even when using @conref or @conkeyref. Try this:

<steps conkeyref="MyStepsKey">
<step><cmd/></step>
</steps>

The problem that you are having is exactly why I don't like the fact that the DITA content models require elements. This sort of restriction belongs in a Schematron that can be set up to not throw errors when @conref or @conkeyref are used.
--
Best regards,
Bob Thomas
Tagsmiths, LLC

Frank Dissinger

Documentation Manager

....................................................................

CGS Publishing Technologies International GmbH

Email frank.dissinger@... | Web www.cgs-oris.com

Address Kettelerstr. 24 | D-63512 Hainburg | Germany

Phone +49 6182 9626-27 | Fax +49 6182 9626-99

Commercial register Offenbach, HRB no. 21495

Managing directors Bernd Rückert, Andreas Kämmerer, Christoph Thommessen


Re: Page and Column breaks #PDF

ekimber@contrext.com
 

Using either FOP or Antenna House Formatter it is technically possible to implement a multi-pass process using the "area tree" XML that both processors can emit (they are similar but not the same but the programming principles are the same for both).

Using this kind of approach it would be possible to provide a much higher degree of layout awareness to the page composition, for example, detecting the case where a title and paragraph followed by a figure occurs at the bottom of a page. Likewise, it is possible to dynamically size figures and tables based on the layout details of the page.

The main challenge is that the logic to apply will be specific to a given page layout and design coupled with specific content, so it's difficult to have a generic processor, although one could imagine having some set of layout hints that could be embedded in content or applied via style that would then guide a multi-pass pagination process.

For typical full-page layouts the keep facilities in XSL-FO and CSS pagination are sufficient, but when you get into more-constrained layouts, like typical consumer product manuals, it's much harder for a simple keep-with-next or keep-together to produce the correct result.

I've done enough work to date using XSLT to post-process AHF's area tree to know that it would be possible, if even not that difficult, but of course it's not something I personally can do nights and weekends (especially since I seem to have fewer of those available for programming than I used to....)

Cheers,

E.

--
Eliot Kimber
http://contrext.com


On 11/25/19, 9:16 AM, "John Piechowski" <dita-users@groups.io on behalf of john@piechowski.org> wrote:

I'm guessing many of us using DITA receive similar feedback from reviewers that they don't like how text flows in documents.

Often, they relate back to when we were using DTP, and we could insert a page/column break to force the section header or headline that renders on the bottom of one page to the next page with it's content. Or sometimes there are one or two lines of text left at the bottom on a column that they prefer are with the content on the next column.

Sometimes it is a headline and short paragraph that stays on one page with the image that it references on the next page, making the two disconnected.

For many years, it was easy (maybe too easy) to give them exactly what they wanted using DTP. Now as we promote content reuse, we lost this control without negatively impacting other documents that use the same topic.

We've tried to explain the great benefits we are getting through content reuse: consistency, reduces translation, improved quality. But often, DITA is seen outside the team as a step back in quality.

I'm interested in what others are doing to balance the positive outcome of content reuse against the negative effect document layout.


Re: Page and Column breaks #PDF

Chris Papademetrious
 

Hi John,

We specialized the @base attribute into a @paginate attribute. Using my specialization utility, I used the following code:

 <attributedomain filename="paginateAttMod.rng" domain="paginate">
  <specialize attribute="paginate" from="base" model="(keep-with-next|keep-with-previous|top-of-page|keep-together)*"/>
 </attributedomain>

The attribute allows any number of the highlighted keywords. Oxygen XML Author is smart enough to understand the RelaxNG schema and present the choices to the user in a drop-down box. We use PDF Chemistry for publishing, and we apply this attribute as follows:

@media print {
  *[paginate~="keep-together"] { page-break-inside: avoid; display: block;}
  *[paginate~="keep-with-next"] { page-break-after: avoid; }
  *[paginate~="keep-with-previous"] { page-break-before: avoid; }
  *[paginate~="top-of-page"] { page-break-before: always; }
}

We also added an alternate CSS file to our extension of Oxygen's DITA framework so that writers can toggle visualization of the pagination properties:

/* implement visual markers for pagination properties */
*[paginate ~= "top-of-page"]::before(1000) {
        display: block;
    content: '\00a0';
    height:5px;
    border-top:5px dashed #f00;
    margin-left: -1000in;
    margin-right: -1000in;
}
*[paginate ~= "keep-with-previous"] {
    border-top:5px dotted #0f0 !important;
}
*[paginate ~= "keep-with-next"] {
    border-bottom:5px dotted #0f0 !important;
}
*[paginate ~= "keep-together"] {
    background-color: #cfc !important;
}

This was all we needed to recreate the FrameMaker-like pagination controls in our DITA environment.

 There's more information, including pictures, here:

https://www.oxygenxml.com/forum/post54939.html#p54939

 - Chris


Page and Column breaks #PDF

John Piechowski
 

I'm guessing many of us using DITA receive similar feedback from reviewers that they don't like how text flows in documents.

Often, they relate back to when we were using DTP, and we could insert a page/column break to force the section header or headline that renders on the bottom of one page to the next page with it's content. Or sometimes there are one or two lines of text left at the bottom on a column that they prefer are with the content on the next column.

Sometimes it is a headline and short paragraph that stays on one page with the image that it references on the next page, making the two disconnected.

For many years, it was easy (maybe too easy) to give them exactly what they wanted using DTP. Now as we promote content reuse, we lost this control without negatively impacting other documents that use the same topic.

We've tried to explain the great benefits we are getting through content reuse: consistency, reduces translation, improved quality. But often, DITA is seen outside the team as a step back in quality.

I'm interested in what others are doing to balance the positive outcome of content reuse against the negative effect document layout.


Re: conkeyref to <steps> #conref #FrameMaker

Bob Thomas
 

Hi Frank,

The content model for <steps> requires at least one <step>, and the content model for <step> requires at least one <cmd>. This true even when using @conref or @conkeyref. Try this:

<steps conkeyref="MyStepsKey">
<step><cmd/></step>
</steps>

The problem that you are having is exactly why I don't like the fact that the DITA content models require elements. This sort of restriction belongs in a Schematron that can be set up to not throw errors when @conref or @conkeyref are used.

--
Best regards,
Bob Thomas
Tagsmiths, LLC


Re: conkeyref to <steps> #conref #FrameMaker

Lief Erickson
 

In the referencing topic have you defined the <steps> element to include the required <step> element? You need one. You do not need more. The actual number of steps will be determined by the content you're pulling in.

<steps conkeyref="somekey">
   <step/>
</steps>

-Lief

On Mon, Nov 25, 2019 at 5:39 AM Frank Dissinger <frank.dissinger@...> wrote:

Hi list,


I can't create a conkey reference to the <steps> element. When I try to save, the following error message appears:


Error at file .../xxx.dita.B85, line 12, char 133, Message: Expected an element name
Error at line 12, char 183, Message: No character data is allowed by content model
Error at line 12, char 191, Message: Empty content not valid for content model '(stepsection?,step)+'
Parse error at line 12, char 132: Not well-formed (invalid token)


Is this a bug, a general DITA restriction (but why?) or a restriction of my tool (FrameMaker 11+DITA-FMx)?


Thank you.


Regards,

Frank

--

Frank Dissinger

Documentation Manager

....................................................................

CGS Publishing Technologies International GmbH

Email frank.dissinger@... | Web www.cgs-oris.com

Address Kettelerstr. 24 | D-63512 Hainburg | Germany

Phone +49 6182 9626-27 | Fax +49 6182 9626-99

Commercial register Offenbach, HRB no. 21495

Managing directors Bernd Rückert, Andreas Kämmerer, Christoph Thommessen


Re: Looking for more modern alternatives to Eclipsehelp Infocenters #content-delivery #next-generation

Harald Hermann
 

Hello Jeff,

we are currently working on a prototype of a modernized Eclipse help web UI (mobile ready).
We were hoping for a long time that the Eclipse community will update the infocenter but this was never a priority for them.
Finally, we started to work on a prototype this year and suggested it to Eclipse in a comment in Eclipse bug 501718 with good feedback from the Eclipse platform team.

The code is work-in-progress but can be accessed already from https://github.com/howlger/Eclipse-Help-Modernized.

Best regards,
Harald


conkeyref to <steps> #conref #FrameMaker

Frank Dissinger
 

Hi list,


I can't create a conkey reference to the <steps> element. When I try to save, the following error message appears:


Error at file .../xxx.dita.B85, line 12, char 133, Message: Expected an element name
Error at line 12, char 183, Message: No character data is allowed by content model
Error at line 12, char 191, Message: Empty content not valid for content model '(stepsection?,step)+'
Parse error at line 12, char 132: Not well-formed (invalid token)


Is this a bug, a general DITA restriction (but why?) or a restriction of my tool (FrameMaker 11+DITA-FMx)?


Thank you.


Regards,

Frank

--

Frank Dissinger

Documentation Manager

....................................................................

CGS Publishing Technologies International GmbH

Email frank.dissinger@... | Web www.cgs-oris.com

Address Kettelerstr. 24 | D-63512 Hainburg | Germany

Phone +49 6182 9626-27 | Fax +49 6182 9626-99

Commercial register Offenbach, HRB no. 21495

Managing directors Bernd Rückert, Andreas Kämmerer, Christoph Thommessen


Re: Keyrefs within conrefs #DITA-OT

Radu Coravu
 

Hi Debra,

There is a DITA OT issue added by me about conrefs in key definition metadata no longer being expanded:

https://github.com/dita-ot/dita-ot/issues/2420

If it's similar to what you are encountering maybe you can add a comment to it.

Regards,
Radu

Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com

On 11/23/2019 8:22 PM, Debra Bissantz wrote:
This is a question for the DITA-OT experts -
How does the DITA-OT process keyrefs within content referenced via conref? It seems that this worked in DITA-OT 2.x versions, but it is not working with DITA-OT 3.x versions. Is there a parameter that we should pass to process the keys before the conrefs?
Thanks, Deb


Re: How is group.io working out for you? #admin

Gregory Ramsey
 

I mostly just lurk and read the daily digests, but I'll say so far so good.

~  G


Re: Keyrefs within conrefs #DITA-OT

ekimber@contrext.com
 

Not sure what you mean by "process the keys before the conrefs"?

Keys can only be resolved *after* conref resolution because the keys need to be resolved in the context of the referencing topic (and more specifically, the in the specific use context for each use of the referencing topic). [And it's actually more complicated than that, because you need to resolve direct conrefs, then construct the key spaces, then resolve key-based conrefs, then resolve non-conref keyrefs, but conceptually you have to resolve conrefs before you can resolve keyrefs.]

For example, imagine you have a reference to the key "prod-name" in a re-usable element that is then used by conref from a topic that is itself used in two different key scopes:

warehouse/warehouse.dita:

<topic id="warehouse">
<title>A Warehouse</title>
<body>
<p id="p1">The <keyword keyref="prod-name"/> product ....</p>
</body>
</topic>

And then in content topic "topics/real-topic.dita" you have:

<topic id=:"real-topic">
<title>A Real Topic</title>
<body>
<p conref="../warehouse/warehouse.dita#p1"/>
</body>
</topic>

And then in your map you have:

<map>
<title>Two-Product Publication</title>
<topicref keyscope="scope-1">
<keydef keys="prod-name">
<topicmeta><keywords><keyword>PROD A</keyword></keywords><topicmeta>
</keydef>
<topicref href="topics/real-topic.dita"/>
</topicref>
<topicref keyscope="scope-2">
<keydef keys="prod-name">
<topicmeta><keywords><keyword>PROD B</keyword></keywords><topicmeta>
</keydef>
<topicref href="topics/real-topic.dita"/>
</topicref>
</map>

The resolved value of the key "prod-name" is different in each key scope and needs to be reflected correctly in each use of real-topic.dita. The only way to do that is to resolve the conref and then resolve the resulting keyrefs (one for each use of real-topic.dita) in the context of the containing key scopes.

I don't know if OT does this (I haven't tested it) but this is the way it should behave.

Cheers,

E.

--
Eliot Kimber
http://contrext.com


On 11/23/19, 12:22 PM, "Debra Bissantz" <dita-users@groups.io on behalf of dbissantz@vasont.com> wrote:

This is a question for the DITA-OT experts -

How does the DITA-OT process keyrefs within content referenced via conref? It seems that this worked in DITA-OT 2.x versions, but it is not working with DITA-OT 3.x versions. Is there a parameter that we should pass to process the keys before the conrefs?

Thanks, Deb


Keyrefs within conrefs #DITA-OT

Debra Bissantz
 

This is a question for the DITA-OT experts -
 
How does the DITA-OT process keyrefs within content referenced via conref? It seems that this worked in DITA-OT 2.x versions, but it is not working with DITA-OT 3.x versions. Is there a parameter that we should pass to process the keys before the conrefs? 

Thanks, Deb


Re: note type vs othertype #specialization

Nicholas Mucks
 

Hi!
We use custom note types without specialization. It’s an update to the XSL template for notes and then an updated localization variable. For example, we have a special warning symbol used for electric shocks.

Take care,
- Nick

Sent from mobile

On Nov 22, 2019, at 1:49 PM, "ekimber@contrext.com" <ekimber@contrext.com> wrote:

Your option (2) is the correct way to do it (that is, the set of pre-defined note types is not intended to be directly extended).

Normally you'd take the next step and create a specialization of <note>, i.e, <best-practice>, that sets the type and othertype attributes as defaults so authors never have to worry about setting othertype.

That is, if you are prepared to redeclare the values of @type you might as well do the specialization.

Alternatively, you should be able to configure your editor to make it convenient for authors to create <note> with specific type and othertype values.

But the semantic "best-practice" seems more than strong enough to justify doing the specialization.

Cheers,

E.

--
Eliot Kimber
http://contrext.com


On 11/22/19, 1:20 PM, "Stuart Norton" <dita-users@groups.io on behalf of stu.norton@gmail.com> wrote:

I'm looking for some suggestions on how to represent custom note types in DITA... We have a couple of custom note types, such as a "best practice" that is presented with a special icon. In DITA, it looks like we could either:
1. Permit new attribute values: e.g. note with type = "best-practice"
2. Use type = "other" with othertype = "best-practice" (and configure the editor to suggest that option so authors don't have to remember/type it)

It seems like #2 is what the DITA designers intended, but #1 seems like it would be a bit more straightforward for the authors to use.

(I am not clear on whether #1 would actually be considered a specialization, since it seems to break the usual rules for specialization by expanding the available values?)

Any recommendations?

Thanks!







Re: note type vs othertype #specialization

ekimber@contrext.com
 

Your option (2) is the correct way to do it (that is, the set of pre-defined note types is not intended to be directly extended).

Normally you'd take the next step and create a specialization of <note>, i.e, <best-practice>, that sets the type and othertype attributes as defaults so authors never have to worry about setting othertype.

That is, if you are prepared to redeclare the values of @type you might as well do the specialization.

Alternatively, you should be able to configure your editor to make it convenient for authors to create <note> with specific type and othertype values.

But the semantic "best-practice" seems more than strong enough to justify doing the specialization.

Cheers,

E.

--
Eliot Kimber
http://contrext.com


On 11/22/19, 1:20 PM, "Stuart Norton" <dita-users@groups.io on behalf of stu.norton@gmail.com> wrote:

I'm looking for some suggestions on how to represent custom note types in DITA... We have a couple of custom note types, such as a "best practice" that is presented with a special icon. In DITA, it looks like we could either:
1. Permit new attribute values: e.g. note with type = "best-practice"
2. Use type = "other" with othertype = "best-practice" (and configure the editor to suggest that option so authors don't have to remember/type it)

It seems like #2 is what the DITA designers intended, but #1 seems like it would be a bit more straightforward for the authors to use.

(I am not clear on whether #1 would actually be considered a specialization, since it seems to break the usual rules for specialization by expanding the available values?)

Any recommendations?

Thanks!


note type vs othertype #specialization

Stuart Norton <stu.norton@...>
 

I'm looking for some suggestions on how to represent custom note types in DITA... We have a couple of custom note types, such as a "best practice" that is presented with a special icon. In DITA, it looks like we could either:
1. Permit new attribute values: e.g. note with type = "best-practice"
2. Use type = "other" with othertype = "best-practice" (and configure the editor to suggest that option so authors don't have to remember/type it)

 

It seems like #2 is what the DITA designers intended, but #1 seems like it would be a bit more straightforward for the authors to use.

(I am not clear on whether #1 would actually be considered a specialization, since it seems to break the usual rules for specialization by expanding the available values?)

Any recommendations?

Thanks!


Re: DITA: Fifteen(+) years old #history

Chris Papademetrious
 

I became familiar with DITA less than two years ago. We wanted to migrate from structured FrameMaker to DITA for all the usual reasons, and I volunteered to investigate. I struggled to learn how DITA and the DITA-OT worked. I struggled with specialization. I didn't know Java or XSLT or Ant (still don't!) so many interesting things I found in discussion threads were beyond my abilities.

Gradually, I made progress. I abandoned DTD/XSD and embraced RelaxNG. After lots of Q&A with Eliot, I created a utility to automate specialization and I learned more about how DITA works in the process. I began migrating our FrameMaker books to DITA. So far I've converted 80 books in my development area, and we're doing a pilot project with five of the books to try DITA + Oxygen XML Author for production work. The writers in this pilot project absolutely love Oxygen's integration with Git, especially how easy its WYSIWYG conflict resolution is.

One of the things we like about DITA is specialization. I rejected the "specialize only if needed" approach and I specialized so that almost all the FrameMaker elements our writers are used to were recreated in DITA. I specialized attributes so that writers could intuitively control pagination and output formatting. I like knowing that we can plug this DITA grammar plugin into any DITA-capable authoring, management, or output tool.

We are frustrated that RelaxNG grammar support is not ubiquitous yet, but it's slowly getting there...

We're also looking at integrating many of our internal "style guide" authoring rules into Schematron, which will get integrated into our DITA grammar plugin. This is another plus that an XML-based format provides, as we previously used developed-in-house, manually-run tools in our FrameMaker flow.

There are many places where we want something different than the DITA-OT's default behavior - numbering, wording of certain builtins, etc. Currently I'm using a tremendous number of CSS kludges to force the PDF to our whims in Oxygen PDF Chemistry. But I'd like to learn how to write a DITA-OT plugin that does this in the processing pipeline, where it should happen. I'm struggling to figure out where to even get started, but I've struggled before and I eventually overcame. The same applies here.

We are aggressively using keyref-based references, including cross-book links. With Radu's help, I created a utility to implement cross-book links in XHTML and WebHelp output. We've run into authoring issues in Oxygen and publishing issues in the DITA-OT with cross-book links, but the only way to make progress is to push the boundaries, file issues, and hope for people smarter than you to fix them.

In my view, DITA continues to grow and develop in a positive way. Compared to being stuck in the same stagnant FrameMaker flows for years upon years, DITA and the freedom and flexibility it affords us is a breath of fresh air.

 - Chris


Re: How is group.io working out for you? #admin

Leigh White
 

Hoping this is not a duplicate post...got a strange error message earlier. Ironic, since I was saying that I find groups.io to be a big improvement over the Yahoo group. I haven't had occasion to post yet but reading the digest is a lot more pleasant. I had also become unable to find many of my old posts in the Yahoo group, and I hope that will be resolved here. Time will tell. Thank you very much Kris for your efforts in making this a smooth transition for this list that we all rely on so much.
Leigh


Re: Looking for more modern alternatives to Eclipsehelp Infocenters #content-delivery #next-generation

Dan Vint
 

I think oXygen's webhelp format answers your needs. Free to produce from standalone oxygen installations and there is a server version for batch operations. No fee to distribute.



Sent from my Verizon, Samsung Galaxy smartphone

-------- Original message --------
From: Jeff Hooker <jeff@...>
Date: 11/22/19 7:23 AM (GMT-08:00)
To: dita-users@groups.io
Subject: [dita-users] Looking for more modern alternatives to Eclipsehelp Infocenters

Hi all,

About 12 years ago I started deploying Eclipse Infocenters at the semiconductor design house I work at. We had huge register data sets that I needed to make searchable as well as a growing Docbook-based CMS, and freestanding Eclipse Infocenters served us well as a way of mashing these two things together.

Today we still have huge register data sets, but the CMS has moved to DITA and the number of places to which we deploy our content has grown by leaps and bounds.

Infocenters, unfortunately, have stayed the same. While they are still great for accessing content via a browser and their search feature is unmatched, we need to be able to serve content to phones and tablets and an increasing number of default browser settings conflict with the needs of the Infocenter interface.

Therefore, I'm looking for the next mass-distribution tool. I'm not so optimistic to think that it's going to be free, but fortunately I have a lot more budget that I did at the beginning.

Here's what I'm looking for: 
1. Responsive design.
2. Supports context sensitive help (via topic numbers; not via embedding URLs in code).
3. A strong search feature (supports phrase, AND, OR at the least)
4. Allows help packages to be added and removed without having to regenerate the whole help system.
5. Can handle help sets of over 100,000 topics.
6. Can be run on a desktop or from a web server.
7. Licensing available for unrestricted distribution (not reselling, obviously, but I don't want to have to deal with the noise of having to purchase and track a new license every time I find a new use for it)

Does anyone have any names for me?

Thanks,
Jeff.


Looking for more modern alternatives to Eclipsehelp Infocenters #content-delivery #next-generation

Jeff Hooker
 

Hi all,

About 12 years ago I started deploying Eclipse Infocenters at the semiconductor design house I work at. We had huge register data sets that I needed to make searchable as well as a growing Docbook-based CMS, and freestanding Eclipse Infocenters served us well as a way of mashing these two things together.

Today we still have huge register data sets, but the CMS has moved to DITA and the number of places to which we deploy our content has grown by leaps and bounds.

Infocenters, unfortunately, have stayed the same. While they are still great for accessing content via a browser and their search feature is unmatched, we need to be able to serve content to phones and tablets and an increasing number of default browser settings conflict with the needs of the Infocenter interface.

Therefore, I'm looking for the next mass-distribution tool. I'm not so optimistic to think that it's going to be free, but fortunately I have a lot more budget that I did at the beginning.

Here's what I'm looking for: 
1. Responsive design.
2. Supports context sensitive help (via topic numbers; not via embedding URLs in code).
3. A strong search feature (supports phrase, AND, OR at the least)
4. Allows help packages to be added and removed without having to regenerate the whole help system.
5. Can handle help sets of over 100,000 topics.
6. Can be run on a desktop or from a web server.
7. Licensing available for unrestricted distribution (not reselling, obviously, but I don't want to have to deal with the noise of having to purchase and track a new license every time I find a new use for it)

Does anyone have any names for me?

Thanks,
Jeff.

1581 - 1600 of 46441