lollipop版本分开,有些新特性android5.0和6.0不支持
This commit is contained in:
+10
-3
@@ -41,7 +41,7 @@ android {
|
||||
}
|
||||
defaultConfig {
|
||||
applicationId "io.legado.app"
|
||||
minSdk 21
|
||||
minSdk 24
|
||||
targetSdk 33
|
||||
versionCode 10000 + gitCommits
|
||||
versionName version
|
||||
@@ -107,6 +107,11 @@ android {
|
||||
applicationId "io.legado.play"
|
||||
manifestPlaceholders.put("APP_CHANNEL_VALUE", "google")
|
||||
}
|
||||
lollipop {
|
||||
dimension "mode"
|
||||
minSdk 21
|
||||
manifestPlaceholders.put("APP_CHANNEL_VALUE", "lollipop")
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
@@ -198,10 +203,12 @@ dependencies {
|
||||
implementation('org.jsoup:jsoup:1.15.4')
|
||||
implementation('com.jayway.jsonpath:json-path:2.8.0')
|
||||
implementation('cn.wanghaomiao:JsoupXpath:2.5.3')
|
||||
implementation(project(path: ':book'))
|
||||
implementation(project(path: ':modules:book'))
|
||||
|
||||
//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')
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_11
|
||||
targetCompatibility JavaVersion.VERSION_11
|
||||
+1
-2
@@ -9,8 +9,7 @@ public class ThrowableUtils {
|
||||
|
||||
public static @NonNull
|
||||
IOException rethrowAsIOException(Throwable throwable) throws IOException {
|
||||
IOException newException = new IOException(throwable.getMessage());
|
||||
newException.initCause(throwable);
|
||||
IOException newException = new IOException(throwable.getMessage(), throwable);
|
||||
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.
|
||||
*
|
||||
* @author paul
|
||||
*
|
||||
*/
|
||||
public interface NavigationEventListener {
|
||||
|
||||
/**
|
||||
* Called whenever the user navigates to another position in the book.
|
||||
*
|
||||
* @param navigationEvent f
|
||||
*/
|
||||
void navigationPerformed(NavigationEvent navigationEvent);
|
||||
/**
|
||||
* Called whenever the user navigates to another position in the book.
|
||||
*
|
||||
* @param navigationEvent f
|
||||
*/
|
||||
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.
|
||||
*
|
||||
* <p>
|
||||
* These classes have no dependencies on graphic toolkits, they're purely
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
public class FileResourceProvider implements LazyResourceProvider {
|
||||
@@ -16,6 +15,7 @@ public class FileResourceProvider implements LazyResourceProvider {
|
||||
|
||||
/**
|
||||
* 创建一个文件夹里面文件夹的LazyResourceProvider,用于LazyResource。
|
||||
*
|
||||
* @param parentDir 文件的目录
|
||||
*/
|
||||
public FileResourceProvider(String parentDir) {
|
||||
@@ -24,6 +24,7 @@ public class FileResourceProvider implements LazyResourceProvider {
|
||||
|
||||
/**
|
||||
* 创建一个文件夹里面文件夹的LazyResourceProvider,用于LazyResource。
|
||||
*
|
||||
* @param parentFile 文件夹
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
@@ -33,6 +34,7 @@ public class FileResourceProvider implements LazyResourceProvider {
|
||||
|
||||
/**
|
||||
* 根据子文件名href,再父目录下读取文件获取FileInputStream
|
||||
*
|
||||
* @param href 子文件名href
|
||||
* @return 对应href的FileInputStream
|
||||
* @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 {
|
||||
|
||||
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