Merge pull request #15 from eugenp/master

Update from master
This commit is contained in:
Donato Rimenti 2020-07-02 17:33:17 +02:00 committed by GitHub
commit 331285f1dc
4939 changed files with 56471 additions and 490917 deletions

4
.gitignore vendored
View File

@ -85,7 +85,3 @@ transaction.log
*-shell.log
apache-cxf/cxf-aegis/baeldung.xml
apache-fop/src/test/resources/input.xml
apache-fop/src/test/resources/output_herold.pdf
apache-fop/src/test/resources/output_html2fo.pdf
apache-fop/src/test/resources/output_jtidy.pdf

View File

@ -13,6 +13,5 @@ This module contains articles about algorithms. Some classes of algorithms, e.g.
- [Checking if a Java Graph has a Cycle](https://www.baeldung.com/java-graph-has-a-cycle)
- [A Guide to the Folding Technique in Java](https://www.baeldung.com/folding-hashing-technique)
- [Creating a Triangle with for Loops in Java](https://www.baeldung.com/java-print-triangle)
- [Efficient Word Frequency Calculator in Java](https://www.baeldung.com/java-word-frequency)
- [The K-Means Clustering Algorithm in Java](https://www.baeldung.com/java-k-means-clustering-algorithm)
- More articles: [[<-- prev]](/algorithms-miscellaneous-2) [[next -->]](/algorithms-miscellaneous-4)

View File

@ -15,8 +15,5 @@ This module contains articles about algorithms. Some classes of algorithms, e.g.
- [Maximum Subarray Problem](https://www.baeldung.com/java-maximum-subarray)
- [How to Merge Two Sorted Arrays](https://www.baeldung.com/java-merge-sorted-arrays)
- [Median of Stream of Integers using Heap](https://www.baeldung.com/java-stream-integers-median-using-heap)
- [Kruskals Algorithm for Spanning Trees](https://www.baeldung.com/java-spanning-trees-kruskal)
- [Balanced Brackets Algorithm in Java](https://www.baeldung.com/java-balanced-brackets-algorithm)
- [Efficiently Merge Sorted Java Sequences](https://www.baeldung.com/java-merge-sorted-sequences)
- [Introduction to Greedy Algorithms with Java](https://www.baeldung.com/java-greedy-algorithms)
- More articles: [[<-- prev]](/../algorithms-miscellaneous-4)
- More articles: [[<-- prev]](/../algorithms-miscellaneous-4) [[next -->]](/../algorithms-miscellaneous-6)

View File

@ -25,12 +25,6 @@
<artifactId>commons-math3</artifactId>
<version>${commons-math3.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>pl.allegro.finance</groupId>
<artifactId>tradukisto</artifactId>
@ -41,11 +35,6 @@
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
@ -78,7 +67,6 @@
<commons-codec.version>1.11</commons-codec.version>
<commons-math3.version>3.6.1</commons-math3.version>
<guava.version>28.1-jre</guava.version>
<jackson.version>2.10.2</jackson.version>
<junit.platform.version>1.6.0</junit.platform.version>
</properties>

View File

@ -1,61 +0,0 @@
package com.baeldung.algorithms.boruvka;
public class BoruvkaMST {
private static Tree mst = new Tree();
private static int totalWeight;
public BoruvkaMST(Graph graph) {
DisjointSet dSet = new DisjointSet(graph.getNodes());
// repeat at most log N times or until we have N-1 edges
for (int t = 1; t < graph.getNodes() && mst.getEdgeCount() < graph.getNodes() - 1; t = t + t) {
// foreach tree in forest, find closest edge
Edge[] closestEdgeArray = new Edge[graph.getNodes()];
for (Edge edge : graph.getAllEdges()) {
int first = edge.getFirst();
int second = edge.getSecond();
int firstParent = dSet.getParent(first);
int secondParent = dSet.getParent(second);
if (firstParent == secondParent) {
continue; // same tree
}
if (closestEdgeArray[firstParent] == null || edge.getWeight() < closestEdgeArray[firstParent].getWeight()) {
closestEdgeArray[firstParent] = edge;
}
if (closestEdgeArray[secondParent] == null || edge.getWeight() < closestEdgeArray[secondParent].getWeight()) {
closestEdgeArray[secondParent] = edge;
}
}
// add newly discovered edges to MST
for (int i = 0; i < graph.getNodes(); i++) {
Edge edge = closestEdgeArray[i];
if (edge != null) {
int first = edge.getFirst();
int second = edge.getSecond();
// don't add the same edge twice
if (dSet.getParent(first) != dSet.getParent(second)) {
mst.addEdge(edge);
totalWeight += edge.getWeight();
dSet.union(first, second);
}
}
}
}
}
public Iterable<Edge> getMST() {
return mst;
}
public int getTotalWeight() {
return totalWeight;
}
public String toString() {
return "MST: " + mst.toString() + " | Total Weight: " + totalWeight;
}
}

View File

@ -1,49 +0,0 @@
package com.baeldung.algorithms.boruvka;
import java.util.Arrays;
public class DisjointSet {
private int[] nodeParents;
private int[] nodeRanks;
public DisjointSet(int n) {
nodeParents = new int[n];
nodeRanks = new int[n];
for (int i = 0; i < n; i++) {
nodeParents[i] = i;
nodeRanks[i] = 0;
}
}
public int getParent(int node) {
while (node != nodeParents[node]) {
node = nodeParents[node];
}
return node;
}
public void union(int node1, int node2) {
int node1Parent = getParent(node1);
int node2Parent = getParent(node2);
if (node1Parent == node2Parent) {
return;
}
if (nodeRanks[node1Parent] < nodeRanks[node2Parent]) {
nodeParents[node1Parent] = node2Parent;
}
else if (nodeRanks[node1Parent] > nodeRanks[node2Parent]) {
nodeParents[node2Parent] = node1Parent;
}
else {
nodeParents[node2Parent] = node1Parent;
nodeRanks[node1Parent]++;
}
}
public String toString() {
return "Parent: " + Arrays.toString(nodeParents) + "Rank: " + Arrays.toString(nodeRanks);
}
}

View File

@ -1,40 +0,0 @@
package com.baeldung.algorithms.boruvka;
public class Edge {
private final int first;
private final int second;
private final int weight;
public Edge(int first, int second, int weight) {
this.first = first;
this.second = second;
this.weight = weight;
}
public double getWeight() {
return weight;
}
public int getFirst() {
return first;
}
public int getSecond() {
return second;
}
public int getOtherNode(int firstNode) {
int secondNode = 0;
if (firstNode == first)
secondNode = second;
else if (firstNode == second)
secondNode = first;
return secondNode;
}
public String toString() {
return String.format("%d-%d %d", first, second, weight);
}
}

View File

@ -1,64 +0,0 @@
package com.baeldung.algorithms.boruvka;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
public class Graph {
private int nodes;
private int edges;
private Tree[] trees;
public Graph(Input jsonGraph) throws JsonParseException, JsonMappingException, IOException {
nodes = jsonGraph.getNodes();
trees = (Tree[]) new Tree[nodes];
for (int i = 0; i < nodes; i++) {
trees[i] = new Tree();
}
int edgesFromInput = jsonGraph.getEdges();
for (int i = 0; i < edgesFromInput; i++) {
int first = jsonGraph.getEdgeList()
.get(i)
.getFirst();
int second = jsonGraph.getEdgeList()
.get(i)
.getSecond();
int weight = jsonGraph.getEdgeList()
.get(i)
.getWeight();
Edge edge = new Edge(first, second, weight);
trees[first].addEdge(edge);
trees[second].addEdge(edge);
edges++;
}
}
public int getNodes() {
return nodes;
}
public int getEdges() {
return edges;
}
public Iterable<Edge> iterableTree(int i) {
return trees[i];
}
public Iterable<Edge> getAllEdges() {
Iterable<Edge> list = new Tree();
for (int i = 0; i < nodes; i++) {
for (Edge edge : iterableTree(i)) {
if (edge.getOtherNode(i) > i) {
((Tree) list).addEdge(edge);
}
}
}
return list;
}
}

View File

@ -1,65 +0,0 @@
package com.baeldung.algorithms.boruvka;
import java.util.List;
public class Input {
private int nodes;
private int edges;
private List<E> edgeList;
public int getNodes() {
return nodes;
}
public void setNodes(int nodes) {
this.nodes = nodes;
}
public int getEdges() {
return edges;
}
public void setEdges(int edges) {
this.edges = edges;
}
public List<E> getEdgeList() {
return edgeList;
}
public void setEdgeList(List<E> edgeList) {
this.edgeList = edgeList;
}
static class E {
private int first;
private int second;
private int weight;
public int getFirst() {
return first;
}
public void setFirst(int first) {
this.first = first;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
this.second = second;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
}

View File

@ -1,63 +0,0 @@
package com.baeldung.algorithms.boruvka;
import java.util.Iterator;
public class Tree implements Iterable<Edge> {
private Node root;
private int edgeCount;
private static class Node {
private Edge edge;
private Node next;
public String toString() {
String nextStr = next != null ? next.toString() : "";
return edge.toString() + " | " + nextStr;
}
}
public Tree() {
root = null;
edgeCount = 0;
}
public int getEdgeCount() {
return edgeCount;
}
public void addEdge(Edge edge) {
Node oldRoot = root;
root = new Node();
root.edge = edge;
root.next = oldRoot;
edgeCount++;
}
public String toString() {
String rootStr = root != null ? root.toString() : "";
return "Tree: " + rootStr + "Size: " + edgeCount;
}
public Iterator<Edge> iterator() {
return new LinkedIterator(root);
}
private class LinkedIterator implements Iterator<Edge> {
private Node current;
public LinkedIterator(Node root) {
current = root;
}
public boolean hasNext() {
return current != null;
}
public Edge next() {
Edge edge = current.edge;
current = current.next;
return edge;
}
}
}

View File

@ -1,48 +0,0 @@
package com.baeldung.algorithms.boruvka;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.junit.Before;
import org.junit.Test;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class BoruvkaUnitTest {
private Input input;
private static String INPUT_JSON = "/input.json";
@Before
public void convertInputJsonToObject() throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
StringBuilder jsonStr = new StringBuilder();
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(BoruvkaMST.class.getResourceAsStream(INPUT_JSON)))) {
String line;
while ((line = bufferedReader.readLine()) != null) {
jsonStr.append(line)
.append("\n");
}
}
input = mapper.readValue(jsonStr.toString(), Input.class);
}
@Test
public void givenInputGraph_whenBoruvkaPerformed_thenMinimumSpanningTree() throws JsonParseException, JsonMappingException, IOException {
Graph graph = new Graph(input);
BoruvkaMST boruvkaMST = new BoruvkaMST(graph);
Tree mst = (Tree) boruvkaMST.getMST();
assertEquals(30, boruvkaMST.getTotalWeight());
assertEquals(4, mst.getEdgeCount());
}
}

View File

@ -0,0 +1,10 @@
### Relevant Articles:
- [Boruvkas Algorithm for Minimum Spanning Trees](https://www.baeldung.com/java-boruvka-algorithm)
- [Gradient Descent in Java](https://www.baeldung.com/java-gradient-descent)
- [Kruskals Algorithm for Spanning Trees](https://www.baeldung.com/java-spanning-trees-kruskal)
- [Balanced Brackets Algorithm in Java](https://www.baeldung.com/java-balanced-brackets-algorithm)
- [Efficiently Merge Sorted Java Sequences](https://www.baeldung.com/java-merge-sorted-sequences)
- [Introduction to Greedy Algorithms with Java](https://www.baeldung.com/java-greedy-algorithms)
- [The Caesar Cipher in Java](https://www.baeldung.com/java-caesar-cipher)
- More articles: [[<-- prev]](/../algorithms-miscellaneous-5)

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>algorithms-miscellaneous-6</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>algorithms-miscellaneous-6</name>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>${junit.platform.version}</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${org.assertj.core.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>${commons-math3.version}</version>
</dependency>
</dependencies>
<properties>
<guava.version>28.1-jre</guava.version>
<org.assertj.core.version>3.9.0</org.assertj.core.version>
<junit.platform.version>1.6.0</junit.platform.version>
<commons-math3.version>3.6.1</commons-math3.version>
</properties>
</project>

View File

@ -0,0 +1,84 @@
package com.baeldung.algorithms.boruvka;
import com.google.common.graph.EndpointPair;
import com.google.common.graph.MutableValueGraph;
import com.google.common.graph.ValueGraphBuilder;
public class BoruvkaMST {
private static MutableValueGraph<Integer, Integer> mst = ValueGraphBuilder.undirected()
.build();
private static int totalWeight;
public BoruvkaMST(MutableValueGraph<Integer, Integer> graph) {
int size = graph.nodes().size();
UnionFind uf = new UnionFind(size);
// repeat at most log N times or until we have N-1 edges
for (int t = 1; t < size && mst.edges().size() < size - 1; t = t + t) {
EndpointPair<Integer>[] closestEdgeArray = new EndpointPair[size];
// foreach tree in graph, find closest edge
for (EndpointPair<Integer> edge : graph.edges()) {
int u = edge.nodeU();
int v = edge.nodeV();
int uParent = uf.find(u);
int vParent = uf.find(v);
if (uParent == vParent) {
continue; // same tree
}
int weight = graph.edgeValueOrDefault(u, v, 0);
if (closestEdgeArray[uParent] == null) {
closestEdgeArray[uParent] = edge;
}
if (closestEdgeArray[vParent] == null) {
closestEdgeArray[vParent] = edge;
}
int uParentWeight = graph.edgeValueOrDefault(closestEdgeArray[uParent].nodeU(), closestEdgeArray[uParent].nodeV(), 0);
int vParentWeight = graph.edgeValueOrDefault(closestEdgeArray[vParent].nodeU(), closestEdgeArray[vParent].nodeV(), 0);
if (weight < uParentWeight) {
closestEdgeArray[uParent] = edge;
}
if (weight < vParentWeight) {
closestEdgeArray[vParent] = edge;
}
}
// add newly discovered edges to MST
for (int i = 0; i < size; i++) {
EndpointPair<Integer> edge = closestEdgeArray[i];
if (edge != null) {
int u = edge.nodeU();
int v = edge.nodeV();
int weight = graph.edgeValueOrDefault(u, v, 0);
// don't add the same edge twice
if (uf.find(u) != uf.find(v)) {
mst.putEdgeValue(u, v, weight);
totalWeight += weight;
uf.union(u, v);
}
}
}
}
}
public MutableValueGraph<Integer, Integer> getMST() {
return mst;
}
public int getTotalWeight() {
return totalWeight;
}
public String toString() {
return "MST: " + mst.toString() + " | Total Weight: " + totalWeight;
}
}

View File

@ -0,0 +1,39 @@
package com.baeldung.algorithms.boruvka;
public class UnionFind {
private int[] parents;
private int[] ranks;
public UnionFind(int n) {
parents = new int[n];
ranks = new int[n];
for (int i = 0; i < n; i++) {
parents[i] = i;
ranks[i] = 0;
}
}
public int find(int u) {
while (u != parents[u]) {
u = parents[u];
}
return u;
}
public void union(int u, int v) {
int uParent = find(u);
int vParent = find(v);
if (uParent == vParent) {
return;
}
if (ranks[uParent] < ranks[vParent]) {
parents[uParent] = vParent;
} else if (ranks[uParent] > ranks[vParent]) {
parents[vParent] = uParent;
} else {
parents[vParent] = uParent;
ranks[uParent]++;
}
}
}

View File

@ -0,0 +1,33 @@
package com.baeldung.algorithms.gradientdescent;
import java.util.function.Function;
public class GradientDescent {
private final double precision = 0.000001;
public double findLocalMinimum(Function<Double, Double> f, double initialX) {
double stepCoefficient = 0.1;
double previousStep = 1.0;
double currentX = initialX;
double previousX = initialX;
double previousY = f.apply(previousX);
int iter = 100;
currentX += stepCoefficient * previousY;
while (previousStep > precision && iter > 0) {
iter--;
double currentY = f.apply(currentX);
if (currentY > previousY) {
stepCoefficient = -stepCoefficient / 2;
}
previousX = currentX;
currentX += stepCoefficient * previousY;
previousY = currentY;
previousStep = StrictMath.abs(currentX - previousX);
}
return currentX;
}
}

View File

@ -0,0 +1,208 @@
package com.baeldung.algorithms.play2048;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Board {
private static final Logger LOG = LoggerFactory.getLogger(Board.class);
private final int[][] board;
private final int score;
public Board(int size) {
assert(size > 0);
this.board = new int[size][];
this.score = 0;
for (int x = 0; x < size; ++x) {
this.board[x] = new int[size];
for (int y = 0; y < size; ++y) {
board[x][y] = 0;
}
}
}
private Board(int[][] board, int score) {
this.score = score;
this.board = new int[board.length][];
for (int x = 0; x < board.length; ++x) {
this.board[x] = Arrays.copyOf(board[x], board[x].length);
}
}
public int getSize() {
return board.length;
}
public int getScore() {
return score;
}
public int getCell(Cell cell) {
int x = cell.getX();
int y = cell.getY();
assert(x >= 0 && x < board.length);
assert(y >= 0 && y < board.length);
return board[x][y];
}
public boolean isEmpty(Cell cell) {
return getCell(cell) == 0;
}
public List<Cell> emptyCells() {
List<Cell> result = new ArrayList<>();
for (int x = 0; x < board.length; ++x) {
for (int y = 0; y < board[x].length; ++y) {
Cell cell = new Cell(x, y);
if (isEmpty(cell)) {
result.add(cell);
}
}
}
return result;
}
public Board placeTile(Cell cell, int number) {
if (!isEmpty(cell)) {
throw new IllegalArgumentException("That cell is not empty");
}
Board result = new Board(this.board, this.score);
result.board[cell.getX()][cell.getY()] = number;
return result;
}
public Board move(Move move) {
// Clone the board
int[][] tiles = new int[this.board.length][];
for (int x = 0; x < this.board.length; ++x) {
tiles[x] = Arrays.copyOf(this.board[x], this.board[x].length);
}
LOG.debug("Before move: {}", Arrays.deepToString(tiles));
// If we're doing an Left/Right move then transpose the board to make it a Up/Down move
if (move == Move.LEFT || move == Move.RIGHT) {
tiles = transpose(tiles);
LOG.debug("After transpose: {}", Arrays.deepToString(tiles));
}
// If we're doing a Right/Down move then reverse the board.
// With the above we're now always doing an Up move
if (move == Move.DOWN || move == Move.RIGHT) {
tiles = reverse(tiles);
LOG.debug("After reverse: {}", Arrays.deepToString(tiles));
}
LOG.debug("Ready to move: {}", Arrays.deepToString(tiles));
// Shift everything up
int[][] result = new int[tiles.length][];
int newScore = 0;
for (int x = 0; x < tiles.length; ++x) {
LinkedList<Integer> thisRow = new LinkedList<>();
for (int y = 0; y < tiles[0].length; ++y) {
if (tiles[x][y] > 0) {
thisRow.add(tiles[x][y]);
}
}
LOG.debug("Unmerged row: {}", thisRow);
LinkedList<Integer> newRow = new LinkedList<>();
while (thisRow.size() >= 2) {
int first = thisRow.pop();
int second = thisRow.peek();
LOG.debug("Looking at numbers {} and {}", first, second);
if (second == first) {
LOG.debug("Numbers match, combining");
int newNumber = first * 2;
newRow.add(newNumber);
newScore += newNumber;
thisRow.pop();
} else {
LOG.debug("Numbers don't match");
newRow.add(first);
}
}
newRow.addAll(thisRow);
LOG.debug("Merged row: {}", newRow);
result[x] = new int[tiles[0].length];
for (int y = 0; y < tiles[0].length; ++y) {
if (newRow.isEmpty()) {
result[x][y] = 0;
} else {
result[x][y] = newRow.pop();
}
}
}
LOG.debug("After moves: {}", Arrays.deepToString(result));
// Un-reverse the board
if (move == Move.DOWN || move == Move.RIGHT) {
result = reverse(result);
LOG.debug("After reverse: {}", Arrays.deepToString(result));
}
// Un-transpose the board
if (move == Move.LEFT || move == Move.RIGHT) {
result = transpose(result);
LOG.debug("After transpose: {}", Arrays.deepToString(result));
}
return new Board(result, this.score + newScore);
}
private static int[][] transpose(int[][] input) {
int[][] result = new int[input.length][];
for (int x = 0; x < input.length; ++x) {
result[x] = new int[input[0].length];
for (int y = 0; y < input[0].length; ++y) {
result[x][y] = input[y][x];
}
}
return result;
}
private static int[][] reverse(int[][] input) {
int[][] result = new int[input.length][];
for (int x = 0; x < input.length; ++x) {
result[x] = new int[input[0].length];
for (int y = 0; y < input[0].length; ++y) {
result[x][y] = input[x][input.length - y - 1];
}
}
return result;
}
@Override
public String toString() {
return Arrays.deepToString(board);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Board board1 = (Board) o;
return Arrays.deepEquals(board, board1.board);
}
@Override
public int hashCode() {
return Arrays.deepHashCode(board);
}
}

View File

@ -0,0 +1,26 @@
package com.baeldung.algorithms.play2048;
import java.util.StringJoiner;
public class Cell {
private int x;
private int y;
public Cell(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public String toString() {
return new StringJoiner(", ", Cell.class.getSimpleName() + "[", "]").add("x=" + x).add("y=" + y).toString();
}
}

View File

@ -0,0 +1,27 @@
package com.baeldung.algorithms.play2048;
import java.security.SecureRandom;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Computer {
private static final Logger LOG = LoggerFactory.getLogger(Computer.class);
private final SecureRandom rng = new SecureRandom();
public Board makeMove(Board input) {
List<Cell> emptyCells = input.emptyCells();
LOG.info("Number of empty cells: {}", emptyCells.size());
double numberToPlace = rng.nextDouble();
LOG.info("New number probability: {}", numberToPlace);
int indexToPlace = rng.nextInt(emptyCells.size());
Cell cellToPlace = emptyCells.get(indexToPlace);
LOG.info("Placing number into empty cell: {}", cellToPlace);
return input.placeTile(cellToPlace, numberToPlace >= 0.9 ? 4 : 2);
}
}

View File

@ -0,0 +1,126 @@
package com.baeldung.algorithms.play2048;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.math3.util.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Human {
private static final Logger LOG = LoggerFactory.getLogger(Human.class);
public Board makeMove(Board input) {
// For each move in MOVE
// Generate board from move
// Generate Score for Board
// Return board with the best score
//
// Generate Score
// If Depth Limit
// Return Final Score
// Total Score = 0
// For every empty square in new board
// Generate board with "2" in square
// Calculate Score
// Total Score += (Score * 0.9)
// Generate board with "4" in square
// Calculate Score
// Total Score += (Score * 0.1)
//
// Calculate Score
// For each move in MOVE
// Generate board from move
// Generate score for board
// Return the best generated score
return Arrays.stream(Move.values())
.parallel()
.map(input::move)
.filter(board -> !board.equals(input))
.max(Comparator.comparingInt(board -> generateScore(board, 0)))
.orElse(input);
}
private int generateScore(Board board, int depth) {
if (depth >= 3) {
int finalScore = calculateFinalScore(board);
LOG.debug("Final score for board {}: {}", board,finalScore);
return finalScore;
}
return board.emptyCells().stream()
.parallel()
.flatMap(cell -> Stream.of(new Pair<>(cell, 2), new Pair<>(cell, 4)))
.mapToInt(move -> {
LOG.debug("Simulating move {} at depth {}", move, depth);
Board newBoard = board.placeTile(move.getFirst(), move.getSecond());
int boardScore = calculateScore(newBoard, depth + 1);
int calculatedScore = (int) (boardScore * (move.getSecond() == 2 ? 0.9 : 0.1));
LOG.debug("Calculated score for board {} and move {} at depth {}: {}", newBoard, move, depth, calculatedScore);
return calculatedScore;
})
.sum();
}
private int calculateScore(Board board, int depth) {
return Arrays.stream(Move.values())
.parallel()
.map(board::move)
.filter(moved -> !moved.equals(board))
.mapToInt(newBoard -> generateScore(newBoard, depth))
.max()
.orElse(0);
}
private int calculateFinalScore(Board board) {
List<List<Integer>> rowsToScore = new ArrayList<>();
for (int i = 0; i < board.getSize(); ++i) {
List<Integer> row = new ArrayList<>();
List<Integer> col = new ArrayList<>();
for (int j = 0; j < board.getSize(); ++j) {
row.add(board.getCell(new Cell(i, j)));
col.add(board.getCell(new Cell(j, i)));
}
rowsToScore.add(row);
rowsToScore.add(col);
}
return rowsToScore.stream()
.parallel()
.mapToInt(row -> {
List<Integer> preMerged = row.stream()
.filter(value -> value != 0)
.collect(Collectors.toList());
int numMerges = 0;
int monotonicityLeft = 0;
int monotonicityRight = 0;
for (int i = 0; i < preMerged.size() - 1; ++i) {
Integer first = preMerged.get(i);
Integer second = preMerged.get(i + 1);
if (first.equals(second)) {
++numMerges;
} else if (first > second) {
monotonicityLeft += first - second;
} else {
monotonicityRight += second - first;
}
}
int score = 1000;
score += 250 * row.stream().filter(value -> value == 0).count();
score += 750 * numMerges;
score -= 10 * row.stream().mapToInt(value -> value).sum();
score -= 50 * Math.min(monotonicityLeft, monotonicityRight);
return score;
})
.sum();
}
}

View File

@ -0,0 +1,8 @@
package com.baeldung.algorithms.play2048;
public enum Move {
UP,
DOWN,
LEFT,
RIGHT
}

View File

@ -0,0 +1,73 @@
package com.baeldung.algorithms.play2048;
public class Play2048 {
private static final int SIZE = 4;
private static final int INITIAL_NUMBERS = 2;
public static void main(String[] args) {
// The board and players
Board board = new Board(SIZE);
Computer computer = new Computer();
Human human = new Human();
// The computer has two moves first
System.out.println("Setup");
System.out.println("=====");
for (int i = 0; i < INITIAL_NUMBERS; ++i) {
board = computer.makeMove(board);
}
printBoard(board);
do {
board = human.makeMove(board);
System.out.println("Human move");
System.out.println("==========");
printBoard(board);
board = computer.makeMove(board);
System.out.println("Computer move");
System.out.println("=============");
printBoard(board);
} while (!board.emptyCells().isEmpty());
System.out.println("Final Score: " + board.getScore());
}
private static void printBoard(Board board) {
StringBuilder topLines = new StringBuilder();
StringBuilder midLines = new StringBuilder();
for (int x = 0; x < board.getSize(); ++x) {
topLines.append("+--------");
midLines.append("| ");
}
topLines.append("+");
midLines.append("|");
for (int y = 0; y < board.getSize(); ++y) {
System.out.println(topLines);
System.out.println(midLines);
for (int x = 0; x < board.getSize(); ++x) {
Cell cell = new Cell(x, y);
System.out.print("|");
if (board.isEmpty(cell)) {
System.out.print(" ");
} else {
StringBuilder output = new StringBuilder(Integer.toString(board.getCell(cell)));
while (output.length() < 8) {
output.append(" ");
if (output.length() < 8) {
output.insert(0, " ");
}
}
System.out.print(output);
}
}
System.out.println("|");
System.out.println(midLines);
}
System.out.println(topLines);
System.out.println("Score: " + board.getScore());
}
}

View File

@ -0,0 +1,37 @@
package com.baeldung.algorithms.boruvka;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.Before;
import org.junit.Test;
import com.google.common.graph.MutableValueGraph;
import com.google.common.graph.ValueGraphBuilder;
public class BoruvkaUnitTest {
private MutableValueGraph<Integer, Integer> graph;
@Before
public void setup() {
graph = ValueGraphBuilder.undirected()
.build();
graph.putEdgeValue(0, 1, 8);
graph.putEdgeValue(0, 2, 5);
graph.putEdgeValue(1, 2, 9);
graph.putEdgeValue(1, 3, 11);
graph.putEdgeValue(2, 3, 15);
graph.putEdgeValue(2, 4, 10);
graph.putEdgeValue(3, 4, 7);
}
@Test
public void givenInputGraph_whenBoruvkaPerformed_thenMinimumSpanningTree() {
BoruvkaMST boruvkaMST = new BoruvkaMST(graph);
MutableValueGraph<Integer, Integer> mst = boruvkaMST.getMST();
assertEquals(30, boruvkaMST.getTotalWeight());
assertEquals(4, mst.edges().size());
}
}

View File

@ -0,0 +1,20 @@
package com.baeldung.algorithms.gradientdescent;
import static org.junit.Assert.assertTrue;
import java.util.function.Function;
import org.junit.Test;
public class GradientDescentUnitTest {
@Test
public void givenFunction_whenStartingPointIsOne_thenLocalMinimumIsFound() {
Function<Double, Double> df = x ->
StrictMath.abs(StrictMath.pow(x, 3)) - (3 * StrictMath.pow(x, 2)) + x;
GradientDescent gd = new GradientDescent();
double res = gd.findLocalMinimum(df, 1);
assertTrue(res > 1.78);
assertTrue(res < 1.84);
}
}

View File

@ -1,3 +1,7 @@
### Relevant Articles:
- [Sorting a String Alphabetically in Java](https://www.baeldung.com/java-sort-string-alphabetically)
- [Sorting Strings by Contained Numbers in Java](https://www.baeldung.com/java-sort-strings-contained-numbers)
- [How an In-Place Sorting Algorithm Works](https://www.baeldung.com/java-in-place-sorting)
- [Partitioning and Sorting Arrays with Many Repeated Entries](https://www.baeldung.com/java-sorting-arrays-with-repeated-entries)
- More articles: [[<-- prev]](/algorithms-sorting)

View File

@ -1,4 +1,4 @@
package com.baeldung.algorithms.sort.bynumber;
package com.baeldung.algorithms.bynumber;
import java.util.Comparator;

View File

@ -5,21 +5,21 @@ import static com.baeldung.algorithms.quicksort.SortingUtils.swap;
public class DutchNationalFlagPartioning {
public static Partition partition(int[] a, int begin, int end) {
public static Partition partition(int[] input, int begin, int end) {
int lt = begin, current = begin, gt = end;
int partitioningValue = a[begin];
int partitioningValue = input[begin];
while (current <= gt) {
int compareCurrent = compare(a[current], partitioningValue);
int compareCurrent = compare(input[current], partitioningValue);
switch (compareCurrent) {
case -1:
swap(a, current++, lt++);
swap(input, current++, lt++);
break;
case 0:
current++;
break;
case 1:
swap(a, current, gt--);
swap(input, current, gt--);
break;
}
}

View File

@ -1,6 +1,5 @@
package com.baeldung.algorithms.sort.bynumber;
package com.baeldung.algorithms.bynumber;
import com.baeldung.algorithms.sort.bynumber.NaturalOrderComparators;
import org.junit.Test;
import java.util.ArrayList;

View File

@ -11,10 +11,7 @@ This module contains articles about sorting algorithms.
- [Heap Sort in Java](https://www.baeldung.com/java-heap-sort)
- [Shell Sort in Java](https://www.baeldung.com/java-shell-sort)
- [Counting Sort in Java](https://www.baeldung.com/java-counting-sort)
- [Sorting Strings by Contained Numbers in Java](https://www.baeldung.com/java-sort-strings-contained-numbers)
- [How an In-Place Sorting Algorithm Works](https://www.baeldung.com/java-in-place-sorting)
- [Selection Sort in Java](https://www.baeldung.com/java-selection-sort)
- [Sorting Strings by Contained Numbers in Java](https://www.baeldung.com/java-sort-strings-contained-numbers)
- [Radix Sort in Java](https://www.baeldung.com/java-radix-sort)
- [Sorting a String Alphabetically in Java](https://www.baeldung.com/java-sort-string-alphabetically)
- [Bucket Sort in Java](https://www.baeldung.com/java-bucket-sort)
- More articles: [[next -->]](/algorithms-sorintg-2)

View File

@ -1,6 +0,0 @@
## Apache Avro
This module contains articles about Apache Avro
### Relevant Articles:
- [Guide to Apache Avro](https://www.baeldung.com/java-apache-avro)

View File

@ -1,72 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>apache-avro</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>apache-avro</name>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>${avro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-compiler</artifactId>
<version>${avro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>${avro.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>${avro.version}</version>
<executions>
<execution>
<id>schemas</id>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
<goal>protocol</goal>
<goal>idl-protocol</goal>
</goals>
<configuration>
<sourceDirectory>${project.basedir}/src/main/resources/</sourceDirectory>
<outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<avro.version>1.8.2</avro.version>
<slf4j.version>1.7.25</slf4j.version>
</properties>
</project>

View File

@ -1,3 +0,0 @@
### Relevant Articles:
- [Introduction to Apache Beam](https://www.baeldung.com/apache-beam)

View File

@ -1,43 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>com.baeldung.apache</groupId>
<artifactId>apache-beam</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-core</artifactId>
<version>${beam.version}</version>
</dependency>
<!-- runtime scoped -->
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-runners-direct-java</artifactId>
<version>${beam.version}</version>
<scope>runtime</scope>
</dependency>
<!-- test scoped -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<beam.version>2.19.0</beam.version>
<assertj.version>3.6.1</assertj.version>
</properties>
</project>

View File

@ -1,7 +0,0 @@
## Apache BVal
This module contains articles about Apache BVal
### Relevant Articles:
- [Intro to Apache BVal](https://www.baeldung.com/apache-bval)

View File

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>apache-bval</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>apache-bval</name>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.apache.bval</groupId>
<artifactId>bval-jsr</artifactId>
<version>${bval.version}</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation.validation-api.version}</version>
</dependency>
<dependency>
<groupId>org.apache.bval</groupId>
<artifactId>bval-extras</artifactId>
<version>${bval.version}</version>
</dependency>
</dependencies>
<properties>
<bval.version>1.1.2</bval.version>
<javax.validation.validation-api.version>1.1.0.Final</javax.validation.validation-api.version>
</properties>
</project>

View File

@ -1,120 +0,0 @@
package com.baeldung.model;
import java.io.File;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.apache.bval.constraints.Email;
import org.apache.bval.constraints.NotEmpty;
import org.apache.bval.extras.constraints.checkdigit.IBAN;
import org.apache.bval.extras.constraints.creditcard.Visa;
import org.apache.bval.extras.constraints.file.Directory;
import org.apache.bval.extras.constraints.net.InetAddress;
import com.baeldung.validation.Password;
public class User {
@NotNull
@Email
private String email;
@NotEmpty
@Password
private String password;
@Size(min = 1, max = 20)
private String name;
@Min(18)
private int age;
@Visa
private String cardNumber = "";
@IBAN
private String iban = "";
@InetAddress
private String website = "";
@Directory
private File mainDirectory=new File(".");
public User() {
}
public User(String email, String password, String name, int age) {
super();
this.email = email;
this.password = password;
this.name = name;
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
public String getIban() {
return iban;
}
public void setIban(String iban) {
this.iban = iban;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public File getMainDirectory() {
return mainDirectory;
}
public void setMainDirectory(File mainDirectory) {
this.mainDirectory = mainDirectory;
}
}

View File

@ -1,7 +0,0 @@
## Apache Curator
This module contains articles about Apache Curator
### Relevant Articles:
- [Introduction to Apache Curator](https://www.baeldung.com/apache-curator)

View File

@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>apache-curator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>apache-curator</name>
<packaging>jar</packaging>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<dependencies>
<!-- curator -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-async</artifactId>
<version>${curator.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<!-- utils -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- test scoped -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>${avaitility.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<curator.version>4.0.1</curator.version>
<zookeeper.version>3.4.11</zookeeper.version>
<!-- testing -->
<assertj.version>3.6.1</assertj.version>
<avaitility.version>1.7.0</avaitility.version>
</properties>
</project>

View File

@ -3,7 +3,7 @@
This module contains articles about Apache CXF
## Relevant Articles:
- [Introduction to Apache CXF Aegis Data Binding](https://www.baeldung.com/aegis-data-binding-in-apache-cxf)
- [Apache CXF Support for RESTful Web Services](https://www.baeldung.com/apache-cxf-rest-api)
- [A Guide to Apache CXF with Spring](https://www.baeldung.com/apache-cxf-with-spring)
- [Introduction to Apache CXF](https://www.baeldung.com/introduction-to-apache-cxf)

View File

@ -0,0 +1,3 @@
### Relevant Articles:
- [Introduction to Apache CXF Aegis Data Binding](https://www.baeldung.com/aegis-data-binding-in-apache-cxf)

15
apache-fop/.gitignore vendored
View File

@ -1,15 +0,0 @@
*.class
#folders#
/target
/neoDb*
/data
/src/main/webapp/WEB-INF/classes
*/META-INF/*
# Packaged files #
*.war
*.ear
# Files generated by integration tests
*.txt

View File

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>apache-fop</artifactId>
<version>0.1-SNAPSHOT</version>
<name>apache-fop</name>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<dependencies>
<!-- new dependencies -->
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop</artifactId>
<version>${fop.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.avalon.framework</groupId>
<artifactId>avalon-framework-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.avalon.framework</groupId>
<artifactId>avalon-framework-impl</artifactId>
</exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>avalon-framework</groupId>
<artifactId>avalon-framework-api</artifactId>
<version>${avalon-framework.version}</version>
</dependency>
<dependency>
<groupId>avalon-framework</groupId>
<artifactId>avalon-framework-impl</artifactId>
<version>${avalon-framework.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.dbdoclet</groupId>
<artifactId>dbdoclet</artifactId>
<version>${dbdoclet.version}</version>
</dependency>
<dependency>
<groupId>org.dbdoclet</groupId>
<artifactId>herold</artifactId>
<version>${org.dbdoclet.herold.version}</version>
</dependency>
<dependency>
<groupId>net.sf.jtidy</groupId>
<artifactId>jtidy</artifactId>
<version>${jtidy.version}</version>
</dependency>
</dependencies>
<build>
<finalName>apache-fop</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<properties>
<fop.version>1.1</fop.version>
<avalon-framework.version>4.3</avalon-framework.version>
<dbdoclet.version>8.0.2</dbdoclet.version>
<jtidy.version>r938</jtidy.version>
<org.dbdoclet.herold.version>8.0.4</org.dbdoclet.herold.version>
</properties>
</project>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd" >
</beans>

View File

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"
>
<display-name>Spring MVC Application</display-name>
<!-- Spring root -->
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.baeldung.config</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring child -->
<servlet>
<servlet-name>api</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>api</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file/>
</welcome-file-list>
</web-app>

View File

@ -1,122 +0,0 @@
package com.baeldung.java;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.xmlgraphics.util.MimeConstants;
import org.dbdoclet.trafo.html.docbook.HtmlDocBookTrafo;
import org.dbdoclet.trafo.script.Script;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.tidy.Tidy;
public class ApacheFOPConvertHTMLIntegrationTest {
private final String inputFile = "src/test/resources/input.html";
private final String style = "src/test/resources/xhtml2fo.xsl";
private final String style1 = "src/test/resources/docbook-xsl/fo/docbook.xsl";
private final String output_jtidy = "src/test/resources/output_jtidy.pdf";
private final String output_html2fo = "src/test/resources/output_html2fo.pdf";
private final String output_herold = "src/test/resources/output_herold.pdf";
private final String foFile = "src/test/resources/input.fo";
private final String xmlFile = "src/test/resources/input.xml";
@Test
public void whenTransformHTMLToPDFUsingJTidy_thenCorrect() throws Exception {
final Document xhtml = fromHTMLToXHTML();
final Document fo = fromXHTMLToFO(xhtml);
fromFODocumentToPDF(fo, output_jtidy);
}
@Test
public void whenTransformFromHTML2FOToPDF_thenCorrect() throws Exception {
fromFOFileToPDF();
}
@Test
public void whenTransformFromHeroldToPDF_thenCorrect() throws Exception {
fromHTMLTOXMLUsingHerold();
final Document fo = fromXMLFileToFO();
fromFODocumentToPDF(fo, output_herold);
}
private Document fromHTMLToXHTML() throws FileNotFoundException {
final FileInputStream reader = new FileInputStream(inputFile);
final Tidy tidy = new Tidy();
final Document xml = tidy.parseDOM(reader, null);
return xml;
}
private Document fromXHTMLToFO(final Document xhtml) throws Exception {
final DOMSource source = new DOMSource(xhtml);
final DOMResult result = new DOMResult();
final Transformer transformer = createTransformer(style);
transformer.transform(source, result);
return (Document) result.getNode();
}
private void fromFODocumentToPDF(final Document fo, final String outputFile) throws Exception {
final FopFactory fopFactory = FopFactory.newInstance();
final OutputStream outStream = new BufferedOutputStream(new FileOutputStream(new File(outputFile)));
final Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, outStream);
final TransformerFactory factory = TransformerFactory.newInstance();
final Transformer transformer = factory.newTransformer();
final DOMSource src = new DOMSource(fo);
final Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
outStream.close();
}
private Transformer createTransformer(final String styleFile) throws Exception {
final TransformerFactory factory = TransformerFactory.newInstance();
final Transformer transformer = factory.newTransformer(new StreamSource(styleFile));
return transformer;
}
private void fromFOFileToPDF() throws Exception {
final FopFactory fopFactory = FopFactory.newInstance();
final OutputStream outStream = new BufferedOutputStream(new FileOutputStream(new File(output_html2fo)));
final Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, outStream);
final TransformerFactory factory = TransformerFactory.newInstance();
final Transformer transformer = factory.newTransformer();
final Source src = new StreamSource(new FileInputStream(foFile));
final Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
outStream.close();
}
private Document fromXMLFileToFO() throws Exception {
final Source source = new StreamSource(new FileInputStream(xmlFile));
final DOMResult result = new DOMResult();
final Transformer transformer = createTransformer(style1);
transformer.transform(source, result);
return (Document) result.getNode();
}
private void fromHTMLTOXMLUsingHerold() throws Exception {
final Script script = new Script();
final HtmlDocBookTrafo transformer = new HtmlDocBookTrafo();
transformer.setInputStream(new FileInputStream(inputFile));
transformer.setOutputStream(new FileOutputStream(xmlFile));
transformer.transform(script);
}
}

View File

@ -1,143 +0,0 @@
package com.baeldung.java;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.xmlgraphics.util.MimeConstants;
import org.dbdoclet.trafo.TrafoScriptManager;
import org.dbdoclet.trafo.html.docbook.HtmlDocBookTrafo;
import org.dbdoclet.trafo.script.Script;
import org.junit.Test;
import org.w3c.dom.Document;
public class ApacheFOPHeroldLiveTest {
private final String[] inputUrls = {// @formatter:off
// "http://www.baeldung.com/spring-security-basic-authentication",
"http://www.baeldung.com/spring-security-digest-authentication"
//"http://www.baeldung.com/spring-httpmessageconverter-rest",
//"http://www.baeldung.com/2011/11/06/restful-web-service-discoverability-part-4/",
//"http://www.baeldung.com/2011/11/13/rest-service-discoverability-with-spring-part-5/",
//"http://www.baeldung.com/2013/01/11/etags-for-rest-with-spring/",
// "http://www.baeldung.com/2012/01/18/rest-pagination-in-spring/",
//"http://inprogress.baeldung.com/?p=1430",
//"http://www.baeldung.com/2013/01/31/exception-handling-for-rest-with-spring-3-2/",
//"http://www.baeldung.com/rest-versioning",
//"http://www.baeldung.com/2013/01/18/testing-rest-with-multiple-mime-types/"
}; // @formatter:on
private final String style_file = "src/test/resources/docbook-xsl/fo/docbook.xsl";
private final String output_file = "src/test/resources/final_output.pdf";
private final String xmlInput = "src/test/resources/input.xml";
private final String xmlOutput = "src/test/resources/output.xml";
// tests
@Test
public void whenTransformFromHeroldToPDF_thenCorrect() throws Exception {
final int len = inputUrls.length;
fromHTMLTOXMLUsingHerold(inputUrls[0], false);
for (int i = 1; i < len; i++) {
fromHTMLTOXMLUsingHerold(inputUrls[i], true);
}
fixXML(xmlInput, xmlOutput);
final Document fo = fromXMLFileToFO();
fromFODocumentToPDF(fo, output_file);
}
// UTIL
private void fromHTMLTOXMLUsingHerold(final String input, final boolean append) throws Exception {
Script script;
final TrafoScriptManager mgr = new TrafoScriptManager();
final File profileFile = new File("src/test/resources/default.her");
script = mgr.parseScript(profileFile);
final HtmlDocBookTrafo transformer = new HtmlDocBookTrafo();
transformer.setInputStream(getInputStream(input));
transformer.setOutputStream(new FileOutputStream(xmlInput, append));
transformer.transform(script);
}
private Document fromXMLFileToFO() throws Exception {
final Source source = new StreamSource(new FileInputStream(xmlOutput));
final DOMResult result = new DOMResult();
final Transformer transformer = createTransformer(style_file);
transformer.transform(source, result);
return (Document) result.getNode();
}
private void fromFODocumentToPDF(final Document fo, final String outputFile) throws Exception {
final FopFactory fopFactory = FopFactory.newInstance();
final OutputStream outStream = new BufferedOutputStream(new FileOutputStream(new File(outputFile)));
final Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, outStream);
final TransformerFactory factory = TransformerFactory.newInstance();
final Transformer transformer = factory.newTransformer();
final DOMSource src = new DOMSource(fo);
final Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
outStream.close();
}
private Transformer createTransformer(final String styleFile) throws Exception {
final TransformerFactory factory = TransformerFactory.newInstance();
final Transformer transformer = factory.newTransformer(new StreamSource(styleFile));
return transformer;
}
private InputStream getInputStream(final String input) throws IOException {
final URL url = new URL(input);
final HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();
httpcon.addRequestProperty("User-Agent", "Mozilla/4.0");
return httpcon.getInputStream();
}
private void fixXML(final String input, final String output) throws IOException {
final BufferedReader reader = new BufferedReader(new FileReader(input));
final FileWriter writer = new FileWriter(output);
String line = reader.readLine();
int count = 0;
while (line != null) {
line = line.replaceAll("", "\"");
line = line.replaceAll("", "\"");
// line = line.replaceAll("[^\\x00-\\x7F]", "");
if (line.contains("info>")) {
writer.write(line.replace("info>", "section>"));
} else if (!((line.startsWith("<?xml") || line.startsWith("<article") || line.startsWith("</article")) && (count > 4))) {
writer.write(line.replaceAll("xml:id=\"", "xml:id=\"" + count));
}
writer.write("\n");
line = reader.readLine();
count++;
}
writer.write("</article>");
reader.close();
writer.close();
}
}

View File

@ -1,12 +0,0 @@
*.class
#folders#
/target
/neoDb*
/data
/src/main/webapp/WEB-INF/classes
*/META-INF/*
# Packaged files #
*.war
*.ear

View File

@ -1,13 +0,0 @@
transformation html2docbook;
section HTML {
encoding = "windows-1252";
exclude = ["//h3[contains(.,'I usually')]", "//*[@id='toc_container']", "//h2/span[@id='Table_of_Contents']/../following-sibling::ul", "//h2/span[@id='Table_of_Contents']/..", "//*[@id='disqus_thread']","//head","//*[@class='custom-design-100']","//*[@class='custom-design-114']", "//form","//*[@src]","//*[@id='inner-wrapper']/*[position()<7]" , "//*[@class='post-meta']" , "//*[@class='entry-title']","//*[@id='respond']" ,"//*[@id='comments']","//*[@class='post-entries']","//*[@class='social']/../../h3[last()]" ,"//*[@class='social']/.."];
section-numbering-pattern = "(((\d\.)+)?\d?\.?\p{Z}*).*";
}
section DocBook {
add-index = false;
decompose-tables = false;
encoding = "UTF-8";
}

View File

@ -1,4 +0,0 @@
The DocBook XSL stylesheets are maintained by Norman Walsh,
<ndw@nwalsh.com>, and members of the DocBook Project,
<docbook-developers@sf.net>

View File

@ -1,21 +0,0 @@
To view a list of all open DocBook Project XSL stylesheet bugs:
http://docbook.sf.net/tracker/xsl/bugs
To submit a bug report against the stylesheets:
http://docbook.sf.net/tracker/submit/bug
To do a full-text search of all DocBook Project issues:
http://docbook.sf.net/tracker/search
Discussion about the DocBook Project XSL stylesheets takes place
on the docbook-apps mailing list:
http://wiki.docbook.org/topic/DocBookAppsMailingList
Real-time discussion takes place on IRC:
http://wiki.docbook.org/topic/DocBookIrcChannel
irc://irc.freenode.net/docbook

View File

@ -1,48 +0,0 @@
Copyright
---------
Copyright (C) 1999-2007 Norman Walsh
Copyright (C) 2003 Jiří Kosek
Copyright (C) 2004-2007 Steve Ball
Copyright (C) 2005-2008 The DocBook Project
Copyright (C) 2011-2012 O'Reilly Media
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the ``Software''), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
Except as contained in this notice, the names of individuals
credited with contribution to this software shall not be used in
advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization
from the individuals in question.
Any stylesheet derived from this Software that is publically
distributed will be identified with a different name and the
version strings in any derived Software will be changed so that
no possibility of confusion between the derived package and this
Software will exist.
Warranty
--------
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL NORMAN WALSH OR ANY OTHER
CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
Contacting the Author
---------------------
The DocBook XSL stylesheets are maintained by Norman Walsh,
<ndw@nwalsh.com>, and members of the DocBook Project,
<docbook-developers@sf.net>

View File

@ -1,88 +0,0 @@
$Id: INSTALL 6145 2006-08-06 13:13:03Z xmldoc $
INSTALL file for the DocBook XSL stylesheets distribution
----------------------------------------------------------------------
Case #1: Installation using a package management system
----------------------------------------------------------------------
If you have installed the DocBook XSL distribution using "apt-get",
"yum", "urpmi", or some similar package-management front-end,
then, as part of the package installation, the stylesheets have
already been automatically installed in the appropriate location
for your system, and your XML catalog environment has probably
been updated to use that location.
----------------------------------------------------------------------
Case #2: Installing manually
----------------------------------------------------------------------
If you have downloaded a docbook-xsl zip, tar.gz, or tar.bz2
file, use the following steps to install it.
1. Move the zip, tar.gz, or tar.bz2 file to the directory where
you'd like to install it (not to a temporary directory).
2. unzip or untar/uncompress the file
That will create a docbook-xsl-$VERSION directory (where
$VERSION is the version number for the release).
The remaining steps are all OPTIONAL. They are intended to
automatically update your user environment with XML Catalog
information about the DocBook XSL distribution. You are NOT
REQUIRED to complete these remaining steps. However, if you do
not, and you want to use XML catalogs with the DocBook XSL
stylesheets, you will need to manually update your XML catalog
environment
3. Change to the docbook-xsl-$VERSION directory and execute the
install.sh script:
./install.sh
That will launch an interactive installer, which will emit a
series of prompts for you to respond to.
To instead run it non-interactively without being prompted
for confirmation of the changes it makes, invoke it with the
"--batch" switch, like this:
./install.sh --batch
After the process is complete, the installer will emit a
message with a command you need to run in order to source
your environment for use with the stylesheets.
4. To test that he installation has updated your environment
correctly, execute the test.sh script:
./test.sh
That will test your XML catalog environment, using both the
xmlcatalog application and the Apache XML Commons Resolver.
NOTE: The test.sh file is not created until the install.sh
file is run for the first time.
5. (UNINSTALLING) If/when you want to uninstall the release,
execute the uninstall.sh script.
./uninstall.sh
To instead run it non-interactively without being prompted
for confirmation of the changes it makes, invoke it with the
"--batch" switch, like this:
./uninstall.sh --batch
NOTE: The uninstall.sh file is not created until the install.sh
file is run for the first time.
----------------------------------------------------------------------
Note to packagers
----------------------------------------------------------------------
The install.sh, .CatalogManager.properties.example, and .urilist
files should not be packaged. They are useful only to users who
are installing the stylesheets manually.
The catalog.xml file should be packaged.

View File

@ -1,89 +0,0 @@
# $Id: Makefile.tests 8481 2009-07-13 20:18:41Z abdelazer $
#
# This makefile does a "smoketest" of stylesheets for various
# output formats in the DocBook XSL Stylesheets release package.
# It doesn't actually check the output -- it's just useful for
# confirming whether each XSLT transformation actually executes
# successfully without any errors.
#
# To use it, run "make check" or just "make"
XSLTPROC=xsltproc
XSLTPROC_FLAGS=
TESTFILE=tests/refentry.007.xml
TESTFILE_NS=tests/refentry.007.ns.xml
NORMAL_STYLES=fo/docbook.xsl html/docbook.xsl xhtml/docbook.xsl
NORMAL_PROFILE_STYLES=fo/profile-docbook.xsl html/profile-docbook.xsl xhtml/profile-docbook.xsl
CHUNK_STYLES=html/chunk.xsl html/onechunk.xsl xhtml/chunk.xsl xhtml/onechunk.xsl
HELP_STYLES=htmlhelp/htmlhelp.xsl javahelp/javahelp.xsl eclipse/eclipse.xsl
MULTIFILE_STYLES=$(CHUNK_STYLES) $(HELP_STYLES)
CHUNK_PROFILE_STYLES=html/profile-chunk.xsl html/profile-onechunk.xsl xhtml/profile-chunk.xsl xhtml/profile-onechunk.xsl
HELP_PROFILE_STYLES=htmlhelp/profile-htmlhelp.xsl eclipse/profile-eclipse.xsl javahelp/profile-javahelp.xsl
MULTIFILE_PROFILE_STYLES=$(CHUNK_PROFILE_STYLES) $(HELP_PROFILE_STYLES)
MAN_STYLE=manpages/docbook.xsl
MAN_PROFILE_STYLE=manpages/profile-docbook.xsl
TWO_PROFILE_STYLE=profiling/profile.xsl
ROUNDTRIP_STYLES=roundtrip/dbk2ooo.xsl roundtrip/dbk2pages.xsl roundtrip/dbk2wordml.xsl
SLIDES_STYLES=slides/html/default.xsl slides/xhtml/default.xsl slides/fo/plain.xsl
WEBSITE_STYLES=website/website.xsl
WEBSITE_CHUNK_STYLES=website/chunk-website.xsl
# chunked output gets written to TMP_OUTPUT_DIR
TMP_OUTPUT_DIR=/tmp/smoketest-output/
# if you don't want TMP_OUTPUT_DIR and its contents deleted, unset
# SMOKETEST_CLEAN_TARGET; e.g. "make check SMOKETEST_CLEAN_TARGET=''"
SMOKETEST_CLEAN_TARGET=smoketest-clean
check: smoketest-make-tmp-dir smoketest-normal smoketest-normal-profile smoketest-chunk smoketest-chunk-profile smoketest-man smoketest-man-profile smoketest-two-profile $(SMOKETEST_CLEAN_TARGET)
smoketest-make-tmp-dir:
$(RM) -r $(TMP_OUTPUT_DIR)
mkdir '$(TMP_OUTPUT_DIR)'
smoketest-normal:
for stylesheet in $(NORMAL_STYLES); do \
echo "$(XSLT) $(TESTFILE) $$stylesheet > /dev/null"; \
$(XSLT) $(TESTFILE) $$stylesheet > /dev/null; \
echo "$(XSLT) $(TESTFILE_NS) $$stylesheet > /dev/null"; \
$(XSLT) $(TESTFILE_NS) $$stylesheet > /dev/null; \
done
smoketest-normal-profile:
for stylesheet in $(NORMAL_PROFILE_STYLES); do \
echo "$(XSLT) $(TESTFILE) $$stylesheet > /dev/null"; \
$(XSLT) $(TESTFILE) $$stylesheet > /dev/null; \
echo "$(XSLT) $(TESTFILE_NS) $$stylesheet > /dev/null"; \
$(XSLT) $(TESTFILE_NS) $$stylesheet > /dev/null; \
done
smoketest-chunk:
for stylesheet in $(MULTIFILE_STYLES) ; do \
$(XSLT) $(TESTFILE) $$stylesheet manifest.in.base.dir=1 base.dir=$(TMP_OUTPUT_DIR) ; \
$(XSLT) $(TESTFILE_NS) $$stylesheet manifest.in.base.dir=1 base.dir=$(TMP_OUTPUT_DIR) ; \
done;
smoketest-chunk-profile:
for stylesheet in $(MULTIFILE_PROFILE_STYLES) ; do \
$(XSLT) $(TESTFILE) $$stylesheet manifest.in.base.dir=1 base.dir=$(TMP_OUTPUT_DIR) ; \
$(XSLT) $(TESTFILE_NS) $$stylesheet manifest.in.base.dir=1 base.dir=$(TMP_OUTPUT_DIR) ; \
done;
smoketest-man:
$(XSLT) $(TESTFILE) $(MAN_STYLE) man.output.in.separate.dir=1 man.output.base.dir=$(TMP_OUTPUT_DIR) ; \
$(XSLT) $(TESTFILE_NS) $(MAN_STYLE) man.output.in.separate.dir=1 man.output.base.dir=$(TMP_OUTPUT_DIR) ;
smoketest-man-profile:
$(XSLT) $(TESTFILE) $(MAN_PROFILE_STYLE) man.output.in.separate.dir=1 man.output.base.dir=$(TMP_OUTPUT_DIR) ; \
$(XSLT) $(TESTFILE_NS) $(MAN_PROFILE_STYLE) man.output.in.separate.dir=1 man.output.base.dir=$(TMP_OUTPUT_DIR) ;
smoketest-two-profile:
$(XSLT) $(TESTFILE_NS) $(TWO_PROFILE_STYLE) > /dev/null ;
smoketest-clean:
$(RM) -r $(TMP_OUTPUT_DIR)

View File

@ -1,176 +0,0 @@
Changes since the 1.78.0 release
Note: This document lists changes only since the 1.78.0 release. If you instead
want a record of the complete list of changes for the codebase over its entire
history, you can obtain one by running the following commands:
svn checkout https://docbook.svn.sourceforge.net/svnroot/docbook/trunk/xsl
svn log --xml --verbose xsl > ChangeHistory.xml
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Table of Contents
Release Notes: 1.78.1
Common
FO
HTML
Manpages
Webhelp
Params
Highlighting
Release Notes: 1.78.1
The following is a list of changes that have been made since the 1.78.0
release.
Common
The following changes have been made to the common code since the 1.78.0
release.
• Robert Stayton: titles.xsl
Make sure part and set titleabbrev are used in mode="titleabbrev.markup"
• Robert Stayton: titles.xsl
Add empty default template for titleabbrev since it is always processed in a mode.
• Robert Stayton: gentext.xsl
Make consistent handling of titleabbrev in xrefs.
• Robert Stayton: titles.xsl
for missing title in xref, provide parent information of target to help locate problem element.
Process bridgehead in mode="title.markup", not normal mode.
• Jirka Kosek: l10n.xsl
Fixed bug #3598963
• Robert Stayton: gentext.xsl; labels.xsl
Make sure bridgeheads are not numbered in all contexts, including html title attributes.
FO
The following changes have been made to the fo code since the 1.78.0 release.
• Robert Stayton: division.xsl
Fix bug where part TOC not generated when partintro is present.
• Jirka Kosek: xref.xsl
Footnotes can't be placed into fo:float
• Robert Stayton: titlepage.templates.xml
Remove margin-left when start-indent is used because they interfere
with each other.
• Robert Stayton: fo.xsl; pagesetup.xsl
Use dingbat.fontset rather than dingbat.font.family so it falls
back to symbol font if glyph not found, like other font properties.
• Robert Stayton: inline.xsl
Change last instance of inline.charseq in inline glossterm to
inline.italicseq so it is consistent with the others.
• Robert Stayton: xref.xsl
Make consistent handling of titleabbrev in xrefs.
HTML
The following changes have been made to the html code since the 1.78.0 release.
• Robert Stayton: admon.xsl
Turn off $admon.style if $make.clean.html is set to non-zero.
• Jirka Kosek: highlight.xsl
Added new definitions for syntax highlighting
• Robert Stayton: chunk-common.xsl
Make active.olink.hrefs param work for chunked output too.
• Robert Stayton: xref.xsl
Make consistent handling of titleabbrev in xrefs.
• Robert Stayton: graphics.xsl
Add round() function when pixel counts are used for image width and height.
• Robert Stayton: glossary.xsl
fix missing class and id attributes on glossterm and glossdef.
• Robert Stayton: autoidx.xsl
Fix bug where prefer.index.titleabbrev ignored info/titleabbrev.
Manpages
The following changes have been made to the manpages code since the 1.78.0
release.
• Robert Stayton: utility.xsl
Fix bug 3599520: spurious newline in para when starts with
whitespace and inline element.
Webhelp
The following changes have been made to the webhelp code since the 1.78.0
release.
• David Cramer: xsl/webhelp-common.xsl
Webhelp: Fix test for webhelp.include.search.tab param
• David Cramer: Makefile.sample
Webhelp: Fix order of args to xsltproc
• David Cramer: docsrc/readme.xml
Webhelp: Turn on xinclude-test.xml in readme to demo xinclude functionality
• David Cramer: Makefile; Makefile.sample
Webhelp: In Makefiles, do xinclude in first pass at document
Params
The following changes have been made to the params code since the 1.78.0
release.
• David Cramer: webhelp.include.search.tab.xml
Webhelp: Fix test for webhelp.include.search.tab param
• Robert Stayton: article.appendix.title.properties.xml
Remove unneeded margin-left property from article appendix title.
It interferes with the start-indent property.
Highlighting
The following changes have been made to the highlighting code since the 1.78.0
release.
• Jirka Kosek: c-hl.xml; cpp-hl.xml; sql2003-hl.xml; php-hl.xml; upc-hl.xml;
bourne-hl.xml; ⋯
Added new definitions for syntax highlighting

View File

@ -1,30 +0,0 @@
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Changes since the 1.78.0 release</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><meta name="description" content="Note: This document lists changes only since the 1.78.0 release. If you instead want a record of the complete list of changes for the codebase over its entire history, you can obtain one by running the following commands: svn checkout https://docbook.svn.sourceforge.net/svnroot/docbook/trunk/xsl svn log --xml --verbose xsl &gt; ChangeHistory.xml"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article"><div class="titlepage"><div><div><h2 class="title"><a name="idp12912"></a>Changes since the 1.78.0 release</h2></div><div><div class="abstract"><p><span class="strong"><strong>Note:</strong></span> This
document lists changes only since the 1.78.0 release.
If you instead want a record of the complete list of
changes for the codebase over its entire history, you
can obtain one by running the following commands:
</p><pre class="screen"> <code class="code">svn checkout https://docbook.svn.sourceforge.net/svnroot/docbook/trunk/xsl</code>
<code class="code">svn log --xml --verbose xsl &gt; ChangeHistory.xml</code></pre></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="sect1"><a href="#V1.78.1">Release Notes: 1.78.1</a></span></dt><dd><dl><dt><span class="sect2"><a href="#V1.78.1_Common">Common</a></span></dt><dt><span class="sect2"><a href="#V1.78.1_FO">FO</a></span></dt><dt><span class="sect2"><a href="#V1.78.1_HTML">HTML</a></span></dt><dt><span class="sect2"><a href="#V1.78.1_Manpages">Manpages</a></span></dt><dt><span class="sect2"><a href="#V1.78.1_Webhelp">Webhelp</a></span></dt><dt><span class="sect2"><a href="#V1.78.1_Params">Params</a></span></dt><dt><span class="sect2"><a href="#V1.78.1_Highlighting">Highlighting</a></span></dt></dl></dd></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="V1.78.1"></a>Release Notes: 1.78.1</h2></div></div></div><p>The following is a list of changes that have been made
since the 1.78.0 release.</p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a name="V1.78.1_Common"></a>Common</h3></div></div></div><p>The following changes have been made to the
<code class="filename">common</code> code
since the 1.78.0 release.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="literal">Robert Stayton: titles.xsl</code></p><pre class="screen"><span class="commit-message">Make sure part and set <a href="http://docbook.org/tdg5/en/html/titleabbrev.html"><code class="sgmltag-element">titleabbrev</code></a> are used in mode="titleabbrev.markup"</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: titles.xsl</code></p><pre class="screen"><span class="commit-message">Add empty default template for <a href="http://docbook.org/tdg5/en/html/titleabbrev.html"><code class="sgmltag-element">titleabbrev</code></a> since it is always processed in a mode.</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: gentext.xsl</code></p><pre class="screen"><span class="commit-message">Make consistent handling of <a href="http://docbook.org/tdg5/en/html/titleabbrev.html"><code class="sgmltag-element">titleabbrev</code></a> in xrefs.</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: titles.xsl</code></p><pre class="screen"><span class="commit-message">for missing <a href="http://docbook.org/tdg5/en/html/title.html"><code class="sgmltag-element">title</code></a> in <a href="http://docbook.org/tdg5/en/html/xref.html"><code class="sgmltag-element">xref</code></a>, provide parent information of target to help locate problem element.
Process <a href="http://docbook.org/tdg5/en/html/bridgehead.html"><code class="sgmltag-element">bridgehead</code></a> in mode="title.markup", not normal mode.</span></pre></li><li class="listitem"><p><code class="literal">Jirka Kosek: l10n.xsl</code></p><pre class="screen"><span class="commit-message">Fixed bug #3598963</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: gentext.xsl; labels.xsl</code></p><pre class="screen"><span class="commit-message">Make sure bridgeheads are not numbered in all contexts, including html <a href="http://docbook.org/tdg5/en/html/title.html"><code class="sgmltag-element">title</code></a> attributes.</span></pre></li></ul></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a name="V1.78.1_FO"></a>FO</h3></div></div></div><p>The following changes have been made to the
<code class="filename">fo</code> code
since the 1.78.0 release.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="literal">Robert Stayton: division.xsl</code></p><pre class="screen"><span class="commit-message">Fix bug where part <a href="http://docbook.org/tdg5/en/html/toc.html"><code class="sgmltag-element">TOC</code></a> not generated when <a href="http://docbook.org/tdg5/en/html/partintro.html"><code class="sgmltag-element">partintro</code></a> is present.</span></pre></li><li class="listitem"><p><code class="literal">Jirka Kosek: xref.xsl</code></p><pre class="screen"><span class="commit-message">Footnotes can't be placed into fo:float</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: titlepage.templates.xml</code></p><pre class="screen"><span class="commit-message">Remove margin-left when start-indent is used because they interfere
with each other.</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: fo.xsl; pagesetup.xsl</code></p><pre class="screen"><span class="commit-message">Use dingbat.fontset rather than <a href="http://docbook.sourceforge.net/release/xsl/current/doc/fo/dingbat.font.family.html"><em class="parameter"><code>dingbat.font.family</code></em></a> so it falls
back to <a href="http://docbook.org/tdg5/en/html/symbol.html"><code class="sgmltag-element">symbol</code></a> font if glyph not found, like other font properties.</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: inline.xsl</code></p><pre class="screen"><span class="commit-message">Change last instance of inline.charseq in inline <a href="http://docbook.org/tdg5/en/html/glossterm.html"><code class="sgmltag-element">glossterm</code></a> to
inline.italicseq so it is consistent with the others.</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: xref.xsl</code></p><pre class="screen"><span class="commit-message">Make consistent handling of <a href="http://docbook.org/tdg5/en/html/titleabbrev.html"><code class="sgmltag-element">titleabbrev</code></a> in xrefs.</span></pre></li></ul></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a name="V1.78.1_HTML"></a>HTML</h3></div></div></div><p>The following changes have been made to the
<code class="filename">html</code> code
since the 1.78.0 release.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="literal">Robert Stayton: admon.xsl</code></p><pre class="screen"><span class="commit-message">Turn off $admon.style if $make.clean.html is set to non-zero.</span></pre></li><li class="listitem"><p><code class="literal">Jirka Kosek: highlight.xsl</code></p><pre class="screen"><span class="commit-message">Added new definitions for syntax highlighting</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: chunk-common.xsl</code></p><pre class="screen"><span class="commit-message">Make active.olink.hrefs param work for chunked output too.</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: xref.xsl</code></p><pre class="screen"><span class="commit-message">Make consistent handling of <a href="http://docbook.org/tdg5/en/html/titleabbrev.html"><code class="sgmltag-element">titleabbrev</code></a> in xrefs.</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: graphics.xsl</code></p><pre class="screen"><span class="commit-message">Add round() <a href="http://docbook.org/tdg5/en/html/function.html"><code class="sgmltag-element">function</code></a> when pixel counts are used for image width and height.</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: glossary.xsl</code></p><pre class="screen"><span class="commit-message">fix missing class and id attributes on <a href="http://docbook.org/tdg5/en/html/glossterm.html"><code class="sgmltag-element">glossterm</code></a> and <a href="http://docbook.org/tdg5/en/html/glossdef.html"><code class="sgmltag-element">glossdef</code></a>.</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: autoidx.xsl</code></p><pre class="screen"><span class="commit-message">Fix bug where prefer.index.titleabbrev ignored <a href="http://docbook.org/tdg5/en/html/info.html"><code class="sgmltag-element">info</code></a>/<a href="http://docbook.org/tdg5/en/html/titleabbrev.html"><code class="sgmltag-element">titleabbrev</code></a>.</span></pre></li></ul></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a name="V1.78.1_Manpages"></a>Manpages</h3></div></div></div><p>The following changes have been made to the
<code class="filename">manpages</code> code
since the 1.78.0 release.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="literal">Robert Stayton: utility.xsl</code></p><pre class="screen"><span class="commit-message">Fix bug 3599520: spurious newline in <a href="http://docbook.org/tdg5/en/html/para.html"><code class="sgmltag-element">para</code></a> when starts with
whitespace and inline element.</span></pre></li></ul></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a name="V1.78.1_Webhelp"></a>Webhelp</h3></div></div></div><p>The following changes have been made to the
<code class="filename">webhelp</code> code
since the 1.78.0 release.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="literal">David Cramer: xsl/webhelp-common.xsl</code></p><pre class="screen"><span class="commit-message">Webhelp: Fix test for <a href="http://docbook.sourceforge.net/release/xsl/current/doc/html/webhelp.include.search.tab.html"><em class="parameter"><code>webhelp.include.search.tab</code></em></a> param</span></pre></li><li class="listitem"><p><code class="literal">David Cramer: Makefile.sample</code></p><pre class="screen"><span class="commit-message">Webhelp: Fix order of args to xsltproc</span></pre></li><li class="listitem"><p><code class="literal">David Cramer: docsrc/readme.xml</code></p><pre class="screen"><span class="commit-message">Webhelp: Turn on xinclude-test.xml in readme to demo xinclude functionality</span></pre></li><li class="listitem"><p><code class="literal">David Cramer: Makefile; Makefile.sample</code></p><pre class="screen"><span class="commit-message">Webhelp: In Makefiles, do xinclude in first pass at document</span></pre></li></ul></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a name="V1.78.1_Params"></a>Params</h3></div></div></div><p>The following changes have been made to the
<code class="filename">params</code> code
since the 1.78.0 release.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="literal">David Cramer: webhelp.include.search.tab.xml</code></p><pre class="screen"><span class="commit-message">Webhelp: Fix test for <a href="http://docbook.sourceforge.net/release/xsl/current/doc/html/webhelp.include.search.tab.html"><em class="parameter"><code>webhelp.include.search.tab</code></em></a> param</span></pre></li><li class="listitem"><p><code class="literal">Robert Stayton: article.appendix.title.properties.xml</code></p><pre class="screen"><span class="commit-message">Remove unneeded margin-left property from <a href="http://docbook.org/tdg5/en/html/article.html"><code class="sgmltag-element">article</code></a> <a href="http://docbook.org/tdg5/en/html/appendix.html"><code class="sgmltag-element">appendix</code></a> <a href="http://docbook.org/tdg5/en/html/title.html"><code class="sgmltag-element">title</code></a>.
It interferes with the start-indent property.</span></pre></li></ul></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a name="V1.78.1_Highlighting"></a>Highlighting</h3></div></div></div><p>The following changes have been made to the
<code class="filename">highlighting</code> code
since the 1.78.0 release.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="literal">Jirka Kosek: c-hl.xml; cpp-hl.xml; sql2003-hl.xml; php-hl.xml; upc-hl.xml; bourne-hl.xml; &#8943;</code></p><pre class="screen"><span class="commit-message">Added new definitions for syntax highlighting</span></pre></li></ul></div></div></div></div></body></html>

View File

@ -1,174 +0,0 @@
<?xml version="1.0"?>
<article>
<info>
<abstract>
<para><emphasis role="strong">Note:</emphasis> This
document lists changes only since the 1.78.0 release.
If you instead want a record of the complete list of
changes for the codebase over its entire history, you
can obtain one by running the following commands:
<screen> <code>svn checkout https://docbook.svn.sourceforge.net/svnroot/docbook/trunk/xsl</code>
<code>svn log --xml --verbose xsl &gt; ChangeHistory.xml</code></screen></para>
</abstract>
</info><title>Changes since the 1.78.0 release</title>
<sect1 xml:id="V1.78.1">
<title>Release Notes: 1.78.1</title>
<para>The following is a list of changes that have been made
since the 1.78.0 release.</para>
<sect2 xml:id="V1.78.1_Common">
<title>Common</title>
<para>The following changes have been made to the
<filename>common</filename> code
since the 1.78.0 release.</para>
<itemizedlist>
<listitem>
<para><literal>Robert Stayton: titles.xsl</literal></para><screen><phrase role="commit-message">Make sure part and set <tag>titleabbrev</tag> are used in mode="titleabbrev.markup"</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: titles.xsl</literal></para><screen><phrase role="commit-message">Add empty default template for <tag>titleabbrev</tag> since it is always processed in a mode.</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: gentext.xsl</literal></para><screen><phrase role="commit-message">Make consistent handling of <tag>titleabbrev</tag> in xrefs.</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: titles.xsl</literal></para><screen><phrase role="commit-message">for missing <tag>title</tag> in <tag>xref</tag>, provide parent information of target to help locate problem element.
Process <tag>bridgehead</tag> in mode="title.markup", not normal mode.</phrase></screen>
</listitem>
<listitem>
<para><literal>Jirka Kosek: l10n.xsl</literal></para><screen><phrase role="commit-message">Fixed bug #3598963</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: gentext.xsl; labels.xsl</literal></para><screen><phrase role="commit-message">Make sure bridgeheads are not numbered in all contexts, including html <tag>title</tag> attributes.</phrase></screen>
</listitem>
</itemizedlist>
</sect2><!--end of Common changes for 1.78.1-->
<sect2 xml:id="V1.78.1_FO">
<title>FO</title>
<para>The following changes have been made to the
<filename>fo</filename> code
since the 1.78.0 release.</para>
<itemizedlist>
<listitem>
<para><literal>Robert Stayton: division.xsl</literal></para><screen><phrase role="commit-message">Fix bug where part <tag>TOC</tag> not generated when <tag>partintro</tag> is present.</phrase></screen>
</listitem>
<listitem>
<para><literal>Jirka Kosek: xref.xsl</literal></para><screen><phrase role="commit-message">Footnotes can't be placed into fo:float</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: titlepage.templates.xml</literal></para><screen><phrase role="commit-message">Remove margin-left when start-indent is used because they interfere
with each other.</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: fo.xsl; pagesetup.xsl</literal></para><screen><phrase role="commit-message">Use dingbat.fontset rather than <parameter>dingbat.font.family</parameter> so it falls
back to <tag>symbol</tag> font if glyph not found, like other font properties.</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: inline.xsl</literal></para><screen><phrase role="commit-message">Change last instance of inline.charseq in inline <tag>glossterm</tag> to
inline.italicseq so it is consistent with the others.</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: xref.xsl</literal></para><screen><phrase role="commit-message">Make consistent handling of <tag>titleabbrev</tag> in xrefs.</phrase></screen>
</listitem>
</itemizedlist>
</sect2><!--end of FO changes for 1.78.1-->
<sect2 xml:id="V1.78.1_HTML">
<title>HTML</title>
<para>The following changes have been made to the
<filename>html</filename> code
since the 1.78.0 release.</para>
<itemizedlist>
<listitem>
<para><literal>Robert Stayton: admon.xsl</literal></para><screen><phrase role="commit-message">Turn off $admon.style if $make.clean.html is set to non-zero.</phrase></screen>
</listitem>
<listitem>
<para><literal>Jirka Kosek: highlight.xsl</literal></para><screen><phrase role="commit-message">Added new definitions for syntax highlighting</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: chunk-common.xsl</literal></para><screen><phrase role="commit-message">Make active.olink.hrefs param work for chunked output too.</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: xref.xsl</literal></para><screen><phrase role="commit-message">Make consistent handling of <tag>titleabbrev</tag> in xrefs.</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: graphics.xsl</literal></para><screen><phrase role="commit-message">Add round() <tag>function</tag> when pixel counts are used for image width and height.</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: glossary.xsl</literal></para><screen><phrase role="commit-message">fix missing class and id attributes on <tag>glossterm</tag> and <tag>glossdef</tag>.</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: autoidx.xsl</literal></para><screen><phrase role="commit-message">Fix bug where prefer.index.titleabbrev ignored <tag>info</tag>/<tag>titleabbrev</tag>.</phrase></screen>
</listitem>
</itemizedlist>
</sect2><!--end of HTML changes for 1.78.1-->
<sect2 xml:id="V1.78.1_Manpages">
<title>Manpages</title>
<para>The following changes have been made to the
<filename>manpages</filename> code
since the 1.78.0 release.</para>
<itemizedlist>
<listitem>
<para><literal>Robert Stayton: utility.xsl</literal></para><screen><phrase role="commit-message">Fix bug 3599520: spurious newline in <tag>para</tag> when starts with
whitespace and inline element.</phrase></screen>
</listitem>
</itemizedlist>
</sect2><!--end of Manpages changes for 1.78.1-->
<sect2 xml:id="V1.78.1_Webhelp">
<title>Webhelp</title>
<para>The following changes have been made to the
<filename>webhelp</filename> code
since the 1.78.0 release.</para>
<itemizedlist>
<listitem>
<para><literal>David Cramer: xsl/webhelp-common.xsl</literal></para><screen><phrase role="commit-message">Webhelp: Fix test for <parameter>webhelp.include.search.tab</parameter> param</phrase></screen>
</listitem>
<listitem>
<para><literal>David Cramer: Makefile.sample</literal></para><screen><phrase role="commit-message">Webhelp: Fix order of args to xsltproc</phrase></screen>
</listitem>
<listitem>
<para><literal>David Cramer: docsrc/readme.xml</literal></para><screen><phrase role="commit-message">Webhelp: Turn on xinclude-test.xml in readme to demo xinclude functionality</phrase></screen>
</listitem>
<listitem>
<para><literal>David Cramer: Makefile; Makefile.sample</literal></para><screen><phrase role="commit-message">Webhelp: In Makefiles, do xinclude in first pass at document</phrase></screen>
</listitem>
</itemizedlist>
</sect2><!--end of Webhelp changes for 1.78.1-->
<sect2 xml:id="V1.78.1_Params">
<title>Params</title>
<para>The following changes have been made to the
<filename>params</filename> code
since the 1.78.0 release.</para>
<itemizedlist>
<listitem>
<para><literal>David Cramer: webhelp.include.search.tab.xml</literal></para><screen><phrase role="commit-message">Webhelp: Fix test for <parameter>webhelp.include.search.tab</parameter> param</phrase></screen>
</listitem>
<listitem>
<para><literal>Robert Stayton: article.appendix.title.properties.xml</literal></para><screen><phrase role="commit-message">Remove unneeded margin-left property from <tag>article</tag> <tag>appendix</tag> <tag>title</tag>.
It interferes with the start-indent property.</phrase></screen>
</listitem>
</itemizedlist>
</sect2><!--end of Params changes for 1.78.1-->
<sect2 xml:id="V1.78.1_Highlighting">
<title>Highlighting</title>
<para>The following changes have been made to the
<filename>highlighting</filename> code
since the 1.78.0 release.</para>
<itemizedlist>
<listitem>
<para><literal>Jirka Kosek: c-hl.xml; cpp-hl.xml; sql2003-hl.xml; php-hl.xml; upc-hl.xml; bourne-hl.xml; ⋯</literal></para><screen><phrase role="commit-message">Added new definitions for syntax highlighting</phrase></screen>
</listitem>
</itemizedlist>
</sect2><!--end of Highlighting changes for 1.78.1-->
</sect1>
</article>

View File

@ -1,175 +0,0 @@
----------------------------------------------------------------------
README file for the DocBook XSL Stylesheets
----------------------------------------------------------------------
$Id: README 9731 2013-03-17 05:01:54Z bobstayton $
These are XSL stylesheets for transforming DocBook XML document
instances into various output formats.
This README file provides only very minimal documentation on using
the stylesheets. For more complete information, see Bob Stayton's
book "DocBook XSL: The Complete Guide", available online at:
http://www.sagehill.net/docbookxsl/
----------------------------------------------------------------------
Installation
----------------------------------------------------------------------
See the INSTALL file for information about installing this release.
----------------------------------------------------------------------
How to use the stylesheets
----------------------------------------------------------------------
The base canonical URI for these stylesheets is:
http://docbook.sourceforge.net/release/xsl/current/
You call any of the stylesheets in this distribution by doing one
of the following:
- Use the base canonical URI in combination with one of the
pathnames below. For example, for "chunked" HTML, output:
http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl
If your system has a working XML Catalog or SGML Catalog setup
(most Linux systems do), then that URI will automatically be
resolved and replaced with a local pathname on your system.
- Use a "real" local system base path in combination with one of
the pathnames below. For example, for "chunked" HTML, output:
/usr/share/xml/docbook/stylesheet/nwalsh/html/chunk.xsl
To transform documents created with the standard DocBook
schema/DTD, use one of the following stylesheets:
fo/docbook.xsl - for XSL-FO
html/docbook.xsl - for HTML (as a single file)
html/chunk.xsl - for HTML (chunked into multiple files)
html/onechunk.xsl - for HTML (chunked output in single file)
xhtml/*.xsl - for XHTML versions of the above
xhtml-1_1/*.xsl - for XHTML 1.1 versions of the above
xhtml5/*.xsl - for XHTML5 versions of the above
epub/docbook.xsl - for .epub version 2 and earlier
epub3/docbook.xsl - for .epub version 3 and later
htmlhelp/htmlhelp.xsl - for HTML Help
javahelp/javahelp.xsl - for JavaHelp
eclipse/eclipse.xsl - for Eclipse Help
manpages/docbook.xsl - for groff/nroff man pages
*/profile-* - single-pass-profiling versions of all above
roundtrip/*.xsl - for DocBook to WordML, etc., to DocBook
assembly/assemble.xsl - converts an assembly into a DocBook document
assembly/topic-maker-chunk.xsl
- converts a DocBook document into an assembly
with topic files.
webhelp/build.xml - Ant script to generate webhelp output.
webhelp/Makefile - Makefile to generate webhelp output.
To transform documents created with the DocBook Slides schema/DTD,
use one of the following stylesheets:
slides/xhtml/*.xsl - for XHTML slides of various kinds
slides/fo/plain.xsl - for XSL-FO slides
To transform documents created with the DocBook Website
schema/DTD, use one of the following stylesheets:
website/website.xsl - for non-tabular, non-chunked output
website/tabular.xsl - for tabular, non-chunked output
website/chunk-* - for chunked output
To generate a titlepage customization layer from a titlepage spec:
template/titlepage.xsl
For fo titlepage customizations, set the stylesheet parameter named 'ns'
to 'http://www.w3.org/1999/XSL/Format' when using this stylesheet.
For xhtml titlepage customizations, set the stylesheet parameter named 'ns'
to 'http://www.w3.org/1999/xhtml' when using this stylesheet.
For details about creating titlepage spec files and generating and
using titlepage customization layers, see "DocBook XSL: The
Complete Guide" <http://www.sagehill.net/docbookxsl/>
----------------------------------------------------------------------
Manifest
----------------------------------------------------------------------
AUTHORS contact information
BUGS about known problems
COPYING copyright information
INSTALL installation instructions
README this file
RELEASE.* per-release cumulative summaries of user-visible changes
TODO about planned features not yet implemented
VERSION release metadata, including the current version
number (note that the VERSION file is an XSL stylesheet)
NEWS changes since the last public release (for a cumulative list of
changes, see the ChangeHistory.xml file)
assembly/ for making and processing DocBook assemblies.
common/ code used among several output formats (HTML, FO, manpages,...)
docsrc/ documentation sources
eclipse/ for producing Eclipse Help
epub/ for producing .epub version 2.
epub3/ for producing .epub version 3 and beyond.
extensions/ DocBook XSL Java extensions
fo/ for producing XSL-FO
highlighting files used for adding source-code syntax highlighting in output
html/ for producing HTML
htmlhelp/ for producing HTML Help
images/ images used in callouts and graphical admonitions
javahelp/ for producing Java Help
lib/ utility stylesheets with schema-independent functions
manpages/ for producing groff/troff man pages
profiling/ for profiling (omitting/including conditional text)
roundtrip/ for "round trip" conversion among DocBook and
various word-processor formats (WordML, etc.)
slides/ for producing slides output (from Slides source)
template/ templates for building stylesheet customization layers
tools/ assorted supplementary tools
webhelp/ templates and scripts for generating webhelp output
website/ for producing website output (from Website source)
xhtml/ for producing XHTML
xhtml-1_1/ for producing (stricter) XHTML 1.1
xhtml5/ for producing XHTML5
----------------------------------------------------------------------
Changes
----------------------------------------------------------------------
See the NEWS file for changes made since the previous release.
See the RELEASE-NOTES.html or RELEASE-NOTES.txt or RELEASE-NOTES.pdf
files for per-release cumulative summaries of significant
user-visible changes.
For online access to a hyperlinked view of all changes made over
the entire history of the codebase, see the following:
http://docbook.svn.sourceforge.net/viewvc/docbook/trunk/xsl/?view=log
WARNING: That above change history is a very long list and may
take a long time to load/download.
You can also create an XML-formatted "ChangeHistory.xml" copy of
the complete change history for the codebase by running the
following commands:
svn checkout https://docbook.svn.sf.net/svnroot/docbook/trunk/xsl
svn log --xml --verbose xsl > ChangeHistory.xml
----------------------------------------------------------------------
Copyright information
----------------------------------------------------------------------
See the accompanying file named COPYING.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,23 +0,0 @@
The "to do" list for the DocBook Project XSL stylesheets is
maintained at Sourceforge. To view a list of all open feature
requests for the stylesheets:
http://docbook.sf.net/tracker/xsl/requests
To submit a feature request against the stylesheets:
http://docbook.sf.net/tracker/submit/request
To do a full-text search of all DocBook Project issues:
http://docbook.sf.net/tracker/search
Discussion about the DocBook Project XSL stylesheets takes place
on the docbook-apps mailing list:
http://wiki.docbook.org/topic/DocBookAppsMailingList
Real-time discussion takes place on IRC:
http://wiki.docbook.org/topic/DocBookIrcChannel
irc://irc.freenode.net/docbook

View File

@ -1,115 +0,0 @@
<?xml version='1.0'?> <!-- -*- nxml -*- vim: set foldlevel=2: -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fm="http://freshmeat.net/projects/freshmeat-submit/"
xmlns:sf="http://sourceforge.net/"
xmlns:dyn="http://exslt.org/dynamic"
xmlns:saxon="http://icl.com/saxon"
exclude-result-prefixes="fm sf"
version='1.0'>
<xsl:param name="get"/>
<xsl:param name="VERSION" select="string(document('')//fm:Version[1])"/>
<xsl:param name="Tag" select="concat('V',translate(string(document('')//fm:Version[1]),'.',''))"/>
<xsl:param name="DistroTitle" select="string(document('')//fm:Branch[1])"/>
<xsl:param name="sf-relid" select="0"/>
<xsl:param name="DistroName">docbook-xsl</xsl:param>
<xsl:param name="PreviousRelease">1.78.0</xsl:param>
<xsl:param name="PreviousReleaseRevision">9696</xsl:param>
<xsl:param name="Revision">$Revision: 9731 $</xsl:param>
<xsl:param name="VersionFileURL">$URL: https://docbook.svn.sourceforge.net/svnroot/docbook/trunk/xsl/VERSION $</xsl:param>
<xsl:strip-space elements="fm:*"/>
<fm:project>
<fm:Project>DocBook</fm:Project>
<fm:Branch>XSL Stylesheets</fm:Branch>
<!-- * set/keep fm:version as N.NN.N-pre except for official releases, -->
<!-- * then after the release, revert it to N.NN.N-pre & check back in -->
<fm:Version>1.78.1</fm:Version>
<!--
<fm:License>MIT/X Consortium License</fm:License>
-->
<fm:Release-Focus>
<!-- * Initial freshmeat announcement -->
<!-- * Documentation -->
<!-- * Code cleanup -->
<!-- * Minor feature enhancements -->
* Major feature enhancements
<!-- * Minor bugfixes -->
<!-- * Major bugfixes -->
<!-- * Minor security fixes -->
<!-- * Major security fixes -->
</fm:Release-Focus>
<fm:Home-Page-URL>http://sourceforge.net/projects/docbook/</fm:Home-Page-URL>
<fm:Gzipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.tar.gz?download</fm:Gzipped-Tar-URL>
<fm:Zipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.zip?download</fm:Zipped-Tar-URL>
<fm:Bzipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.bz2?download</fm:Bzipped-Tar-URL>
<fm:Changelog-URL>http://sourceforge.net/project/shownotes.php?release_id={SFRELID}</fm:Changelog-URL>
<fm:CVS-URL>http://docbook.svn.sourceforge.net/viewvc/docbook/</fm:CVS-URL>
<fm:Mailing-List-URL>http://lists.oasis-open.org/archives/docbook-apps/</fm:Mailing-List-URL>
<fm:Changes>This is a release with bugfixes and some enhancements.</fm:Changes>
</fm:project>
<xsl:template match="/" priority="-100">
<xsl:choose>
<xsl:when test="$get = 'Tag'">
<xsl:value-of select="$Tag"/>
</xsl:when>
<xsl:when test="$get = 'PreviousRelease'">
<xsl:value-of select="$PreviousRelease"/>
</xsl:when>
<xsl:when test="$get = 'PreviousReleaseRevision'">
<xsl:value-of select="$PreviousReleaseRevision"/>
</xsl:when>
<xsl:when test="$get = 'DistroTitle'">
<xsl:value-of select="$DistroTitle"/>
</xsl:when>
<xsl:when test="$get = 'VERSION'">
<xsl:value-of select="$VERSION"/>
</xsl:when>
<xsl:otherwise>
<xsl:if test="$sf-relid = 0">
<xsl:message terminate="yes">
<xsl:text>You must specify the sf-relid as a parameter.</xsl:text>
</xsl:message>
</xsl:if>
<xsl:apply-templates select="//fm:project"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="fm:project">
<xsl:apply-templates/>
<xsl:text>&#10;</xsl:text>
<xsl:apply-templates select="fm:Changes" mode="text"/>
</xsl:template>
<xsl:template match="fm:Changes"/>
<xsl:template match="fm:Gzipped-Tar-URL|fm:Zipped-Tar-URL|fm:Bzipped-Tar-URL">
<xsl:value-of select="local-name(.)"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="substring-before(., '{DISTRONAME-VERSION}')"/>
<xsl:value-of select="concat($DistroName, '-', $VERSION)"/>
<xsl:value-of select="substring-after(., '{DISTRONAME-VERSION}')"/>
<xsl:text>&#10;</xsl:text>
</xsl:template>
<xsl:template match="fm:Changelog-URL">
<xsl:value-of select="local-name(.)"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="substring-before(., '{SFRELID}')"/>
<xsl:value-of select="$sf-relid"/>
<xsl:value-of select="substring-after(., '{SFRELID}')"/>
<xsl:text>&#10;</xsl:text>
</xsl:template>
<xsl:template match="fm:*">
<xsl:value-of select="local-name(.)"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="normalize-space(.)"/>
<xsl:text>&#10;</xsl:text>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,115 +0,0 @@
<?xml version='1.0'?> <!-- -*- nxml -*- vim: set foldlevel=2: -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fm="http://freshmeat.net/projects/freshmeat-submit/"
xmlns:sf="http://sourceforge.net/"
xmlns:dyn="http://exslt.org/dynamic"
xmlns:saxon="http://icl.com/saxon"
exclude-result-prefixes="fm sf"
version='1.0'>
<xsl:param name="get"/>
<xsl:param name="VERSION" select="string(document('')//fm:Version[1])"/>
<xsl:param name="Tag" select="concat('V',translate(string(document('')//fm:Version[1]),'.',''))"/>
<xsl:param name="DistroTitle" select="string(document('')//fm:Branch[1])"/>
<xsl:param name="sf-relid" select="0"/>
<xsl:param name="DistroName">docbook-xsl</xsl:param>
<xsl:param name="PreviousRelease">1.78.0</xsl:param>
<xsl:param name="PreviousReleaseRevision">9696</xsl:param>
<xsl:param name="Revision">$Revision: 9731 $</xsl:param>
<xsl:param name="VersionFileURL">$URL: https://docbook.svn.sourceforge.net/svnroot/docbook/trunk/xsl/VERSION $</xsl:param>
<xsl:strip-space elements="fm:*"/>
<fm:project>
<fm:Project>DocBook</fm:Project>
<fm:Branch>XSL Stylesheets</fm:Branch>
<!-- * set/keep fm:version as N.NN.N-pre except for official releases, -->
<!-- * then after the release, revert it to N.NN.N-pre & check back in -->
<fm:Version>1.78.1</fm:Version>
<!--
<fm:License>MIT/X Consortium License</fm:License>
-->
<fm:Release-Focus>
<!-- * Initial freshmeat announcement -->
<!-- * Documentation -->
<!-- * Code cleanup -->
<!-- * Minor feature enhancements -->
* Major feature enhancements
<!-- * Minor bugfixes -->
<!-- * Major bugfixes -->
<!-- * Minor security fixes -->
<!-- * Major security fixes -->
</fm:Release-Focus>
<fm:Home-Page-URL>http://sourceforge.net/projects/docbook/</fm:Home-Page-URL>
<fm:Gzipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.tar.gz?download</fm:Gzipped-Tar-URL>
<fm:Zipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.zip?download</fm:Zipped-Tar-URL>
<fm:Bzipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.bz2?download</fm:Bzipped-Tar-URL>
<fm:Changelog-URL>http://sourceforge.net/project/shownotes.php?release_id={SFRELID}</fm:Changelog-URL>
<fm:CVS-URL>http://docbook.svn.sourceforge.net/viewvc/docbook/</fm:CVS-URL>
<fm:Mailing-List-URL>http://lists.oasis-open.org/archives/docbook-apps/</fm:Mailing-List-URL>
<fm:Changes>This is a release with bugfixes and some enhancements.</fm:Changes>
</fm:project>
<xsl:template match="/" priority="-100">
<xsl:choose>
<xsl:when test="$get = 'Tag'">
<xsl:value-of select="$Tag"/>
</xsl:when>
<xsl:when test="$get = 'PreviousRelease'">
<xsl:value-of select="$PreviousRelease"/>
</xsl:when>
<xsl:when test="$get = 'PreviousReleaseRevision'">
<xsl:value-of select="$PreviousReleaseRevision"/>
</xsl:when>
<xsl:when test="$get = 'DistroTitle'">
<xsl:value-of select="$DistroTitle"/>
</xsl:when>
<xsl:when test="$get = 'VERSION'">
<xsl:value-of select="$VERSION"/>
</xsl:when>
<xsl:otherwise>
<xsl:if test="$sf-relid = 0">
<xsl:message terminate="yes">
<xsl:text>You must specify the sf-relid as a parameter.</xsl:text>
</xsl:message>
</xsl:if>
<xsl:apply-templates select="//fm:project"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="fm:project">
<xsl:apply-templates/>
<xsl:text>&#10;</xsl:text>
<xsl:apply-templates select="fm:Changes" mode="text"/>
</xsl:template>
<xsl:template match="fm:Changes"/>
<xsl:template match="fm:Gzipped-Tar-URL|fm:Zipped-Tar-URL|fm:Bzipped-Tar-URL">
<xsl:value-of select="local-name(.)"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="substring-before(., '{DISTRONAME-VERSION}')"/>
<xsl:value-of select="concat($DistroName, '-', $VERSION)"/>
<xsl:value-of select="substring-after(., '{DISTRONAME-VERSION}')"/>
<xsl:text>&#10;</xsl:text>
</xsl:template>
<xsl:template match="fm:Changelog-URL">
<xsl:value-of select="local-name(.)"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="substring-before(., '{SFRELID}')"/>
<xsl:value-of select="$sf-relid"/>
<xsl:value-of select="substring-after(., '{SFRELID}')"/>
<xsl:text>&#10;</xsl:text>
</xsl:template>
<xsl:template match="fm:*">
<xsl:value-of select="local-name(.)"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="normalize-space(.)"/>
<xsl:text>&#10;</xsl:text>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,195 +0,0 @@
DocBook Assembly Stylesheets
==============================
bobs@sagehill.net
This directory provides XSL stylesheets for working with
DocBook assemblies. It is intended to enable working with
<topic> and <assembly> elements, as defined in DocBook 5.1
and later.
This kit currently supports most features of an assembly.
See the "Unsupported Features" section below for details
of what is not currently supported. These more advanced
features will be supported as it is further developed.
Content of this directory:
--------------------------
topic-maker-chunk.xsl - stylesheet to modularize an existing DB5 document.
topic-maker.xsl - imported by topic-maker-chunk.xsl.
assemble.xsl - stylesheet to process an <assembly> into a document.
The toolkit consists of an assemble.xsl XSL stylesheet
to process a DocBook <assembly> element to convert it
to an assembled DocBook 5 document ready to be formatted.
This stylesheet will enable users to structure a book from
modular files.
To make it easy to initially create a modular book, this
kit also includes a topic-maker-chunk.xsl XSL stylesheet
to break apart an existing DocBook 5 book into modular
files, and also create the associated <assembly> document.
Then you can run the assemble.xsl stylesheet to put it
back together as a single DocBook document.
To create an assembly and topic files from a book or article document
=======================================================================
If you have an existing DocBook 5 book or article document,
you can convert it to an assembly and a collection of
modular topic files. If you want to convert a DocBook 4
document, you must first convert it to version 5.
For example, to disassemble a DocBook 5 book document named book.xml:
xsltproc --xinclude \
--stringparam assembly.filename myassembly.xml \
--stringparam base.dir topics/ \
topic-maker-chunk.xsl \
mybook.xml
This command will result in a master assembly file named
'myassembly.xml' with a root element of <assembly>, containing
a single <structure> element. It will also break up the
content of the book into modular chunks that are output
to the 'topics/' subdirectory as specified in the 'base.dir'
parameter.
Options
----------
The name of the assembly file is set by the stylesheet param
named 'assembly.filename', which should include the filename suffix.
Modular files are output to the directory location specified
by the 'base.dir' parameter. If you want them in the current
directory, then don't set that param.
By default the assembly element is output to the current
directory, *not* into base.dir with the modular files.
The <resources> element in the assembly has its xml:base
attribute set to the value of 'base.dir', so that it is
added to the paths to the modular files when processed.
If you set the stylesheet param 'manifest.in.base.dir'
to 1, then the assembly file is created in the base.dir
directory and the xml:base attribute is omitted (since
they are together in the same directory).
If you want the assembly file in 'base.dir' instead of
the current directory, then set the stylesheet param
'manifest.in.base.dir' to 1.
The stylesheet chunks a document into modules at the
same boundaries as the chunking XHTML stylesheet, because
it reuses many of the chunking stylesheet templates.
You can alter the chunking behavior with the same options
as for XHTML chunking.
For example, the stylesheet will chunk sections into topics
down to section level 3 by default. To change that level,
change the stylesheet param 'chunk.section.depth' to
another value.
Finer control of chunking can be achieved by using
the <?dbhtml stop-chunking?> processing instruction in
the source file.
Many modular elements retain their original element name,
such as glossary, bibliography, index, and such. By default, the
stylesheet converts chapter, article, preface and section elements
into <topic> modules. To change that list of
converted element names, alter the stylesheet param named
'topic.elements'. If that param is empty, then no elements
will be converted to <topic>, so they will all retain their
original element names.
Modular filenames use the same naming scheme as the chunking
XHTML stylesheet, and supports the same file naming options such as
the param 'use.id.as.filename', which is set to 1 by default.
Note that the stylesheet param 'html.ext' is set to '.xml'
because it is producing modular XML files, not HTML files.
Root element conversion
------------------------
By default, the root element of the original document is
also converted to a module, and <structure> gets a resourceref
attribute to reference it. If you set the stylesheet
param 'root.as.resourceref' to zero, then the root element
is handled differently, as described as follows.
If the structure element does not have a resourcref
attribute, the root element is constructed rather
than copied from a resource. The structure element must
have a renderas attribute (or its child output element must
have such) to select the output root element name.
Any content between the root element start tag and the
first module is put into a resource with the original
root element. To pull this content in, the first
module in the structure points to this resource but
uses a contentonly="yes" attribute. The effect of
that attribute is to pull in all content *except*
the root element of that resource.
In general, if you have content that does not logically
have its own container element, you can put the content
into a suitable container element and then deselect the
container element upon assembly with the contentonly="yes"
attribute. That attribute can also be used to avoid
pulling in a resource's xml:id when you want to change it.
To process an <assembly> into an assembled DocBook document
==============================================================
To convert an <assembly> and its associated modular
files into a single DocBook document, process
your assembly document with the assemble.xsl stylesheet.
You should then be able to process the resulting
document with a DocBook XSL formatting stylesheet.
Useful params in assemble.xsl
-----------------------------
The $root.default.renderas param sets the name of the
root element of the assembled document, if it is not
otherwise specified with @renderas. Its default value
is 'book'.
The $topic.default.renderas param sets the name of the
output element for any topic element included in the
assembly, if it is not otherwise specified with
@renderas. It's default value is 'section'.
The $structure.id param lets you specify at runtime
the id value of the structure you want to reassemble.
This is only necessary if you have more than one
structure element in your assembly.
The $output.type param also lets you specify at runtime
which structure element to process. In this case,
the value should match on an @type attribute on
the structure element.
The $output.format param lets you specify at runtime
which of several possible output formats are being generated.
The param value is compared to the @format
attribute on <output> elements to select specific properties
for a module.
Unsupported Features
-----------------------
The transforms and transform elements are currently ignored
by the assembly stylesheet.
The relationships and relationship elements are currently
ignored by the assembly stylesheet.
The filterin and filterout elements are not currently
supported.

View File

@ -1,677 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://docbook.org/ns/docbook"
exclude-result-prefixes="exsl d xlink"
version="1.0">
<!-- $Id: assemble.xsl,v 1.10 2012-04-10 07:56:58 bobs Exp $ -->
<xsl:preserve-space elements="*"/>
<xsl:strip-space elements="d:assembly d:structure d:module d:resources d:resource"/>
<xsl:key name="id" match="*" use="@id|@xml:id"/>
<xsl:param name="docbook.version">5.0</xsl:param>
<xsl:param name="root.default.renderas">book</xsl:param>
<xsl:param name="topic.default.renderas">section</xsl:param>
<xsl:param name="output.type" select="''"/>
<xsl:param name="output.format" select="''"/>
<!-- May be used to select one structure among several to process -->
<xsl:param name="structure.id" select="''"/>
<!-- default mode is to copy all content nodes -->
<xsl:template match="node()|@*" priority="-5" mode="copycontent">
<xsl:param name="omittitles"/>
<xsl:copy>
<xsl:apply-templates select="@*" mode="copycontent"/>
<xsl:apply-templates mode="copycontent">
<xsl:with-param name="omittitles" select="$omittitles"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="processing-instruction('oxygen')"/>
<!-- skip assembly info elements -->
<xsl:template match="d:info"/>
<!-- including for structure info element -->
<xsl:template match="d:structure/d:info"/>
<!-- handle omittitles, but only top level title of resource -->
<xsl:template match="/*/d:title
| /*/d:info/d:title
| /*/d:subtitle
| /*/d:info/d:subtitle
| /*/d:titleabbrev
| /*/d:info/d:titleabbrev"
mode="copycontent">
<xsl:param name="omittitles"/>
<xsl:choose>
<xsl:when test="$omittitles = 'yes' or $omittitles = 'true' or $omittitles = '1'">
<!-- omit it -->
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*" mode="copycontent"/>
<xsl:apply-templates mode="copycontent"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- handled in a mode -->
<xsl:template match="d:resources"/>
<xsl:template match="d:output|d:filterin|d:filterout|d:merge|d:revhistory"/>
<xsl:template match="d:output|d:filterin|d:filterout|d:merge|d:revhistory"
mode="copycontent"/>
<xsl:template match="d:assembly">
<xsl:choose>
<xsl:when test="$structure.id != ''">
<xsl:variable name="id.structure" select="key('id', $structure.id)"/>
<xsl:choose>
<xsl:when test="count($id.structure) = 0">
<xsl:message terminate="yes">
<xsl:text>ERROR: structure.id param set to '</xsl:text>
<xsl:value-of select="$structure.id"/>
<xsl:text>' but no element with that xml:id exists in assembly.</xsl:text>
</xsl:message>
</xsl:when>
<xsl:when test="local-name($id.structure) != 'structure'">
<xsl:message terminate="yes">
<xsl:text>ERROR: structure.id param set to '</xsl:text>
<xsl:value-of select="$structure.id"/>
<xsl:text>' but no structure with that xml:id exists in assembly.</xsl:text>
</xsl:message>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="key('id', $structure.id)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="$output.type != '' and not(d:structure[@type = $output.type])">
<xsl:message terminate="yes">
<xsl:text>ERROR: output.type param set to '</xsl:text>
<xsl:value-of select="$output.type"/>
<xsl:text> but no structure element has that type attribute. Exiting.</xsl:text>
</xsl:message>
</xsl:when>
<xsl:when test="$output.type != '' and d:structure[@type = $output.type]">
<xsl:apply-templates select="d:structure[@type = $output.type][1]"/>
</xsl:when>
<xsl:otherwise>
<!-- otherwise process the first structure -->
<xsl:apply-templates select="d:structure[1]"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="d:structure[not(@resourceref)]">
<xsl:variable name="output.root.element">
<xsl:apply-templates select="." mode="compute.element.name"/>
</xsl:variable>
<xsl:element name="{$output.root.element}" namespace="http://docbook.org/ns/docbook">
<xsl:attribute name="version">
<xsl:value-of select="$docbook.version"/>
</xsl:attribute>
<xsl:copy-of select="@xml:id"/>
<xsl:apply-templates>
<xsl:with-param name="parent" select="$output.root.element"/>
</xsl:apply-templates>
</xsl:element>
</xsl:template>
<xsl:template match="d:glossary|d:bibliography|d:index|d:toc">
<xsl:param name="parent" select="''"/>
<xsl:apply-templates select="." mode="copycontent"/>
</xsl:template>
<xsl:template match="d:title|d:titleabbrev|d:subtitle">
<xsl:param name="parent" select="''"/>
<xsl:apply-templates select="." mode="copycontent"/>
</xsl:template>
<!-- module without a resourceref creates an element -->
<xsl:template match="d:module[not(@resourceref)]">
<xsl:param name="parent" select="''"/>
<xsl:variable name="module" select="."/>
<xsl:variable name="element.name">
<xsl:apply-templates select="." mode="compute.element.name"/>
</xsl:variable>
<xsl:element name="{$element.name}" namespace="http://docbook.org/ns/docbook">
<xsl:choose>
<!-- Use the module's xml:id if it has one -->
<xsl:when test="@xml:id">
<xsl:attribute name="xml:id">
<xsl:value-of select="@xml:id"/>
</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:call-template name="merge.info">
<xsl:with-param name="merge.element" select="$module/d:merge"/>
</xsl:call-template>
<xsl:apply-templates>
<xsl:with-param name="parent" select="$element.name"/>
</xsl:apply-templates>
</xsl:element>
</xsl:template>
<xsl:template name="compute.renderas">
<xsl:variable name="output.value">
<xsl:call-template name="compute.output.value">
<xsl:with-param name="property">renderas</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$output.value"/>
</xsl:template>
<!-- This utility template is passed a value for output format
and the name of a property and computes the value
of the property from output children of context element -->
<xsl:template name="compute.output.value">
<xsl:param name="property" select="''"/>
<xsl:variable name="default.format"
select="ancestor::d:structure/@defaultformat"/>
<xsl:variable name="property.value">
<xsl:choose>
<!-- if a child output element has a format that matches the param value
and it has that property -->
<!-- The format attribute can be multivalued -->
<xsl:when test="$output.format != '' and
d:output[contains(concat(' ', normalize-space(@format), ' '),
$output.format)]
[@*[local-name() = $property]]">
<xsl:value-of
select="d:output[contains(concat(' ', normalize-space(@format), ' '),
$output.format)]
[@*[local-name() = $property]][1]
/@*[local-name() = $property]"/>
</xsl:when>
<!-- try with the structure's @defaultformat -->
<xsl:when test="$default.format != '' and
d:output[contains(concat(' ', normalize-space(@format), ' '),
$default.format)]
[@*[local-name() = $property]]">
<xsl:value-of
select="d:output[contains(concat(' ', normalize-space(@format), ' '),
$default.format)]
[@*[local-name() = $property]][1]
/@*[local-name() = $property]"/>
</xsl:when>
<!-- try the first output with the property-->
<xsl:when test="d:output[@*[local-name() = $property]]">
<xsl:value-of
select="d:output[@*[local-name() = $property]][1]
/@*[local-name() = $property]"/>
</xsl:when>
<!-- and try the module element itself -->
<xsl:when test="@*[local-name() = $property]">
<xsl:value-of
select="@*[local-name() = $property]"/>
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$property.value"/>
</xsl:template>
<xsl:template match="d:module[not(@resourceref)]" mode="compute.element.name">
<xsl:variable name="renderas">
<xsl:call-template name="compute.renderas"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="string-length($renderas) != 0">
<xsl:value-of select="$renderas"/>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
<xsl:text>ERROR: cannot determine output element name for </xsl:text>
<xsl:text>module with no @resourceref and no @renderas. Exiting.</xsl:text>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="d:module[@resourceref]" mode="compute.element.name">
<xsl:param name="ref.name" select="''"/>
<xsl:variable name="renderas">
<xsl:call-template name="compute.renderas"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="string-length($renderas) != 0">
<xsl:value-of select="$renderas"/>
</xsl:when>
<xsl:when test="$ref.name = 'topic' and
string-length($topic.default.renderas) != 0">
<xsl:value-of select="$topic.default.renderas"/>
</xsl:when>
<xsl:when test="string-length($ref.name) != 0">
<xsl:value-of select="$ref.name"/>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
<xsl:text>ERROR: cannot determine output element name for </xsl:text>
<xsl:text>@resourceref="</xsl:text>
<xsl:value-of select="@resourceref"/>
<xsl:text>". Exiting.</xsl:text>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="d:structure" mode="compute.element.name">
<xsl:param name="ref.name" select="''"/>
<xsl:variable name="renderas">
<xsl:call-template name="compute.renderas"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="string-length($renderas) != 0">
<xsl:value-of select="$renderas"/>
</xsl:when>
<xsl:when test="string-length($ref.name) != 0">
<xsl:value-of select="$ref.name"/>
</xsl:when>
<xsl:when test="string-length($root.default.renderas) != 0">
<xsl:value-of select="$root.default.renderas"/>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
<xsl:text>ERROR: cannot determine output element name for </xsl:text>
<xsl:text>structure with no @renderas and no $root.default.renderas. </xsl:text>
<xsl:text>Exiting.</xsl:text>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="d:module[@resourceref] | d:structure[@resourceref]">
<xsl:param name="parent" select="''"/>
<xsl:variable name="module" select="."/>
<xsl:variable name="resourceref" select="@resourceref"/>
<xsl:variable name="resource" select="key('id', $resourceref)"/>
<xsl:choose>
<xsl:when test="not($resource)">
<xsl:message terminate="yes">
<xsl:text>ERROR: no xml:id matches @resourceref = '</xsl:text>
<xsl:value-of select="$resourceref"/>
<xsl:text>'.</xsl:text>
</xsl:message>
</xsl:when>
<xsl:when test="not($resource/self::d:resource)">
<xsl:message terminate="yes">
<xsl:text>ERROR: xml:id matching @resourceref = '</xsl:text>
<xsl:value-of select="$resourceref"/>
<xsl:text> is not a resource element'.</xsl:text>
</xsl:message>
</xsl:when>
</xsl:choose>
<xsl:variable name="fileref.att" select="$resource/@fileref"/>
<xsl:variable name="fragment.id">
<xsl:if test="contains($fileref.att, '#')">
<xsl:value-of select="substring-after($fileref.att, '#')"/>
</xsl:if>
</xsl:variable>
<xsl:variable name="filename">
<xsl:choose>
<xsl:when test="string-length($fragment.id) != 0">
<xsl:value-of select="substring-before($fileref.att, '#')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$fileref.att"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="fileref">
<xsl:choose>
<xsl:when test="$resource/ancestor::d:resources/@xml:base">
<xsl:value-of
select="concat($resource/ancestor::d:resources[@xml:base][1]/@xml:base,
'/', $filename)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$filename"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="string-length($fileref) = 0">
<!-- A resource without @fileref gets its content copied -->
<xsl:apply-templates select="$resource/node()" mode="copycontent"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="ref.file.content" select="document($fileref,/)"/>
<!-- selects root or fragmeht depending on if $fragment is blank -->
<xsl:variable name="ref.content"
select="$ref.file.content/*[1][$fragment.id = ''] |
$ref.file.content/*[1][$fragment.id != '']/
descendant-or-self::*[@xml:id = $fragment.id]"/>
<xsl:if test="count($ref.content) = 0">
<xsl:message terminate="yes">
<xsl:text>ERROR: @fileref = '</xsl:text>
<xsl:value-of select="$fileref"/>
<xsl:text>' has no content or is unresolved.</xsl:text>
</xsl:message>
</xsl:if>
<xsl:variable name="element.name">
<xsl:apply-templates select="." mode="compute.element.name">
<xsl:with-param name="ref.name" select="local-name($ref.content)"/>
</xsl:apply-templates>
</xsl:variable>
<xsl:variable name="omittitles.property">
<xsl:call-template name="compute.output.value">
<xsl:with-param name="property">omittitles</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="contentonly.property">
<xsl:call-template name="compute.output.value">
<xsl:with-param name="property">contentonly</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$contentonly.property = 'true' or
$contentonly.property = 'yes' or
$contentonly.property = '1'">
<xsl:apply-templates select="$ref.content/node()" mode="copycontent">
<xsl:with-param name="omittitles" select="$omittitles.property"/>
</xsl:apply-templates>
</xsl:when>
<!-- use xsl:copy if using the ref element itself to get its namespaces -->
<xsl:when test="$element.name = local-name($ref.content)">
<!-- must use for-each to set context node for xsl:copy -->
<xsl:for-each select="$ref.content">
<xsl:copy>
<xsl:copy-of select="@*[not(name() = 'xml:id')]"/>
<xsl:choose>
<!-- Use the module's xml:id if it has one -->
<xsl:when test="$module/@xml:id">
<xsl:attribute name="xml:id">
<xsl:value-of select="$module/@xml:id"/>
</xsl:attribute>
</xsl:when>
<!-- otherwise use the resource's id -->
<xsl:otherwise>
<xsl:copy-of select="@xml:id"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="merge.info">
<xsl:with-param name="merge.element" select="$module/d:merge"/>
<xsl:with-param name="ref.content" select="$ref.content"/>
<xsl:with-param name="omittitles" select="$omittitles.property"/>
</xsl:call-template>
<!-- copy through all but titles, which moved to info -->
<xsl:apply-templates select="node()
[not(local-name() = 'title') and
not(local-name() = 'subtitle') and
not(local-name() = 'info') and
not(local-name() = 'titleabbrev')]" mode="copycontent"/>
<xsl:apply-templates select="$module/node()">
<xsl:with-param name="parent" select="$element.name"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<!-- create the element instead of copying it -->
<xsl:element name="{$element.name}" namespace="http://docbook.org/ns/docbook">
<xsl:copy-of select="$ref.content/@*[not(name() = 'xml:id')]"/>
<xsl:choose>
<!-- Use the module's xml:id if it has one -->
<xsl:when test="@xml:id">
<xsl:attribute name="xml:id">
<xsl:value-of select="@xml:id"/>
</xsl:attribute>
</xsl:when>
<!-- otherwise use the resource's id -->
<xsl:when test="$ref.content/@xml:id">
<xsl:attribute name="xml:id">
<xsl:value-of select="$ref.content/@xml:id"/>
</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:call-template name="merge.info">
<xsl:with-param name="merge.element" select="d:merge"/>
<xsl:with-param name="ref.content" select="$ref.content"/>
<xsl:with-param name="omittitles" select="$omittitles.property"/>
</xsl:call-template>
<!-- copy through all but titles, which moved to info -->
<xsl:apply-templates select="$ref.content/node()
[not(local-name() = 'title') and
not(local-name() = 'subtitle') and
not(local-name() = 'info') and
not(local-name() = 'titleabbrev')]" mode="copycontent"/>
<xsl:apply-templates>
<xsl:with-param name="parent" select="$element.name"/>
</xsl:apply-templates>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="merge.info">
<xsl:param name="merge.element" select="NOTANODE"/>
<xsl:param name="ref.content" select="NOTANODE"/>
<xsl:param name="omittitles"/>
<!-- a merge element may use resourceref as well as literal content -->
<!-- any literal content overrides the merge resourceref content -->
<xsl:variable name="merge.ref.content">
<xsl:if test="$merge.element/@resourceref">
<xsl:variable name="resourceref" select="$merge.element/@resourceref"/>
<xsl:variable name="resource" select="key('id', $resourceref)"/>
<xsl:choose>
<xsl:when test="not($resource)">
<xsl:message terminate="yes">
<xsl:text>ERROR: no xml:id matches @resourceref = '</xsl:text>
<xsl:value-of select="$resourceref"/>
<xsl:text>'.</xsl:text>
</xsl:message>
</xsl:when>
<xsl:when test="not($resource/self::d:resource)">
<xsl:message terminate="yes">
<xsl:text>ERROR: xml:id matching @resourceref = '</xsl:text>
<xsl:value-of select="$resourceref"/>
<xsl:text> is not a resource element'.</xsl:text>
</xsl:message>
</xsl:when>
</xsl:choose>
<xsl:variable name="fileref.att" select="$resource/@fileref"/>
<xsl:variable name="fileref">
<xsl:choose>
<xsl:when test="$resource/ancestor::d:resources/@xml:base">
<xsl:value-of
select="concat($resource/ancestor::d:resources[@xml:base][1]/@xml:base,
'/', $fileref.att)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$fileref.att"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="string-length($fileref) != 0">
<xsl:copy-of select="document($fileref,/)"/>
</xsl:if>
</xsl:if>
</xsl:variable>
<xsl:variable name="merge.ref.info"
select="exsl:node-set($merge.ref.content)//d:info[1]"/>
<xsl:if test="$merge.element/@resourceref and not($merge.ref.info)">
<xsl:message terminate="yes">
<xsl:text>ERROR: merge element with resourceref '</xsl:text>
<xsl:value-of select="$merge.element/@resourceref"/>
<xsl:text>' must point to something with an info element.'</xsl:text>
</xsl:message>
</xsl:if>
<xsl:variable name="omittitles.boolean">
<xsl:choose>
<xsl:when test="$omittitles = 'yes' or $omittitles = 'true' or omittitles = '1'">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- output info if there is any -->
<xsl:if test="$merge.element/node() or
$merge.ref.info/node() or
$ref.content/d:info/node() or
$ref.content/d:title[$omittitles.boolean = 0] or
$ref.content/d:subtitle[$omittitles.boolean = 0] or
$ref.content/d:titleabbrev[$omittitles.boolean = 0]">
<xsl:variable name="ref.info" select="$ref.content/d:info"/>
<xsl:variable name="ref.title" select="$ref.content/d:title"/>
<xsl:variable name="ref.subtitle" select="$ref.content/d:subtitle"/>
<xsl:variable name="ref.titleabbrev" select="$ref.content/d:titleabbrev"/>
<xsl:variable name="ref.info.title" select="$ref.content/d:info/d:title"/>
<xsl:variable name="ref.info.subtitle" select="$ref.content/d:info/d:subtitle"/>
<xsl:variable name="ref.info.titleabbrev" select="$ref.content/d:info/d:titleabbrev"/>
<info>
<!-- First copy through any merge attributes and elements and comments -->
<xsl:copy-of select="$merge.element/@*[not(local-name(.) = 'resourceref')]"/>
<!-- And copy any resource info attributes not in merge-->
<xsl:for-each select="$ref.info/@*">
<xsl:variable name="resource.att" select="local-name(.)"/>
<xsl:choose>
<xsl:when test="$merge.element/@*[local-name(.) = $resource.att]">
<!-- do nothing because overridden -->
</xsl:when>
<xsl:otherwise>
<!-- copy through if not overridden -->
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<!-- Copy through the merge children as they have highest priority -->
<xsl:copy-of select="$merge.element/node()"/>
<!-- and copy through those merge resource elements not in merge element -->
<xsl:for-each select="$merge.ref.info/node()">
<xsl:variable name="resource.node" select="local-name(.)"/>
<xsl:choose>
<xsl:when test="$merge.element/node()[local-name(.) = $resource.node]">
<!-- do nothing because overridden -->
</xsl:when>
<xsl:otherwise>
<!-- copy through -->
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<!-- And copy any module's resource info node not in merge or merge.ref -->
<xsl:for-each select="$ref.info/node() |
$ref.title[$omittitles.boolean = 0] |
$ref.subtitle[$omittitles.boolean = 0] |
$ref.titleabbrev[$omittitles.boolean = 0] |
$ref.info.title[$omittitles.boolean = 0] |
$ref.info.subtitle[$omittitles.boolean = 0] |
$ref.info.titleabbrev[$omittitles.boolean = 0]">
<xsl:variable name="resource.node" select="local-name(.)"/>
<xsl:choose>
<xsl:when test="$merge.element/node()[local-name(.) = $resource.node]">
<!-- do nothing because overridden -->
</xsl:when>
<xsl:when test="$merge.ref.info/node()[local-name(.) = $resource.node]">
<!-- do nothing because overridden -->
</xsl:when>
<xsl:otherwise>
<!-- copy through -->
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</info>
</xsl:if>
</xsl:template>
<xsl:template match="d:relationships">
<xsl:message>
<xsl:text>WARNING: the &lt;relationships&gt; element is not currently </xsl:text>
<xsl:text>supported by this stylesheet.</xsl:text>
</xsl:message>
</xsl:template>
<xsl:template match="d:transforms">
<xsl:message>
<xsl:text>WARNING: the &lt;transforms&gt; element is not currently </xsl:text>
<xsl:text>supported by this stylesheet.</xsl:text>
</xsl:message>
</xsl:template>
<xsl:template match="d:filterin">
<xsl:message>
<xsl:text>WARNING: the &lt;filterin&gt; element is not currently </xsl:text>
<xsl:text>supported by this stylesheet.</xsl:text>
</xsl:message>
</xsl:template>
<xsl:template match="d:filterout">
<xsl:message>
<xsl:text>WARNING: the &lt;filterin&gt; element is not currently </xsl:text>
<xsl:text>supported by this stylesheet.</xsl:text>
</xsl:message>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,221 +0,0 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://docbook.org/ns/docbook"
version="1.0"
exclude-result-prefixes="exsl">
<!-- ********************************************************************
$Id: topic-maker-chunk.xsl,v 1.7 2012-04-16 00:29:35 bobs Exp $
********************************************************************
-->
<xsl:import href="topic-maker.xsl"/>
<xsl:import href="../xhtml/chunk-common.xsl"/>
<xsl:include href="../xhtml/chunk-code.xsl"/>
<xsl:param name="root.id.suffix">-info</xsl:param>
<xsl:param name="root.as.resourceref" select="1"/>
<xsl:template match="/" priority="1">
<xsl:apply-templates select="/" mode="process.root"/>
<xsl:call-template name="make.assembly"/>
</xsl:template>
<xsl:template name="chunk-element-content">
<xsl:param name="content">
<xsl:apply-imports/>
</xsl:param>
<xsl:copy-of select="$content"/>
</xsl:template>
<xsl:template name="make.assembly">
<xsl:variable name="content">
<assembly xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:call-template name="make.resources"/>
<xsl:call-template name="make.structure"/>
</assembly>
</xsl:variable>
<xsl:variable name="filename">
<xsl:if test="$manifest.in.base.dir != 0">
<xsl:value-of select="$base.dir"/>
</xsl:if>
<xsl:value-of select="$assembly.filename"/>
</xsl:variable>
<xsl:call-template name="write.chunk">
<xsl:with-param name="content" select="$content"/>
<xsl:with-param name="filename" select="$filename"/>
<xsl:with-param name="indent">yes</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="make.structure">
<xsl:param name="root" select="/*[1]"/>
<xsl:param name="root.resourceref">
<xsl:call-template name="object.id">
<xsl:with-param name="object" select="$root"/>
</xsl:call-template>
</xsl:param>
<xsl:choose>
<xsl:when test="$root.as.resourceref = 0">
<structure>
<xsl:attribute name="type">
<xsl:value-of select="local-name($root)"/>
</xsl:attribute>
<xsl:attribute name="xml:id">
<xsl:value-of select="$root.resourceref"/>
</xsl:attribute>
<xsl:copy-of select="($root/title | $root/info/title)[1]"/>
<!-- Put the title and info stuff in a content-only module -->
<module resourceref="{$root.resourceref}{$root.id.suffix}" contentonly="true"/>
<xsl:apply-templates select="$root/*" mode="module.list"/>
</structure>
</xsl:when>
<xsl:otherwise>
<structure>
<xsl:attribute name="resourceref">
<xsl:value-of select="$root.resourceref"/>
</xsl:attribute>
<output renderas="{local-name($root)}"/>
<xsl:apply-templates select="$root/*" mode="module.list"/>
</structure>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="module.list">
<xsl:variable name="is.chunk">
<xsl:call-template name="chunk">
<xsl:with-param name="node" select="."/>
</xsl:call-template>
</xsl:variable>
<!-- generate an output element for renderas? -->
<xsl:variable name="src.element" select="concat(' ', local-name(.), ' ')"/>
<xsl:variable name="is.topic">
<xsl:choose>
<xsl:when test="contains($topic.list, $src.element)">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="$is.chunk = 1">
<module>
<xsl:attribute name="resourceref">
<xsl:call-template name="object.id"/>
</xsl:attribute>
<xsl:if test="$is.topic = 1">
<output renderas="{local-name()}"/>
</xsl:if>
<xsl:apply-templates select="*" mode="module.list"/>
</module>
</xsl:if>
</xsl:template>
<xsl:template name="make.resources">
<resources>
<!-- Add xml:base from $base.dir if manifest not in base.dir -->
<xsl:if test="string-length($base.dir) != 0 and
$manifest.in.base.dir = 0">
<xsl:attribute name="xml:base">
<!-- strip off trailing slash for xml:base -->
<xsl:choose>
<xsl:when test="substring($base.dir, string-length($base.dir),1) = '/'">
<xsl:value-of select="substring($base.dir, 1, string-length($base.dir) -1)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$base.dir"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="/*[1]" mode="resource.list"/>
</resources>
</xsl:template>
<xsl:template match="*" mode="resource.list">
<xsl:variable name="is.chunk">
<xsl:call-template name="chunk">
<xsl:with-param name="node" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="$is.chunk = 1">
<resource>
<xsl:attribute name="fileref">
<!--
<xsl:if test="$manifest.in.base.dir = 0">
<xsl:value-of select="$base.dir"/>
</xsl:if>
-->
<xsl:apply-templates select="." mode="chunk-filename"/>
</xsl:attribute>
<xsl:attribute name="xml:id">
<xsl:call-template name="object.id"/>
</xsl:attribute>
<xsl:variable name="title">
<xsl:apply-templates select="." mode="title.markup"/>
</xsl:variable>
<xsl:if test="string-length($title) != 0">
<description>
<xsl:value-of select="$title"/>
</description>
</xsl:if>
</resource>
</xsl:if>
<xsl:apply-templates select="*" mode="resource.list"/>
</xsl:template>
<!-- special case for root id on structure element -->
<xsl:template match="/*" mode="resource.list">
<xsl:param name="root.resourceref">
<xsl:call-template name="object.id">
<xsl:with-param name="object" select="."/>
</xsl:call-template>
</xsl:param>
<resource>
<xsl:attribute name="fileref">
<xsl:apply-templates select="." mode="chunk-filename"/>
</xsl:attribute>
<xsl:attribute name="xml:id">
<xsl:choose>
<xsl:when test="$root.as.resourceref = 0">
<xsl:value-of select="concat($root.resourceref,$root.id.suffix)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$root.resourceref"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</resource>
<xsl:apply-templates select="*" mode="resource.list"/>
</xsl:template>
<!-- This one must be here because of the template in chunk-code.xsl -->
<xsl:template match="@fileref" priority="1">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns="http://docbook.org/ns/docbook"
exclude-result-prefixes="exsl"
version="1.0">
<!-- $Id: topic-maker.xsl,v 1.3 2012-04-16 00:29:35 bobs Exp $ -->
<!-- This stylesheet convert DocBook elements into topic element.
The chunking takes place elsewhere. -->
<xsl:import href="../xhtml/docbook.xsl"/>
<xsl:param name="assembly.filename">myassembly.xml</xsl:param>
<xsl:param name="chunk.section.depth" select="3"/>
<xsl:param name="chunk.first.sections" select="1"/>
<xsl:param name="use.id.as.filename" select="1"/>
<xsl:param name="html.ext">.xml</xsl:param>
<xsl:param name="base.dir">topics/</xsl:param>
<xsl:param name="root.filename" select="local-name(/*)"/>
<xsl:param name="html.extra.head.links" select="0"/>
<xsl:param name="stylesheet.result.type">xhtml</xsl:param>
<xsl:param name="navig.showtitles" select="0"/>
<xsl:param name="suppress.navigation" select="1"/>
<xsl:param name="chunk.append"/>
<xsl:param name="chunk.quietly" select="0"/>
<xsl:param name="chunker.output.method" select="'xml'"/>
<xsl:param name="chunker.output.encoding" select="'UTF-8'"/>
<xsl:param name="chunker.output.indent" select="'no'"/>
<xsl:param name="chunker.output.omit-xml-declaration" select="'no'"/>
<xsl:param name="chunker.output.standalone" select="'no'"/>
<xsl:param name="chunker.output.doctype-public" select="''"/>
<xsl:param name="chunker.output.doctype-system" select="''"/>
<xsl:param name="namespace">http://docbook.org/ns/docbook</xsl:param>
<!-- These elements are converted to topic elements -->
<xsl:param name="topic.elements">preface chapter article section</xsl:param>
<xsl:variable name="topic.list"
select="concat(' ', normalize-space($topic.elements), ' ')"/>
<!-- Default behavior is identity copy -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="preface|chapter|appendix|section|article">
<xsl:variable name="element.name">
<xsl:call-template name="element.name"/>
</xsl:variable>
<xsl:element name="{$element.name}" namespace="{$namespace}">
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template name="element.name">
<xsl:param name="node" select="."/>
<xsl:variable name="src.element" select="concat(' ', local-name($node), ' ')"/>
<xsl:choose>
<xsl:when test="contains($topic.list, $src.element)">
<xsl:text>topic</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="local-name($node)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- XML Catalog file for DocBook XSL Stylesheets vsnapshot_9628 -->
<rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl/current/" rewritePrefix="./"/>
<rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl/current/" rewritePrefix="./"/>
<rewriteURI uriStartString="http://docbook.sourceforge.net/release/xsl/snapshot_9628/" rewritePrefix="./"/>
<rewriteSystem systemIdStartString="http://docbook.sourceforge.net/release/xsl/snapshot_9628/" rewritePrefix="./"/>
</catalog>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,702 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="as" english-language-name="Assamese">
<!-- * This file is generated automatically. -->
<!-- * To submit changes to this file upstream (to the DocBook Project) -->
<!-- * do not submit an edited version of this file. Instead, submit an -->
<!-- * edited version of the source file at the following location: -->
<!-- * -->
<!-- * https://docbook.svn.sourceforge.net/svnroot/docbook/trunk/gentext/locale/as.xml -->
<!-- * -->
<!-- * E-mail the edited as.xml source file to: -->
<!-- * -->
<!-- * docbook-developers@lists.sourceforge.net -->
<!-- ******************************************************************** -->
<!-- This file is part of the XSL DocBook Stylesheet distribution. -->
<!-- See ../README or http://docbook.sf.net/release/xsl/current/ for -->
<!-- copyright and other information. -->
<!-- ******************************************************************** -->
<!-- In these files, % with a letter is used for a placeholder: -->
<!-- %t is the current element's title -->
<!-- %s is the current element's subtitle (if applicable)-->
<!-- %n is the current element's number label-->
<!-- %p is the current element's page number (if applicable)-->
<!-- ******************************************************************** -->
<l:gentext key="Abstract" text="সাৰাংশ"/>
<l:gentext key="abstract" text="সাৰাংশ"/>
<l:gentext key="Acknowledgements" text="স্বীকৃতি"/>
<l:gentext key="acknowledgements" text="স্বীকৃতি"/>
<l:gentext key="Answer" text="উ:"/>
<l:gentext key="answer" text="উ:"/>
<l:gentext key="Appendix" text="পৰিশিষ্ট"/>
<l:gentext key="appendix" text="পৰিশিষ্ট"/>
<l:gentext key="Article" text="প্ৰবন্ধ"/>
<l:gentext key="article" text="প্ৰবন্ধ"/>
<l:gentext key="Author" text="লিখক"/>
<l:gentext key="Bibliography" text="গ্ৰন্থসূচী"/>
<l:gentext key="bibliography" text="গ্ৰন্থসূচী"/>
<l:gentext key="Book" text="কিতাপ"/>
<l:gentext key="book" text="কিতাপ"/>
<l:gentext key="CAUTION" text="সাৱধান"/>
<l:gentext key="Caution" text="সাৱধান"/>
<l:gentext key="caution" text="সাৱধান"/>
<l:gentext key="Chapter" text="অধ্যায়"/>
<l:gentext key="chapter" text="অধ্যায়"/>
<l:gentext key="Colophon" text="গ্ৰন্থপৰিচয়"/>
<l:gentext key="colophon" text="গ্ৰন্থপৰিচয়"/>
<l:gentext key="Copyright" text="স্বত্বাধিকাৰ"/>
<l:gentext key="copyright" text="স্বত্বাধিকাৰ"/>
<l:gentext key="Dedication" text="উসৰ্গা"/>
<l:gentext key="dedication" text="উসৰ্গা"/>
<l:gentext key="Edition" text="সংস্কৰণ"/>
<l:gentext key="edition" text="সংস্কৰণ"/>
<l:gentext key="Editor" text="সম্পাদক"/>
<l:gentext key="Equation" text="সমীকৰণ"/>
<l:gentext key="equation" text="সমীকৰণ"/>
<l:gentext key="Example" text="উদাহৰণ"/>
<l:gentext key="example" text="উদাহৰণ"/>
<l:gentext key="Figure" text="ছবি"/>
<l:gentext key="figure" text="ছবি"/>
<l:gentext key="Glossary" text="শব্দকোষ"/>
<l:gentext key="glossary" text="শব্দকোষ"/>
<l:gentext key="GlossSee" text="চাওক"/>
<l:gentext key="glosssee" text="চাওক"/>
<l:gentext key="GlossSeeAlso" text="ইয়াকো চাওক"/>
<l:gentext key="glossseealso" text="ইয়াকো চাওক"/>
<l:gentext key="IMPORTANT" text="গুৰুত্বপূৰ্ণ"/>
<l:gentext key="important" text="গুৰুত্বপূৰ্ণ"/>
<l:gentext key="Important" text="গুৰুত্বপূৰ্ণ"/>
<l:gentext key="Index" text="সূচী"/>
<l:gentext key="index" text="সূচী"/>
<l:gentext key="ISBN" text="ISBN"/>
<l:gentext key="isbn" text="ISBN"/>
<l:gentext key="LegalNotice" text="আইনসন্মত ঘোষণা"/>
<l:gentext key="legalnotice" text="আইনসন্মত ঘোষণা"/>
<l:gentext key="MsgAud" text="শ্ৰোতা"/>
<l:gentext key="msgaud" text="শ্ৰোতা"/>
<l:gentext key="MsgLevel" text="স্তৰ"/>
<l:gentext key="msglevel" text="স্তৰ"/>
<l:gentext key="MsgOrig" text="উৎস"/>
<l:gentext key="msgorig" text="উৎস"/>
<l:gentext key="NOTE" text="টোকা"/>
<l:gentext key="Note" text="টোকা"/>
<l:gentext key="note" text="টোকা"/>
<l:gentext key="Part" text="অংশ"/>
<l:gentext key="part" text="অংশ"/>
<l:gentext key="Preface" text="পাতনি"/>
<l:gentext key="preface" text="পাতনি"/>
<l:gentext key="Procedure" text="প্ৰক্ৰিয়া"/>
<l:gentext key="procedure" text="প্ৰক্ৰিয়া"/>
<l:gentext key="ProductionSet" text="উৎপাদন"/>
<l:gentext key="PubDate" text="প্ৰকাশনৰ দিন"/>
<l:gentext key="pubdate" text="প্ৰকাশনৰ দিন"/>
<l:gentext key="Published" text="প্ৰকাশিত"/>
<l:gentext key="published" text="প্ৰকাশিত"/>
<l:gentext key="Publisher" text="প্ৰকাশক"/>
<l:gentext key="Qandadiv" text="প্ৰশ্ন &amp; উত্তৰ"/>
<l:gentext key="qandadiv" text="প্ৰশ্ন &amp; উত্তৰ"/>
<l:gentext key="QandASet" text="সঘনাই কৰা প্ৰশ্ন"/>
<l:gentext key="Question" text="প্ৰ:"/>
<l:gentext key="question" text="প্ৰ:"/>
<l:gentext key="RefEntry" text="পৃষ্ঠা"/>
<l:gentext key="refentry" text="পৃষ্ঠা"/>
<l:gentext key="Reference" text="প্ৰসঙ্গ"/>
<l:gentext key="reference" text="প্ৰসঙ্গ"/>
<l:gentext key="References" text="প্ৰসঙ্গবোৰ"/>
<l:gentext key="RefName" text="নাম"/>
<l:gentext key="refname" text="নাম"/>
<l:gentext key="RefSection" text="বিভাগ"/>
<l:gentext key="refsection" text="বিভাগ"/>
<l:gentext key="RefSynopsisDiv" text="সাৰাংশ"/>
<l:gentext key="refsynopsisdiv" text="সাৰাংশ"/>
<l:gentext key="RevHistory" text="পুনৰীক্ষণৰ ইতিহাস"/>
<l:gentext key="revhistory" text="পুনৰীক্ষণৰ ইতিহাস"/>
<l:gentext key="revision" text="পুনৰীক্ষণ"/>
<l:gentext key="Revision" text="পুনৰীক্ষণ"/>
<l:gentext key="sect1" text="বিভাগ"/>
<l:gentext key="sect2" text="বিভাগ"/>
<l:gentext key="sect3" text="বিভাগ"/>
<l:gentext key="sect4" text="বিভাগ"/>
<l:gentext key="sect5" text="বিভাগ"/>
<l:gentext key="section" text="বিভাগ"/>
<l:gentext key="Section" text="বিভাগ"/>
<l:gentext key="see" text="চাওক"/>
<l:gentext key="See" text="চাওক"/>
<l:gentext key="seealso" text="ইয়াকো চাওক"/>
<l:gentext key="Seealso" text="ইয়াকো চাওক"/>
<l:gentext key="SeeAlso" text="ইয়াকো চাওক"/>
<l:gentext key="set" text="গোট"/>
<l:gentext key="Set" text="গোট"/>
<l:gentext key="setindex" text="সূচী প্ৰতিষ্ঠা কৰক"/>
<l:gentext key="SetIndex" text="সূচী প্ৰতিষ্ঠা কৰক"/>
<l:gentext key="Sidebar" text="চাইডবাৰ"/>
<l:gentext key="sidebar" text="চাইডবাৰ"/>
<l:gentext key="step" text="পৰ্যায়"/>
<l:gentext key="Step" text="পৰ্যায়"/>
<l:gentext key="table" text="তালিকা"/>
<l:gentext key="Table" text="তালিকা"/>
<l:gentext key="task" text="কাৰ্য্য"/>
<l:gentext key="Task" text="কাৰ্য্য"/>
<l:gentext key="tip" text="সঙ্কেত"/>
<l:gentext key="TIP" text="সঙ্কেত"/>
<l:gentext key="Tip" text="সঙ্কেত"/>
<l:gentext key="Warning" text="সকিয়নি"/>
<l:gentext key="warning" text="সকিয়নি"/>
<l:gentext key="WARNING" text="সকিয়নি"/>
<l:gentext key="and" text="আৰু"/>
<l:gentext key="or" text="or" lang="en"/>
<l:gentext key="by" text="-ৰ দ্বাৰা"/>
<l:gentext key="Edited" text="সম্পাদিত"/>
<l:gentext key="edited" text="সম্পাদিত"/>
<l:gentext key="Editedby" text="-ৰ দ্বাৰা সম্পাদিত"/>
<l:gentext key="editedby" text="-ৰ দ্বাৰা সম্পাদিত"/>
<l:gentext key="in" text="-ত"/>
<l:gentext key="lastlistcomma" text=","/>
<l:gentext key="listcomma" text=","/>
<l:gentext key="notes" text="টোকা"/>
<l:gentext key="Notes" text="টোকা"/>
<l:gentext key="Pgs" text="পৃষ্ঠাসমূহ"/>
<l:gentext key="pgs" text="পৃষ্ঠাসমূহ"/>
<l:gentext key="Revisedby" text="পুনৰীক্ষণকৰ্তা:"/>
<l:gentext key="revisedby" text="পুনৰীক্ষণকৰ্তা:"/>
<l:gentext key="TableNotes" text="টোকা"/>
<l:gentext key="tablenotes" text="টোকা"/>
<l:gentext key="TableofContents" text="বিষয় সূচী"/>
<l:gentext key="tableofcontents" text="বিষয় সূচী"/>
<l:gentext key="unexpectedelementname" text="অপ্ৰত্যাশিত পদাৰ্থৰ নাম"/>
<l:gentext key="unsupported" text="অসমৰ্থিত"/>
<l:gentext key="xrefto" text="xref to"/>
<l:gentext key="Authors" text="লিখকসমূহ"/>
<l:gentext key="copyeditor" text="নকলৰ সম্পাদক"/>
<l:gentext key="graphicdesigner" text="আলেখীৰ পৰিকল্পনাকৰ্তা"/>
<l:gentext key="productioneditor" text="উৎপাদন সম্পাদক"/>
<l:gentext key="technicaleditor" text="কাৰিকৰী সম্পাদক"/>
<l:gentext key="translator" text="অনুবাদক"/>
<l:gentext key="listofequations" text="সমীকৰণৰ তালিকা"/>
<l:gentext key="ListofEquations" text="সমীকৰণৰ তালিকা"/>
<l:gentext key="ListofExamples" text="উদাহৰণৰ তালিকা"/>
<l:gentext key="listofexamples" text="উদাহৰণৰ তালিকা"/>
<l:gentext key="ListofFigures" text="ছবিৰ তালিকা"/>
<l:gentext key="listoffigures" text="ছবিৰ তালিকা"/>
<l:gentext key="ListofProcedures" text="প্ৰক্ৰিয়াৰ তালিকা"/>
<l:gentext key="listofprocedures" text="প্ৰক্ৰিয়াৰ তালিকা"/>
<l:gentext key="listoftables" text="টেবুলৰ তালিকা"/>
<l:gentext key="ListofTables" text="টেবুলৰ তালিকা"/>
<l:gentext key="ListofUnknown" text="অজ্ঞাতৰ তালিকা"/>
<l:gentext key="listofunknown" text="অজ্ঞাতৰ তালিকা"/>
<l:gentext key="nav-home" text="আৰম্ভ"/>
<l:gentext key="nav-next" text="পিছলৈ"/>
<l:gentext key="nav-next-sibling" text="দ্ৰুতগতিৰে আগবাঢ়ক"/>
<l:gentext key="nav-prev" text="আগৰ"/>
<l:gentext key="nav-prev-sibling" text="দ্ৰুতগতিৰে পিছলৈ যাওক"/>
<l:gentext key="nav-up" text="ওপৰলৈ"/>
<l:gentext key="nav-toc" text="বিষয়বস্তুৰ তালিকা"/>
<l:gentext key="Draft" text="ৰূপৰেখা"/>
<l:gentext key="above" text="ওপৰত"/>
<l:gentext key="below" text="তলত"/>
<l:gentext key="sectioncalled" text="মাতি অনা বিভাগ"/>
<l:gentext key="index symbols" text="চিহ্ন"/>
<l:gentext key="writing-mode" text="lr-tb"/>
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyz" lang="en"/>
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZ" lang="en"/>
<l:gentext key="normalize.sort.input" text="AaÀàÁáÂâÃãÄäÅåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧḀḁẚẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặBbƀƁɓƂƃḂḃḄḅḆḇCcÇçĆćĈĉĊċČčƇƈɕḈḉDdĎďĐđƊɗƋƌDžDzȡɖḊḋḌḍḎḏḐḑḒḓEeÈèÉéÊêËëĒēĔĕĖėĘęĚěȄȅȆȇȨȩḔḕḖḗḘḙḚḛḜḝẸẹẺẻẼẽẾếỀềỂểỄễỆệFfƑƒḞḟGgĜĝĞğĠġĢģƓɠǤǥǦǧǴǵḠḡHhĤĥĦħȞȟɦḢḣḤḥḦḧḨḩḪḫẖIiÌìÍíÎîÏïĨĩĪīĬĭĮįİƗɨǏǐȈȉȊȋḬḭḮḯỈỉỊịJjĴĵǰʝKkĶķƘƙǨǩḰḱḲḳḴḵLlĹĺĻļĽľĿŀŁłƚLjȴɫɬɭḶḷḸḹḺḻḼḽMmɱḾḿṀṁṂṃNnÑñŃńŅņŇňƝɲƞȠNjǸǹȵɳṄṅṆṇṈṉṊṋOoÒòÓóÔôÕõÖöØøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱṌṍṎṏṐṑṒṓỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợPpƤƥṔṕṖṗQqʠRrŔŕŖŗŘřȐȑȒȓɼɽɾṘṙṚṛṜṝṞṟSsŚśŜŝŞşŠšȘșʂṠṡṢṣṤṥṦṧṨṩTtŢţŤťŦŧƫƬƭƮʈȚțȶṪṫṬṭṮṯṰṱẗUuÙùÚúÛûÜüŨũŪūŬŭŮůŰűŲųƯưǓǔǕǖǗǘǙǚǛǜȔȕȖȗṲṳṴṵṶṷṸṹṺṻỤụỦủỨứỪừỬửỮữỰựVvƲʋṼṽṾṿWwŴŵẀẁẂẃẄẅẆẇẈẉẘXxẊẋẌẍYyÝýÿŸŶŷƳƴȲȳẎẏẙỲỳỴỵỶỷỸỹZzŹźŻżŽžƵƶȤȥʐʑẐẑẒẓẔẕẕ" lang="en"/>
<l:gentext key="normalize.sort.output" text="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPQQQRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVWWWWWWWWWWWWWWWXXXXXXYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZ" lang="en"/>
<l:dingbat key="startquote" text="“"/>
<l:dingbat key="endquote" text="”"/>
<l:dingbat key="nestedstartquote" text=""/>
<l:dingbat key="nestedendquote" text=""/>
<l:dingbat key="singlestartquote" text=""/>
<l:dingbat key="singleendquote" text=""/>
<l:dingbat key="bullet" text="•"/>
<l:gentext key="hyphenation-character" text="-"/>
<l:gentext key="hyphenation-push-character-count" text="2"/>
<l:gentext key="hyphenation-remain-character-count" text="2"/>
<l:context name="keycap"><l:template name="alt" text="Alt" lang="en"/>
<l:template name="backspace" text="&lt;—" lang="en"/>
<l:template name="command" text="⌘" lang="en"/>
<l:template name="control" text="Ctrl" lang="en"/>
<l:template name="delete" text="Del" lang="en"/>
<l:template name="down" text="↓" lang="en"/>
<l:template name="end" text="End" lang="en"/>
<l:template name="enter" text="Enter" lang="en"/>
<l:template name="escape" text="Esc" lang="en"/>
<l:template name="home" text="Home" lang="en"/>
<l:template name="insert" text="Ins" lang="en"/>
<l:template name="left" text="←" lang="en"/>
<l:template name="meta" text="Meta" lang="en"/>
<l:template name="option" text="???" lang="en"/>
<l:template name="pagedown" text="Page ↓" lang="en"/>
<l:template name="pageup" text="Page ↑" lang="en"/>
<l:template name="right" text="→" lang="en"/>
<l:template name="shift" text="Shift" lang="en"/>
<l:template name="space" text="Space" lang="en"/>
<l:template name="tab" text="→|" lang="en"/>
<l:template name="up" text="↑" lang="en"/>
</l:context>
<l:context name="webhelp"><l:template name="Search" text="Search" lang="en"/>
<l:template name="Enter_a_term_and_click" text="Enter a term and click " lang="en"/>
<l:template name="Go" text="Go" lang="en"/>
<l:template name="to_perform_a_search" text=" to perform a search." lang="en"/>
<l:template name="txt_filesfound" text="Results" lang="en"/>
<l:template name="txt_enter_at_least_1_char" text="You must enter at least one character." lang="en"/>
<l:template name="txt_browser_not_supported" text="JavaScript is disabled on your browser. Please enable JavaScript to enjoy all the features of this site." lang="en"/>
<l:template name="txt_please_wait" text="Please wait. Search in progress..." lang="en"/>
<l:template name="txt_results_for" text="Results for: " lang="en"/>
<l:template name="TableofContents" text="Contents" lang="en"/>
<l:template name="HighlightButton" text="Toggle search result highlighting" lang="en"/>
<l:template name="Your_search_returned_no_results" text="Your search returned no results." lang="en"/>
</l:context>
<l:context name="styles"><l:template name="person-name" text="first-last"/>
</l:context>
<l:context name="title"><l:template name="abstract" text="%t"/>
<l:template name="acknowledgements" text="%t"/>
<l:template name="answer" text="%t"/>
<l:template name="appendix" text="পৰিশিষ্ট %n. %t"/>
<l:template name="article" text="%t"/>
<l:template name="authorblurb" text="%t"/>
<l:template name="bibliodiv" text="%t"/>
<l:template name="biblioentry" text="%t"/>
<l:template name="bibliography" text="%t"/>
<l:template name="bibliolist" text="%t"/>
<l:template name="bibliomixed" text="%t"/>
<l:template name="bibliomset" text="%t"/>
<l:template name="biblioset" text="%t"/>
<l:template name="blockquote" text="%t"/>
<l:template name="book" text="%t"/>
<l:template name="calloutlist" text="%t"/>
<l:template name="caution" text="%t"/>
<l:template name="chapter" text="অধ্যায় %n. %t"/>
<l:template name="colophon" text="%t"/>
<l:template name="dedication" text="%t"/>
<l:template name="equation" text="সমীকৰণ %n. %t"/>
<l:template name="example" text="উদাহৰণ %n. %t"/>
<l:template name="figure" text="ছবি %n. %t"/>
<l:template name="foil" text="%t"/>
<l:template name="foilgroup" text="%t"/>
<l:template name="formalpara" text="%t"/>
<l:template name="glossary" text="%t"/>
<l:template name="glossdiv" text="%t"/>
<l:template name="glosslist" text="%t"/>
<l:template name="glossentry" text="%t"/>
<l:template name="important" text="%t"/>
<l:template name="index" text="%t"/>
<l:template name="indexdiv" text="%t"/>
<l:template name="itemizedlist" text="%t"/>
<l:template name="legalnotice" text="%t"/>
<l:template name="listitem" text=""/>
<l:template name="lot" text="%t"/>
<l:template name="msg" text="%t"/>
<l:template name="msgexplan" text="%t"/>
<l:template name="msgmain" text="%t"/>
<l:template name="msgrel" text="%t"/>
<l:template name="msgset" text="%t"/>
<l:template name="msgsub" text="%t"/>
<l:template name="note" text="%t"/>
<l:template name="orderedlist" text="%t"/>
<l:template name="part" text="অংশ %n. %t"/>
<l:template name="partintro" text="%t"/>
<l:template name="preface" text="%t"/>
<l:template name="procedure" text="%t"/>
<l:template name="procedure.formal" text="প্ৰক্ৰিয়া %n. %t"/>
<l:template name="productionset" text="%t"/>
<l:template name="productionset.formal" text="উৎপাদন %n"/>
<l:template name="qandadiv" text="%t"/>
<l:template name="qandaentry" text="%t"/>
<l:template name="qandaset" text="%t"/>
<l:template name="question" text="%t"/>
<l:template name="refentry" text="%t"/>
<l:template name="reference" text="%t"/>
<l:template name="refsection" text="%t"/>
<l:template name="refsect1" text="%t"/>
<l:template name="refsect2" text="%t"/>
<l:template name="refsect3" text="%t"/>
<l:template name="refsynopsisdiv" text="%t"/>
<l:template name="refsynopsisdivinfo" text="%t"/>
<l:template name="screenshot" text="%t" lang="en"/>
<l:template name="segmentedlist" text="%t"/>
<l:template name="set" text="%t"/>
<l:template name="setindex" text="%t"/>
<l:template name="sidebar" text="%t"/>
<l:template name="step" text="%t"/>
<l:template name="table" text="তালিকা %n. %t"/>
<l:template name="task" text="%t"/>
<l:template name="tasksummary" text="%t"/>
<l:template name="taskprerequisites" text="%t"/>
<l:template name="taskrelated" text="%t"/>
<l:template name="tip" text="%t"/>
<l:template name="toc" text="%t"/>
<l:template name="variablelist" text="%t"/>
<l:template name="varlistentry" text=""/>
<l:template name="warning" text="%t"/>
</l:context>
<l:context name="title-unnumbered"><l:template name="appendix" text="%t"/>
<l:template name="article/appendix" text="%t"/>
<l:template name="bridgehead" text="%t"/>
<l:template name="chapter" text="%t"/>
<l:template name="sect1" text="%t"/>
<l:template name="sect2" text="%t"/>
<l:template name="sect3" text="%t"/>
<l:template name="sect4" text="%t"/>
<l:template name="sect5" text="%t"/>
<l:template name="section" text="%t"/>
<l:template name="simplesect" text="%t"/>
<l:template name="topic" text="%t" lang="en"/>
<l:template name="part" text="%t"/>
</l:context>
<l:context name="title-numbered"><l:template name="appendix" text="পৰিশিষ্ট %n. %t"/>
<l:template name="article/appendix" text="%n. %t"/>
<l:template name="bridgehead" text="%n. %t"/>
<l:template name="chapter" text="অধ্যায় %n. %t"/>
<l:template name="part" text="অংশ %n. %t"/>
<l:template name="sect1" text="%n. %t"/>
<l:template name="sect2" text="%n. %t"/>
<l:template name="sect3" text="%n. %t"/>
<l:template name="sect4" text="%n. %t"/>
<l:template name="sect5" text="%n. %t"/>
<l:template name="section" text="%n. %t"/>
<l:template name="simplesect" text="%t"/>
<l:template name="topic" text="%t" lang="en"/>
</l:context>
<l:context name="subtitle"><l:template name="appendix" text="%s"/>
<l:template name="acknowledgements" text="%s"/>
<l:template name="article" text="%s"/>
<l:template name="bibliodiv" text="%s"/>
<l:template name="biblioentry" text="%s"/>
<l:template name="bibliography" text="%s"/>
<l:template name="bibliomixed" text="%s"/>
<l:template name="bibliomset" text="%s"/>
<l:template name="biblioset" text="%s"/>
<l:template name="book" text="%s"/>
<l:template name="chapter" text="%s"/>
<l:template name="colophon" text="%s"/>
<l:template name="dedication" text="%s"/>
<l:template name="glossary" text="%s"/>
<l:template name="glossdiv" text="%s"/>
<l:template name="index" text="%s"/>
<l:template name="indexdiv" text="%s"/>
<l:template name="lot" text="%s"/>
<l:template name="part" text="%s"/>
<l:template name="partintro" text="%s"/>
<l:template name="preface" text="%s"/>
<l:template name="refentry" text="%s"/>
<l:template name="reference" text="%s"/>
<l:template name="refsection" text="%s"/>
<l:template name="refsect1" text="%s"/>
<l:template name="refsect2" text="%s"/>
<l:template name="refsect3" text="%s"/>
<l:template name="refsynopsisdiv" text="%s"/>
<l:template name="sect1" text="%s"/>
<l:template name="sect2" text="%s"/>
<l:template name="sect3" text="%s"/>
<l:template name="sect4" text="%s"/>
<l:template name="sect5" text="%s"/>
<l:template name="section" text="%s"/>
<l:template name="set" text="%s"/>
<l:template name="setindex" text="%s"/>
<l:template name="sidebar" text="%s"/>
<l:template name="simplesect" text="%s"/>
<l:template name="topic" text="%t" lang="en"/>
<l:template name="toc" text="%s"/>
</l:context>
<l:context name="xref"><l:template name="abstract" text="%t"/>
<l:template name="acknowledgements" text="%t"/>
<l:template name="answer" text="উ: %n"/>
<l:template name="appendix" text="%t"/>
<l:template name="article" text="%t"/>
<l:template name="authorblurb" text="%t"/>
<l:template name="bibliodiv" text="%t"/>
<l:template name="bibliography" text="%t"/>
<l:template name="bibliomset" text="%t"/>
<l:template name="biblioset" text="%t"/>
<l:template name="blockquote" text="%t"/>
<l:template name="book" text="%t"/>
<l:template name="calloutlist" text="%t"/>
<l:template name="caution" text="%t"/>
<l:template name="chapter" text="%t"/>
<l:template name="colophon" text="%t"/>
<l:template name="constraintdef" text="%t"/>
<l:template name="dedication" text="%t"/>
<l:template name="equation" text="%t"/>
<l:template name="example" text="%t"/>
<l:template name="figure" text="%t"/>
<l:template name="foil" text="%t"/>
<l:template name="foilgroup" text="%t"/>
<l:template name="formalpara" text="%t"/>
<l:template name="glossary" text="%t"/>
<l:template name="glossdiv" text="%t"/>
<l:template name="important" text="%t"/>
<l:template name="index" text="%t"/>
<l:template name="indexdiv" text="%t"/>
<l:template name="itemizedlist" text="%t"/>
<l:template name="legalnotice" text="%t"/>
<l:template name="listitem" text="%n"/>
<l:template name="lot" text="%t"/>
<l:template name="msg" text="%t"/>
<l:template name="msgexplan" text="%t"/>
<l:template name="msgmain" text="%t"/>
<l:template name="msgrel" text="%t"/>
<l:template name="msgset" text="%t"/>
<l:template name="msgsub" text="%t"/>
<l:template name="note" text="%t"/>
<l:template name="orderedlist" text="%t"/>
<l:template name="part" text="%t"/>
<l:template name="partintro" text="%t"/>
<l:template name="preface" text="%t"/>
<l:template name="procedure" text="%t"/>
<l:template name="productionset" text="%t"/>
<l:template name="qandadiv" text="%t"/>
<l:template name="qandaentry" text="প্ৰ: %n"/>
<l:template name="qandaset" text="%t"/>
<l:template name="question" text="প্ৰ: %n"/>
<l:template name="reference" text="%t"/>
<l:template name="refsynopsisdiv" text="%t"/>
<l:template name="screenshot" text="%t" lang="en"/>
<l:template name="segmentedlist" text="%t"/>
<l:template name="set" text="%t"/>
<l:template name="setindex" text="%t"/>
<l:template name="sidebar" text="%t"/>
<l:template name="table" text="%t"/>
<l:template name="task" text="%t"/>
<l:template name="tip" text="%t"/>
<l:template name="toc" text="%t"/>
<l:template name="variablelist" text="%t"/>
<l:template name="varlistentry" text="%n"/>
<l:template name="warning" text="%t"/>
<l:template name="olink.document.citation" text=" in %o"/>
<l:template name="olink.page.citation" text=" (page %p)"/>
<l:template name="page.citation" text=" [%p]"/>
<l:template name="page" text="(page %p)"/>
<l:template name="docname" text=" in %o"/>
<l:template name="docnamelong" text=" in the document titled %o"/>
<l:template name="pageabbrev" text="(p. %p)"/>
<l:template name="Page" text="Page %p"/>
<l:template name="topic" text="%t" lang="en"/>
<l:template name="bridgehead" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="refsection" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="refsect1" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="refsect2" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="refsect3" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="sect1" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="sect2" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="sect3" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="sect4" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="sect5" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="section" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="simplesect" text="মাতি অনা বিভাগ “%t”"/>
</l:context>
<l:context name="xref-number"><l:template name="answer" text="উ: %n"/>
<l:template name="appendix" text="পৰিশিষ্ট %n"/>
<l:template name="bridgehead" text="বিভাগ %n"/>
<l:template name="chapter" text="অধ্যায় %n"/>
<l:template name="equation" text="সমীকৰণ %n"/>
<l:template name="example" text="উদাহৰণ %n"/>
<l:template name="figure" text="ছবি %n"/>
<l:template name="part" text="অংশ %n"/>
<l:template name="procedure" text="প্ৰক্ৰিয়া %n"/>
<l:template name="productionset" text="উৎপাদন %n"/>
<l:template name="qandadiv" text="প্ৰশ্ন &amp; উত্তৰ %n"/>
<l:template name="qandaentry" text="প্ৰ: %n"/>
<l:template name="question" text="প্ৰ: %n"/>
<l:template name="sect1" text="বিভাগ %n"/>
<l:template name="sect2" text="বিভাগ %n"/>
<l:template name="sect3" text="বিভাগ %n"/>
<l:template name="sect4" text="বিভাগ %n"/>
<l:template name="sect5" text="বিভাগ %n"/>
<l:template name="section" text="বিভাগ %n"/>
<l:template name="table" text="তালিকা %n"/>
</l:context>
<l:context name="xref-number-and-title"><l:template name="appendix" text="পৰিশিষ্ট %n, %t"/>
<l:template name="bridgehead" text="বিভাগ %n, “%t”"/>
<l:template name="chapter" text="অধ্যায় %n, %t"/>
<l:template name="equation" text="সমীকৰণ %n, “%t”"/>
<l:template name="example" text="উদাহৰণ %n, “%t”"/>
<l:template name="figure" text="ছবি %n, “%t”"/>
<l:template name="part" text="অংশ %n, “%t”"/>
<l:template name="procedure" text="প্ৰক্ৰিয়া %n, “%t”"/>
<l:template name="productionset" text="উৎপাদন %n, “%t”"/>
<l:template name="qandadiv" text="প্ৰশ্ন &amp; উত্তৰ %n, “%t”"/>
<l:template name="refsect1" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="refsect2" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="refsect3" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="refsection" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="sect1" text="বিভাগ %n, “%t”"/>
<l:template name="sect2" text="বিভাগ %n, “%t”"/>
<l:template name="sect3" text="বিভাগ %n, “%t”"/>
<l:template name="sect4" text="বিভাগ %n, “%t”"/>
<l:template name="sect5" text="বিভাগ %n, “%t”"/>
<l:template name="section" text="বিভাগ %n, “%t”"/>
<l:template name="simplesect" text="মাতি অনা বিভাগ “%t”"/>
<l:template name="table" text="তালিকা %n, “%t”"/>
</l:context>
<l:context name="authorgroup"><l:template name="sep" text=", "/>
<l:template name="sep2" text=" আৰু "/>
<l:template name="seplast" text=", আৰু "/>
</l:context>
<l:context name="glossary"><l:template name="see" text="চাওক %t."/>
<l:template name="seealso" text="ইয়াকো চাওক %t."/>
<l:template name="seealso-separator" text=", "/>
</l:context>
<l:context name="msgset"><l:template name="MsgAud" text="শ্ৰোতা: "/>
<l:template name="MsgLevel" text="স্তৰ: "/>
<l:template name="MsgOrig" text="উৎস: "/>
</l:context>
<l:context name="datetime"><l:template name="format" text="m/d/Y"/>
</l:context>
<l:context name="termdef"><l:template name="prefix" text="[Definition: "/>
<l:template name="suffix" text="]"/>
</l:context>
<l:context name="datetime-full"><l:template name="January" text="জানুৱাৰী"/>
<l:template name="February" text="ফেব্ৰুৱাৰী"/>
<l:template name="March" text="মাৰ্চ"/>
<l:template name="April" text="এপ্ৰিল"/>
<l:template name="May" text="মে'"/>
<l:template name="June" text="জুন"/>
<l:template name="July" text="জুলাই"/>
<l:template name="August" text="আগষ্ট"/>
<l:template name="September" text="চেপ্টেম্বৰ"/>
<l:template name="October" text="অক্টোবৰ"/>
<l:template name="November" text="নৱেম্বৰ"/>
<l:template name="December" text="ডিচেম্বৰ"/>
<l:template name="Monday" text="সোমবাৰ"/>
<l:template name="Tuesday" text="মঙ্গলবাৰ"/>
<l:template name="Wednesday" text="বুধবাৰ"/>
<l:template name="Thursday" text="বৃহস্পতিবাৰ"/>
<l:template name="Friday" text="শুকুৰবাৰ"/>
<l:template name="Saturday" text="শনিবাৰ"/>
<l:template name="Sunday" text="দেওবাৰ"/>
</l:context>
<l:context name="datetime-abbrev"><l:template name="Jan" text="জানুৱাৰী"/>
<l:template name="Feb" text="ফেব্ৰুৱাৰী"/>
<l:template name="Mar" text="মাৰ্চ"/>
<l:template name="Apr" text="এপ্ৰিল"/>
<l:template name="May" text="মে'"/>
<l:template name="Jun" text="জুন"/>
<l:template name="Jul" text="জুলাই"/>
<l:template name="Aug" text="আগষ্ট"/>
<l:template name="Sep" text="চেপ্টেম্বৰ"/>
<l:template name="Oct" text="অক্টোবৰ"/>
<l:template name="Nov" text="নৱেম্বৰ"/>
<l:template name="Dec" text="ডিচেম্বৰ"/>
<l:template name="Mon" text="সোম"/>
<l:template name="Tue" text="মঙ্গল"/>
<l:template name="Wed" text="বুধ"/>
<l:template name="Thu" text="বৃহস্পতি"/>
<l:template name="Fri" text="শুকুৰ"/>
<l:template name="Sat" text="শনি"/>
<l:template name="Sun" text="দেও"/>
</l:context>
<l:context name="htmlhelp"><l:template name="langcode" text="0x044d Assamese"/>
</l:context>
<l:context name="index"><l:template name="term-separator" text=", "/>
<l:template name="number-separator" text=", "/>
<l:template name="range-separator" text="-"/>
</l:context>
<l:context name="iso690"><l:template name="lastfirst.sep" text=", "/>
<l:template name="alt.person.two.sep" text=" "/>
<l:template name="alt.person.last.sep" text=" "/>
<l:template name="alt.person.more.sep" text=" "/>
<l:template name="primary.editor" text=" (ed.)"/>
<l:template name="primary.many" text=", et al."/>
<l:template name="primary.sep" text=". "/>
<l:template name="submaintitle.sep" text=": "/>
<l:template name="title.sep" text=". "/>
<l:template name="othertitle.sep" text=", "/>
<l:template name="medium1" text=" ["/>
<l:template name="medium2" text="]"/>
<l:template name="secondary.person.sep" text="; "/>
<l:template name="secondary.sep" text=". "/>
<l:template name="respons.sep" text=". "/>
<l:template name="edition.sep" text=". "/>
<l:template name="edition.serial.sep" text=", "/>
<l:template name="issuing.range" text="-"/>
<l:template name="issuing.div" text=", "/>
<l:template name="issuing.sep" text=". "/>
<l:template name="partnr.sep" text=". "/>
<l:template name="placepubl.sep" text=": "/>
<l:template name="publyear.sep" text=", "/>
<l:template name="pubinfo.sep" text=". "/>
<l:template name="spec.pubinfo.sep" text=", "/>
<l:template name="upd.sep" text=", "/>
<l:template name="datecit1" text=" [cited "/>
<l:template name="datecit2" text="]"/>
<l:template name="extent.sep" text=". "/>
<l:template name="locs.sep" text=", "/>
<l:template name="location.sep" text=". "/>
<l:template name="serie.sep" text=". "/>
<l:template name="notice.sep" text=". "/>
<l:template name="access" text="Available "/>
<l:template name="acctoo" text="Also available "/>
<l:template name="onwww" text="from World Wide Web"/>
<l:template name="oninet" text="from Internet"/>
<l:template name="access.end" text=": "/>
<l:template name="link1" text="&lt;"/>
<l:template name="link2" text="&gt;"/>
<l:template name="access.sep" text=". "/>
<l:template name="isbn" text="ISBN "/>
<l:template name="issn" text="ISSN "/>
<l:template name="stdnum.sep" text=". "/>
<l:template name="patcountry.sep" text=". "/>
<l:template name="pattype.sep" text=", "/>
<l:template name="patnum.sep" text=". "/>
<l:template name="patdate.sep" text=". "/>
</l:context><l:letters><l:l i="-1"/>
<l:l i="0">চিহ্ন</l:l>
<l:l i="10">A</l:l>
<l:l i="10">a</l:l>
<l:l i="20">B</l:l>
<l:l i="20">b</l:l>
<l:l i="30">C</l:l>
<l:l i="30">c</l:l>
<l:l i="40">D</l:l>
<l:l i="40">d</l:l>
<l:l i="50">E</l:l>
<l:l i="50">e</l:l>
<l:l i="60">F</l:l>
<l:l i="60">f</l:l>
<l:l i="70">G</l:l>
<l:l i="70">g</l:l>
<l:l i="80">H</l:l>
<l:l i="80">h</l:l>
<l:l i="90">I</l:l>
<l:l i="90">i</l:l>
<l:l i="100">J</l:l>
<l:l i="100">j</l:l>
<l:l i="110">K</l:l>
<l:l i="110">k</l:l>
<l:l i="120">L</l:l>
<l:l i="120">l</l:l>
<l:l i="130">M</l:l>
<l:l i="130">m</l:l>
<l:l i="140">N</l:l>
<l:l i="140">n</l:l>
<l:l i="150">O</l:l>
<l:l i="150">o</l:l>
<l:l i="160">P</l:l>
<l:l i="160">p</l:l>
<l:l i="170">Q</l:l>
<l:l i="170">q</l:l>
<l:l i="180">R</l:l>
<l:l i="180">r</l:l>
<l:l i="190">S</l:l>
<l:l i="190">s</l:l>
<l:l i="200">T</l:l>
<l:l i="200">t</l:l>
<l:l i="210">U</l:l>
<l:l i="210">u</l:l>
<l:l i="220">V</l:l>
<l:l i="220">v</l:l>
<l:l i="230">W</l:l>
<l:l i="230">w</l:l>
<l:l i="240">X</l:l>
<l:l i="240">x</l:l>
<l:l i="250">Y</l:l>
<l:l i="250">y</l:l>
<l:l i="260">Z</l:l>
<l:l i="260">z</l:l>
</l:letters>
</l:l10n>

Some files were not shown because too many files have changed in this diff Show More