This commit is contained in:
monoid 2022-06-11 15:47:16 +09:00
parent ca9658be6b
commit 384c33e6a6
7 changed files with 3499 additions and 14 deletions

1
.gitignore vendored
View File

@ -1,4 +1,3 @@
book book
.env .env
cache
.DS_Store .DS_Store

3434
cache/issues.json vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,7 @@
# Summary # Summary
[Index](./index.md)
- [Introduction](./intro.md) - [Introduction](./intro.md)
- [Overall Description](./overall.md) - [Overall Description](./overall.md)
- [Specific Requirement](./specific.md) - [Specific Requirement](./specific.md)

43
src/index.md Normal file
View File

@ -0,0 +1,43 @@
# 목차(Index)
1. [Introduction](./intro.md)
1. [목적(Purpose)](./intro.md#11-목적purpose)
2. [범위(scope)](./intro.md#12-범위scope)
3. [용어 및 약어 정의(Definitions, acronyms and abbreviations)](./intro.md#13-용어-및-약어-정의definitions-acronyms-and-abbreviations)
4. [참고자료(References)](./intro.md#14-참고자료references)
5. [개요(Overview)](./intro.md#15-개요overview)
2. [Overall Description](./overall.md)
1. [제품 관점(Product perspective)](./overall.md#21-제품-관점product-perspective)
1. [시스템 인터페이스(System interfaces)](./overall.md#211-시스템-인터페이스system-interfaces)
2. [사용자 인터페이스(User interfaces)](./overall.md#212-사용자-인터페이스user-interfaces)
3. [하드웨어 인터페이스(Hardware interfaces)](./overall.md#213-하드웨어-인터페이스hardware-interfaces)
4. [소프트웨어 인터페이스(Software interfaces)](./overall.md#214-소프트웨어-인터페이스software-interfaces)
5. [통신 인터페이스(Communications interfaces)](./overall.md#215-통신-인터페이스communications-interfaces)
6. [메모리 제약사항(Memory constraints)](./overall.md#216-메모리-제약사항memory-constraints)
7. [운영(Operations)](./overall.md#217-운영operations)
8. [사이트 적용 요건(Site adaption requirements)](./overall.md#218-사이트-적용-요건site-adaption-requirements)
2. [제품 기능(Product functions)](./overall.md#22-제품-기능product-functions)
<%
const table = it.table;
let index = 1;
for (const [c,issues] of table) {
const name = `${c} Operation`;
const href = `2.2.${index} ${c} Operation`
%><%= `${index++}. [${name}](./overall.md#${it.toHeadId(href)})\n ` %><%}%><%="\n"%>
3. [Specific Requirement](./specific.md)
1. [외부 인터페이스 요구사항(External interface requirements)](./specific.md#31-외부-인터페이스-요구사항external-interface-requirements)
2. [기능 요구사항(Functional requirements)](./specific.md#32-기능-요구사항functional-requirements)
<%= it.issues.map((i)=>`(#${i.number}) ${i.title}`).map(
x=>`* [${x}](./specific.md#${it.toHeadId(x)})`
).join("\n ") %><%= "\n"%>
3. [성능 요구사항(Performance requirements)](./specific.md#33-성능-요구사항performance-requirements)
4. [논리적 데이터베이스 요구사항(Logical database requirements)](./specific.md#34-논리적-데이터베이스-요구사항logical-database-requirements)
5. [설계 제약사항(Design constraints)](./specific.md#35-설계-제약사항design-constraints)
1. [표준 준수(Standards compliance)](./specific.md#351-표준-준수standards-compliance)
6. [소프트웨어 시스템 속성(Software system attributes)](./specific.md#36-소프트웨어-시스템-속성software-system-attributes)
7. [상세 요구사항의 구성(Organizing the specific requirements)](./specific.md#37-상세-요구사항의-구성organizing-the-specific-requirements)
1. [객체(Objects)](./specific.md#371-객체objects)
2. [사용자 인터페이스 상세](./specific.md#372-사용자-인터페이스-상세)
4. [Supporting information](./support.md)
5. [Architecture](./architecture.md)
6. [Testing](./testing.md)

View File

@ -45,17 +45,7 @@
본 프로젝트의 결과물은 다음과 같은 기능을 수행한다. 본 프로젝트의 결과물은 다음과 같은 기능을 수행한다.
<% <%
const table = new Map(); const table = it.table;
it.issues.forEach((x)=>{
const category = x.title.split(":")[0];
if(!category) return;
let c = table.get(category)
if(!c){
c = [];
table.set(category,c);
}
c.push(x);
})
let index = 1; let index = 1;
for (const [c,issues] of table) { for (const [c,issues] of table) {
%><%= `### 2.2.${index++} ${c} Operation\n\n` %><% %><%= `### 2.2.${index++} ${c} Operation\n\n` %><%

View File

@ -62,6 +62,10 @@ async function getIssues(){
return issues; return issues;
} }
function toHeadId(name: string){
return name.replaceAll(/[^A-Za-z\s0-9]/gi,"").toLocaleLowerCase().replaceAll(" ","-");
}
async function main(args: string[]) { async function main(args: string[]) {
if (args.length > 1) { if (args.length > 1) {
//log.info(`args: ${JSON.stringify(args)}`); //log.info(`args: ${JSON.stringify(args)}`);
@ -70,6 +74,17 @@ async function main(args: string[]) {
} }
} }
const issues = await getIssues(); const issues = await getIssues();
const table = new Map();
issues.forEach((x)=>{
const category = x.title.split(":")[0];
if(!category) return;
let c = table.get(category)
if(!c){
c = [];
table.set(category,c);
}
c.push(x);
})
log.info(`start`); log.info(`start`);
const data = await readAll(Deno.stdin); const data = await readAll(Deno.stdin);
@ -78,7 +93,9 @@ async function main(args: string[]) {
const [context, book] = JSON.parse(jsonText) as [any, Book]; const [context, book] = JSON.parse(jsonText) as [any, Book];
book.sections.forEach(x=>{ book.sections.forEach(x=>{
x.Chapter.content = Eta.render(x.Chapter.content, { x.Chapter.content = Eta.render(x.Chapter.content, {
issues: issues issues: issues,
table: table,
toHeadId: toHeadId,
}) as string; }) as string;
}) })
//Deno.stderr.writeSync(new TextEncoder().encode(`context: ${JSON.stringify(context)}\n`)); //Deno.stderr.writeSync(new TextEncoder().encode(`context: ${JSON.stringify(context)}\n`));