CETEIcean 1.7.0 → 1.7.2
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +3 -3
- package/src/CETEI.js +16 -8
- package/src/behaviors.js +0 -9
- package/test/EEBOTest.html +0 -1
- package/tutorial_en/README.md +7 -3
- package/tutorial_ja/README.md +202 -0
- package/tutorial_ja/css/tei.css +8 -0
- package/tutorial_ja/example/css/tei.css +98 -0
- package/tutorial_ja/example/index.html +36 -0
- package/tutorial_ja/example/index_ja.html +47 -0
- package/tutorial_ja/fpn-washington.xml +9893 -0
- package/tutorial_ja/js/CETEI.js +871 -0
- package/tutorial_ja/meros.xml +675 -0
- package/.vscode/settings.json +0 -6
- package/test/P5.css +0 -362
- package/test/registerElements.html +0 -31
- package/test/tcw20.html +0 -960
- package/test/tcw22.xml +0 -468
- package/tutorial_es/Ruy_Diaz-La_Argentina_Manuscrita.tei.xml +0 -11579
- package/xslt/make-CETEIcean-3.xsl +0 -81
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "CETEIcean",
|
3
|
-
"version": "1.7.
|
3
|
+
"version": "1.7.2",
|
4
4
|
"description": "JavaScript library to load a TEI XML document and register it as HTML5 custom elements.",
|
5
5
|
"main": "src/CETEI.js",
|
6
6
|
"keywords": [
|
@@ -23,8 +23,8 @@
|
|
23
23
|
"http-server": "^14.1.1",
|
24
24
|
"onchange": "^6.1.1",
|
25
25
|
"rollup": "^2.57.0",
|
26
|
-
"rollup-plugin-terser": "
|
27
|
-
"terser": "^
|
26
|
+
"rollup-plugin-terser": "^7.0.2",
|
27
|
+
"terser": "^5.14.2"
|
28
28
|
},
|
29
29
|
"scripts": {
|
30
30
|
"build": "rollup -c rollup.config.js",
|
package/src/CETEI.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import defaultBehaviors from './defaultBehaviors';
|
2
|
-
import * as utilities from './utilities';
|
3
|
-
import {addBehaviors, addBehavior,
|
4
|
-
import {learnElementNames, learnCustomElementNames} from './dom';
|
1
|
+
import defaultBehaviors from './defaultBehaviors.js';
|
2
|
+
import * as utilities from './utilities.js';
|
3
|
+
import {addBehaviors, addBehavior, removeBehavior} from './behaviors.js';
|
4
|
+
import {learnElementNames, learnCustomElementNames} from './dom.js';
|
5
5
|
|
6
6
|
class CETEI {
|
7
7
|
constructor(options){
|
@@ -10,7 +10,6 @@ class CETEI {
|
|
10
10
|
// Bind methods
|
11
11
|
this.addBehaviors = addBehaviors.bind(this);
|
12
12
|
this.addBehavior = addBehavior.bind(this);
|
13
|
-
this.applyBehaviors = applyBehaviors.bind(this);
|
14
13
|
this.removeBehavior = removeBehavior.bind(this);
|
15
14
|
|
16
15
|
// Bind selected utilities
|
@@ -412,7 +411,7 @@ processElement(elt) {
|
|
412
411
|
// Given a qualified name (e.g. tei:text), return the element name
|
413
412
|
tagName(name) {
|
414
413
|
if (name.includes(":"), 1) {
|
415
|
-
return name.replace(/:/,"-").toLowerCase()
|
414
|
+
return name.replace(/:/,"-").toLowerCase();
|
416
415
|
} else {
|
417
416
|
return "ceteicean-" + name.toLowerCase();
|
418
417
|
}
|
@@ -438,6 +437,15 @@ template(str, elt) {
|
|
438
437
|
return result;
|
439
438
|
}
|
440
439
|
|
440
|
+
// Define or apply behaviors for the document
|
441
|
+
applyBehaviors() {
|
442
|
+
if (window.customElements) {
|
443
|
+
this.define.call(this, this.els);
|
444
|
+
} else {
|
445
|
+
this.fallback.call(this, this.els);
|
446
|
+
}
|
447
|
+
}
|
448
|
+
|
441
449
|
/*
|
442
450
|
Registers the list of elements provided with the browser.
|
443
451
|
Called by makeHTML5(), but can be called independently if, for example,
|
@@ -446,7 +454,7 @@ template(str, elt) {
|
|
446
454
|
define(names) {
|
447
455
|
for (let name of names) {
|
448
456
|
try {
|
449
|
-
|
457
|
+
const fn = this.getHandler(this.behaviors, name);
|
450
458
|
window.customElements.define(this.tagName(name), class extends HTMLElement {
|
451
459
|
constructor() {
|
452
460
|
super();
|
@@ -472,7 +480,7 @@ define(names) {
|
|
472
480
|
// When using the same CETEIcean instance for multiple TEI files, this error becomes very common.
|
473
481
|
// It's muted by default unless the debug option is set.
|
474
482
|
if (this.debug) {
|
475
|
-
console.log(tagName(name) + " couldn't be registered or is already registered.");
|
483
|
+
console.log(this.tagName(name) + " couldn't be registered or is already registered.");
|
476
484
|
console.log(error);
|
477
485
|
}
|
478
486
|
}
|
package/src/behaviors.js
CHANGED
@@ -71,12 +71,3 @@ export function removeBehavior(ns, element) {
|
|
71
71
|
}
|
72
72
|
delete this.behaviors[`${p}:${element}`];
|
73
73
|
}
|
74
|
-
|
75
|
-
// Define or apply behaviors for the document
|
76
|
-
export function applyBehaviors() {
|
77
|
-
if (window.customElements) {
|
78
|
-
this.define.call(this, this.els);
|
79
|
-
} else {
|
80
|
-
this.fallback.call(this, this.els);
|
81
|
-
}
|
82
|
-
}
|
package/test/EEBOTest.html
CHANGED
@@ -75,7 +75,6 @@
|
|
75
75
|
CETEIcean.getHTML5('https://raw.githubusercontent.com/textcreationpartnership/A00689/master/A00689.xml', function(data) {
|
76
76
|
document.getElementById("TEI").innerHTML = "";
|
77
77
|
document.getElementById("TEI").appendChild(data);
|
78
|
-
CETEIcean.addStyle(document, data);
|
79
78
|
// Fix combining abbreviation marker in Chrome
|
80
79
|
if (!!window.chrome) {
|
81
80
|
var gs = document.getElementsByTagName("tei-g");
|
package/tutorial_en/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
This tutorial will walk you through the steps to publish a TEI file online using CETEIcean. We will start with a simple (though quite large) file in TEI P5 form, `fpn-washington.xml`, which we want to display in a web browser.
|
6
6
|
|
7
|
-
First, a note about viewing the results of your work: CETEIcean's default method for displaying TEI relies on loading a TEI file from another location. Not all browsers will allow you to do this when you view an HTML file directly on your file system. You should try it, but if it doesn't work, then you will have to run a web server, put your files on a web server, or use a text editor with preview capabilities. [
|
7
|
+
First, a note about viewing the results of your work: CETEIcean's default method for displaying TEI relies on loading a TEI file from another location. Not all browsers will allow you to do this when you view an HTML file directly on your file system. You should try it, but if it doesn't work, then you will have to run a web server, put your files on a web server, or use a text editor with preview capabilities. [Visual Studio Code](https://code.visualstudio.com/), with the `Html Preview` plugin is the example we will use for this tutorial, but there are many other options. You should download and install Visual Studio Code, or an equivalent text editor, before starting this tutorial. A text editor is different from other programs you may already use for editing 'text', such as LibreOffice or Word, in that it edits only plain text files.
|
8
8
|
|
9
9
|
We will start by setting up a directory structure for our files. You may simply want to copy the structure of this tutorial, which looks like:
|
10
10
|
|
@@ -62,9 +62,13 @@ Inside your new script element, add the lines:
|
|
62
62
|
|
63
63
|
You don't need to be a JavaScript expert to use CETEIcean, but learning how the basics work will be helpful. If you want advanced behaviors, you will have to know JavaScript. An excellent guide is available from the [Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) (MDN) in many languages. The lines of code above are doing a few things: first, a variable, `c` is defined as a new CETEI object. This will do the work of loading and styling our source file for us. Next, we tell `c` to load the source file and turn it into HTML Custom Elements, and we're also giving it a function that will take the results and put them into the `<body>` of our index.html file. `document.getElementsByTagName('body')` calls a function available on the built-in `document` object (`document` is the HTML document loaded into the browser) that finds all the body elements and returns them in an Array (a list whose members can be accessed by index number). There is only one body element, so we're getting the first item in the Array, at index 0. To that item, an HTML Element, we are appending as a child the TEI document we just loaded.
|
64
64
|
|
65
|
-
At this point, if you're using
|
65
|
+
At this point, if you're using Visual Studio Code, you should be able to run HTML Preview with ctrl+shift+v or cmd+shift+v and see your document. You may need to disable security settings when prompted in order for this to work. If you aren't using Visual Studio Code, you can try putting your documents on a web server. If you're familiar with using GitHub, you can use GitHub Pages ([tutorial](https://docs.github.com/en/pages/quickstart)—you can skip the themes step and just use a repository with the tutorial you're reading in it). If you have Python 3 installed on your computer, you can run a simple web server in the tutorial directory with the command:
|
66
66
|
```bash
|
67
|
-
|
67
|
+
python3 -m http.server
|
68
|
+
```
|
69
|
+
If you have NodeJS installed, you can use:
|
70
|
+
```bash
|
71
|
+
npx serve
|
68
72
|
```
|
69
73
|
Your computer may also come with web serving capabilites built in, or you can install [MAMP](https://www.mamp.info) or something similar.
|
70
74
|
|
@@ -0,0 +1,202 @@
|
|
1
|
+
# CETEIcean と TEI Publishing を始めるにあたって
|
2
|
+
|
3
|
+
[CETEIcean](https://github.com/TEIC/CETEIcean) は JavaScript のプログラムであり、Webでの (Text Encoding Initiative XML)[https://tei-c.org/release/doc/tei-p5-doc/en/html/index.html] のファイル公開を簡単にできるようにするためのものです。CETEIceanが何をしているかを理解するためには、TEIとその活用に関する若干の背景知識が必要になります。入門的な資料は、 [TEI by Example](https://teibyexample.org/) でみつけられるはずです。
|
4
|
+
|
5
|
+
このチュートリアルでは、CETEIceanを用いてTEIファイルを公開するための一連のステップを解説します。TEI P5の形式の(大きいですが)単純なファイル、`fpn-washington.xml`を用いて解説を始めます。我々はこのファイルをWebブラウザに表示することを目指します。
|
6
|
+
|
7
|
+
はじめに、作業結果の表示に関して留意していただきたい点があります。CETEIceanのデフォルトのTEI表示方法は、別の場所からTEIファイルを読み込むことに依存しています。この場合、ローカルのファイルシステム上のHTMLファイルを直接表示することになりますので、ブラウザによっては許可しない場合があります。まずは試してみていただくとよいのですが、うまくいかない場合は、Webサーバーを動かすか、ファイルをWebサーバーに置くか、プレビュー機能のあるテキストエディタを使うことになります。このチュートリアルでは、[Visual Studio Codo](https://code.visualstudio.com/) の `Html Preview` プラグインを使用しますが、他にも多くの選択肢があります。このチュートリアルを始める前に、Visual Studio Code または同等のテキストエディタをダウンロードし、インストールしておく必要があります。(あるいはPythonのような簡易HTTPサーバを稼働できるプログラミング言語でもよいです。)テキストエディタは、LibreOfficeやWordのような「テキスト」を編集するためのプログラムとは異なり、プレーンテキストファイルのみを編集するものです。
|
8
|
+
|
9
|
+
まず、今回のファイルのためのディレクトリ構造を設定することから始めましょう。このチュートリアルの構造をコピーして、次のようにするとよいでしょう。
|
10
|
+
|
11
|
+
```
|
12
|
+
tutorial/
|
13
|
+
|
|
14
|
+
--- css/
|
15
|
+
|
|
16
|
+
--- tei.css
|
17
|
+
|
|
18
|
+
--- js/
|
19
|
+
|
|
20
|
+
--- CETEI.js
|
21
|
+
|
|
22
|
+
--- fpn-washington.xml
|
23
|
+
--- meros.xml
|
24
|
+
--- README.md (the file you are reading)
|
25
|
+
```
|
26
|
+
|
27
|
+
ルートのディレクトリ(フォルダ)に`index.html` というファイルを作成して、内容を以下のようにしてみてください:
|
28
|
+
|
29
|
+
```html
|
30
|
+
<!DOCTYPE html>
|
31
|
+
<html>
|
32
|
+
<head>
|
33
|
+
<meta charset="UTF-8">
|
34
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
35
|
+
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
36
|
+
|
37
|
+
</head>
|
38
|
+
<body>
|
39
|
+
|
40
|
+
</body>
|
41
|
+
</html>
|
42
|
+
```
|
43
|
+
|
44
|
+
これは、TEIファイルを表示するための命令を入れるシェルとして機能します。TEIと同様に、HTMLファイルには`head`と呼ばれるヘッダーと`body`があります。CSS (Cascading Style Sheets)とJavaScriptファイルへのリンクを置き、CETEIceanを動かすためのJavaScriptを少し書きます。では、`<head>`以下の最初の空白行に以下のように記述してください:
|
45
|
+
|
46
|
+
```html
|
47
|
+
<link rel="stylesheet" href="css/tei.css">
|
48
|
+
```
|
49
|
+
|
50
|
+
これはCSSファイルをHTMLページにリンクし、そこに用意されたスタイル命令にアクセスできるようにします(まだ少ししかありませんが、これから追加していきます)。次に、スタイルシートのリンクの後に次の行を追加して、CETEIceanライブラリをリンクします:
|
51
|
+
|
52
|
+
```html
|
53
|
+
<script src="js/CETEI.js"></script>
|
54
|
+
```
|
55
|
+
|
56
|
+
これでファイルを読み込む準備ができました。index.html` ファイルにもう一つ `<script></script>` 要素を追加します。ただし、今回は `@src` 属性は付けません (この中にスクリプトを入れるからです)。
|
57
|
+
|
58
|
+
今回作成した`<script>`エレメントの内側に、以下の行を追記してください:
|
59
|
+
|
60
|
+
```js
|
61
|
+
let c = new CETEI();
|
62
|
+
c.getHTML5('fpn-washington.xml', function(data) {
|
63
|
+
document.getElementsByTagName("body")[0].appendChild(data);
|
64
|
+
});
|
65
|
+
```
|
66
|
+
|
67
|
+
CETEIceanを使うにあたっては、JavaScriptの専門家である必要はありませんが、基本的な動作を学んでおくことは有用です。もし、高度な動作をさせたいのであれば、JavaScriptの知識が必要でしょう。優れたガイドが[Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) (MDN)から多くの言語で提供されています。
|
68
|
+
|
69
|
+
では、上のコードの行を簡単に解説しておきましょう。上の行はいくつかのことを行っています:まず、変数 `c` が新しいCETEIオブジェクトとして定義されています。このオブジェクトはソースファイルの読み込みとスタイル指定を行なってくれます。次に、`c`にソースファイルを読み込んでHTMLカスタム要素に変換するように指示し、その結果を受け取ってindex.htmlファイルの`<body>`に配置する関数も与えています。`document.getElementsByTagName('body')` は組み込みの `document` オブジェクト (`document` はブラウザに読み込まれた HTML ドキュメント) で利用できる関数を呼び出して、すべての body 要素を見つけて Array (インデックス番号でアクセスできるリスト。Pythonで言うリストとほぼ同じ。) で返しています。body 要素はひとつだけなので、Array の1つ目(0から数えるので0番)にある項目を取得します。その項目であるHTML要素に、先ほど読み込んだTEIドキュメントを子要素として追加しています。
|
70
|
+
|
71
|
+
## TEI/XMLファイルをindex.htmlのJavscriptに読み込む
|
72
|
+
|
73
|
+
この時点で、Visual Studio Codeを使用している場合は、ctrl+shift+v か cmd+shift+v でHTMLプレビューを実行し、文書を見ることができるようになっているはずです。この機能を使用しようとしてプロンプトが表示されることがあれば、セキュリティ設定を無効にする必要がある場合があります。 Visual Studio Code を使っていない場合は、ドキュメントをウェブサーバーに置いてみるとよいでしょう。GitHub の使用に慣れているなら、GitHub Pages ([tutorial](https://guides.github.com/features/pages/)-テーマのステップをスキップして、読んでいるチュートリアルが入っているリポジトリだけを使うことができます) を使用することができます。Python 3がインストールされていれば、tutorialディレクトリで簡単なWebサーバをコマンドで実行することができます。
|
74
|
+
|
75
|
+
```bash
|
76
|
+
python3 -m http.server
|
77
|
+
```
|
78
|
+
|
79
|
+
あるいは、もし NodeJS をインストールしてある場合は以下のようにすることもできます:
|
80
|
+
|
81
|
+
```bash
|
82
|
+
npx serve
|
83
|
+
```
|
84
|
+
|
85
|
+
また、お使いのコンピュータにウェブサーバー機能が組み込まれている場合もありますし、[MAMP](https://www.mamp.info)などをインストールすることもできます。
|
86
|
+
|
87
|
+
現時点でのプレビューには様々な不具合があり、それを修正する必要があります。まず、CSSを追加してファイル内のTEI要素を処理することから始め、その後、CETEIceanの動作を追加してより洗練されたことを行うことにしましょう。もしまだXMLソースファイルをご覧になっていなければ、今すぐご覧になって、CETEIceanがすでに行っていることと、行っていないことを確認されるとよいでしょう。そうするとまず、画像付きの図が適切に読み込まれていることに気づくでしょう(画像がウェブサイトにホストされているため、オンラインの場合の話ですが)。teiHeader` のコンテンツは表示されないはずです。ページの始まりや行の始まりは無視されますが、`div`要素や`p`要素はブロックとしてフォーマットされます。少し調べると、ソースファイルの本文には19種類の要素があることがわかります:
|
88
|
+
|
89
|
+
* div
|
90
|
+
* head
|
91
|
+
* p
|
92
|
+
* pb
|
93
|
+
* hi
|
94
|
+
* figure
|
95
|
+
* graphic
|
96
|
+
* lb
|
97
|
+
* sic
|
98
|
+
* opener
|
99
|
+
* dateline
|
100
|
+
* closer
|
101
|
+
* salute
|
102
|
+
* signed
|
103
|
+
* emph
|
104
|
+
* lg
|
105
|
+
* l
|
106
|
+
* foreign
|
107
|
+
* name.
|
108
|
+
|
109
|
+
これらの中には、特別なスタイルや動作が必要ないものと、絶対に必要なものがあります:
|
110
|
+
|
111
|
+
`css/` フォルダにある `tei.css` ファイルを見てみましょう。ご覧のように、今のところ2つのルールしかありません:
|
112
|
+
|
113
|
+
```css
|
114
|
+
tei-div {
|
115
|
+
display: block;
|
116
|
+
}
|
117
|
+
tei-p {
|
118
|
+
display: block;
|
119
|
+
margin-top: .5em;
|
120
|
+
margin-bottom: .5em;
|
121
|
+
}
|
122
|
+
```
|
123
|
+
CSSセレクタの要素名には "tei "が付いていますが、これはCETEIceanがTEI要素をHTMLカスタム要素に変換するために行っていることです。これらのルールは、divがブロックとして表示され(新しい行で始まり、最後に改行される)、段落と同様に、後者も前後に多少のスペースを持つことを意味します。現在スタイルが設定されていない要素にどのようなスタイルを適用するかを決めるのは必ずしも容易ではありませんが、まずは簡単なケースをいくつか挙げてみましょう。ソースのXML文書では、目次と索引にリストを使っており、それらには常に `@type="simple"` が付いています。CSSを使って、これらをリストとしてフォーマットすることができます。以下を `tei.css` ファイルに追加してください:
|
124
|
+
|
125
|
+
```css
|
126
|
+
tei-list[type=simple] {
|
127
|
+
list-style-type: none;
|
128
|
+
}
|
129
|
+
tei-list[type=simple]>tei-item {
|
130
|
+
display: list-item;
|
131
|
+
}
|
132
|
+
```
|
133
|
+
|
134
|
+
上記のCSSの最初のセレクタ(tei-list[type=simple]の部分)は `<tei-list type="simple">` 要素にマッチし、リストアイテムが箇条書きや数字で装飾されてはならないことを「list-style-type: none」で指定しています。2 番目のセレクタ(tei-list[type=simple]>tei-itemの部分)は `<tei-list>` 要素をリストアイテムとして識別します (HTML の `<li>` と同じです)。この変更を行ってからプレビューを再読み込みすると、目次がリストとしてフォーマットされているのがわかると思います。余白や別のスタイルを追加して、見栄えをよくするために実験することもできます。また、`<hi rend="italics">` の要素も同様にして簡単に扱うことができます:
|
135
|
+
```css
|
136
|
+
tei-hi[rend=italics] {
|
137
|
+
font-style: italic;
|
138
|
+
}
|
139
|
+
```
|
140
|
+
|
141
|
+
改行(Line beginning)はちょっとややこしく、CSSの「擬似セレクタ」が必要です:
|
142
|
+
|
143
|
+
```css
|
144
|
+
tei-lb:before {
|
145
|
+
white-space: pre;
|
146
|
+
content: "\A";
|
147
|
+
}
|
148
|
+
```
|
149
|
+
|
150
|
+
上記のものは、各 `<tei-lb>` の前に改行文字 (「 \A 」) を挿入し、(例えばコードのブロックのように) 整形されたテキストとして扱うようにブラウザに指示するものです。HTMLでは通常、改行は書式設定のために無視されるため、このようにしなければなりません。CSSでできることは他にもありますが、これはCETEIceanの振る舞い(behaviors)を書式設定のために使うことができるかどうかを検討する良いポイントになります。HTMLには`<lb/>`に相当する要素、`<br>`があります。もし、`<tei-lb>`の中に`<br>`を入れたらどうでしょうか?それは、いくつかの behaviors を追加することで可能です。index.html の `<script></script>` タグ内のコードの1行目と2行目の間に、次のように追加します:
|
151
|
+
|
152
|
+
```js
|
153
|
+
let behaviors = {
|
154
|
+
"tei": {
|
155
|
+
"lb": ["<br>"],
|
156
|
+
}
|
157
|
+
};
|
158
|
+
c.addBehaviors(behaviors);
|
159
|
+
```
|
160
|
+
|
161
|
+
上記のものは、Javascriptオブジェクトを作成し、変数 `behaviors` に代入しています。そして、 `addBehaviors` メソッドを使用して、先ほど作成した `CETEI` オブジェクト(つまり、変数 `c` )にそれを渡します。behaviorsオブジェクトの中に、"tei"(すべてのカスタム要素のプレフィックス)というラベルの付いたセクションがあり、その中で要素のbehaviorsを定義しています。CETEIceanは "lb "のような要素名(接頭辞のないTEI名を使用していることに注意)にマッチするものを見つけると、それを適用します。`<lb/>`の場合には、1つの `<br>` 要素を含むリストを探し、そして、見つかった `<tei-lb>` 要素のコンテンツの前に `<br>` タグを挿入します。そして、ブラウザから見た最終的な結果は次のようになります:
|
162
|
+
|
163
|
+
```html
|
164
|
+
<tei-lb><br></tei-lb>
|
165
|
+
```
|
166
|
+
ブラウザは `<tei-lb>` が何をするものかわからないので無視しますが、`<br>` は何をするのかわかるので、改行として表示します。この挙動を利用する場合、`tei-lb`に対するCSSルールは必要ないことと、ソースファイルの中のすべての改行に対して2つの改行が付いてしまうことに注意してください。
|
167
|
+
|
168
|
+
Behaviors はこれよりもっと複雑にすることもできます。ソースファイルには `<div>` 要素があり、それらは入れ子になっていて、さらに `<head>` 要素を持つ場合があることにお気づきでしょう。HTML では、異なるレベルのヘッダーを `h1`、`h2`、`h3` などで表現します(最大で `h6` まで)。これをより洗練された動作で行うことができます。
|
169
|
+
|
170
|
+
```js
|
171
|
+
let behaviors = {
|
172
|
+
"tei": {
|
173
|
+
"head": function(e) {
|
174
|
+
let level = document.evaluate("count(ancestor::tei-div)", e, null, XPathResult.NUMBER_TYPE, null);
|
175
|
+
let result = document.createElement("h" + level.numberValue);
|
176
|
+
for (let n of Array.from(e.childNodes)) {
|
177
|
+
result.appendChild(n.cloneNode());
|
178
|
+
}
|
179
|
+
return result;
|
180
|
+
},
|
181
|
+
"lb": ["<br>"],
|
182
|
+
}
|
183
|
+
};
|
184
|
+
c.addBehaviors(behaviors);
|
185
|
+
```
|
186
|
+
|
187
|
+
上記の新しい「head」behaviorsは何か異なることをしています。Array の代わりに JavaScript の関数を使用し、パラメータとして処理される要素(`e`)を取得します。それは `<tei-head>` を含む `<tei-div>` の深さを含む `level` 変数を作り、そのレベルに対応する `<h[level]>` 要素を作り、現在の要素の内容をそこにコピーし、新しい header 要素を返します。CETEIceanは `<tei-head>` の内容を隠し、代わりにheading要素を表示します。ここで示したコードには潜在的なバグがあることに注意してください:非常に深くネストされたドキュメントでは、例えば `<h7>` 要素が生成されるかもしれませんが、それは有効なHTMLではありません。現在のソースは3階層以上にはなりませんが、`<h6>` 以上にならないようにするためのチェックを追加するとよいでしょう。
|
188
|
+
|
189
|
+
CETEIceanは多くのビルトイン動作を備えており、例えばTEIの`<graphic>`は、我々の側で何もしなくても処理されます。ビルトインされた動作にマッチを追加することで、ビルトインされた動作を置き換えたり、オフにしたりすることができます。もし、デフォルトでは隠されているTEI Headerの内容を表示したいのであれば、次の…
|
190
|
+
|
191
|
+
```js
|
192
|
+
"teiHeader": null,
|
193
|
+
```
|
194
|
+
|
195
|
+
…をbehaviorsオブジェクトに追加してください。その際、ヘッダーの内容に対応するCSSスタイルやbehaviorsを追加しておくとよいでしょう。
|
196
|
+
|
197
|
+
## 日本語ファイルのための補足
|
198
|
+
|
199
|
+
`<ruby>`を適切に表示させたい場合、一度生成したHTMLを修正して表示する方法を`example/index_ja.html`に示してあります。もっと良い方法があるかもしれませんが、とりあえず一例として参照してください。
|
200
|
+
|
201
|
+
|
202
|
+
このチュートリアルでは、ソースファイルに関するすべての可能性を検討するわけではありません。ソースのマークアップをどのように表現するかは、実験して決めてください。より完全な例は [example/](example) フォルダーにあります。また、オリジナルの HTML バージョンと TEI P4 ソースは <https://docsouth.unc.edu/fpn/washington/menu.html> で見ることができます。
|
@@ -0,0 +1,98 @@
|
|
1
|
+
p.break {
|
2
|
+
font-family: Arial, Helvetica, sans-serif;
|
3
|
+
font-size: 80%;
|
4
|
+
border-top: thin solid silver;
|
5
|
+
color: gray;
|
6
|
+
}
|
7
|
+
tei-byline {
|
8
|
+
display: block;
|
9
|
+
text-align: center;
|
10
|
+
}
|
11
|
+
tei-closer {
|
12
|
+
display: block;
|
13
|
+
}
|
14
|
+
tei-closer>tei-salute {
|
15
|
+
display: block;
|
16
|
+
}
|
17
|
+
tei-closer>tei-signed {
|
18
|
+
display: block;
|
19
|
+
text-align: right;
|
20
|
+
}
|
21
|
+
tei-div {
|
22
|
+
display: block;
|
23
|
+
}
|
24
|
+
tei-div[type=dedication]>tei-lg {
|
25
|
+
margin: auto;
|
26
|
+
text-align: center;
|
27
|
+
}
|
28
|
+
tei-docauthor {
|
29
|
+
display: block;
|
30
|
+
text-align: center;
|
31
|
+
}
|
32
|
+
tei-docauthor>tei-name {
|
33
|
+
display: block;
|
34
|
+
font-size: 2em;
|
35
|
+
}
|
36
|
+
tei-docimprint {
|
37
|
+
display: block;
|
38
|
+
margin-top: 10em;
|
39
|
+
text-align: center;
|
40
|
+
}
|
41
|
+
tei-doctitle>tei-titlepart {
|
42
|
+
display: block;
|
43
|
+
text-align: center;
|
44
|
+
}
|
45
|
+
tei-doctitle>tei-titlepart[type=main] {
|
46
|
+
font-size: 3em;
|
47
|
+
}
|
48
|
+
tei-doctitle>tei-titlepart[type=subtitle] {
|
49
|
+
font-size: 2em;
|
50
|
+
}
|
51
|
+
tei-emph[rend=bold] {
|
52
|
+
font-weight: bold;
|
53
|
+
}
|
54
|
+
tei-figure {
|
55
|
+
display: block;
|
56
|
+
margin-top: 1em;
|
57
|
+
margin-bottom: 1em;
|
58
|
+
text-align: center;
|
59
|
+
}
|
60
|
+
tei-figure>tei-p {
|
61
|
+
font-size: 80%;
|
62
|
+
font-family: Arial, Helvetica, sans-serif;
|
63
|
+
text-align: center;
|
64
|
+
}
|
65
|
+
tei-hi[rend=italics] {
|
66
|
+
font-style: italic;
|
67
|
+
}
|
68
|
+
tei-l {
|
69
|
+
display: block;
|
70
|
+
}
|
71
|
+
tei-lg {
|
72
|
+
display: block;
|
73
|
+
margin-left: 5em;
|
74
|
+
}
|
75
|
+
tei-list[type=simple] {
|
76
|
+
list-style-type: none;
|
77
|
+
}
|
78
|
+
tei-list[type=simple]>tei-item {
|
79
|
+
display: list-item;
|
80
|
+
}
|
81
|
+
tei-p {
|
82
|
+
display: block;
|
83
|
+
margin-top: .5em;
|
84
|
+
margin-bottom: .5em;
|
85
|
+
text-align: justify;
|
86
|
+
}
|
87
|
+
tei-tei {
|
88
|
+
font-family: Georgia, 'Times New Roman', Times, serif;
|
89
|
+
}
|
90
|
+
tei-text {
|
91
|
+
display: block;
|
92
|
+
width: 750px;
|
93
|
+
margin: auto;
|
94
|
+
}
|
95
|
+
tei-titlepage {
|
96
|
+
display: block;
|
97
|
+
}
|
98
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
7
|
+
<link rel="stylesheet" href="css/tei.css">
|
8
|
+
<script src="../js/CETEI.js"></script>
|
9
|
+
<script>
|
10
|
+
let c = new CETEI();
|
11
|
+
let behaviors = {
|
12
|
+
"tei": {
|
13
|
+
"head": function(e) {
|
14
|
+
let level = document.evaluate("count(ancestor::tei-div)", e, null, XPathResult.NUMBER_TYPE, null);
|
15
|
+
let result = document.createElement("h" + (level.numberValue>7 ? 7 : level.numberValue));
|
16
|
+
for (let n of Array.from(e.childNodes)) {
|
17
|
+
result.appendChild(n.cloneNode());
|
18
|
+
}
|
19
|
+
return result;
|
20
|
+
},
|
21
|
+
"lb": ["<br>"],
|
22
|
+
/* Insert a <p> with the content of the <pb>'s @n attribute inside it
|
23
|
+
Add a line above with CSS */
|
24
|
+
"pb": ["<p class=\"break\">$@n</p>"],
|
25
|
+
}
|
26
|
+
};
|
27
|
+
c.addBehaviors(behaviors);
|
28
|
+
c.getHTML5('../fpn-washington.xml', function(data){
|
29
|
+
document.getElementsByTagName('body')[0].appendChild(data);
|
30
|
+
});
|
31
|
+
</script>
|
32
|
+
</head>
|
33
|
+
<body>
|
34
|
+
|
35
|
+
</body>
|
36
|
+
</html>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
7
|
+
<link rel="stylesheet" href="css/tei.css">
|
8
|
+
<script src="../js/CETEI.js"></script>
|
9
|
+
<script>
|
10
|
+
let c = new CETEI();
|
11
|
+
let behaviors = {
|
12
|
+
"tei": {
|
13
|
+
"head": function(e) {
|
14
|
+
let level = document.evaluate("count(ancestor::tei-div)", e, null, XPathResult.NUMBER_TYPE, null);
|
15
|
+
let result = document.createElement("h" + (level.numberValue>7 ? 7 : level.numberValue));
|
16
|
+
for (let n of Array.from(e.childNodes)) {
|
17
|
+
result.appendChild(n.cloneNode());
|
18
|
+
}
|
19
|
+
return result;
|
20
|
+
},
|
21
|
+
"lb": ["<br>"],
|
22
|
+
/* Insert a <p> with the content of the <pb>'s @n attribute inside it
|
23
|
+
Add a line above with CSS */
|
24
|
+
"pb": ["<p class=\"break\">$@n</p>"],
|
25
|
+
}
|
26
|
+
};
|
27
|
+
c.addBehaviors(behaviors);
|
28
|
+
c.getHTML5('../meros.xml', function(data){
|
29
|
+
document.getElementsByTagName('body')[0].appendChild(data);
|
30
|
+
let ruby = document.querySelectorAll('tei-ruby')
|
31
|
+
ruby.forEach(function(e1){
|
32
|
+
let rbt = e1.querySelectorAll('tei-rb,tei-rt')
|
33
|
+
let ruby = document.createElement('ruby');
|
34
|
+
rbt.forEach(function(e2){
|
35
|
+
let rbt = document.createElement(e2.tagName.replace(/TEI-/,''));
|
36
|
+
rbt.textContent = e2.textContent;
|
37
|
+
ruby.append(rbt);
|
38
|
+
});
|
39
|
+
e1.replaceWith(ruby);
|
40
|
+
});
|
41
|
+
});
|
42
|
+
</script>
|
43
|
+
</head>
|
44
|
+
<body>
|
45
|
+
|
46
|
+
</body>
|
47
|
+
</html>
|