lollipop版本分开,有些新特性android5.0和6.0不支持
This commit is contained in:
+10
-3
@@ -41,7 +41,7 @@ android {
|
|||||||
}
|
}
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "io.legado.app"
|
applicationId "io.legado.app"
|
||||||
minSdk 21
|
minSdk 24
|
||||||
targetSdk 33
|
targetSdk 33
|
||||||
versionCode 10000 + gitCommits
|
versionCode 10000 + gitCommits
|
||||||
versionName version
|
versionName version
|
||||||
@@ -107,6 +107,11 @@ android {
|
|||||||
applicationId "io.legado.play"
|
applicationId "io.legado.play"
|
||||||
manifestPlaceholders.put("APP_CHANNEL_VALUE", "google")
|
manifestPlaceholders.put("APP_CHANNEL_VALUE", "google")
|
||||||
}
|
}
|
||||||
|
lollipop {
|
||||||
|
dimension "mode"
|
||||||
|
minSdk 21
|
||||||
|
manifestPlaceholders.put("APP_CHANNEL_VALUE", "lollipop")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
@@ -198,10 +203,12 @@ dependencies {
|
|||||||
implementation('org.jsoup:jsoup:1.15.4')
|
implementation('org.jsoup:jsoup:1.15.4')
|
||||||
implementation('com.jayway.jsonpath:json-path:2.8.0')
|
implementation('com.jayway.jsonpath:json-path:2.8.0')
|
||||||
implementation('cn.wanghaomiao:JsoupXpath:2.5.3')
|
implementation('cn.wanghaomiao:JsoupXpath:2.5.3')
|
||||||
implementation(project(path: ':book'))
|
implementation(project(path: ':modules:book'))
|
||||||
|
|
||||||
//JS rhino
|
//JS rhino
|
||||||
implementation(project(path: ':rhino'))
|
appImplementation(project(path: ':modules:rhino1.4'))
|
||||||
|
googleImplementation(project(path: ':modules:rhino1.4'))
|
||||||
|
lollipopImplementation(project(path: ':modules:rhino1.3'))
|
||||||
|
|
||||||
//网络
|
//网络
|
||||||
implementation('com.squareup.okhttp3:okhttp:4.10.0')
|
implementation('com.squareup.okhttp3:okhttp:4.10.0')
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
package me.ag2s.epublib;
|
|
||||||
|
|
||||||
|
|
||||||
public interface Constants {
|
|
||||||
|
|
||||||
String CHARACTER_ENCODING = "UTF-8";
|
|
||||||
String DOCTYPE_XHTML = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">";
|
|
||||||
String NAMESPACE_XHTML = "http://www.w3.org/1999/xhtml";
|
|
||||||
String EPUB_GENERATOR_NAME = "Ag2S EpubLib";
|
|
||||||
String EPUB_DUOKAN_NAME = "DK-SONGTI";
|
|
||||||
char FRAGMENT_SEPARATOR_CHAR = '#';
|
|
||||||
String DEFAULT_TOC_ID = "toc";
|
|
||||||
}
|
|
||||||
@@ -1,158 +0,0 @@
|
|||||||
package me.ag2s.epublib.browsersupport;
|
|
||||||
|
|
||||||
import java.util.EventObject;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.domain.EpubBook;
|
|
||||||
import me.ag2s.epublib.domain.Resource;
|
|
||||||
import me.ag2s.epublib.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used to tell NavigationEventListener just what kind of navigation action
|
|
||||||
* the user just did.
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public class NavigationEvent extends EventObject {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = -6346750144308952762L;
|
|
||||||
|
|
||||||
private Resource oldResource;
|
|
||||||
private int oldSpinePos;
|
|
||||||
private Navigator navigator;
|
|
||||||
private EpubBook oldBook;
|
|
||||||
private int oldSectionPos;
|
|
||||||
private String oldFragmentId;
|
|
||||||
|
|
||||||
public NavigationEvent(Object source) {
|
|
||||||
super(source);
|
|
||||||
}
|
|
||||||
|
|
||||||
public NavigationEvent(Object source, Navigator navigator) {
|
|
||||||
super(source);
|
|
||||||
this.navigator = navigator;
|
|
||||||
this.oldBook = navigator.getBook();
|
|
||||||
this.oldFragmentId = navigator.getCurrentFragmentId();
|
|
||||||
this.oldSectionPos = navigator.getCurrentSectionPos();
|
|
||||||
this.oldResource = navigator.getCurrentResource();
|
|
||||||
this.oldSpinePos = navigator.getCurrentSpinePos();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The previous position within the section.
|
|
||||||
*
|
|
||||||
* @return The previous position within the section.
|
|
||||||
*/
|
|
||||||
public int getOldSectionPos() {
|
|
||||||
return oldSectionPos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Navigator getNavigator() {
|
|
||||||
return navigator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getOldFragmentId() {
|
|
||||||
return oldFragmentId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// package
|
|
||||||
void setOldFragmentId(String oldFragmentId) {
|
|
||||||
this.oldFragmentId = oldFragmentId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EpubBook getOldBook() {
|
|
||||||
return oldBook;
|
|
||||||
}
|
|
||||||
|
|
||||||
// package
|
|
||||||
void setOldPagePos(int oldPagePos) {
|
|
||||||
this.oldSectionPos = oldPagePos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCurrentSectionPos() {
|
|
||||||
return navigator.getCurrentSectionPos();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getOldSpinePos() {
|
|
||||||
return oldSpinePos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCurrentSpinePos() {
|
|
||||||
return navigator.getCurrentSpinePos();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCurrentFragmentId() {
|
|
||||||
return navigator.getCurrentFragmentId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isBookChanged() {
|
|
||||||
if (oldBook == null) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return oldBook != navigator.getBook();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isSpinePosChanged() {
|
|
||||||
return getOldSpinePos() != getCurrentSpinePos();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFragmentChanged() {
|
|
||||||
return StringUtil.equals(getOldFragmentId(), getCurrentFragmentId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Resource getOldResource() {
|
|
||||||
return oldResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Resource getCurrentResource() {
|
|
||||||
return navigator.getCurrentResource();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOldResource(Resource oldResource) {
|
|
||||||
this.oldResource = oldResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setOldSpinePos(int oldSpinePos) {
|
|
||||||
this.oldSpinePos = oldSpinePos;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setNavigator(Navigator navigator) {
|
|
||||||
this.navigator = navigator;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setOldBook(EpubBook oldBook) {
|
|
||||||
this.oldBook = oldBook;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EpubBook getCurrentBook() {
|
|
||||||
return getNavigator().getBook();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isResourceChanged() {
|
|
||||||
return oldResource != getCurrentResource();
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("NullableProblems")
|
|
||||||
public String toString() {
|
|
||||||
return StringUtil.toString(
|
|
||||||
"oldSectionPos", oldSectionPos,
|
|
||||||
"oldResource", oldResource,
|
|
||||||
"oldBook", oldBook,
|
|
||||||
"oldFragmentId", oldFragmentId,
|
|
||||||
"oldSpinePos", oldSpinePos,
|
|
||||||
"currentPagePos", getCurrentSectionPos(),
|
|
||||||
"currentResource", getCurrentResource(),
|
|
||||||
"currentBook", getCurrentBook(),
|
|
||||||
"currentFragmentId", getCurrentFragmentId(),
|
|
||||||
"currentSpinePos", getCurrentSpinePos()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isSectionPosChanged() {
|
|
||||||
return oldSectionPos != getCurrentSectionPos();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,207 +0,0 @@
|
|||||||
package me.ag2s.epublib.browsersupport;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.domain.EpubBook;
|
|
||||||
import me.ag2s.epublib.domain.Resource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A history of the user's locations with the epub.
|
|
||||||
*
|
|
||||||
* @author paul.siegmann
|
|
||||||
*/
|
|
||||||
public class NavigationHistory implements NavigationEventListener {
|
|
||||||
|
|
||||||
public static final int DEFAULT_MAX_HISTORY_SIZE = 1000;
|
|
||||||
private static final long DEFAULT_HISTORY_WAIT_TIME = 1000;
|
|
||||||
|
|
||||||
private static class Location {
|
|
||||||
|
|
||||||
private String href;
|
|
||||||
|
|
||||||
public Location(String href) {
|
|
||||||
super();
|
|
||||||
this.href = href;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public void setHref(String href) {
|
|
||||||
this.href = href;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getHref() {
|
|
||||||
return href;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private long lastUpdateTime = 0;
|
|
||||||
private List<Location> locations = new ArrayList<>();
|
|
||||||
private final Navigator navigator;
|
|
||||||
private int currentPos = -1;
|
|
||||||
private int currentSize = 0;
|
|
||||||
private int maxHistorySize = DEFAULT_MAX_HISTORY_SIZE;
|
|
||||||
private long historyWaitTime = DEFAULT_HISTORY_WAIT_TIME;
|
|
||||||
|
|
||||||
public NavigationHistory(Navigator navigator) {
|
|
||||||
this.navigator = navigator;
|
|
||||||
navigator.addNavigationEventListener(this);
|
|
||||||
initBook(navigator.getBook());
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCurrentPos() {
|
|
||||||
return currentPos;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public int getCurrentSize() {
|
|
||||||
return currentSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initBook(EpubBook book) {
|
|
||||||
if (book == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
locations = new ArrayList<>();
|
|
||||||
currentPos = -1;
|
|
||||||
currentSize = 0;
|
|
||||||
if (navigator.getCurrentResource() != null) {
|
|
||||||
addLocation(navigator.getCurrentResource().getHref());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If the time between a navigation event is less than the historyWaitTime
|
|
||||||
* then the new location is not added to the history.
|
|
||||||
*
|
|
||||||
* When a user is rapidly viewing many pages using the slider we do not
|
|
||||||
* want all of them to be added to the history.
|
|
||||||
*
|
|
||||||
* @return the time we wait before adding the page to the history
|
|
||||||
*/
|
|
||||||
public long getHistoryWaitTime() {
|
|
||||||
return historyWaitTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHistoryWaitTime(long historyWaitTime) {
|
|
||||||
this.historyWaitTime = historyWaitTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addLocation(Resource resource) {
|
|
||||||
if (resource == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
addLocation(resource.getHref());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds the location after the current position.
|
|
||||||
* If the currentposition is not the end of the list then the elements
|
|
||||||
* between the current element and the end of the list will be discarded.
|
|
||||||
*
|
|
||||||
* Does nothing if the new location matches the current location.
|
|
||||||
* <br/>
|
|
||||||
* If this nr of locations becomes larger then the historySize then the
|
|
||||||
* first item(s) will be removed.
|
|
||||||
*v
|
|
||||||
* @param location d
|
|
||||||
*/
|
|
||||||
public void addLocation(Location location) {
|
|
||||||
// do nothing if the new location matches the current location
|
|
||||||
if (!(locations.isEmpty()) &&
|
|
||||||
location.getHref().equals(locations.get(currentPos).getHref())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
currentPos++;
|
|
||||||
if (currentPos != currentSize) {
|
|
||||||
locations.set(currentPos, location);
|
|
||||||
} else {
|
|
||||||
locations.add(location);
|
|
||||||
checkHistorySize();
|
|
||||||
}
|
|
||||||
currentSize = currentPos + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes all elements that are too much for the maxHistorySize
|
|
||||||
* out of the history.
|
|
||||||
*/
|
|
||||||
private void checkHistorySize() {
|
|
||||||
while (locations.size() > maxHistorySize) {
|
|
||||||
locations.remove(0);
|
|
||||||
currentSize--;
|
|
||||||
currentPos--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addLocation(String href) {
|
|
||||||
addLocation(new Location(href));
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getLocationHref(int pos) {
|
|
||||||
if (pos < 0 || pos >= locations.size()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return locations.get(currentPos).getHref();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Moves the current positions delta positions.
|
|
||||||
*
|
|
||||||
* move(-1) to go one position back in history.<br/>
|
|
||||||
* move(1) to go one position forward.<br/>发
|
|
||||||
*
|
|
||||||
* @param delta f
|
|
||||||
*
|
|
||||||
* @return Whether we actually moved. If the requested value is illegal
|
|
||||||
* it will return false, true otherwise.
|
|
||||||
*/
|
|
||||||
public boolean move(int delta) {
|
|
||||||
if (((currentPos + delta) < 0)
|
|
||||||
|| ((currentPos + delta) >= currentSize)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
currentPos += delta;
|
|
||||||
navigator.gotoResource(getLocationHref(currentPos), this);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If this is not the source of the navigationEvent then the addLocation
|
|
||||||
* will be called with the href of the currentResource in the navigationEvent.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void navigationPerformed(NavigationEvent navigationEvent) {
|
|
||||||
if (this == navigationEvent.getSource()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (navigationEvent.getCurrentResource() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((System.currentTimeMillis() - this.lastUpdateTime) > historyWaitTime) {
|
|
||||||
// if the user scrolled rapidly through the pages then the last page
|
|
||||||
// will not be added to the history. We fix that here:
|
|
||||||
addLocation(navigationEvent.getOldResource());
|
|
||||||
|
|
||||||
addLocation(navigationEvent.getCurrentResource().getHref());
|
|
||||||
}
|
|
||||||
lastUpdateTime = System.currentTimeMillis();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCurrentHref() {
|
|
||||||
if (currentPos < 0 || currentPos >= locations.size()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return locations.get(currentPos).getHref();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaxHistorySize(int maxHistorySize) {
|
|
||||||
this.maxHistorySize = maxHistorySize;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMaxHistorySize() {
|
|
||||||
return maxHistorySize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,220 +0,0 @@
|
|||||||
package me.ag2s.epublib.browsersupport;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.domain.EpubBook;
|
|
||||||
import me.ag2s.epublib.domain.Resource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A helper class for epub browser applications.
|
|
||||||
* <p>
|
|
||||||
* It helps moving from one resource to the other, from one resource
|
|
||||||
* to the other and keeping other elements of the application up-to-date
|
|
||||||
* by calling the NavigationEventListeners.
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*/
|
|
||||||
public class Navigator implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1076126986424925474L;
|
|
||||||
private EpubBook book;
|
|
||||||
private int currentSpinePos;
|
|
||||||
private Resource currentResource;
|
|
||||||
private int currentPagePos;
|
|
||||||
private String currentFragmentId;
|
|
||||||
|
|
||||||
private final List<NavigationEventListener> eventListeners = new ArrayList<>();
|
|
||||||
|
|
||||||
public Navigator() {
|
|
||||||
this(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Navigator(EpubBook book) {
|
|
||||||
this.book = book;
|
|
||||||
this.currentSpinePos = 0;
|
|
||||||
if (book != null) {
|
|
||||||
this.currentResource = book.getCoverPage();
|
|
||||||
}
|
|
||||||
this.currentPagePos = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private synchronized void handleEventListeners(
|
|
||||||
NavigationEvent navigationEvent) {
|
|
||||||
for (int i = 0; i < eventListeners.size(); i++) {
|
|
||||||
NavigationEventListener navigationEventListener = eventListeners.get(i);
|
|
||||||
navigationEventListener.navigationPerformed(navigationEvent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean addNavigationEventListener(
|
|
||||||
NavigationEventListener navigationEventListener) {
|
|
||||||
return this.eventListeners.add(navigationEventListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean removeNavigationEventListener(
|
|
||||||
NavigationEventListener navigationEventListener) {
|
|
||||||
return this.eventListeners.remove(navigationEventListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoFirstSpineSection(Object source) {
|
|
||||||
return gotoSpineSection(0, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoPreviousSpineSection(Object source) {
|
|
||||||
return gotoPreviousSpineSection(0, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoPreviousSpineSection(int pagePos, Object source) {
|
|
||||||
if (currentSpinePos < 0) {
|
|
||||||
return gotoSpineSection(0, pagePos, source);
|
|
||||||
} else {
|
|
||||||
return gotoSpineSection(currentSpinePos - 1, pagePos, source);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasNextSpineSection() {
|
|
||||||
return (currentSpinePos < (book.getSpine().size() - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasPreviousSpineSection() {
|
|
||||||
return (currentSpinePos > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoNextSpineSection(Object source) {
|
|
||||||
if (currentSpinePos < 0) {
|
|
||||||
return gotoSpineSection(0, source);
|
|
||||||
} else {
|
|
||||||
return gotoSpineSection(currentSpinePos + 1, source);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoResource(String resourceHref, Object source) {
|
|
||||||
Resource resource = book.getResources().getByHref(resourceHref);
|
|
||||||
return gotoResource(resource, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public int gotoResource(Resource resource, Object source) {
|
|
||||||
return gotoResource(resource, 0, null, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoResource(Resource resource, String fragmentId, Object source) {
|
|
||||||
return gotoResource(resource, 0, fragmentId, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoResource(Resource resource, int pagePos, Object source) {
|
|
||||||
return gotoResource(resource, pagePos, null, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoResource(Resource resource, int pagePos, String fragmentId,
|
|
||||||
Object source) {
|
|
||||||
if (resource == null) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
NavigationEvent navigationEvent = new NavigationEvent(source, this);
|
|
||||||
this.currentResource = resource;
|
|
||||||
this.currentSpinePos = book.getSpine().getResourceIndex(currentResource);
|
|
||||||
this.currentPagePos = pagePos;
|
|
||||||
this.currentFragmentId = fragmentId;
|
|
||||||
handleEventListeners(navigationEvent);
|
|
||||||
|
|
||||||
return currentSpinePos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoResourceId(String resourceId, Object source) {
|
|
||||||
return gotoSpineSection(book.getSpine().findFirstResourceById(resourceId),
|
|
||||||
source);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoSpineSection(int newSpinePos, Object source) {
|
|
||||||
return gotoSpineSection(newSpinePos, 0, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Go to a specific section.
|
|
||||||
* Illegal spine positions are silently ignored.
|
|
||||||
*
|
|
||||||
* @param newSpinePos f
|
|
||||||
* @param source f
|
|
||||||
* @return The current position within the spine
|
|
||||||
*/
|
|
||||||
public int gotoSpineSection(int newSpinePos, int newPagePos, Object source) {
|
|
||||||
if (newSpinePos == currentSpinePos) {
|
|
||||||
return currentSpinePos;
|
|
||||||
}
|
|
||||||
if (newSpinePos < 0 || newSpinePos >= book.getSpine().size()) {
|
|
||||||
return currentSpinePos;
|
|
||||||
}
|
|
||||||
NavigationEvent navigationEvent = new NavigationEvent(source, this);
|
|
||||||
currentSpinePos = newSpinePos;
|
|
||||||
currentPagePos = newPagePos;
|
|
||||||
currentResource = book.getSpine().getResource(currentSpinePos);
|
|
||||||
handleEventListeners(navigationEvent);
|
|
||||||
return currentSpinePos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int gotoLastSpineSection(Object source) {
|
|
||||||
return gotoSpineSection(book.getSpine().size() - 1, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void gotoBook(EpubBook book, Object source) {
|
|
||||||
NavigationEvent navigationEvent = new NavigationEvent(source, this);
|
|
||||||
this.book = book;
|
|
||||||
this.currentFragmentId = null;
|
|
||||||
this.currentPagePos = 0;
|
|
||||||
this.currentResource = null;
|
|
||||||
this.currentSpinePos = book.getSpine().getResourceIndex(currentResource);
|
|
||||||
handleEventListeners(navigationEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The current position within the spine.
|
|
||||||
*
|
|
||||||
* @return something < 0 if the current position is not within the spine.
|
|
||||||
*/
|
|
||||||
public int getCurrentSpinePos() {
|
|
||||||
return currentSpinePos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Resource getCurrentResource() {
|
|
||||||
return currentResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the current index and resource without calling the eventlisteners.
|
|
||||||
*
|
|
||||||
* If you want the eventListeners called use gotoSection(index);
|
|
||||||
*
|
|
||||||
* @param currentIndex f
|
|
||||||
*/
|
|
||||||
public void setCurrentSpinePos(int currentIndex) {
|
|
||||||
this.currentSpinePos = currentIndex;
|
|
||||||
this.currentResource = book.getSpine().getResource(currentIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
public EpubBook getBook() {
|
|
||||||
return book;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the current index and resource without calling the eventlisteners.
|
|
||||||
*
|
|
||||||
* If you want the eventListeners called use gotoSection(index);
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public int setCurrentResource(Resource currentResource) {
|
|
||||||
this.currentSpinePos = book.getSpine().getResourceIndex(currentResource);
|
|
||||||
this.currentResource = currentResource;
|
|
||||||
return currentSpinePos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCurrentFragmentId() {
|
|
||||||
return currentFragmentId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCurrentSectionPos() {
|
|
||||||
return currentPagePos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.util.zip.ZipEntryWrapper;
|
|
||||||
import me.ag2s.epublib.util.zip.ZipFileWrapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author jake
|
|
||||||
*/
|
|
||||||
public class EpubResourceProvider implements LazyResourceProvider {
|
|
||||||
|
|
||||||
|
|
||||||
private final ZipFileWrapper zipFileWrapper;
|
|
||||||
|
|
||||||
|
|
||||||
public EpubResourceProvider(ZipFileWrapper zipFileWrapper) {
|
|
||||||
this.zipFileWrapper = zipFileWrapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InputStream getResourceStream(@NonNull String href) throws IOException {
|
|
||||||
|
|
||||||
//ZipFile zipFile = new ZipFile(epubFilename);
|
|
||||||
ZipEntryWrapper zipEntry = zipFileWrapper.getEntry(href);
|
|
||||||
if (zipEntry == null) {
|
|
||||||
//zipFile.close();
|
|
||||||
throw new IllegalStateException(
|
|
||||||
"Cannot find entry " + href + " in epub file " + zipFileWrapper);
|
|
||||||
}
|
|
||||||
return new ResourceInputStream(zipFileWrapper.getInputStream(zipEntry));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The guide is a selection of special pages of the book.
|
|
||||||
* Examples of these are the cover, list of illustrations, etc.
|
|
||||||
*
|
|
||||||
* It is an optional part of an epub, and support for the various types
|
|
||||||
* of references varies by reader.
|
|
||||||
*
|
|
||||||
* The only part of this that is heavily used is the cover page.
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class Guide implements Serializable {
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = -6256645339915751189L;
|
|
||||||
|
|
||||||
public static final String DEFAULT_COVER_TITLE = GuideReference.COVER;
|
|
||||||
|
|
||||||
private List<GuideReference> references = new ArrayList<>();
|
|
||||||
private static final int COVERPAGE_NOT_FOUND = -1;
|
|
||||||
private static final int COVERPAGE_UNITIALIZED = -2;
|
|
||||||
|
|
||||||
private int coverPageIndex = -1;
|
|
||||||
|
|
||||||
public List<GuideReference> getReferences() {
|
|
||||||
return references;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReferences(List<GuideReference> references) {
|
|
||||||
this.references = references;
|
|
||||||
uncheckCoverPage();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void uncheckCoverPage() {
|
|
||||||
coverPageIndex = COVERPAGE_UNITIALIZED;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GuideReference getCoverReference() {
|
|
||||||
checkCoverPage();
|
|
||||||
if (coverPageIndex >= 0) {
|
|
||||||
return references.get(coverPageIndex);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
@SuppressWarnings("UnusedReturnValue")
|
|
||||||
public int setCoverReference(GuideReference guideReference) {
|
|
||||||
if (coverPageIndex >= 0) {
|
|
||||||
references.set(coverPageIndex, guideReference);
|
|
||||||
} else {
|
|
||||||
references.add(0, guideReference);
|
|
||||||
coverPageIndex = 0;
|
|
||||||
}
|
|
||||||
return coverPageIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkCoverPage() {
|
|
||||||
if (coverPageIndex == COVERPAGE_UNITIALIZED) {
|
|
||||||
initCoverPage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void initCoverPage() {
|
|
||||||
int result = COVERPAGE_NOT_FOUND;
|
|
||||||
for (int i = 0; i < references.size(); i++) {
|
|
||||||
GuideReference guideReference = references.get(i);
|
|
||||||
if (guideReference.getType().equals(GuideReference.COVER)) {
|
|
||||||
result = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
coverPageIndex = result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The coverpage of the book.
|
|
||||||
*
|
|
||||||
* @return The coverpage of the book.
|
|
||||||
*/
|
|
||||||
public Resource getCoverPage() {
|
|
||||||
GuideReference guideReference = getCoverReference();
|
|
||||||
if (guideReference == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return guideReference.getResource();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCoverPage(Resource coverPage) {
|
|
||||||
GuideReference coverpageGuideReference = new GuideReference(coverPage,
|
|
||||||
GuideReference.COVER, DEFAULT_COVER_TITLE);
|
|
||||||
setCoverReference(coverpageGuideReference);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("UnusedReturnValue")
|
|
||||||
public ResourceReference addReference(GuideReference reference) {
|
|
||||||
this.references.add(reference);
|
|
||||||
uncheckCoverPage();
|
|
||||||
return reference;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A list of all GuideReferences that have the given
|
|
||||||
* referenceTypeName (ignoring case).
|
|
||||||
*
|
|
||||||
* @param referenceTypeName referenceTypeName
|
|
||||||
* @return A list of all GuideReferences that have the given
|
|
||||||
* referenceTypeName (ignoring case).
|
|
||||||
*/
|
|
||||||
public List<GuideReference> getGuideReferencesByType(
|
|
||||||
String referenceTypeName) {
|
|
||||||
List<GuideReference> result = new ArrayList<>();
|
|
||||||
for (GuideReference guideReference : references) {
|
|
||||||
if (referenceTypeName.equalsIgnoreCase(guideReference.getType())) {
|
|
||||||
result.add(guideReference);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.util.StringUtil;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* These are references to elements of the book's guide.
|
|
||||||
*
|
|
||||||
* @see Guide
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class GuideReference extends TitledResourceReference
|
|
||||||
implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = -316179702440631834L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the book cover(s), jacket information, etc.
|
|
||||||
*/
|
|
||||||
public static final String COVER = "cover";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* human-readable page with title, author, publisher, and other metadata
|
|
||||||
*/
|
|
||||||
public static String TITLE_PAGE = "title-page";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Human-readable table of contents.
|
|
||||||
* Not to be confused the epub file table of contents
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static String TOC = "toc";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* back-of-book style index
|
|
||||||
*/
|
|
||||||
public static String INDEX = "index";
|
|
||||||
public static String GLOSSARY = "glossary";
|
|
||||||
public static String ACKNOWLEDGEMENTS = "acknowledgements";
|
|
||||||
public static String BIBLIOGRAPHY = "bibliography";
|
|
||||||
public static String COLOPHON = "colophon";
|
|
||||||
public static String COPYRIGHT_PAGE = "copyright-page";
|
|
||||||
public static String DEDICATION = "dedication";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* an epigraph is a phrase, quotation, or poem that is set at the
|
|
||||||
* beginning of a document or component.
|
|
||||||
*
|
|
||||||
* source: http://en.wikipedia.org/wiki/Epigraph_%28literature%29
|
|
||||||
*/
|
|
||||||
public static String EPIGRAPH = "epigraph";
|
|
||||||
|
|
||||||
public static String FOREWORD = "foreword";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* list of illustrations
|
|
||||||
*/
|
|
||||||
public static String LOI = "loi";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* list of tables
|
|
||||||
*/
|
|
||||||
public static String LOT = "lot";
|
|
||||||
public static String NOTES = "notes";
|
|
||||||
public static String PREFACE = "preface";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A page of content (e.g. "Chapter 1")
|
|
||||||
*/
|
|
||||||
public static String TEXT = "text";
|
|
||||||
|
|
||||||
private String type;
|
|
||||||
|
|
||||||
public GuideReference(Resource resource) {
|
|
||||||
this(resource, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GuideReference(Resource resource, String title) {
|
|
||||||
super(resource, title);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GuideReference(Resource resource, String type, String title) {
|
|
||||||
this(resource, type, title, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GuideReference(Resource resource, String type, String title,
|
|
||||||
String fragmentId) {
|
|
||||||
super(resource, title, fragmentId);
|
|
||||||
this.type = StringUtil.isNotBlank(type) ? type.toLowerCase() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setType(String type) {
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,131 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A Book's identifier.
|
|
||||||
*
|
|
||||||
* Defaults to a random UUID and scheme "UUID"
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*/
|
|
||||||
public class Identifier implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 955949951416391810L;
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public interface Scheme {
|
|
||||||
|
|
||||||
String UUID = "UUID";
|
|
||||||
String ISBN = "ISBN";
|
|
||||||
String URL = "URL";
|
|
||||||
String URI = "URI";
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean bookId = false;
|
|
||||||
private String scheme;
|
|
||||||
private String value;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an Identifier with as value a random UUID and scheme "UUID"
|
|
||||||
*/
|
|
||||||
public Identifier() {
|
|
||||||
this(Scheme.UUID, UUID.randomUUID().toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Identifier(String scheme, String value) {
|
|
||||||
this.scheme = scheme;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The first identifier for which the bookId is true is made the
|
|
||||||
* bookId identifier.
|
|
||||||
*
|
|
||||||
* If no identifier has bookId == true then the first bookId identifier
|
|
||||||
* is written as the primary.
|
|
||||||
*
|
|
||||||
* @param identifiers i
|
|
||||||
* @return The first identifier for which the bookId is true is made
|
|
||||||
* the bookId identifier.
|
|
||||||
*/
|
|
||||||
public static Identifier getBookIdIdentifier(List<Identifier> identifiers) {
|
|
||||||
if (identifiers == null || identifiers.isEmpty()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Identifier result = null;
|
|
||||||
for (Identifier identifier : identifiers) {
|
|
||||||
if (identifier.isBookId()) {
|
|
||||||
result = identifier;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == null) {
|
|
||||||
result = identifiers.get(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getScheme() {
|
|
||||||
return scheme;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setScheme(String scheme) {
|
|
||||||
this.scheme = scheme;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getValue() {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValue(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setBookId(boolean bookId) {
|
|
||||||
this.bookId = bookId;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This bookId property allows the book creator to add multiple ids and
|
|
||||||
* tell the epubwriter which one to write out as the bookId.
|
|
||||||
*
|
|
||||||
* The Dublin Core metadata spec allows multiple identifiers for a Book.
|
|
||||||
* The epub spec requires exactly one identifier to be marked as the book id.
|
|
||||||
*
|
|
||||||
* @return whether this is the unique book id.
|
|
||||||
*/
|
|
||||||
public boolean isBookId() {
|
|
||||||
return bookId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int hashCode() {
|
|
||||||
return StringUtil.defaultIfNull(scheme).hashCode() ^ StringUtil
|
|
||||||
.defaultIfNull(value).hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equals(Object otherIdentifier) {
|
|
||||||
if (!(otherIdentifier instanceof Identifier)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return StringUtil.equals(scheme, ((Identifier) otherIdentifier).scheme)
|
|
||||||
&& StringUtil.equals(value, ((Identifier) otherIdentifier).value);
|
|
||||||
}
|
|
||||||
@SuppressWarnings("NullableProblems")
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
if (StringUtil.isBlank(scheme)) {
|
|
||||||
return "" + value;
|
|
||||||
}
|
|
||||||
return "" + scheme + ":" + value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.util.IOUtil;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A Resource that loads its data only on-demand from a EPUB book file.
|
|
||||||
* This way larger books can fit into memory and can be opened faster.
|
|
||||||
*/
|
|
||||||
public class LazyResource extends Resource {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 5089400472352002866L;
|
|
||||||
private final String TAG= getClass().getName();
|
|
||||||
|
|
||||||
private final LazyResourceProvider resourceProvider;
|
|
||||||
private final long cachedSize;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a lazy resource, when the size is unknown.
|
|
||||||
*
|
|
||||||
* @param resourceProvider The resource provider loads data on demand.
|
|
||||||
* @param href The resource's href within the epub.
|
|
||||||
*/
|
|
||||||
public LazyResource(LazyResourceProvider resourceProvider, String href) {
|
|
||||||
this(resourceProvider, -1, href);
|
|
||||||
}
|
|
||||||
public LazyResource(LazyResourceProvider resourceProvider, String href, String originalHref) {
|
|
||||||
this(resourceProvider, -1, href, originalHref);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a Lazy resource, by not actually loading the data for this entry.
|
|
||||||
*
|
|
||||||
* The data will be loaded on the first call to getData()
|
|
||||||
*
|
|
||||||
* @param resourceProvider The resource provider loads data on demand.
|
|
||||||
* @param size The size of this resource.
|
|
||||||
* @param href The resource's href within the epub.
|
|
||||||
*/
|
|
||||||
public LazyResource(
|
|
||||||
LazyResourceProvider resourceProvider, long size, String href) {
|
|
||||||
super(null, null, href, MediaTypes.determineMediaType(href));
|
|
||||||
this.resourceProvider = resourceProvider;
|
|
||||||
this.cachedSize = size;
|
|
||||||
}
|
|
||||||
public LazyResource(
|
|
||||||
LazyResourceProvider resourceProvider, long size, String href, String originalHref) {
|
|
||||||
super(null, null, href, originalHref, MediaTypes.determineMediaType(href));
|
|
||||||
this.resourceProvider = resourceProvider;
|
|
||||||
this.cachedSize = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the contents of the Resource as an InputStream.
|
|
||||||
*
|
|
||||||
* @return The contents of the Resource.
|
|
||||||
*
|
|
||||||
* @throws IOException IOException
|
|
||||||
*/
|
|
||||||
public InputStream getInputStream() throws IOException {
|
|
||||||
if (isInitialized()) {
|
|
||||||
return new ByteArrayInputStream(getData());
|
|
||||||
} else {
|
|
||||||
return resourceProvider.getResourceStream(this.originalHref);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes the resource by loading its data into memory.
|
|
||||||
*
|
|
||||||
* @throws IOException IOException
|
|
||||||
*/
|
|
||||||
public void initialize() throws IOException {
|
|
||||||
getData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The contents of the resource as a byte[]
|
|
||||||
*
|
|
||||||
* If this resource was lazy-loaded and the data was not yet loaded,
|
|
||||||
* it will be loaded into memory at this point.
|
|
||||||
* This included opening the zip file, so expect a first load to be slow.
|
|
||||||
*
|
|
||||||
* @return The contents of the resource
|
|
||||||
*/
|
|
||||||
public byte[] getData() throws IOException {
|
|
||||||
|
|
||||||
if (data == null) {
|
|
||||||
|
|
||||||
Log.d(TAG, "Initializing lazy resource: " + this.getHref());
|
|
||||||
|
|
||||||
InputStream in = resourceProvider.getResourceStream(this.originalHref);
|
|
||||||
byte[] readData = IOUtil.toByteArray(in, (int) this.cachedSize);
|
|
||||||
if (readData == null) {
|
|
||||||
throw new IOException(
|
|
||||||
"Could not load the contents of resource: " + this.getHref());
|
|
||||||
} else {
|
|
||||||
this.data = readData;
|
|
||||||
}
|
|
||||||
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tells this resource to release its cached data.
|
|
||||||
*
|
|
||||||
* If this resource was not lazy-loaded, this is a no-op.
|
|
||||||
*/
|
|
||||||
public void close() {
|
|
||||||
if (this.resourceProvider != null) {
|
|
||||||
this.data = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns if the data for this resource has been loaded into memory.
|
|
||||||
*
|
|
||||||
* @return true if data was loaded.
|
|
||||||
*/
|
|
||||||
public boolean isInitialized() {
|
|
||||||
return data != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the size of this resource in bytes.
|
|
||||||
*
|
|
||||||
* @return the size.
|
|
||||||
*/
|
|
||||||
public long getSize() {
|
|
||||||
if (data != null) {
|
|
||||||
return data.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
return cachedSize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public enum ManifestItemProperties implements ManifestProperties {
|
|
||||||
COVER_IMAGE("cover-image"),
|
|
||||||
MATHML("mathml"),
|
|
||||||
NAV("nav"),
|
|
||||||
REMOTE_RESOURCES("remote-resources"),
|
|
||||||
SCRIPTED("scripted"),
|
|
||||||
SVG("svg"),
|
|
||||||
SWITCH("switch");
|
|
||||||
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
ManifestItemProperties(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public enum ManifestItemRefProperties implements ManifestProperties {
|
|
||||||
PAGE_SPREAD_LEFT("page-spread-left"),
|
|
||||||
PAGE_SPREAD_RIGHT("page-spread-right");
|
|
||||||
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
ManifestItemRefProperties(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MediaType is used to tell the type of content a resource is.
|
|
||||||
*
|
|
||||||
* Examples of mediatypes are image/gif, text/css and application/xhtml+xml
|
|
||||||
*
|
|
||||||
* All allowed mediaTypes are maintained bye the MediaTypeService.
|
|
||||||
*
|
|
||||||
* @see MediaTypes
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*/
|
|
||||||
public class MediaType implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = -7256091153727506788L;
|
|
||||||
private final String name;
|
|
||||||
private final String defaultExtension;
|
|
||||||
private final Collection<String> extensions;
|
|
||||||
|
|
||||||
public MediaType(String name, String defaultExtension) {
|
|
||||||
this(name, defaultExtension, new String[]{defaultExtension});
|
|
||||||
}
|
|
||||||
|
|
||||||
public MediaType(String name, String defaultExtension,
|
|
||||||
String[] extensions) {
|
|
||||||
this(name, defaultExtension, Arrays.asList(extensions));
|
|
||||||
}
|
|
||||||
|
|
||||||
public int hashCode() {
|
|
||||||
if (name == null) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return name.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
public MediaType(String name, String defaultExtension,
|
|
||||||
Collection<String> mextensions) {
|
|
||||||
super();
|
|
||||||
this.name = name;
|
|
||||||
this.defaultExtension = defaultExtension;
|
|
||||||
this.extensions = mextensions;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public String getDefaultExtension() {
|
|
||||||
return defaultExtension;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Collection<String> getExtensions() {
|
|
||||||
return extensions;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equals(Object otherMediaType) {
|
|
||||||
if (!(otherMediaType instanceof MediaType)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return name.equals(((MediaType) otherMediaType).getName());
|
|
||||||
}
|
|
||||||
@SuppressWarnings("NullableProblems")
|
|
||||||
public String toString() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.util.StringUtil;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Manages mediatypes that are used by epubs
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*/
|
|
||||||
public class MediaTypes {
|
|
||||||
|
|
||||||
public static final MediaType XHTML = new MediaType("application/xhtml+xml",
|
|
||||||
".xhtml", new String[]{".htm", ".html", ".xhtml"});
|
|
||||||
public static final MediaType EPUB = new MediaType("application/epub+zip",
|
|
||||||
".epub");
|
|
||||||
public static final MediaType NCX = new MediaType("application/x-dtbncx+xml",
|
|
||||||
".ncx");
|
|
||||||
|
|
||||||
public static final MediaType JAVASCRIPT = new MediaType("text/javascript",
|
|
||||||
".js");
|
|
||||||
public static final MediaType CSS = new MediaType("text/css", ".css");
|
|
||||||
|
|
||||||
// images
|
|
||||||
public static final MediaType JPG = new MediaType("image/jpeg", ".jpg",
|
|
||||||
new String[]{".jpg", ".jpeg"});
|
|
||||||
public static final MediaType PNG = new MediaType("image/png", ".png");
|
|
||||||
public static final MediaType GIF = new MediaType("image/gif", ".gif");
|
|
||||||
|
|
||||||
public static final MediaType SVG = new MediaType("image/svg+xml", ".svg");
|
|
||||||
|
|
||||||
// fonts
|
|
||||||
public static final MediaType TTF = new MediaType(
|
|
||||||
"application/x-truetype-font", ".ttf");
|
|
||||||
public static final MediaType OPENTYPE = new MediaType(
|
|
||||||
"application/vnd.ms-opentype", ".otf");
|
|
||||||
public static final MediaType WOFF = new MediaType("application/font-woff",
|
|
||||||
".woff");
|
|
||||||
|
|
||||||
// audio
|
|
||||||
public static final MediaType MP3 = new MediaType("audio/mpeg", ".mp3");
|
|
||||||
public static final MediaType OGG = new MediaType("audio/ogg", ".ogg");
|
|
||||||
|
|
||||||
// video
|
|
||||||
public static final MediaType MP4 = new MediaType("video/mp4", ".mp4");
|
|
||||||
|
|
||||||
public static final MediaType SMIL = new MediaType("application/smil+xml",
|
|
||||||
".smil");
|
|
||||||
public static final MediaType XPGT = new MediaType(
|
|
||||||
"application/adobe-page-template+xml", ".xpgt");
|
|
||||||
public static final MediaType PLS = new MediaType("application/pls+xml",
|
|
||||||
".pls");
|
|
||||||
|
|
||||||
public static final MediaType[] mediaTypes = new MediaType[]{
|
|
||||||
XHTML, EPUB, JPG, PNG, GIF, CSS, SVG, TTF, NCX, XPGT, OPENTYPE, WOFF,
|
|
||||||
SMIL, PLS, JAVASCRIPT, MP3, MP4, OGG
|
|
||||||
};
|
|
||||||
|
|
||||||
public static final Map<String, MediaType> mediaTypesByName = new HashMap<>();
|
|
||||||
|
|
||||||
static {
|
|
||||||
for (MediaType mediaType : mediaTypes) {
|
|
||||||
mediaTypesByName.put(mediaType.getName(), mediaType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isBitmapImage(MediaType mediaType) {
|
|
||||||
return mediaType == JPG || mediaType == PNG || mediaType == GIF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the MediaType based on the file extension.
|
|
||||||
* Null of no matching extension found.
|
|
||||||
*
|
|
||||||
* @param filename filename
|
|
||||||
* @return the MediaType based on the file extension.
|
|
||||||
*/
|
|
||||||
public static MediaType determineMediaType(String filename) {
|
|
||||||
for (MediaType mediaType : mediaTypesByName.values()) {
|
|
||||||
for (String extension : mediaType.getExtensions()) {
|
|
||||||
if (StringUtil.endsWithIgnoreCase(filename, extension)) {
|
|
||||||
return mediaType;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static MediaType getMediaTypeByName(String mediaTypeName) {
|
|
||||||
return mediaTypesByName.get(mediaTypeName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,340 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.Constants;
|
|
||||||
import me.ag2s.epublib.util.IOUtil;
|
|
||||||
import me.ag2s.epublib.util.StringUtil;
|
|
||||||
import me.ag2s.epublib.util.commons.io.XmlStreamReader;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a resource that is part of the epub.
|
|
||||||
* A resource can be a html file, image, xml, etc.
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class Resource implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1043946707835004037L;
|
|
||||||
private String id;
|
|
||||||
private String title;
|
|
||||||
private String href;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private String properties;
|
|
||||||
protected final String originalHref;
|
|
||||||
private MediaType mediaType;
|
|
||||||
private String inputEncoding;
|
|
||||||
protected byte[] data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an empty Resource with the given href.
|
|
||||||
*
|
|
||||||
* Assumes that if the data is of a text type (html/css/etc) then the encoding will be UTF-8
|
|
||||||
*
|
|
||||||
* @param href The location of the resource within the epub. Example: "chapter1.html".
|
|
||||||
*/
|
|
||||||
public Resource(String href) {
|
|
||||||
this(null, new byte[0], href, MediaTypes.determineMediaType(href));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a Resource with the given data and MediaType.
|
|
||||||
* The href will be automatically generated.
|
|
||||||
*
|
|
||||||
* Assumes that if the data is of a text type (html/css/etc) then the encoding will be UTF-8
|
|
||||||
*
|
|
||||||
* @param data The Resource's contents
|
|
||||||
* @param mediaType The MediaType of the Resource
|
|
||||||
*/
|
|
||||||
public Resource(byte[] data, MediaType mediaType) {
|
|
||||||
this(null, data, null, mediaType);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a resource with the given data at the specified href.
|
|
||||||
* The MediaType will be determined based on the href extension.
|
|
||||||
*
|
|
||||||
* Assumes that if the data is of a text type (html/css/etc) then the encoding will be UTF-8
|
|
||||||
*
|
|
||||||
* @see MediaTypes#determineMediaType(String)
|
|
||||||
*
|
|
||||||
* @param data The Resource's contents
|
|
||||||
* @param href The location of the resource within the epub. Example: "chapter1.html".
|
|
||||||
*/
|
|
||||||
public Resource(byte[] data, String href) {
|
|
||||||
this(null, data, href, MediaTypes.determineMediaType(href),
|
|
||||||
Constants.CHARACTER_ENCODING);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a resource with the data from the given Reader at the specified href.
|
|
||||||
* The MediaType will be determined based on the href extension.
|
|
||||||
*
|
|
||||||
* @see MediaTypes#determineMediaType(String)
|
|
||||||
*
|
|
||||||
* @param in The Resource's contents
|
|
||||||
* @param href The location of the resource within the epub. Example: "cover.jpg".
|
|
||||||
*/
|
|
||||||
public Resource(Reader in, String href) throws IOException {
|
|
||||||
this(null, IOUtil.toByteArray(in, Constants.CHARACTER_ENCODING), href,
|
|
||||||
MediaTypes.determineMediaType(href),
|
|
||||||
Constants.CHARACTER_ENCODING);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a resource with the data from the given InputStream at the specified href.
|
|
||||||
* The MediaType will be determined based on the href extension.
|
|
||||||
*
|
|
||||||
* @see MediaTypes#determineMediaType(String)
|
|
||||||
*
|
|
||||||
* Assumes that if the data is of a text type (html/css/etc) then the encoding will be UTF-8
|
|
||||||
*
|
|
||||||
* It is recommended to us the {@link #Resource(Reader, String)} method for creating textual
|
|
||||||
* (html/css/etc) resources to prevent encoding problems.
|
|
||||||
* Use this method only for binary Resources like images, fonts, etc.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param in The Resource's contents
|
|
||||||
* @param href The location of the resource within the epub. Example: "cover.jpg".
|
|
||||||
*/
|
|
||||||
public Resource(InputStream in, String href) throws IOException {
|
|
||||||
this(null, IOUtil.toByteArray(in), href,
|
|
||||||
MediaTypes.determineMediaType(href));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a resource with the given id, data, mediatype at the specified href.
|
|
||||||
* Assumes that if the data is of a text type (html/css/etc) then the encoding will be UTF-8
|
|
||||||
*
|
|
||||||
* @param id The id of the Resource. Internal use only. Will be auto-generated if it has a null-value.
|
|
||||||
* @param data The Resource's contents
|
|
||||||
* @param href The location of the resource within the epub. Example: "chapter1.html".
|
|
||||||
* @param mediaType The resources MediaType
|
|
||||||
*/
|
|
||||||
public Resource(String id, byte[] data, String href, MediaType mediaType) {
|
|
||||||
this(id, data, href, mediaType, Constants.CHARACTER_ENCODING);
|
|
||||||
}
|
|
||||||
public Resource(String id, byte[] data, String href, String originalHref, MediaType mediaType) {
|
|
||||||
this(id, data, href, originalHref, mediaType, Constants.CHARACTER_ENCODING);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a resource with the given id, data, mediatype at the specified href.
|
|
||||||
* If the data is of a text type (html/css/etc) then it will use the given inputEncoding.
|
|
||||||
*
|
|
||||||
* @param id The id of the Resource. Internal use only. Will be auto-generated if it has a null-value.
|
|
||||||
* @param data The Resource's contents
|
|
||||||
* @param href The location of the resource within the epub. Example: "chapter1.html".
|
|
||||||
* @param mediaType The resources MediaType
|
|
||||||
* @param inputEncoding If the data is of a text type (html/css/etc) then it will use the given inputEncoding.
|
|
||||||
*/
|
|
||||||
public Resource(String id, byte[] data, String href, MediaType mediaType,
|
|
||||||
String inputEncoding) {
|
|
||||||
this.id = id;
|
|
||||||
this.href = href;
|
|
||||||
this.originalHref = href;
|
|
||||||
this.mediaType = mediaType;
|
|
||||||
this.inputEncoding = inputEncoding;
|
|
||||||
this.data = data;
|
|
||||||
}
|
|
||||||
public Resource(String id, byte[] data, String href, String originalHref, MediaType mediaType,
|
|
||||||
String inputEncoding) {
|
|
||||||
this.id = id;
|
|
||||||
this.href = href;
|
|
||||||
this.originalHref = originalHref;
|
|
||||||
this.mediaType = mediaType;
|
|
||||||
this.inputEncoding = inputEncoding;
|
|
||||||
this.data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the contents of the Resource as an InputStream.
|
|
||||||
*
|
|
||||||
* @return The contents of the Resource.
|
|
||||||
*
|
|
||||||
* @throws IOException IOException
|
|
||||||
*/
|
|
||||||
public InputStream getInputStream() throws IOException {
|
|
||||||
return new ByteArrayInputStream(getData());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The contents of the resource as a byte[]
|
|
||||||
*
|
|
||||||
* @return The contents of the resource
|
|
||||||
*/
|
|
||||||
public byte[] getData() throws IOException {
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tells this resource to release its cached data.
|
|
||||||
*
|
|
||||||
* If this resource was not lazy-loaded, this is a no-op.
|
|
||||||
*/
|
|
||||||
public void close() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the data of the Resource.
|
|
||||||
* If the data is a of a different type then the original data then make sure to change the MediaType.
|
|
||||||
*
|
|
||||||
* @param data the data of the Resource
|
|
||||||
*/
|
|
||||||
public void setData(byte[] data) {
|
|
||||||
this.data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the size of this resource in bytes.
|
|
||||||
*
|
|
||||||
* @return the size.
|
|
||||||
*/
|
|
||||||
public long getSize() {
|
|
||||||
return data.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If the title is found by scanning the underlying html document then it is cached here.
|
|
||||||
*
|
|
||||||
* @return the title
|
|
||||||
*/
|
|
||||||
public String getTitle() {
|
|
||||||
return title;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the Resource's id: Make sure it is unique and a valid identifier.
|
|
||||||
*
|
|
||||||
* @param id Resource's id
|
|
||||||
*/
|
|
||||||
public void setId(String id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The resources Id.
|
|
||||||
*
|
|
||||||
* Must be both unique within all the resources of this book and a valid identifier.
|
|
||||||
* @return The resources Id.
|
|
||||||
*/
|
|
||||||
public String getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The location of the resource within the contents folder of the epub file.
|
|
||||||
*
|
|
||||||
* Example:<br/>
|
|
||||||
* images/cover.jpg<br/>
|
|
||||||
* content/chapter1.xhtml<br/>
|
|
||||||
*
|
|
||||||
* @return The location of the resource within the contents folder of the epub file.
|
|
||||||
*/
|
|
||||||
public String getHref() {
|
|
||||||
return href;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the Resource's href.
|
|
||||||
*
|
|
||||||
* @param href Resource's href.
|
|
||||||
*/
|
|
||||||
public void setHref(String href) {
|
|
||||||
this.href = href;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The character encoding of the resource.
|
|
||||||
* Is allowed to be null for non-text resources like images.
|
|
||||||
*
|
|
||||||
* @return The character encoding of the resource.
|
|
||||||
*/
|
|
||||||
public String getInputEncoding() {
|
|
||||||
return inputEncoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the Resource's input character encoding.
|
|
||||||
*
|
|
||||||
* @param encoding Resource's input character encoding.
|
|
||||||
*/
|
|
||||||
public void setInputEncoding(String encoding) {
|
|
||||||
this.inputEncoding = encoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the contents of the Resource as Reader.
|
|
||||||
*
|
|
||||||
* Does all sorts of smart things (courtesy of apache commons io XMLStreamREader) to handle encodings, byte order markers, etc.
|
|
||||||
*
|
|
||||||
* @return the contents of the Resource as Reader.
|
|
||||||
* @throws IOException IOException
|
|
||||||
*/
|
|
||||||
public Reader getReader() throws IOException {
|
|
||||||
return new XmlStreamReader(new ByteArrayInputStream(getData()),
|
|
||||||
getInputEncoding());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the hashCode of the Resource's href.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public int hashCode() {
|
|
||||||
return href.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see of the given resourceObject is a resource and whether its href is equal to this one.
|
|
||||||
*
|
|
||||||
* @return whether the given resourceObject is a resource and whether its href is equal to this one.
|
|
||||||
*/
|
|
||||||
public boolean equals(Object resourceObject) {
|
|
||||||
if (!(resourceObject instanceof Resource)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return href.equals(((Resource) resourceObject).getHref());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This resource's mediaType.
|
|
||||||
*
|
|
||||||
* @return This resource's mediaType.
|
|
||||||
*/
|
|
||||||
public MediaType getMediaType() {
|
|
||||||
return mediaType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMediaType(MediaType mediaType) {
|
|
||||||
this.mediaType = mediaType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTitle(String title) {
|
|
||||||
this.title = title;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getProperties() {
|
|
||||||
return properties;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProperties(String properties) {
|
|
||||||
this.properties = properties;
|
|
||||||
}
|
|
||||||
@SuppressWarnings("NullableProblems")
|
|
||||||
public String toString() {
|
|
||||||
return StringUtil.toString("id", id,
|
|
||||||
"title", title,
|
|
||||||
"encoding", inputEncoding,
|
|
||||||
"mediaType", mediaType,
|
|
||||||
"href", href,
|
|
||||||
"size", (data == null ? 0 : data.length));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
public class ResourceReference implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 2596967243557743048L;
|
|
||||||
|
|
||||||
protected Resource resource;
|
|
||||||
|
|
||||||
public ResourceReference(Resource resource) {
|
|
||||||
this.resource = resource;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Resource getResource() {
|
|
||||||
return resource;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Besides setting the resource it also sets the fragmentId to null.
|
|
||||||
*
|
|
||||||
* @param resource resource
|
|
||||||
*/
|
|
||||||
public void setResource(Resource resource) {
|
|
||||||
this.resource = resource;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The id of the reference referred to.
|
|
||||||
*
|
|
||||||
* null of the reference is null or has a null id itself.
|
|
||||||
*
|
|
||||||
* @return The id of the reference referred to.
|
|
||||||
*/
|
|
||||||
public String getResourceId() {
|
|
||||||
if (resource != null) {
|
|
||||||
return resource.getId();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,192 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The spine sections are the sections of the book in the order in which the book should be read.
|
|
||||||
*
|
|
||||||
* This contrasts with the Table of Contents sections which is an index into the Book's sections.
|
|
||||||
*
|
|
||||||
* @see TableOfContents
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*/
|
|
||||||
public class Spine implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 3878483958947357246L;
|
|
||||||
private Resource tocResource;
|
|
||||||
private List<SpineReference> spineReferences;
|
|
||||||
|
|
||||||
public Spine() {
|
|
||||||
this(new ArrayList<>());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a spine out of all the resources in the table of contents.
|
|
||||||
*
|
|
||||||
* @param tableOfContents tableOfContents
|
|
||||||
*/
|
|
||||||
public Spine(TableOfContents tableOfContents) {
|
|
||||||
this.spineReferences = createSpineReferences(
|
|
||||||
tableOfContents.getAllUniqueResources());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Spine(List<SpineReference> spineReferences) {
|
|
||||||
this.spineReferences = spineReferences;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<SpineReference> createSpineReferences(
|
|
||||||
Collection<Resource> resources) {
|
|
||||||
List<SpineReference> result = new ArrayList<>(
|
|
||||||
resources.size());
|
|
||||||
for (Resource resource : resources) {
|
|
||||||
result.add(new SpineReference(resource));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<SpineReference> getSpineReferences() {
|
|
||||||
return spineReferences;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSpineReferences(List<SpineReference> spineReferences) {
|
|
||||||
this.spineReferences = spineReferences;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the resource at the given index.
|
|
||||||
* Null if not found.
|
|
||||||
*
|
|
||||||
* @param index index
|
|
||||||
* @return the resource at the given index.
|
|
||||||
*/
|
|
||||||
public Resource getResource(int index) {
|
|
||||||
if (index < 0 || index >= spineReferences.size()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return spineReferences.get(index).getResource();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds the first resource that has the given resourceId.
|
|
||||||
*
|
|
||||||
* Null if not found.
|
|
||||||
*
|
|
||||||
* @param resourceId resourceId
|
|
||||||
* @return the first resource that has the given resourceId.
|
|
||||||
*/
|
|
||||||
public int findFirstResourceById(String resourceId) {
|
|
||||||
if (StringUtil.isBlank(resourceId)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < spineReferences.size(); i++) {
|
|
||||||
SpineReference spineReference = spineReferences.get(i);
|
|
||||||
if (resourceId.equals(spineReference.getResourceId())) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds the given spineReference to the spine references and returns it.
|
|
||||||
*
|
|
||||||
* @param spineReference spineReference
|
|
||||||
* @return the given spineReference
|
|
||||||
*/
|
|
||||||
public SpineReference addSpineReference(SpineReference spineReference) {
|
|
||||||
if (spineReferences == null) {
|
|
||||||
this.spineReferences = new ArrayList<>();
|
|
||||||
}
|
|
||||||
spineReferences.add(spineReference);
|
|
||||||
return spineReference;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds the given resource to the spine references and returns it.
|
|
||||||
*
|
|
||||||
* @return the given spineReference
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public SpineReference addResource(Resource resource) {
|
|
||||||
return addSpineReference(new SpineReference(resource));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The number of elements in the spine.
|
|
||||||
*
|
|
||||||
* @return The number of elements in the spine.
|
|
||||||
*/
|
|
||||||
public int size() {
|
|
||||||
return spineReferences.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* As per the epub file format the spine officially maintains a reference to the Table of Contents.
|
|
||||||
* The epubwriter will look for it here first, followed by some clever tricks to find it elsewhere if not found.
|
|
||||||
* Put it here to be sure of the expected behaviours.
|
|
||||||
*
|
|
||||||
* @param tocResource tocResource
|
|
||||||
*/
|
|
||||||
public void setTocResource(Resource tocResource) {
|
|
||||||
this.tocResource = tocResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The resource containing the XML for the tableOfContents.
|
|
||||||
* When saving an epub file this resource needs to be in this place.
|
|
||||||
*
|
|
||||||
* @return The resource containing the XML for the tableOfContents.
|
|
||||||
*/
|
|
||||||
public Resource getTocResource() {
|
|
||||||
return tocResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The position within the spine of the given resource.
|
|
||||||
*
|
|
||||||
* @param currentResource currentResource
|
|
||||||
* @return something < 0 if not found.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public int getResourceIndex(Resource currentResource) {
|
|
||||||
if (currentResource == null) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return getResourceIndex(currentResource.getHref());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The first position within the spine of a resource with the given href.
|
|
||||||
*
|
|
||||||
* @return something < 0 if not found.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public int getResourceIndex(String resourceHref) {
|
|
||||||
int result = -1;
|
|
||||||
if (StringUtil.isBlank(resourceHref)) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < spineReferences.size(); i++) {
|
|
||||||
if (resourceHref.equals(spineReferences.get(i).getResource().getHref())) {
|
|
||||||
result = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the spine has any references
|
|
||||||
* @return Whether the spine has any references
|
|
||||||
*/
|
|
||||||
public boolean isEmpty() {
|
|
||||||
return spineReferences.isEmpty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
package me.ag2s.epublib.domain;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An item in the Table of Contents.
|
|
||||||
*
|
|
||||||
* @see TableOfContents
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*/
|
|
||||||
public class TOCReference extends TitledResourceReference
|
|
||||||
implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 5787958246077042456L;
|
|
||||||
private List<TOCReference> children;
|
|
||||||
private static final Comparator<TOCReference> COMPARATOR_BY_TITLE_IGNORE_CASE = (tocReference1, tocReference2) -> String.CASE_INSENSITIVE_ORDER.compare(tocReference1.getTitle(), tocReference2.getTitle());
|
|
||||||
@Deprecated
|
|
||||||
public TOCReference() {
|
|
||||||
this(null, null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public TOCReference(String name, Resource resource) {
|
|
||||||
this(name, resource, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public TOCReference(String name, Resource resource, String fragmentId) {
|
|
||||||
this(name, resource, fragmentId, new ArrayList<>());
|
|
||||||
}
|
|
||||||
|
|
||||||
public TOCReference(String title, Resource resource, String fragmentId,
|
|
||||||
List<TOCReference> children) {
|
|
||||||
super(resource, title, fragmentId);
|
|
||||||
this.children = children;
|
|
||||||
}
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public static Comparator<TOCReference> getComparatorByTitleIgnoreCase() {
|
|
||||||
return COMPARATOR_BY_TITLE_IGNORE_CASE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<TOCReference> getChildren() {
|
|
||||||
return children;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TOCReference addChildSection(TOCReference childSection) {
|
|
||||||
this.children.add(childSection);
|
|
||||||
return childSection;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setChildren(List<TOCReference> children) {
|
|
||||||
this.children = children;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
package me.ag2s.epublib.epub;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.domain.EpubBook;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A book processor that combines several other bookprocessors
|
|
||||||
* <p>
|
|
||||||
* Fixes coverpage/coverimage.
|
|
||||||
* Cleans up the XHTML.
|
|
||||||
*
|
|
||||||
* @author paul.siegmann
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused declaration")
|
|
||||||
public class BookProcessorPipeline implements BookProcessor {
|
|
||||||
|
|
||||||
private static final String TAG= BookProcessorPipeline.class.getName();
|
|
||||||
private List<BookProcessor> bookProcessors;
|
|
||||||
|
|
||||||
public BookProcessorPipeline() {
|
|
||||||
this(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BookProcessorPipeline(List<BookProcessor> bookProcessingPipeline) {
|
|
||||||
this.bookProcessors = bookProcessingPipeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EpubBook processBook(EpubBook book) {
|
|
||||||
if (bookProcessors == null) {
|
|
||||||
return book;
|
|
||||||
}
|
|
||||||
for (BookProcessor bookProcessor : bookProcessors) {
|
|
||||||
try {
|
|
||||||
book = bookProcessor.processBook(book);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(TAG, e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return book;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addBookProcessor(BookProcessor bookProcessor) {
|
|
||||||
if (this.bookProcessors == null) {
|
|
||||||
bookProcessors = new ArrayList<>();
|
|
||||||
}
|
|
||||||
this.bookProcessors.add(bookProcessor);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addBookProcessors(Collection<BookProcessor> bookProcessors) {
|
|
||||||
if (this.bookProcessors == null) {
|
|
||||||
this.bookProcessors = new ArrayList<>();
|
|
||||||
}
|
|
||||||
this.bookProcessors.addAll(bookProcessors);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public List<BookProcessor> getBookProcessors() {
|
|
||||||
return bookProcessors;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setBookProcessingPipeline(
|
|
||||||
List<BookProcessor> bookProcessingPipeline) {
|
|
||||||
this.bookProcessors = bookProcessingPipeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,190 +0,0 @@
|
|||||||
package me.ag2s.epublib.epub;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlSerializer;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.OutputStreamWriter;
|
|
||||||
import java.io.Writer;
|
|
||||||
import java.util.zip.CRC32;
|
|
||||||
import java.util.zip.ZipEntry;
|
|
||||||
import java.util.zip.ZipOutputStream;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.domain.EpubBook;
|
|
||||||
import me.ag2s.epublib.domain.MediaTypes;
|
|
||||||
import me.ag2s.epublib.domain.Resource;
|
|
||||||
import me.ag2s.epublib.util.IOUtil;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates an epub file. Not thread-safe, single use object.
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*/
|
|
||||||
public class EpubWriter {
|
|
||||||
|
|
||||||
private static final String TAG= EpubWriter.class.getName();
|
|
||||||
|
|
||||||
// package
|
|
||||||
static final String EMPTY_NAMESPACE_PREFIX = "";
|
|
||||||
|
|
||||||
private BookProcessor bookProcessor;
|
|
||||||
|
|
||||||
public EpubWriter() {
|
|
||||||
this(BookProcessor.IDENTITY_BOOKPROCESSOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public EpubWriter(BookProcessor bookProcessor) {
|
|
||||||
this.bookProcessor = bookProcessor;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void write(EpubBook book, OutputStream out) throws IOException {
|
|
||||||
book = processBook(book);
|
|
||||||
ZipOutputStream resultStream = new ZipOutputStream(out);
|
|
||||||
writeMimeType(resultStream);
|
|
||||||
writeContainer(resultStream);
|
|
||||||
initTOCResource(book);
|
|
||||||
writeResources(book, resultStream);
|
|
||||||
writePackageDocument(book, resultStream);
|
|
||||||
resultStream.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
private EpubBook processBook(EpubBook book) {
|
|
||||||
if (bookProcessor != null) {
|
|
||||||
book = bookProcessor.processBook(book);
|
|
||||||
}
|
|
||||||
return book;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initTOCResource(EpubBook book) {
|
|
||||||
Resource tocResource;
|
|
||||||
try {
|
|
||||||
if (book.isEpub3()) {
|
|
||||||
tocResource = NCXDocumentV3.createNCXResource(book);
|
|
||||||
} else {
|
|
||||||
tocResource = NCXDocumentV2.createNCXResource(book);
|
|
||||||
}
|
|
||||||
|
|
||||||
Resource currentTocResource = book.getSpine().getTocResource();
|
|
||||||
if (currentTocResource != null) {
|
|
||||||
book.getResources().remove(currentTocResource.getHref());
|
|
||||||
}
|
|
||||||
book.getSpine().setTocResource(tocResource);
|
|
||||||
book.getResources().add(tocResource);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Log.e(TAG,
|
|
||||||
"Error writing table of contents: "
|
|
||||||
+ ex.getClass().getName() + ": " + ex.getMessage(), ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void writeResources(EpubBook book, ZipOutputStream resultStream) {
|
|
||||||
for (Resource resource : book.getResources().getAll()) {
|
|
||||||
writeResource(resource, resultStream);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes the resource to the resultStream.
|
|
||||||
*
|
|
||||||
* @param resource resource
|
|
||||||
* @param resultStream resultStream
|
|
||||||
*/
|
|
||||||
private void writeResource(Resource resource, ZipOutputStream resultStream) {
|
|
||||||
if (resource == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
resultStream.putNextEntry(new ZipEntry("OEBPS/" + resource.getHref()));
|
|
||||||
InputStream inputStream = resource.getInputStream();
|
|
||||||
|
|
||||||
IOUtil.copy(inputStream, resultStream);
|
|
||||||
inputStream.close();
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(TAG,e.getMessage(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void writePackageDocument(EpubBook book, ZipOutputStream resultStream)
|
|
||||||
throws IOException {
|
|
||||||
resultStream.putNextEntry(new ZipEntry("OEBPS/content.opf"));
|
|
||||||
XmlSerializer xmlSerializer = EpubProcessorSupport
|
|
||||||
.createXmlSerializer(resultStream);
|
|
||||||
PackageDocumentWriter.write(this, xmlSerializer, book);
|
|
||||||
xmlSerializer.flush();
|
|
||||||
// String resultAsString = result.toString();
|
|
||||||
// resultStream.write(resultAsString.getBytes(Constants.ENCODING));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes the META-INF/container.xml file.
|
|
||||||
*
|
|
||||||
* @param resultStream resultStream
|
|
||||||
* @throws IOException IOException
|
|
||||||
*/
|
|
||||||
private void writeContainer(ZipOutputStream resultStream) throws IOException {
|
|
||||||
resultStream.putNextEntry(new ZipEntry("META-INF/container.xml"));
|
|
||||||
Writer out = new OutputStreamWriter(resultStream);
|
|
||||||
out.write("<?xml version=\"1.0\"?>\n");
|
|
||||||
out.write(
|
|
||||||
"<container version=\"1.0\" xmlns=\"urn:oasis:names:tc:opendocument:xmlns:container\">\n");
|
|
||||||
out.write("\t<rootfiles>\n");
|
|
||||||
out.write(
|
|
||||||
"\t\t<rootfile full-path=\"OEBPS/content.opf\" media-type=\"application/oebps-package+xml\"/>\n");
|
|
||||||
out.write("\t</rootfiles>\n");
|
|
||||||
out.write("</container>");
|
|
||||||
out.flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stores the mimetype as an uncompressed file in the ZipOutputStream.
|
|
||||||
*
|
|
||||||
* @param resultStream resultStream
|
|
||||||
* @throws IOException IOException
|
|
||||||
*/
|
|
||||||
private void writeMimeType(ZipOutputStream resultStream) throws IOException {
|
|
||||||
ZipEntry mimetypeZipEntry = new ZipEntry("mimetype");
|
|
||||||
mimetypeZipEntry.setMethod(ZipEntry.STORED);
|
|
||||||
byte[] mimetypeBytes = MediaTypes.EPUB.getName().getBytes();
|
|
||||||
mimetypeZipEntry.setSize(mimetypeBytes.length);
|
|
||||||
mimetypeZipEntry.setCrc(calculateCrc(mimetypeBytes));
|
|
||||||
resultStream.putNextEntry(mimetypeZipEntry);
|
|
||||||
resultStream.write(mimetypeBytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private long calculateCrc(byte[] data) {
|
|
||||||
CRC32 crc = new CRC32();
|
|
||||||
crc.update(data);
|
|
||||||
return crc.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
String getNcxId() {
|
|
||||||
return "ncx";
|
|
||||||
}
|
|
||||||
|
|
||||||
String getNcxHref() {
|
|
||||||
return "toc.ncx";
|
|
||||||
}
|
|
||||||
|
|
||||||
String getNcxMediaType() {
|
|
||||||
return MediaTypes.NCX.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public BookProcessor getBookProcessor() {
|
|
||||||
return bookProcessor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public void setBookProcessor(BookProcessor bookProcessor) {
|
|
||||||
this.bookProcessor = bookProcessor;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
package me.ag2s.epublib.epub;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Functionality shared by the PackageDocumentReader and the PackageDocumentWriter
|
|
||||||
*
|
|
||||||
* @author paul
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class PackageDocumentBase {
|
|
||||||
|
|
||||||
public static final String BOOK_ID_ID = "duokan-book-id";
|
|
||||||
public static final String NAMESPACE_OPF = "http://www.idpf.org/2007/opf";
|
|
||||||
public static final String NAMESPACE_DUBLIN_CORE = "http://purl.org/dc/elements/1.1/";
|
|
||||||
public static final String PREFIX_DUBLIN_CORE = "dc";
|
|
||||||
//public static final String PREFIX_OPF = "opf";
|
|
||||||
//在EPUB3标准中,packge前面没有opf头,一些epub阅读器也不支持opf头。
|
|
||||||
//Some Epub Reader not reconize op:packge,So just let it empty;
|
|
||||||
public static final String PREFIX_OPF = "";
|
|
||||||
//添加 version 变量来区分Epub文件的版本
|
|
||||||
//Add the version field to distinguish the version of EPUB file
|
|
||||||
public static final String version="version";
|
|
||||||
public static final String dateFormat = "yyyy-MM-dd";
|
|
||||||
|
|
||||||
protected interface DCTags {
|
|
||||||
|
|
||||||
String title = "title";
|
|
||||||
String creator = "creator";
|
|
||||||
String subject = "subject";
|
|
||||||
String description = "description";
|
|
||||||
String publisher = "publisher";
|
|
||||||
String contributor = "contributor";
|
|
||||||
String date = "date";
|
|
||||||
String type = "type";
|
|
||||||
String format = "format";
|
|
||||||
String identifier = "identifier";
|
|
||||||
String source = "source";
|
|
||||||
String language = "language";
|
|
||||||
String relation = "relation";
|
|
||||||
String coverage = "coverage";
|
|
||||||
String rights = "rights";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected interface DCAttributes {
|
|
||||||
|
|
||||||
String scheme = "scheme";
|
|
||||||
String id = "id";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected interface OPFTags {
|
|
||||||
|
|
||||||
String metadata = "metadata";
|
|
||||||
String meta = "meta";
|
|
||||||
String manifest = "manifest";
|
|
||||||
String packageTag = "package";
|
|
||||||
String itemref = "itemref";
|
|
||||||
String spine = "spine";
|
|
||||||
String reference = "reference";
|
|
||||||
String guide = "guide";
|
|
||||||
String item = "item";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected interface OPFAttributes {
|
|
||||||
|
|
||||||
String uniqueIdentifier = "unique-identifier";
|
|
||||||
String idref = "idref";
|
|
||||||
String name = "name";
|
|
||||||
String content = "content";
|
|
||||||
String type = "type";
|
|
||||||
String href = "href";
|
|
||||||
String linear = "linear";
|
|
||||||
String event = "event";
|
|
||||||
String role = "role";
|
|
||||||
String file_as = "file-as";
|
|
||||||
String id = "id";
|
|
||||||
String media_type = "media-type";
|
|
||||||
String title = "title";
|
|
||||||
String toc = "toc";
|
|
||||||
String version = "version";
|
|
||||||
String scheme = "scheme";
|
|
||||||
String property = "property";
|
|
||||||
//add for epub3
|
|
||||||
/**
|
|
||||||
* add for epub3
|
|
||||||
*/
|
|
||||||
String properties="properties";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected interface OPFValues {
|
|
||||||
|
|
||||||
String meta_cover = "cover";
|
|
||||||
String reference_cover = "cover";
|
|
||||||
String no = "no";
|
|
||||||
String generator = "generator";
|
|
||||||
String duokan = "duokan-body-font";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,187 +0,0 @@
|
|||||||
package me.ag2s.epublib.epub;
|
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlSerializer;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.xml.namespace.QName;
|
|
||||||
|
|
||||||
import me.ag2s.epublib.Constants;
|
|
||||||
import me.ag2s.epublib.domain.Author;
|
|
||||||
import me.ag2s.epublib.domain.Date;
|
|
||||||
import me.ag2s.epublib.domain.EpubBook;
|
|
||||||
import me.ag2s.epublib.domain.Identifier;
|
|
||||||
import me.ag2s.epublib.util.StringUtil;
|
|
||||||
|
|
||||||
public class PackageDocumentMetadataWriter extends PackageDocumentBase {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes the book's metadata.
|
|
||||||
*
|
|
||||||
* @param book book
|
|
||||||
* @param serializer serializer
|
|
||||||
* @throws IOException IOException
|
|
||||||
* @throws IllegalStateException IllegalStateException
|
|
||||||
* @throws IllegalArgumentException IllegalArgumentException
|
|
||||||
*/
|
|
||||||
public static void writeMetaData(EpubBook book, XmlSerializer serializer)
|
|
||||||
throws IllegalArgumentException, IllegalStateException, IOException {
|
|
||||||
serializer.startTag(NAMESPACE_OPF, OPFTags.metadata);
|
|
||||||
serializer.setPrefix(PREFIX_DUBLIN_CORE, NAMESPACE_DUBLIN_CORE);
|
|
||||||
serializer.setPrefix(PREFIX_OPF, NAMESPACE_OPF);
|
|
||||||
|
|
||||||
writeIdentifiers(book.getMetadata().getIdentifiers(), serializer);
|
|
||||||
writeSimpleMetdataElements(DCTags.title, book.getMetadata().getTitles(),
|
|
||||||
serializer);
|
|
||||||
writeSimpleMetdataElements(DCTags.subject, book.getMetadata().getSubjects(),
|
|
||||||
serializer);
|
|
||||||
writeSimpleMetdataElements(DCTags.description,
|
|
||||||
book.getMetadata().getDescriptions(), serializer);
|
|
||||||
writeSimpleMetdataElements(DCTags.publisher,
|
|
||||||
book.getMetadata().getPublishers(), serializer);
|
|
||||||
writeSimpleMetdataElements(DCTags.type, book.getMetadata().getTypes(),
|
|
||||||
serializer);
|
|
||||||
writeSimpleMetdataElements(DCTags.rights, book.getMetadata().getRights(),
|
|
||||||
serializer);
|
|
||||||
|
|
||||||
// write authors
|
|
||||||
for (Author author : book.getMetadata().getAuthors()) {
|
|
||||||
serializer.startTag(NAMESPACE_DUBLIN_CORE, DCTags.creator);
|
|
||||||
serializer.attribute(NAMESPACE_OPF, OPFAttributes.role,
|
|
||||||
author.getRelator().getCode());
|
|
||||||
serializer.attribute(NAMESPACE_OPF, OPFAttributes.file_as,
|
|
||||||
author.getLastname() + ", " + author.getFirstname());
|
|
||||||
serializer.text(author.getFirstname() + " " + author.getLastname());
|
|
||||||
serializer.endTag(NAMESPACE_DUBLIN_CORE, DCTags.creator);
|
|
||||||
}
|
|
||||||
|
|
||||||
// write contributors
|
|
||||||
for (Author author : book.getMetadata().getContributors()) {
|
|
||||||
serializer.startTag(NAMESPACE_DUBLIN_CORE, DCTags.contributor);
|
|
||||||
serializer.attribute(NAMESPACE_OPF, OPFAttributes.role,
|
|
||||||
author.getRelator().getCode());
|
|
||||||
serializer.attribute(NAMESPACE_OPF, OPFAttributes.file_as,
|
|
||||||
author.getLastname() + ", " + author.getFirstname());
|
|
||||||
serializer.text(author.getFirstname() + " " + author.getLastname());
|
|
||||||
serializer.endTag(NAMESPACE_DUBLIN_CORE, DCTags.contributor);
|
|
||||||
}
|
|
||||||
|
|
||||||
// write dates
|
|
||||||
for (Date date : book.getMetadata().getDates()) {
|
|
||||||
serializer.startTag(NAMESPACE_DUBLIN_CORE, DCTags.date);
|
|
||||||
if (date.getEvent() != null) {
|
|
||||||
serializer.attribute(NAMESPACE_OPF, OPFAttributes.event,
|
|
||||||
date.getEvent().toString());
|
|
||||||
}
|
|
||||||
serializer.text(date.getValue());
|
|
||||||
serializer.endTag(NAMESPACE_DUBLIN_CORE, DCTags.date);
|
|
||||||
}
|
|
||||||
|
|
||||||
// write language
|
|
||||||
if (StringUtil.isNotBlank(book.getMetadata().getLanguage())) {
|
|
||||||
serializer.startTag(NAMESPACE_DUBLIN_CORE, "language");
|
|
||||||
serializer.text(book.getMetadata().getLanguage());
|
|
||||||
serializer.endTag(NAMESPACE_DUBLIN_CORE, "language");
|
|
||||||
}
|
|
||||||
|
|
||||||
// write other properties
|
|
||||||
if (book.getMetadata().getOtherProperties() != null) {
|
|
||||||
for (Map.Entry<QName, String> mapEntry : book.getMetadata()
|
|
||||||
.getOtherProperties().entrySet()) {
|
|
||||||
serializer.startTag(mapEntry.getKey().getNamespaceURI(), OPFTags.meta);
|
|
||||||
serializer.attribute(EpubWriter.EMPTY_NAMESPACE_PREFIX,
|
|
||||||
OPFAttributes.property, mapEntry.getKey().getLocalPart());
|
|
||||||
serializer.text(mapEntry.getValue());
|
|
||||||
serializer.endTag(mapEntry.getKey().getNamespaceURI(), OPFTags.meta);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// write coverimage
|
|
||||||
if (book.getCoverImage() != null) { // write the cover image
|
|
||||||
serializer.startTag(NAMESPACE_OPF, OPFTags.meta);
|
|
||||||
serializer
|
|
||||||
.attribute(EpubWriter.EMPTY_NAMESPACE_PREFIX, OPFAttributes.name,
|
|
||||||
OPFValues.meta_cover);
|
|
||||||
serializer
|
|
||||||
.attribute(EpubWriter.EMPTY_NAMESPACE_PREFIX, OPFAttributes.content,
|
|
||||||
book.getCoverImage().getId());
|
|
||||||
serializer.endTag(NAMESPACE_OPF, OPFTags.meta);
|
|
||||||
}
|
|
||||||
|
|
||||||
// write generator
|
|
||||||
serializer.startTag(NAMESPACE_OPF, OPFTags.meta);
|
|
||||||
serializer.attribute(EpubWriter.EMPTY_NAMESPACE_PREFIX, OPFAttributes.name,
|
|
||||||
OPFValues.generator);
|
|
||||||
serializer
|
|
||||||
.attribute(EpubWriter.EMPTY_NAMESPACE_PREFIX, OPFAttributes.content,
|
|
||||||
Constants.EPUB_GENERATOR_NAME);
|
|
||||||
serializer.endTag(NAMESPACE_OPF, OPFTags.meta);
|
|
||||||
|
|
||||||
// write duokan
|
|
||||||
serializer.startTag(NAMESPACE_OPF, OPFTags.meta);
|
|
||||||
serializer.attribute(EpubWriter.EMPTY_NAMESPACE_PREFIX, OPFAttributes.name,
|
|
||||||
OPFValues.duokan);
|
|
||||||
serializer
|
|
||||||
.attribute(EpubWriter.EMPTY_NAMESPACE_PREFIX, OPFAttributes.content,
|
|
||||||
Constants.EPUB_DUOKAN_NAME);
|
|
||||||
serializer.endTag(NAMESPACE_OPF, OPFTags.meta);
|
|
||||||
|
|
||||||
serializer.endTag(NAMESPACE_OPF, OPFTags.metadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void writeSimpleMetdataElements(String tagName,
|
|
||||||
List<String> values, XmlSerializer serializer)
|
|
||||||
throws IllegalArgumentException, IllegalStateException, IOException {
|
|
||||||
for (String value : values) {
|
|
||||||
if (StringUtil.isBlank(value)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
serializer.startTag(NAMESPACE_DUBLIN_CORE, tagName);
|
|
||||||
serializer.text(value);
|
|
||||||
serializer.endTag(NAMESPACE_DUBLIN_CORE, tagName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes out the complete list of Identifiers to the package document.
|
|
||||||
* The first identifier for which the bookId is true is made the bookId identifier.
|
|
||||||
* If no identifier has bookId == true then the first bookId identifier is written as the primary.
|
|
||||||
*
|
|
||||||
* @param identifiers identifiers
|
|
||||||
* @param serializer serializer
|
|
||||||
* @throws IllegalStateException e
|
|
||||||
* @throws IllegalArgumentException e
|
|
||||||
* @
|
|
||||||
*/
|
|
||||||
private static void writeIdentifiers(List<Identifier> identifiers,
|
|
||||||
XmlSerializer serializer)
|
|
||||||
throws IllegalArgumentException, IllegalStateException, IOException {
|
|
||||||
Identifier bookIdIdentifier = Identifier.getBookIdIdentifier(identifiers);
|
|
||||||
if (bookIdIdentifier == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
serializer.startTag(NAMESPACE_DUBLIN_CORE, DCTags.identifier);
|
|
||||||
serializer.attribute(EpubWriter.EMPTY_NAMESPACE_PREFIX, DCAttributes.id,
|
|
||||||
BOOK_ID_ID);
|
|
||||||
serializer.attribute(NAMESPACE_OPF, OPFAttributes.scheme,
|
|
||||||
bookIdIdentifier.getScheme());
|
|
||||||
serializer.text(bookIdIdentifier.getValue());
|
|
||||||
serializer.endTag(NAMESPACE_DUBLIN_CORE, DCTags.identifier);
|
|
||||||
|
|
||||||
for (Identifier identifier : identifiers.subList(1, identifiers.size())) {
|
|
||||||
if (identifier == bookIdIdentifier) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
serializer.startTag(NAMESPACE_DUBLIN_CORE, DCTags.identifier);
|
|
||||||
serializer.attribute(NAMESPACE_OPF, "scheme", identifier.getScheme());
|
|
||||||
serializer.text(identifier.getValue());
|
|
||||||
serializer.endTag(NAMESPACE_DUBLIN_CORE, DCTags.identifier);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
package me.ag2s.epublib.util;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class CollectionUtil {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps an Enumeration around an Iterator
|
|
||||||
* @author paul.siegmann
|
|
||||||
*
|
|
||||||
* @param <T>
|
|
||||||
*/
|
|
||||||
private static class IteratorEnumerationAdapter<T> implements Enumeration<T> {
|
|
||||||
|
|
||||||
private final Iterator<T> iterator;
|
|
||||||
|
|
||||||
public IteratorEnumerationAdapter(Iterator<T> iter) {
|
|
||||||
this.iterator = iter;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasMoreElements() {
|
|
||||||
return iterator.hasNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public T nextElement() {
|
|
||||||
return iterator.next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an Enumeration out of the given Iterator.
|
|
||||||
* @param <T> g
|
|
||||||
* @param it g
|
|
||||||
* @return an Enumeration created out of the given Iterator.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public static <T> Enumeration<T> createEnumerationFromIterator(
|
|
||||||
Iterator<T> it) {
|
|
||||||
return new IteratorEnumerationAdapter<>(it);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the first element of the list, null if the list is null or empty.
|
|
||||||
*
|
|
||||||
* @param <T> f
|
|
||||||
* @param list f
|
|
||||||
* @return the first element of the list, null if the list is null or empty.
|
|
||||||
*/
|
|
||||||
public static <T> T first(List<T> list) {
|
|
||||||
if (list == null || list.isEmpty()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return list.get(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the given collection is null or has no elements.
|
|
||||||
*
|
|
||||||
* @param collection g
|
|
||||||
* @return Whether the given collection is null or has no elements.
|
|
||||||
*/
|
|
||||||
public static boolean isEmpty(Collection<?> collection) {
|
|
||||||
return collection == null || collection.isEmpty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,363 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
package me.ag2s.epublib.util.zip;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.zip.ZipOutputStream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class represents a member of a zip archive. ZipFile and
|
|
||||||
* ZipInputStream will give you instances of this class as information
|
|
||||||
* about the members in an archive. On the other hand ZipOutputStream
|
|
||||||
* needs an instance of this class to create a new member.
|
|
||||||
*
|
|
||||||
* @author Jochen Hoenicke
|
|
||||||
*/
|
|
||||||
public class AndroidZipEntry implements ZipConstants, Cloneable {
|
|
||||||
private static final int KNOWN_SIZE = 1;
|
|
||||||
private static final int KNOWN_CSIZE = 2;
|
|
||||||
private static final int KNOWN_CRC = 4;
|
|
||||||
private static final int KNOWN_TIME = 8;
|
|
||||||
|
|
||||||
private static Calendar cal;
|
|
||||||
|
|
||||||
private final String name;
|
|
||||||
private final int nameLen;
|
|
||||||
private int size;
|
|
||||||
private int compressedSize;
|
|
||||||
private int crc;
|
|
||||||
private int dostime;
|
|
||||||
private short known = 0;
|
|
||||||
private short method = -1;
|
|
||||||
private byte[] extra = null;
|
|
||||||
private String comment = null;
|
|
||||||
|
|
||||||
int flags; /* used by ZipOutputStream */
|
|
||||||
int offset; /* used by ZipFile and ZipOutputStream */
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compression method. This method doesn't compress at all.
|
|
||||||
*/
|
|
||||||
public final static int STORED = 0;
|
|
||||||
/**
|
|
||||||
* Compression method. This method uses the Deflater.
|
|
||||||
*/
|
|
||||||
public final static int DEFLATED = 8;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a zip entry with the given name.
|
|
||||||
*
|
|
||||||
* @param name the name. May include directory components separated
|
|
||||||
* by '/'.
|
|
||||||
* @throws NullPointerException when name is null.
|
|
||||||
* @throws IllegalArgumentException when name is bigger then 65535 chars.
|
|
||||||
*/
|
|
||||||
public AndroidZipEntry(String name, int nameLen) {
|
|
||||||
//int length = name.length();
|
|
||||||
this.nameLen = nameLen;
|
|
||||||
if (nameLen > 65535)
|
|
||||||
throw new IllegalArgumentException("name length is " + nameLen);
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a copy of the given zip entry.
|
|
||||||
*
|
|
||||||
* @param e the entry to copy.
|
|
||||||
*/
|
|
||||||
public AndroidZipEntry(AndroidZipEntry e) {
|
|
||||||
name = e.name;
|
|
||||||
nameLen = e.nameLen;
|
|
||||||
known = e.known;
|
|
||||||
size = e.size;
|
|
||||||
compressedSize = e.compressedSize;
|
|
||||||
crc = e.crc;
|
|
||||||
dostime = e.dostime;
|
|
||||||
method = e.method;
|
|
||||||
extra = e.extra;
|
|
||||||
comment = e.comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
final void setDOSTime(int dostime) {
|
|
||||||
this.dostime = dostime;
|
|
||||||
known |= KNOWN_TIME;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int getDOSTime() {
|
|
||||||
if ((known & KNOWN_TIME) == 0)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return dostime;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a copy of this zip entry.
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Clones the entry.
|
|
||||||
*/
|
|
||||||
public Object clone() {
|
|
||||||
try {
|
|
||||||
// The JCL says that the `extra' field is also copied.
|
|
||||||
AndroidZipEntry clone = (AndroidZipEntry) super.clone();
|
|
||||||
if (extra != null)
|
|
||||||
clone.extra = (byte[]) extra.clone();
|
|
||||||
return clone;
|
|
||||||
} catch (CloneNotSupportedException ex) {
|
|
||||||
throw new InternalError();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the entry name. The path components in the entry are
|
|
||||||
* always separated by slashes ('/').
|
|
||||||
*/
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getNameLen() {
|
|
||||||
return nameLen;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the time of last modification of the entry.
|
|
||||||
*
|
|
||||||
* @time the time of last modification of the entry.
|
|
||||||
*/
|
|
||||||
public void setTime(long time) {
|
|
||||||
Calendar cal = getCalendar();
|
|
||||||
synchronized (cal) {
|
|
||||||
cal.setTime(new Date(time * 1000L));
|
|
||||||
dostime = (cal.get(Calendar.YEAR) - 1980 & 0x7f) << 25
|
|
||||||
| (cal.get(Calendar.MONTH) + 1) << 21
|
|
||||||
| (cal.get(Calendar.DAY_OF_MONTH)) << 16
|
|
||||||
| (cal.get(Calendar.HOUR_OF_DAY)) << 11
|
|
||||||
| (cal.get(Calendar.MINUTE)) << 5
|
|
||||||
| (cal.get(Calendar.SECOND)) >> 1;
|
|
||||||
}
|
|
||||||
dostime = (int) (dostime / 1000L);
|
|
||||||
this.known |= KNOWN_TIME;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the time of last modification of the entry.
|
|
||||||
*
|
|
||||||
* @return the time of last modification of the entry, or -1 if unknown.
|
|
||||||
*/
|
|
||||||
public long getTime() {
|
|
||||||
if ((known & KNOWN_TIME) == 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
int sec = 2 * (dostime & 0x1f);
|
|
||||||
int min = (dostime >> 5) & 0x3f;
|
|
||||||
int hrs = (dostime >> 11) & 0x1f;
|
|
||||||
int day = (dostime >> 16) & 0x1f;
|
|
||||||
int mon = ((dostime >> 21) & 0xf) - 1;
|
|
||||||
int year = ((dostime >> 25) & 0x7f) + 1980; /* since 1900 */
|
|
||||||
|
|
||||||
try {
|
|
||||||
cal = getCalendar();
|
|
||||||
synchronized (cal) {
|
|
||||||
cal.set(year, mon, day, hrs, min, sec);
|
|
||||||
return cal.getTime().getTime();
|
|
||||||
}
|
|
||||||
} catch (RuntimeException ex) {
|
|
||||||
/* Ignore illegal time stamp */
|
|
||||||
known &= ~KNOWN_TIME;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static synchronized Calendar getCalendar() {
|
|
||||||
if (cal == null)
|
|
||||||
cal = Calendar.getInstance();
|
|
||||||
|
|
||||||
return cal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the size of the uncompressed data.
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if size is not in 0..0xffffffffL
|
|
||||||
*/
|
|
||||||
public void setSize(long size) {
|
|
||||||
if ((size & 0xffffffff00000000L) != 0)
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
this.size = (int) size;
|
|
||||||
this.known |= KNOWN_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the size of the uncompressed data.
|
|
||||||
*
|
|
||||||
* @return the size or -1 if unknown.
|
|
||||||
*/
|
|
||||||
public long getSize() {
|
|
||||||
return (known & KNOWN_SIZE) != 0 ? size & 0xffffffffL : -1L;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the size of the compressed data.
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if size is not in 0..0xffffffffL
|
|
||||||
*/
|
|
||||||
public void setCompressedSize(long csize) {
|
|
||||||
if ((csize & 0xffffffff00000000L) != 0)
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
this.compressedSize = (int) csize;
|
|
||||||
this.known |= KNOWN_CSIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the size of the compressed data.
|
|
||||||
*
|
|
||||||
* @return the size or -1 if unknown.
|
|
||||||
*/
|
|
||||||
public long getCompressedSize() {
|
|
||||||
return (known & KNOWN_CSIZE) != 0 ? compressedSize & 0xffffffffL : -1L;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the crc of the uncompressed data.
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if crc is not in 0..0xffffffffL
|
|
||||||
*/
|
|
||||||
public void setCrc(long crc) {
|
|
||||||
if ((crc & 0xffffffff00000000L) != 0)
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
this.crc = (int) crc;
|
|
||||||
this.known |= KNOWN_CRC;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the crc of the uncompressed data.
|
|
||||||
*
|
|
||||||
* @return the crc or -1 if unknown.
|
|
||||||
*/
|
|
||||||
public long getCrc() {
|
|
||||||
return (known & KNOWN_CRC) != 0 ? crc & 0xffffffffL : -1L;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the compression method. Only DEFLATED and STORED are
|
|
||||||
* supported.
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if method is not supported.
|
|
||||||
* @see ZipOutputStream#DEFLATED
|
|
||||||
* @see ZipOutputStream#STORED
|
|
||||||
*/
|
|
||||||
public void setMethod(int method) {
|
|
||||||
if (method != ZipOutputStream.STORED
|
|
||||||
&& method != ZipOutputStream.DEFLATED)
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
this.method = (short) method;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the compression method.
|
|
||||||
*
|
|
||||||
* @return the compression method or -1 if unknown.
|
|
||||||
*/
|
|
||||||
public int getMethod() {
|
|
||||||
return method;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the extra data.
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if extra is longer than 0xffff bytes.
|
|
||||||
*/
|
|
||||||
public void setExtra(byte[] extra) {
|
|
||||||
if (extra == null) {
|
|
||||||
this.extra = null;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (extra.length > 0xffff)
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
this.extra = extra;
|
|
||||||
try {
|
|
||||||
int pos = 0;
|
|
||||||
while (pos < extra.length) {
|
|
||||||
int sig = (extra[pos++] & 0xff)
|
|
||||||
| (extra[pos++] & 0xff) << 8;
|
|
||||||
int len = (extra[pos++] & 0xff)
|
|
||||||
| (extra[pos++] & 0xff) << 8;
|
|
||||||
if (sig == 0x5455) {
|
|
||||||
/* extended time stamp */
|
|
||||||
int flags = extra[pos];
|
|
||||||
if ((flags & 1) != 0) {
|
|
||||||
long time = ((extra[pos + 1] & 0xff)
|
|
||||||
| (extra[pos + 2] & 0xff) << 8
|
|
||||||
| (extra[pos + 3] & 0xff) << 16
|
|
||||||
| (extra[pos + 4] & 0xff) << 24);
|
|
||||||
setTime(time);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pos += len;
|
|
||||||
}
|
|
||||||
} catch (ArrayIndexOutOfBoundsException ex) {
|
|
||||||
/* be lenient */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the extra data.
|
|
||||||
*
|
|
||||||
* @return the extra data or null if not set.
|
|
||||||
*/
|
|
||||||
public byte[] getExtra() {
|
|
||||||
return extra;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the entry comment.
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if comment is longer than 0xffff.
|
|
||||||
*/
|
|
||||||
public void setComment(String comment) {
|
|
||||||
if (comment != null && comment.length() > 0xffff)
|
|
||||||
throw new IllegalArgumentException();
|
|
||||||
this.comment = comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the comment.
|
|
||||||
*
|
|
||||||
* @return the comment or null if not set.
|
|
||||||
*/
|
|
||||||
public String getComment() {
|
|
||||||
return comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets true, if the entry is a directory. This is solely
|
|
||||||
* determined by the name, a trailing slash '/' marks a directory.
|
|
||||||
*/
|
|
||||||
public boolean isDirectory() {
|
|
||||||
int nlen = name.length();
|
|
||||||
return nlen > 0 && name.charAt(nlen - 1) == '/';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the string representation of this AndroidZipEntry. This is just
|
|
||||||
* the name as returned by getName().
|
|
||||||
*/
|
|
||||||
public String toString() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the hashCode of this AndroidZipEntry. This is just the hashCode
|
|
||||||
* of the name. Note that the equals method isn't changed, though.
|
|
||||||
*/
|
|
||||||
public int hashCode() {
|
|
||||||
return name.hashCode();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
package me.ag2s.epublib.util.zip;
|
|
||||||
|
|
||||||
interface ZipConstants {
|
|
||||||
/* The local file header */
|
|
||||||
int LOCHDR = 30;
|
|
||||||
int LOCSIG = 'P' | ('K' << 8) | (3 << 16) | (4 << 24);
|
|
||||||
|
|
||||||
int LOCVER = 4;
|
|
||||||
int LOCFLG = 6;
|
|
||||||
int LOCHOW = 8;
|
|
||||||
int LOCTIM = 10;
|
|
||||||
int LOCCRC = 14;
|
|
||||||
int LOCSIZ = 18;
|
|
||||||
int LOCLEN = 22;
|
|
||||||
int LOCNAM = 26;
|
|
||||||
int LOCEXT = 28;
|
|
||||||
|
|
||||||
/* The Data descriptor */
|
|
||||||
int EXTSIG = 'P' | ('K' << 8) | (7 << 16) | (8 << 24);
|
|
||||||
int EXTHDR = 16;
|
|
||||||
|
|
||||||
int EXTCRC = 4;
|
|
||||||
int EXTSIZ = 8;
|
|
||||||
int EXTLEN = 12;
|
|
||||||
|
|
||||||
/* The central directory file header */
|
|
||||||
int CENSIG = 'P' | ('K' << 8) | (1 << 16) | (2 << 24);
|
|
||||||
int CENHDR = 46;
|
|
||||||
|
|
||||||
int CENVEM = 4;
|
|
||||||
int CENVER = 6;
|
|
||||||
int CENFLG = 8;
|
|
||||||
int CENHOW = 10;
|
|
||||||
int CENTIM = 12;
|
|
||||||
int CENCRC = 16;
|
|
||||||
int CENSIZ = 20;
|
|
||||||
int CENLEN = 24;
|
|
||||||
int CENNAM = 28;
|
|
||||||
int CENEXT = 30;
|
|
||||||
int CENCOM = 32;
|
|
||||||
int CENDSK = 34;
|
|
||||||
int CENATT = 36;
|
|
||||||
int CENATX = 38;
|
|
||||||
int CENOFF = 42;
|
|
||||||
|
|
||||||
/* The entries in the end of central directory */
|
|
||||||
int ENDSIG = 'P' | ('K' << 8) | (5 << 16) | (6 << 24);
|
|
||||||
int ENDHDR = 22;
|
|
||||||
|
|
||||||
/* The following two fields are missing in SUN JDK */
|
|
||||||
int ENDNRD = 4;
|
|
||||||
int ENDDCD = 6;
|
|
||||||
int ENDSUB = 8;
|
|
||||||
int ENDTOT = 10;
|
|
||||||
int ENDSIZ = 12;
|
|
||||||
int ENDOFF = 16;
|
|
||||||
int ENDCOM = 20;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,207 +0,0 @@
|
|||||||
package me.ag2s.umdlib.domain;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.zip.DeflaterOutputStream;
|
|
||||||
|
|
||||||
import me.ag2s.umdlib.tool.UmdUtils;
|
|
||||||
import me.ag2s.umdlib.tool.WrapOutputStream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* It includes all titles and contents of each chapter in the UMD file.
|
|
||||||
* And the content has been compressed by zlib.
|
|
||||||
*
|
|
||||||
* @author Ray Liang (liangguanhui@qq.com)
|
|
||||||
* 2009-12-20
|
|
||||||
*/
|
|
||||||
public class UmdChapters {
|
|
||||||
|
|
||||||
private static final int DEFAULT_CHUNK_INIT_SIZE = 32768;
|
|
||||||
private int TotalContentLen;
|
|
||||||
|
|
||||||
public List<byte[]> getTitles() {
|
|
||||||
return titles;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final List<byte[]> titles = new ArrayList<>();
|
|
||||||
public List<Integer> contentLengths = new ArrayList<>();
|
|
||||||
public ByteArrayOutputStream contents = new ByteArrayOutputStream();
|
|
||||||
|
|
||||||
public void addTitle(String s){
|
|
||||||
titles.add(UmdUtils.stringToUnicodeBytes(s));
|
|
||||||
}
|
|
||||||
public void addTitle(byte[] s){
|
|
||||||
titles.add(s);
|
|
||||||
}
|
|
||||||
public void addContentLength(Integer integer){
|
|
||||||
contentLengths.add(integer);
|
|
||||||
}
|
|
||||||
public int getContentLength(int index){
|
|
||||||
return contentLengths.get(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getContent(int index) {
|
|
||||||
int st=contentLengths.get(index);
|
|
||||||
byte[] b=contents.toByteArray();
|
|
||||||
int end=index+1<contentLengths.size()?contentLengths.get(index+1): getTotalContentLen();
|
|
||||||
System.out.println("总长度:"+contents.size());
|
|
||||||
System.out.println("起始值:"+st);
|
|
||||||
System.out.println("结束值:"+end);
|
|
||||||
byte[] bAr=new byte[end-st];
|
|
||||||
System.arraycopy(b,st,bAr,0,bAr.length);
|
|
||||||
return bAr;
|
|
||||||
|
|
||||||
}
|
|
||||||
public String getContentString(int index) {
|
|
||||||
return UmdUtils.unicodeBytesToString(getContent(index)).replace((char) 0x2029, '\n');
|
|
||||||
|
|
||||||
}
|
|
||||||
public String getTitle(int index){
|
|
||||||
return UmdUtils.unicodeBytesToString(titles.get(index));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void buildChapters(WrapOutputStream wos) throws IOException {
|
|
||||||
writeChaptersHead(wos);
|
|
||||||
writeChaptersContentOffset(wos);
|
|
||||||
writeChaptersTitles(wos);
|
|
||||||
writeChaptersChunks(wos);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writeChaptersHead(WrapOutputStream wos) throws IOException {
|
|
||||||
wos.writeBytes('#', 0x0b, 0, 0, 0x09);
|
|
||||||
wos.writeInt(contents.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writeChaptersContentOffset(WrapOutputStream wos) throws IOException {
|
|
||||||
wos.writeBytes('#', 0x83, 0, 0, 0x09);
|
|
||||||
byte[] rb = UmdUtils.genRandomBytes(4);
|
|
||||||
wos.writeBytes(rb); //random numbers
|
|
||||||
wos.write('$');
|
|
||||||
wos.writeBytes(rb); //random numbers
|
|
||||||
|
|
||||||
wos.writeInt(contentLengths.size() * 4 + 9); // about the count of chapters
|
|
||||||
int offset = 0;
|
|
||||||
for (Integer n : contentLengths) {
|
|
||||||
wos.writeInt(offset);
|
|
||||||
offset += n;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writeChaptersTitles(WrapOutputStream wos) throws IOException {
|
|
||||||
wos.writeBytes('#', 0x84, 0, 0x01, 0x09);
|
|
||||||
byte[] rb = UmdUtils.genRandomBytes(4);
|
|
||||||
wos.writeBytes(rb); //random numbers
|
|
||||||
wos.write('$');
|
|
||||||
wos.writeBytes(rb); //random numbers
|
|
||||||
|
|
||||||
int totalTitlesLen = 0;
|
|
||||||
for (byte[] t : titles) {
|
|
||||||
totalTitlesLen += t.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
// about the length of the titles
|
|
||||||
wos.writeInt(totalTitlesLen + titles.size() + 9);
|
|
||||||
|
|
||||||
for (byte[] t : titles) {
|
|
||||||
wos.writeByte(t.length);
|
|
||||||
wos.write(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writeChaptersChunks(WrapOutputStream wos) throws IOException {
|
|
||||||
byte[] allContents = contents.toByteArray();
|
|
||||||
|
|
||||||
byte[] zero16 = new byte[16];
|
|
||||||
Arrays.fill(zero16, 0, zero16.length, (byte) 0);
|
|
||||||
|
|
||||||
// write each package of content
|
|
||||||
int startPos = 0;
|
|
||||||
int len = 0;
|
|
||||||
int left = 0;
|
|
||||||
int chunkCnt = 0;
|
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream(DEFAULT_CHUNK_INIT_SIZE + 256);
|
|
||||||
List<byte[]> chunkRbList = new ArrayList<>();
|
|
||||||
|
|
||||||
while(startPos < allContents.length) {
|
|
||||||
left = allContents.length - startPos;
|
|
||||||
len = Math.min(DEFAULT_CHUNK_INIT_SIZE, left);
|
|
||||||
|
|
||||||
bos.reset();
|
|
||||||
DeflaterOutputStream zos = new DeflaterOutputStream(bos);
|
|
||||||
zos.write(allContents, startPos, len);
|
|
||||||
zos.close();
|
|
||||||
byte[] chunk = bos.toByteArray();
|
|
||||||
|
|
||||||
byte[] rb = UmdUtils.genRandomBytes(4);
|
|
||||||
wos.writeByte('$');
|
|
||||||
wos.writeBytes(rb); // 4 random
|
|
||||||
chunkRbList.add(rb);
|
|
||||||
wos.writeInt(chunk.length + 9);
|
|
||||||
wos.write(chunk);
|
|
||||||
|
|
||||||
// end of each chunk
|
|
||||||
wos.writeBytes('#', 0xF1, 0, 0, 0x15);
|
|
||||||
wos.write(zero16);
|
|
||||||
|
|
||||||
startPos += len;
|
|
||||||
chunkCnt++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// end of all chunks
|
|
||||||
wos.writeBytes('#', 0x81, 0, 0x01, 0x09);
|
|
||||||
wos.writeBytes(0, 0, 0, 0); //random numbers
|
|
||||||
wos.write('$');
|
|
||||||
wos.writeBytes(0, 0, 0, 0); //random numbers
|
|
||||||
wos.writeInt(chunkCnt * 4 + 9);
|
|
||||||
for (int i = chunkCnt - 1; i >= 0; i--) {
|
|
||||||
// random. They are as the same as random numbers in the begin of each chunk
|
|
||||||
// use desc order to output these random
|
|
||||||
wos.writeBytes(chunkRbList.get(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addChapter(String title, String content) {
|
|
||||||
titles.add(UmdUtils.stringToUnicodeBytes(title));
|
|
||||||
byte[] b = UmdUtils.stringToUnicodeBytes(content);
|
|
||||||
contentLengths.add(b.length);
|
|
||||||
try {
|
|
||||||
contents.write(b);
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addFile(File f, String title) throws IOException {
|
|
||||||
byte[] temp = UmdUtils.readFile(f);
|
|
||||||
String s = new String(temp);
|
|
||||||
addChapter(title, s);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addFile(File f) throws IOException {
|
|
||||||
String s = f.getName();
|
|
||||||
int idx = s.lastIndexOf('.');
|
|
||||||
if (idx >= 0) {
|
|
||||||
s = s.substring(0, idx);
|
|
||||||
}
|
|
||||||
addFile(f, s);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clearChapters() {
|
|
||||||
titles.clear();
|
|
||||||
contentLengths.clear();
|
|
||||||
contents.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getTotalContentLen() {
|
|
||||||
return TotalContentLen;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTotalContentLen(int totalContentLen) {
|
|
||||||
TotalContentLen = totalContentLen;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,165 +0,0 @@
|
|||||||
package me.ag2s.umdlib.domain;
|
|
||||||
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import me.ag2s.umdlib.tool.UmdUtils;
|
|
||||||
import me.ag2s.umdlib.tool.WrapOutputStream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Header of UMD file.
|
|
||||||
* It includes a lot of properties of header.
|
|
||||||
* All the properties are String type.
|
|
||||||
*
|
|
||||||
* @author Ray Liang (liangguanhui@qq.com)
|
|
||||||
* 2009-12-20
|
|
||||||
*/
|
|
||||||
public class UmdHeader {
|
|
||||||
public byte getUmdType() {
|
|
||||||
return umdType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUmdType(byte umdType) {
|
|
||||||
this.umdType = umdType;
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte umdType;
|
|
||||||
private String title;
|
|
||||||
|
|
||||||
private String author;
|
|
||||||
|
|
||||||
private String year;
|
|
||||||
|
|
||||||
private String month;
|
|
||||||
|
|
||||||
private String day;
|
|
||||||
|
|
||||||
private String bookType;
|
|
||||||
|
|
||||||
private String bookMan;
|
|
||||||
|
|
||||||
private String shopKeeper;
|
|
||||||
private final static byte B_type_umd = (byte) 0x01;
|
|
||||||
private final static byte B_type_title = (byte) 0x02;
|
|
||||||
private final static byte B_type_author = (byte) 0x03;
|
|
||||||
private final static byte B_type_year = (byte) 0x04;
|
|
||||||
private final static byte B_type_month = (byte) 0x05;
|
|
||||||
private final static byte B_type_day = (byte) 0x06;
|
|
||||||
private final static byte B_type_bookType = (byte) 0x07;
|
|
||||||
private final static byte B_type_bookMan = (byte) 0x08;
|
|
||||||
private final static byte B_type_shopKeeper = (byte) 0x09;
|
|
||||||
|
|
||||||
public void buildHeader(WrapOutputStream wos) throws IOException {
|
|
||||||
wos.writeBytes(0x89, 0x9b, 0x9a, 0xde); // UMD file type flags
|
|
||||||
wos.writeByte('#');
|
|
||||||
wos.writeBytes(0x01, 0x00, 0x00, 0x08); // Unknown
|
|
||||||
wos.writeByte(0x01); //0x01 is text type; while 0x02 is Image type.
|
|
||||||
wos.writeBytes(UmdUtils.genRandomBytes(2)); //random number
|
|
||||||
|
|
||||||
// start properties output
|
|
||||||
buildType(wos, B_type_title, getTitle());
|
|
||||||
buildType(wos, B_type_author, getAuthor());
|
|
||||||
buildType(wos, B_type_year, getYear());
|
|
||||||
buildType(wos, B_type_month, getMonth());
|
|
||||||
buildType(wos, B_type_day, getDay());
|
|
||||||
buildType(wos, B_type_bookType, getBookType());
|
|
||||||
buildType(wos, B_type_bookMan, getBookMan());
|
|
||||||
buildType(wos, B_type_shopKeeper, getShopKeeper());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void buildType(WrapOutputStream wos, byte type, String content) throws IOException {
|
|
||||||
if (content == null || content.length() == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
wos.writeBytes('#', type, 0, 0);
|
|
||||||
|
|
||||||
byte[] temp = UmdUtils.stringToUnicodeBytes(content);
|
|
||||||
wos.writeByte(temp.length + 5);
|
|
||||||
wos.write(temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public String getTitle() {
|
|
||||||
return title;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTitle(String title) {
|
|
||||||
this.title = title;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAuthor() {
|
|
||||||
return author;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAuthor(String author) {
|
|
||||||
this.author = author;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBookMan() {
|
|
||||||
return bookMan;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBookMan(String bookMan) {
|
|
||||||
this.bookMan = bookMan;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getShopKeeper() {
|
|
||||||
return shopKeeper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setShopKeeper(String shopKeeper) {
|
|
||||||
this.shopKeeper = shopKeeper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getYear() {
|
|
||||||
return year;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setYear(String year) {
|
|
||||||
this.year = year;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMonth() {
|
|
||||||
return month;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMonth(String month) {
|
|
||||||
this.month = month;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDay() {
|
|
||||||
return day;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDay(String day) {
|
|
||||||
this.day = day;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBookType() {
|
|
||||||
return bookType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBookType(String bookType) {
|
|
||||||
this.bookType = bookType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NonNull
|
|
||||||
public String toString() {
|
|
||||||
return "UmdHeader{" +
|
|
||||||
"umdType=" + umdType +
|
|
||||||
", title='" + title + '\'' +
|
|
||||||
", author='" + author + '\'' +
|
|
||||||
", year='" + year + '\'' +
|
|
||||||
", month='" + month + '\'' +
|
|
||||||
", day='" + day + '\'' +
|
|
||||||
", bookType='" + bookType + '\'' +
|
|
||||||
", bookMan='" + bookMan + '\'' +
|
|
||||||
", shopKeeper='" + shopKeeper + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,153 +0,0 @@
|
|||||||
|
|
||||||
package me.ag2s.umdlib.tool;
|
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.BufferedOutputStream;
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Random;
|
|
||||||
import java.util.zip.InflaterInputStream;
|
|
||||||
|
|
||||||
|
|
||||||
public class UmdUtils {
|
|
||||||
|
|
||||||
private static final int EOF = -1;
|
|
||||||
private static final int BUFFER_SIZE = 8 * 1024;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将字符串编码成Unicode形式的byte[]
|
|
||||||
* @param s 要编码的字符串
|
|
||||||
* @return 编码好的byte[]
|
|
||||||
*/
|
|
||||||
public static byte[] stringToUnicodeBytes(String s) {
|
|
||||||
if (s == null) {
|
|
||||||
throw new NullPointerException();
|
|
||||||
}
|
|
||||||
|
|
||||||
int len = s.length();
|
|
||||||
byte[] ret = new byte[len * 2];
|
|
||||||
int a, b, c;
|
|
||||||
for (int i = 0; i < len; i++) {
|
|
||||||
c = s.charAt(i);
|
|
||||||
a = c >> 8;
|
|
||||||
b = c & 0xFF;
|
|
||||||
if (a < 0) {
|
|
||||||
a += 0xFF;
|
|
||||||
}
|
|
||||||
if (b < 0) {
|
|
||||||
b += 0xFF;
|
|
||||||
}
|
|
||||||
ret[i * 2] = (byte) b;
|
|
||||||
ret[i * 2 + 1] = (byte) a;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将编码成Unicode形式的byte[]解码成原始字符串
|
|
||||||
* @param bytes 编码成Unicode形式的byte[]
|
|
||||||
* @return 原始字符串
|
|
||||||
*/
|
|
||||||
public static String unicodeBytesToString(byte[] bytes){
|
|
||||||
char[] s=new char[bytes.length/2];
|
|
||||||
StringBuilder sb=new StringBuilder();
|
|
||||||
int a,b,c;
|
|
||||||
for(int i=0;i<s.length;i++){
|
|
||||||
a=bytes[i*2+1];
|
|
||||||
b=bytes[i*2];
|
|
||||||
c=(a&0xff)<<8|(b&0xff);
|
|
||||||
if(c<0){
|
|
||||||
c+=0xffff;
|
|
||||||
}
|
|
||||||
char[] c1=Character.toChars(c);
|
|
||||||
sb.append(c1);
|
|
||||||
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将byte[]转化成Hex形式
|
|
||||||
* @param bArr byte[]
|
|
||||||
* @return 目标HEX字符串
|
|
||||||
*/
|
|
||||||
public static String toHex(byte[] bArr){
|
|
||||||
StringBuilder sb = new StringBuilder(bArr.length);
|
|
||||||
String sTmp;
|
|
||||||
|
|
||||||
for (int i = 0; i < bArr.length; i++) {
|
|
||||||
sTmp = Integer.toHexString(0xFF & bArr[i]);
|
|
||||||
if (sTmp.length() < 2)
|
|
||||||
sb.append(0);
|
|
||||||
sb.append(sTmp.toUpperCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解压缩zip的byte[]
|
|
||||||
* @param compress zippered byte[]
|
|
||||||
* @return decompressed byte[]
|
|
||||||
* @throws Exception 解码时失败时
|
|
||||||
*/
|
|
||||||
public static byte[] decompress(byte[] compress) throws Exception {
|
|
||||||
ByteArrayInputStream bais = new ByteArrayInputStream(compress);
|
|
||||||
InflaterInputStream iis = new InflaterInputStream(bais);
|
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
||||||
int c = 0;
|
|
||||||
byte[] buf = new byte[BUFFER_SIZE];
|
|
||||||
while (true) {
|
|
||||||
c = iis.read(buf);
|
|
||||||
|
|
||||||
if (c == EOF)
|
|
||||||
break;
|
|
||||||
baos.write(buf, 0, c);
|
|
||||||
}
|
|
||||||
baos.flush();
|
|
||||||
return baos.toByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void saveFile(File f, byte[] content) throws IOException {
|
|
||||||
try (FileOutputStream fos = new FileOutputStream(f)) {
|
|
||||||
BufferedOutputStream bos = new BufferedOutputStream(fos);
|
|
||||||
bos.write(content);
|
|
||||||
bos.flush();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte[] readFile(File f) throws IOException {
|
|
||||||
try (FileInputStream fis = new FileInputStream(f)) {
|
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
||||||
BufferedInputStream bis = new BufferedInputStream(fis);
|
|
||||||
int ch;
|
|
||||||
while ((ch = bis.read()) >= 0) {
|
|
||||||
baos.write(ch);
|
|
||||||
}
|
|
||||||
baos.flush();
|
|
||||||
return baos.toByteArray();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Random random = new Random();
|
|
||||||
|
|
||||||
public static byte[] genRandomBytes(int len) {
|
|
||||||
if (len <= 0) {
|
|
||||||
throw new IllegalArgumentException("Length must > 0: " + len);
|
|
||||||
}
|
|
||||||
byte[] ret = new byte[len];
|
|
||||||
for (int i = 0; i < ret.length; i++) {
|
|
||||||
ret[i] = (byte) random.nextInt(256);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
package me.ag2s.umdlib.tool;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
public class WrapOutputStream extends OutputStream {
|
|
||||||
|
|
||||||
private final OutputStream os;
|
|
||||||
private int written;
|
|
||||||
|
|
||||||
public WrapOutputStream(OutputStream os) {
|
|
||||||
this.os = os;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void incCount(int value) {
|
|
||||||
int temp = written + value;
|
|
||||||
if (temp < 0) {
|
|
||||||
temp = Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
written = temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
// it is different from the writeInt of DataOutputStream
|
|
||||||
public void writeInt(int v) throws IOException {
|
|
||||||
os.write((v >>> 0) & 0xFF);
|
|
||||||
os.write((v >>> 8) & 0xFF);
|
|
||||||
os.write((v >>> 16) & 0xFF);
|
|
||||||
os.write((v >>> 24) & 0xFF);
|
|
||||||
incCount(4);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeByte(byte b) throws IOException {
|
|
||||||
write(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeByte(int n) throws IOException {
|
|
||||||
write(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeBytes(byte ... bytes) throws IOException {
|
|
||||||
write(bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void writeBytes(int ... vals) throws IOException {
|
|
||||||
for (int v : vals) {
|
|
||||||
write(v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(byte[] b, int off, int len) throws IOException {
|
|
||||||
os.write(b, off, len);
|
|
||||||
incCount(len);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(byte[] b) throws IOException {
|
|
||||||
os.write(b);
|
|
||||||
incCount(b.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void write(int b) throws IOException {
|
|
||||||
os.write(b);
|
|
||||||
incCount(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
|
||||||
|
|
||||||
public void close() throws IOException {
|
|
||||||
os.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void flush() throws IOException {
|
|
||||||
os.flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equals(Object obj) {
|
|
||||||
return os.equals(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int hashCode() {
|
|
||||||
return os.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString() {
|
|
||||||
return os.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getWritten() {
|
|
||||||
return written;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,390 +0,0 @@
|
|||||||
<!--
|
|
||||||
|
|
||||||
Title:
|
|
||||||
|
|
||||||
The Package Document Type Definition (DTD) for the Open
|
|
||||||
eBook Publication Structure Version 1.2
|
|
||||||
|
|
||||||
|
|
||||||
Version:
|
|
||||||
|
|
||||||
1.2
|
|
||||||
|
|
||||||
|
|
||||||
Revision:
|
|
||||||
|
|
||||||
20020930-x (supercedes 20020605-x)
|
|
||||||
|
|
||||||
|
|
||||||
Revision History Note:
|
|
||||||
|
|
||||||
This revision, 20020930-x, which supercedes the prior revision
|
|
||||||
20020605-x, solely updates the email addresses within this
|
|
||||||
comment prologue. No changes whatsover were made to the parsed
|
|
||||||
content of this DTD.
|
|
||||||
|
|
||||||
|
|
||||||
Previous Released Version:
|
|
||||||
|
|
||||||
1.0.1 (Revision of 01-February-2001, "Document Type
|
|
||||||
Definition for the Open eBook package version
|
|
||||||
1.0.1")
|
|
||||||
|
|
||||||
|
|
||||||
Authors:
|
|
||||||
|
|
||||||
Version 1.0; 1.0.1
|
|
||||||
|
|
||||||
Steve DeRose <sjd@stg.brown.edu>
|
|
||||||
Gunter Hille <hille@abc.de>
|
|
||||||
Ben Trafford <ben@legendary.org>
|
|
||||||
Garret Wilson <garret@globalmentor.com>
|
|
||||||
|
|
||||||
This Version 1.2 updated and edited by:
|
|
||||||
|
|
||||||
Jon Noring <jon@noring.name>
|
|
||||||
Benjamin Jung <benjamin.jung@deepx.com>
|
|
||||||
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
|
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!DOCTYPE package
|
|
||||||
PUBLIC "+//ISBN 0-9673008-1-9//DTD OEB 1.2 Package//EN"
|
|
||||||
"http://openebook.org/dtds/oeb-1.2/oebpkg12.dtd">
|
|
||||||
<package unique-identifier="foo">
|
|
||||||
metadata
|
|
||||||
manifest
|
|
||||||
spine
|
|
||||||
tours
|
|
||||||
guide
|
|
||||||
</package>
|
|
||||||
|
|
||||||
|
|
||||||
Summary Description:
|
|
||||||
|
|
||||||
This is the Package Document Type Definition (DTD) for
|
|
||||||
the Open eBook Publication Structure version 1.2.
|
|
||||||
|
|
||||||
Changes to this DTD from version 1.0.1 include:
|
|
||||||
|
|
||||||
a. Upgrading the <dc-metadata> content model to
|
|
||||||
fully conform with the OEBPS 1.2 specification
|
|
||||||
requirements. Specifically, <dc:Language> is
|
|
||||||
now required, while in OEBPS 1.0.1 it was
|
|
||||||
optional.
|
|
||||||
|
|
||||||
b. Updating the mnemonic character entity
|
|
||||||
declaration to refer to version 1.2.
|
|
||||||
|
|
||||||
c. Updating the xmlns:dc namespace to refer to
|
|
||||||
version 1.1 of the Dublin Core Metadata
|
|
||||||
Initiative.
|
|
||||||
|
|
||||||
d. Editing and updating the various non-parsed
|
|
||||||
comments.
|
|
||||||
|
|
||||||
e. Revising the layout (e.g., white space
|
|
||||||
alteration) to aid in readability.
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- *************************************************** -->
|
|
||||||
|
|
||||||
<!-- XHTML MNEMONIC CHARACTER ENTITIES ................. -->
|
|
||||||
|
|
||||||
<!ENTITY % OEBEntities
|
|
||||||
PUBLIC "+//ISBN 0-9673008-1-9//DTD OEB 1.2 Entities//EN"
|
|
||||||
"http://openebook.org/dtds/oeb-1.2/oeb12.ent">
|
|
||||||
|
|
||||||
%OEBEntities;
|
|
||||||
|
|
||||||
<!-- *************************************************** -->
|
|
||||||
|
|
||||||
<!-- DATATYPE ENTITIES ................................. -->
|
|
||||||
|
|
||||||
<!-- Uniform Resource Identifier (URI), per [RFC2396] -->
|
|
||||||
|
|
||||||
<!ENTITY % URI "CDATA">
|
|
||||||
|
|
||||||
<!-- Language code, per [RFC3066] -->
|
|
||||||
|
|
||||||
<!ENTITY % LanguageCode "NMTOKEN">
|
|
||||||
|
|
||||||
<!-- *************************************************** -->
|
|
||||||
|
|
||||||
<!-- NAMESPACE ENTITIES ................................ -->
|
|
||||||
|
|
||||||
<!ENTITY % dc.xmlns
|
|
||||||
"'http://purl.org/dc/elements/1.1/'">
|
|
||||||
|
|
||||||
<!ENTITY % oebpk.xmlns
|
|
||||||
"'http://openebook.org/namespaces/oeb-package/1.0/'">
|
|
||||||
|
|
||||||
<!-- *************************************************** -->
|
|
||||||
|
|
||||||
<!-- ELEMENT ENTITIES .................................. -->
|
|
||||||
|
|
||||||
<!-- The entity 'DCMetadataOpt' includes the 12 optional
|
|
||||||
<dc:Xxx> children elements of <dc-metadata>. It will
|
|
||||||
be used in the <dc-metadata> content model. -->
|
|
||||||
|
|
||||||
<!ENTITY % DCMetadataOpt
|
|
||||||
"dc:Contributor |
|
|
||||||
dc:Coverage |
|
|
||||||
dc:Creator |
|
|
||||||
dc:Date |
|
|
||||||
dc:Description |
|
|
||||||
dc:Format |
|
|
||||||
dc:Publisher |
|
|
||||||
dc:Relation |
|
|
||||||
dc:Rights |
|
|
||||||
dc:Source |
|
|
||||||
dc:Subject |
|
|
||||||
dc:Type ">
|
|
||||||
|
|
||||||
<!-- *************************************************** -->
|
|
||||||
|
|
||||||
<!-- ATTRIBUTE ENTITIES ................................ -->
|
|
||||||
|
|
||||||
<!ENTITY % CoreAttributes
|
|
||||||
"id ID #IMPLIED">
|
|
||||||
|
|
||||||
<!ENTITY % InternationalAttributes
|
|
||||||
"xml:lang %LanguageCode; #IMPLIED">
|
|
||||||
|
|
||||||
<!ENTITY % CommonAttributes
|
|
||||||
"%CoreAttributes;
|
|
||||||
%InternationalAttributes;">
|
|
||||||
|
|
||||||
<!-- 'DCNamespaceAttribute' is an attribute entity declaring
|
|
||||||
the Dublin Core namespace. Used on each <dc:Xxx> element
|
|
||||||
to accommodate XML parsers which unnecessarily require
|
|
||||||
this. -->
|
|
||||||
|
|
||||||
<!ENTITY % DCNamespaceAttribute
|
|
||||||
"xmlns:dc %URI; #FIXED %dc.xmlns;">
|
|
||||||
|
|
||||||
<!-- *************************************************** -->
|
|
||||||
|
|
||||||
<!-- ELEMENTS AND ATTRIBUTES ........................... -->
|
|
||||||
|
|
||||||
<!-- <package> must have as children elements, in this order:
|
|
||||||
<metadata>, <manifest>, and <spine>, and optionally may
|
|
||||||
include <tours> and/or <guide>. The 'unique-identifier'
|
|
||||||
attribute is required for <package> (see comment for
|
|
||||||
<dc:Identifier>.) -->
|
|
||||||
|
|
||||||
<!ELEMENT package (metadata, manifest, spine, tours?, guide?)>
|
|
||||||
<!ATTLIST package
|
|
||||||
%CommonAttributes;
|
|
||||||
unique-identifier IDREF #REQUIRED
|
|
||||||
xmlns %URI; #FIXED %oebpk.xmlns;>
|
|
||||||
|
|
||||||
<!-- <metadata> must contain one <dc-metadata>, and
|
|
||||||
optionally contain one <x-metadata>. There are no
|
|
||||||
attributes for <metadata>. -->
|
|
||||||
|
|
||||||
<!ELEMENT metadata (dc-metadata, x-metadata?)>
|
|
||||||
|
|
||||||
<!-- <dc-metadata> must contain at least one <dc:Title>,
|
|
||||||
one <dc:Identifier>, and one <dc:Language>, and may
|
|
||||||
contain one or more of each of the other twelve
|
|
||||||
optional <dc:XXX> elements, all in any order. -->
|
|
||||||
|
|
||||||
<!ELEMENT dc-metadata
|
|
||||||
( (%DCMetadataOpt;)*,
|
|
||||||
( (dc:Title, (%DCMetadataOpt; | dc:Title)*,
|
|
||||||
( (dc:Identifier, (%DCMetadataOpt; | dc:Title | dc:Identifier)*,
|
|
||||||
dc:Language) |
|
|
||||||
(dc:Language, (%DCMetadataOpt; | dc:Title | dc:Language)*,
|
|
||||||
dc:Identifier) ) ) |
|
|
||||||
(dc:Identifier, (%DCMetadataOpt; | dc:Identifier)*,
|
|
||||||
( (dc:Title, (%DCMetadataOpt; | dc:Identifier | dc:Title)*,
|
|
||||||
dc:Language) |
|
|
||||||
|
|
||||||
(dc:Language, (%DCMetadataOpt; | dc:Identifier | dc:Language)*,
|
|
||||||
dc:Title) ) ) |
|
|
||||||
(dc:Language, (%DCMetadataOpt; | dc:Language)*,
|
|
||||||
( (dc:Identifier, (%DCMetadataOpt; | dc:Language | dc:Identifier)*,
|
|
||||||
dc:Title) |
|
|
||||||
(dc:Title, (%DCMetadataOpt; | dc:Language | dc:Title)*,
|
|
||||||
dc:Identifier) ) ) ),
|
|
||||||
(%DCMetadataOpt; | dc:Title | dc:Identifier | dc:Language)* )>
|
|
||||||
|
|
||||||
<!ATTLIST dc-metadata
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;
|
|
||||||
xmlns:oebpackage %URI; #FIXED %oebpk.xmlns;>
|
|
||||||
|
|
||||||
<!-- Required elements for <dc-metadata>. -->
|
|
||||||
|
|
||||||
<!ELEMENT dc:Title (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Title
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!-- One <dc:Identifier> must specify an 'id' identical to
|
|
||||||
the value of the required <package> 'unique-identifier'
|
|
||||||
attribute. -->
|
|
||||||
|
|
||||||
<!ELEMENT dc:Identifier (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Identifier
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;
|
|
||||||
scheme NMTOKEN #IMPLIED>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Language (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Language
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!-- Optional elements for <dc-metadata>. -->
|
|
||||||
|
|
||||||
<!ELEMENT dc:Contributor (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Contributor
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;
|
|
||||||
file-as CDATA #IMPLIED
|
|
||||||
role NMTOKEN #IMPLIED>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Coverage (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Coverage
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Creator (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Creator
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;
|
|
||||||
file-as CDATA #IMPLIED
|
|
||||||
role NMTOKEN #IMPLIED>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Date (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Date
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;
|
|
||||||
event NMTOKEN #IMPLIED>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Description (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Description
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Format (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Format
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Publisher (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Publisher
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Relation (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Relation
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Rights (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Rights
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Source (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Source
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Subject (#PCDATA)>
|
|
||||||
<!ATTLIST dc:Subject
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!ELEMENT dc:Type (#PCDATA)>
|
|
||||||
|
|
||||||
<!ATTLIST dc:Type
|
|
||||||
%CommonAttributes;
|
|
||||||
%DCNamespaceAttribute;>
|
|
||||||
|
|
||||||
<!-- <x-metadata> must contain at least one <meta>. -->
|
|
||||||
|
|
||||||
<!ELEMENT x-metadata (meta+)>
|
|
||||||
<!ATTLIST x-metadata %CommonAttributes;>
|
|
||||||
|
|
||||||
<!-- Note that 'content' and 'name' are required attributes
|
|
||||||
for <meta>. -->
|
|
||||||
|
|
||||||
<!ELEMENT meta EMPTY>
|
|
||||||
<!ATTLIST meta
|
|
||||||
%CommonAttributes;
|
|
||||||
content CDATA #REQUIRED
|
|
||||||
name NMTOKEN #REQUIRED
|
|
||||||
scheme CDATA #IMPLIED>
|
|
||||||
|
|
||||||
<!-- <manifest> must contain at least one <item>. -->
|
|
||||||
|
|
||||||
<!ELEMENT manifest (item+)>
|
|
||||||
<!ATTLIST manifest %CommonAttributes;>
|
|
||||||
|
|
||||||
<!-- Note that 'href', 'id' and 'media-type' are required
|
|
||||||
attributes for <item>. -->
|
|
||||||
|
|
||||||
<!ELEMENT item EMPTY>
|
|
||||||
<!ATTLIST item
|
|
||||||
%InternationalAttributes;
|
|
||||||
fallback IDREF #IMPLIED
|
|
||||||
href %URI; #REQUIRED
|
|
||||||
id ID #REQUIRED
|
|
||||||
media-type CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!-- <spine> must contain at least one <itemref>. -->
|
|
||||||
|
|
||||||
<!ELEMENT spine (itemref+)>
|
|
||||||
<!ATTLIST spine %CommonAttributes;>
|
|
||||||
|
|
||||||
<!-- Note that 'idref' is a required attribute for
|
|
||||||
<itemref>. -->
|
|
||||||
|
|
||||||
<!ELEMENT itemref EMPTY>
|
|
||||||
<!ATTLIST itemref
|
|
||||||
%CommonAttributes;
|
|
||||||
idref IDREF #REQUIRED>
|
|
||||||
|
|
||||||
<!-- <tours> must contain at least one <tour>. -->
|
|
||||||
|
|
||||||
<!ELEMENT tours (tour+)>
|
|
||||||
<!ATTLIST tours %CommonAttributes;>
|
|
||||||
|
|
||||||
<!-- <tour> must contain at least one <site>. Note that
|
|
||||||
'title' is a required attribute for <tour>. -->
|
|
||||||
|
|
||||||
<!ELEMENT tour (site+)>
|
|
||||||
<!ATTLIST tour
|
|
||||||
%CommonAttributes;
|
|
||||||
title CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!-- Note that 'href' and 'title' are required attributes
|
|
||||||
for <site>. -->
|
|
||||||
|
|
||||||
<!ELEMENT site EMPTY>
|
|
||||||
<!ATTLIST site
|
|
||||||
%CommonAttributes;
|
|
||||||
href %URI; #REQUIRED
|
|
||||||
title CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!-- <guide> must contain at least one <reference>. -->
|
|
||||||
|
|
||||||
<!ELEMENT guide (reference+)>
|
|
||||||
<!ATTLIST guide %CommonAttributes;>
|
|
||||||
|
|
||||||
<!-- Note that 'href', 'title' and 'type' are required
|
|
||||||
attributes for <reference>. -->
|
|
||||||
|
|
||||||
<!ELEMENT reference EMPTY>
|
|
||||||
<!ATTLIST reference
|
|
||||||
%CommonAttributes;
|
|
||||||
href %URI; #REQUIRED
|
|
||||||
title CDATA #REQUIRED
|
|
||||||
type NMTOKEN #REQUIRED>
|
|
||||||
@@ -1,269 +0,0 @@
|
|||||||
<!-- NCX 2005-1 DTD 2005-06-26
|
|
||||||
file: ncx-2005-1.dtd
|
|
||||||
|
|
||||||
Authors: Mark Hakkinen, George Kerscher, Tom McLaughlin, James Pritchett, and Michael Moodie
|
|
||||||
Change list:
|
|
||||||
2002-02-12 M. Moodie. Changed content model of navLabel element to eliminate ambiguity.
|
|
||||||
2002-02-27 M. Moodie. Grammatical changes suggested by editor.
|
|
||||||
2004-03-31 J. Pritchett. Various changes per the 2004 change list:
|
|
||||||
- Changed internal version numbers from 1.1.0 to 1.2.0
|
|
||||||
- Made audio clipBegin/clipEnd mandatory (change #10)
|
|
||||||
- Dropped value attribute from navPoint (change #11)
|
|
||||||
- Replaced lang attribute with xml:lang (change #12)
|
|
||||||
- Added <pageList> and <pageTarget> elements (change #48)
|
|
||||||
- Dropped onFocus and onBlur attributes from navPoint and navTarget (change #49)
|
|
||||||
- Added <img> to content models of docTitle and docAuthor (change #50)
|
|
||||||
- Removed reference to pages in description of navList (change #52)
|
|
||||||
- Added <navInfo> element (change #53)
|
|
||||||
- Added default namespace attribute to description of <ncx> (change #L8)
|
|
||||||
- Removed pageRef and mapRef attributes
|
|
||||||
2004-04-05 J. Pritchett. Changes after feedback from MM and MG to 2004-03-31 version
|
|
||||||
- Changed internal version numbers from 1.2.0 to 1.1.2 (per MM e-mail of 3/31)
|
|
||||||
- Changed system identifier to use z3986/2004 as path instead of z3986/v100 (per 3/31 con call)
|
|
||||||
- Added class attribute to both pageTarget and pageList (per MG e-mail of 4/1)
|
|
||||||
- Added comment text describing value attribute for pageTarget and navTarget (per MM e-mail of 3/31)
|
|
||||||
- Changed declaration of type attribute on pageTarget to enumerate allowed values
|
|
||||||
- Added playOrder attribute to navPoint, navTarget, and pageTarget (per Lloyd's proposal)
|
|
||||||
2004-04-05 T. McLaughlin. In description of smilCustomTest, added id and defaultState are to be copied.
|
|
||||||
Version update to 1.1.3.
|
|
||||||
2004-05-14 T. McLaughlin. Reinstated override attribute to be copied also. Added bookStruct attribute
|
|
||||||
and enum list to smilCustomTest. Update to 1.1.4.
|
|
||||||
Revised, 4/5/2004: Changed version to 1.1.2
|
|
||||||
Revised, 4/5/2004: Changed system identifier to use '2004' path
|
|
||||||
Revised, 4/5/2004: TM, Changed version to 1.1.3
|
|
||||||
Revised, 5/14/2004: TM, Changed version to 1.1.4
|
|
||||||
2004-07-07 M. Moodie Updated version to 1.2.0 everywhere but at top, where version was set to 1.1.5.
|
|
||||||
2004-09-15 M. Moodie. Changed uri to URI throughout. Set version to 1.1.6.
|
|
||||||
2004-09-16 M. Moodie. Changed version to 1.2.0
|
|
||||||
2005-06-26 M. Gylling. Changed pid, sid, ns uri, and filename for Z3986-2005
|
|
||||||
|
|
||||||
Description:
|
|
||||||
|
|
||||||
NCX (Navigation Control for XML applications) is a generalized navigation definition DTD for application
|
|
||||||
to Digital Talking Books, eBooks, and general web content models.
|
|
||||||
This DTD is an XML application that layers navigation functionality on top of SMIL 2.0 content.
|
|
||||||
|
|
||||||
The NCX defines a navigation path/model that may be applied upon existing publications,
|
|
||||||
without modification of the existing publication source, so long as the navigation targets within
|
|
||||||
the source publication can be directly referenced via a URI.
|
|
||||||
|
|
||||||
The following identifiers apply to this DTD:
|
|
||||||
"-//NISO//DTD ncx 2005-1//EN"
|
|
||||||
"http://www.daisy.org/z3986/2005/ncx-2005-1.dtd"
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Basic Entities -->
|
|
||||||
|
|
||||||
<!ENTITY % i18n
|
|
||||||
"xml:lang NMTOKEN #IMPLIED
|
|
||||||
dir (ltr|rtl) #IMPLIED" >
|
|
||||||
|
|
||||||
<!ENTITY % SMILtimeVal "CDATA" >
|
|
||||||
<!ENTITY % URI "CDATA" >
|
|
||||||
<!ENTITY % script "CDATA" >
|
|
||||||
|
|
||||||
<!-- ELEMENTS -->
|
|
||||||
|
|
||||||
<!-- Top Level NCX Container. -->
|
|
||||||
<!-- Revised, 3/31/2004: Added pageList to content model -->
|
|
||||||
<!ELEMENT ncx (head, docTitle, docAuthor*, navMap, pageList?, navList*)>
|
|
||||||
<!-- Revised, 4/5/2004: Changed version to 1.1.2 -->
|
|
||||||
<!-- Revised 3/29/2004: Added xmlns -->
|
|
||||||
<!-- Revised, 4/5/2004: TM, Changed version to 1.1.3 -->
|
|
||||||
<!-- Revised, 5/14/2004: TM, Changed version to 1.1.4 -->
|
|
||||||
<!-- Revised, 7/7/2004: MM, Changed version to 1.2.0 -->
|
|
||||||
<!ATTLIST ncx
|
|
||||||
version CDATA #FIXED "2005-1"
|
|
||||||
xmlns %URI; #FIXED "http://www.daisy.org/z3986/2005/ncx/"
|
|
||||||
%i18n;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Document Head - Contains all NCX metadata.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ELEMENT head (smilCustomTest | meta)+>
|
|
||||||
|
|
||||||
<!-- 2004-04-05 TM - only id and defaultState are copied -->
|
|
||||||
<!-- 2004-05-14 TM - revert to override copied too; added bookStruct attribute -->
|
|
||||||
<!-- smilCustomTest - Duplicates customTest data found in SMIL files. Each unique customTest
|
|
||||||
element that appears in one or more SMIL files must have its id, defaultState and override
|
|
||||||
attributes duplicated in a smilCustomTest element in the NCX. The NCX thus gathers in one
|
|
||||||
place all customTest elements used in the SMIL files, for presentation to the user.
|
|
||||||
-->
|
|
||||||
<!ELEMENT smilCustomTest EMPTY>
|
|
||||||
<!ATTLIST smilCustomTest
|
|
||||||
id ID #REQUIRED
|
|
||||||
defaultState (true|false) 'false'
|
|
||||||
override (visible|hidden) 'hidden'
|
|
||||||
bookStruct (PAGE_NUMBER|NOTE|NOTE_REFERENCE|ANNOTATION|LINE_NUMBER|OPTIONAL_SIDEBAR|OPTIONAL_PRODUCER_NOTE) #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Meta Element - metadata about this NCX -->
|
|
||||||
<!ELEMENT meta EMPTY>
|
|
||||||
<!ATTLIST meta
|
|
||||||
name CDATA #REQUIRED
|
|
||||||
content CDATA #REQUIRED
|
|
||||||
scheme CDATA #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- DocTitle - the title of the document, required and must immediately follow head.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Revised, 3/31/2004: Added img to content model -->
|
|
||||||
<!ELEMENT docTitle (text, audio?, img?)>
|
|
||||||
<!ATTLIST docTitle
|
|
||||||
id ID #IMPLIED
|
|
||||||
%i18n;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- DocAuthor - the author of the document, immediately follows docTitle.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Revised, 3/31/2004: Added img to content model -->
|
|
||||||
<!ELEMENT docAuthor (text, audio?, img?)>
|
|
||||||
<!ATTLIST docAuthor
|
|
||||||
id ID #IMPLIED
|
|
||||||
%i18n;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Navigation Structure - container for all of the NCX objects that are part of the
|
|
||||||
hierarchical structure of the document.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Revised, 3/31/2004: Added navInfo to content model -->
|
|
||||||
<!ELEMENT navMap (navInfo*, navLabel*, navPoint+)>
|
|
||||||
<!ATTLIST navMap
|
|
||||||
id ID #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Navigation Point - contains description(s) of target, as well as a pointer to
|
|
||||||
entire content of target.
|
|
||||||
Hierarchy is represented by nesting navPoints. "class" attribute describes the kind
|
|
||||||
of structural unit this object represents (e.g., "chapter", "section").
|
|
||||||
-->
|
|
||||||
<!ELEMENT navPoint (navLabel+, content, navPoint*)>
|
|
||||||
<!-- Revised, 3/29/2004: Removed onFocus/onBlur -->
|
|
||||||
<!-- Revised, 3/29/2004: Removed value -->
|
|
||||||
<!-- Revised, 3/31/2004: Removed pageRef -->
|
|
||||||
<!-- Revised, 4/5/2004: Added playOrder -->
|
|
||||||
<!ATTLIST navPoint
|
|
||||||
id ID #REQUIRED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
playOrder CDATA #REQUIRED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Revised, 3/31/2004: Added pageList element -->
|
|
||||||
<!-- Page List - Container for pagination information.
|
|
||||||
-->
|
|
||||||
<!ELEMENT pageList (navInfo*, navLabel*, pageTarget+)>
|
|
||||||
<!-- Revised, 4/5/2004: Added class attribute -->
|
|
||||||
<!ATTLIST pageList
|
|
||||||
id ID #IMPLIED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Revised, 3/31/2004: Added pageTarget element -->
|
|
||||||
<!-- Revised, 4/5/2004: Added description of value attribute to comment -->
|
|
||||||
<!-- Page Target - Container for
|
|
||||||
text, audio, image, and content elements containing navigational
|
|
||||||
information for pages. The "value" attribute is a positive integer representing
|
|
||||||
the numeric value associated with a page. Combination of values of type and
|
|
||||||
value attributes must be unique, when value attribute is present.
|
|
||||||
-->
|
|
||||||
<!ELEMENT pageTarget (navLabel+, content)>
|
|
||||||
<!-- Revised, 4/5/2004: Added class attribute -->
|
|
||||||
<!-- Revised, 4/5/2004: Changed declaration of type attribute to enumerate values -->
|
|
||||||
<!-- Revised, 4/5/2004: Added playOrder -->
|
|
||||||
<!ATTLIST pageTarget
|
|
||||||
id ID #IMPLIED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
type (front | normal | special) #REQUIRED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
playOrder CDATA #REQUIRED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Navigation List - container for distinct, flat sets of navigable elements, e.g.
|
|
||||||
notes, figures, tables, etc. Essentially a flat version of navMap. The "class" attribute
|
|
||||||
describes the type of object contained in this navList, using dtbook element names, e.g., note.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Revised, 3/31/2004: Added navInfo to content model -->
|
|
||||||
<!ELEMENT navList (navInfo*, navLabel+, navTarget+) >
|
|
||||||
<!ATTLIST navList
|
|
||||||
id ID #IMPLIED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Revised, 4/5/2004: Added description of value attribute to comment -->
|
|
||||||
<!-- Navigation Target - contains description(s) of target, as well as a pointer to
|
|
||||||
entire content of target.
|
|
||||||
navTargets are the equivalent of navPoints for use in navLists. "class" attribute
|
|
||||||
describes the kind of structure this target represents, using its dtbook element
|
|
||||||
name, e.g., note. The "value" attribute is a positive integer representing the
|
|
||||||
numeric value associated with the navTarget.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ELEMENT navTarget (navLabel+, content) >
|
|
||||||
<!-- Revised, 3/29/2004: Removed onFocus/onBlur -->
|
|
||||||
<!-- Revised, 3/31/2004: Removed mapRef -->
|
|
||||||
<!-- Revised, 4/5/2004: Added playOrder -->
|
|
||||||
<!ATTLIST navTarget
|
|
||||||
id ID #REQUIRED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
playOrder CDATA #REQUIRED
|
|
||||||
>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Revised, 3/31/2004: Added navInfo element -->
|
|
||||||
<!-- Navigation Information - Contains an informative comment
|
|
||||||
about a navMap, pageList, or navList in various media for presentation to the user.
|
|
||||||
-->
|
|
||||||
<!ELEMENT navInfo (((text, audio?) | audio), img?)>
|
|
||||||
<!ATTLIST navInfo
|
|
||||||
%i18n;
|
|
||||||
>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Navigation Label - Contains a description of a given <navMap>, <navPoint>,
|
|
||||||
<navList>, or <navTarget> in various media for presentation to the user. Can be
|
|
||||||
repeated so descriptions can be provided in multiple languages. -->
|
|
||||||
<!ELEMENT navLabel (((text, audio?) | audio), img?)>
|
|
||||||
<!ATTLIST navLabel
|
|
||||||
%i18n;
|
|
||||||
>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Content Element - pointer into SMIL to beginning of navPoint. -->
|
|
||||||
<!ELEMENT content EMPTY>
|
|
||||||
<!ATTLIST content
|
|
||||||
id ID #IMPLIED
|
|
||||||
src %URI; #REQUIRED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Text Element - Contains text of docTitle, navPoint heading, navTarget (e.g., page number),
|
|
||||||
or label for navMap or navList. -->
|
|
||||||
<!ELEMENT text (#PCDATA)>
|
|
||||||
<!ATTLIST text
|
|
||||||
id ID #IMPLIED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Audio Element - audio clip of navPoint heading. -->
|
|
||||||
<!ELEMENT audio EMPTY>
|
|
||||||
<!-- Revised, 3/29/2004: clipBegin/clipEnd now REQUIRED -->
|
|
||||||
<!ATTLIST audio
|
|
||||||
id ID #IMPLIED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
src %URI; #REQUIRED
|
|
||||||
clipBegin %SMILtimeVal; #REQUIRED
|
|
||||||
clipEnd %SMILtimeVal; #REQUIRED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Image Element - image that may accompany heading. -->
|
|
||||||
<!ELEMENT img EMPTY>
|
|
||||||
<!ATTLIST img
|
|
||||||
id ID #IMPLIED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
src %URI; #REQUIRED
|
|
||||||
>
|
|
||||||
@@ -1,242 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Ruby Module .................................................... -->
|
|
||||||
<!-- file: xhtml-ruby-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1999-2001 W3C (MIT, INRIA, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-ruby-1.mod,v 4.0 2001/04/03 23:14:33 altheim Exp $
|
|
||||||
|
|
||||||
This module is based on the W3C Ruby Annotation Specification:
|
|
||||||
|
|
||||||
http://www.w3.org/TR/ruby
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Ruby 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/TR/ruby/xhtml-ruby-1.mod"
|
|
||||||
|
|
||||||
...................................................................... -->
|
|
||||||
|
|
||||||
<!-- Ruby Elements
|
|
||||||
|
|
||||||
ruby, rbc, rtc, rb, rt, rp
|
|
||||||
|
|
||||||
This module declares the elements and their attributes used to
|
|
||||||
support ruby annotation markup.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- declare qualified element type names:
|
|
||||||
-->
|
|
||||||
<!ENTITY % ruby.qname "ruby" >
|
|
||||||
<!ENTITY % rbc.qname "rbc" >
|
|
||||||
<!ENTITY % rtc.qname "rtc" >
|
|
||||||
<!ENTITY % rb.qname "rb" >
|
|
||||||
<!ENTITY % rt.qname "rt" >
|
|
||||||
<!ENTITY % rp.qname "rp" >
|
|
||||||
|
|
||||||
<!-- rp fallback is included by default.
|
|
||||||
-->
|
|
||||||
<!ENTITY % Ruby.fallback "INCLUDE" >
|
|
||||||
<!ENTITY % Ruby.fallback.mandatory "IGNORE" >
|
|
||||||
|
|
||||||
<!-- Complex ruby is included by default; it may be
|
|
||||||
overridden by other modules to ignore it.
|
|
||||||
-->
|
|
||||||
<!ENTITY % Ruby.complex "INCLUDE" >
|
|
||||||
|
|
||||||
<!-- Fragments for the content model of the ruby element -->
|
|
||||||
<![%Ruby.fallback;[
|
|
||||||
<![%Ruby.fallback.mandatory;[
|
|
||||||
<!ENTITY % Ruby.content.simple
|
|
||||||
"( %rb.qname;, %rp.qname;, %rt.qname;, %rp.qname; )"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
<!ENTITY % Ruby.content.simple
|
|
||||||
"( %rb.qname;, ( %rt.qname; | ( %rp.qname;, %rt.qname;, %rp.qname; ) ) )"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
<!ENTITY % Ruby.content.simple "( %rb.qname;, %rt.qname; )" >
|
|
||||||
|
|
||||||
<![%Ruby.complex;[
|
|
||||||
<!ENTITY % Ruby.content.complex
|
|
||||||
"| ( %rbc.qname;, %rtc.qname;, %rtc.qname;? )"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
<!ENTITY % Ruby.content.complex "" >
|
|
||||||
|
|
||||||
<!-- Content models of the rb and the rt elements are intended to
|
|
||||||
allow other inline-level elements of its parent markup language,
|
|
||||||
but it should not include ruby descendent elements. The following
|
|
||||||
parameter entity %NoRuby.content; can be used to redefine
|
|
||||||
those content models with minimum effort. It's defined as
|
|
||||||
'( #PCDATA )' by default.
|
|
||||||
-->
|
|
||||||
<!ENTITY % NoRuby.content "( #PCDATA )" >
|
|
||||||
|
|
||||||
<!-- one or more digits (NUMBER) -->
|
|
||||||
<!ENTITY % Number.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- ruby element ...................................... -->
|
|
||||||
|
|
||||||
<!ENTITY % ruby.element "INCLUDE" >
|
|
||||||
<![%ruby.element;[
|
|
||||||
<!ENTITY % ruby.content
|
|
||||||
"( %Ruby.content.simple; %Ruby.content.complex; )"
|
|
||||||
>
|
|
||||||
<!ELEMENT %ruby.qname; %ruby.content; >
|
|
||||||
<!-- end of ruby.element -->]]>
|
|
||||||
|
|
||||||
<![%Ruby.complex;[
|
|
||||||
<!-- rbc (ruby base component) element ................. -->
|
|
||||||
|
|
||||||
<!ENTITY % rbc.element "INCLUDE" >
|
|
||||||
<![%rbc.element;[
|
|
||||||
<!ENTITY % rbc.content
|
|
||||||
"(%rb.qname;)+"
|
|
||||||
>
|
|
||||||
<!ELEMENT %rbc.qname; %rbc.content; >
|
|
||||||
<!-- end of rbc.element -->]]>
|
|
||||||
|
|
||||||
<!-- rtc (ruby text component) element ................. -->
|
|
||||||
|
|
||||||
<!ENTITY % rtc.element "INCLUDE" >
|
|
||||||
<![%rtc.element;[
|
|
||||||
<!ENTITY % rtc.content
|
|
||||||
"(%rt.qname;)+"
|
|
||||||
>
|
|
||||||
<!ELEMENT %rtc.qname; %rtc.content; >
|
|
||||||
<!-- end of rtc.element -->]]>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!-- rb (ruby base) element ............................ -->
|
|
||||||
|
|
||||||
<!ENTITY % rb.element "INCLUDE" >
|
|
||||||
<![%rb.element;[
|
|
||||||
<!-- %rb.content; uses %NoRuby.content; as its content model,
|
|
||||||
which is '( #PCDATA )' by default. It may be overridden
|
|
||||||
by other modules to allow other inline-level elements
|
|
||||||
of its parent markup language, but it should not include
|
|
||||||
ruby descendent elements.
|
|
||||||
-->
|
|
||||||
<!ENTITY % rb.content "%NoRuby.content;" >
|
|
||||||
<!ELEMENT %rb.qname; %rb.content; >
|
|
||||||
<!-- end of rb.element -->]]>
|
|
||||||
|
|
||||||
<!-- rt (ruby text) element ............................ -->
|
|
||||||
|
|
||||||
<!ENTITY % rt.element "INCLUDE" >
|
|
||||||
<![%rt.element;[
|
|
||||||
<!-- %rt.content; uses %NoRuby.content; as its content model,
|
|
||||||
which is '( #PCDATA )' by default. It may be overridden
|
|
||||||
by other modules to allow other inline-level elements
|
|
||||||
of its parent markup language, but it should not include
|
|
||||||
ruby descendent elements.
|
|
||||||
-->
|
|
||||||
<!ENTITY % rt.content "%NoRuby.content;" >
|
|
||||||
|
|
||||||
<!ELEMENT %rt.qname; %rt.content; >
|
|
||||||
<!-- end of rt.element -->]]>
|
|
||||||
|
|
||||||
<!-- rbspan attribute is used for complex ruby only ...... -->
|
|
||||||
<![%Ruby.complex;[
|
|
||||||
<!ENTITY % rt.attlist "INCLUDE" >
|
|
||||||
<![%rt.attlist;[
|
|
||||||
<!ATTLIST %rt.qname;
|
|
||||||
rbspan %Number.datatype; "1"
|
|
||||||
>
|
|
||||||
<!-- end of rt.attlist -->]]>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!-- rp (ruby parenthesis) element ..................... -->
|
|
||||||
|
|
||||||
<![%Ruby.fallback;[
|
|
||||||
<!ENTITY % rp.element "INCLUDE" >
|
|
||||||
<![%rp.element;[
|
|
||||||
<!ENTITY % rp.content
|
|
||||||
"( #PCDATA )"
|
|
||||||
>
|
|
||||||
<!ELEMENT %rp.qname; %rp.content; >
|
|
||||||
<!-- end of rp.element -->]]>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!-- Ruby Common Attributes
|
|
||||||
|
|
||||||
The following optional ATTLIST declarations provide an easy way
|
|
||||||
to define common attributes for ruby elements. These declarations
|
|
||||||
are ignored by default.
|
|
||||||
|
|
||||||
Ruby elements are intended to have common attributes of its
|
|
||||||
parent markup language. For example, if a markup language defines
|
|
||||||
common attributes as a parameter entity %attrs;, you may add
|
|
||||||
those attributes by just declaring the following parameter entities
|
|
||||||
|
|
||||||
<!ENTITY % Ruby.common.attlists "INCLUDE" >
|
|
||||||
<!ENTITY % Ruby.common.attrib "%attrs;" >
|
|
||||||
|
|
||||||
before including the Ruby module.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % Ruby.common.attlists "IGNORE" >
|
|
||||||
<![%Ruby.common.attlists;[
|
|
||||||
<!ENTITY % Ruby.common.attrib "" >
|
|
||||||
|
|
||||||
<!-- common attributes for ruby ........................ -->
|
|
||||||
|
|
||||||
<!ENTITY % Ruby.common.attlist "INCLUDE" >
|
|
||||||
<![%Ruby.common.attlist;[
|
|
||||||
<!ATTLIST %ruby.qname;
|
|
||||||
%Ruby.common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of Ruby.common.attlist -->]]>
|
|
||||||
|
|
||||||
<![%Ruby.complex;[
|
|
||||||
<!-- common attributes for rbc ......................... -->
|
|
||||||
|
|
||||||
<!ENTITY % Rbc.common.attlist "INCLUDE" >
|
|
||||||
<![%Rbc.common.attlist;[
|
|
||||||
<!ATTLIST %rbc.qname;
|
|
||||||
%Ruby.common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of Rbc.common.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- common attributes for rtc ......................... -->
|
|
||||||
|
|
||||||
<!ENTITY % Rtc.common.attlist "INCLUDE" >
|
|
||||||
<![%Rtc.common.attlist;[
|
|
||||||
<!ATTLIST %rtc.qname;
|
|
||||||
%Ruby.common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of Rtc.common.attlist -->]]>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!-- common attributes for rb .......................... -->
|
|
||||||
|
|
||||||
<!ENTITY % Rb.common.attlist "INCLUDE" >
|
|
||||||
<![%Rb.common.attlist;[
|
|
||||||
<!ATTLIST %rb.qname;
|
|
||||||
%Ruby.common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of Rb.common.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- common attributes for rt .......................... -->
|
|
||||||
|
|
||||||
<!ENTITY % Rt.common.attlist "INCLUDE" >
|
|
||||||
<![%Rt.common.attlist;[
|
|
||||||
<!ATTLIST %rt.qname;
|
|
||||||
%Ruby.common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of Rt.common.attlist -->]]>
|
|
||||||
|
|
||||||
<![%Ruby.fallback;[
|
|
||||||
<!-- common attributes for rp .......................... -->
|
|
||||||
|
|
||||||
<!ENTITY % Rp.common.attlist "INCLUDE" >
|
|
||||||
<![%Rp.common.attlist;[
|
|
||||||
<!ATTLIST %rp.qname;
|
|
||||||
%Ruby.common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of Rp.common.attlist -->]]>
|
|
||||||
]]>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-ruby-1.mod -->
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Base Architecture Module ...................................... -->
|
|
||||||
<!-- file: xhtml-arch-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-arch-1.mod,v 1.1 2010/07/29 13:42:46 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Base Architecture 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-arch-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- This optional module includes declarations that enable XHTML to be used
|
|
||||||
as a base architecture according to the 'Architectural Forms Definition
|
|
||||||
Requirements' (Annex A.3, ISO/IEC 10744, 2nd edition). For more information
|
|
||||||
on use of architectural forms, see the HyTime web site at:
|
|
||||||
|
|
||||||
http://www.hytime.org/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<?IS10744 ArcBase xhtml ?>
|
|
||||||
|
|
||||||
<!NOTATION xhtml PUBLIC "-//W3C//NOTATION AFDR ARCBASE XHTML 1.1//EN" >
|
|
||||||
|
|
||||||
<!-- Entity declaration for associated Architectural DTD
|
|
||||||
-->
|
|
||||||
<!ENTITY xhtml-arch.dtd
|
|
||||||
PUBLIC "-//W3C//DTD XHTML Architecture 1.1//EN"
|
|
||||||
"xhtml11-arch.dtd" >
|
|
||||||
|
|
||||||
<?IS10744:arch xhtml
|
|
||||||
public-id = "-//W3C//NOTATION AFDR ARCBASE XHTML 1.1//EN"
|
|
||||||
dtd-public-id = "-//W3C//DTD XHTML 1.1//EN"
|
|
||||||
dtd-system-id = "xhtml11.dtd"
|
|
||||||
doc-elem-form = "html"
|
|
||||||
form-att = "html"
|
|
||||||
renamer-att = "htnames"
|
|
||||||
suppressor-att = "htsupp"
|
|
||||||
data-ignore-att = "htign"
|
|
||||||
auto = "ArcAuto"
|
|
||||||
options = "HtModReq HtModOpt"
|
|
||||||
HtModReq = "Framework Text Hypertext Lists Structure"
|
|
||||||
HtModOpt = "Standard"
|
|
||||||
?>
|
|
||||||
|
|
||||||
<!-- end of xhtml-arch-1.mod -->
|
|
||||||
-142
@@ -1,142 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Common Attributes Module ...................................... -->
|
|
||||||
<!-- file: xhtml-attribs-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-attribs-1.mod,v 1.1 2010/07/29 13:42:46 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Common Attributes 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-attribs-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Common Attributes
|
|
||||||
|
|
||||||
This module declares many of the common attributes for the XHTML DTD.
|
|
||||||
%NS.decl.attrib; is declared in the XHTML Qname module.
|
|
||||||
|
|
||||||
Note that this file was extended in XHTML Modularization 1.1 to
|
|
||||||
include declarations of "global" versions of the attribute collections.
|
|
||||||
The global versions of the attributes are for use on elements in other
|
|
||||||
namespaces. The global version of "common" includes the xmlns declaration
|
|
||||||
for the prefixed version of the xhtml namespace. If you are only using a
|
|
||||||
specific attribute or an individual attribute collection, you must also
|
|
||||||
include the XHTML.xmlns.attrib.prefixed PE on your elements.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % id.attrib
|
|
||||||
"id ID #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<![%XHTML.global.attrs.prefixed;[
|
|
||||||
<!ENTITY % XHTML.global.id.attrib
|
|
||||||
"%XHTML.prefix;:id ID #IMPLIED"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!ENTITY % class.attrib
|
|
||||||
"class CDATA #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<![%XHTML.global.attrs.prefixed;[
|
|
||||||
<!ENTITY % XHTML.global.class.attrib
|
|
||||||
"%XHTML.prefix;:class CDATA #IMPLIED"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!ENTITY % title.attrib
|
|
||||||
"title %Text.datatype; #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<![%XHTML.global.attrs.prefixed;[
|
|
||||||
<!ENTITY % XHTML.global.title.attrib
|
|
||||||
"%XHTML.prefix;:title %Text.datatype; #IMPLIED"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!ENTITY % Core.extra.attrib "" >
|
|
||||||
|
|
||||||
<!ENTITY % Core.attrib
|
|
||||||
"%XHTML.xmlns.attrib;
|
|
||||||
%id.attrib;
|
|
||||||
%class.attrib;
|
|
||||||
%title.attrib;
|
|
||||||
xml:space ( preserve ) #FIXED 'preserve'
|
|
||||||
%Core.extra.attrib;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ENTITY % XHTML.global.core.extra.attrib "" >
|
|
||||||
|
|
||||||
<![%XHTML.global.attrs.prefixed;[
|
|
||||||
|
|
||||||
<!ENTITY % XHTML.global.core.attrib
|
|
||||||
"%XHTML.global.id.attrib;
|
|
||||||
%XHTML.global.class.attrib;
|
|
||||||
%XHTML.global.title.attrib;
|
|
||||||
%XHTML.global.core.extra.attrib;"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!ENTITY % XHTML.global.core.attrib "" >
|
|
||||||
|
|
||||||
|
|
||||||
<!ENTITY % lang.attrib
|
|
||||||
"xml:lang %LanguageCode.datatype; #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<![%XHTML.bidi;[
|
|
||||||
<!ENTITY % dir.attrib
|
|
||||||
"dir ( ltr | rtl ) #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ENTITY % I18n.attrib
|
|
||||||
"%dir.attrib;
|
|
||||||
%lang.attrib;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<![%XHTML.global.attrs.prefixed;[
|
|
||||||
<!ENTITY XHTML.global.i18n.attrib
|
|
||||||
"%XHTML.prefix;:dir ( ltr | rtl ) #IMPLIED
|
|
||||||
%lang.attrib;"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
<!ENTITY XHTML.global.i18n.attrib "" >
|
|
||||||
|
|
||||||
]]>
|
|
||||||
<!ENTITY % I18n.attrib
|
|
||||||
"%lang.attrib;"
|
|
||||||
>
|
|
||||||
<!ENTITY % XHTML.global.i18n.attrib
|
|
||||||
"%lang.attrib;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ENTITY % Common.extra.attrib "" >
|
|
||||||
<!ENTITY % XHTML.global.common.extra.attrib "" >
|
|
||||||
|
|
||||||
<!-- intrinsic event attributes declared previously
|
|
||||||
-->
|
|
||||||
<!ENTITY % Events.attrib "" >
|
|
||||||
|
|
||||||
<!ENTITY % XHTML.global.events.attrib "" >
|
|
||||||
|
|
||||||
<!ENTITY % Common.attrib
|
|
||||||
"%Core.attrib;
|
|
||||||
%I18n.attrib;
|
|
||||||
%Events.attrib;
|
|
||||||
%Common.extra.attrib;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ENTITY % XHTML.global.common.attrib
|
|
||||||
"%XHTML.xmlns.attrib.prefixed;
|
|
||||||
%XHTML.global.core.attrib;
|
|
||||||
%XHTML.global.i18n.attrib;
|
|
||||||
%XHTML.global.events.attrib;
|
|
||||||
%XHTML.global.common.extra.attrib;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- end of xhtml-attribs-1.mod -->
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Base Element Module ........................................... -->
|
|
||||||
<!-- file: xhtml-base-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-base-1.mod,v 1.1 2010/07/29 13:42:46 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Base Element 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-base-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Base element
|
|
||||||
|
|
||||||
base
|
|
||||||
|
|
||||||
This module declares the base element type and its attributes,
|
|
||||||
used to define a base URI against which relative URIs in the
|
|
||||||
document will be resolved.
|
|
||||||
|
|
||||||
Note that this module also redeclares the content model for
|
|
||||||
the head element to include the base element.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- base: Document Base URI ........................... -->
|
|
||||||
|
|
||||||
<!ENTITY % base.element "INCLUDE" >
|
|
||||||
<![%base.element;[
|
|
||||||
<!ENTITY % base.content "EMPTY" >
|
|
||||||
<!ENTITY % base.qname "base" >
|
|
||||||
<!ELEMENT %base.qname; %base.content; >
|
|
||||||
<!-- end of base.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % base.attlist "INCLUDE" >
|
|
||||||
<![%base.attlist;[
|
|
||||||
<!ATTLIST %base.qname;
|
|
||||||
%XHTML.xmlns.attrib;
|
|
||||||
href %URI.datatype; #REQUIRED
|
|
||||||
>
|
|
||||||
<!-- end of base.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % head.content
|
|
||||||
"( %HeadOpts.mix;,
|
|
||||||
( ( %title.qname;, %HeadOpts.mix;, ( %base.qname;, %HeadOpts.mix; )? )
|
|
||||||
| ( %base.qname;, %HeadOpts.mix;, ( %title.qname;, %HeadOpts.mix; ))))"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- end of xhtml-base-1.mod -->
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML BDO Element Module ............................................. -->
|
|
||||||
<!-- file: xhtml-bdo-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-bdo-1.mod,v 1.1 2010/07/29 13:42:46 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML BDO Element 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-bdo-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Bidirectional Override (bdo) Element
|
|
||||||
|
|
||||||
This modules declares the element 'bdo', used to override the
|
|
||||||
Unicode bidirectional algorithm for selected fragments of text.
|
|
||||||
|
|
||||||
DEPENDENCIES:
|
|
||||||
Relies on the conditional section keyword %XHTML.bidi; declared
|
|
||||||
as "INCLUDE". Bidirectional text support includes both the bdo
|
|
||||||
element and the 'dir' attribute.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % bdo.element "INCLUDE" >
|
|
||||||
<![%bdo.element;[
|
|
||||||
<!ENTITY % bdo.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % bdo.qname "bdo" >
|
|
||||||
<!ELEMENT %bdo.qname; %bdo.content; >
|
|
||||||
<!-- end of bdo.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % bdo.attlist "INCLUDE" >
|
|
||||||
<![%bdo.attlist;[
|
|
||||||
<!ATTLIST %bdo.qname;
|
|
||||||
%Core.attrib;
|
|
||||||
%lang.attrib;
|
|
||||||
dir ( ltr | rtl ) #REQUIRED
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-bdo-1.mod -->
|
|
||||||
-164
@@ -1,164 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Block Phrasal Module .......................................... -->
|
|
||||||
<!-- file: xhtml-blkphras-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-blkphras-1.mod,v 1.1 2010/07/29 13:42:46 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Block Phrasal 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-blkphras-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Block Phrasal
|
|
||||||
|
|
||||||
address, blockquote, pre, h1, h2, h3, h4, h5, h6
|
|
||||||
|
|
||||||
This module declares the elements and their attributes used to
|
|
||||||
support block-level phrasal markup.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % address.element "INCLUDE" >
|
|
||||||
<![%address.element;[
|
|
||||||
<!ENTITY % address.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*" >
|
|
||||||
<!ENTITY % address.qname "address" >
|
|
||||||
<!ELEMENT %address.qname; %address.content; >
|
|
||||||
<!-- end of address.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % address.attlist "INCLUDE" >
|
|
||||||
<![%address.attlist;[
|
|
||||||
<!ATTLIST %address.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of address.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % blockquote.element "INCLUDE" >
|
|
||||||
<![%blockquote.element;[
|
|
||||||
<!ENTITY % blockquote.content
|
|
||||||
"( %Block.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % blockquote.qname "blockquote" >
|
|
||||||
<!ELEMENT %blockquote.qname; %blockquote.content; >
|
|
||||||
<!-- end of blockquote.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % blockquote.attlist "INCLUDE" >
|
|
||||||
<![%blockquote.attlist;[
|
|
||||||
<!ATTLIST %blockquote.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
cite %URI.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of blockquote.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % pre.element "INCLUDE" >
|
|
||||||
<![%pre.element;[
|
|
||||||
<!ENTITY % pre.content
|
|
||||||
"( #PCDATA
|
|
||||||
| %InlStruct.class;
|
|
||||||
%InlPhras.class;
|
|
||||||
| %tt.qname; | %i.qname; | %b.qname;
|
|
||||||
%I18n.class;
|
|
||||||
%Anchor.class;
|
|
||||||
| %map.qname;
|
|
||||||
%Misc.class;
|
|
||||||
%Inline.extra; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % pre.qname "pre" >
|
|
||||||
<!ELEMENT %pre.qname; %pre.content; >
|
|
||||||
<!-- end of pre.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % pre.attlist "INCLUDE" >
|
|
||||||
<![%pre.attlist;[
|
|
||||||
<!ATTLIST %pre.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of pre.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- ................... Heading Elements ................... -->
|
|
||||||
|
|
||||||
<!ENTITY % Heading.content "( #PCDATA | %Inline.mix; )*" >
|
|
||||||
|
|
||||||
<!ENTITY % h1.element "INCLUDE" >
|
|
||||||
<![%h1.element;[
|
|
||||||
<!ENTITY % h1.qname "h1" >
|
|
||||||
<!ELEMENT %h1.qname; %Heading.content; >
|
|
||||||
<!-- end of h1.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h1.attlist "INCLUDE" >
|
|
||||||
<![%h1.attlist;[
|
|
||||||
<!ATTLIST %h1.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of h1.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h2.element "INCLUDE" >
|
|
||||||
<![%h2.element;[
|
|
||||||
<!ENTITY % h2.qname "h2" >
|
|
||||||
<!ELEMENT %h2.qname; %Heading.content; >
|
|
||||||
<!-- end of h2.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h2.attlist "INCLUDE" >
|
|
||||||
<![%h2.attlist;[
|
|
||||||
<!ATTLIST %h2.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of h2.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h3.element "INCLUDE" >
|
|
||||||
<![%h3.element;[
|
|
||||||
<!ENTITY % h3.qname "h3" >
|
|
||||||
<!ELEMENT %h3.qname; %Heading.content; >
|
|
||||||
<!-- end of h3.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h3.attlist "INCLUDE" >
|
|
||||||
<![%h3.attlist;[
|
|
||||||
<!ATTLIST %h3.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of h3.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h4.element "INCLUDE" >
|
|
||||||
<![%h4.element;[
|
|
||||||
<!ENTITY % h4.qname "h4" >
|
|
||||||
<!ELEMENT %h4.qname; %Heading.content; >
|
|
||||||
<!-- end of h4.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h4.attlist "INCLUDE" >
|
|
||||||
<![%h4.attlist;[
|
|
||||||
<!ATTLIST %h4.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of h4.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h5.element "INCLUDE" >
|
|
||||||
<![%h5.element;[
|
|
||||||
<!ENTITY % h5.qname "h5" >
|
|
||||||
<!ELEMENT %h5.qname; %Heading.content; >
|
|
||||||
<!-- end of h5.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h5.attlist "INCLUDE" >
|
|
||||||
<![%h5.attlist;[
|
|
||||||
<!ATTLIST %h5.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of h5.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h6.element "INCLUDE" >
|
|
||||||
<![%h6.element;[
|
|
||||||
<!ENTITY % h6.qname "h6" >
|
|
||||||
<!ELEMENT %h6.qname; %Heading.content; >
|
|
||||||
<!-- end of h6.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % h6.attlist "INCLUDE" >
|
|
||||||
<![%h6.attlist;[
|
|
||||||
<!ATTLIST %h6.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of h6.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-blkphras-1.mod -->
|
|
||||||
-40
@@ -1,40 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Block Presentation Module ..................................... -->
|
|
||||||
<!-- file: xhtml-blkpres-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-blkpres-1.mod,v 1.1 2010/07/29 13:42:46 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Block Presentation 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-blkpres-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Block Presentational Elements
|
|
||||||
|
|
||||||
hr
|
|
||||||
|
|
||||||
This module declares the elements and their attributes used to
|
|
||||||
support block-level presentational markup.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % hr.element "INCLUDE" >
|
|
||||||
<![%hr.element;[
|
|
||||||
<!ENTITY % hr.content "EMPTY" >
|
|
||||||
<!ENTITY % hr.qname "hr" >
|
|
||||||
<!ELEMENT %hr.qname; %hr.content; >
|
|
||||||
<!-- end of hr.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % hr.attlist "INCLUDE" >
|
|
||||||
<![%hr.attlist;[
|
|
||||||
<!ATTLIST %hr.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of hr.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-blkpres-1.mod -->
|
|
||||||
-57
@@ -1,57 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Block Structural Module ....................................... -->
|
|
||||||
<!-- file: xhtml-blkstruct-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-blkstruct-1.mod,v 1.1 2010/07/29 13:42:46 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Block Structural 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-blkstruct-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Block Structural
|
|
||||||
|
|
||||||
div, p
|
|
||||||
|
|
||||||
This module declares the elements and their attributes used to
|
|
||||||
support block-level structural markup.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % div.element "INCLUDE" >
|
|
||||||
<![%div.element;[
|
|
||||||
<!ENTITY % div.content
|
|
||||||
"( #PCDATA | %Flow.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % div.qname "div" >
|
|
||||||
<!ELEMENT %div.qname; %div.content; >
|
|
||||||
<!-- end of div.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % div.attlist "INCLUDE" >
|
|
||||||
<![%div.attlist;[
|
|
||||||
<!ATTLIST %div.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of div.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % p.element "INCLUDE" >
|
|
||||||
<![%p.element;[
|
|
||||||
<!ENTITY % p.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*" >
|
|
||||||
<!ENTITY % p.qname "p" >
|
|
||||||
<!ELEMENT %p.qname; %p.content; >
|
|
||||||
<!-- end of p.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % p.attlist "INCLUDE" >
|
|
||||||
<![%p.attlist;[
|
|
||||||
<!ATTLIST %p.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of p.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-blkstruct-1.mod -->
|
|
||||||
-39
@@ -1,39 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Character Entities Module ......................................... -->
|
|
||||||
<!-- file: xhtml-charent-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-charent-1.mod,v 1.1 2010/07/29 13:42:46 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Character Entities 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-charent-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Character Entities for XHTML
|
|
||||||
|
|
||||||
This module declares the set of character entities for XHTML,
|
|
||||||
including the Latin 1, Symbol and Special character collections.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-lat1
|
|
||||||
PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN"
|
|
||||||
"xhtml-lat1.ent" >
|
|
||||||
%xhtml-lat1;
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-symbol
|
|
||||||
PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
|
|
||||||
"xhtml-symbol.ent" >
|
|
||||||
%xhtml-symbol;
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-special
|
|
||||||
PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
|
|
||||||
"xhtml-special.ent" >
|
|
||||||
%xhtml-special;
|
|
||||||
|
|
||||||
<!-- end of xhtml-charent-1.mod -->
|
|
||||||
-114
@@ -1,114 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Client-side Image Map Module .................................. -->
|
|
||||||
<!-- file: xhtml-csismap-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-csismap-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Client-side Image Maps 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-csismap-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Client-side Image Maps
|
|
||||||
|
|
||||||
area, map
|
|
||||||
|
|
||||||
This module declares elements and attributes to support client-side
|
|
||||||
image maps. This requires that the Image Module (or a module
|
|
||||||
declaring the img element type) be included in the DTD.
|
|
||||||
|
|
||||||
These can be placed in the same document or grouped in a
|
|
||||||
separate document, although the latter isn't widely supported
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % area.element "INCLUDE" >
|
|
||||||
<![%area.element;[
|
|
||||||
<!ENTITY % area.content "EMPTY" >
|
|
||||||
<!ENTITY % area.qname "area" >
|
|
||||||
<!ELEMENT %area.qname; %area.content; >
|
|
||||||
<!-- end of area.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % Shape.datatype "( rect | circle | poly | default )">
|
|
||||||
<!ENTITY % Coords.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!ENTITY % area.attlist "INCLUDE" >
|
|
||||||
<![%area.attlist;[
|
|
||||||
<!ATTLIST %area.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
href %URI.datatype; #IMPLIED
|
|
||||||
shape %Shape.datatype; 'rect'
|
|
||||||
coords %Coords.datatype; #IMPLIED
|
|
||||||
nohref ( nohref ) #IMPLIED
|
|
||||||
alt %Text.datatype; #REQUIRED
|
|
||||||
tabindex %Number.datatype; #IMPLIED
|
|
||||||
accesskey %Character.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of area.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- modify anchor attribute definition list
|
|
||||||
to allow for client-side image maps
|
|
||||||
-->
|
|
||||||
<!ATTLIST %a.qname;
|
|
||||||
shape %Shape.datatype; 'rect'
|
|
||||||
coords %Coords.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- modify img attribute definition list
|
|
||||||
to allow for client-side image maps
|
|
||||||
-->
|
|
||||||
<!ATTLIST %img.qname;
|
|
||||||
usemap %URIREF.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- modify form input attribute definition list
|
|
||||||
to allow for client-side image maps
|
|
||||||
-->
|
|
||||||
<!ATTLIST %input.qname;
|
|
||||||
usemap %URIREF.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- modify object attribute definition list
|
|
||||||
to allow for client-side image maps
|
|
||||||
-->
|
|
||||||
<!ATTLIST %object.qname;
|
|
||||||
usemap %URIREF.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- 'usemap' points to the 'id' attribute of a <map> element,
|
|
||||||
which must be in the same document; support for external
|
|
||||||
document maps was not widely supported in HTML and is
|
|
||||||
eliminated in XHTML.
|
|
||||||
|
|
||||||
It is considered an error for the element pointed to by
|
|
||||||
a usemap URIREF to occur in anything but a <map> element.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % map.element "INCLUDE" >
|
|
||||||
<![%map.element;[
|
|
||||||
<!ENTITY % map.content
|
|
||||||
"(( %Block.mix; ) | %area.qname; )+"
|
|
||||||
>
|
|
||||||
<!ENTITY % map.qname "map" >
|
|
||||||
<!ELEMENT %map.qname; %map.content; >
|
|
||||||
<!-- end of map.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % map.attlist "INCLUDE" >
|
|
||||||
<![%map.attlist;[
|
|
||||||
<!ATTLIST %map.qname;
|
|
||||||
%XHTML.xmlns.attrib;
|
|
||||||
id ID #REQUIRED
|
|
||||||
%class.attrib;
|
|
||||||
%title.attrib;
|
|
||||||
%Core.extra.attrib;
|
|
||||||
%I18n.attrib;
|
|
||||||
%Events.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of map.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-csismap-1.mod -->
|
|
||||||
-103
@@ -1,103 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Datatypes Module .............................................. -->
|
|
||||||
<!-- file: xhtml-datatypes-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-datatypes-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Datatypes 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-datatypes-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Datatypes
|
|
||||||
|
|
||||||
defines containers for the following datatypes, many of
|
|
||||||
these imported from other specifications and standards.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Length defined for cellpadding/cellspacing -->
|
|
||||||
|
|
||||||
<!-- nn for pixels or nn% for percentage length -->
|
|
||||||
<!ENTITY % Length.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- space-separated list of link types -->
|
|
||||||
<!ENTITY % LinkTypes.datatype "NMTOKENS" >
|
|
||||||
|
|
||||||
<!-- single or comma-separated list of media descriptors -->
|
|
||||||
<!ENTITY % MediaDesc.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- pixel, percentage, or relative -->
|
|
||||||
<!ENTITY % MultiLength.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- one or more digits (NUMBER) -->
|
|
||||||
<!ENTITY % Number.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- integer representing length in pixels -->
|
|
||||||
<!ENTITY % Pixels.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- script expression -->
|
|
||||||
<!ENTITY % Script.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- textual content -->
|
|
||||||
<!ENTITY % Text.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- Placeholder Compact URI-related types -->
|
|
||||||
<!ENTITY % CURIE.datatype "CDATA" >
|
|
||||||
<!ENTITY % CURIEs.datatype "CDATA" >
|
|
||||||
<!ENTITY % SafeCURIE.datatype "CDATA" >
|
|
||||||
<!ENTITY % SafeCURIEs.datatype "CDATA" >
|
|
||||||
<!ENTITY % URIorSafeCURIE.datatype "CDATA" >
|
|
||||||
<!ENTITY % URIorSafeCURIEs.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- Imported Datatypes ................................ -->
|
|
||||||
|
|
||||||
<!-- a single character from [ISO10646] -->
|
|
||||||
<!ENTITY % Character.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- a character encoding, as per [RFC2045] -->
|
|
||||||
<!ENTITY % Charset.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- a space separated list of character encodings, as per [RFC2045] -->
|
|
||||||
<!ENTITY % Charsets.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- Color specification using color name or sRGB (#RRGGBB) values -->
|
|
||||||
<!ENTITY % Color.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- media type, as per [RFC2045] -->
|
|
||||||
<!ENTITY % ContentType.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- comma-separated list of media types, as per [RFC2045] -->
|
|
||||||
<!ENTITY % ContentTypes.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- date and time information. ISO date format -->
|
|
||||||
<!ENTITY % Datetime.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- formal public identifier, as per [ISO8879] -->
|
|
||||||
<!ENTITY % FPI.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- a language code, as per [RFC3066] or its successor -->
|
|
||||||
<!ENTITY % LanguageCode.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- a comma separated list of language code ranges -->
|
|
||||||
<!ENTITY % LanguageCodes.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- a qualified name , as per [XMLNS] or its successor -->
|
|
||||||
<!ENTITY % QName.datatype "CDATA" >
|
|
||||||
<!ENTITY % QNames.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- a Uniform Resource Identifier, see [URI] -->
|
|
||||||
<!ENTITY % URI.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- a space-separated list of Uniform Resource Identifiers, see [URI] -->
|
|
||||||
<!ENTITY % URIs.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- a relative URI reference consisting of an initial '#' and a fragment ID -->
|
|
||||||
<!ENTITY % URIREF.datatype "CDATA" >
|
|
||||||
|
|
||||||
<!-- end of xhtml-datatypes-1.mod -->
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Editing Elements Module ....................................... -->
|
|
||||||
<!-- file: xhtml-edit-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-edit-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Editing Markup 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-edit-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Editing Elements
|
|
||||||
|
|
||||||
ins, del
|
|
||||||
|
|
||||||
This module declares element types and attributes used to indicate
|
|
||||||
inserted and deleted content while editing a document.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- ins: Inserted Text ............................... -->
|
|
||||||
|
|
||||||
<!ENTITY % ins.element "INCLUDE" >
|
|
||||||
<![%ins.element;[
|
|
||||||
<!ENTITY % ins.content
|
|
||||||
"( #PCDATA | %Flow.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % ins.qname "ins" >
|
|
||||||
<!ELEMENT %ins.qname; %ins.content; >
|
|
||||||
<!-- end of ins.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % ins.attlist "INCLUDE" >
|
|
||||||
<![%ins.attlist;[
|
|
||||||
<!ATTLIST %ins.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
cite %URI.datatype; #IMPLIED
|
|
||||||
datetime %Datetime.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of ins.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- del: Deleted Text ................................ -->
|
|
||||||
|
|
||||||
<!ENTITY % del.element "INCLUDE" >
|
|
||||||
<![%del.element;[
|
|
||||||
<!ENTITY % del.content
|
|
||||||
"( #PCDATA | %Flow.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % del.qname "del" >
|
|
||||||
<!ELEMENT %del.qname; %del.content; >
|
|
||||||
<!-- end of del.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % del.attlist "INCLUDE" >
|
|
||||||
<![%del.attlist;[
|
|
||||||
<!ATTLIST %del.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
cite %URI.datatype; #IMPLIED
|
|
||||||
datetime %Datetime.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of del.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-edit-1.mod -->
|
|
||||||
-135
@@ -1,135 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Intrinsic Events Module ....................................... -->
|
|
||||||
<!-- file: xhtml-events-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-events-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Intrinsic Events 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-events-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Intrinsic Event Attributes
|
|
||||||
|
|
||||||
These are the event attributes defined in HTML 4,
|
|
||||||
Section 18.2.3 "Intrinsic Events". This module must be
|
|
||||||
instantiated prior to the Attributes Module but after
|
|
||||||
the Datatype Module in the Modular Framework module.
|
|
||||||
|
|
||||||
"Note: Authors of HTML documents are advised that changes
|
|
||||||
are likely to occur in the realm of intrinsic events
|
|
||||||
(e.g., how scripts are bound to events). Research in
|
|
||||||
this realm is carried on by members of the W3C Document
|
|
||||||
Object Model Working Group (see the W3C Web site at
|
|
||||||
http://www.w3.org/ for more information)."
|
|
||||||
-->
|
|
||||||
<!-- NOTE: Because the ATTLIST declarations in this module occur
|
|
||||||
before their respective ELEMENT declarations in other
|
|
||||||
modules, there may be a dependency on this module that
|
|
||||||
should be considered if any of the parameter entities used
|
|
||||||
for element type names (eg., %a.qname;) are redeclared.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % Events.attrib
|
|
||||||
"onclick %Script.datatype; #IMPLIED
|
|
||||||
ondblclick %Script.datatype; #IMPLIED
|
|
||||||
onmousedown %Script.datatype; #IMPLIED
|
|
||||||
onmouseup %Script.datatype; #IMPLIED
|
|
||||||
onmouseover %Script.datatype; #IMPLIED
|
|
||||||
onmousemove %Script.datatype; #IMPLIED
|
|
||||||
onmouseout %Script.datatype; #IMPLIED
|
|
||||||
onkeypress %Script.datatype; #IMPLIED
|
|
||||||
onkeydown %Script.datatype; #IMPLIED
|
|
||||||
onkeyup %Script.datatype; #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<![%XHTML.global.attrs.prefixed;[
|
|
||||||
<!ENTITY % XHTML.global.events.attrib
|
|
||||||
"%XHTML.prefix;:onclick %Script.datatype; #IMPLIED
|
|
||||||
%XHTML.prefix;:ondblclick %Script.datatype; #IMPLIED
|
|
||||||
%XHTML.prefix;:onmousedown %Script.datatype; #IMPLIED
|
|
||||||
%XHTML.prefix;:onmouseup %Script.datatype; #IMPLIED
|
|
||||||
%XHTML.prefix;:onmouseover %Script.datatype; #IMPLIED
|
|
||||||
%XHTML.prefix;:onmousemove %Script.datatype; #IMPLIED
|
|
||||||
%XHTML.prefix;:onmouseout %Script.datatype; #IMPLIED
|
|
||||||
%XHTML.prefix;:onkeypress %Script.datatype; #IMPLIED
|
|
||||||
%XHTML.prefix;:onkeydown %Script.datatype; #IMPLIED
|
|
||||||
%XHTML.prefix;:onkeyup %Script.datatype; #IMPLIED"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
|
|
||||||
<!-- additional attributes on anchor element
|
|
||||||
-->
|
|
||||||
<!ATTLIST %a.qname;
|
|
||||||
onfocus %Script.datatype; #IMPLIED
|
|
||||||
onblur %Script.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- additional attributes on form element
|
|
||||||
-->
|
|
||||||
<!ATTLIST %form.qname;
|
|
||||||
onsubmit %Script.datatype; #IMPLIED
|
|
||||||
onreset %Script.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- additional attributes on label element
|
|
||||||
-->
|
|
||||||
<!ATTLIST %label.qname;
|
|
||||||
onfocus %Script.datatype; #IMPLIED
|
|
||||||
onblur %Script.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- additional attributes on input element
|
|
||||||
-->
|
|
||||||
<!ATTLIST %input.qname;
|
|
||||||
onfocus %Script.datatype; #IMPLIED
|
|
||||||
onblur %Script.datatype; #IMPLIED
|
|
||||||
onselect %Script.datatype; #IMPLIED
|
|
||||||
onchange %Script.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- additional attributes on select element
|
|
||||||
-->
|
|
||||||
<!ATTLIST %select.qname;
|
|
||||||
onfocus %Script.datatype; #IMPLIED
|
|
||||||
onblur %Script.datatype; #IMPLIED
|
|
||||||
onchange %Script.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- additional attributes on textarea element
|
|
||||||
-->
|
|
||||||
<!ATTLIST %textarea.qname;
|
|
||||||
onfocus %Script.datatype; #IMPLIED
|
|
||||||
onblur %Script.datatype; #IMPLIED
|
|
||||||
onselect %Script.datatype; #IMPLIED
|
|
||||||
onchange %Script.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- additional attributes on button element
|
|
||||||
-->
|
|
||||||
<!ATTLIST %button.qname;
|
|
||||||
onfocus %Script.datatype; #IMPLIED
|
|
||||||
onblur %Script.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- additional attributes on body element
|
|
||||||
-->
|
|
||||||
<!ATTLIST %body.qname;
|
|
||||||
onload %Script.datatype; #IMPLIED
|
|
||||||
onunload %Script.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- additional attributes on area element
|
|
||||||
-->
|
|
||||||
<!ATTLIST %area.qname;
|
|
||||||
onfocus %Script.datatype; #IMPLIED
|
|
||||||
onblur %Script.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- end of xhtml-events-1.mod -->
|
|
||||||
@@ -1,292 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Forms Module .................................................. -->
|
|
||||||
<!-- file: xhtml-form-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-form-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Forms 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-form-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Forms
|
|
||||||
|
|
||||||
form, label, input, select, optgroup, option,
|
|
||||||
textarea, fieldset, legend, button
|
|
||||||
|
|
||||||
This module declares markup to provide support for online
|
|
||||||
forms, based on the features found in HTML 4 forms.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- declare qualified element type names:
|
|
||||||
-->
|
|
||||||
<!ENTITY % form.qname "form" >
|
|
||||||
<!ENTITY % label.qname "label" >
|
|
||||||
<!ENTITY % input.qname "input" >
|
|
||||||
<!ENTITY % select.qname "select" >
|
|
||||||
<!ENTITY % optgroup.qname "optgroup" >
|
|
||||||
<!ENTITY % option.qname "option" >
|
|
||||||
<!ENTITY % textarea.qname "textarea" >
|
|
||||||
<!ENTITY % fieldset.qname "fieldset" >
|
|
||||||
<!ENTITY % legend.qname "legend" >
|
|
||||||
<!ENTITY % button.qname "button" >
|
|
||||||
|
|
||||||
<!-- %BlkNoForm.mix; includes all non-form block elements,
|
|
||||||
plus %Misc.class;
|
|
||||||
-->
|
|
||||||
<!ENTITY % BlkNoForm.mix
|
|
||||||
"%Heading.class;
|
|
||||||
| %List.class;
|
|
||||||
| %BlkStruct.class;
|
|
||||||
%BlkPhras.class;
|
|
||||||
%BlkPres.class;
|
|
||||||
%Table.class;
|
|
||||||
%Block.extra;
|
|
||||||
%Misc.class;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- form: Form Element ................................ -->
|
|
||||||
|
|
||||||
<!ENTITY % form.element "INCLUDE" >
|
|
||||||
<![%form.element;[
|
|
||||||
<!ENTITY % form.content
|
|
||||||
"( %BlkNoForm.mix;
|
|
||||||
| %fieldset.qname; )+"
|
|
||||||
>
|
|
||||||
<!ELEMENT %form.qname; %form.content; >
|
|
||||||
<!-- end of form.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % form.attlist "INCLUDE" >
|
|
||||||
<![%form.attlist;[
|
|
||||||
<!ATTLIST %form.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
action %URI.datatype; #REQUIRED
|
|
||||||
method ( get | post ) 'get'
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
enctype %ContentType.datatype; 'application/x-www-form-urlencoded'
|
|
||||||
accept-charset %Charsets.datatype; #IMPLIED
|
|
||||||
accept %ContentTypes.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of form.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- label: Form Field Label Text ...................... -->
|
|
||||||
|
|
||||||
<!-- Each label must not contain more than ONE field
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % label.element "INCLUDE" >
|
|
||||||
<![%label.element;[
|
|
||||||
<!ENTITY % label.content
|
|
||||||
"( #PCDATA
|
|
||||||
| %input.qname; | %select.qname; | %textarea.qname; | %button.qname;
|
|
||||||
| %InlStruct.class;
|
|
||||||
%InlPhras.class;
|
|
||||||
%I18n.class;
|
|
||||||
%InlPres.class;
|
|
||||||
%Anchor.class;
|
|
||||||
%InlSpecial.class;
|
|
||||||
%Inline.extra;
|
|
||||||
%Misc.class; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %label.qname; %label.content; >
|
|
||||||
<!-- end of label.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % label.attlist "INCLUDE" >
|
|
||||||
<![%label.attlist;[
|
|
||||||
<!ATTLIST %label.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
for IDREF #IMPLIED
|
|
||||||
accesskey %Character.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of label.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- input: Form Control ............................... -->
|
|
||||||
|
|
||||||
<!ENTITY % input.element "INCLUDE" >
|
|
||||||
<![%input.element;[
|
|
||||||
<!ENTITY % input.content "EMPTY" >
|
|
||||||
<!ELEMENT %input.qname; %input.content; >
|
|
||||||
<!-- end of input.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % input.attlist "INCLUDE" >
|
|
||||||
<![%input.attlist;[
|
|
||||||
<!ENTITY % InputType.class
|
|
||||||
"( text | password | checkbox | radio | submit
|
|
||||||
| reset | file | hidden | image | button )"
|
|
||||||
>
|
|
||||||
<!-- attribute 'name' required for all but submit & reset
|
|
||||||
-->
|
|
||||||
<!ATTLIST %input.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
type %InputType.class; 'text'
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
checked ( checked ) #IMPLIED
|
|
||||||
disabled ( disabled ) #IMPLIED
|
|
||||||
readonly ( readonly ) #IMPLIED
|
|
||||||
size %Number.datatype; #IMPLIED
|
|
||||||
maxlength %Number.datatype; #IMPLIED
|
|
||||||
src %URI.datatype; #IMPLIED
|
|
||||||
alt %Text.datatype; #IMPLIED
|
|
||||||
tabindex %Number.datatype; #IMPLIED
|
|
||||||
accesskey %Character.datatype; #IMPLIED
|
|
||||||
accept %ContentTypes.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of input.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- select: Option Selector ........................... -->
|
|
||||||
|
|
||||||
<!ENTITY % select.element "INCLUDE" >
|
|
||||||
<![%select.element;[
|
|
||||||
<!ENTITY % select.content
|
|
||||||
"( %optgroup.qname; | %option.qname; )+"
|
|
||||||
>
|
|
||||||
<!ELEMENT %select.qname; %select.content; >
|
|
||||||
<!-- end of select.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % select.attlist "INCLUDE" >
|
|
||||||
<![%select.attlist;[
|
|
||||||
<!ATTLIST %select.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
size %Number.datatype; #IMPLIED
|
|
||||||
multiple ( multiple ) #IMPLIED
|
|
||||||
disabled ( disabled ) #IMPLIED
|
|
||||||
tabindex %Number.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of select.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- optgroup: Option Group ............................ -->
|
|
||||||
|
|
||||||
<!ENTITY % optgroup.element "INCLUDE" >
|
|
||||||
<![%optgroup.element;[
|
|
||||||
<!ENTITY % optgroup.content "( %option.qname; )+" >
|
|
||||||
<!ELEMENT %optgroup.qname; %optgroup.content; >
|
|
||||||
<!-- end of optgroup.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % optgroup.attlist "INCLUDE" >
|
|
||||||
<![%optgroup.attlist;[
|
|
||||||
<!ATTLIST %optgroup.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
disabled ( disabled ) #IMPLIED
|
|
||||||
label %Text.datatype; #REQUIRED
|
|
||||||
>
|
|
||||||
<!-- end of optgroup.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- option: Selectable Choice ......................... -->
|
|
||||||
|
|
||||||
<!ENTITY % option.element "INCLUDE" >
|
|
||||||
<![%option.element;[
|
|
||||||
<!ENTITY % option.content "( #PCDATA )" >
|
|
||||||
<!ELEMENT %option.qname; %option.content; >
|
|
||||||
<!-- end of option.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % option.attlist "INCLUDE" >
|
|
||||||
<![%option.attlist;[
|
|
||||||
<!ATTLIST %option.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
selected ( selected ) #IMPLIED
|
|
||||||
disabled ( disabled ) #IMPLIED
|
|
||||||
label %Text.datatype; #IMPLIED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of option.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- textarea: Multi-Line Text Field ................... -->
|
|
||||||
|
|
||||||
<!ENTITY % textarea.element "INCLUDE" >
|
|
||||||
<![%textarea.element;[
|
|
||||||
<!ENTITY % textarea.content "( #PCDATA )" >
|
|
||||||
<!ELEMENT %textarea.qname; %textarea.content; >
|
|
||||||
<!-- end of textarea.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % textarea.attlist "INCLUDE" >
|
|
||||||
<![%textarea.attlist;[
|
|
||||||
<!ATTLIST %textarea.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
rows %Number.datatype; #REQUIRED
|
|
||||||
cols %Number.datatype; #REQUIRED
|
|
||||||
disabled ( disabled ) #IMPLIED
|
|
||||||
readonly ( readonly ) #IMPLIED
|
|
||||||
tabindex %Number.datatype; #IMPLIED
|
|
||||||
accesskey %Character.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of textarea.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- fieldset: Form Control Group ...................... -->
|
|
||||||
|
|
||||||
<!-- #PCDATA is to solve the mixed content problem,
|
|
||||||
per specification only whitespace is allowed
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % fieldset.element "INCLUDE" >
|
|
||||||
<![%fieldset.element;[
|
|
||||||
<!ENTITY % fieldset.content
|
|
||||||
"( #PCDATA | %legend.qname; | %Flow.mix; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %fieldset.qname; %fieldset.content; >
|
|
||||||
<!-- end of fieldset.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % fieldset.attlist "INCLUDE" >
|
|
||||||
<![%fieldset.attlist;[
|
|
||||||
<!ATTLIST %fieldset.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of fieldset.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- legend: Fieldset Legend ........................... -->
|
|
||||||
|
|
||||||
<!ENTITY % legend.element "INCLUDE" >
|
|
||||||
<![%legend.element;[
|
|
||||||
<!ENTITY % legend.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %legend.qname; %legend.content; >
|
|
||||||
<!-- end of legend.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % legend.attlist "INCLUDE" >
|
|
||||||
<![%legend.attlist;[
|
|
||||||
<!ATTLIST %legend.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
accesskey %Character.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of legend.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- button: Push Button ............................... -->
|
|
||||||
|
|
||||||
<!ENTITY % button.element "INCLUDE" >
|
|
||||||
<![%button.element;[
|
|
||||||
<!ENTITY % button.content
|
|
||||||
"( #PCDATA
|
|
||||||
| %BlkNoForm.mix;
|
|
||||||
| %InlStruct.class;
|
|
||||||
%InlPhras.class;
|
|
||||||
%InlPres.class;
|
|
||||||
%I18n.class;
|
|
||||||
%InlSpecial.class;
|
|
||||||
%Inline.extra; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %button.qname; %button.content; >
|
|
||||||
<!-- end of button.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % button.attlist "INCLUDE" >
|
|
||||||
<![%button.attlist;[
|
|
||||||
<!ATTLIST %button.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
type ( button | submit | reset ) 'submit'
|
|
||||||
disabled ( disabled ) #IMPLIED
|
|
||||||
tabindex %Number.datatype; #IMPLIED
|
|
||||||
accesskey %Character.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of button.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-form-1.mod -->
|
|
||||||
-97
@@ -1,97 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Modular Framework Module ...................................... -->
|
|
||||||
<!-- file: xhtml-framework-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-framework-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Modular Framework 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-framework-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Modular Framework
|
|
||||||
|
|
||||||
This required module instantiates the modules needed
|
|
||||||
to support the XHTML modularization model, including:
|
|
||||||
|
|
||||||
+ datatypes
|
|
||||||
+ namespace-qualified names
|
|
||||||
+ common attributes
|
|
||||||
+ document model
|
|
||||||
+ character entities
|
|
||||||
|
|
||||||
The Intrinsic Events module is ignored by default but
|
|
||||||
occurs in this module because it must be instantiated
|
|
||||||
prior to Attributes but after Datatypes.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-arch.module "IGNORE" >
|
|
||||||
<![%xhtml-arch.module;[
|
|
||||||
<!ENTITY % xhtml-arch.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Base Architecture 1.0//EN"
|
|
||||||
"xhtml-arch-1.mod" >
|
|
||||||
%xhtml-arch.mod;]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-notations.module "IGNORE" >
|
|
||||||
<![%xhtml-notations.module;[
|
|
||||||
<!ENTITY % xhtml-notations.mod
|
|
||||||
PUBLIC "-//W3C//NOTATIONS XHTML Notations 1.0//EN"
|
|
||||||
"xhtml-notations-1.mod" >
|
|
||||||
%xhtml-notations.mod;]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-datatypes.module "INCLUDE" >
|
|
||||||
<![%xhtml-datatypes.module;[
|
|
||||||
<!ENTITY % xhtml-datatypes.mod
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Datatypes 1.0//EN"
|
|
||||||
"xhtml-datatypes-1.mod" >
|
|
||||||
%xhtml-datatypes.mod;]]>
|
|
||||||
|
|
||||||
<!-- placeholder for XLink support module -->
|
|
||||||
<!ENTITY % xhtml-xlink.mod "" >
|
|
||||||
%xhtml-xlink.mod;
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-qname.module "INCLUDE" >
|
|
||||||
<![%xhtml-qname.module;[
|
|
||||||
<!ENTITY % xhtml-qname.mod
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Qualified Names 1.0//EN"
|
|
||||||
"xhtml-qname-1.mod" >
|
|
||||||
%xhtml-qname.mod;]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-events.module "IGNORE" >
|
|
||||||
<![%xhtml-events.module;[
|
|
||||||
<!ENTITY % xhtml-events.mod
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Intrinsic Events 1.0//EN"
|
|
||||||
"xhtml-events-1.mod" >
|
|
||||||
%xhtml-events.mod;]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-attribs.module "INCLUDE" >
|
|
||||||
<![%xhtml-attribs.module;[
|
|
||||||
<!ENTITY % xhtml-attribs.mod
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Common Attributes 1.0//EN"
|
|
||||||
"xhtml-attribs-1.mod" >
|
|
||||||
%xhtml-attribs.mod;]]>
|
|
||||||
|
|
||||||
<!-- placeholder for content model redeclarations -->
|
|
||||||
<!ENTITY % xhtml-model.redecl "" >
|
|
||||||
%xhtml-model.redecl;
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-model.module "INCLUDE" >
|
|
||||||
<![%xhtml-model.module;[
|
|
||||||
<!-- instantiate the Document Model module declared in the DTD driver
|
|
||||||
-->
|
|
||||||
%xhtml-model.mod;]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-charent.module "INCLUDE" >
|
|
||||||
<![%xhtml-charent.module;[
|
|
||||||
<!ENTITY % xhtml-charent.mod
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Character Entities 1.0//EN"
|
|
||||||
"xhtml-charent-1.mod" >
|
|
||||||
%xhtml-charent.mod;]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-framework-1.mod -->
|
|
||||||
-54
@@ -1,54 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Hypertext Module .............................................. -->
|
|
||||||
<!-- file: xhtml-hypertext-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-hypertext-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Hypertext 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-hypertext-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Hypertext
|
|
||||||
|
|
||||||
a
|
|
||||||
|
|
||||||
This module declares the anchor ('a') element type, which
|
|
||||||
defines the source of a hypertext link. The destination
|
|
||||||
(or link 'target') is identified via its 'id' attribute
|
|
||||||
rather than the 'name' attribute as was used in HTML.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- ............ Anchor Element ............ -->
|
|
||||||
|
|
||||||
<!ENTITY % a.element "INCLUDE" >
|
|
||||||
<![%a.element;[
|
|
||||||
<!ENTITY % a.content
|
|
||||||
"( #PCDATA | %InlNoAnchor.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % a.qname "a" >
|
|
||||||
<!ELEMENT %a.qname; %a.content; >
|
|
||||||
<!-- end of a.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % a.attlist "INCLUDE" >
|
|
||||||
<![%a.attlist;[
|
|
||||||
<!ATTLIST %a.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
href %URI.datatype; #IMPLIED
|
|
||||||
charset %Charset.datatype; #IMPLIED
|
|
||||||
type %ContentType.datatype; #IMPLIED
|
|
||||||
hreflang %LanguageCode.datatype; #IMPLIED
|
|
||||||
rel %LinkTypes.datatype; #IMPLIED
|
|
||||||
rev %LinkTypes.datatype; #IMPLIED
|
|
||||||
accesskey %Character.datatype; #IMPLIED
|
|
||||||
tabindex %Number.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of a.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-hypertext-1.mod -->
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Images Module ................................................. -->
|
|
||||||
<!-- file: xhtml-image-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Rovision: $Id: xhtml-image-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Images 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-image-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Images
|
|
||||||
|
|
||||||
img
|
|
||||||
|
|
||||||
This module provides markup to support basic image embedding.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- To avoid problems with text-only UAs as well as to make
|
|
||||||
image content understandable and navigable to users of
|
|
||||||
non-visual UAs, you need to provide a description with
|
|
||||||
the 'alt' attribute, and avoid server-side image maps.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % img.element "INCLUDE" >
|
|
||||||
<![%img.element;[
|
|
||||||
<!ENTITY % img.content "EMPTY" >
|
|
||||||
<!ENTITY % img.qname "img" >
|
|
||||||
<!ELEMENT %img.qname; %img.content; >
|
|
||||||
<!-- end of img.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % img.attlist "INCLUDE" >
|
|
||||||
<![%img.attlist;[
|
|
||||||
<!ATTLIST %img.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
src %URI.datatype; #REQUIRED
|
|
||||||
alt %Text.datatype; #REQUIRED
|
|
||||||
longdesc %URI.datatype; #IMPLIED
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
height %Length.datatype; #IMPLIED
|
|
||||||
width %Length.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of img.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-image-1.mod -->
|
|
||||||
-203
@@ -1,203 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Inline Phrasal Module ......................................... -->
|
|
||||||
<!-- file: xhtml-inlphras-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-inlphras-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Inline Phrasal 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-inlphras-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Inline Phrasal
|
|
||||||
|
|
||||||
abbr, acronym, cite, code, dfn, em, kbd, q, samp, strong, var
|
|
||||||
|
|
||||||
This module declares the elements and their attributes used to
|
|
||||||
support inline-level phrasal markup.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % abbr.element "INCLUDE" >
|
|
||||||
<![%abbr.element;[
|
|
||||||
<!ENTITY % abbr.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % abbr.qname "abbr" >
|
|
||||||
<!ELEMENT %abbr.qname; %abbr.content; >
|
|
||||||
<!-- end of abbr.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % abbr.attlist "INCLUDE" >
|
|
||||||
<![%abbr.attlist;[
|
|
||||||
<!ATTLIST %abbr.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of abbr.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % acronym.element "INCLUDE" >
|
|
||||||
<![%acronym.element;[
|
|
||||||
<!ENTITY % acronym.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % acronym.qname "acronym" >
|
|
||||||
<!ELEMENT %acronym.qname; %acronym.content; >
|
|
||||||
<!-- end of acronym.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % acronym.attlist "INCLUDE" >
|
|
||||||
<![%acronym.attlist;[
|
|
||||||
<!ATTLIST %acronym.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of acronym.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % cite.element "INCLUDE" >
|
|
||||||
<![%cite.element;[
|
|
||||||
<!ENTITY % cite.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % cite.qname "cite" >
|
|
||||||
<!ELEMENT %cite.qname; %cite.content; >
|
|
||||||
<!-- end of cite.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % cite.attlist "INCLUDE" >
|
|
||||||
<![%cite.attlist;[
|
|
||||||
<!ATTLIST %cite.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of cite.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % code.element "INCLUDE" >
|
|
||||||
<![%code.element;[
|
|
||||||
<!ENTITY % code.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % code.qname "code" >
|
|
||||||
<!ELEMENT %code.qname; %code.content; >
|
|
||||||
<!-- end of code.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % code.attlist "INCLUDE" >
|
|
||||||
<![%code.attlist;[
|
|
||||||
<!ATTLIST %code.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of code.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % dfn.element "INCLUDE" >
|
|
||||||
<![%dfn.element;[
|
|
||||||
<!ENTITY % dfn.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % dfn.qname "dfn" >
|
|
||||||
<!ELEMENT %dfn.qname; %dfn.content; >
|
|
||||||
<!-- end of dfn.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % dfn.attlist "INCLUDE" >
|
|
||||||
<![%dfn.attlist;[
|
|
||||||
<!ATTLIST %dfn.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of dfn.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % em.element "INCLUDE" >
|
|
||||||
<![%em.element;[
|
|
||||||
<!ENTITY % em.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % em.qname "em" >
|
|
||||||
<!ELEMENT %em.qname; %em.content; >
|
|
||||||
<!-- end of em.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % em.attlist "INCLUDE" >
|
|
||||||
<![%em.attlist;[
|
|
||||||
<!ATTLIST %em.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of em.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % kbd.element "INCLUDE" >
|
|
||||||
<![%kbd.element;[
|
|
||||||
<!ENTITY % kbd.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % kbd.qname "kbd" >
|
|
||||||
<!ELEMENT %kbd.qname; %kbd.content; >
|
|
||||||
<!-- end of kbd.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % kbd.attlist "INCLUDE" >
|
|
||||||
<![%kbd.attlist;[
|
|
||||||
<!ATTLIST %kbd.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of kbd.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % q.element "INCLUDE" >
|
|
||||||
<![%q.element;[
|
|
||||||
<!ENTITY % q.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % q.qname "q" >
|
|
||||||
<!ELEMENT %q.qname; %q.content; >
|
|
||||||
<!-- end of q.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % q.attlist "INCLUDE" >
|
|
||||||
<![%q.attlist;[
|
|
||||||
<!ATTLIST %q.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
cite %URI.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of q.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % samp.element "INCLUDE" >
|
|
||||||
<![%samp.element;[
|
|
||||||
<!ENTITY % samp.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % samp.qname "samp" >
|
|
||||||
<!ELEMENT %samp.qname; %samp.content; >
|
|
||||||
<!-- end of samp.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % samp.attlist "INCLUDE" >
|
|
||||||
<![%samp.attlist;[
|
|
||||||
<!ATTLIST %samp.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of samp.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % strong.element "INCLUDE" >
|
|
||||||
<![%strong.element;[
|
|
||||||
<!ENTITY % strong.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % strong.qname "strong" >
|
|
||||||
<!ELEMENT %strong.qname; %strong.content; >
|
|
||||||
<!-- end of strong.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % strong.attlist "INCLUDE" >
|
|
||||||
<![%strong.attlist;[
|
|
||||||
<!ATTLIST %strong.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of strong.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % var.element "INCLUDE" >
|
|
||||||
<![%var.element;[
|
|
||||||
<!ENTITY % var.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % var.qname "var" >
|
|
||||||
<!ELEMENT %var.qname; %var.content; >
|
|
||||||
<!-- end of var.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % var.attlist "INCLUDE" >
|
|
||||||
<![%var.attlist;[
|
|
||||||
<!ATTLIST %var.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of var.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-inlphras-1.mod -->
|
|
||||||
-138
@@ -1,138 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Inline Presentation Module .................................... -->
|
|
||||||
<!-- file: xhtml-inlpres-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-inlpres-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Inline Presentation 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-inlpres-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Inline Presentational Elements
|
|
||||||
|
|
||||||
b, big, i, small, sub, sup, tt
|
|
||||||
|
|
||||||
This module declares the elements and their attributes used to
|
|
||||||
support inline-level presentational markup.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % b.element "INCLUDE" >
|
|
||||||
<![%b.element;[
|
|
||||||
<!ENTITY % b.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % b.qname "b" >
|
|
||||||
<!ELEMENT %b.qname; %b.content; >
|
|
||||||
<!-- end of b.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % b.attlist "INCLUDE" >
|
|
||||||
<![%b.attlist;[
|
|
||||||
<!ATTLIST %b.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of b.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % big.element "INCLUDE" >
|
|
||||||
<![%big.element;[
|
|
||||||
<!ENTITY % big.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % big.qname "big" >
|
|
||||||
<!ELEMENT %big.qname; %big.content; >
|
|
||||||
<!-- end of big.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % big.attlist "INCLUDE" >
|
|
||||||
<![%big.attlist;[
|
|
||||||
<!ATTLIST %big.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of big.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % i.element "INCLUDE" >
|
|
||||||
<![%i.element;[
|
|
||||||
<!ENTITY % i.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % i.qname "i" >
|
|
||||||
<!ELEMENT %i.qname; %i.content; >
|
|
||||||
<!-- end of i.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % i.attlist "INCLUDE" >
|
|
||||||
<![%i.attlist;[
|
|
||||||
<!ATTLIST %i.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of i.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % small.element "INCLUDE" >
|
|
||||||
<![%small.element;[
|
|
||||||
<!ENTITY % small.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % small.qname "small" >
|
|
||||||
<!ELEMENT %small.qname; %small.content; >
|
|
||||||
<!-- end of small.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % small.attlist "INCLUDE" >
|
|
||||||
<![%small.attlist;[
|
|
||||||
<!ATTLIST %small.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of small.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % sub.element "INCLUDE" >
|
|
||||||
<![%sub.element;[
|
|
||||||
<!ENTITY % sub.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % sub.qname "sub" >
|
|
||||||
<!ELEMENT %sub.qname; %sub.content; >
|
|
||||||
<!-- end of sub.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % sub.attlist "INCLUDE" >
|
|
||||||
<![%sub.attlist;[
|
|
||||||
<!ATTLIST %sub.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of sub.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % sup.element "INCLUDE" >
|
|
||||||
<![%sup.element;[
|
|
||||||
<!ENTITY % sup.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % sup.qname "sup" >
|
|
||||||
<!ELEMENT %sup.qname; %sup.content; >
|
|
||||||
<!-- end of sup.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % sup.attlist "INCLUDE" >
|
|
||||||
<![%sup.attlist;[
|
|
||||||
<!ATTLIST %sup.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of sup.attlist -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % tt.element "INCLUDE" >
|
|
||||||
<![%tt.element;[
|
|
||||||
<!ENTITY % tt.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % tt.qname "tt" >
|
|
||||||
<!ELEMENT %tt.qname; %tt.content; >
|
|
||||||
<!-- end of tt.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % tt.attlist "INCLUDE" >
|
|
||||||
<![%tt.attlist;[
|
|
||||||
<!ATTLIST %tt.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of tt.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-inlpres-1.mod -->
|
|
||||||
-62
@@ -1,62 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Inline Structural Module ...................................... -->
|
|
||||||
<!-- file: xhtml-inlstruct-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-inlstruct-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Inline Structural 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-inlstruct-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Inline Structural
|
|
||||||
|
|
||||||
br, span
|
|
||||||
|
|
||||||
This module declares the elements and their attributes
|
|
||||||
used to support inline-level structural markup.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- br: forced line break ............................. -->
|
|
||||||
|
|
||||||
<!ENTITY % br.element "INCLUDE" >
|
|
||||||
<![%br.element;[
|
|
||||||
|
|
||||||
<!ENTITY % br.content "EMPTY" >
|
|
||||||
<!ENTITY % br.qname "br" >
|
|
||||||
<!ELEMENT %br.qname; %br.content; >
|
|
||||||
|
|
||||||
<!-- end of br.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % br.attlist "INCLUDE" >
|
|
||||||
<![%br.attlist;[
|
|
||||||
<!ATTLIST %br.qname;
|
|
||||||
%Core.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of br.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- span: generic inline container .................... -->
|
|
||||||
|
|
||||||
<!ENTITY % span.element "INCLUDE" >
|
|
||||||
<![%span.element;[
|
|
||||||
<!ENTITY % span.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % span.qname "span" >
|
|
||||||
<!ELEMENT %span.qname; %span.content; >
|
|
||||||
<!-- end of span.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % span.attlist "INCLUDE" >
|
|
||||||
<![%span.attlist;[
|
|
||||||
<!ATTLIST %span.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of span.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-inlstruct-1.mod -->
|
|
||||||
-34
@@ -1,34 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Inline Style Module ........................................... -->
|
|
||||||
<!-- file: xhtml-inlstyle-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-inlstyle-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Inline Style 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-inlstyle-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Inline Style
|
|
||||||
|
|
||||||
This module declares the 'style' attribute, used to support inline
|
|
||||||
style markup. This module must be instantiated prior to the XHTML
|
|
||||||
Common Attributes module in order to be included in %Core.attrib;.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % style.attrib
|
|
||||||
"style CDATA #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
|
|
||||||
<!ENTITY % Core.extra.attrib
|
|
||||||
"%style.attrib;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- end of xhtml-inlstyle-1.mod -->
|
|
||||||
@@ -1,196 +0,0 @@
|
|||||||
<!-- Portions (C) International Organization for Standardization 1986
|
|
||||||
Permission to copy in any form is granted for use with
|
|
||||||
conforming SGML systems and applications as defined in
|
|
||||||
ISO 8879, provided this notice is included in all copies.
|
|
||||||
-->
|
|
||||||
<!-- Character entity set. Typical invocation:
|
|
||||||
<!ENTITY % HTMLlat1 PUBLIC
|
|
||||||
"-//W3C//ENTITIES Latin 1 for XHTML//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
|
|
||||||
%HTMLlat1;
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY nbsp " "> <!-- no-break space = non-breaking space,
|
|
||||||
U+00A0 ISOnum -->
|
|
||||||
<!ENTITY iexcl "¡"> <!-- inverted exclamation mark, U+00A1 ISOnum -->
|
|
||||||
<!ENTITY cent "¢"> <!-- cent sign, U+00A2 ISOnum -->
|
|
||||||
<!ENTITY pound "£"> <!-- pound sign, U+00A3 ISOnum -->
|
|
||||||
<!ENTITY curren "¤"> <!-- currency sign, U+00A4 ISOnum -->
|
|
||||||
<!ENTITY yen "¥"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->
|
|
||||||
<!ENTITY brvbar "¦"> <!-- broken bar = broken vertical bar,
|
|
||||||
U+00A6 ISOnum -->
|
|
||||||
<!ENTITY sect "§"> <!-- section sign, U+00A7 ISOnum -->
|
|
||||||
<!ENTITY uml "¨"> <!-- diaeresis = spacing diaeresis,
|
|
||||||
U+00A8 ISOdia -->
|
|
||||||
<!ENTITY copy "©"> <!-- copyright sign, U+00A9 ISOnum -->
|
|
||||||
<!ENTITY ordf "ª"> <!-- feminine ordinal indicator, U+00AA ISOnum -->
|
|
||||||
<!ENTITY laquo "«"> <!-- left-pointing double angle quotation mark
|
|
||||||
= left pointing guillemet, U+00AB ISOnum -->
|
|
||||||
<!ENTITY not "¬"> <!-- not sign = angled dash,
|
|
||||||
U+00AC ISOnum -->
|
|
||||||
<!ENTITY shy "­"> <!-- soft hyphen = discretionary hyphen,
|
|
||||||
U+00AD ISOnum -->
|
|
||||||
<!ENTITY reg "®"> <!-- registered sign = registered trade mark sign,
|
|
||||||
U+00AE ISOnum -->
|
|
||||||
<!ENTITY macr "¯"> <!-- macron = spacing macron = overline
|
|
||||||
= APL overbar, U+00AF ISOdia -->
|
|
||||||
<!ENTITY deg "°"> <!-- degree sign, U+00B0 ISOnum -->
|
|
||||||
<!ENTITY plusmn "±"> <!-- plus-minus sign = plus-or-minus sign,
|
|
||||||
U+00B1 ISOnum -->
|
|
||||||
<!ENTITY sup2 "²"> <!-- superscript two = superscript digit two
|
|
||||||
= squared, U+00B2 ISOnum -->
|
|
||||||
<!ENTITY sup3 "³"> <!-- superscript three = superscript digit three
|
|
||||||
= cubed, U+00B3 ISOnum -->
|
|
||||||
<!ENTITY acute "´"> <!-- acute accent = spacing acute,
|
|
||||||
U+00B4 ISOdia -->
|
|
||||||
<!ENTITY micro "µ"> <!-- micro sign, U+00B5 ISOnum -->
|
|
||||||
<!ENTITY para "¶"> <!-- pilcrow sign = paragraph sign,
|
|
||||||
U+00B6 ISOnum -->
|
|
||||||
<!ENTITY middot "·"> <!-- middle dot = Georgian comma
|
|
||||||
= Greek middle dot, U+00B7 ISOnum -->
|
|
||||||
<!ENTITY cedil "¸"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
|
|
||||||
<!ENTITY sup1 "¹"> <!-- superscript one = superscript digit one,
|
|
||||||
U+00B9 ISOnum -->
|
|
||||||
<!ENTITY ordm "º"> <!-- masculine ordinal indicator,
|
|
||||||
U+00BA ISOnum -->
|
|
||||||
<!ENTITY raquo "»"> <!-- right-pointing double angle quotation mark
|
|
||||||
= right pointing guillemet, U+00BB ISOnum -->
|
|
||||||
<!ENTITY frac14 "¼"> <!-- vulgar fraction one quarter
|
|
||||||
= fraction one quarter, U+00BC ISOnum -->
|
|
||||||
<!ENTITY frac12 "½"> <!-- vulgar fraction one half
|
|
||||||
= fraction one half, U+00BD ISOnum -->
|
|
||||||
<!ENTITY frac34 "¾"> <!-- vulgar fraction three quarters
|
|
||||||
= fraction three quarters, U+00BE ISOnum -->
|
|
||||||
<!ENTITY iquest "¿"> <!-- inverted question mark
|
|
||||||
= turned question mark, U+00BF ISOnum -->
|
|
||||||
<!ENTITY Agrave "À"> <!-- latin capital letter A with grave
|
|
||||||
= latin capital letter A grave,
|
|
||||||
U+00C0 ISOlat1 -->
|
|
||||||
<!ENTITY Aacute "Á"> <!-- latin capital letter A with acute,
|
|
||||||
U+00C1 ISOlat1 -->
|
|
||||||
<!ENTITY Acirc "Â"> <!-- latin capital letter A with circumflex,
|
|
||||||
U+00C2 ISOlat1 -->
|
|
||||||
<!ENTITY Atilde "Ã"> <!-- latin capital letter A with tilde,
|
|
||||||
U+00C3 ISOlat1 -->
|
|
||||||
<!ENTITY Auml "Ä"> <!-- latin capital letter A with diaeresis,
|
|
||||||
U+00C4 ISOlat1 -->
|
|
||||||
<!ENTITY Aring "Å"> <!-- latin capital letter A with ring above
|
|
||||||
= latin capital letter A ring,
|
|
||||||
U+00C5 ISOlat1 -->
|
|
||||||
<!ENTITY AElig "Æ"> <!-- latin capital letter AE
|
|
||||||
= latin capital ligature AE,
|
|
||||||
U+00C6 ISOlat1 -->
|
|
||||||
<!ENTITY Ccedil "Ç"> <!-- latin capital letter C with cedilla,
|
|
||||||
U+00C7 ISOlat1 -->
|
|
||||||
<!ENTITY Egrave "È"> <!-- latin capital letter E with grave,
|
|
||||||
U+00C8 ISOlat1 -->
|
|
||||||
<!ENTITY Eacute "É"> <!-- latin capital letter E with acute,
|
|
||||||
U+00C9 ISOlat1 -->
|
|
||||||
<!ENTITY Ecirc "Ê"> <!-- latin capital letter E with circumflex,
|
|
||||||
U+00CA ISOlat1 -->
|
|
||||||
<!ENTITY Euml "Ë"> <!-- latin capital letter E with diaeresis,
|
|
||||||
U+00CB ISOlat1 -->
|
|
||||||
<!ENTITY Igrave "Ì"> <!-- latin capital letter I with grave,
|
|
||||||
U+00CC ISOlat1 -->
|
|
||||||
<!ENTITY Iacute "Í"> <!-- latin capital letter I with acute,
|
|
||||||
U+00CD ISOlat1 -->
|
|
||||||
<!ENTITY Icirc "Î"> <!-- latin capital letter I with circumflex,
|
|
||||||
U+00CE ISOlat1 -->
|
|
||||||
<!ENTITY Iuml "Ï"> <!-- latin capital letter I with diaeresis,
|
|
||||||
U+00CF ISOlat1 -->
|
|
||||||
<!ENTITY ETH "Ð"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->
|
|
||||||
<!ENTITY Ntilde "Ñ"> <!-- latin capital letter N with tilde,
|
|
||||||
U+00D1 ISOlat1 -->
|
|
||||||
<!ENTITY Ograve "Ò"> <!-- latin capital letter O with grave,
|
|
||||||
U+00D2 ISOlat1 -->
|
|
||||||
<!ENTITY Oacute "Ó"> <!-- latin capital letter O with acute,
|
|
||||||
U+00D3 ISOlat1 -->
|
|
||||||
<!ENTITY Ocirc "Ô"> <!-- latin capital letter O with circumflex,
|
|
||||||
U+00D4 ISOlat1 -->
|
|
||||||
<!ENTITY Otilde "Õ"> <!-- latin capital letter O with tilde,
|
|
||||||
U+00D5 ISOlat1 -->
|
|
||||||
<!ENTITY Ouml "Ö"> <!-- latin capital letter O with diaeresis,
|
|
||||||
U+00D6 ISOlat1 -->
|
|
||||||
<!ENTITY times "×"> <!-- multiplication sign, U+00D7 ISOnum -->
|
|
||||||
<!ENTITY Oslash "Ø"> <!-- latin capital letter O with stroke
|
|
||||||
= latin capital letter O slash,
|
|
||||||
U+00D8 ISOlat1 -->
|
|
||||||
<!ENTITY Ugrave "Ù"> <!-- latin capital letter U with grave,
|
|
||||||
U+00D9 ISOlat1 -->
|
|
||||||
<!ENTITY Uacute "Ú"> <!-- latin capital letter U with acute,
|
|
||||||
U+00DA ISOlat1 -->
|
|
||||||
<!ENTITY Ucirc "Û"> <!-- latin capital letter U with circumflex,
|
|
||||||
U+00DB ISOlat1 -->
|
|
||||||
<!ENTITY Uuml "Ü"> <!-- latin capital letter U with diaeresis,
|
|
||||||
U+00DC ISOlat1 -->
|
|
||||||
<!ENTITY Yacute "Ý"> <!-- latin capital letter Y with acute,
|
|
||||||
U+00DD ISOlat1 -->
|
|
||||||
<!ENTITY THORN "Þ"> <!-- latin capital letter THORN,
|
|
||||||
U+00DE ISOlat1 -->
|
|
||||||
<!ENTITY szlig "ß"> <!-- latin small letter sharp s = ess-zed,
|
|
||||||
U+00DF ISOlat1 -->
|
|
||||||
<!ENTITY agrave "à"> <!-- latin small letter a with grave
|
|
||||||
= latin small letter a grave,
|
|
||||||
U+00E0 ISOlat1 -->
|
|
||||||
<!ENTITY aacute "á"> <!-- latin small letter a with acute,
|
|
||||||
U+00E1 ISOlat1 -->
|
|
||||||
<!ENTITY acirc "â"> <!-- latin small letter a with circumflex,
|
|
||||||
U+00E2 ISOlat1 -->
|
|
||||||
<!ENTITY atilde "ã"> <!-- latin small letter a with tilde,
|
|
||||||
U+00E3 ISOlat1 -->
|
|
||||||
<!ENTITY auml "ä"> <!-- latin small letter a with diaeresis,
|
|
||||||
U+00E4 ISOlat1 -->
|
|
||||||
<!ENTITY aring "å"> <!-- latin small letter a with ring above
|
|
||||||
= latin small letter a ring,
|
|
||||||
U+00E5 ISOlat1 -->
|
|
||||||
<!ENTITY aelig "æ"> <!-- latin small letter ae
|
|
||||||
= latin small ligature ae, U+00E6 ISOlat1 -->
|
|
||||||
<!ENTITY ccedil "ç"> <!-- latin small letter c with cedilla,
|
|
||||||
U+00E7 ISOlat1 -->
|
|
||||||
<!ENTITY egrave "è"> <!-- latin small letter e with grave,
|
|
||||||
U+00E8 ISOlat1 -->
|
|
||||||
<!ENTITY eacute "é"> <!-- latin small letter e with acute,
|
|
||||||
U+00E9 ISOlat1 -->
|
|
||||||
<!ENTITY ecirc "ê"> <!-- latin small letter e with circumflex,
|
|
||||||
U+00EA ISOlat1 -->
|
|
||||||
<!ENTITY euml "ë"> <!-- latin small letter e with diaeresis,
|
|
||||||
U+00EB ISOlat1 -->
|
|
||||||
<!ENTITY igrave "ì"> <!-- latin small letter i with grave,
|
|
||||||
U+00EC ISOlat1 -->
|
|
||||||
<!ENTITY iacute "í"> <!-- latin small letter i with acute,
|
|
||||||
U+00ED ISOlat1 -->
|
|
||||||
<!ENTITY icirc "î"> <!-- latin small letter i with circumflex,
|
|
||||||
U+00EE ISOlat1 -->
|
|
||||||
<!ENTITY iuml "ï"> <!-- latin small letter i with diaeresis,
|
|
||||||
U+00EF ISOlat1 -->
|
|
||||||
<!ENTITY eth "ð"> <!-- latin small letter eth, U+00F0 ISOlat1 -->
|
|
||||||
<!ENTITY ntilde "ñ"> <!-- latin small letter n with tilde,
|
|
||||||
U+00F1 ISOlat1 -->
|
|
||||||
<!ENTITY ograve "ò"> <!-- latin small letter o with grave,
|
|
||||||
U+00F2 ISOlat1 -->
|
|
||||||
<!ENTITY oacute "ó"> <!-- latin small letter o with acute,
|
|
||||||
U+00F3 ISOlat1 -->
|
|
||||||
<!ENTITY ocirc "ô"> <!-- latin small letter o with circumflex,
|
|
||||||
U+00F4 ISOlat1 -->
|
|
||||||
<!ENTITY otilde "õ"> <!-- latin small letter o with tilde,
|
|
||||||
U+00F5 ISOlat1 -->
|
|
||||||
<!ENTITY ouml "ö"> <!-- latin small letter o with diaeresis,
|
|
||||||
U+00F6 ISOlat1 -->
|
|
||||||
<!ENTITY divide "÷"> <!-- division sign, U+00F7 ISOnum -->
|
|
||||||
<!ENTITY oslash "ø"> <!-- latin small letter o with stroke,
|
|
||||||
= latin small letter o slash,
|
|
||||||
U+00F8 ISOlat1 -->
|
|
||||||
<!ENTITY ugrave "ù"> <!-- latin small letter u with grave,
|
|
||||||
U+00F9 ISOlat1 -->
|
|
||||||
<!ENTITY uacute "ú"> <!-- latin small letter u with acute,
|
|
||||||
U+00FA ISOlat1 -->
|
|
||||||
<!ENTITY ucirc "û"> <!-- latin small letter u with circumflex,
|
|
||||||
U+00FB ISOlat1 -->
|
|
||||||
<!ENTITY uuml "ü"> <!-- latin small letter u with diaeresis,
|
|
||||||
U+00FC ISOlat1 -->
|
|
||||||
<!ENTITY yacute "ý"> <!-- latin small letter y with acute,
|
|
||||||
U+00FD ISOlat1 -->
|
|
||||||
<!ENTITY thorn "þ"> <!-- latin small letter thorn,
|
|
||||||
U+00FE ISOlat1 -->
|
|
||||||
<!ENTITY yuml "ÿ"> <!-- latin small letter y with diaeresis,
|
|
||||||
U+00FF ISOlat1 -->
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Link Element Module ........................................... -->
|
|
||||||
<!-- file: xhtml-link-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-link-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Link Element 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-link-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Link element
|
|
||||||
|
|
||||||
link
|
|
||||||
|
|
||||||
This module declares the link element type and its attributes,
|
|
||||||
which could (in principle) be used to define document-level links
|
|
||||||
to external resources such as:
|
|
||||||
|
|
||||||
a) for document specific toolbars/menus, e.g. start, contents,
|
|
||||||
previous, next, index, end, help
|
|
||||||
b) to link to a separate style sheet (rel="stylesheet")
|
|
||||||
c) to make a link to a script (rel="script")
|
|
||||||
d) by style sheets to control how collections of html nodes are
|
|
||||||
rendered into printed documents
|
|
||||||
e) to make a link to a printable version of this document
|
|
||||||
e.g. a postscript or pdf version (rel="alternate" media="print")
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- link: Media-Independent Link ...................... -->
|
|
||||||
|
|
||||||
<!ENTITY % link.element "INCLUDE" >
|
|
||||||
<![%link.element;[
|
|
||||||
<!ENTITY % link.content "EMPTY" >
|
|
||||||
<!ENTITY % link.qname "link" >
|
|
||||||
<!ELEMENT %link.qname; %link.content; >
|
|
||||||
<!-- end of link.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % link.attlist "INCLUDE" >
|
|
||||||
<![%link.attlist;[
|
|
||||||
<!ATTLIST %link.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
charset %Charset.datatype; #IMPLIED
|
|
||||||
href %URI.datatype; #IMPLIED
|
|
||||||
hreflang %LanguageCode.datatype; #IMPLIED
|
|
||||||
type %ContentType.datatype; #IMPLIED
|
|
||||||
rel %LinkTypes.datatype; #IMPLIED
|
|
||||||
rev %LinkTypes.datatype; #IMPLIED
|
|
||||||
media %MediaDesc.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of link.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-link-1.mod -->
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Lists Module .................................................. -->
|
|
||||||
<!-- file: xhtml-list-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-list-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Lists 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-list-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Lists
|
|
||||||
|
|
||||||
dl, dt, dd, ol, ul, li
|
|
||||||
|
|
||||||
This module declares the list-oriented element types
|
|
||||||
and their attributes.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % dl.qname "dl" >
|
|
||||||
<!ENTITY % dt.qname "dt" >
|
|
||||||
<!ENTITY % dd.qname "dd" >
|
|
||||||
<!ENTITY % ol.qname "ol" >
|
|
||||||
<!ENTITY % ul.qname "ul" >
|
|
||||||
<!ENTITY % li.qname "li" >
|
|
||||||
|
|
||||||
<!-- dl: Definition List ............................... -->
|
|
||||||
|
|
||||||
<!ENTITY % dl.element "INCLUDE" >
|
|
||||||
<![%dl.element;[
|
|
||||||
<!ENTITY % dl.content "( %dt.qname; | %dd.qname; )+" >
|
|
||||||
<!ELEMENT %dl.qname; %dl.content; >
|
|
||||||
<!-- end of dl.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % dl.attlist "INCLUDE" >
|
|
||||||
<![%dl.attlist;[
|
|
||||||
<!ATTLIST %dl.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of dl.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- dt: Definition Term ............................... -->
|
|
||||||
|
|
||||||
<!ENTITY % dt.element "INCLUDE" >
|
|
||||||
<![%dt.element;[
|
|
||||||
<!ENTITY % dt.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %dt.qname; %dt.content; >
|
|
||||||
<!-- end of dt.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % dt.attlist "INCLUDE" >
|
|
||||||
<![%dt.attlist;[
|
|
||||||
<!ATTLIST %dt.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of dt.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- dd: Definition Description ........................ -->
|
|
||||||
|
|
||||||
<!ENTITY % dd.element "INCLUDE" >
|
|
||||||
<![%dd.element;[
|
|
||||||
<!ENTITY % dd.content
|
|
||||||
"( #PCDATA | %Flow.mix; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %dd.qname; %dd.content; >
|
|
||||||
<!-- end of dd.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % dd.attlist "INCLUDE" >
|
|
||||||
<![%dd.attlist;[
|
|
||||||
<!ATTLIST %dd.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of dd.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- ol: Ordered List (numbered styles) ................ -->
|
|
||||||
|
|
||||||
<!ENTITY % ol.element "INCLUDE" >
|
|
||||||
<![%ol.element;[
|
|
||||||
<!ENTITY % ol.content "( %li.qname; )+" >
|
|
||||||
<!ELEMENT %ol.qname; %ol.content; >
|
|
||||||
<!-- end of ol.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % ol.attlist "INCLUDE" >
|
|
||||||
<![%ol.attlist;[
|
|
||||||
<!ATTLIST %ol.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of ol.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- ul: Unordered List (bullet styles) ................ -->
|
|
||||||
|
|
||||||
<!ENTITY % ul.element "INCLUDE" >
|
|
||||||
<![%ul.element;[
|
|
||||||
<!ENTITY % ul.content "( %li.qname; )+" >
|
|
||||||
<!ELEMENT %ul.qname; %ul.content; >
|
|
||||||
<!-- end of ul.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % ul.attlist "INCLUDE" >
|
|
||||||
<![%ul.attlist;[
|
|
||||||
<!ATTLIST %ul.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of ul.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- li: List Item ..................................... -->
|
|
||||||
|
|
||||||
<!ENTITY % li.element "INCLUDE" >
|
|
||||||
<![%li.element;[
|
|
||||||
<!ENTITY % li.content
|
|
||||||
"( #PCDATA | %Flow.mix; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %li.qname; %li.content; >
|
|
||||||
<!-- end of li.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % li.attlist "INCLUDE" >
|
|
||||||
<![%li.attlist;[
|
|
||||||
<!ATTLIST %li.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of li.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-list-1.mod -->
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Document Metainformation Module ............................... -->
|
|
||||||
<!-- file: xhtml-meta-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-meta-1.mod,v 1.1 2010/07/29 13:42:47 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Metainformation 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-meta-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Meta Information
|
|
||||||
|
|
||||||
meta
|
|
||||||
|
|
||||||
This module declares the meta element type and its attributes,
|
|
||||||
used to provide declarative document metainformation.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- meta: Generic Metainformation ..................... -->
|
|
||||||
|
|
||||||
<!ENTITY % meta.element "INCLUDE" >
|
|
||||||
<![%meta.element;[
|
|
||||||
<!ENTITY % meta.content "EMPTY" >
|
|
||||||
<!ENTITY % meta.qname "meta" >
|
|
||||||
<!ELEMENT %meta.qname; %meta.content; >
|
|
||||||
<!-- end of meta.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % meta.attlist "INCLUDE" >
|
|
||||||
<![%meta.attlist;[
|
|
||||||
<!ATTLIST %meta.qname;
|
|
||||||
%XHTML.xmlns.attrib;
|
|
||||||
%I18n.attrib;
|
|
||||||
http-equiv NMTOKEN #IMPLIED
|
|
||||||
name NMTOKEN #IMPLIED
|
|
||||||
content CDATA #REQUIRED
|
|
||||||
scheme CDATA #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of meta.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-meta-1.mod -->
|
|
||||||
-114
@@ -1,114 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Notations Module .............................................. -->
|
|
||||||
<!-- file: xhtml-notations-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-notations-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//NOTATIONS XHTML Notations 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-notations-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Notations
|
|
||||||
|
|
||||||
defines the following notations, many of these imported from
|
|
||||||
other specifications and standards. When an existing FPI is
|
|
||||||
known, it is incorporated here.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- XML Notations ..................................... -->
|
|
||||||
<!-- SGML and XML Notations ............................ -->
|
|
||||||
|
|
||||||
<!-- W3C XML 1.0 Recommendation -->
|
|
||||||
<!NOTATION w3c-xml
|
|
||||||
PUBLIC "ISO 8879//NOTATION Extensible Markup Language (XML) 1.0//EN" >
|
|
||||||
|
|
||||||
<!-- XML 1.0 CDATA -->
|
|
||||||
<!NOTATION cdata
|
|
||||||
PUBLIC "-//W3C//NOTATION XML 1.0: CDATA//EN" >
|
|
||||||
|
|
||||||
<!-- SGML Formal Public Identifiers -->
|
|
||||||
<!NOTATION fpi
|
|
||||||
PUBLIC "ISO 8879:1986//NOTATION Formal Public Identifier//EN" >
|
|
||||||
|
|
||||||
<!-- XHTML Notations ................................... -->
|
|
||||||
|
|
||||||
<!-- Length defined for cellpadding/cellspacing -->
|
|
||||||
|
|
||||||
<!-- nn for pixels or nn% for percentage length -->
|
|
||||||
<!NOTATION length
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: Length//EN" >
|
|
||||||
|
|
||||||
<!-- space-separated list of link types -->
|
|
||||||
<!NOTATION linkTypes
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: LinkTypes//EN" >
|
|
||||||
|
|
||||||
<!-- single or comma-separated list of media descriptors -->
|
|
||||||
<!NOTATION mediaDesc
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: MediaDesc//EN" >
|
|
||||||
|
|
||||||
<!-- pixel, percentage, or relative -->
|
|
||||||
<!NOTATION multiLength
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: MultiLength//EN" >
|
|
||||||
|
|
||||||
<!-- one or more digits (NUMBER) -->
|
|
||||||
<!NOTATION number
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: Number//EN" >
|
|
||||||
|
|
||||||
<!-- integer representing length in pixels -->
|
|
||||||
<!NOTATION pixels
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: Pixels//EN" >
|
|
||||||
|
|
||||||
<!-- script expression -->
|
|
||||||
<!NOTATION script
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: Script//EN" >
|
|
||||||
|
|
||||||
<!-- textual content -->
|
|
||||||
<!NOTATION text
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: Text//EN" >
|
|
||||||
|
|
||||||
<!-- Imported Notations ................................ -->
|
|
||||||
|
|
||||||
<!-- a single character from [ISO10646] -->
|
|
||||||
<!NOTATION character
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: Character//EN" >
|
|
||||||
|
|
||||||
<!-- a character encoding, as per [RFC2045] -->
|
|
||||||
<!NOTATION charset
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: Charset//EN" >
|
|
||||||
|
|
||||||
<!-- a space separated list of character encodings, as per [RFC2045] -->
|
|
||||||
<!NOTATION charsets
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: Charsets//EN" >
|
|
||||||
|
|
||||||
<!-- media type, as per [RFC2045] -->
|
|
||||||
<!NOTATION contentType
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: ContentType//EN" >
|
|
||||||
|
|
||||||
<!-- comma-separated list of media types, as per [RFC2045] -->
|
|
||||||
<!NOTATION contentTypes
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: ContentTypes//EN" >
|
|
||||||
|
|
||||||
<!-- date and time information. ISO date format -->
|
|
||||||
<!NOTATION datetime
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: Datetime//EN" >
|
|
||||||
|
|
||||||
<!-- a language code, as per [RFC3066] -->
|
|
||||||
<!NOTATION languageCode
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: LanguageCode//EN" >
|
|
||||||
|
|
||||||
<!-- a Uniform Resource Identifier, see [URI] -->
|
|
||||||
<!NOTATION uri
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: URI//EN" >
|
|
||||||
|
|
||||||
<!-- a space-separated list of Uniform Resource Identifiers, see [URI] -->
|
|
||||||
<!NOTATION uris
|
|
||||||
PUBLIC "-//W3C//NOTATION XHTML Datatype: URIs//EN" >
|
|
||||||
|
|
||||||
<!-- end of xhtml-notations-1.mod -->
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Embedded Object Module ........................................ -->
|
|
||||||
<!-- file: xhtml-object-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-object-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Embedded Object 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-object-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Embedded Objects
|
|
||||||
|
|
||||||
object
|
|
||||||
|
|
||||||
This module declares the object element type and its attributes, used
|
|
||||||
to embed external objects as part of XHTML pages. In the document,
|
|
||||||
place param elements prior to other content within the object element.
|
|
||||||
|
|
||||||
Note that use of this module requires instantiation of the Param
|
|
||||||
Element Module.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- object: Generic Embedded Object ................... -->
|
|
||||||
|
|
||||||
<!ENTITY % object.element "INCLUDE" >
|
|
||||||
<![%object.element;[
|
|
||||||
<!ENTITY % object.content
|
|
||||||
"( #PCDATA | %Flow.mix; | %param.qname; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % object.qname "object" >
|
|
||||||
<!ELEMENT %object.qname; %object.content; >
|
|
||||||
<!-- end of object.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % object.attlist "INCLUDE" >
|
|
||||||
<![%object.attlist;[
|
|
||||||
<!ATTLIST %object.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
declare ( declare ) #IMPLIED
|
|
||||||
classid %URI.datatype; #IMPLIED
|
|
||||||
codebase %URI.datatype; #IMPLIED
|
|
||||||
data %URI.datatype; #IMPLIED
|
|
||||||
type %ContentType.datatype; #IMPLIED
|
|
||||||
codetype %ContentType.datatype; #IMPLIED
|
|
||||||
archive %URIs.datatype; #IMPLIED
|
|
||||||
standby %Text.datatype; #IMPLIED
|
|
||||||
height %Length.datatype; #IMPLIED
|
|
||||||
width %Length.datatype; #IMPLIED
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
tabindex %Number.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of object.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-object-1.mod -->
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Param Element Module ..................................... -->
|
|
||||||
<!-- file: xhtml-param-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-param-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Param Element 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-param-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Parameters for Java Applets and Embedded Objects
|
|
||||||
|
|
||||||
param
|
|
||||||
|
|
||||||
This module provides declarations for the param element,
|
|
||||||
used to provide named property values for the applet
|
|
||||||
and object elements.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- param: Named Property Value ....................... -->
|
|
||||||
|
|
||||||
<!ENTITY % param.element "INCLUDE" >
|
|
||||||
<![%param.element;[
|
|
||||||
<!ENTITY % param.content "EMPTY" >
|
|
||||||
<!ENTITY % param.qname "param" >
|
|
||||||
<!ELEMENT %param.qname; %param.content; >
|
|
||||||
<!-- end of param.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % param.attlist "INCLUDE" >
|
|
||||||
<![%param.attlist;[
|
|
||||||
<!ATTLIST %param.qname;
|
|
||||||
%XHTML.xmlns.attrib;
|
|
||||||
%id.attrib;
|
|
||||||
name CDATA #REQUIRED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
valuetype ( data | ref | object ) 'data'
|
|
||||||
type %ContentType.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of param.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-param-1.mod -->
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Presentation Module ............................................ -->
|
|
||||||
<!-- file: xhtml-pres-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-pres-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Presentation 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-pres-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Presentational Elements
|
|
||||||
|
|
||||||
This module defines elements and their attributes for
|
|
||||||
simple presentation-related markup.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-inlpres.module "INCLUDE" >
|
|
||||||
<![%xhtml-inlpres.module;[
|
|
||||||
<!ENTITY % xhtml-inlpres.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Inline Presentation 1.0//EN"
|
|
||||||
"xhtml-inlpres-1.mod" >
|
|
||||||
%xhtml-inlpres.mod;]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-blkpres.module "INCLUDE" >
|
|
||||||
<![%xhtml-blkpres.module;[
|
|
||||||
<!ENTITY % xhtml-blkpres.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Block Presentation 1.0//EN"
|
|
||||||
"xhtml-blkpres-1.mod" >
|
|
||||||
%xhtml-blkpres.mod;]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-pres-1.mod -->
|
|
||||||
@@ -1,318 +0,0 @@
|
|||||||
<!-- ....................................................................... -->
|
|
||||||
<!-- XHTML Qname Module ................................................... -->
|
|
||||||
<!-- file: xhtml-qname-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-qname-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Qualified Names 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-qname-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
#2000-10-22: added qname declarations for ruby elements
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- XHTML Qname (Qualified Name) Module
|
|
||||||
|
|
||||||
This module is contained in two parts, labeled Section 'A' and 'B':
|
|
||||||
|
|
||||||
Section A declares parameter entities to support namespace-
|
|
||||||
qualified names, namespace declarations, and name prefixing
|
|
||||||
for XHTML and extensions.
|
|
||||||
|
|
||||||
Section B declares parameter entities used to provide
|
|
||||||
namespace-qualified names for all XHTML element types:
|
|
||||||
|
|
||||||
%applet.qname; the xmlns-qualified name for <applet>
|
|
||||||
%base.qname; the xmlns-qualified name for <base>
|
|
||||||
...
|
|
||||||
|
|
||||||
XHTML extensions would create a module similar to this one.
|
|
||||||
Included in the XHTML distribution is a template module
|
|
||||||
('template-qname-1.mod') suitable for this purpose.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Section A: XHTML XML Namespace Framework :::::::::::::::::::: -->
|
|
||||||
|
|
||||||
<!-- 1. Declare a %XHTML.prefixed; conditional section keyword, used
|
|
||||||
to activate namespace prefixing. The default value should
|
|
||||||
inherit '%NS.prefixed;' from the DTD driver, so that unless
|
|
||||||
overridden, the default behaviour follows the overall DTD
|
|
||||||
prefixing scheme.
|
|
||||||
-->
|
|
||||||
<!ENTITY % NS.prefixed "IGNORE" >
|
|
||||||
<!ENTITY % XHTML.prefixed "%NS.prefixed;" >
|
|
||||||
|
|
||||||
<!-- By default, we always permit XHTML attribute collections to have
|
|
||||||
namespace-qualified prefixes as well.
|
|
||||||
-->
|
|
||||||
<!ENTITY % XHTML.global.attrs.prefixed "INCLUDE" >
|
|
||||||
<!-- By default, we allow the XML Schema attributes on the root
|
|
||||||
element.
|
|
||||||
-->
|
|
||||||
<!ENTITY % XHTML.xsi.attrs "INCLUDE" >
|
|
||||||
|
|
||||||
<!-- 2. Declare a parameter entity (eg., %XHTML.xmlns;) containing
|
|
||||||
the URI reference used to identify the XHTML namespace:
|
|
||||||
-->
|
|
||||||
<!ENTITY % XHTML.xmlns "http://www.w3.org/1999/xhtml" >
|
|
||||||
|
|
||||||
<!-- 3. Declare parameter entities (eg., %XHTML.prefix;) containing
|
|
||||||
the default namespace prefix string(s) to use when prefixing
|
|
||||||
is enabled. This may be overridden in the DTD driver or the
|
|
||||||
internal subset of an document instance. If no default prefix
|
|
||||||
is desired, this may be declared as an empty string.
|
|
||||||
|
|
||||||
NOTE: As specified in [XMLNAMES], the namespace prefix serves
|
|
||||||
as a proxy for the URI reference, and is not in itself significant.
|
|
||||||
-->
|
|
||||||
<!ENTITY % XHTML.prefix "xhtml" >
|
|
||||||
|
|
||||||
<!-- 4. Declare parameter entities (eg., %XHTML.pfx;) containing the
|
|
||||||
colonized prefix(es) (eg., '%XHTML.prefix;:') used when
|
|
||||||
prefixing is active, an empty string when it is not.
|
|
||||||
-->
|
|
||||||
<![%XHTML.prefixed;[
|
|
||||||
<!ENTITY % XHTML.pfx "%XHTML.prefix;:" >
|
|
||||||
]]>
|
|
||||||
<!ENTITY % XHTML.pfx "" >
|
|
||||||
|
|
||||||
<!-- declare qualified name extensions here ............ -->
|
|
||||||
<!ENTITY % xhtml-qname-extra.mod "" >
|
|
||||||
%xhtml-qname-extra.mod;
|
|
||||||
|
|
||||||
<!-- 5. The parameter entity %XHTML.xmlns.extra.attrib; may be
|
|
||||||
redeclared to contain any non-XHTML namespace declaration
|
|
||||||
attributes for namespaces embedded in XHTML. The default
|
|
||||||
is an empty string. XLink should be included here if used
|
|
||||||
in the DTD.
|
|
||||||
-->
|
|
||||||
<!ENTITY % XHTML.xmlns.extra.attrib "" >
|
|
||||||
|
|
||||||
<!-- The remainder of Section A is only followed in XHTML, not extensions. -->
|
|
||||||
|
|
||||||
<!-- Declare a parameter entity %NS.decl.attrib; containing
|
|
||||||
all XML Namespace declarations used in the DTD, plus the
|
|
||||||
xmlns declaration for XHTML, its form dependent on whether
|
|
||||||
prefixing is active.
|
|
||||||
-->
|
|
||||||
<!ENTITY % XHTML.xmlns.attrib.prefixed
|
|
||||||
"xmlns:%XHTML.prefix; %URI.datatype; #FIXED '%XHTML.xmlns;'"
|
|
||||||
>
|
|
||||||
<![%XHTML.prefixed;[
|
|
||||||
<!ENTITY % NS.decl.attrib
|
|
||||||
"%XHTML.xmlns.attrib.prefixed;
|
|
||||||
%XHTML.xmlns.extra.attrib;"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
<!ENTITY % NS.decl.attrib
|
|
||||||
"%XHTML.xmlns.extra.attrib;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Declare a parameter entity %XSI.prefix as a prefix to use for XML
|
|
||||||
Schema Instance attributes.
|
|
||||||
-->
|
|
||||||
<!ENTITY % XSI.prefix "xsi" >
|
|
||||||
|
|
||||||
<!ENTITY % XSI.xmlns "http://www.w3.org/2001/XMLSchema-instance" >
|
|
||||||
|
|
||||||
<!-- Declare a parameter entity %XSI.xmlns.attrib as support for the
|
|
||||||
schemaLocation attribute, since this is legal throughout the DTD.
|
|
||||||
-->
|
|
||||||
<!ENTITY % XSI.xmlns.attrib
|
|
||||||
"xmlns:%XSI.prefix; %URI.datatype; #FIXED '%XSI.xmlns;'" >
|
|
||||||
|
|
||||||
<!-- This is a placeholder for future XLink support.
|
|
||||||
-->
|
|
||||||
<!ENTITY % XLINK.xmlns.attrib "" >
|
|
||||||
|
|
||||||
<!-- This is the attribute for the XML Schema namespace - XHTML
|
|
||||||
Modularization is also expressed in XML Schema, and it needs to
|
|
||||||
be legal to declare the XML Schema namespace and the
|
|
||||||
schemaLocation attribute on the root element of XHTML family
|
|
||||||
documents.
|
|
||||||
-->
|
|
||||||
<![%XHTML.xsi.attrs;[
|
|
||||||
<!ENTITY % XSI.prefix "xsi" >
|
|
||||||
<!ENTITY % XSI.pfx "%XSI.prefix;:" >
|
|
||||||
<!ENTITY % XSI.xmlns "http://www.w3.org/2001/XMLSchema-instance" >
|
|
||||||
|
|
||||||
<!ENTITY % XSI.xmlns.attrib
|
|
||||||
"xmlns:%XSI.prefix; %URI.datatype; #FIXED '%XSI.xmlns;'"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
<!ENTITY % XSI.prefix "" >
|
|
||||||
<!ENTITY % XSI.pfx "" >
|
|
||||||
<!ENTITY % XSI.xmlns.attrib "" >
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Declare a parameter entity %NS.decl.attrib; containing all
|
|
||||||
XML namespace declaration attributes used by XHTML, including
|
|
||||||
a default xmlns attribute when prefixing is inactive.
|
|
||||||
-->
|
|
||||||
<![%XHTML.prefixed;[
|
|
||||||
<!ENTITY % XHTML.xmlns.attrib
|
|
||||||
"%NS.decl.attrib;
|
|
||||||
%XSI.xmlns.attrib;
|
|
||||||
%XLINK.xmlns.attrib;"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
<!ENTITY % XHTML.xmlns.attrib
|
|
||||||
"xmlns %URI.datatype; #FIXED '%XHTML.xmlns;'
|
|
||||||
%NS.decl.attrib;
|
|
||||||
%XSI.xmlns.attrib;
|
|
||||||
%XLINK.xmlns.attrib;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- placeholder for qualified name redeclarations -->
|
|
||||||
<!ENTITY % xhtml-qname.redecl "" >
|
|
||||||
%xhtml-qname.redecl;
|
|
||||||
|
|
||||||
<!-- Section B: XHTML Qualified Names ::::::::::::::::::::::::::::: -->
|
|
||||||
|
|
||||||
<!-- 6. This section declares parameter entities used to provide
|
|
||||||
namespace-qualified names for all XHTML element types.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- module: xhtml-applet-1.mod -->
|
|
||||||
<!ENTITY % applet.qname "%XHTML.pfx;applet" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-base-1.mod -->
|
|
||||||
<!ENTITY % base.qname "%XHTML.pfx;base" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-bdo-1.mod -->
|
|
||||||
<!ENTITY % bdo.qname "%XHTML.pfx;bdo" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-blkphras-1.mod -->
|
|
||||||
<!ENTITY % address.qname "%XHTML.pfx;address" >
|
|
||||||
<!ENTITY % blockquote.qname "%XHTML.pfx;blockquote" >
|
|
||||||
<!ENTITY % pre.qname "%XHTML.pfx;pre" >
|
|
||||||
<!ENTITY % h1.qname "%XHTML.pfx;h1" >
|
|
||||||
<!ENTITY % h2.qname "%XHTML.pfx;h2" >
|
|
||||||
<!ENTITY % h3.qname "%XHTML.pfx;h3" >
|
|
||||||
<!ENTITY % h4.qname "%XHTML.pfx;h4" >
|
|
||||||
<!ENTITY % h5.qname "%XHTML.pfx;h5" >
|
|
||||||
<!ENTITY % h6.qname "%XHTML.pfx;h6" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-blkpres-1.mod -->
|
|
||||||
<!ENTITY % hr.qname "%XHTML.pfx;hr" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-blkstruct-1.mod -->
|
|
||||||
<!ENTITY % div.qname "%XHTML.pfx;div" >
|
|
||||||
<!ENTITY % p.qname "%XHTML.pfx;p" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-edit-1.mod -->
|
|
||||||
<!ENTITY % ins.qname "%XHTML.pfx;ins" >
|
|
||||||
<!ENTITY % del.qname "%XHTML.pfx;del" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-form-1.mod -->
|
|
||||||
<!ENTITY % form.qname "%XHTML.pfx;form" >
|
|
||||||
<!ENTITY % label.qname "%XHTML.pfx;label" >
|
|
||||||
<!ENTITY % input.qname "%XHTML.pfx;input" >
|
|
||||||
<!ENTITY % select.qname "%XHTML.pfx;select" >
|
|
||||||
<!ENTITY % optgroup.qname "%XHTML.pfx;optgroup" >
|
|
||||||
<!ENTITY % option.qname "%XHTML.pfx;option" >
|
|
||||||
<!ENTITY % textarea.qname "%XHTML.pfx;textarea" >
|
|
||||||
<!ENTITY % fieldset.qname "%XHTML.pfx;fieldset" >
|
|
||||||
<!ENTITY % legend.qname "%XHTML.pfx;legend" >
|
|
||||||
<!ENTITY % button.qname "%XHTML.pfx;button" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-hypertext-1.mod -->
|
|
||||||
<!ENTITY % a.qname "%XHTML.pfx;a" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-image-1.mod -->
|
|
||||||
<!ENTITY % img.qname "%XHTML.pfx;img" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-inlphras-1.mod -->
|
|
||||||
<!ENTITY % abbr.qname "%XHTML.pfx;abbr" >
|
|
||||||
<!ENTITY % acronym.qname "%XHTML.pfx;acronym" >
|
|
||||||
<!ENTITY % cite.qname "%XHTML.pfx;cite" >
|
|
||||||
<!ENTITY % code.qname "%XHTML.pfx;code" >
|
|
||||||
<!ENTITY % dfn.qname "%XHTML.pfx;dfn" >
|
|
||||||
<!ENTITY % em.qname "%XHTML.pfx;em" >
|
|
||||||
<!ENTITY % kbd.qname "%XHTML.pfx;kbd" >
|
|
||||||
<!ENTITY % q.qname "%XHTML.pfx;q" >
|
|
||||||
<!ENTITY % samp.qname "%XHTML.pfx;samp" >
|
|
||||||
<!ENTITY % strong.qname "%XHTML.pfx;strong" >
|
|
||||||
<!ENTITY % var.qname "%XHTML.pfx;var" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-inlpres-1.mod -->
|
|
||||||
<!ENTITY % b.qname "%XHTML.pfx;b" >
|
|
||||||
<!ENTITY % big.qname "%XHTML.pfx;big" >
|
|
||||||
<!ENTITY % i.qname "%XHTML.pfx;i" >
|
|
||||||
<!ENTITY % small.qname "%XHTML.pfx;small" >
|
|
||||||
<!ENTITY % sub.qname "%XHTML.pfx;sub" >
|
|
||||||
<!ENTITY % sup.qname "%XHTML.pfx;sup" >
|
|
||||||
<!ENTITY % tt.qname "%XHTML.pfx;tt" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-inlstruct-1.mod -->
|
|
||||||
<!ENTITY % br.qname "%XHTML.pfx;br" >
|
|
||||||
<!ENTITY % span.qname "%XHTML.pfx;span" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-ismap-1.mod (also csismap, ssismap) -->
|
|
||||||
<!ENTITY % map.qname "%XHTML.pfx;map" >
|
|
||||||
<!ENTITY % area.qname "%XHTML.pfx;area" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-link-1.mod -->
|
|
||||||
<!ENTITY % link.qname "%XHTML.pfx;link" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-list-1.mod -->
|
|
||||||
<!ENTITY % dl.qname "%XHTML.pfx;dl" >
|
|
||||||
<!ENTITY % dt.qname "%XHTML.pfx;dt" >
|
|
||||||
<!ENTITY % dd.qname "%XHTML.pfx;dd" >
|
|
||||||
<!ENTITY % ol.qname "%XHTML.pfx;ol" >
|
|
||||||
<!ENTITY % ul.qname "%XHTML.pfx;ul" >
|
|
||||||
<!ENTITY % li.qname "%XHTML.pfx;li" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-meta-1.mod -->
|
|
||||||
<!ENTITY % meta.qname "%XHTML.pfx;meta" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-param-1.mod -->
|
|
||||||
<!ENTITY % param.qname "%XHTML.pfx;param" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-object-1.mod -->
|
|
||||||
<!ENTITY % object.qname "%XHTML.pfx;object" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-script-1.mod -->
|
|
||||||
<!ENTITY % script.qname "%XHTML.pfx;script" >
|
|
||||||
<!ENTITY % noscript.qname "%XHTML.pfx;noscript" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-struct-1.mod -->
|
|
||||||
<!ENTITY % html.qname "%XHTML.pfx;html" >
|
|
||||||
<!ENTITY % head.qname "%XHTML.pfx;head" >
|
|
||||||
<!ENTITY % title.qname "%XHTML.pfx;title" >
|
|
||||||
<!ENTITY % body.qname "%XHTML.pfx;body" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-style-1.mod -->
|
|
||||||
<!ENTITY % style.qname "%XHTML.pfx;style" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-table-1.mod -->
|
|
||||||
<!ENTITY % table.qname "%XHTML.pfx;table" >
|
|
||||||
<!ENTITY % caption.qname "%XHTML.pfx;caption" >
|
|
||||||
<!ENTITY % thead.qname "%XHTML.pfx;thead" >
|
|
||||||
<!ENTITY % tfoot.qname "%XHTML.pfx;tfoot" >
|
|
||||||
<!ENTITY % tbody.qname "%XHTML.pfx;tbody" >
|
|
||||||
<!ENTITY % colgroup.qname "%XHTML.pfx;colgroup" >
|
|
||||||
<!ENTITY % col.qname "%XHTML.pfx;col" >
|
|
||||||
<!ENTITY % tr.qname "%XHTML.pfx;tr" >
|
|
||||||
<!ENTITY % th.qname "%XHTML.pfx;th" >
|
|
||||||
<!ENTITY % td.qname "%XHTML.pfx;td" >
|
|
||||||
|
|
||||||
<!-- module: xhtml-ruby-1.mod -->
|
|
||||||
|
|
||||||
<!ENTITY % ruby.qname "%XHTML.pfx;ruby" >
|
|
||||||
<!ENTITY % rbc.qname "%XHTML.pfx;rbc" >
|
|
||||||
<!ENTITY % rtc.qname "%XHTML.pfx;rtc" >
|
|
||||||
<!ENTITY % rb.qname "%XHTML.pfx;rb" >
|
|
||||||
<!ENTITY % rt.qname "%XHTML.pfx;rt" >
|
|
||||||
<!ENTITY % rp.qname "%XHTML.pfx;rp" >
|
|
||||||
|
|
||||||
<!-- Provisional XHTML 2.0 Qualified Names ...................... -->
|
|
||||||
|
|
||||||
<!-- module: xhtml-image-2.mod -->
|
|
||||||
<!ENTITY % alt.qname "%XHTML.pfx;alt" >
|
|
||||||
|
|
||||||
<!-- end of xhtml-qname-1.mod -->
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Document Scripting Module ..................................... -->
|
|
||||||
<!-- file: xhtml-script-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-script-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Scripting 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-script-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Scripting
|
|
||||||
|
|
||||||
script, noscript
|
|
||||||
|
|
||||||
This module declares element types and attributes used to provide
|
|
||||||
support for executable scripts as well as an alternate content
|
|
||||||
container where scripts are not supported.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- script: Scripting Statement ....................... -->
|
|
||||||
|
|
||||||
<!ENTITY % script.element "INCLUDE" >
|
|
||||||
<![%script.element;[
|
|
||||||
<!ENTITY % script.content "( #PCDATA )" >
|
|
||||||
<!ENTITY % script.qname "script" >
|
|
||||||
<!ELEMENT %script.qname; %script.content; >
|
|
||||||
<!-- end of script.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % script.attlist "INCLUDE" >
|
|
||||||
<![%script.attlist;[
|
|
||||||
<!ATTLIST %script.qname;
|
|
||||||
%XHTML.xmlns.attrib;
|
|
||||||
%id.attrib;
|
|
||||||
xml:space ( preserve ) #FIXED 'preserve'
|
|
||||||
charset %Charset.datatype; #IMPLIED
|
|
||||||
type %ContentType.datatype; #REQUIRED
|
|
||||||
src %URI.datatype; #IMPLIED
|
|
||||||
defer ( defer ) #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of script.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- noscript: No-Script Alternate Content ............. -->
|
|
||||||
|
|
||||||
<!ENTITY % noscript.element "INCLUDE" >
|
|
||||||
<![%noscript.element;[
|
|
||||||
<!ENTITY % noscript.content
|
|
||||||
"( %Block.mix; )+"
|
|
||||||
>
|
|
||||||
<!ENTITY % noscript.qname "noscript" >
|
|
||||||
<!ELEMENT %noscript.qname; %noscript.content; >
|
|
||||||
<!-- end of noscript.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % noscript.attlist "INCLUDE" >
|
|
||||||
<![%noscript.attlist;[
|
|
||||||
<!ATTLIST %noscript.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of noscript.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-script-1.mod -->
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
<!-- Special characters for XHTML -->
|
|
||||||
|
|
||||||
<!-- Character entity set. Typical invocation:
|
|
||||||
<!ENTITY % HTMLspecial PUBLIC
|
|
||||||
"-//W3C//ENTITIES Special for XHTML//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
|
|
||||||
%HTMLspecial;
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Portions (C) International Organization for Standardization 1986:
|
|
||||||
Permission to copy in any form is granted for use with
|
|
||||||
conforming SGML systems and applications as defined in
|
|
||||||
ISO 8879, provided this notice is included in all copies.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Relevant ISO entity set is given unless names are newly introduced.
|
|
||||||
New names (i.e., not in ISO 8879 list) do not clash with any
|
|
||||||
existing ISO 8879 entity names. ISO 10646 character numbers
|
|
||||||
are given for each character, in hex. values are decimal
|
|
||||||
conversions of the ISO 10646 values and refer to the document
|
|
||||||
character set. Names are Unicode names.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- C0 Controls and Basic Latin -->
|
|
||||||
<!ENTITY quot """> <!-- quotation mark, U+0022 ISOnum -->
|
|
||||||
<!ENTITY amp "&#38;"> <!-- ampersand, U+0026 ISOnum -->
|
|
||||||
<!ENTITY lt "&#60;"> <!-- less-than sign, U+003C ISOnum -->
|
|
||||||
<!ENTITY gt ">"> <!-- greater-than sign, U+003E ISOnum -->
|
|
||||||
<!ENTITY apos "'"> <!-- apostrophe = APL quote, U+0027 ISOnum -->
|
|
||||||
|
|
||||||
<!-- Latin Extended-A -->
|
|
||||||
<!ENTITY OElig "Œ"> <!-- latin capital ligature OE,
|
|
||||||
U+0152 ISOlat2 -->
|
|
||||||
<!ENTITY oelig "œ"> <!-- latin small ligature oe, U+0153 ISOlat2 -->
|
|
||||||
<!-- ligature is a misnomer, this is a separate character in some languages -->
|
|
||||||
<!ENTITY Scaron "Š"> <!-- latin capital letter S with caron,
|
|
||||||
U+0160 ISOlat2 -->
|
|
||||||
<!ENTITY scaron "š"> <!-- latin small letter s with caron,
|
|
||||||
U+0161 ISOlat2 -->
|
|
||||||
<!ENTITY Yuml "Ÿ"> <!-- latin capital letter Y with diaeresis,
|
|
||||||
U+0178 ISOlat2 -->
|
|
||||||
|
|
||||||
<!-- Spacing Modifier Letters -->
|
|
||||||
<!ENTITY circ "ˆ"> <!-- modifier letter circumflex accent,
|
|
||||||
U+02C6 ISOpub -->
|
|
||||||
<!ENTITY tilde "˜"> <!-- small tilde, U+02DC ISOdia -->
|
|
||||||
|
|
||||||
<!-- General Punctuation -->
|
|
||||||
<!ENTITY ensp " "> <!-- en space, U+2002 ISOpub -->
|
|
||||||
<!ENTITY emsp " "> <!-- em space, U+2003 ISOpub -->
|
|
||||||
<!ENTITY thinsp " "> <!-- thin space, U+2009 ISOpub -->
|
|
||||||
<!ENTITY zwnj "‌"> <!-- zero width non-joiner,
|
|
||||||
U+200C NEW RFC 2070 -->
|
|
||||||
<!ENTITY zwj "‍"> <!-- zero width joiner, U+200D NEW RFC 2070 -->
|
|
||||||
<!ENTITY lrm "‎"> <!-- left-to-right mark, U+200E NEW RFC 2070 -->
|
|
||||||
<!ENTITY rlm "‏"> <!-- right-to-left mark, U+200F NEW RFC 2070 -->
|
|
||||||
<!ENTITY ndash "–"> <!-- en dash, U+2013 ISOpub -->
|
|
||||||
<!ENTITY mdash "—"> <!-- em dash, U+2014 ISOpub -->
|
|
||||||
<!ENTITY lsquo "‘"> <!-- left single quotation mark,
|
|
||||||
U+2018 ISOnum -->
|
|
||||||
<!ENTITY rsquo "’"> <!-- right single quotation mark,
|
|
||||||
U+2019 ISOnum -->
|
|
||||||
<!ENTITY sbquo "‚"> <!-- single low-9 quotation mark, U+201A NEW -->
|
|
||||||
<!ENTITY ldquo "“"> <!-- left double quotation mark,
|
|
||||||
U+201C ISOnum -->
|
|
||||||
<!ENTITY rdquo "”"> <!-- right double quotation mark,
|
|
||||||
U+201D ISOnum -->
|
|
||||||
<!ENTITY bdquo "„"> <!-- double low-9 quotation mark, U+201E NEW -->
|
|
||||||
<!ENTITY dagger "†"> <!-- dagger, U+2020 ISOpub -->
|
|
||||||
<!ENTITY Dagger "‡"> <!-- double dagger, U+2021 ISOpub -->
|
|
||||||
<!ENTITY permil "‰"> <!-- per mille sign, U+2030 ISOtech -->
|
|
||||||
<!ENTITY lsaquo "‹"> <!-- single left-pointing angle quotation mark,
|
|
||||||
U+2039 ISO proposed -->
|
|
||||||
<!-- lsaquo is proposed but not yet ISO standardized -->
|
|
||||||
<!ENTITY rsaquo "›"> <!-- single right-pointing angle quotation mark,
|
|
||||||
U+203A ISO proposed -->
|
|
||||||
<!-- rsaquo is proposed but not yet ISO standardized -->
|
|
||||||
|
|
||||||
<!-- Currency Symbols -->
|
|
||||||
<!ENTITY euro "€"> <!-- euro sign, U+20AC NEW -->
|
|
||||||
-32
@@ -1,32 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Server-side Image Map Module .................................. -->
|
|
||||||
<!-- file: xhtml-ssismap-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-ssismap-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Server-side Image Maps 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-ssismap-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
#2000-10-22: added declaration for 'ismap' on <input>
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Server-side Image Maps
|
|
||||||
|
|
||||||
This adds the 'ismap' attribute to the img and input elements
|
|
||||||
to support server-side processing of a user selection.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ATTLIST %img.qname;
|
|
||||||
ismap ( ismap ) #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ATTLIST %input.qname;
|
|
||||||
ismap ( ismap ) #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- end of xhtml-ssismap-1.mod -->
|
|
||||||
-136
@@ -1,136 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Structure Module .............................................. -->
|
|
||||||
<!-- file: xhtml-struct-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-struct-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Document Structure 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-struct-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Document Structure
|
|
||||||
|
|
||||||
title, head, body, html
|
|
||||||
|
|
||||||
The Structure Module defines the major structural elements and
|
|
||||||
their attributes.
|
|
||||||
|
|
||||||
Note that the content model of the head element type is redeclared
|
|
||||||
when the Base Module is included in the DTD.
|
|
||||||
|
|
||||||
The parameter entity containing the XML namespace URI value used
|
|
||||||
for XHTML is '%XHTML.xmlns;', defined in the Qualified Names module.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- title: Document Title ............................. -->
|
|
||||||
|
|
||||||
<!-- The title element is not considered part of the flow of text.
|
|
||||||
It should be displayed, for example as the page header or
|
|
||||||
window title. Exactly one title is required per document.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % title.element "INCLUDE" >
|
|
||||||
<![%title.element;[
|
|
||||||
<!ENTITY % title.content "( #PCDATA )" >
|
|
||||||
<!ENTITY % title.qname "title" >
|
|
||||||
<!ELEMENT %title.qname; %title.content; >
|
|
||||||
<!-- end of title.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % title.attlist "INCLUDE" >
|
|
||||||
<![%title.attlist;[
|
|
||||||
<!ATTLIST %title.qname;
|
|
||||||
%XHTML.xmlns.attrib;
|
|
||||||
%I18n.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of title.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- head: Document Head ............................... -->
|
|
||||||
|
|
||||||
<!ENTITY % head.element "INCLUDE" >
|
|
||||||
<![%head.element;[
|
|
||||||
<!ENTITY % head.content
|
|
||||||
"( %HeadOpts.mix;, %title.qname;, %HeadOpts.mix; )"
|
|
||||||
>
|
|
||||||
<!ENTITY % head.qname "head" >
|
|
||||||
<!ELEMENT %head.qname; %head.content; >
|
|
||||||
<!-- end of head.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % head.attlist "INCLUDE" >
|
|
||||||
<![%head.attlist;[
|
|
||||||
<!-- reserved for future use with document profiles
|
|
||||||
-->
|
|
||||||
<!ENTITY % profile.attrib
|
|
||||||
"profile %URIs.datatype; #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ATTLIST %head.qname;
|
|
||||||
%XHTML.xmlns.attrib;
|
|
||||||
%I18n.attrib;
|
|
||||||
%profile.attrib;
|
|
||||||
%id.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of head.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- body: Document Body ............................... -->
|
|
||||||
|
|
||||||
<!ENTITY % body.element "INCLUDE" >
|
|
||||||
<![%body.element;[
|
|
||||||
<!ENTITY % body.content
|
|
||||||
"( %Block.mix; )*"
|
|
||||||
>
|
|
||||||
<!ENTITY % body.qname "body" >
|
|
||||||
<!ELEMENT %body.qname; %body.content; >
|
|
||||||
<!-- end of body.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % body.attlist "INCLUDE" >
|
|
||||||
<![%body.attlist;[
|
|
||||||
<!ATTLIST %body.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of body.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- html: XHTML Document Element ...................... -->
|
|
||||||
|
|
||||||
<!ENTITY % html.element "INCLUDE" >
|
|
||||||
<![%html.element;[
|
|
||||||
<!ENTITY % html.content "( %head.qname;, %body.qname; )" >
|
|
||||||
<!ENTITY % html.qname "html" >
|
|
||||||
<!ELEMENT %html.qname; %html.content; >
|
|
||||||
<!-- end of html.element -->]]>
|
|
||||||
|
|
||||||
<![%XHTML.xsi.attrs;[
|
|
||||||
<!-- define a parameter for the XSI schemaLocation attribute -->
|
|
||||||
<!ENTITY % XSI.schemaLocation.attrib
|
|
||||||
"%XSI.pfx;schemaLocation %URIs.datatype; #IMPLIED"
|
|
||||||
>
|
|
||||||
]]>
|
|
||||||
<!ENTITY % XSI.schemaLocation.attrib "">
|
|
||||||
|
|
||||||
<!ENTITY % html.attlist "INCLUDE" >
|
|
||||||
<![%html.attlist;[
|
|
||||||
<!-- version attribute value defined in driver
|
|
||||||
-->
|
|
||||||
<!ENTITY % XHTML.version.attrib
|
|
||||||
"version CDATA #FIXED '%XHTML.version;'"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- see the Qualified Names module for information
|
|
||||||
on how to extend XHTML using XML namespaces
|
|
||||||
-->
|
|
||||||
<!ATTLIST %html.qname;
|
|
||||||
%XHTML.xmlns.attrib;
|
|
||||||
%XSI.schemaLocation.attrib;
|
|
||||||
%XHTML.version.attrib;
|
|
||||||
%I18n.attrib;
|
|
||||||
%id.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of html.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-struct-1.mod -->
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Document Style Sheet Module ................................... -->
|
|
||||||
<!-- file: xhtml-style-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-style-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//DTD XHTML Style Sheets 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-style-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Style Sheets
|
|
||||||
|
|
||||||
style
|
|
||||||
|
|
||||||
This module declares the style element type and its attributes,
|
|
||||||
used to embed style sheet information in the document head element.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- style: Style Sheet Information .................... -->
|
|
||||||
|
|
||||||
<!ENTITY % style.element "INCLUDE" >
|
|
||||||
<![%style.element;[
|
|
||||||
<!ENTITY % style.content "( #PCDATA )" >
|
|
||||||
<!ENTITY % style.qname "style" >
|
|
||||||
<!ELEMENT %style.qname; %style.content; >
|
|
||||||
<!-- end of style.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % style.attlist "INCLUDE" >
|
|
||||||
<![%style.attlist;[
|
|
||||||
<!ATTLIST %style.qname;
|
|
||||||
%XHTML.xmlns.attrib;
|
|
||||||
%id.attrib;
|
|
||||||
%title.attrib;
|
|
||||||
%I18n.attrib;
|
|
||||||
xml:space ( preserve ) #FIXED 'preserve'
|
|
||||||
type %ContentType.datatype; #REQUIRED
|
|
||||||
media %MediaDesc.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of style.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-style-1.mod -->
|
|
||||||
@@ -1,237 +0,0 @@
|
|||||||
<!-- Mathematical, Greek and Symbolic characters for XHTML -->
|
|
||||||
|
|
||||||
<!-- Character entity set. Typical invocation:
|
|
||||||
<!ENTITY % HTMLsymbol PUBLIC
|
|
||||||
"-//W3C//ENTITIES Symbols for XHTML//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
|
|
||||||
%HTMLsymbol;
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Portions (C) International Organization for Standardization 1986:
|
|
||||||
Permission to copy in any form is granted for use with
|
|
||||||
conforming SGML systems and applications as defined in
|
|
||||||
ISO 8879, provided this notice is included in all copies.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Relevant ISO entity set is given unless names are newly introduced.
|
|
||||||
New names (i.e., not in ISO 8879 list) do not clash with any
|
|
||||||
existing ISO 8879 entity names. ISO 10646 character numbers
|
|
||||||
are given for each character, in hex. values are decimal
|
|
||||||
conversions of the ISO 10646 values and refer to the document
|
|
||||||
character set. Names are Unicode names.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Latin Extended-B -->
|
|
||||||
<!ENTITY fnof "ƒ"> <!-- latin small letter f with hook = function
|
|
||||||
= florin, U+0192 ISOtech -->
|
|
||||||
|
|
||||||
<!-- Greek -->
|
|
||||||
<!ENTITY Alpha "Α"> <!-- greek capital letter alpha, U+0391 -->
|
|
||||||
<!ENTITY Beta "Β"> <!-- greek capital letter beta, U+0392 -->
|
|
||||||
<!ENTITY Gamma "Γ"> <!-- greek capital letter gamma,
|
|
||||||
U+0393 ISOgrk3 -->
|
|
||||||
<!ENTITY Delta "Δ"> <!-- greek capital letter delta,
|
|
||||||
U+0394 ISOgrk3 -->
|
|
||||||
<!ENTITY Epsilon "Ε"> <!-- greek capital letter epsilon, U+0395 -->
|
|
||||||
<!ENTITY Zeta "Ζ"> <!-- greek capital letter zeta, U+0396 -->
|
|
||||||
<!ENTITY Eta "Η"> <!-- greek capital letter eta, U+0397 -->
|
|
||||||
<!ENTITY Theta "Θ"> <!-- greek capital letter theta,
|
|
||||||
U+0398 ISOgrk3 -->
|
|
||||||
<!ENTITY Iota "Ι"> <!-- greek capital letter iota, U+0399 -->
|
|
||||||
<!ENTITY Kappa "Κ"> <!-- greek capital letter kappa, U+039A -->
|
|
||||||
<!ENTITY Lambda "Λ"> <!-- greek capital letter lamda,
|
|
||||||
U+039B ISOgrk3 -->
|
|
||||||
<!ENTITY Mu "Μ"> <!-- greek capital letter mu, U+039C -->
|
|
||||||
<!ENTITY Nu "Ν"> <!-- greek capital letter nu, U+039D -->
|
|
||||||
<!ENTITY Xi "Ξ"> <!-- greek capital letter xi, U+039E ISOgrk3 -->
|
|
||||||
<!ENTITY Omicron "Ο"> <!-- greek capital letter omicron, U+039F -->
|
|
||||||
<!ENTITY Pi "Π"> <!-- greek capital letter pi, U+03A0 ISOgrk3 -->
|
|
||||||
<!ENTITY Rho "Ρ"> <!-- greek capital letter rho, U+03A1 -->
|
|
||||||
<!-- there is no Sigmaf, and no U+03A2 character either -->
|
|
||||||
<!ENTITY Sigma "Σ"> <!-- greek capital letter sigma,
|
|
||||||
U+03A3 ISOgrk3 -->
|
|
||||||
<!ENTITY Tau "Τ"> <!-- greek capital letter tau, U+03A4 -->
|
|
||||||
<!ENTITY Upsilon "Υ"> <!-- greek capital letter upsilon,
|
|
||||||
U+03A5 ISOgrk3 -->
|
|
||||||
<!ENTITY Phi "Φ"> <!-- greek capital letter phi,
|
|
||||||
U+03A6 ISOgrk3 -->
|
|
||||||
<!ENTITY Chi "Χ"> <!-- greek capital letter chi, U+03A7 -->
|
|
||||||
<!ENTITY Psi "Ψ"> <!-- greek capital letter psi,
|
|
||||||
U+03A8 ISOgrk3 -->
|
|
||||||
<!ENTITY Omega "Ω"> <!-- greek capital letter omega,
|
|
||||||
U+03A9 ISOgrk3 -->
|
|
||||||
|
|
||||||
<!ENTITY alpha "α"> <!-- greek small letter alpha,
|
|
||||||
U+03B1 ISOgrk3 -->
|
|
||||||
<!ENTITY beta "β"> <!-- greek small letter beta, U+03B2 ISOgrk3 -->
|
|
||||||
<!ENTITY gamma "γ"> <!-- greek small letter gamma,
|
|
||||||
U+03B3 ISOgrk3 -->
|
|
||||||
<!ENTITY delta "δ"> <!-- greek small letter delta,
|
|
||||||
U+03B4 ISOgrk3 -->
|
|
||||||
<!ENTITY epsilon "ε"> <!-- greek small letter epsilon,
|
|
||||||
U+03B5 ISOgrk3 -->
|
|
||||||
<!ENTITY zeta "ζ"> <!-- greek small letter zeta, U+03B6 ISOgrk3 -->
|
|
||||||
<!ENTITY eta "η"> <!-- greek small letter eta, U+03B7 ISOgrk3 -->
|
|
||||||
<!ENTITY theta "θ"> <!-- greek small letter theta,
|
|
||||||
U+03B8 ISOgrk3 -->
|
|
||||||
<!ENTITY iota "ι"> <!-- greek small letter iota, U+03B9 ISOgrk3 -->
|
|
||||||
<!ENTITY kappa "κ"> <!-- greek small letter kappa,
|
|
||||||
U+03BA ISOgrk3 -->
|
|
||||||
<!ENTITY lambda "λ"> <!-- greek small letter lamda,
|
|
||||||
U+03BB ISOgrk3 -->
|
|
||||||
<!ENTITY mu "μ"> <!-- greek small letter mu, U+03BC ISOgrk3 -->
|
|
||||||
<!ENTITY nu "ν"> <!-- greek small letter nu, U+03BD ISOgrk3 -->
|
|
||||||
<!ENTITY xi "ξ"> <!-- greek small letter xi, U+03BE ISOgrk3 -->
|
|
||||||
<!ENTITY omicron "ο"> <!-- greek small letter omicron, U+03BF NEW -->
|
|
||||||
<!ENTITY pi "π"> <!-- greek small letter pi, U+03C0 ISOgrk3 -->
|
|
||||||
<!ENTITY rho "ρ"> <!-- greek small letter rho, U+03C1 ISOgrk3 -->
|
|
||||||
<!ENTITY sigmaf "ς"> <!-- greek small letter final sigma,
|
|
||||||
U+03C2 ISOgrk3 -->
|
|
||||||
<!ENTITY sigma "σ"> <!-- greek small letter sigma,
|
|
||||||
U+03C3 ISOgrk3 -->
|
|
||||||
<!ENTITY tau "τ"> <!-- greek small letter tau, U+03C4 ISOgrk3 -->
|
|
||||||
<!ENTITY upsilon "υ"> <!-- greek small letter upsilon,
|
|
||||||
U+03C5 ISOgrk3 -->
|
|
||||||
<!ENTITY phi "φ"> <!-- greek small letter phi, U+03C6 ISOgrk3 -->
|
|
||||||
<!ENTITY chi "χ"> <!-- greek small letter chi, U+03C7 ISOgrk3 -->
|
|
||||||
<!ENTITY psi "ψ"> <!-- greek small letter psi, U+03C8 ISOgrk3 -->
|
|
||||||
<!ENTITY omega "ω"> <!-- greek small letter omega,
|
|
||||||
U+03C9 ISOgrk3 -->
|
|
||||||
<!ENTITY thetasym "ϑ"> <!-- greek theta symbol,
|
|
||||||
U+03D1 NEW -->
|
|
||||||
<!ENTITY upsih "ϒ"> <!-- greek upsilon with hook symbol,
|
|
||||||
U+03D2 NEW -->
|
|
||||||
<!ENTITY piv "ϖ"> <!-- greek pi symbol, U+03D6 ISOgrk3 -->
|
|
||||||
|
|
||||||
<!-- General Punctuation -->
|
|
||||||
<!ENTITY bull "•"> <!-- bullet = black small circle,
|
|
||||||
U+2022 ISOpub -->
|
|
||||||
<!-- bullet is NOT the same as bullet operator, U+2219 -->
|
|
||||||
<!ENTITY hellip "…"> <!-- horizontal ellipsis = three dot leader,
|
|
||||||
U+2026 ISOpub -->
|
|
||||||
<!ENTITY prime "′"> <!-- prime = minutes = feet, U+2032 ISOtech -->
|
|
||||||
<!ENTITY Prime "″"> <!-- double prime = seconds = inches,
|
|
||||||
U+2033 ISOtech -->
|
|
||||||
<!ENTITY oline "‾"> <!-- overline = spacing overscore,
|
|
||||||
U+203E NEW -->
|
|
||||||
<!ENTITY frasl "⁄"> <!-- fraction slash, U+2044 NEW -->
|
|
||||||
|
|
||||||
<!-- Letterlike Symbols -->
|
|
||||||
<!ENTITY weierp "℘"> <!-- script capital P = power set
|
|
||||||
= Weierstrass p, U+2118 ISOamso -->
|
|
||||||
<!ENTITY image "ℑ"> <!-- black-letter capital I = imaginary part,
|
|
||||||
U+2111 ISOamso -->
|
|
||||||
<!ENTITY real "ℜ"> <!-- black-letter capital R = real part symbol,
|
|
||||||
U+211C ISOamso -->
|
|
||||||
<!ENTITY trade "™"> <!-- trade mark sign, U+2122 ISOnum -->
|
|
||||||
<!ENTITY alefsym "ℵ"> <!-- alef symbol = first transfinite cardinal,
|
|
||||||
U+2135 NEW -->
|
|
||||||
<!-- alef symbol is NOT the same as hebrew letter alef,
|
|
||||||
U+05D0 although the same glyph could be used to depict both characters -->
|
|
||||||
|
|
||||||
<!-- Arrows -->
|
|
||||||
<!ENTITY larr "←"> <!-- leftwards arrow, U+2190 ISOnum -->
|
|
||||||
<!ENTITY uarr "↑"> <!-- upwards arrow, U+2191 ISOnum-->
|
|
||||||
<!ENTITY rarr "→"> <!-- rightwards arrow, U+2192 ISOnum -->
|
|
||||||
<!ENTITY darr "↓"> <!-- downwards arrow, U+2193 ISOnum -->
|
|
||||||
<!ENTITY harr "↔"> <!-- left right arrow, U+2194 ISOamsa -->
|
|
||||||
<!ENTITY crarr "↵"> <!-- downwards arrow with corner leftwards
|
|
||||||
= carriage return, U+21B5 NEW -->
|
|
||||||
<!ENTITY lArr "⇐"> <!-- leftwards double arrow, U+21D0 ISOtech -->
|
|
||||||
<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
|
|
||||||
but also does not have any other character for that function. So lArr can
|
|
||||||
be used for 'is implied by' as ISOtech suggests -->
|
|
||||||
<!ENTITY uArr "⇑"> <!-- upwards double arrow, U+21D1 ISOamsa -->
|
|
||||||
<!ENTITY rArr "⇒"> <!-- rightwards double arrow,
|
|
||||||
U+21D2 ISOtech -->
|
|
||||||
<!-- Unicode does not say this is the 'implies' character but does not have
|
|
||||||
another character with this function so rArr can be used for 'implies'
|
|
||||||
as ISOtech suggests -->
|
|
||||||
<!ENTITY dArr "⇓"> <!-- downwards double arrow, U+21D3 ISOamsa -->
|
|
||||||
<!ENTITY hArr "⇔"> <!-- left right double arrow,
|
|
||||||
U+21D4 ISOamsa -->
|
|
||||||
|
|
||||||
<!-- Mathematical Operators -->
|
|
||||||
<!ENTITY forall "∀"> <!-- for all, U+2200 ISOtech -->
|
|
||||||
<!ENTITY part "∂"> <!-- partial differential, U+2202 ISOtech -->
|
|
||||||
<!ENTITY exist "∃"> <!-- there exists, U+2203 ISOtech -->
|
|
||||||
<!ENTITY empty "∅"> <!-- empty set = null set, U+2205 ISOamso -->
|
|
||||||
<!ENTITY nabla "∇"> <!-- nabla = backward difference,
|
|
||||||
U+2207 ISOtech -->
|
|
||||||
<!ENTITY isin "∈"> <!-- element of, U+2208 ISOtech -->
|
|
||||||
<!ENTITY notin "∉"> <!-- not an element of, U+2209 ISOtech -->
|
|
||||||
<!ENTITY ni "∋"> <!-- contains as member, U+220B ISOtech -->
|
|
||||||
<!ENTITY prod "∏"> <!-- n-ary product = product sign,
|
|
||||||
U+220F ISOamsb -->
|
|
||||||
<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
|
|
||||||
the same glyph might be used for both -->
|
|
||||||
<!ENTITY sum "∑"> <!-- n-ary summation, U+2211 ISOamsb -->
|
|
||||||
<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
|
|
||||||
though the same glyph might be used for both -->
|
|
||||||
<!ENTITY minus "−"> <!-- minus sign, U+2212 ISOtech -->
|
|
||||||
<!ENTITY lowast "∗"> <!-- asterisk operator, U+2217 ISOtech -->
|
|
||||||
<!ENTITY radic "√"> <!-- square root = radical sign,
|
|
||||||
U+221A ISOtech -->
|
|
||||||
<!ENTITY prop "∝"> <!-- proportional to, U+221D ISOtech -->
|
|
||||||
<!ENTITY infin "∞"> <!-- infinity, U+221E ISOtech -->
|
|
||||||
<!ENTITY ang "∠"> <!-- angle, U+2220 ISOamso -->
|
|
||||||
<!ENTITY and "∧"> <!-- logical and = wedge, U+2227 ISOtech -->
|
|
||||||
<!ENTITY or "∨"> <!-- logical or = vee, U+2228 ISOtech -->
|
|
||||||
<!ENTITY cap "∩"> <!-- intersection = cap, U+2229 ISOtech -->
|
|
||||||
<!ENTITY cup "∪"> <!-- union = cup, U+222A ISOtech -->
|
|
||||||
<!ENTITY int "∫"> <!-- integral, U+222B ISOtech -->
|
|
||||||
<!ENTITY there4 "∴"> <!-- therefore, U+2234 ISOtech -->
|
|
||||||
<!ENTITY sim "∼"> <!-- tilde operator = varies with = similar to,
|
|
||||||
U+223C ISOtech -->
|
|
||||||
<!-- tilde operator is NOT the same character as the tilde, U+007E,
|
|
||||||
although the same glyph might be used to represent both -->
|
|
||||||
<!ENTITY cong "≅"> <!-- approximately equal to, U+2245 ISOtech -->
|
|
||||||
<!ENTITY asymp "≈"> <!-- almost equal to = asymptotic to,
|
|
||||||
U+2248 ISOamsr -->
|
|
||||||
<!ENTITY ne "≠"> <!-- not equal to, U+2260 ISOtech -->
|
|
||||||
<!ENTITY equiv "≡"> <!-- identical to, U+2261 ISOtech -->
|
|
||||||
<!ENTITY le "≤"> <!-- less-than or equal to, U+2264 ISOtech -->
|
|
||||||
<!ENTITY ge "≥"> <!-- greater-than or equal to,
|
|
||||||
U+2265 ISOtech -->
|
|
||||||
<!ENTITY sub "⊂"> <!-- subset of, U+2282 ISOtech -->
|
|
||||||
<!ENTITY sup "⊃"> <!-- superset of, U+2283 ISOtech -->
|
|
||||||
<!ENTITY nsub "⊄"> <!-- not a subset of, U+2284 ISOamsn -->
|
|
||||||
<!ENTITY sube "⊆"> <!-- subset of or equal to, U+2286 ISOtech -->
|
|
||||||
<!ENTITY supe "⊇"> <!-- superset of or equal to,
|
|
||||||
U+2287 ISOtech -->
|
|
||||||
<!ENTITY oplus "⊕"> <!-- circled plus = direct sum,
|
|
||||||
U+2295 ISOamsb -->
|
|
||||||
<!ENTITY otimes "⊗"> <!-- circled times = vector product,
|
|
||||||
U+2297 ISOamsb -->
|
|
||||||
<!ENTITY perp "⊥"> <!-- up tack = orthogonal to = perpendicular,
|
|
||||||
U+22A5 ISOtech -->
|
|
||||||
<!ENTITY sdot "⋅"> <!-- dot operator, U+22C5 ISOamsb -->
|
|
||||||
<!-- dot operator is NOT the same character as U+00B7 middle dot -->
|
|
||||||
|
|
||||||
<!-- Miscellaneous Technical -->
|
|
||||||
<!ENTITY lceil "⌈"> <!-- left ceiling = APL upstile,
|
|
||||||
U+2308 ISOamsc -->
|
|
||||||
<!ENTITY rceil "⌉"> <!-- right ceiling, U+2309 ISOamsc -->
|
|
||||||
<!ENTITY lfloor "⌊"> <!-- left floor = APL downstile,
|
|
||||||
U+230A ISOamsc -->
|
|
||||||
<!ENTITY rfloor "⌋"> <!-- right floor, U+230B ISOamsc -->
|
|
||||||
<!ENTITY lang "〈"> <!-- left-pointing angle bracket = bra,
|
|
||||||
U+2329 ISOtech -->
|
|
||||||
<!-- lang is NOT the same character as U+003C 'less than sign'
|
|
||||||
or U+2039 'single left-pointing angle quotation mark' -->
|
|
||||||
<!ENTITY rang "〉"> <!-- right-pointing angle bracket = ket,
|
|
||||||
U+232A ISOtech -->
|
|
||||||
<!-- rang is NOT the same character as U+003E 'greater than sign'
|
|
||||||
or U+203A 'single right-pointing angle quotation mark' -->
|
|
||||||
|
|
||||||
<!-- Geometric Shapes -->
|
|
||||||
<!ENTITY loz "◊"> <!-- lozenge, U+25CA ISOpub -->
|
|
||||||
|
|
||||||
<!-- Miscellaneous Symbols -->
|
|
||||||
<!ENTITY spades "♠"> <!-- black spade suit, U+2660 ISOpub -->
|
|
||||||
<!-- black here seems to mean filled as opposed to hollow -->
|
|
||||||
<!ENTITY clubs "♣"> <!-- black club suit = shamrock,
|
|
||||||
U+2663 ISOpub -->
|
|
||||||
<!ENTITY hearts "♥"> <!-- black heart suit = valentine,
|
|
||||||
U+2665 ISOpub -->
|
|
||||||
<!ENTITY diams "♦"> <!-- black diamond suit, U+2666 ISOpub -->
|
|
||||||
@@ -1,333 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Table Module .................................................. -->
|
|
||||||
<!-- file: xhtml-table-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-table-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Tables 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-table-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Tables
|
|
||||||
|
|
||||||
table, caption, thead, tfoot, tbody, colgroup, col, tr, th, td
|
|
||||||
|
|
||||||
This module declares element types and attributes used to provide
|
|
||||||
table markup similar to HTML 4, including features that enable
|
|
||||||
better accessibility for non-visual user agents.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- declare qualified element type names:
|
|
||||||
-->
|
|
||||||
<!ENTITY % table.qname "table" >
|
|
||||||
<!ENTITY % caption.qname "caption" >
|
|
||||||
<!ENTITY % thead.qname "thead" >
|
|
||||||
<!ENTITY % tfoot.qname "tfoot" >
|
|
||||||
<!ENTITY % tbody.qname "tbody" >
|
|
||||||
<!ENTITY % colgroup.qname "colgroup" >
|
|
||||||
<!ENTITY % col.qname "col" >
|
|
||||||
<!ENTITY % tr.qname "tr" >
|
|
||||||
<!ENTITY % th.qname "th" >
|
|
||||||
<!ENTITY % td.qname "td" >
|
|
||||||
|
|
||||||
<!-- The frame attribute specifies which parts of the frame around
|
|
||||||
the table should be rendered. The values are not the same as
|
|
||||||
CALS to avoid a name clash with the valign attribute.
|
|
||||||
-->
|
|
||||||
<!ENTITY % frame.attrib
|
|
||||||
"frame ( void
|
|
||||||
| above
|
|
||||||
| below
|
|
||||||
| hsides
|
|
||||||
| lhs
|
|
||||||
| rhs
|
|
||||||
| vsides
|
|
||||||
| box
|
|
||||||
| border ) #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- The rules attribute defines which rules to draw between cells:
|
|
||||||
|
|
||||||
If rules is absent then assume:
|
|
||||||
|
|
||||||
"none" if border is absent or border="0" otherwise "all"
|
|
||||||
-->
|
|
||||||
<!ENTITY % rules.attrib
|
|
||||||
"rules ( none
|
|
||||||
| groups
|
|
||||||
| rows
|
|
||||||
| cols
|
|
||||||
| all ) #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- horizontal alignment attributes for cell contents
|
|
||||||
-->
|
|
||||||
<!ENTITY % CellHAlign.attrib
|
|
||||||
"align ( left
|
|
||||||
| center
|
|
||||||
| right
|
|
||||||
| justify
|
|
||||||
| char ) #IMPLIED
|
|
||||||
char %Character.datatype; #IMPLIED
|
|
||||||
charoff %Length.datatype; #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- vertical alignment attribute for cell contents
|
|
||||||
-->
|
|
||||||
<!ENTITY % CellVAlign.attrib
|
|
||||||
"valign ( top
|
|
||||||
| middle
|
|
||||||
| bottom
|
|
||||||
| baseline ) #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- scope is simpler than axes attribute for common tables
|
|
||||||
-->
|
|
||||||
<!ENTITY % scope.attrib
|
|
||||||
"scope ( row
|
|
||||||
| col
|
|
||||||
| rowgroup
|
|
||||||
| colgroup ) #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- table: Table Element .............................. -->
|
|
||||||
|
|
||||||
<!ENTITY % table.element "INCLUDE" >
|
|
||||||
<![%table.element;[
|
|
||||||
<!ENTITY % table.content
|
|
||||||
"( %caption.qname;?, ( %col.qname;* | %colgroup.qname;* ),
|
|
||||||
(( %thead.qname;?, %tfoot.qname;?, %tbody.qname;+ ) | ( %tr.qname;+ )))"
|
|
||||||
>
|
|
||||||
<!ELEMENT %table.qname; %table.content; >
|
|
||||||
<!-- end of table.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % table.attlist "INCLUDE" >
|
|
||||||
<![%table.attlist;[
|
|
||||||
<!ATTLIST %table.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
summary %Text.datatype; #IMPLIED
|
|
||||||
width %Length.datatype; #IMPLIED
|
|
||||||
border %Pixels.datatype; #IMPLIED
|
|
||||||
%frame.attrib;
|
|
||||||
%rules.attrib;
|
|
||||||
cellspacing %Length.datatype; #IMPLIED
|
|
||||||
cellpadding %Length.datatype; #IMPLIED
|
|
||||||
>
|
|
||||||
<!-- end of table.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- caption: Table Caption ............................ -->
|
|
||||||
|
|
||||||
<!ENTITY % caption.element "INCLUDE" >
|
|
||||||
<![%caption.element;[
|
|
||||||
<!ENTITY % caption.content
|
|
||||||
"( #PCDATA | %Inline.mix; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %caption.qname; %caption.content; >
|
|
||||||
<!-- end of caption.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % caption.attlist "INCLUDE" >
|
|
||||||
<![%caption.attlist;[
|
|
||||||
<!ATTLIST %caption.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of caption.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- thead: Table Header ............................... -->
|
|
||||||
|
|
||||||
<!-- Use thead to duplicate headers when breaking table
|
|
||||||
across page boundaries, or for static headers when
|
|
||||||
tbody sections are rendered in scrolling panel.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % thead.element "INCLUDE" >
|
|
||||||
<![%thead.element;[
|
|
||||||
<!ENTITY % thead.content "( %tr.qname; )+" >
|
|
||||||
<!ELEMENT %thead.qname; %thead.content; >
|
|
||||||
<!-- end of thead.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % thead.attlist "INCLUDE" >
|
|
||||||
<![%thead.attlist;[
|
|
||||||
<!ATTLIST %thead.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
%CellHAlign.attrib;
|
|
||||||
%CellVAlign.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of thead.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- tfoot: Table Footer ............................... -->
|
|
||||||
|
|
||||||
<!-- Use tfoot to duplicate footers when breaking table
|
|
||||||
across page boundaries, or for static footers when
|
|
||||||
tbody sections are rendered in scrolling panel.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % tfoot.element "INCLUDE" >
|
|
||||||
<![%tfoot.element;[
|
|
||||||
<!ENTITY % tfoot.content "( %tr.qname; )+" >
|
|
||||||
<!ELEMENT %tfoot.qname; %tfoot.content; >
|
|
||||||
<!-- end of tfoot.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % tfoot.attlist "INCLUDE" >
|
|
||||||
<![%tfoot.attlist;[
|
|
||||||
<!ATTLIST %tfoot.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
%CellHAlign.attrib;
|
|
||||||
%CellVAlign.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of tfoot.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- tbody: Table Body ................................. -->
|
|
||||||
|
|
||||||
<!-- Use multiple tbody sections when rules are needed
|
|
||||||
between groups of table rows.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % tbody.element "INCLUDE" >
|
|
||||||
<![%tbody.element;[
|
|
||||||
<!ENTITY % tbody.content "( %tr.qname; )+" >
|
|
||||||
<!ELEMENT %tbody.qname; %tbody.content; >
|
|
||||||
<!-- end of tbody.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % tbody.attlist "INCLUDE" >
|
|
||||||
<![%tbody.attlist;[
|
|
||||||
<!ATTLIST %tbody.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
%CellHAlign.attrib;
|
|
||||||
%CellVAlign.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of tbody.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- colgroup: Table Column Group ...................... -->
|
|
||||||
|
|
||||||
<!-- colgroup groups a set of col elements. It allows you
|
|
||||||
to group several semantically-related columns together.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % colgroup.element "INCLUDE" >
|
|
||||||
<![%colgroup.element;[
|
|
||||||
<!ENTITY % colgroup.content "( %col.qname; )*" >
|
|
||||||
<!ELEMENT %colgroup.qname; %colgroup.content; >
|
|
||||||
<!-- end of colgroup.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % colgroup.attlist "INCLUDE" >
|
|
||||||
<![%colgroup.attlist;[
|
|
||||||
<!ATTLIST %colgroup.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
span %Number.datatype; '1'
|
|
||||||
width %MultiLength.datatype; #IMPLIED
|
|
||||||
%CellHAlign.attrib;
|
|
||||||
%CellVAlign.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of colgroup.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- col: Table Column ................................. -->
|
|
||||||
|
|
||||||
<!-- col elements define the alignment properties for
|
|
||||||
cells in one or more columns.
|
|
||||||
|
|
||||||
The width attribute specifies the width of the
|
|
||||||
columns, e.g.
|
|
||||||
|
|
||||||
width="64" width in screen pixels
|
|
||||||
width="0.5*" relative width of 0.5
|
|
||||||
|
|
||||||
The span attribute causes the attributes of one
|
|
||||||
col element to apply to more than one column.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % col.element "INCLUDE" >
|
|
||||||
<![%col.element;[
|
|
||||||
<!ENTITY % col.content "EMPTY" >
|
|
||||||
<!ELEMENT %col.qname; %col.content; >
|
|
||||||
<!-- end of col.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % col.attlist "INCLUDE" >
|
|
||||||
<![%col.attlist;[
|
|
||||||
<!ATTLIST %col.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
span %Number.datatype; '1'
|
|
||||||
width %MultiLength.datatype; #IMPLIED
|
|
||||||
%CellHAlign.attrib;
|
|
||||||
%CellVAlign.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of col.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- tr: Table Row ..................................... -->
|
|
||||||
|
|
||||||
<!ENTITY % tr.element "INCLUDE" >
|
|
||||||
<![%tr.element;[
|
|
||||||
<!ENTITY % tr.content "( %th.qname; | %td.qname; )+" >
|
|
||||||
<!ELEMENT %tr.qname; %tr.content; >
|
|
||||||
<!-- end of tr.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % tr.attlist "INCLUDE" >
|
|
||||||
<![%tr.attlist;[
|
|
||||||
<!ATTLIST %tr.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
%CellHAlign.attrib;
|
|
||||||
%CellVAlign.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of tr.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- th: Table Header Cell ............................. -->
|
|
||||||
|
|
||||||
<!-- th is for header cells, td for data,
|
|
||||||
but for cells acting as both use td
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % th.element "INCLUDE" >
|
|
||||||
<![%th.element;[
|
|
||||||
<!ENTITY % th.content
|
|
||||||
"( #PCDATA | %Flow.mix; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %th.qname; %th.content; >
|
|
||||||
<!-- end of th.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % th.attlist "INCLUDE" >
|
|
||||||
<![%th.attlist;[
|
|
||||||
<!ATTLIST %th.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
abbr %Text.datatype; #IMPLIED
|
|
||||||
axis CDATA #IMPLIED
|
|
||||||
headers IDREFS #IMPLIED
|
|
||||||
%scope.attrib;
|
|
||||||
rowspan %Number.datatype; '1'
|
|
||||||
colspan %Number.datatype; '1'
|
|
||||||
%CellHAlign.attrib;
|
|
||||||
%CellVAlign.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of th.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- td: Table Data Cell ............................... -->
|
|
||||||
|
|
||||||
<!ENTITY % td.element "INCLUDE" >
|
|
||||||
<![%td.element;[
|
|
||||||
<!ENTITY % td.content
|
|
||||||
"( #PCDATA | %Flow.mix; )*"
|
|
||||||
>
|
|
||||||
<!ELEMENT %td.qname; %td.content; >
|
|
||||||
<!-- end of td.element -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % td.attlist "INCLUDE" >
|
|
||||||
<![%td.attlist;[
|
|
||||||
<!ATTLIST %td.qname;
|
|
||||||
%Common.attrib;
|
|
||||||
abbr %Text.datatype; #IMPLIED
|
|
||||||
axis CDATA #IMPLIED
|
|
||||||
headers IDREFS #IMPLIED
|
|
||||||
%scope.attrib;
|
|
||||||
rowspan %Number.datatype; '1'
|
|
||||||
colspan %Number.datatype; '1'
|
|
||||||
%CellHAlign.attrib;
|
|
||||||
%CellVAlign.attrib;
|
|
||||||
>
|
|
||||||
<!-- end of td.attlist -->]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-table-1.mod -->
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
<!-- ...................................................................... -->
|
|
||||||
<!-- XHTML Text Module ................................................... -->
|
|
||||||
<!-- file: xhtml-text-1.mod
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml-text-1.mod,v 1.1 2010/07/29 13:42:48 bertails Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Text 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-text-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- Textual Content
|
|
||||||
|
|
||||||
The Text module includes declarations for all core
|
|
||||||
text container elements and their attributes.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-inlstruct.module "INCLUDE" >
|
|
||||||
<![%xhtml-inlstruct.module;[
|
|
||||||
<!ENTITY % xhtml-inlstruct.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Inline Structural 1.0//EN"
|
|
||||||
"xhtml-inlstruct-1.mod" >
|
|
||||||
%xhtml-inlstruct.mod;]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-inlphras.module "INCLUDE" >
|
|
||||||
<![%xhtml-inlphras.module;[
|
|
||||||
<!ENTITY % xhtml-inlphras.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Inline Phrasal 1.0//EN"
|
|
||||||
"xhtml-inlphras-1.mod" >
|
|
||||||
%xhtml-inlphras.mod;]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-blkstruct.module "INCLUDE" >
|
|
||||||
<![%xhtml-blkstruct.module;[
|
|
||||||
<!ENTITY % xhtml-blkstruct.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Block Structural 1.0//EN"
|
|
||||||
"xhtml-blkstruct-1.mod" >
|
|
||||||
%xhtml-blkstruct.mod;]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-blkphras.module "INCLUDE" >
|
|
||||||
<![%xhtml-blkphras.module;[
|
|
||||||
<!ENTITY % xhtml-blkphras.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Block Phrasal 1.0//EN"
|
|
||||||
"xhtml-blkphras-1.mod" >
|
|
||||||
%xhtml-blkphras.mod;]]>
|
|
||||||
|
|
||||||
<!-- end of xhtml-text-1.mod -->
|
|
||||||
-252
@@ -1,252 +0,0 @@
|
|||||||
<!-- ....................................................................... -->
|
|
||||||
<!-- XHTML 1.1 Document Model Module ...................................... -->
|
|
||||||
<!-- file: xhtml11-model-1.mod
|
|
||||||
|
|
||||||
This is XHTML 1.1, a reformulation of HTML as a modular XML application.
|
|
||||||
Copyright 1998-2001 W3C (MIT, INRIA, Keio), All Rights Reserved.
|
|
||||||
Revision: $Id: xhtml11-model-1.mod,v 1.13 2001/05/29 16:37:01 ahby Exp $ SMI
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML 1.1 Document Model 1.0//EN"
|
|
||||||
SYSTEM "http://www.w3.org/TR/xhtml11/DTD/xhtml11-model-1.mod"
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
....................................................................... -->
|
|
||||||
|
|
||||||
<!-- XHTML 1.1 Document Model
|
|
||||||
|
|
||||||
This module describes the groupings of elements that make up
|
|
||||||
common content models for XHTML elements.
|
|
||||||
|
|
||||||
XHTML has three basic content models:
|
|
||||||
|
|
||||||
%Inline.mix; character-level elements
|
|
||||||
%Block.mix; block-like elements, eg., paragraphs and lists
|
|
||||||
%Flow.mix; any block or inline elements
|
|
||||||
|
|
||||||
Any parameter entities declared in this module may be used
|
|
||||||
to create element content models, but the above three are
|
|
||||||
considered 'global' (insofar as that term applies here).
|
|
||||||
|
|
||||||
The reserved word '#PCDATA' (indicating a text string) is now
|
|
||||||
included explicitly with each element declaration that is
|
|
||||||
declared as mixed content, as XML requires that this token
|
|
||||||
occur first in a content model specification.
|
|
||||||
-->
|
|
||||||
<!-- Extending the Model
|
|
||||||
|
|
||||||
While in some cases this module may need to be rewritten to
|
|
||||||
accommodate changes to the document model, minor extensions
|
|
||||||
may be accomplished by redeclaring any of the three *.extra;
|
|
||||||
parameter entities to contain extension element types as follows:
|
|
||||||
|
|
||||||
%Misc.extra; whose parent may be any block or
|
|
||||||
inline element.
|
|
||||||
|
|
||||||
%Inline.extra; whose parent may be any inline element.
|
|
||||||
|
|
||||||
%Block.extra; whose parent may be any block element.
|
|
||||||
|
|
||||||
If used, these parameter entities must be an OR-separated
|
|
||||||
list beginning with an OR separator ("|"), eg., "| a | b | c"
|
|
||||||
|
|
||||||
All block and inline *.class parameter entities not part
|
|
||||||
of the *struct.class classes begin with "| " to allow for
|
|
||||||
exclusion from mixes.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- .............. Optional Elements in head .................. -->
|
|
||||||
|
|
||||||
<!ENTITY % HeadOpts.mix
|
|
||||||
"( %script.qname; | %style.qname; | %meta.qname;
|
|
||||||
| %link.qname; | %object.qname; )*"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- ................. Miscellaneous Elements .................. -->
|
|
||||||
|
|
||||||
<!-- ins and del are used to denote editing changes
|
|
||||||
-->
|
|
||||||
<!ENTITY % Edit.class "| %ins.qname; | %del.qname;" >
|
|
||||||
|
|
||||||
<!-- script and noscript are used to contain scripts
|
|
||||||
and alternative content
|
|
||||||
-->
|
|
||||||
<!ENTITY % Script.class "| %script.qname; | %noscript.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % Misc.extra "" >
|
|
||||||
|
|
||||||
<!-- These elements are neither block nor inline, and can
|
|
||||||
essentially be used anywhere in the document body.
|
|
||||||
-->
|
|
||||||
<!ENTITY % Misc.class
|
|
||||||
"%Edit.class;
|
|
||||||
%Script.class;
|
|
||||||
%Misc.extra;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- .................... Inline Elements ...................... -->
|
|
||||||
|
|
||||||
<!ENTITY % InlStruct.class "%br.qname; | %span.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % InlPhras.class
|
|
||||||
"| %em.qname; | %strong.qname; | %dfn.qname; | %code.qname;
|
|
||||||
| %samp.qname; | %kbd.qname; | %var.qname; | %cite.qname;
|
|
||||||
| %abbr.qname; | %acronym.qname; | %q.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % InlPres.class
|
|
||||||
"| %tt.qname; | %i.qname; | %b.qname; | %big.qname;
|
|
||||||
| %small.qname; | %sub.qname; | %sup.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % I18n.class "| %bdo.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % Anchor.class "| %a.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % InlSpecial.class
|
|
||||||
"| %img.qname; | %map.qname;
|
|
||||||
| %object.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % InlForm.class
|
|
||||||
"| %input.qname; | %select.qname; | %textarea.qname;
|
|
||||||
| %label.qname; | %button.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % Inline.extra "" >
|
|
||||||
|
|
||||||
<!ENTITY % Ruby.class "| %ruby.qname;" >
|
|
||||||
|
|
||||||
<!-- %Inline.class; includes all inline elements,
|
|
||||||
used as a component in mixes
|
|
||||||
-->
|
|
||||||
<!ENTITY % Inline.class
|
|
||||||
"%InlStruct.class;
|
|
||||||
%InlPhras.class;
|
|
||||||
%InlPres.class;
|
|
||||||
%I18n.class;
|
|
||||||
%Anchor.class;
|
|
||||||
%InlSpecial.class;
|
|
||||||
%InlForm.class;
|
|
||||||
%Ruby.class;
|
|
||||||
%Inline.extra;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- %InlNoRuby.class; includes all inline elements
|
|
||||||
except ruby, used as a component in mixes
|
|
||||||
-->
|
|
||||||
<!ENTITY % InlNoRuby.class
|
|
||||||
"%InlStruct.class;
|
|
||||||
%InlPhras.class;
|
|
||||||
%InlPres.class;
|
|
||||||
%I18n.class;
|
|
||||||
%Anchor.class;
|
|
||||||
%InlSpecial.class;
|
|
||||||
%InlForm.class;
|
|
||||||
%Inline.extra;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- %NoRuby.content; includes all inlines except ruby
|
|
||||||
-->
|
|
||||||
<!ENTITY % NoRuby.content
|
|
||||||
"( #PCDATA
|
|
||||||
| %InlNoRuby.class;
|
|
||||||
%Misc.class; )*"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- %InlNoAnchor.class; includes all non-anchor inlines,
|
|
||||||
used as a component in mixes
|
|
||||||
-->
|
|
||||||
<!ENTITY % InlNoAnchor.class
|
|
||||||
"%InlStruct.class;
|
|
||||||
%InlPhras.class;
|
|
||||||
%InlPres.class;
|
|
||||||
%I18n.class;
|
|
||||||
%InlSpecial.class;
|
|
||||||
%InlForm.class;
|
|
||||||
%Ruby.class;
|
|
||||||
%Inline.extra;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- %InlNoAnchor.mix; includes all non-anchor inlines
|
|
||||||
-->
|
|
||||||
<!ENTITY % InlNoAnchor.mix
|
|
||||||
"%InlNoAnchor.class;
|
|
||||||
%Misc.class;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- %Inline.mix; includes all inline elements, including %Misc.class;
|
|
||||||
-->
|
|
||||||
<!ENTITY % Inline.mix
|
|
||||||
"%Inline.class;
|
|
||||||
%Misc.class;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- ..................... Block Elements ...................... -->
|
|
||||||
|
|
||||||
<!-- In the HTML 4.0 DTD, heading and list elements were included
|
|
||||||
in the %block; parameter entity. The %Heading.class; and
|
|
||||||
%List.class; parameter entities must now be included explicitly
|
|
||||||
on element declarations where desired.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % Heading.class
|
|
||||||
"%h1.qname; | %h2.qname; | %h3.qname;
|
|
||||||
| %h4.qname; | %h5.qname; | %h6.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % List.class "%ul.qname; | %ol.qname; | %dl.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % Table.class "| %table.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % Form.class "| %form.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % Fieldset.class "| %fieldset.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % BlkStruct.class "%p.qname; | %div.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % BlkPhras.class
|
|
||||||
"| %pre.qname; | %blockquote.qname; | %address.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % BlkPres.class "| %hr.qname;" >
|
|
||||||
|
|
||||||
<!ENTITY % BlkSpecial.class
|
|
||||||
"%Table.class;
|
|
||||||
%Form.class;
|
|
||||||
%Fieldset.class;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ENTITY % Block.extra "" >
|
|
||||||
|
|
||||||
<!-- %Block.class; includes all block elements,
|
|
||||||
used as an component in mixes
|
|
||||||
-->
|
|
||||||
<!ENTITY % Block.class
|
|
||||||
"%BlkStruct.class;
|
|
||||||
%BlkPhras.class;
|
|
||||||
%BlkPres.class;
|
|
||||||
%BlkSpecial.class;
|
|
||||||
%Block.extra;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- %Block.mix; includes all block elements plus %Misc.class;
|
|
||||||
-->
|
|
||||||
<!ENTITY % Block.mix
|
|
||||||
"%Heading.class;
|
|
||||||
| %List.class;
|
|
||||||
| %Block.class;
|
|
||||||
%Misc.class;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- ................ All Content Elements .................. -->
|
|
||||||
|
|
||||||
<!-- %Flow.mix; includes all text content, block and inline
|
|
||||||
-->
|
|
||||||
<!ENTITY % Flow.mix
|
|
||||||
"%Heading.class;
|
|
||||||
| %List.class;
|
|
||||||
| %Block.class;
|
|
||||||
| %Inline.class;
|
|
||||||
%Misc.class;"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- end of xhtml11-model-1.mod -->
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,196 +0,0 @@
|
|||||||
<!-- Portions (C) International Organization for Standardization 1986
|
|
||||||
Permission to copy in any form is granted for use with
|
|
||||||
conforming SGML systems and applications as defined in
|
|
||||||
ISO 8879, provided this notice is included in all copies.
|
|
||||||
-->
|
|
||||||
<!-- Character entity set. Typical invocation:
|
|
||||||
<!ENTITY % HTMLlat1 PUBLIC
|
|
||||||
"-//W3C//ENTITIES Latin 1 for XHTML//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
|
|
||||||
%HTMLlat1;
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY nbsp " "> <!-- no-break space = non-breaking space,
|
|
||||||
U+00A0 ISOnum -->
|
|
||||||
<!ENTITY iexcl "¡"> <!-- inverted exclamation mark, U+00A1 ISOnum -->
|
|
||||||
<!ENTITY cent "¢"> <!-- cent sign, U+00A2 ISOnum -->
|
|
||||||
<!ENTITY pound "£"> <!-- pound sign, U+00A3 ISOnum -->
|
|
||||||
<!ENTITY curren "¤"> <!-- currency sign, U+00A4 ISOnum -->
|
|
||||||
<!ENTITY yen "¥"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->
|
|
||||||
<!ENTITY brvbar "¦"> <!-- broken bar = broken vertical bar,
|
|
||||||
U+00A6 ISOnum -->
|
|
||||||
<!ENTITY sect "§"> <!-- section sign, U+00A7 ISOnum -->
|
|
||||||
<!ENTITY uml "¨"> <!-- diaeresis = spacing diaeresis,
|
|
||||||
U+00A8 ISOdia -->
|
|
||||||
<!ENTITY copy "©"> <!-- copyright sign, U+00A9 ISOnum -->
|
|
||||||
<!ENTITY ordf "ª"> <!-- feminine ordinal indicator, U+00AA ISOnum -->
|
|
||||||
<!ENTITY laquo "«"> <!-- left-pointing double angle quotation mark
|
|
||||||
= left pointing guillemet, U+00AB ISOnum -->
|
|
||||||
<!ENTITY not "¬"> <!-- not sign = angled dash,
|
|
||||||
U+00AC ISOnum -->
|
|
||||||
<!ENTITY shy "­"> <!-- soft hyphen = discretionary hyphen,
|
|
||||||
U+00AD ISOnum -->
|
|
||||||
<!ENTITY reg "®"> <!-- registered sign = registered trade mark sign,
|
|
||||||
U+00AE ISOnum -->
|
|
||||||
<!ENTITY macr "¯"> <!-- macron = spacing macron = overline
|
|
||||||
= APL overbar, U+00AF ISOdia -->
|
|
||||||
<!ENTITY deg "°"> <!-- degree sign, U+00B0 ISOnum -->
|
|
||||||
<!ENTITY plusmn "±"> <!-- plus-minus sign = plus-or-minus sign,
|
|
||||||
U+00B1 ISOnum -->
|
|
||||||
<!ENTITY sup2 "²"> <!-- superscript two = superscript digit two
|
|
||||||
= squared, U+00B2 ISOnum -->
|
|
||||||
<!ENTITY sup3 "³"> <!-- superscript three = superscript digit three
|
|
||||||
= cubed, U+00B3 ISOnum -->
|
|
||||||
<!ENTITY acute "´"> <!-- acute accent = spacing acute,
|
|
||||||
U+00B4 ISOdia -->
|
|
||||||
<!ENTITY micro "µ"> <!-- micro sign, U+00B5 ISOnum -->
|
|
||||||
<!ENTITY para "¶"> <!-- pilcrow sign = paragraph sign,
|
|
||||||
U+00B6 ISOnum -->
|
|
||||||
<!ENTITY middot "·"> <!-- middle dot = Georgian comma
|
|
||||||
= Greek middle dot, U+00B7 ISOnum -->
|
|
||||||
<!ENTITY cedil "¸"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
|
|
||||||
<!ENTITY sup1 "¹"> <!-- superscript one = superscript digit one,
|
|
||||||
U+00B9 ISOnum -->
|
|
||||||
<!ENTITY ordm "º"> <!-- masculine ordinal indicator,
|
|
||||||
U+00BA ISOnum -->
|
|
||||||
<!ENTITY raquo "»"> <!-- right-pointing double angle quotation mark
|
|
||||||
= right pointing guillemet, U+00BB ISOnum -->
|
|
||||||
<!ENTITY frac14 "¼"> <!-- vulgar fraction one quarter
|
|
||||||
= fraction one quarter, U+00BC ISOnum -->
|
|
||||||
<!ENTITY frac12 "½"> <!-- vulgar fraction one half
|
|
||||||
= fraction one half, U+00BD ISOnum -->
|
|
||||||
<!ENTITY frac34 "¾"> <!-- vulgar fraction three quarters
|
|
||||||
= fraction three quarters, U+00BE ISOnum -->
|
|
||||||
<!ENTITY iquest "¿"> <!-- inverted question mark
|
|
||||||
= turned question mark, U+00BF ISOnum -->
|
|
||||||
<!ENTITY Agrave "À"> <!-- latin capital letter A with grave
|
|
||||||
= latin capital letter A grave,
|
|
||||||
U+00C0 ISOlat1 -->
|
|
||||||
<!ENTITY Aacute "Á"> <!-- latin capital letter A with acute,
|
|
||||||
U+00C1 ISOlat1 -->
|
|
||||||
<!ENTITY Acirc "Â"> <!-- latin capital letter A with circumflex,
|
|
||||||
U+00C2 ISOlat1 -->
|
|
||||||
<!ENTITY Atilde "Ã"> <!-- latin capital letter A with tilde,
|
|
||||||
U+00C3 ISOlat1 -->
|
|
||||||
<!ENTITY Auml "Ä"> <!-- latin capital letter A with diaeresis,
|
|
||||||
U+00C4 ISOlat1 -->
|
|
||||||
<!ENTITY Aring "Å"> <!-- latin capital letter A with ring above
|
|
||||||
= latin capital letter A ring,
|
|
||||||
U+00C5 ISOlat1 -->
|
|
||||||
<!ENTITY AElig "Æ"> <!-- latin capital letter AE
|
|
||||||
= latin capital ligature AE,
|
|
||||||
U+00C6 ISOlat1 -->
|
|
||||||
<!ENTITY Ccedil "Ç"> <!-- latin capital letter C with cedilla,
|
|
||||||
U+00C7 ISOlat1 -->
|
|
||||||
<!ENTITY Egrave "È"> <!-- latin capital letter E with grave,
|
|
||||||
U+00C8 ISOlat1 -->
|
|
||||||
<!ENTITY Eacute "É"> <!-- latin capital letter E with acute,
|
|
||||||
U+00C9 ISOlat1 -->
|
|
||||||
<!ENTITY Ecirc "Ê"> <!-- latin capital letter E with circumflex,
|
|
||||||
U+00CA ISOlat1 -->
|
|
||||||
<!ENTITY Euml "Ë"> <!-- latin capital letter E with diaeresis,
|
|
||||||
U+00CB ISOlat1 -->
|
|
||||||
<!ENTITY Igrave "Ì"> <!-- latin capital letter I with grave,
|
|
||||||
U+00CC ISOlat1 -->
|
|
||||||
<!ENTITY Iacute "Í"> <!-- latin capital letter I with acute,
|
|
||||||
U+00CD ISOlat1 -->
|
|
||||||
<!ENTITY Icirc "Î"> <!-- latin capital letter I with circumflex,
|
|
||||||
U+00CE ISOlat1 -->
|
|
||||||
<!ENTITY Iuml "Ï"> <!-- latin capital letter I with diaeresis,
|
|
||||||
U+00CF ISOlat1 -->
|
|
||||||
<!ENTITY ETH "Ð"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->
|
|
||||||
<!ENTITY Ntilde "Ñ"> <!-- latin capital letter N with tilde,
|
|
||||||
U+00D1 ISOlat1 -->
|
|
||||||
<!ENTITY Ograve "Ò"> <!-- latin capital letter O with grave,
|
|
||||||
U+00D2 ISOlat1 -->
|
|
||||||
<!ENTITY Oacute "Ó"> <!-- latin capital letter O with acute,
|
|
||||||
U+00D3 ISOlat1 -->
|
|
||||||
<!ENTITY Ocirc "Ô"> <!-- latin capital letter O with circumflex,
|
|
||||||
U+00D4 ISOlat1 -->
|
|
||||||
<!ENTITY Otilde "Õ"> <!-- latin capital letter O with tilde,
|
|
||||||
U+00D5 ISOlat1 -->
|
|
||||||
<!ENTITY Ouml "Ö"> <!-- latin capital letter O with diaeresis,
|
|
||||||
U+00D6 ISOlat1 -->
|
|
||||||
<!ENTITY times "×"> <!-- multiplication sign, U+00D7 ISOnum -->
|
|
||||||
<!ENTITY Oslash "Ø"> <!-- latin capital letter O with stroke
|
|
||||||
= latin capital letter O slash,
|
|
||||||
U+00D8 ISOlat1 -->
|
|
||||||
<!ENTITY Ugrave "Ù"> <!-- latin capital letter U with grave,
|
|
||||||
U+00D9 ISOlat1 -->
|
|
||||||
<!ENTITY Uacute "Ú"> <!-- latin capital letter U with acute,
|
|
||||||
U+00DA ISOlat1 -->
|
|
||||||
<!ENTITY Ucirc "Û"> <!-- latin capital letter U with circumflex,
|
|
||||||
U+00DB ISOlat1 -->
|
|
||||||
<!ENTITY Uuml "Ü"> <!-- latin capital letter U with diaeresis,
|
|
||||||
U+00DC ISOlat1 -->
|
|
||||||
<!ENTITY Yacute "Ý"> <!-- latin capital letter Y with acute,
|
|
||||||
U+00DD ISOlat1 -->
|
|
||||||
<!ENTITY THORN "Þ"> <!-- latin capital letter THORN,
|
|
||||||
U+00DE ISOlat1 -->
|
|
||||||
<!ENTITY szlig "ß"> <!-- latin small letter sharp s = ess-zed,
|
|
||||||
U+00DF ISOlat1 -->
|
|
||||||
<!ENTITY agrave "à"> <!-- latin small letter a with grave
|
|
||||||
= latin small letter a grave,
|
|
||||||
U+00E0 ISOlat1 -->
|
|
||||||
<!ENTITY aacute "á"> <!-- latin small letter a with acute,
|
|
||||||
U+00E1 ISOlat1 -->
|
|
||||||
<!ENTITY acirc "â"> <!-- latin small letter a with circumflex,
|
|
||||||
U+00E2 ISOlat1 -->
|
|
||||||
<!ENTITY atilde "ã"> <!-- latin small letter a with tilde,
|
|
||||||
U+00E3 ISOlat1 -->
|
|
||||||
<!ENTITY auml "ä"> <!-- latin small letter a with diaeresis,
|
|
||||||
U+00E4 ISOlat1 -->
|
|
||||||
<!ENTITY aring "å"> <!-- latin small letter a with ring above
|
|
||||||
= latin small letter a ring,
|
|
||||||
U+00E5 ISOlat1 -->
|
|
||||||
<!ENTITY aelig "æ"> <!-- latin small letter ae
|
|
||||||
= latin small ligature ae, U+00E6 ISOlat1 -->
|
|
||||||
<!ENTITY ccedil "ç"> <!-- latin small letter c with cedilla,
|
|
||||||
U+00E7 ISOlat1 -->
|
|
||||||
<!ENTITY egrave "è"> <!-- latin small letter e with grave,
|
|
||||||
U+00E8 ISOlat1 -->
|
|
||||||
<!ENTITY eacute "é"> <!-- latin small letter e with acute,
|
|
||||||
U+00E9 ISOlat1 -->
|
|
||||||
<!ENTITY ecirc "ê"> <!-- latin small letter e with circumflex,
|
|
||||||
U+00EA ISOlat1 -->
|
|
||||||
<!ENTITY euml "ë"> <!-- latin small letter e with diaeresis,
|
|
||||||
U+00EB ISOlat1 -->
|
|
||||||
<!ENTITY igrave "ì"> <!-- latin small letter i with grave,
|
|
||||||
U+00EC ISOlat1 -->
|
|
||||||
<!ENTITY iacute "í"> <!-- latin small letter i with acute,
|
|
||||||
U+00ED ISOlat1 -->
|
|
||||||
<!ENTITY icirc "î"> <!-- latin small letter i with circumflex,
|
|
||||||
U+00EE ISOlat1 -->
|
|
||||||
<!ENTITY iuml "ï"> <!-- latin small letter i with diaeresis,
|
|
||||||
U+00EF ISOlat1 -->
|
|
||||||
<!ENTITY eth "ð"> <!-- latin small letter eth, U+00F0 ISOlat1 -->
|
|
||||||
<!ENTITY ntilde "ñ"> <!-- latin small letter n with tilde,
|
|
||||||
U+00F1 ISOlat1 -->
|
|
||||||
<!ENTITY ograve "ò"> <!-- latin small letter o with grave,
|
|
||||||
U+00F2 ISOlat1 -->
|
|
||||||
<!ENTITY oacute "ó"> <!-- latin small letter o with acute,
|
|
||||||
U+00F3 ISOlat1 -->
|
|
||||||
<!ENTITY ocirc "ô"> <!-- latin small letter o with circumflex,
|
|
||||||
U+00F4 ISOlat1 -->
|
|
||||||
<!ENTITY otilde "õ"> <!-- latin small letter o with tilde,
|
|
||||||
U+00F5 ISOlat1 -->
|
|
||||||
<!ENTITY ouml "ö"> <!-- latin small letter o with diaeresis,
|
|
||||||
U+00F6 ISOlat1 -->
|
|
||||||
<!ENTITY divide "÷"> <!-- division sign, U+00F7 ISOnum -->
|
|
||||||
<!ENTITY oslash "ø"> <!-- latin small letter o with stroke,
|
|
||||||
= latin small letter o slash,
|
|
||||||
U+00F8 ISOlat1 -->
|
|
||||||
<!ENTITY ugrave "ù"> <!-- latin small letter u with grave,
|
|
||||||
U+00F9 ISOlat1 -->
|
|
||||||
<!ENTITY uacute "ú"> <!-- latin small letter u with acute,
|
|
||||||
U+00FA ISOlat1 -->
|
|
||||||
<!ENTITY ucirc "û"> <!-- latin small letter u with circumflex,
|
|
||||||
U+00FB ISOlat1 -->
|
|
||||||
<!ENTITY uuml "ü"> <!-- latin small letter u with diaeresis,
|
|
||||||
U+00FC ISOlat1 -->
|
|
||||||
<!ENTITY yacute "ý"> <!-- latin small letter y with acute,
|
|
||||||
U+00FD ISOlat1 -->
|
|
||||||
<!ENTITY thorn "þ"> <!-- latin small letter thorn,
|
|
||||||
U+00FE ISOlat1 -->
|
|
||||||
<!ENTITY yuml "ÿ"> <!-- latin small letter y with diaeresis,
|
|
||||||
U+00FF ISOlat1 -->
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
<!-- Special characters for XHTML -->
|
|
||||||
|
|
||||||
<!-- Character entity set. Typical invocation:
|
|
||||||
<!ENTITY % HTMLspecial PUBLIC
|
|
||||||
"-//W3C//ENTITIES Special for XHTML//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
|
|
||||||
%HTMLspecial;
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Portions (C) International Organization for Standardization 1986:
|
|
||||||
Permission to copy in any form is granted for use with
|
|
||||||
conforming SGML systems and applications as defined in
|
|
||||||
ISO 8879, provided this notice is included in all copies.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Relevant ISO entity set is given unless names are newly introduced.
|
|
||||||
New names (i.e., not in ISO 8879 list) do not clash with any
|
|
||||||
existing ISO 8879 entity names. ISO 10646 character numbers
|
|
||||||
are given for each character, in hex. values are decimal
|
|
||||||
conversions of the ISO 10646 values and refer to the document
|
|
||||||
character set. Names are Unicode names.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- C0 Controls and Basic Latin -->
|
|
||||||
<!ENTITY quot """> <!-- quotation mark, U+0022 ISOnum -->
|
|
||||||
<!ENTITY amp "&#38;"> <!-- ampersand, U+0026 ISOnum -->
|
|
||||||
<!ENTITY lt "&#60;"> <!-- less-than sign, U+003C ISOnum -->
|
|
||||||
<!ENTITY gt ">"> <!-- greater-than sign, U+003E ISOnum -->
|
|
||||||
<!ENTITY apos "'"> <!-- apostrophe = APL quote, U+0027 ISOnum -->
|
|
||||||
|
|
||||||
<!-- Latin Extended-A -->
|
|
||||||
<!ENTITY OElig "Œ"> <!-- latin capital ligature OE,
|
|
||||||
U+0152 ISOlat2 -->
|
|
||||||
<!ENTITY oelig "œ"> <!-- latin small ligature oe, U+0153 ISOlat2 -->
|
|
||||||
<!-- ligature is a misnomer, this is a separate character in some languages -->
|
|
||||||
<!ENTITY Scaron "Š"> <!-- latin capital letter S with caron,
|
|
||||||
U+0160 ISOlat2 -->
|
|
||||||
<!ENTITY scaron "š"> <!-- latin small letter s with caron,
|
|
||||||
U+0161 ISOlat2 -->
|
|
||||||
<!ENTITY Yuml "Ÿ"> <!-- latin capital letter Y with diaeresis,
|
|
||||||
U+0178 ISOlat2 -->
|
|
||||||
|
|
||||||
<!-- Spacing Modifier Letters -->
|
|
||||||
<!ENTITY circ "ˆ"> <!-- modifier letter circumflex accent,
|
|
||||||
U+02C6 ISOpub -->
|
|
||||||
<!ENTITY tilde "˜"> <!-- small tilde, U+02DC ISOdia -->
|
|
||||||
|
|
||||||
<!-- General Punctuation -->
|
|
||||||
<!ENTITY ensp " "> <!-- en space, U+2002 ISOpub -->
|
|
||||||
<!ENTITY emsp " "> <!-- em space, U+2003 ISOpub -->
|
|
||||||
<!ENTITY thinsp " "> <!-- thin space, U+2009 ISOpub -->
|
|
||||||
<!ENTITY zwnj "‌"> <!-- zero width non-joiner,
|
|
||||||
U+200C NEW RFC 2070 -->
|
|
||||||
<!ENTITY zwj "‍"> <!-- zero width joiner, U+200D NEW RFC 2070 -->
|
|
||||||
<!ENTITY lrm "‎"> <!-- left-to-right mark, U+200E NEW RFC 2070 -->
|
|
||||||
<!ENTITY rlm "‏"> <!-- right-to-left mark, U+200F NEW RFC 2070 -->
|
|
||||||
<!ENTITY ndash "–"> <!-- en dash, U+2013 ISOpub -->
|
|
||||||
<!ENTITY mdash "—"> <!-- em dash, U+2014 ISOpub -->
|
|
||||||
<!ENTITY lsquo "‘"> <!-- left single quotation mark,
|
|
||||||
U+2018 ISOnum -->
|
|
||||||
<!ENTITY rsquo "’"> <!-- right single quotation mark,
|
|
||||||
U+2019 ISOnum -->
|
|
||||||
<!ENTITY sbquo "‚"> <!-- single low-9 quotation mark, U+201A NEW -->
|
|
||||||
<!ENTITY ldquo "“"> <!-- left double quotation mark,
|
|
||||||
U+201C ISOnum -->
|
|
||||||
<!ENTITY rdquo "”"> <!-- right double quotation mark,
|
|
||||||
U+201D ISOnum -->
|
|
||||||
<!ENTITY bdquo "„"> <!-- double low-9 quotation mark, U+201E NEW -->
|
|
||||||
<!ENTITY dagger "†"> <!-- dagger, U+2020 ISOpub -->
|
|
||||||
<!ENTITY Dagger "‡"> <!-- double dagger, U+2021 ISOpub -->
|
|
||||||
<!ENTITY permil "‰"> <!-- per mille sign, U+2030 ISOtech -->
|
|
||||||
<!ENTITY lsaquo "‹"> <!-- single left-pointing angle quotation mark,
|
|
||||||
U+2039 ISO proposed -->
|
|
||||||
<!-- lsaquo is proposed but not yet ISO standardized -->
|
|
||||||
<!ENTITY rsaquo "›"> <!-- single right-pointing angle quotation mark,
|
|
||||||
U+203A ISO proposed -->
|
|
||||||
<!-- rsaquo is proposed but not yet ISO standardized -->
|
|
||||||
|
|
||||||
<!-- Currency Symbols -->
|
|
||||||
<!ENTITY euro "€"> <!-- euro sign, U+20AC NEW -->
|
|
||||||
@@ -1,237 +0,0 @@
|
|||||||
<!-- Mathematical, Greek and Symbolic characters for XHTML -->
|
|
||||||
|
|
||||||
<!-- Character entity set. Typical invocation:
|
|
||||||
<!ENTITY % HTMLsymbol PUBLIC
|
|
||||||
"-//W3C//ENTITIES Symbols for XHTML//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
|
|
||||||
%HTMLsymbol;
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Portions (C) International Organization for Standardization 1986:
|
|
||||||
Permission to copy in any form is granted for use with
|
|
||||||
conforming SGML systems and applications as defined in
|
|
||||||
ISO 8879, provided this notice is included in all copies.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Relevant ISO entity set is given unless names are newly introduced.
|
|
||||||
New names (i.e., not in ISO 8879 list) do not clash with any
|
|
||||||
existing ISO 8879 entity names. ISO 10646 character numbers
|
|
||||||
are given for each character, in hex. values are decimal
|
|
||||||
conversions of the ISO 10646 values and refer to the document
|
|
||||||
character set. Names are Unicode names.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Latin Extended-B -->
|
|
||||||
<!ENTITY fnof "ƒ"> <!-- latin small letter f with hook = function
|
|
||||||
= florin, U+0192 ISOtech -->
|
|
||||||
|
|
||||||
<!-- Greek -->
|
|
||||||
<!ENTITY Alpha "Α"> <!-- greek capital letter alpha, U+0391 -->
|
|
||||||
<!ENTITY Beta "Β"> <!-- greek capital letter beta, U+0392 -->
|
|
||||||
<!ENTITY Gamma "Γ"> <!-- greek capital letter gamma,
|
|
||||||
U+0393 ISOgrk3 -->
|
|
||||||
<!ENTITY Delta "Δ"> <!-- greek capital letter delta,
|
|
||||||
U+0394 ISOgrk3 -->
|
|
||||||
<!ENTITY Epsilon "Ε"> <!-- greek capital letter epsilon, U+0395 -->
|
|
||||||
<!ENTITY Zeta "Ζ"> <!-- greek capital letter zeta, U+0396 -->
|
|
||||||
<!ENTITY Eta "Η"> <!-- greek capital letter eta, U+0397 -->
|
|
||||||
<!ENTITY Theta "Θ"> <!-- greek capital letter theta,
|
|
||||||
U+0398 ISOgrk3 -->
|
|
||||||
<!ENTITY Iota "Ι"> <!-- greek capital letter iota, U+0399 -->
|
|
||||||
<!ENTITY Kappa "Κ"> <!-- greek capital letter kappa, U+039A -->
|
|
||||||
<!ENTITY Lambda "Λ"> <!-- greek capital letter lamda,
|
|
||||||
U+039B ISOgrk3 -->
|
|
||||||
<!ENTITY Mu "Μ"> <!-- greek capital letter mu, U+039C -->
|
|
||||||
<!ENTITY Nu "Ν"> <!-- greek capital letter nu, U+039D -->
|
|
||||||
<!ENTITY Xi "Ξ"> <!-- greek capital letter xi, U+039E ISOgrk3 -->
|
|
||||||
<!ENTITY Omicron "Ο"> <!-- greek capital letter omicron, U+039F -->
|
|
||||||
<!ENTITY Pi "Π"> <!-- greek capital letter pi, U+03A0 ISOgrk3 -->
|
|
||||||
<!ENTITY Rho "Ρ"> <!-- greek capital letter rho, U+03A1 -->
|
|
||||||
<!-- there is no Sigmaf, and no U+03A2 character either -->
|
|
||||||
<!ENTITY Sigma "Σ"> <!-- greek capital letter sigma,
|
|
||||||
U+03A3 ISOgrk3 -->
|
|
||||||
<!ENTITY Tau "Τ"> <!-- greek capital letter tau, U+03A4 -->
|
|
||||||
<!ENTITY Upsilon "Υ"> <!-- greek capital letter upsilon,
|
|
||||||
U+03A5 ISOgrk3 -->
|
|
||||||
<!ENTITY Phi "Φ"> <!-- greek capital letter phi,
|
|
||||||
U+03A6 ISOgrk3 -->
|
|
||||||
<!ENTITY Chi "Χ"> <!-- greek capital letter chi, U+03A7 -->
|
|
||||||
<!ENTITY Psi "Ψ"> <!-- greek capital letter psi,
|
|
||||||
U+03A8 ISOgrk3 -->
|
|
||||||
<!ENTITY Omega "Ω"> <!-- greek capital letter omega,
|
|
||||||
U+03A9 ISOgrk3 -->
|
|
||||||
|
|
||||||
<!ENTITY alpha "α"> <!-- greek small letter alpha,
|
|
||||||
U+03B1 ISOgrk3 -->
|
|
||||||
<!ENTITY beta "β"> <!-- greek small letter beta, U+03B2 ISOgrk3 -->
|
|
||||||
<!ENTITY gamma "γ"> <!-- greek small letter gamma,
|
|
||||||
U+03B3 ISOgrk3 -->
|
|
||||||
<!ENTITY delta "δ"> <!-- greek small letter delta,
|
|
||||||
U+03B4 ISOgrk3 -->
|
|
||||||
<!ENTITY epsilon "ε"> <!-- greek small letter epsilon,
|
|
||||||
U+03B5 ISOgrk3 -->
|
|
||||||
<!ENTITY zeta "ζ"> <!-- greek small letter zeta, U+03B6 ISOgrk3 -->
|
|
||||||
<!ENTITY eta "η"> <!-- greek small letter eta, U+03B7 ISOgrk3 -->
|
|
||||||
<!ENTITY theta "θ"> <!-- greek small letter theta,
|
|
||||||
U+03B8 ISOgrk3 -->
|
|
||||||
<!ENTITY iota "ι"> <!-- greek small letter iota, U+03B9 ISOgrk3 -->
|
|
||||||
<!ENTITY kappa "κ"> <!-- greek small letter kappa,
|
|
||||||
U+03BA ISOgrk3 -->
|
|
||||||
<!ENTITY lambda "λ"> <!-- greek small letter lamda,
|
|
||||||
U+03BB ISOgrk3 -->
|
|
||||||
<!ENTITY mu "μ"> <!-- greek small letter mu, U+03BC ISOgrk3 -->
|
|
||||||
<!ENTITY nu "ν"> <!-- greek small letter nu, U+03BD ISOgrk3 -->
|
|
||||||
<!ENTITY xi "ξ"> <!-- greek small letter xi, U+03BE ISOgrk3 -->
|
|
||||||
<!ENTITY omicron "ο"> <!-- greek small letter omicron, U+03BF NEW -->
|
|
||||||
<!ENTITY pi "π"> <!-- greek small letter pi, U+03C0 ISOgrk3 -->
|
|
||||||
<!ENTITY rho "ρ"> <!-- greek small letter rho, U+03C1 ISOgrk3 -->
|
|
||||||
<!ENTITY sigmaf "ς"> <!-- greek small letter final sigma,
|
|
||||||
U+03C2 ISOgrk3 -->
|
|
||||||
<!ENTITY sigma "σ"> <!-- greek small letter sigma,
|
|
||||||
U+03C3 ISOgrk3 -->
|
|
||||||
<!ENTITY tau "τ"> <!-- greek small letter tau, U+03C4 ISOgrk3 -->
|
|
||||||
<!ENTITY upsilon "υ"> <!-- greek small letter upsilon,
|
|
||||||
U+03C5 ISOgrk3 -->
|
|
||||||
<!ENTITY phi "φ"> <!-- greek small letter phi, U+03C6 ISOgrk3 -->
|
|
||||||
<!ENTITY chi "χ"> <!-- greek small letter chi, U+03C7 ISOgrk3 -->
|
|
||||||
<!ENTITY psi "ψ"> <!-- greek small letter psi, U+03C8 ISOgrk3 -->
|
|
||||||
<!ENTITY omega "ω"> <!-- greek small letter omega,
|
|
||||||
U+03C9 ISOgrk3 -->
|
|
||||||
<!ENTITY thetasym "ϑ"> <!-- greek theta symbol,
|
|
||||||
U+03D1 NEW -->
|
|
||||||
<!ENTITY upsih "ϒ"> <!-- greek upsilon with hook symbol,
|
|
||||||
U+03D2 NEW -->
|
|
||||||
<!ENTITY piv "ϖ"> <!-- greek pi symbol, U+03D6 ISOgrk3 -->
|
|
||||||
|
|
||||||
<!-- General Punctuation -->
|
|
||||||
<!ENTITY bull "•"> <!-- bullet = black small circle,
|
|
||||||
U+2022 ISOpub -->
|
|
||||||
<!-- bullet is NOT the same as bullet operator, U+2219 -->
|
|
||||||
<!ENTITY hellip "…"> <!-- horizontal ellipsis = three dot leader,
|
|
||||||
U+2026 ISOpub -->
|
|
||||||
<!ENTITY prime "′"> <!-- prime = minutes = feet, U+2032 ISOtech -->
|
|
||||||
<!ENTITY Prime "″"> <!-- double prime = seconds = inches,
|
|
||||||
U+2033 ISOtech -->
|
|
||||||
<!ENTITY oline "‾"> <!-- overline = spacing overscore,
|
|
||||||
U+203E NEW -->
|
|
||||||
<!ENTITY frasl "⁄"> <!-- fraction slash, U+2044 NEW -->
|
|
||||||
|
|
||||||
<!-- Letterlike Symbols -->
|
|
||||||
<!ENTITY weierp "℘"> <!-- script capital P = power set
|
|
||||||
= Weierstrass p, U+2118 ISOamso -->
|
|
||||||
<!ENTITY image "ℑ"> <!-- black-letter capital I = imaginary part,
|
|
||||||
U+2111 ISOamso -->
|
|
||||||
<!ENTITY real "ℜ"> <!-- black-letter capital R = real part symbol,
|
|
||||||
U+211C ISOamso -->
|
|
||||||
<!ENTITY trade "™"> <!-- trade mark sign, U+2122 ISOnum -->
|
|
||||||
<!ENTITY alefsym "ℵ"> <!-- alef symbol = first transfinite cardinal,
|
|
||||||
U+2135 NEW -->
|
|
||||||
<!-- alef symbol is NOT the same as hebrew letter alef,
|
|
||||||
U+05D0 although the same glyph could be used to depict both characters -->
|
|
||||||
|
|
||||||
<!-- Arrows -->
|
|
||||||
<!ENTITY larr "←"> <!-- leftwards arrow, U+2190 ISOnum -->
|
|
||||||
<!ENTITY uarr "↑"> <!-- upwards arrow, U+2191 ISOnum-->
|
|
||||||
<!ENTITY rarr "→"> <!-- rightwards arrow, U+2192 ISOnum -->
|
|
||||||
<!ENTITY darr "↓"> <!-- downwards arrow, U+2193 ISOnum -->
|
|
||||||
<!ENTITY harr "↔"> <!-- left right arrow, U+2194 ISOamsa -->
|
|
||||||
<!ENTITY crarr "↵"> <!-- downwards arrow with corner leftwards
|
|
||||||
= carriage return, U+21B5 NEW -->
|
|
||||||
<!ENTITY lArr "⇐"> <!-- leftwards double arrow, U+21D0 ISOtech -->
|
|
||||||
<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
|
|
||||||
but also does not have any other character for that function. So lArr can
|
|
||||||
be used for 'is implied by' as ISOtech suggests -->
|
|
||||||
<!ENTITY uArr "⇑"> <!-- upwards double arrow, U+21D1 ISOamsa -->
|
|
||||||
<!ENTITY rArr "⇒"> <!-- rightwards double arrow,
|
|
||||||
U+21D2 ISOtech -->
|
|
||||||
<!-- Unicode does not say this is the 'implies' character but does not have
|
|
||||||
another character with this function so rArr can be used for 'implies'
|
|
||||||
as ISOtech suggests -->
|
|
||||||
<!ENTITY dArr "⇓"> <!-- downwards double arrow, U+21D3 ISOamsa -->
|
|
||||||
<!ENTITY hArr "⇔"> <!-- left right double arrow,
|
|
||||||
U+21D4 ISOamsa -->
|
|
||||||
|
|
||||||
<!-- Mathematical Operators -->
|
|
||||||
<!ENTITY forall "∀"> <!-- for all, U+2200 ISOtech -->
|
|
||||||
<!ENTITY part "∂"> <!-- partial differential, U+2202 ISOtech -->
|
|
||||||
<!ENTITY exist "∃"> <!-- there exists, U+2203 ISOtech -->
|
|
||||||
<!ENTITY empty "∅"> <!-- empty set = null set, U+2205 ISOamso -->
|
|
||||||
<!ENTITY nabla "∇"> <!-- nabla = backward difference,
|
|
||||||
U+2207 ISOtech -->
|
|
||||||
<!ENTITY isin "∈"> <!-- element of, U+2208 ISOtech -->
|
|
||||||
<!ENTITY notin "∉"> <!-- not an element of, U+2209 ISOtech -->
|
|
||||||
<!ENTITY ni "∋"> <!-- contains as member, U+220B ISOtech -->
|
|
||||||
<!ENTITY prod "∏"> <!-- n-ary product = product sign,
|
|
||||||
U+220F ISOamsb -->
|
|
||||||
<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
|
|
||||||
the same glyph might be used for both -->
|
|
||||||
<!ENTITY sum "∑"> <!-- n-ary summation, U+2211 ISOamsb -->
|
|
||||||
<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
|
|
||||||
though the same glyph might be used for both -->
|
|
||||||
<!ENTITY minus "−"> <!-- minus sign, U+2212 ISOtech -->
|
|
||||||
<!ENTITY lowast "∗"> <!-- asterisk operator, U+2217 ISOtech -->
|
|
||||||
<!ENTITY radic "√"> <!-- square root = radical sign,
|
|
||||||
U+221A ISOtech -->
|
|
||||||
<!ENTITY prop "∝"> <!-- proportional to, U+221D ISOtech -->
|
|
||||||
<!ENTITY infin "∞"> <!-- infinity, U+221E ISOtech -->
|
|
||||||
<!ENTITY ang "∠"> <!-- angle, U+2220 ISOamso -->
|
|
||||||
<!ENTITY and "∧"> <!-- logical and = wedge, U+2227 ISOtech -->
|
|
||||||
<!ENTITY or "∨"> <!-- logical or = vee, U+2228 ISOtech -->
|
|
||||||
<!ENTITY cap "∩"> <!-- intersection = cap, U+2229 ISOtech -->
|
|
||||||
<!ENTITY cup "∪"> <!-- union = cup, U+222A ISOtech -->
|
|
||||||
<!ENTITY int "∫"> <!-- integral, U+222B ISOtech -->
|
|
||||||
<!ENTITY there4 "∴"> <!-- therefore, U+2234 ISOtech -->
|
|
||||||
<!ENTITY sim "∼"> <!-- tilde operator = varies with = similar to,
|
|
||||||
U+223C ISOtech -->
|
|
||||||
<!-- tilde operator is NOT the same character as the tilde, U+007E,
|
|
||||||
although the same glyph might be used to represent both -->
|
|
||||||
<!ENTITY cong "≅"> <!-- approximately equal to, U+2245 ISOtech -->
|
|
||||||
<!ENTITY asymp "≈"> <!-- almost equal to = asymptotic to,
|
|
||||||
U+2248 ISOamsr -->
|
|
||||||
<!ENTITY ne "≠"> <!-- not equal to, U+2260 ISOtech -->
|
|
||||||
<!ENTITY equiv "≡"> <!-- identical to, U+2261 ISOtech -->
|
|
||||||
<!ENTITY le "≤"> <!-- less-than or equal to, U+2264 ISOtech -->
|
|
||||||
<!ENTITY ge "≥"> <!-- greater-than or equal to,
|
|
||||||
U+2265 ISOtech -->
|
|
||||||
<!ENTITY sub "⊂"> <!-- subset of, U+2282 ISOtech -->
|
|
||||||
<!ENTITY sup "⊃"> <!-- superset of, U+2283 ISOtech -->
|
|
||||||
<!ENTITY nsub "⊄"> <!-- not a subset of, U+2284 ISOamsn -->
|
|
||||||
<!ENTITY sube "⊆"> <!-- subset of or equal to, U+2286 ISOtech -->
|
|
||||||
<!ENTITY supe "⊇"> <!-- superset of or equal to,
|
|
||||||
U+2287 ISOtech -->
|
|
||||||
<!ENTITY oplus "⊕"> <!-- circled plus = direct sum,
|
|
||||||
U+2295 ISOamsb -->
|
|
||||||
<!ENTITY otimes "⊗"> <!-- circled times = vector product,
|
|
||||||
U+2297 ISOamsb -->
|
|
||||||
<!ENTITY perp "⊥"> <!-- up tack = orthogonal to = perpendicular,
|
|
||||||
U+22A5 ISOtech -->
|
|
||||||
<!ENTITY sdot "⋅"> <!-- dot operator, U+22C5 ISOamsb -->
|
|
||||||
<!-- dot operator is NOT the same character as U+00B7 middle dot -->
|
|
||||||
|
|
||||||
<!-- Miscellaneous Technical -->
|
|
||||||
<!ENTITY lceil "⌈"> <!-- left ceiling = APL upstile,
|
|
||||||
U+2308 ISOamsc -->
|
|
||||||
<!ENTITY rceil "⌉"> <!-- right ceiling, U+2309 ISOamsc -->
|
|
||||||
<!ENTITY lfloor "⌊"> <!-- left floor = APL downstile,
|
|
||||||
U+230A ISOamsc -->
|
|
||||||
<!ENTITY rfloor "⌋"> <!-- right floor, U+230B ISOamsc -->
|
|
||||||
<!ENTITY lang "〈"> <!-- left-pointing angle bracket = bra,
|
|
||||||
U+2329 ISOtech -->
|
|
||||||
<!-- lang is NOT the same character as U+003C 'less than sign'
|
|
||||||
or U+2039 'single left-pointing angle quotation mark' -->
|
|
||||||
<!ENTITY rang "〉"> <!-- right-pointing angle bracket = ket,
|
|
||||||
U+232A ISOtech -->
|
|
||||||
<!-- rang is NOT the same character as U+003E 'greater than sign'
|
|
||||||
or U+203A 'single right-pointing angle quotation mark' -->
|
|
||||||
|
|
||||||
<!-- Geometric Shapes -->
|
|
||||||
<!ENTITY loz "◊"> <!-- lozenge, U+25CA ISOpub -->
|
|
||||||
|
|
||||||
<!-- Miscellaneous Symbols -->
|
|
||||||
<!ENTITY spades "♠"> <!-- black spade suit, U+2660 ISOpub -->
|
|
||||||
<!-- black here seems to mean filled as opposed to hollow -->
|
|
||||||
<!ENTITY clubs "♣"> <!-- black club suit = shamrock,
|
|
||||||
U+2663 ISOpub -->
|
|
||||||
<!ENTITY hearts "♥"> <!-- black heart suit = valentine,
|
|
||||||
U+2665 ISOpub -->
|
|
||||||
<!ENTITY diams "♦"> <!-- black diamond suit, U+2666 ISOpub -->
|
|
||||||
@@ -1,978 +0,0 @@
|
|||||||
<!--
|
|
||||||
Extensible HTML version 1.0 Strict DTD
|
|
||||||
|
|
||||||
This is the same as HTML 4 Strict except for
|
|
||||||
changes due to the differences between XML and SGML.
|
|
||||||
|
|
||||||
Namespace = http://www.w3.org/1999/xhtml
|
|
||||||
|
|
||||||
For further information, see: http://www.w3.org/TR/xhtml1
|
|
||||||
|
|
||||||
Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
|
|
||||||
All Rights Reserved.
|
|
||||||
|
|
||||||
This DTD module is identified by the PUBLIC and SYSTEM identifiers:
|
|
||||||
|
|
||||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
||||||
SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
|
|
||||||
|
|
||||||
$Revision: 1.1 $
|
|
||||||
$Date: 2002/08/01 13:56:03 $
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--================ Character mnemonic entities =========================-->
|
|
||||||
|
|
||||||
<!ENTITY % HTMLlat1 PUBLIC
|
|
||||||
"-//W3C//ENTITIES Latin 1 for XHTML//EN"
|
|
||||||
"xhtml-lat1.ent">
|
|
||||||
%HTMLlat1;
|
|
||||||
|
|
||||||
<!ENTITY % HTMLsymbol PUBLIC
|
|
||||||
"-//W3C//ENTITIES Symbols for XHTML//EN"
|
|
||||||
"xhtml-symbol.ent">
|
|
||||||
%HTMLsymbol;
|
|
||||||
|
|
||||||
<!ENTITY % HTMLspecial PUBLIC
|
|
||||||
"-//W3C//ENTITIES Special for XHTML//EN"
|
|
||||||
"xhtml-special.ent">
|
|
||||||
%HTMLspecial;
|
|
||||||
|
|
||||||
<!--================== Imported Names ====================================-->
|
|
||||||
|
|
||||||
<!ENTITY % ContentType "CDATA">
|
|
||||||
<!-- media type, as per [RFC2045] -->
|
|
||||||
|
|
||||||
<!ENTITY % ContentTypes "CDATA">
|
|
||||||
<!-- comma-separated list of media types, as per [RFC2045] -->
|
|
||||||
|
|
||||||
<!ENTITY % Charset "CDATA">
|
|
||||||
<!-- a character encoding, as per [RFC2045] -->
|
|
||||||
|
|
||||||
<!ENTITY % Charsets "CDATA">
|
|
||||||
<!-- a space separated list of character encodings, as per [RFC2045] -->
|
|
||||||
|
|
||||||
<!ENTITY % LanguageCode "NMTOKEN">
|
|
||||||
<!-- a language code, as per [RFC3066] -->
|
|
||||||
|
|
||||||
<!ENTITY % Character "CDATA">
|
|
||||||
<!-- a single character, as per section 2.2 of [XML] -->
|
|
||||||
|
|
||||||
<!ENTITY % Number "CDATA">
|
|
||||||
<!-- one or more digits -->
|
|
||||||
|
|
||||||
<!ENTITY % LinkTypes "CDATA">
|
|
||||||
<!-- space-separated list of link types -->
|
|
||||||
|
|
||||||
<!ENTITY % MediaDesc "CDATA">
|
|
||||||
<!-- single or comma-separated list of media descriptors -->
|
|
||||||
|
|
||||||
<!ENTITY % URI "CDATA">
|
|
||||||
<!-- a Uniform Resource Identifier, see [RFC2396] -->
|
|
||||||
|
|
||||||
<!ENTITY % UriList "CDATA">
|
|
||||||
<!-- a space separated list of Uniform Resource Identifiers -->
|
|
||||||
|
|
||||||
<!ENTITY % Datetime "CDATA">
|
|
||||||
<!-- date and time information. ISO date format -->
|
|
||||||
|
|
||||||
<!ENTITY % Script "CDATA">
|
|
||||||
<!-- script expression -->
|
|
||||||
|
|
||||||
<!ENTITY % StyleSheet "CDATA">
|
|
||||||
<!-- style sheet data -->
|
|
||||||
|
|
||||||
<!ENTITY % Text "CDATA">
|
|
||||||
<!-- used for titles etc. -->
|
|
||||||
|
|
||||||
<!ENTITY % Length "CDATA">
|
|
||||||
<!-- nn for pixels or nn% for percentage length -->
|
|
||||||
|
|
||||||
<!ENTITY % MultiLength "CDATA">
|
|
||||||
<!-- pixel, percentage, or relative -->
|
|
||||||
|
|
||||||
<!ENTITY % Pixels "CDATA">
|
|
||||||
<!-- integer representing length in pixels -->
|
|
||||||
|
|
||||||
<!-- these are used for image maps -->
|
|
||||||
|
|
||||||
<!ENTITY % Shape "(rect|circle|poly|default)">
|
|
||||||
|
|
||||||
<!ENTITY % Coords "CDATA">
|
|
||||||
<!-- comma separated list of lengths -->
|
|
||||||
|
|
||||||
<!--=================== Generic Attributes ===============================-->
|
|
||||||
|
|
||||||
<!-- core attributes common to most elements
|
|
||||||
id document-wide unique id
|
|
||||||
class space separated list of classes
|
|
||||||
style associated style info
|
|
||||||
title advisory title/amplification
|
|
||||||
-->
|
|
||||||
<!ENTITY % coreattrs
|
|
||||||
"id ID #IMPLIED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
style %StyleSheet; #IMPLIED
|
|
||||||
title %Text; #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- internationalization attributes
|
|
||||||
lang language code (backwards compatible)
|
|
||||||
xml:lang language code (as per XML 1.0 spec)
|
|
||||||
dir direction for weak/neutral text
|
|
||||||
-->
|
|
||||||
<!ENTITY % i18n
|
|
||||||
"lang %LanguageCode; #IMPLIED
|
|
||||||
xml:lang %LanguageCode; #IMPLIED
|
|
||||||
dir (ltr|rtl) #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- attributes for common UI events
|
|
||||||
onclick a pointer button was clicked
|
|
||||||
ondblclick a pointer button was double clicked
|
|
||||||
onmousedown a pointer button was pressed down
|
|
||||||
onmouseup a pointer button was released
|
|
||||||
onmousemove a pointer was moved onto the element
|
|
||||||
onmouseout a pointer was moved away from the element
|
|
||||||
onkeypress a key was pressed and released
|
|
||||||
onkeydown a key was pressed down
|
|
||||||
onkeyup a key was released
|
|
||||||
-->
|
|
||||||
<!ENTITY % events
|
|
||||||
"onclick %Script; #IMPLIED
|
|
||||||
ondblclick %Script; #IMPLIED
|
|
||||||
onmousedown %Script; #IMPLIED
|
|
||||||
onmouseup %Script; #IMPLIED
|
|
||||||
onmouseover %Script; #IMPLIED
|
|
||||||
onmousemove %Script; #IMPLIED
|
|
||||||
onmouseout %Script; #IMPLIED
|
|
||||||
onkeypress %Script; #IMPLIED
|
|
||||||
onkeydown %Script; #IMPLIED
|
|
||||||
onkeyup %Script; #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- attributes for elements that can get the focus
|
|
||||||
accesskey accessibility key character
|
|
||||||
tabindex position in tabbing order
|
|
||||||
onfocus the element got the focus
|
|
||||||
onblur the element lost the focus
|
|
||||||
-->
|
|
||||||
<!ENTITY % focus
|
|
||||||
"accesskey %Character; #IMPLIED
|
|
||||||
tabindex %Number; #IMPLIED
|
|
||||||
onfocus %Script; #IMPLIED
|
|
||||||
onblur %Script; #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ENTITY % attrs "%coreattrs; %i18n; %events;">
|
|
||||||
|
|
||||||
<!--=================== Text Elements ====================================-->
|
|
||||||
|
|
||||||
<!ENTITY % special.pre
|
|
||||||
"br | span | bdo | map">
|
|
||||||
|
|
||||||
|
|
||||||
<!ENTITY % special
|
|
||||||
"%special.pre; | object | img ">
|
|
||||||
|
|
||||||
<!ENTITY % fontstyle "tt | i | b | big | small ">
|
|
||||||
|
|
||||||
<!ENTITY % phrase "em | strong | dfn | code | q |
|
|
||||||
samp | kbd | var | cite | abbr | acronym | sub | sup ">
|
|
||||||
|
|
||||||
<!ENTITY % inline.forms "input | select | textarea | label | button">
|
|
||||||
|
|
||||||
<!-- these can occur at block or inline level -->
|
|
||||||
<!ENTITY % misc.inline "ins | del | script">
|
|
||||||
|
|
||||||
<!-- these can only occur at block level -->
|
|
||||||
<!ENTITY % misc "noscript | %misc.inline;">
|
|
||||||
|
|
||||||
<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
|
|
||||||
|
|
||||||
<!-- %Inline; covers inline or "text-level" elements -->
|
|
||||||
<!ENTITY % Inline "(#PCDATA | %inline; | %misc.inline;)*">
|
|
||||||
|
|
||||||
<!--================== Block level elements ==============================-->
|
|
||||||
|
|
||||||
<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
|
|
||||||
<!ENTITY % lists "ul | ol | dl">
|
|
||||||
<!ENTITY % blocktext "pre | hr | blockquote | address">
|
|
||||||
|
|
||||||
<!ENTITY % block
|
|
||||||
"p | %heading; | div | %lists; | %blocktext; | fieldset | table">
|
|
||||||
|
|
||||||
<!ENTITY % Block "(%block; | form | %misc;)*">
|
|
||||||
|
|
||||||
<!-- %Flow; mixes block and inline and is used for list items etc. -->
|
|
||||||
<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
|
|
||||||
|
|
||||||
<!--================== Content models for exclusions =====================-->
|
|
||||||
|
|
||||||
<!-- a elements use %Inline; excluding a -->
|
|
||||||
|
|
||||||
<!ENTITY % a.content
|
|
||||||
"(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc.inline;)*">
|
|
||||||
|
|
||||||
<!-- pre uses %Inline excluding big, small, sup or sup -->
|
|
||||||
|
|
||||||
<!ENTITY % pre.content
|
|
||||||
"(#PCDATA | a | %fontstyle; | %phrase; | %special.pre; | %misc.inline;
|
|
||||||
| %inline.forms;)*">
|
|
||||||
|
|
||||||
<!-- form uses %Block; excluding form -->
|
|
||||||
|
|
||||||
<!ENTITY % form.content "(%block; | %misc;)*">
|
|
||||||
|
|
||||||
<!-- button uses %Flow; but excludes a, form and form controls -->
|
|
||||||
|
|
||||||
<!ENTITY % button.content
|
|
||||||
"(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
|
|
||||||
table | %special; | %fontstyle; | %phrase; | %misc;)*">
|
|
||||||
|
|
||||||
<!--================ Document Structure ==================================-->
|
|
||||||
|
|
||||||
<!-- the namespace URI designates the document profile -->
|
|
||||||
|
|
||||||
<!ELEMENT html (head, body)>
|
|
||||||
<!ATTLIST html
|
|
||||||
%i18n;
|
|
||||||
id ID #IMPLIED
|
|
||||||
xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml'
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--================ Document Head =======================================-->
|
|
||||||
|
|
||||||
<!ENTITY % head.misc "(script|style|meta|link|object)*">
|
|
||||||
|
|
||||||
<!-- content model is %head.misc; combined with a single
|
|
||||||
title and an optional base element in any order -->
|
|
||||||
|
|
||||||
<!ELEMENT head (%head.misc;,
|
|
||||||
((title, %head.misc;, (base, %head.misc;)?) |
|
|
||||||
(base, %head.misc;, (title, %head.misc;))))>
|
|
||||||
|
|
||||||
<!ATTLIST head
|
|
||||||
%i18n;
|
|
||||||
id ID #IMPLIED
|
|
||||||
profile %URI; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- The title element is not considered part of the flow of text.
|
|
||||||
It should be displayed, for example as the page header or
|
|
||||||
window title. Exactly one title is required per document.
|
|
||||||
-->
|
|
||||||
<!ELEMENT title (#PCDATA)>
|
|
||||||
<!ATTLIST title
|
|
||||||
%i18n;
|
|
||||||
id ID #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- document base URI -->
|
|
||||||
|
|
||||||
<!ELEMENT base EMPTY>
|
|
||||||
<!ATTLIST base
|
|
||||||
href %URI; #REQUIRED
|
|
||||||
id ID #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- generic metainformation -->
|
|
||||||
<!ELEMENT meta EMPTY>
|
|
||||||
<!ATTLIST meta
|
|
||||||
%i18n;
|
|
||||||
id ID #IMPLIED
|
|
||||||
http-equiv CDATA #IMPLIED
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
content CDATA #REQUIRED
|
|
||||||
scheme CDATA #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Relationship values can be used in principle:
|
|
||||||
|
|
||||||
a) for document specific toolbars/menus when used
|
|
||||||
with the link element in document head e.g.
|
|
||||||
start, contents, previous, next, index, end, help
|
|
||||||
b) to link to a separate style sheet (rel="stylesheet")
|
|
||||||
c) to make a link to a script (rel="script")
|
|
||||||
d) by stylesheets to control how collections of
|
|
||||||
html nodes are rendered into printed documents
|
|
||||||
e) to make a link to a printable version of this document
|
|
||||||
e.g. a PostScript or PDF version (rel="alternate" media="print")
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ELEMENT link EMPTY>
|
|
||||||
<!ATTLIST link
|
|
||||||
%attrs;
|
|
||||||
charset %Charset; #IMPLIED
|
|
||||||
href %URI; #IMPLIED
|
|
||||||
hreflang %LanguageCode; #IMPLIED
|
|
||||||
type %ContentType; #IMPLIED
|
|
||||||
rel %LinkTypes; #IMPLIED
|
|
||||||
rev %LinkTypes; #IMPLIED
|
|
||||||
media %MediaDesc; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- style info, which may include CDATA sections -->
|
|
||||||
<!ELEMENT style (#PCDATA)>
|
|
||||||
<!ATTLIST style
|
|
||||||
%i18n;
|
|
||||||
id ID #IMPLIED
|
|
||||||
type %ContentType; #REQUIRED
|
|
||||||
media %MediaDesc; #IMPLIED
|
|
||||||
title %Text; #IMPLIED
|
|
||||||
xml:space (preserve) #FIXED 'preserve'
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- script statements, which may include CDATA sections -->
|
|
||||||
<!ELEMENT script (#PCDATA)>
|
|
||||||
<!ATTLIST script
|
|
||||||
id ID #IMPLIED
|
|
||||||
charset %Charset; #IMPLIED
|
|
||||||
type %ContentType; #REQUIRED
|
|
||||||
src %URI; #IMPLIED
|
|
||||||
defer (defer) #IMPLIED
|
|
||||||
xml:space (preserve) #FIXED 'preserve'
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- alternate content container for non script-based rendering -->
|
|
||||||
|
|
||||||
<!ELEMENT noscript %Block;>
|
|
||||||
<!ATTLIST noscript
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Document Body ====================================-->
|
|
||||||
|
|
||||||
<!ELEMENT body %Block;>
|
|
||||||
<!ATTLIST body
|
|
||||||
%attrs;
|
|
||||||
onload %Script; #IMPLIED
|
|
||||||
onunload %Script; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT div %Flow;> <!-- generic language/style container -->
|
|
||||||
<!ATTLIST div
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Paragraphs =======================================-->
|
|
||||||
|
|
||||||
<!ELEMENT p %Inline;>
|
|
||||||
<!ATTLIST p
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Headings =========================================-->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
There are six levels of headings from h1 (the most important)
|
|
||||||
to h6 (the least important).
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ELEMENT h1 %Inline;>
|
|
||||||
<!ATTLIST h1
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT h2 %Inline;>
|
|
||||||
<!ATTLIST h2
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT h3 %Inline;>
|
|
||||||
<!ATTLIST h3
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT h4 %Inline;>
|
|
||||||
<!ATTLIST h4
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT h5 %Inline;>
|
|
||||||
<!ATTLIST h5
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT h6 %Inline;>
|
|
||||||
<!ATTLIST h6
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Lists ============================================-->
|
|
||||||
|
|
||||||
<!-- Unordered list -->
|
|
||||||
|
|
||||||
<!ELEMENT ul (li)+>
|
|
||||||
<!ATTLIST ul
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- Ordered (numbered) list -->
|
|
||||||
|
|
||||||
<!ELEMENT ol (li)+>
|
|
||||||
<!ATTLIST ol
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- list item -->
|
|
||||||
|
|
||||||
<!ELEMENT li %Flow;>
|
|
||||||
<!ATTLIST li
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- definition lists - dt for term, dd for its definition -->
|
|
||||||
|
|
||||||
<!ELEMENT dl (dt|dd)+>
|
|
||||||
<!ATTLIST dl
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT dt %Inline;>
|
|
||||||
<!ATTLIST dt
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT dd %Flow;>
|
|
||||||
<!ATTLIST dd
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Address ==========================================-->
|
|
||||||
|
|
||||||
<!-- information on author -->
|
|
||||||
|
|
||||||
<!ELEMENT address %Inline;>
|
|
||||||
<!ATTLIST address
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Horizontal Rule ==================================-->
|
|
||||||
|
|
||||||
<!ELEMENT hr EMPTY>
|
|
||||||
<!ATTLIST hr
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Preformatted Text ================================-->
|
|
||||||
|
|
||||||
<!-- content is %Inline; excluding "img|object|big|small|sub|sup" -->
|
|
||||||
|
|
||||||
<!ELEMENT pre %pre.content;>
|
|
||||||
<!ATTLIST pre
|
|
||||||
%attrs;
|
|
||||||
xml:space (preserve) #FIXED 'preserve'
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Block-like Quotes ================================-->
|
|
||||||
|
|
||||||
<!ELEMENT blockquote %Block;>
|
|
||||||
<!ATTLIST blockquote
|
|
||||||
%attrs;
|
|
||||||
cite %URI; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Inserted/Deleted Text ============================-->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ins/del are allowed in block and inline content, but its
|
|
||||||
inappropriate to include block content within an ins element
|
|
||||||
occurring in inline content.
|
|
||||||
-->
|
|
||||||
<!ELEMENT ins %Flow;>
|
|
||||||
<!ATTLIST ins
|
|
||||||
%attrs;
|
|
||||||
cite %URI; #IMPLIED
|
|
||||||
datetime %Datetime; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT del %Flow;>
|
|
||||||
<!ATTLIST del
|
|
||||||
%attrs;
|
|
||||||
cite %URI; #IMPLIED
|
|
||||||
datetime %Datetime; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--================== The Anchor Element ================================-->
|
|
||||||
|
|
||||||
<!-- content is %Inline; except that anchors shouldn't be nested -->
|
|
||||||
|
|
||||||
<!ELEMENT a %a.content;>
|
|
||||||
<!ATTLIST a
|
|
||||||
%attrs;
|
|
||||||
%focus;
|
|
||||||
charset %Charset; #IMPLIED
|
|
||||||
type %ContentType; #IMPLIED
|
|
||||||
name NMTOKEN #IMPLIED
|
|
||||||
href %URI; #IMPLIED
|
|
||||||
hreflang %LanguageCode; #IMPLIED
|
|
||||||
rel %LinkTypes; #IMPLIED
|
|
||||||
rev %LinkTypes; #IMPLIED
|
|
||||||
shape %Shape; "rect"
|
|
||||||
coords %Coords; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--===================== Inline Elements ================================-->
|
|
||||||
|
|
||||||
<!ELEMENT span %Inline;> <!-- generic language/style container -->
|
|
||||||
<!ATTLIST span
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT bdo %Inline;> <!-- I18N BiDi over-ride -->
|
|
||||||
<!ATTLIST bdo
|
|
||||||
%coreattrs;
|
|
||||||
%events;
|
|
||||||
lang %LanguageCode; #IMPLIED
|
|
||||||
xml:lang %LanguageCode; #IMPLIED
|
|
||||||
dir (ltr|rtl) #REQUIRED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT br EMPTY> <!-- forced line break -->
|
|
||||||
<!ATTLIST br
|
|
||||||
%coreattrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT em %Inline;> <!-- emphasis -->
|
|
||||||
<!ATTLIST em %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT strong %Inline;> <!-- strong emphasis -->
|
|
||||||
<!ATTLIST strong %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT dfn %Inline;> <!-- definitional -->
|
|
||||||
<!ATTLIST dfn %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT code %Inline;> <!-- program code -->
|
|
||||||
<!ATTLIST code %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT samp %Inline;> <!-- sample -->
|
|
||||||
<!ATTLIST samp %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT kbd %Inline;> <!-- something user would type -->
|
|
||||||
<!ATTLIST kbd %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT var %Inline;> <!-- variable -->
|
|
||||||
<!ATTLIST var %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT cite %Inline;> <!-- citation -->
|
|
||||||
<!ATTLIST cite %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT abbr %Inline;> <!-- abbreviation -->
|
|
||||||
<!ATTLIST abbr %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT acronym %Inline;> <!-- acronym -->
|
|
||||||
<!ATTLIST acronym %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT q %Inline;> <!-- inlined quote -->
|
|
||||||
<!ATTLIST q
|
|
||||||
%attrs;
|
|
||||||
cite %URI; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT sub %Inline;> <!-- subscript -->
|
|
||||||
<!ATTLIST sub %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT sup %Inline;> <!-- superscript -->
|
|
||||||
<!ATTLIST sup %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT tt %Inline;> <!-- fixed pitch font -->
|
|
||||||
<!ATTLIST tt %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT i %Inline;> <!-- italic font -->
|
|
||||||
<!ATTLIST i %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT b %Inline;> <!-- bold font -->
|
|
||||||
<!ATTLIST b %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT big %Inline;> <!-- bigger font -->
|
|
||||||
<!ATTLIST big %attrs;>
|
|
||||||
|
|
||||||
<!ELEMENT small %Inline;> <!-- smaller font -->
|
|
||||||
<!ATTLIST small %attrs;>
|
|
||||||
|
|
||||||
<!--==================== Object ======================================-->
|
|
||||||
<!--
|
|
||||||
object is used to embed objects as part of HTML pages.
|
|
||||||
param elements should precede other content. Parameters
|
|
||||||
can also be expressed as attribute/value pairs on the
|
|
||||||
object element itself when brevity is desired.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
|
|
||||||
<!ATTLIST object
|
|
||||||
%attrs;
|
|
||||||
declare (declare) #IMPLIED
|
|
||||||
classid %URI; #IMPLIED
|
|
||||||
codebase %URI; #IMPLIED
|
|
||||||
data %URI; #IMPLIED
|
|
||||||
type %ContentType; #IMPLIED
|
|
||||||
codetype %ContentType; #IMPLIED
|
|
||||||
archive %UriList; #IMPLIED
|
|
||||||
standby %Text; #IMPLIED
|
|
||||||
height %Length; #IMPLIED
|
|
||||||
width %Length; #IMPLIED
|
|
||||||
usemap %URI; #IMPLIED
|
|
||||||
name NMTOKEN #IMPLIED
|
|
||||||
tabindex %Number; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
param is used to supply a named property value.
|
|
||||||
In XML it would seem natural to follow RDF and support an
|
|
||||||
abbreviated syntax where the param elements are replaced
|
|
||||||
by attribute value pairs on the object start tag.
|
|
||||||
-->
|
|
||||||
<!ELEMENT param EMPTY>
|
|
||||||
<!ATTLIST param
|
|
||||||
id ID #IMPLIED
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
valuetype (data|ref|object) "data"
|
|
||||||
type %ContentType; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--=================== Images ===========================================-->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
To avoid accessibility problems for people who aren't
|
|
||||||
able to see the image, you should provide a text
|
|
||||||
description using the alt and longdesc attributes.
|
|
||||||
In addition, avoid the use of server-side image maps.
|
|
||||||
Note that in this DTD there is no name attribute. That
|
|
||||||
is only available in the transitional and frameset DTD.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ELEMENT img EMPTY>
|
|
||||||
<!ATTLIST img
|
|
||||||
%attrs;
|
|
||||||
src %URI; #REQUIRED
|
|
||||||
alt %Text; #REQUIRED
|
|
||||||
longdesc %URI; #IMPLIED
|
|
||||||
height %Length; #IMPLIED
|
|
||||||
width %Length; #IMPLIED
|
|
||||||
usemap %URI; #IMPLIED
|
|
||||||
ismap (ismap) #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- usemap points to a map element which may be in this document
|
|
||||||
or an external document, although the latter is not widely supported -->
|
|
||||||
|
|
||||||
<!--================== Client-side image maps ============================-->
|
|
||||||
|
|
||||||
<!-- These can be placed in the same document or grouped in a
|
|
||||||
separate document although this isn't yet widely supported -->
|
|
||||||
|
|
||||||
<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
|
|
||||||
<!ATTLIST map
|
|
||||||
%i18n;
|
|
||||||
%events;
|
|
||||||
id ID #REQUIRED
|
|
||||||
class CDATA #IMPLIED
|
|
||||||
style %StyleSheet; #IMPLIED
|
|
||||||
title %Text; #IMPLIED
|
|
||||||
name NMTOKEN #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT area EMPTY>
|
|
||||||
<!ATTLIST area
|
|
||||||
%attrs;
|
|
||||||
%focus;
|
|
||||||
shape %Shape; "rect"
|
|
||||||
coords %Coords; #IMPLIED
|
|
||||||
href %URI; #IMPLIED
|
|
||||||
nohref (nohref) #IMPLIED
|
|
||||||
alt %Text; #REQUIRED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--================ Forms ===============================================-->
|
|
||||||
<!ELEMENT form %form.content;> <!-- forms shouldn't be nested -->
|
|
||||||
|
|
||||||
<!ATTLIST form
|
|
||||||
%attrs;
|
|
||||||
action %URI; #REQUIRED
|
|
||||||
method (get|post) "get"
|
|
||||||
enctype %ContentType; "application/x-www-form-urlencoded"
|
|
||||||
onsubmit %Script; #IMPLIED
|
|
||||||
onreset %Script; #IMPLIED
|
|
||||||
accept %ContentTypes; #IMPLIED
|
|
||||||
accept-charset %Charsets; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Each label must not contain more than ONE field
|
|
||||||
Label elements shouldn't be nested.
|
|
||||||
-->
|
|
||||||
<!ELEMENT label %Inline;>
|
|
||||||
<!ATTLIST label
|
|
||||||
%attrs;
|
|
||||||
for IDREF #IMPLIED
|
|
||||||
accesskey %Character; #IMPLIED
|
|
||||||
onfocus %Script; #IMPLIED
|
|
||||||
onblur %Script; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ENTITY % InputType
|
|
||||||
"(text | password | checkbox |
|
|
||||||
radio | submit | reset |
|
|
||||||
file | hidden | image | button)"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- the name attribute is required for all but submit & reset -->
|
|
||||||
|
|
||||||
<!ELEMENT input EMPTY> <!-- form control -->
|
|
||||||
<!ATTLIST input
|
|
||||||
%attrs;
|
|
||||||
%focus;
|
|
||||||
type %InputType; "text"
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
checked (checked) #IMPLIED
|
|
||||||
disabled (disabled) #IMPLIED
|
|
||||||
readonly (readonly) #IMPLIED
|
|
||||||
size CDATA #IMPLIED
|
|
||||||
maxlength %Number; #IMPLIED
|
|
||||||
src %URI; #IMPLIED
|
|
||||||
alt CDATA #IMPLIED
|
|
||||||
usemap %URI; #IMPLIED
|
|
||||||
onselect %Script; #IMPLIED
|
|
||||||
onchange %Script; #IMPLIED
|
|
||||||
accept %ContentTypes; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT select (optgroup|option)+> <!-- option selector -->
|
|
||||||
<!ATTLIST select
|
|
||||||
%attrs;
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
size %Number; #IMPLIED
|
|
||||||
multiple (multiple) #IMPLIED
|
|
||||||
disabled (disabled) #IMPLIED
|
|
||||||
tabindex %Number; #IMPLIED
|
|
||||||
onfocus %Script; #IMPLIED
|
|
||||||
onblur %Script; #IMPLIED
|
|
||||||
onchange %Script; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT optgroup (option)+> <!-- option group -->
|
|
||||||
<!ATTLIST optgroup
|
|
||||||
%attrs;
|
|
||||||
disabled (disabled) #IMPLIED
|
|
||||||
label %Text; #REQUIRED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT option (#PCDATA)> <!-- selectable choice -->
|
|
||||||
<!ATTLIST option
|
|
||||||
%attrs;
|
|
||||||
selected (selected) #IMPLIED
|
|
||||||
disabled (disabled) #IMPLIED
|
|
||||||
label %Text; #IMPLIED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT textarea (#PCDATA)> <!-- multi-line text field -->
|
|
||||||
<!ATTLIST textarea
|
|
||||||
%attrs;
|
|
||||||
%focus;
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
rows %Number; #REQUIRED
|
|
||||||
cols %Number; #REQUIRED
|
|
||||||
disabled (disabled) #IMPLIED
|
|
||||||
readonly (readonly) #IMPLIED
|
|
||||||
onselect %Script; #IMPLIED
|
|
||||||
onchange %Script; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
The fieldset element is used to group form fields.
|
|
||||||
Only one legend element should occur in the content
|
|
||||||
and if present should only be preceded by whitespace.
|
|
||||||
-->
|
|
||||||
<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
|
|
||||||
<!ATTLIST fieldset
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT legend %Inline;> <!-- fieldset label -->
|
|
||||||
<!ATTLIST legend
|
|
||||||
%attrs;
|
|
||||||
accesskey %Character; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Content is %Flow; excluding a, form and form controls
|
|
||||||
-->
|
|
||||||
<!ELEMENT button %button.content;> <!-- push button -->
|
|
||||||
<!ATTLIST button
|
|
||||||
%attrs;
|
|
||||||
%focus;
|
|
||||||
name CDATA #IMPLIED
|
|
||||||
value CDATA #IMPLIED
|
|
||||||
type (button|submit|reset) "submit"
|
|
||||||
disabled (disabled) #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--======================= Tables =======================================-->
|
|
||||||
|
|
||||||
<!-- Derived from IETF HTML table standard, see [RFC1942] -->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
The border attribute sets the thickness of the frame around the
|
|
||||||
table. The default units are screen pixels.
|
|
||||||
|
|
||||||
The frame attribute specifies which parts of the frame around
|
|
||||||
the table should be rendered. The values are not the same as
|
|
||||||
CALS to avoid a name clash with the valign attribute.
|
|
||||||
-->
|
|
||||||
<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
The rules attribute defines which rules to draw between cells:
|
|
||||||
|
|
||||||
If rules is absent then assume:
|
|
||||||
"none" if border is absent or border="0" otherwise "all"
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!ENTITY % TRules "(none | groups | rows | cols | all)">
|
|
||||||
|
|
||||||
<!-- horizontal alignment attributes for cell contents
|
|
||||||
|
|
||||||
char alignment char, e.g. char=':'
|
|
||||||
charoff offset for alignment char
|
|
||||||
-->
|
|
||||||
<!ENTITY % cellhalign
|
|
||||||
"align (left|center|right|justify|char) #IMPLIED
|
|
||||||
char %Character; #IMPLIED
|
|
||||||
charoff %Length; #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!-- vertical alignment attributes for cell contents -->
|
|
||||||
<!ENTITY % cellvalign
|
|
||||||
"valign (top|middle|bottom|baseline) #IMPLIED"
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ELEMENT table
|
|
||||||
(caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
|
|
||||||
<!ELEMENT caption %Inline;>
|
|
||||||
<!ELEMENT thead (tr)+>
|
|
||||||
<!ELEMENT tfoot (tr)+>
|
|
||||||
<!ELEMENT tbody (tr)+>
|
|
||||||
<!ELEMENT colgroup (col)*>
|
|
||||||
<!ELEMENT col EMPTY>
|
|
||||||
<!ELEMENT tr (th|td)+>
|
|
||||||
<!ELEMENT th %Flow;>
|
|
||||||
<!ELEMENT td %Flow;>
|
|
||||||
|
|
||||||
<!ATTLIST table
|
|
||||||
%attrs;
|
|
||||||
summary %Text; #IMPLIED
|
|
||||||
width %Length; #IMPLIED
|
|
||||||
border %Pixels; #IMPLIED
|
|
||||||
frame %TFrame; #IMPLIED
|
|
||||||
rules %TRules; #IMPLIED
|
|
||||||
cellspacing %Length; #IMPLIED
|
|
||||||
cellpadding %Length; #IMPLIED
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ATTLIST caption
|
|
||||||
%attrs;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
colgroup groups a set of col elements. It allows you to group
|
|
||||||
several semantically related columns together.
|
|
||||||
-->
|
|
||||||
<!ATTLIST colgroup
|
|
||||||
%attrs;
|
|
||||||
span %Number; "1"
|
|
||||||
width %MultiLength; #IMPLIED
|
|
||||||
%cellhalign;
|
|
||||||
%cellvalign;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
col elements define the alignment properties for cells in
|
|
||||||
one or more columns.
|
|
||||||
|
|
||||||
The width attribute specifies the width of the columns, e.g.
|
|
||||||
|
|
||||||
width=64 width in screen pixels
|
|
||||||
width=0.5* relative width of 0.5
|
|
||||||
|
|
||||||
The span attribute causes the attributes of one
|
|
||||||
col element to apply to more than one column.
|
|
||||||
-->
|
|
||||||
<!ATTLIST col
|
|
||||||
%attrs;
|
|
||||||
span %Number; "1"
|
|
||||||
width %MultiLength; #IMPLIED
|
|
||||||
%cellhalign;
|
|
||||||
%cellvalign;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Use thead to duplicate headers when breaking table
|
|
||||||
across page boundaries, or for static headers when
|
|
||||||
tbody sections are rendered in scrolling panel.
|
|
||||||
|
|
||||||
Use tfoot to duplicate footers when breaking table
|
|
||||||
across page boundaries, or for static footers when
|
|
||||||
tbody sections are rendered in scrolling panel.
|
|
||||||
|
|
||||||
Use multiple tbody sections when rules are needed
|
|
||||||
between groups of table rows.
|
|
||||||
-->
|
|
||||||
<!ATTLIST thead
|
|
||||||
%attrs;
|
|
||||||
%cellhalign;
|
|
||||||
%cellvalign;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ATTLIST tfoot
|
|
||||||
%attrs;
|
|
||||||
%cellhalign;
|
|
||||||
%cellvalign;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ATTLIST tbody
|
|
||||||
%attrs;
|
|
||||||
%cellhalign;
|
|
||||||
%cellvalign;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ATTLIST tr
|
|
||||||
%attrs;
|
|
||||||
%cellhalign;
|
|
||||||
%cellvalign;
|
|
||||||
>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Scope is simpler than headers attribute for common tables -->
|
|
||||||
<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
|
|
||||||
|
|
||||||
<!-- th is for headers, td for data and for cells acting as both -->
|
|
||||||
|
|
||||||
<!ATTLIST th
|
|
||||||
%attrs;
|
|
||||||
abbr %Text; #IMPLIED
|
|
||||||
axis CDATA #IMPLIED
|
|
||||||
headers IDREFS #IMPLIED
|
|
||||||
scope %Scope; #IMPLIED
|
|
||||||
rowspan %Number; "1"
|
|
||||||
colspan %Number; "1"
|
|
||||||
%cellhalign;
|
|
||||||
%cellvalign;
|
|
||||||
>
|
|
||||||
|
|
||||||
<!ATTLIST td
|
|
||||||
%attrs;
|
|
||||||
abbr %Text; #IMPLIED
|
|
||||||
axis CDATA #IMPLIED
|
|
||||||
headers IDREFS #IMPLIED
|
|
||||||
scope %Scope; #IMPLIED
|
|
||||||
rowspan %Number; "1"
|
|
||||||
colspan %Number; "1"
|
|
||||||
%cellhalign;
|
|
||||||
%cellvalign;
|
|
||||||
>
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,294 +0,0 @@
|
|||||||
<!-- ....................................................................... -->
|
|
||||||
<!-- XHTML 1.1 DTD ........................................................ -->
|
|
||||||
<!-- file: xhtml11.dtd
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- XHTML 1.1 DTD
|
|
||||||
|
|
||||||
This is XHTML, a reformulation of HTML as a modular XML application.
|
|
||||||
|
|
||||||
The Extensible HyperText Markup Language (XHTML)
|
|
||||||
Copyright 1998-2001 World Wide Web Consortium
|
|
||||||
(Massachusetts Institute of Technology, Institut National de
|
|
||||||
Recherche en Informatique et en Automatique, Keio University).
|
|
||||||
All Rights Reserved.
|
|
||||||
|
|
||||||
Permission to use, copy, modify and distribute the XHTML DTD and its
|
|
||||||
accompanying documentation for any purpose and without fee is hereby
|
|
||||||
granted in perpetuity, provided that the above copyright notice and
|
|
||||||
this paragraph appear in all copies. The copyright holders make no
|
|
||||||
representation about the suitability of the DTD for any purpose.
|
|
||||||
|
|
||||||
It is provided "as is" without expressed or implied warranty.
|
|
||||||
|
|
||||||
Author: Murray M. Altheim <altheim@eng.sun.com>
|
|
||||||
Revision: $Id: xhtml11.dtd,v 1.21 2001/05/29 16:37:01 ahby Exp $
|
|
||||||
|
|
||||||
-->
|
|
||||||
<!-- This is the driver file for version 1.1 of the XHTML DTD.
|
|
||||||
|
|
||||||
Please use this formal public identifier to identify it:
|
|
||||||
|
|
||||||
"-//W3C//DTD XHTML 1.1//EN"
|
|
||||||
-->
|
|
||||||
<!ENTITY % XHTML.version "-//W3C//DTD XHTML 1.1//EN" >
|
|
||||||
|
|
||||||
<!-- Use this URI to identify the default namespace:
|
|
||||||
|
|
||||||
"http://www.w3.org/1999/xhtml"
|
|
||||||
|
|
||||||
See the Qualified Names module for information
|
|
||||||
on the use of namespace prefixes in the DTD.
|
|
||||||
-->
|
|
||||||
<!ENTITY % NS.prefixed "IGNORE" >
|
|
||||||
<!ENTITY % XHTML.prefix "" >
|
|
||||||
|
|
||||||
<!-- Reserved for use with the XLink namespace:
|
|
||||||
-->
|
|
||||||
<!ENTITY % XLINK.xmlns "" >
|
|
||||||
<!ENTITY % XLINK.xmlns.attrib "" >
|
|
||||||
|
|
||||||
<!-- For example, if you are using XHTML 1.1 directly, use the FPI
|
|
||||||
in the DOCTYPE declaration, with the xmlns attribute on the
|
|
||||||
document element to identify the default namespace:
|
|
||||||
|
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
|
||||||
xml:lang="en">
|
|
||||||
...
|
|
||||||
</html>
|
|
||||||
|
|
||||||
Revisions:
|
|
||||||
(none)
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- reserved for future use with document profiles -->
|
|
||||||
<!ENTITY % XHTML.profile "" >
|
|
||||||
|
|
||||||
<!-- Bidirectional Text features
|
|
||||||
This feature-test entity is used to declare elements
|
|
||||||
and attributes used for bidirectional text support.
|
|
||||||
-->
|
|
||||||
<!ENTITY % XHTML.bidi "INCLUDE" >
|
|
||||||
|
|
||||||
<?doc type="doctype" role="title" { XHTML 1.1 } ?>
|
|
||||||
|
|
||||||
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
|
|
||||||
|
|
||||||
<!-- Pre-Framework Redeclaration placeholder .................... -->
|
|
||||||
<!-- this serves as a location to insert markup declarations
|
|
||||||
into the DTD prior to the framework declarations.
|
|
||||||
-->
|
|
||||||
<!ENTITY % xhtml-prefw-redecl.module "IGNORE" >
|
|
||||||
<![%xhtml-prefw-redecl.module;[
|
|
||||||
%xhtml-prefw-redecl.mod;
|
|
||||||
<!-- end of xhtml-prefw-redecl.module -->]]>
|
|
||||||
|
|
||||||
<!ENTITY % xhtml-events.module "INCLUDE" >
|
|
||||||
|
|
||||||
<!-- Inline Style Module ........................................ -->
|
|
||||||
<!ENTITY % xhtml-inlstyle.module "INCLUDE" >
|
|
||||||
<![%xhtml-inlstyle.module;[
|
|
||||||
<!ENTITY % xhtml-inlstyle.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Inline Style 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-inlstyle-1.mod" >
|
|
||||||
%xhtml-inlstyle.mod;]]>
|
|
||||||
|
|
||||||
<!-- declare Document Model module instantiated in framework
|
|
||||||
-->
|
|
||||||
<!ENTITY % xhtml-model.mod
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML 1.1 Document Model 1.0//EN"
|
|
||||||
"xhtml11-model-1.mod" >
|
|
||||||
|
|
||||||
<!-- Modular Framework Module (required) ......................... -->
|
|
||||||
<!ENTITY % xhtml-framework.module "INCLUDE" >
|
|
||||||
<![%xhtml-framework.module;[
|
|
||||||
<!ENTITY % xhtml-framework.mod
|
|
||||||
PUBLIC "-//W3C//ENTITIES XHTML Modular Framework 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod" >
|
|
||||||
%xhtml-framework.mod;]]>
|
|
||||||
|
|
||||||
<!-- Post-Framework Redeclaration placeholder ................... -->
|
|
||||||
<!-- this serves as a location to insert markup declarations
|
|
||||||
into the DTD following the framework declarations.
|
|
||||||
-->
|
|
||||||
<!ENTITY % xhtml-postfw-redecl.module "IGNORE" >
|
|
||||||
<![%xhtml-postfw-redecl.module;[
|
|
||||||
%xhtml-postfw-redecl.mod;
|
|
||||||
<!-- end of xhtml-postfw-redecl.module -->]]>
|
|
||||||
|
|
||||||
<!-- Text Module (Required) ..................................... -->
|
|
||||||
<!ENTITY % xhtml-text.module "INCLUDE" >
|
|
||||||
<![%xhtml-text.module;[
|
|
||||||
<!ENTITY % xhtml-text.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Text 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-text-1.mod" >
|
|
||||||
%xhtml-text.mod;]]>
|
|
||||||
|
|
||||||
<!-- Hypertext Module (required) ................................. -->
|
|
||||||
<!ENTITY % xhtml-hypertext.module "INCLUDE" >
|
|
||||||
<![%xhtml-hypertext.module;[
|
|
||||||
<!ENTITY % xhtml-hypertext.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Hypertext 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-hypertext-1.mod" >
|
|
||||||
%xhtml-hypertext.mod;]]>
|
|
||||||
|
|
||||||
<!-- Lists Module (required) .................................... -->
|
|
||||||
<!ENTITY % xhtml-list.module "INCLUDE" >
|
|
||||||
<![%xhtml-list.module;[
|
|
||||||
<!ENTITY % xhtml-list.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Lists 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-list-1.mod" >
|
|
||||||
%xhtml-list.mod;]]>
|
|
||||||
|
|
||||||
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
|
|
||||||
|
|
||||||
<!-- Edit Module ................................................ -->
|
|
||||||
<!ENTITY % xhtml-edit.module "INCLUDE" >
|
|
||||||
<![%xhtml-edit.module;[
|
|
||||||
<!ENTITY % xhtml-edit.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Editing Elements 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-edit-1.mod" >
|
|
||||||
%xhtml-edit.mod;]]>
|
|
||||||
|
|
||||||
<!-- BIDI Override Module ....................................... -->
|
|
||||||
<!ENTITY % xhtml-bdo.module "%XHTML.bidi;" >
|
|
||||||
<![%xhtml-bdo.module;[
|
|
||||||
<!ENTITY % xhtml-bdo.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML BIDI Override Element 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-bdo-1.mod" >
|
|
||||||
%xhtml-bdo.mod;]]>
|
|
||||||
|
|
||||||
<!-- Ruby Module ................................................ -->
|
|
||||||
<!ENTITY % Ruby.common.attlists "INCLUDE" >
|
|
||||||
<!ENTITY % Ruby.common.attrib "%Common.attrib;" >
|
|
||||||
<!ENTITY % xhtml-ruby.module "INCLUDE" >
|
|
||||||
<![%xhtml-ruby.module;[
|
|
||||||
<!ENTITY % xhtml-ruby.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Ruby 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/ruby/xhtml-ruby-1.mod" >
|
|
||||||
%xhtml-ruby.mod;]]>
|
|
||||||
|
|
||||||
<!-- Presentation Module ........................................ -->
|
|
||||||
<!ENTITY % xhtml-pres.module "INCLUDE" >
|
|
||||||
<![%xhtml-pres.module;[
|
|
||||||
<!ENTITY % xhtml-pres.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Presentation 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-pres-1.mod" >
|
|
||||||
%xhtml-pres.mod;]]>
|
|
||||||
|
|
||||||
<!-- Link Element Module ........................................ -->
|
|
||||||
<!ENTITY % xhtml-link.module "INCLUDE" >
|
|
||||||
<![%xhtml-link.module;[
|
|
||||||
<!ENTITY % xhtml-link.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Link Element 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-link-1.mod" >
|
|
||||||
%xhtml-link.mod;]]>
|
|
||||||
|
|
||||||
<!-- Document Metainformation Module ............................ -->
|
|
||||||
<!ENTITY % xhtml-meta.module "INCLUDE" >
|
|
||||||
<![%xhtml-meta.module;[
|
|
||||||
<!ENTITY % xhtml-meta.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Metainformation 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-meta-1.mod" >
|
|
||||||
%xhtml-meta.mod;]]>
|
|
||||||
|
|
||||||
<!-- Base Element Module ........................................ -->
|
|
||||||
<!ENTITY % xhtml-base.module "INCLUDE" >
|
|
||||||
<![%xhtml-base.module;[
|
|
||||||
<!ENTITY % xhtml-base.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Base Element 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-base-1.mod" >
|
|
||||||
%xhtml-base.mod;]]>
|
|
||||||
|
|
||||||
<!-- Scripting Module ........................................... -->
|
|
||||||
<!ENTITY % xhtml-script.module "INCLUDE" >
|
|
||||||
<![%xhtml-script.module;[
|
|
||||||
<!ENTITY % xhtml-script.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Scripting 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-script-1.mod" >
|
|
||||||
%xhtml-script.mod;]]>
|
|
||||||
|
|
||||||
<!-- Style Sheets Module ......................................... -->
|
|
||||||
<!ENTITY % xhtml-style.module "INCLUDE" >
|
|
||||||
<![%xhtml-style.module;[
|
|
||||||
<!ENTITY % xhtml-style.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Style Sheets 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-style-1.mod" >
|
|
||||||
%xhtml-style.mod;]]>
|
|
||||||
|
|
||||||
<!-- Image Module ............................................... -->
|
|
||||||
<!ENTITY % xhtml-image.module "INCLUDE" >
|
|
||||||
<![%xhtml-image.module;[
|
|
||||||
<!ENTITY % xhtml-image.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Images 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-image-1.mod" >
|
|
||||||
%xhtml-image.mod;]]>
|
|
||||||
|
|
||||||
<!-- Client-side Image Map Module ............................... -->
|
|
||||||
<!ENTITY % xhtml-csismap.module "INCLUDE" >
|
|
||||||
<![%xhtml-csismap.module;[
|
|
||||||
<!ENTITY % xhtml-csismap.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Client-side Image Maps 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-csismap-1.mod" >
|
|
||||||
%xhtml-csismap.mod;]]>
|
|
||||||
|
|
||||||
<!-- Server-side Image Map Module ............................... -->
|
|
||||||
<!ENTITY % xhtml-ssismap.module "INCLUDE" >
|
|
||||||
<![%xhtml-ssismap.module;[
|
|
||||||
<!ENTITY % xhtml-ssismap.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Server-side Image Maps 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-ssismap-1.mod" >
|
|
||||||
%xhtml-ssismap.mod;]]>
|
|
||||||
|
|
||||||
<!-- Param Element Module ....................................... -->
|
|
||||||
<!ENTITY % xhtml-param.module "INCLUDE" >
|
|
||||||
<![%xhtml-param.module;[
|
|
||||||
<!ENTITY % xhtml-param.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Param Element 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-param-1.mod" >
|
|
||||||
%xhtml-param.mod;]]>
|
|
||||||
|
|
||||||
<!-- Embedded Object Module ..................................... -->
|
|
||||||
<!ENTITY % xhtml-object.module "INCLUDE" >
|
|
||||||
<![%xhtml-object.module;[
|
|
||||||
<!ENTITY % xhtml-object.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Embedded Object 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-object-1.mod" >
|
|
||||||
%xhtml-object.mod;]]>
|
|
||||||
|
|
||||||
<!-- Tables Module ............................................... -->
|
|
||||||
<!ENTITY % xhtml-table.module "INCLUDE" >
|
|
||||||
<![%xhtml-table.module;[
|
|
||||||
<!ENTITY % xhtml-table.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Tables 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-table-1.mod" >
|
|
||||||
%xhtml-table.mod;]]>
|
|
||||||
|
|
||||||
<!-- Forms Module ............................................... -->
|
|
||||||
<!ENTITY % xhtml-form.module "INCLUDE" >
|
|
||||||
<![%xhtml-form.module;[
|
|
||||||
<!ENTITY % xhtml-form.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Forms 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-form-1.mod" >
|
|
||||||
%xhtml-form.mod;]]>
|
|
||||||
|
|
||||||
<!-- Legacy Markup ............................................... -->
|
|
||||||
<!ENTITY % xhtml-legacy.module "IGNORE" >
|
|
||||||
<![%xhtml-legacy.module;[
|
|
||||||
<!ENTITY % xhtml-legacy.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Legacy Markup 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-legacy-1.mod" >
|
|
||||||
%xhtml-legacy.mod;]]>
|
|
||||||
|
|
||||||
<!-- Document Structure Module (required) ....................... -->
|
|
||||||
<!ENTITY % xhtml-struct.module "INCLUDE" >
|
|
||||||
<![%xhtml-struct.module;[
|
|
||||||
<!ENTITY % xhtml-struct.mod
|
|
||||||
PUBLIC "-//W3C//ELEMENTS XHTML Document Structure 1.0//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-struct-1.mod" >
|
|
||||||
%xhtml-struct.mod;]]>
|
|
||||||
|
|
||||||
<!-- end of XHTML 1.1 DTD ................................................. -->
|
|
||||||
<!-- ....................................................................... -->
|
|
||||||
@@ -15,13 +15,6 @@ android {
|
|||||||
consumerProguardFiles "consumer-rules.pro"
|
consumerProguardFiles "consumer-rules.pro"
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled false
|
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_11
|
sourceCompatibility JavaVersion.VERSION_11
|
||||||
targetCompatibility JavaVersion.VERSION_11
|
targetCompatibility JavaVersion.VERSION_11
|
||||||
+1
-2
@@ -9,8 +9,7 @@ public class ThrowableUtils {
|
|||||||
|
|
||||||
public static @NonNull
|
public static @NonNull
|
||||||
IOException rethrowAsIOException(Throwable throwable) throws IOException {
|
IOException rethrowAsIOException(Throwable throwable) throws IOException {
|
||||||
IOException newException = new IOException(throwable.getMessage());
|
IOException newException = new IOException(throwable.getMessage(), throwable);
|
||||||
newException.initCause(throwable);
|
|
||||||
throw newException;
|
throw newException;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package me.ag2s.epublib;
|
||||||
|
|
||||||
|
|
||||||
|
public interface Constants {
|
||||||
|
|
||||||
|
String CHARACTER_ENCODING = "UTF-8";
|
||||||
|
String DOCTYPE_XHTML = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">";
|
||||||
|
String NAMESPACE_XHTML = "http://www.w3.org/1999/xhtml";
|
||||||
|
String EPUB_GENERATOR_NAME = "Ag2S EpubLib";
|
||||||
|
String EPUB_DUOKAN_NAME = "DK-SONGTI";
|
||||||
|
char FRAGMENT_SEPARATOR_CHAR = '#';
|
||||||
|
String DEFAULT_TOC_ID = "toc";
|
||||||
|
}
|
||||||
@@ -0,0 +1,157 @@
|
|||||||
|
package me.ag2s.epublib.browsersupport;
|
||||||
|
|
||||||
|
import java.util.EventObject;
|
||||||
|
|
||||||
|
import me.ag2s.epublib.domain.EpubBook;
|
||||||
|
import me.ag2s.epublib.domain.Resource;
|
||||||
|
import me.ag2s.epublib.util.StringUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to tell NavigationEventListener just what kind of navigation action
|
||||||
|
* the user just did.
|
||||||
|
*
|
||||||
|
* @author paul
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public class NavigationEvent extends EventObject {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -6346750144308952762L;
|
||||||
|
|
||||||
|
private Resource oldResource;
|
||||||
|
private int oldSpinePos;
|
||||||
|
private Navigator navigator;
|
||||||
|
private EpubBook oldBook;
|
||||||
|
private int oldSectionPos;
|
||||||
|
private String oldFragmentId;
|
||||||
|
|
||||||
|
public NavigationEvent(Object source) {
|
||||||
|
super(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public NavigationEvent(Object source, Navigator navigator) {
|
||||||
|
super(source);
|
||||||
|
this.navigator = navigator;
|
||||||
|
this.oldBook = navigator.getBook();
|
||||||
|
this.oldFragmentId = navigator.getCurrentFragmentId();
|
||||||
|
this.oldSectionPos = navigator.getCurrentSectionPos();
|
||||||
|
this.oldResource = navigator.getCurrentResource();
|
||||||
|
this.oldSpinePos = navigator.getCurrentSpinePos();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The previous position within the section.
|
||||||
|
*
|
||||||
|
* @return The previous position within the section.
|
||||||
|
*/
|
||||||
|
public int getOldSectionPos() {
|
||||||
|
return oldSectionPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Navigator getNavigator() {
|
||||||
|
return navigator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOldFragmentId() {
|
||||||
|
return oldFragmentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// package
|
||||||
|
void setOldFragmentId(String oldFragmentId) {
|
||||||
|
this.oldFragmentId = oldFragmentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EpubBook getOldBook() {
|
||||||
|
return oldBook;
|
||||||
|
}
|
||||||
|
|
||||||
|
// package
|
||||||
|
void setOldPagePos(int oldPagePos) {
|
||||||
|
this.oldSectionPos = oldPagePos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCurrentSectionPos() {
|
||||||
|
return navigator.getCurrentSectionPos();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOldSpinePos() {
|
||||||
|
return oldSpinePos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCurrentSpinePos() {
|
||||||
|
return navigator.getCurrentSpinePos();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentFragmentId() {
|
||||||
|
return navigator.getCurrentFragmentId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBookChanged() {
|
||||||
|
if (oldBook == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return oldBook != navigator.getBook();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSpinePosChanged() {
|
||||||
|
return getOldSpinePos() != getCurrentSpinePos();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFragmentChanged() {
|
||||||
|
return StringUtil.equals(getOldFragmentId(), getCurrentFragmentId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Resource getOldResource() {
|
||||||
|
return oldResource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Resource getCurrentResource() {
|
||||||
|
return navigator.getCurrentResource();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOldResource(Resource oldResource) {
|
||||||
|
this.oldResource = oldResource;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setOldSpinePos(int oldSpinePos) {
|
||||||
|
this.oldSpinePos = oldSpinePos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setNavigator(Navigator navigator) {
|
||||||
|
this.navigator = navigator;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setOldBook(EpubBook oldBook) {
|
||||||
|
this.oldBook = oldBook;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EpubBook getCurrentBook() {
|
||||||
|
return getNavigator().getBook();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isResourceChanged() {
|
||||||
|
return oldResource != getCurrentResource();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("NullableProblems")
|
||||||
|
public String toString() {
|
||||||
|
return StringUtil.toString(
|
||||||
|
"oldSectionPos", oldSectionPos,
|
||||||
|
"oldResource", oldResource,
|
||||||
|
"oldBook", oldBook,
|
||||||
|
"oldFragmentId", oldFragmentId,
|
||||||
|
"oldSpinePos", oldSpinePos,
|
||||||
|
"currentPagePos", getCurrentSectionPos(),
|
||||||
|
"currentResource", getCurrentResource(),
|
||||||
|
"currentBook", getCurrentBook(),
|
||||||
|
"currentFragmentId", getCurrentFragmentId(),
|
||||||
|
"currentSpinePos", getCurrentSpinePos()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSectionPosChanged() {
|
||||||
|
return oldSectionPos != getCurrentSectionPos();
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
-7
@@ -5,14 +5,13 @@ package me.ag2s.epublib.browsersupport;
|
|||||||
* another location in the book.
|
* another location in the book.
|
||||||
*
|
*
|
||||||
* @author paul
|
* @author paul
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public interface NavigationEventListener {
|
public interface NavigationEventListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called whenever the user navigates to another position in the book.
|
* Called whenever the user navigates to another position in the book.
|
||||||
*
|
*
|
||||||
* @param navigationEvent f
|
* @param navigationEvent f
|
||||||
*/
|
*/
|
||||||
void navigationPerformed(NavigationEvent navigationEvent);
|
void navigationPerformed(NavigationEvent navigationEvent);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,207 @@
|
|||||||
|
package me.ag2s.epublib.browsersupport;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import me.ag2s.epublib.domain.EpubBook;
|
||||||
|
import me.ag2s.epublib.domain.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A history of the user's locations with the epub.
|
||||||
|
*
|
||||||
|
* @author paul.siegmann
|
||||||
|
*/
|
||||||
|
public class NavigationHistory implements NavigationEventListener {
|
||||||
|
|
||||||
|
public static final int DEFAULT_MAX_HISTORY_SIZE = 1000;
|
||||||
|
private static final long DEFAULT_HISTORY_WAIT_TIME = 1000;
|
||||||
|
|
||||||
|
private static class Location {
|
||||||
|
|
||||||
|
private String href;
|
||||||
|
|
||||||
|
public Location(String href) {
|
||||||
|
super();
|
||||||
|
this.href = href;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public void setHref(String href) {
|
||||||
|
this.href = href;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHref() {
|
||||||
|
return href;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private long lastUpdateTime = 0;
|
||||||
|
private List<Location> locations = new ArrayList<>();
|
||||||
|
private final Navigator navigator;
|
||||||
|
private int currentPos = -1;
|
||||||
|
private int currentSize = 0;
|
||||||
|
private int maxHistorySize = DEFAULT_MAX_HISTORY_SIZE;
|
||||||
|
private long historyWaitTime = DEFAULT_HISTORY_WAIT_TIME;
|
||||||
|
|
||||||
|
public NavigationHistory(Navigator navigator) {
|
||||||
|
this.navigator = navigator;
|
||||||
|
navigator.addNavigationEventListener(this);
|
||||||
|
initBook(navigator.getBook());
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCurrentPos() {
|
||||||
|
return currentPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getCurrentSize() {
|
||||||
|
return currentSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initBook(EpubBook book) {
|
||||||
|
if (book == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
locations = new ArrayList<>();
|
||||||
|
currentPos = -1;
|
||||||
|
currentSize = 0;
|
||||||
|
if (navigator.getCurrentResource() != null) {
|
||||||
|
addLocation(navigator.getCurrentResource().getHref());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the time between a navigation event is less than the historyWaitTime
|
||||||
|
* then the new location is not added to the history.
|
||||||
|
* <p>
|
||||||
|
* When a user is rapidly viewing many pages using the slider we do not
|
||||||
|
* want all of them to be added to the history.
|
||||||
|
*
|
||||||
|
* @return the time we wait before adding the page to the history
|
||||||
|
*/
|
||||||
|
public long getHistoryWaitTime() {
|
||||||
|
return historyWaitTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHistoryWaitTime(long historyWaitTime) {
|
||||||
|
this.historyWaitTime = historyWaitTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addLocation(Resource resource) {
|
||||||
|
if (resource == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
addLocation(resource.getHref());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the location after the current position.
|
||||||
|
* If the currentposition is not the end of the list then the elements
|
||||||
|
* between the current element and the end of the list will be discarded.
|
||||||
|
* <p>
|
||||||
|
* Does nothing if the new location matches the current location.
|
||||||
|
* <br/>
|
||||||
|
* If this nr of locations becomes larger then the historySize then the
|
||||||
|
* first item(s) will be removed.
|
||||||
|
* v
|
||||||
|
*
|
||||||
|
* @param location d
|
||||||
|
*/
|
||||||
|
public void addLocation(Location location) {
|
||||||
|
// do nothing if the new location matches the current location
|
||||||
|
if (!(locations.isEmpty()) &&
|
||||||
|
location.getHref().equals(locations.get(currentPos).getHref())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
currentPos++;
|
||||||
|
if (currentPos != currentSize) {
|
||||||
|
locations.set(currentPos, location);
|
||||||
|
} else {
|
||||||
|
locations.add(location);
|
||||||
|
checkHistorySize();
|
||||||
|
}
|
||||||
|
currentSize = currentPos + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all elements that are too much for the maxHistorySize
|
||||||
|
* out of the history.
|
||||||
|
*/
|
||||||
|
private void checkHistorySize() {
|
||||||
|
while (locations.size() > maxHistorySize) {
|
||||||
|
locations.remove(0);
|
||||||
|
currentSize--;
|
||||||
|
currentPos--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addLocation(String href) {
|
||||||
|
addLocation(new Location(href));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getLocationHref(int pos) {
|
||||||
|
if (pos < 0 || pos >= locations.size()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return locations.get(currentPos).getHref();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves the current positions delta positions.
|
||||||
|
* <p>
|
||||||
|
* move(-1) to go one position back in history.<br/>
|
||||||
|
* move(1) to go one position forward.<br/>发
|
||||||
|
*
|
||||||
|
* @param delta f
|
||||||
|
* @return Whether we actually moved. If the requested value is illegal
|
||||||
|
* it will return false, true otherwise.
|
||||||
|
*/
|
||||||
|
public boolean move(int delta) {
|
||||||
|
if (((currentPos + delta) < 0)
|
||||||
|
|| ((currentPos + delta) >= currentSize)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
currentPos += delta;
|
||||||
|
navigator.gotoResource(getLocationHref(currentPos), this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this is not the source of the navigationEvent then the addLocation
|
||||||
|
* will be called with the href of the currentResource in the navigationEvent.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void navigationPerformed(NavigationEvent navigationEvent) {
|
||||||
|
if (this == navigationEvent.getSource()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (navigationEvent.getCurrentResource() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((System.currentTimeMillis() - this.lastUpdateTime) > historyWaitTime) {
|
||||||
|
// if the user scrolled rapidly through the pages then the last page
|
||||||
|
// will not be added to the history. We fix that here:
|
||||||
|
addLocation(navigationEvent.getOldResource());
|
||||||
|
|
||||||
|
addLocation(navigationEvent.getCurrentResource().getHref());
|
||||||
|
}
|
||||||
|
lastUpdateTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentHref() {
|
||||||
|
if (currentPos < 0 || currentPos >= locations.size()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return locations.get(currentPos).getHref();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxHistorySize(int maxHistorySize) {
|
||||||
|
this.maxHistorySize = maxHistorySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxHistorySize() {
|
||||||
|
return maxHistorySize;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,219 @@
|
|||||||
|
package me.ag2s.epublib.browsersupport;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import me.ag2s.epublib.domain.EpubBook;
|
||||||
|
import me.ag2s.epublib.domain.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A helper class for epub browser applications.
|
||||||
|
* <p>
|
||||||
|
* It helps moving from one resource to the other, from one resource
|
||||||
|
* to the other and keeping other elements of the application up-to-date
|
||||||
|
* by calling the NavigationEventListeners.
|
||||||
|
*
|
||||||
|
* @author paul
|
||||||
|
*/
|
||||||
|
public class Navigator implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1076126986424925474L;
|
||||||
|
private EpubBook book;
|
||||||
|
private int currentSpinePos;
|
||||||
|
private Resource currentResource;
|
||||||
|
private int currentPagePos;
|
||||||
|
private String currentFragmentId;
|
||||||
|
|
||||||
|
private final List<NavigationEventListener> eventListeners = new ArrayList<>();
|
||||||
|
|
||||||
|
public Navigator() {
|
||||||
|
this(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Navigator(EpubBook book) {
|
||||||
|
this.book = book;
|
||||||
|
this.currentSpinePos = 0;
|
||||||
|
if (book != null) {
|
||||||
|
this.currentResource = book.getCoverPage();
|
||||||
|
}
|
||||||
|
this.currentPagePos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized void handleEventListeners(
|
||||||
|
NavigationEvent navigationEvent) {
|
||||||
|
for (int i = 0; i < eventListeners.size(); i++) {
|
||||||
|
NavigationEventListener navigationEventListener = eventListeners.get(i);
|
||||||
|
navigationEventListener.navigationPerformed(navigationEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean addNavigationEventListener(
|
||||||
|
NavigationEventListener navigationEventListener) {
|
||||||
|
return this.eventListeners.add(navigationEventListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean removeNavigationEventListener(
|
||||||
|
NavigationEventListener navigationEventListener) {
|
||||||
|
return this.eventListeners.remove(navigationEventListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoFirstSpineSection(Object source) {
|
||||||
|
return gotoSpineSection(0, source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoPreviousSpineSection(Object source) {
|
||||||
|
return gotoPreviousSpineSection(0, source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoPreviousSpineSection(int pagePos, Object source) {
|
||||||
|
if (currentSpinePos < 0) {
|
||||||
|
return gotoSpineSection(0, pagePos, source);
|
||||||
|
} else {
|
||||||
|
return gotoSpineSection(currentSpinePos - 1, pagePos, source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasNextSpineSection() {
|
||||||
|
return (currentSpinePos < (book.getSpine().size() - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPreviousSpineSection() {
|
||||||
|
return (currentSpinePos > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoNextSpineSection(Object source) {
|
||||||
|
if (currentSpinePos < 0) {
|
||||||
|
return gotoSpineSection(0, source);
|
||||||
|
} else {
|
||||||
|
return gotoSpineSection(currentSpinePos + 1, source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoResource(String resourceHref, Object source) {
|
||||||
|
Resource resource = book.getResources().getByHref(resourceHref);
|
||||||
|
return gotoResource(resource, source);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int gotoResource(Resource resource, Object source) {
|
||||||
|
return gotoResource(resource, 0, null, source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoResource(Resource resource, String fragmentId, Object source) {
|
||||||
|
return gotoResource(resource, 0, fragmentId, source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoResource(Resource resource, int pagePos, Object source) {
|
||||||
|
return gotoResource(resource, pagePos, null, source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoResource(Resource resource, int pagePos, String fragmentId,
|
||||||
|
Object source) {
|
||||||
|
if (resource == null) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
NavigationEvent navigationEvent = new NavigationEvent(source, this);
|
||||||
|
this.currentResource = resource;
|
||||||
|
this.currentSpinePos = book.getSpine().getResourceIndex(currentResource);
|
||||||
|
this.currentPagePos = pagePos;
|
||||||
|
this.currentFragmentId = fragmentId;
|
||||||
|
handleEventListeners(navigationEvent);
|
||||||
|
|
||||||
|
return currentSpinePos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoResourceId(String resourceId, Object source) {
|
||||||
|
return gotoSpineSection(book.getSpine().findFirstResourceById(resourceId),
|
||||||
|
source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoSpineSection(int newSpinePos, Object source) {
|
||||||
|
return gotoSpineSection(newSpinePos, 0, source);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Go to a specific section.
|
||||||
|
* Illegal spine positions are silently ignored.
|
||||||
|
*
|
||||||
|
* @param newSpinePos f
|
||||||
|
* @param source f
|
||||||
|
* @return The current position within the spine
|
||||||
|
*/
|
||||||
|
public int gotoSpineSection(int newSpinePos, int newPagePos, Object source) {
|
||||||
|
if (newSpinePos == currentSpinePos) {
|
||||||
|
return currentSpinePos;
|
||||||
|
}
|
||||||
|
if (newSpinePos < 0 || newSpinePos >= book.getSpine().size()) {
|
||||||
|
return currentSpinePos;
|
||||||
|
}
|
||||||
|
NavigationEvent navigationEvent = new NavigationEvent(source, this);
|
||||||
|
currentSpinePos = newSpinePos;
|
||||||
|
currentPagePos = newPagePos;
|
||||||
|
currentResource = book.getSpine().getResource(currentSpinePos);
|
||||||
|
handleEventListeners(navigationEvent);
|
||||||
|
return currentSpinePos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int gotoLastSpineSection(Object source) {
|
||||||
|
return gotoSpineSection(book.getSpine().size() - 1, source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void gotoBook(EpubBook book, Object source) {
|
||||||
|
NavigationEvent navigationEvent = new NavigationEvent(source, this);
|
||||||
|
this.book = book;
|
||||||
|
this.currentFragmentId = null;
|
||||||
|
this.currentPagePos = 0;
|
||||||
|
this.currentResource = null;
|
||||||
|
this.currentSpinePos = book.getSpine().getResourceIndex(currentResource);
|
||||||
|
handleEventListeners(navigationEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current position within the spine.
|
||||||
|
*
|
||||||
|
* @return something < 0 if the current position is not within the spine.
|
||||||
|
*/
|
||||||
|
public int getCurrentSpinePos() {
|
||||||
|
return currentSpinePos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Resource getCurrentResource() {
|
||||||
|
return currentResource;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the current index and resource without calling the eventlisteners.
|
||||||
|
* <p>
|
||||||
|
* If you want the eventListeners called use gotoSection(index);
|
||||||
|
*
|
||||||
|
* @param currentIndex f
|
||||||
|
*/
|
||||||
|
public void setCurrentSpinePos(int currentIndex) {
|
||||||
|
this.currentSpinePos = currentIndex;
|
||||||
|
this.currentResource = book.getSpine().getResource(currentIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EpubBook getBook() {
|
||||||
|
return book;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the current index and resource without calling the eventlisteners.
|
||||||
|
* <p>
|
||||||
|
* If you want the eventListeners called use gotoSection(index);
|
||||||
|
*/
|
||||||
|
public int setCurrentResource(Resource currentResource) {
|
||||||
|
this.currentSpinePos = book.getSpine().getResourceIndex(currentResource);
|
||||||
|
this.currentResource = currentResource;
|
||||||
|
return currentSpinePos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentFragmentId() {
|
||||||
|
return currentFragmentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCurrentSectionPos() {
|
||||||
|
return currentPagePos;
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Provides classes that help make an epub reader application.
|
* Provides classes that help make an epub reader application.
|
||||||
*
|
* <p>
|
||||||
* These classes have no dependencies on graphic toolkits, they're purely
|
* These classes have no dependencies on graphic toolkits, they're purely
|
||||||
* to help with the browsing/navigation logic.
|
* to help with the browsing/navigation logic.
|
||||||
*/
|
*/
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package me.ag2s.epublib.domain;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import me.ag2s.epublib.util.zip.ZipEntryWrapper;
|
||||||
|
import me.ag2s.epublib.util.zip.ZipFileWrapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jake
|
||||||
|
*/
|
||||||
|
public class EpubResourceProvider implements LazyResourceProvider {
|
||||||
|
|
||||||
|
|
||||||
|
private final ZipFileWrapper zipFileWrapper;
|
||||||
|
|
||||||
|
|
||||||
|
public EpubResourceProvider(ZipFileWrapper zipFileWrapper) {
|
||||||
|
this.zipFileWrapper = zipFileWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputStream getResourceStream(@NonNull String href) throws IOException {
|
||||||
|
|
||||||
|
//ZipFile zipFile = new ZipFile(epubFilename);
|
||||||
|
ZipEntryWrapper zipEntry = zipFileWrapper.getEntry(href);
|
||||||
|
if (zipEntry == null) {
|
||||||
|
//zipFile.close();
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Cannot find entry " + href + " in epub file " + zipFileWrapper);
|
||||||
|
}
|
||||||
|
return new ResourceInputStream(zipFileWrapper.getInputStream(zipEntry));
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-1
@@ -7,7 +7,6 @@ import java.io.InputStream;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 用于创建epub,添加大文件(如大量图片)时容易OOM,使用LazyResource,避免OOM.
|
* 用于创建epub,添加大文件(如大量图片)时容易OOM,使用LazyResource,避免OOM.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class FileResourceProvider implements LazyResourceProvider {
|
public class FileResourceProvider implements LazyResourceProvider {
|
||||||
@@ -16,6 +15,7 @@ public class FileResourceProvider implements LazyResourceProvider {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个文件夹里面文件夹的LazyResourceProvider,用于LazyResource。
|
* 创建一个文件夹里面文件夹的LazyResourceProvider,用于LazyResource。
|
||||||
|
*
|
||||||
* @param parentDir 文件的目录
|
* @param parentDir 文件的目录
|
||||||
*/
|
*/
|
||||||
public FileResourceProvider(String parentDir) {
|
public FileResourceProvider(String parentDir) {
|
||||||
@@ -24,6 +24,7 @@ public class FileResourceProvider implements LazyResourceProvider {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个文件夹里面文件夹的LazyResourceProvider,用于LazyResource。
|
* 创建一个文件夹里面文件夹的LazyResourceProvider,用于LazyResource。
|
||||||
|
*
|
||||||
* @param parentFile 文件夹
|
* @param parentFile 文件夹
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@@ -33,6 +34,7 @@ public class FileResourceProvider implements LazyResourceProvider {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据子文件名href,再父目录下读取文件获取FileInputStream
|
* 根据子文件名href,再父目录下读取文件获取FileInputStream
|
||||||
|
*
|
||||||
* @param href 子文件名href
|
* @param href 子文件名href
|
||||||
* @return 对应href的FileInputStream
|
* @return 对应href的FileInputStream
|
||||||
* @throws IOException 抛出IOException
|
* @throws IOException 抛出IOException
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
package me.ag2s.epublib.domain;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The guide is a selection of special pages of the book.
|
||||||
|
* Examples of these are the cover, list of illustrations, etc.
|
||||||
|
* <p>
|
||||||
|
* It is an optional part of an epub, and support for the various types
|
||||||
|
* of references varies by reader.
|
||||||
|
* <p>
|
||||||
|
* The only part of this that is heavily used is the cover page.
|
||||||
|
*
|
||||||
|
* @author paul
|
||||||
|
*/
|
||||||
|
public class Guide implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -6256645339915751189L;
|
||||||
|
|
||||||
|
public static final String DEFAULT_COVER_TITLE = GuideReference.COVER;
|
||||||
|
|
||||||
|
private List<GuideReference> references = new ArrayList<>();
|
||||||
|
private static final int COVERPAGE_NOT_FOUND = -1;
|
||||||
|
private static final int COVERPAGE_UNITIALIZED = -2;
|
||||||
|
|
||||||
|
private int coverPageIndex = -1;
|
||||||
|
|
||||||
|
public List<GuideReference> getReferences() {
|
||||||
|
return references;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReferences(List<GuideReference> references) {
|
||||||
|
this.references = references;
|
||||||
|
uncheckCoverPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void uncheckCoverPage() {
|
||||||
|
coverPageIndex = COVERPAGE_UNITIALIZED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GuideReference getCoverReference() {
|
||||||
|
checkCoverPage();
|
||||||
|
if (coverPageIndex >= 0) {
|
||||||
|
return references.get(coverPageIndex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("UnusedReturnValue")
|
||||||
|
public int setCoverReference(GuideReference guideReference) {
|
||||||
|
if (coverPageIndex >= 0) {
|
||||||
|
references.set(coverPageIndex, guideReference);
|
||||||
|
} else {
|
||||||
|
references.add(0, guideReference);
|
||||||
|
coverPageIndex = 0;
|
||||||
|
}
|
||||||
|
return coverPageIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkCoverPage() {
|
||||||
|
if (coverPageIndex == COVERPAGE_UNITIALIZED) {
|
||||||
|
initCoverPage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void initCoverPage() {
|
||||||
|
int result = COVERPAGE_NOT_FOUND;
|
||||||
|
for (int i = 0; i < references.size(); i++) {
|
||||||
|
GuideReference guideReference = references.get(i);
|
||||||
|
if (guideReference.getType().equals(GuideReference.COVER)) {
|
||||||
|
result = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
coverPageIndex = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The coverpage of the book.
|
||||||
|
*
|
||||||
|
* @return The coverpage of the book.
|
||||||
|
*/
|
||||||
|
public Resource getCoverPage() {
|
||||||
|
GuideReference guideReference = getCoverReference();
|
||||||
|
if (guideReference == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return guideReference.getResource();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCoverPage(Resource coverPage) {
|
||||||
|
GuideReference coverpageGuideReference = new GuideReference(coverPage,
|
||||||
|
GuideReference.COVER, DEFAULT_COVER_TITLE);
|
||||||
|
setCoverReference(coverpageGuideReference);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("UnusedReturnValue")
|
||||||
|
public ResourceReference addReference(GuideReference reference) {
|
||||||
|
this.references.add(reference);
|
||||||
|
uncheckCoverPage();
|
||||||
|
return reference;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of all GuideReferences that have the given
|
||||||
|
* referenceTypeName (ignoring case).
|
||||||
|
*
|
||||||
|
* @param referenceTypeName referenceTypeName
|
||||||
|
* @return A list of all GuideReferences that have the given
|
||||||
|
* referenceTypeName (ignoring case).
|
||||||
|
*/
|
||||||
|
public List<GuideReference> getGuideReferencesByType(
|
||||||
|
String referenceTypeName) {
|
||||||
|
List<GuideReference> result = new ArrayList<>();
|
||||||
|
for (GuideReference guideReference : references) {
|
||||||
|
if (referenceTypeName.equalsIgnoreCase(guideReference.getType())) {
|
||||||
|
result.add(guideReference);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
package me.ag2s.epublib.domain;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import me.ag2s.epublib.util.StringUtil;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These are references to elements of the book's guide.
|
||||||
|
*
|
||||||
|
* @author paul
|
||||||
|
* @see Guide
|
||||||
|
*/
|
||||||
|
public class GuideReference extends TitledResourceReference
|
||||||
|
implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -316179702440631834L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the book cover(s), jacket information, etc.
|
||||||
|
*/
|
||||||
|
public static final String COVER = "cover";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* human-readable page with title, author, publisher, and other metadata
|
||||||
|
*/
|
||||||
|
public static String TITLE_PAGE = "title-page";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Human-readable table of contents.
|
||||||
|
* Not to be confused the epub file table of contents
|
||||||
|
*/
|
||||||
|
public static String TOC = "toc";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* back-of-book style index
|
||||||
|
*/
|
||||||
|
public static String INDEX = "index";
|
||||||
|
public static String GLOSSARY = "glossary";
|
||||||
|
public static String ACKNOWLEDGEMENTS = "acknowledgements";
|
||||||
|
public static String BIBLIOGRAPHY = "bibliography";
|
||||||
|
public static String COLOPHON = "colophon";
|
||||||
|
public static String COPYRIGHT_PAGE = "copyright-page";
|
||||||
|
public static String DEDICATION = "dedication";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* an epigraph is a phrase, quotation, or poem that is set at the
|
||||||
|
* beginning of a document or component.
|
||||||
|
* <p>
|
||||||
|
* source: http://en.wikipedia.org/wiki/Epigraph_%28literature%29
|
||||||
|
*/
|
||||||
|
public static String EPIGRAPH = "epigraph";
|
||||||
|
|
||||||
|
public static String FOREWORD = "foreword";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list of illustrations
|
||||||
|
*/
|
||||||
|
public static String LOI = "loi";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list of tables
|
||||||
|
*/
|
||||||
|
public static String LOT = "lot";
|
||||||
|
public static String NOTES = "notes";
|
||||||
|
public static String PREFACE = "preface";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A page of content (e.g. "Chapter 1")
|
||||||
|
*/
|
||||||
|
public static String TEXT = "text";
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
public GuideReference(Resource resource) {
|
||||||
|
this(resource, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GuideReference(Resource resource, String title) {
|
||||||
|
super(resource, title);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GuideReference(Resource resource, String type, String title) {
|
||||||
|
this(resource, type, title, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GuideReference(Resource resource, String type, String title,
|
||||||
|
String fragmentId) {
|
||||||
|
super(resource, title, fragmentId);
|
||||||
|
this.type = StringUtil.isNotBlank(type) ? type.toLowerCase() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
package me.ag2s.epublib.domain;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import me.ag2s.epublib.util.StringUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Book's identifier.
|
||||||
|
* <p>
|
||||||
|
* Defaults to a random UUID and scheme "UUID"
|
||||||
|
*
|
||||||
|
* @author paul
|
||||||
|
*/
|
||||||
|
public class Identifier implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 955949951416391810L;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public interface Scheme {
|
||||||
|
|
||||||
|
String UUID = "UUID";
|
||||||
|
String ISBN = "ISBN";
|
||||||
|
String URL = "URL";
|
||||||
|
String URI = "URI";
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean bookId = false;
|
||||||
|
private String scheme;
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an Identifier with as value a random UUID and scheme "UUID"
|
||||||
|
*/
|
||||||
|
public Identifier() {
|
||||||
|
this(Scheme.UUID, UUID.randomUUID().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Identifier(String scheme, String value) {
|
||||||
|
this.scheme = scheme;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The first identifier for which the bookId is true is made the
|
||||||
|
* bookId identifier.
|
||||||
|
* <p>
|
||||||
|
* If no identifier has bookId == true then the first bookId identifier
|
||||||
|
* is written as the primary.
|
||||||
|
*
|
||||||
|
* @param identifiers i
|
||||||
|
* @return The first identifier for which the bookId is true is made
|
||||||
|
* the bookId identifier.
|
||||||
|
*/
|
||||||
|
public static Identifier getBookIdIdentifier(List<Identifier> identifiers) {
|
||||||
|
if (identifiers == null || identifiers.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Identifier result = null;
|
||||||
|
for (Identifier identifier : identifiers) {
|
||||||
|
if (identifier.isBookId()) {
|
||||||
|
result = identifier;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == null) {
|
||||||
|
result = identifiers.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getScheme() {
|
||||||
|
return scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScheme(String scheme) {
|
||||||
|
this.scheme = scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setBookId(boolean bookId) {
|
||||||
|
this.bookId = bookId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This bookId property allows the book creator to add multiple ids and
|
||||||
|
* tell the epubwriter which one to write out as the bookId.
|
||||||
|
* <p>
|
||||||
|
* The Dublin Core metadata spec allows multiple identifiers for a Book.
|
||||||
|
* The epub spec requires exactly one identifier to be marked as the book id.
|
||||||
|
*
|
||||||
|
* @return whether this is the unique book id.
|
||||||
|
*/
|
||||||
|
public boolean isBookId() {
|
||||||
|
return bookId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
return StringUtil.defaultIfNull(scheme).hashCode() ^ StringUtil
|
||||||
|
.defaultIfNull(value).hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Object otherIdentifier) {
|
||||||
|
if (!(otherIdentifier instanceof Identifier)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return StringUtil.equals(scheme, ((Identifier) otherIdentifier).scheme)
|
||||||
|
&& StringUtil.equals(value, ((Identifier) otherIdentifier).value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("NullableProblems")
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
if (StringUtil.isBlank(scheme)) {
|
||||||
|
return "" + value;
|
||||||
|
}
|
||||||
|
return "" + scheme + ":" + value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
package me.ag2s.epublib.domain;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import me.ag2s.epublib.util.IOUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Resource that loads its data only on-demand from a EPUB book file.
|
||||||
|
* This way larger books can fit into memory and can be opened faster.
|
||||||
|
*/
|
||||||
|
public class LazyResource extends Resource {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 5089400472352002866L;
|
||||||
|
private final String TAG = getClass().getName();
|
||||||
|
|
||||||
|
private final LazyResourceProvider resourceProvider;
|
||||||
|
private final long cachedSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a lazy resource, when the size is unknown.
|
||||||
|
*
|
||||||
|
* @param resourceProvider The resource provider loads data on demand.
|
||||||
|
* @param href The resource's href within the epub.
|
||||||
|
*/
|
||||||
|
public LazyResource(LazyResourceProvider resourceProvider, String href) {
|
||||||
|
this(resourceProvider, -1, href);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LazyResource(LazyResourceProvider resourceProvider, String href, String originalHref) {
|
||||||
|
this(resourceProvider, -1, href, originalHref);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a Lazy resource, by not actually loading the data for this entry.
|
||||||
|
* <p>
|
||||||
|
* The data will be loaded on the first call to getData()
|
||||||
|
*
|
||||||
|
* @param resourceProvider The resource provider loads data on demand.
|
||||||
|
* @param size The size of this resource.
|
||||||
|
* @param href The resource's href within the epub.
|
||||||
|
*/
|
||||||
|
public LazyResource(
|
||||||
|
LazyResourceProvider resourceProvider, long size, String href) {
|
||||||
|
super(null, null, href, MediaTypes.determineMediaType(href));
|
||||||
|
this.resourceProvider = resourceProvider;
|
||||||
|
this.cachedSize = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LazyResource(
|
||||||
|
LazyResourceProvider resourceProvider, long size, String href, String originalHref) {
|
||||||
|
super(null, null, href, originalHref, MediaTypes.determineMediaType(href));
|
||||||
|
this.resourceProvider = resourceProvider;
|
||||||
|
this.cachedSize = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the contents of the Resource as an InputStream.
|
||||||
|
*
|
||||||
|
* @return The contents of the Resource.
|
||||||
|
* @throws IOException IOException
|
||||||
|
*/
|
||||||
|
public InputStream getInputStream() throws IOException {
|
||||||
|
if (isInitialized()) {
|
||||||
|
return new ByteArrayInputStream(getData());
|
||||||
|
} else {
|
||||||
|
return resourceProvider.getResourceStream(this.originalHref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the resource by loading its data into memory.
|
||||||
|
*
|
||||||
|
* @throws IOException IOException
|
||||||
|
*/
|
||||||
|
public void initialize() throws IOException {
|
||||||
|
getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The contents of the resource as a byte[]
|
||||||
|
* <p>
|
||||||
|
* If this resource was lazy-loaded and the data was not yet loaded,
|
||||||
|
* it will be loaded into memory at this point.
|
||||||
|
* This included opening the zip file, so expect a first load to be slow.
|
||||||
|
*
|
||||||
|
* @return The contents of the resource
|
||||||
|
*/
|
||||||
|
public byte[] getData() throws IOException {
|
||||||
|
|
||||||
|
if (data == null) {
|
||||||
|
|
||||||
|
Log.d(TAG, "Initializing lazy resource: " + this.getHref());
|
||||||
|
|
||||||
|
InputStream in = resourceProvider.getResourceStream(this.originalHref);
|
||||||
|
byte[] readData = IOUtil.toByteArray(in, (int) this.cachedSize);
|
||||||
|
if (readData == null) {
|
||||||
|
throw new IOException(
|
||||||
|
"Could not load the contents of resource: " + this.getHref());
|
||||||
|
} else {
|
||||||
|
this.data = readData;
|
||||||
|
}
|
||||||
|
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells this resource to release its cached data.
|
||||||
|
* <p>
|
||||||
|
* If this resource was not lazy-loaded, this is a no-op.
|
||||||
|
*/
|
||||||
|
public void close() {
|
||||||
|
if (this.resourceProvider != null) {
|
||||||
|
this.data = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if the data for this resource has been loaded into memory.
|
||||||
|
*
|
||||||
|
* @return true if data was loaded.
|
||||||
|
*/
|
||||||
|
public boolean isInitialized() {
|
||||||
|
return data != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the size of this resource in bytes.
|
||||||
|
*
|
||||||
|
* @return the size.
|
||||||
|
*/
|
||||||
|
public long getSize() {
|
||||||
|
if (data != null) {
|
||||||
|
return data.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cachedSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -8,5 +8,5 @@ import java.io.InputStream;
|
|||||||
*/
|
*/
|
||||||
public interface LazyResourceProvider {
|
public interface LazyResourceProvider {
|
||||||
|
|
||||||
InputStream getResourceStream(String href) throws IOException;
|
InputStream getResourceStream(String href) throws IOException;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package me.ag2s.epublib.domain;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public enum ManifestItemProperties implements ManifestProperties {
|
||||||
|
COVER_IMAGE("cover-image"),
|
||||||
|
MATHML("mathml"),
|
||||||
|
NAV("nav"),
|
||||||
|
REMOTE_RESOURCES("remote-resources"),
|
||||||
|
SCRIPTED("scripted"),
|
||||||
|
SVG("svg"),
|
||||||
|
SWITCH("switch");
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
ManifestItemProperties(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user