Skip to content

Commit e9a4d06

Browse files
TuanNA1ng-anhhtuann
authored andcommitted
feat(new tool): unicode to java entities
1 parent 2821655 commit e9a4d06

File tree

8 files changed

+75
-116
lines changed

8 files changed

+75
-116
lines changed

components.d.ts

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -88,24 +88,16 @@ declare module 'vue' {
8888
IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default']
8989
'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default']
9090
'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default']
91-
IconMdiArrowRightBottom: typeof import('~icons/mdi/arrow-right-bottom')['default']
92-
IconMdiCamera: typeof import('~icons/mdi/camera')['default']
9391
IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
9492
IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
9593
IconMdiClose: typeof import('~icons/mdi/close')['default']
9694
IconMdiContentCopy: typeof import('~icons/mdi/content-copy')['default']
97-
IconMdiDeleteOutline: typeof import('~icons/mdi/delete-outline')['default']
98-
IconMdiDownload: typeof import('~icons/mdi/download')['default']
9995
IconMdiEye: typeof import('~icons/mdi/eye')['default']
10096
IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default']
10197
IconMdiHeart: typeof import('~icons/mdi/heart')['default']
102-
IconMdiPause: typeof import('~icons/mdi/pause')['default']
103-
IconMdiPlay: typeof import('~icons/mdi/play')['default']
104-
IconMdiRecord: typeof import('~icons/mdi/record')['default']
10598
IconMdiSearch: typeof import('~icons/mdi/search')['default']
10699
IconMdiTranslate: typeof import('~icons/mdi/translate')['default']
107100
IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default']
108-
IconMdiVideo: typeof import('~icons/mdi/video')['default']
109101
InputCopyable: typeof import('./src/components/InputCopyable.vue')['default']
110102
IntegerBaseConverter: typeof import('./src/tools/integer-base-converter/integer-base-converter.vue')['default']
111103
Ipv4AddressConverter: typeof import('./src/tools/ipv4-address-converter/ipv4-address-converter.vue')['default']
@@ -132,33 +124,25 @@ declare module 'vue' {
132124
MenuLayout: typeof import('./src/components/MenuLayout.vue')['default']
133125
MetaTagGenerator: typeof import('./src/tools/meta-tag-generator/meta-tag-generator.vue')['default']
134126
MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default']
135-
NAlert: typeof import('naive-ui')['NAlert']
136127
NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default']
137-
NCheckbox: typeof import('naive-ui')['NCheckbox']
138128
NCode: typeof import('naive-ui')['NCode']
139129
NCollapseTransition: typeof import('naive-ui')['NCollapseTransition']
140-
NColorPicker: typeof import('naive-ui')['NColorPicker']
141130
NConfigProvider: typeof import('naive-ui')['NConfigProvider']
142131
NDivider: typeof import('naive-ui')['NDivider']
143132
NEllipsis: typeof import('naive-ui')['NEllipsis']
144-
NForm: typeof import('naive-ui')['NForm']
145133
NFormItem: typeof import('naive-ui')['NFormItem']
146134
NGi: typeof import('naive-ui')['NGi']
147135
NGrid: typeof import('naive-ui')['NGrid']
148136
NH1: typeof import('naive-ui')['NH1']
149137
NH3: typeof import('naive-ui')['NH3']
150138
NIcon: typeof import('naive-ui')['NIcon']
151-
NInputGroup: typeof import('naive-ui')['NInputGroup']
152-
NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel']
153139
NInputNumber: typeof import('naive-ui')['NInputNumber']
140+
NLabel: typeof import('naive-ui')['NLabel']
154141
NLayout: typeof import('naive-ui')['NLayout']
155142
NLayoutSider: typeof import('naive-ui')['NLayoutSider']
156143
NMenu: typeof import('naive-ui')['NMenu']
157144
NScrollbar: typeof import('naive-ui')['NScrollbar']
158-
NSlider: typeof import('naive-ui')['NSlider']
159145
NSpin: typeof import('naive-ui')['NSpin']
160-
NSwitch: typeof import('naive-ui')['NSwitch']
161-
NTable: typeof import('naive-ui')['NTable']
162146
NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default']
163147
OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default']
164148
PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default']

locales/en.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,6 @@ tools:
392392
title: Text to ASCII binary
393393
description: Convert text to its ASCII binary representation and vice-versa.
394394

395-
unicode-to-java-entites:
395+
unicode-to-java-entities:
396396
title: Unicode Characters to Java Entities Converter
397397
description: Unicode Characters to Java Entities Converter and vice-versa

locales/vi.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,6 @@ tools:
381381
title: Chuyển đổi văn bản thành nhị phân ASCII
382382
description: Chuyển đổi văn bản thành biểu diễn nhị phân ASCII của nó và ngược lại.
383383

384-
unicode-to-java-entites:
384+
unicode-to-java-entities:
385385
title: Chuyển đổi ký tự Unicode sang thực thể Java
386386
description: Chuyển đổi ký tự Unicode sang thực thể Java và ngược lại

src/tools/unicode-characters-to-java-entities-converter/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { defineTool } from '../tool';
33
import { translate } from '@/plugins/i18n.plugin';
44

55
export const tool = defineTool({
6-
name: translate('tools.unicode-to-java-entites.title'),
7-
path: '/unicode-to-java-entites',
8-
description: translate('tools.unicode-to-java-entites.description'),
9-
keywords: ['text', 'to', 'unicode'],
6+
name: translate('tools.unicode-to-java-entities.title'),
7+
path: '/unicode-to-java-entities',
8+
description: translate('tools.unicode-to-java-entities.description'),
9+
keywords: ['java-entities', 'to', 'unicode', 'text'],
1010
component: () => import('./unicode-characters-to-java-entities.vue'),
1111
icon: TextWrapDisabled,
12-
createdAt: new Date('2024-01-31'),
12+
createdAt: new Date('2024-05-16'),
1313
});

src/tools/unicode-characters-to-java-entities-converter/unicode-characters-to-java-entities.service.ts

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,59 +5,59 @@ function strlenFix(str: string): string {
55
return str;
66
}
77

8-
function parseUnicodeToJavaEntities(source: string, direction: '0' | '-1'): string {
8+
function parseUnicodeToJavaEntities(source: string): string {
99
let result = '';
1010

11-
if (direction === '0') {
12-
// UTF-8 to entities
13-
for (let i = 0; i < source.length; i++) {
14-
const charCode = source.charCodeAt(i);
15-
if (charCode <= 127) {
16-
result += source.charAt(i);
17-
}
18-
else {
19-
result += `\\u${strlenFix(charCode.toString(16).toUpperCase())}`;
20-
}
11+
for (let i = 0; i < source.length; i++) {
12+
const charCode = source.charCodeAt(i);
13+
if (charCode <= 127) {
14+
result += source.charAt(i);
15+
}
16+
else {
17+
result += `\\u${strlenFix(charCode.toString(16).toUpperCase())}`;
2118
}
2219
}
23-
else {
24-
// Entities to UTF-8
25-
let state: 0 | 1 | 2 = 0;
26-
let chars = 0;
27-
let value = '';
28-
for (let i = 0; i < source.length; i++) {
29-
switch (state) {
30-
case 0:
31-
if (source.charAt(i) === '\\') {
32-
state = 1;
33-
}
34-
else {
35-
result += source.charAt(i);
36-
}
37-
break;
38-
case 1:
39-
if (source.charAt(i) === 'u') {
40-
state = 2;
41-
chars = 0;
42-
value = '';
43-
}
44-
else {
45-
result += `\\${source.charAt(i)}`;
46-
state = 0;
47-
}
48-
break;
49-
case 2:
50-
chars++;
51-
value += source.charAt(i);
52-
if (chars >= 4) {
53-
result += String.fromCharCode(Number.parseInt(value, 16));
54-
state = 0;
55-
}
56-
break;
57-
}
20+
return result;
21+
}
22+
23+
function parseJavaEntitiesToUnicode(source: string): string {
24+
let result = '';
25+
let state: 0 | 1 | 2 = 0;
26+
let chars = 0;
27+
let value = '';
28+
for (let i = 0; i < source.length; i++) {
29+
switch (state) {
30+
case 0:
31+
if (source.charAt(i) === '\\') {
32+
state = 1;
33+
}
34+
else {
35+
result += source.charAt(i);
36+
}
37+
break;
38+
case 1:
39+
if (source.charAt(i) === 'u') {
40+
state = 2;
41+
chars = 0;
42+
value = '';
43+
}
44+
else {
45+
result += `\\${source.charAt(i)}`;
46+
state = 0;
47+
}
48+
break;
49+
case 2:
50+
chars++;
51+
value += source.charAt(i);
52+
if (chars >= 4) {
53+
result += String.fromCharCode(Number.parseInt(value, 16));
54+
state = 0;
55+
}
56+
break;
5857
}
5958
}
59+
6060
return result;
6161
}
6262

63-
export { parseUnicodeToJavaEntities };
63+
export { parseUnicodeToJavaEntities, parseJavaEntitiesToUnicode };

src/tools/unicode-characters-to-java-entities-converter/unicode-characters-to-java-entities.spec.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import { describe, expect, it } from 'vitest';
2-
import { parseUnicodeToJavaEntities } from './unicode-characters-to-java-entities.service';
2+
import { parseJavaEntitiesToUnicode, parseUnicodeToJavaEntities } from './unicode-characters-to-java-entities.service';
33

44
describe('unicode-to-entities', () => {
55
describe('convertTextToUnicode', () => {
66
it('a unicode string is converted to java entities representation', () => {
7-
expect(parseUnicodeToJavaEntities('là', '0')).toBe('l\u00E0');
8-
expect(parseUnicodeToJavaEntities('sơn tùng MTP', '0')).toBe('s\u01A1n t\u00F9ng MTP');
9-
expect(parseUnicodeToJavaEntities('', '0')).toBe('');
7+
expect(parseUnicodeToJavaEntities('là')).toBe('l\\u00E0');
8+
expect(parseUnicodeToJavaEntities('sơn tùng MTP')).toBe('s\\u01A1n t\\u00F9ng MTP');
9+
expect(parseUnicodeToJavaEntities('')).toBe('');
1010
});
1111
});
1212

1313
describe('entities-to-unicode', () => {
1414
it('java entities string is converted to its unicode representation', () => {
15-
expect(parseUnicodeToJavaEntities('l\u00E0', '-1')).toBe('là');
16-
expect(parseUnicodeToJavaEntities('s\u01A1n t\u00F9ng MTP', '-1')).toBe('sơn tùng MTP');
17-
expect(parseUnicodeToJavaEntities('', '-1')).toBe('');
15+
expect(parseJavaEntitiesToUnicode('l\u00E0')).toBe('là');
16+
expect(parseJavaEntitiesToUnicode('s\u01A1n t\u00F9ng MTP')).toBe('sơn tùng MTP');
17+
expect(parseJavaEntitiesToUnicode('')).toBe('');
1818
});
1919
});
2020
});

src/tools/unicode-characters-to-java-entities-converter/unicode-characters-to-java-entities.vue

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
<script setup lang="ts">
2-
import { parseUnicodeToJavaEntities } from './unicode-characters-to-java-entities.service';
2+
import { parseJavaEntitiesToUnicode, parseUnicodeToJavaEntities } from './unicode-characters-to-java-entities.service';
33
import { useCopy } from '@/composable/copy';
44
55
const inputUnicode = ref('');
6-
const entitiesFromUnicode = computed(() => inputUnicode.value.trim() === '' ? '' : parseUnicodeToJavaEntities(inputUnicode.value, '0'));
7-
const { copy: copyUnicode } = useCopy({ source: entitiesFromUnicode });
6+
const entitiesFromUnicode = computed(() => inputUnicode.value.trim() === '' ? '' : parseUnicodeToJavaEntities(inputUnicode.value));
7+
const { copy: copyJavaEntities } = useCopy({ source: entitiesFromUnicode });
88
99
const inputJavaEntities = ref('');
10-
const unicodeFromEntities = computed(() => inputJavaEntities.value.trim() === '' ? '' : parseUnicodeToJavaEntities(inputJavaEntities.value, '-1'));
11-
const { copy: copyText } = useCopy({ source: unicodeFromEntities });
10+
const unicodeFromEntities = computed(() => inputJavaEntities.value.trim() === '' ? '' : parseJavaEntitiesToUnicode(inputJavaEntities.value));
11+
const { copy: copyUnicode } = useCopy({ source: unicodeFromEntities });
1212
</script>
1313

1414
<template>
1515
<c-card title="Unicode Characters to Java entities">
16-
<c-input-text v-model:value="inputUnicode" multiline placeholder="e.g. 'Hello Avengers'" label="Enter Unicode Characters to convert to Java entities" autosize autofocus raw-text test-id="unicode-to-entities-input" />
17-
<c-input-text v-model:value="entitiesFromUnicode" label="Java entities from your text" multiline raw-text readonly mt-2 placeholder="The unicode representation of your text will be here" test-id="unicode-to-entities-output" />
16+
<c-input-text v-model:value="inputUnicode" placeholder="e.g. 'Hello Avengers'" label="Enter Unicode Characters to convert to Java entities" autosize raw-text multiline autofocus test-id="unicode-to-entities-input" />
17+
<c-input-text v-model:value="entitiesFromUnicode" label="Java entities from your text" placeholder="The unicode representation of your text will be here" raw-text multiline readonly mt-2 test-id="unicode-to-entities-output" />
1818
<div mt-2 flex justify-center>
19-
<c-button :disabled="!entitiesFromUnicode" @click="copyUnicode()">
20-
Copy unicode to clipboard
19+
<c-button :disabled="!entitiesFromUnicode" @click="copyJavaEntities()">
20+
Copy Java entities to clipboard
2121
</c-button>
2222
</div>
2323
</c-card>
2424

2525
<c-card title="Java entities to Unicode Characters">
26-
<c-input-text v-model:value="inputJavaEntities" multiline placeholder="Input Java entities" label="Enter Java entities to convert to Unicode Characters" autosize raw-text test-id="entities-to-unicode-input" />
27-
<c-input-text v-model:value="unicodeFromEntities" label="Text from your Java entities" multiline raw-text readonly mt-2 placeholder="The text representation of your unicode will be here" test-id="entities-to-unicode-output" />
26+
<c-input-text v-model:value="inputJavaEntities" placeholder="Input Java entities" label="Enter Java entities to convert to Unicode Characters" autosize raw-text multiline test-id="entities-to-unicode-input" />
27+
<c-input-text v-model:value="unicodeFromEntities" label="Text from your Java entities" placeholder="The text representation of your unicode will be here" multiline raw-text readonly mt-2 test-id="entities-to-unicode-output" />
2828
<div mt-2 flex justify-center>
29-
<c-button :disabled="!unicodeFromEntities" @click="copyText()">
30-
Copy text to clipboard
29+
<c-button :disabled="!unicodeFromEntities" @click="copyUnicode()">
30+
Copy Unicode to clipboard
3131
</c-button>
3232
</div>
3333
</c-card>

0 commit comments

Comments
 (0)