DPI [2-15] 클리핑 마스크 미적용시 [16~20] 문항 오답처리
This commit is contained in:
BIN
00_DIC_2522A_TEST.xlsx
Normal file
BIN
00_DIC_2522A_TEST.xlsx
Normal file
Binary file not shown.
BIN
00_DIC_2522B_TEST.xlsx
Normal file
BIN
00_DIC_2522B_TEST.xlsx
Normal file
Binary file not shown.
BIN
00_DPI_2508B_TEST.xlsx
Normal file
BIN
00_DPI_2508B_TEST.xlsx
Normal file
Binary file not shown.
@@ -1,5 +1,3 @@
|
|||||||
# 분류된 "과목별" 폴더에서 시험 파일을 복사하는 스크립트
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import re
|
import re
|
||||||
@@ -75,8 +73,10 @@ def copy_exam_files(exam_round, exam_codes, source_dir):
|
|||||||
|
|
||||||
# 사용 예시
|
# 사용 예시
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
exam_round = "2508"
|
exam_round = "2522"
|
||||||
exam_codes = ["DIC", "DPI"]
|
# exam_codes = ["DIC", "DPI"]
|
||||||
source_dir = r"D:\project\data\제2508회 정기\(전체답안)답안파일(과목별)"
|
exam_codes = ["DIC"]
|
||||||
|
# source_dir = r"D:\project\data\제2508회 정기\(전체답안)답안파일(과목별)"
|
||||||
|
source_dir = r"D:\project\data\제2522회 특별\(추가)과목별_답안파일"
|
||||||
|
|
||||||
copy_exam_files(exam_round, exam_codes, source_dir)
|
copy_exam_files(exam_round, exam_codes, source_dir)
|
||||||
|
|||||||
BIN
250905_DIC_2522A_채점결과.xlsx
Normal file
BIN
250905_DIC_2522A_채점결과.xlsx
Normal file
Binary file not shown.
BIN
250905_DIC_2522B_채점결과.xlsx
Normal file
BIN
250905_DIC_2522B_채점결과.xlsx
Normal file
Binary file not shown.
BIN
250915_DPI_2508B_채점결과.xlsx
Normal file
BIN
250915_DPI_2508B_채점결과.xlsx
Normal file
Binary file not shown.
751
DIC_2522A.json
Normal file
751
DIC_2522A.json
Normal file
@@ -0,0 +1,751 @@
|
|||||||
|
{
|
||||||
|
"0": {
|
||||||
|
"1": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"ele": "$[?(@.width == 65 && @.height == 45)]",
|
||||||
|
"type": "size",
|
||||||
|
"value": {
|
||||||
|
"width": 65,
|
||||||
|
"height": 45
|
||||||
|
},
|
||||||
|
"point": 4
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"1": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"ele": "$.children[?(@.name=='A train & a stop sign')].name",
|
||||||
|
"value": "A train & a stop sign",
|
||||||
|
"point": 4
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"ele": "$.children[?(@.name=='A train & a stop sign')].text.font.names[0]",
|
||||||
|
"type": "font",
|
||||||
|
"value": "Arial",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"ele": "$.children[?(@.name=='A train & a stop sign')].text.font.names[0]",
|
||||||
|
"value": "Arial-BoldItalicMT",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"ele": "$.children[?(@.name=='A train & a stop sign')].text.font.sizes[0]",
|
||||||
|
"value": 48,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"ele": "$.children[?(@.name=='A train & a stop sign')].text.font.colors[0]",
|
||||||
|
"type": "color",
|
||||||
|
"value": "d6d6d6",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"ele": "$.children[?(@.name=='기차 여행과 표지판')].name",
|
||||||
|
"value": "기차 여행과 표지판",
|
||||||
|
"point": 4
|
||||||
|
},
|
||||||
|
"14": {
|
||||||
|
"ele": "$.children[?(@.name=='기차 여행과 표지판')].text.font.names[0]",
|
||||||
|
"type": "font",
|
||||||
|
"value": "YetR",
|
||||||
|
"point": 2,
|
||||||
|
"desc": {
|
||||||
|
"돋움체": "DotumChe",
|
||||||
|
"궁서체": "GungsuhChe",
|
||||||
|
"굴림체": "GulimChe",
|
||||||
|
"휴먼옛체": "YetR"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"15": {
|
||||||
|
"ele": "$.children[?(@.name=='기차 여행과 표지판')].text.font.sizes[0]",
|
||||||
|
"value": 36,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"ele": "$.children[?(@.name=='기차 여행과 표지판')].text.font.colors[0]",
|
||||||
|
"type": "color",
|
||||||
|
"value": "035b80",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"17": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"18": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"19": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"20": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"21": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"22": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"23": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"24": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"25": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"26": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"27": {
|
||||||
|
"ele": "$[?(@.width == 65 && @.height == 45)]",
|
||||||
|
"type": "size",
|
||||||
|
"value": {
|
||||||
|
"width": 65,
|
||||||
|
"height": 45
|
||||||
|
},
|
||||||
|
"point": 4
|
||||||
|
},
|
||||||
|
"28": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"1": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
|
||||||
|
"type": "mediaOrder",
|
||||||
|
"value": ["동영상.mp4", "이미지1.jpg", "이미지2.jpg", "이미지3.jpg"],
|
||||||
|
"point": 4,
|
||||||
|
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
|
||||||
|
"type": "oneAnswer",
|
||||||
|
"value": {
|
||||||
|
"speed": "150"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "100당 1배속 / 130 = 1.3배속"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
|
||||||
|
"type": "startEnd",
|
||||||
|
"media": "동영상.mp4",
|
||||||
|
"value": {
|
||||||
|
"start": "0",
|
||||||
|
"end": "330"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다."
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "effect",
|
||||||
|
"media": "동영상.mp4",
|
||||||
|
"value": {
|
||||||
|
"ID": "52",
|
||||||
|
"VID100": "5",
|
||||||
|
"VID103": "0.69999999"
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
|
||||||
|
"search": "달리는 기차를 보며",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "달리는 기차를 보며",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
|
||||||
|
"search": "달리는 기차를 보며",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "바탕체",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
|
||||||
|
"search": "달리는 기차를 보며",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "120",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
|
||||||
|
"search": "달리는 기차를 보며",
|
||||||
|
"type": "video.Text.Color",
|
||||||
|
"value": "00ffe6",
|
||||||
|
"point": 2,
|
||||||
|
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
|
||||||
|
"search": "달리는 기차를 보며",
|
||||||
|
"type": "video.Location",
|
||||||
|
"value": ["0.29583335", "0.9222222"],
|
||||||
|
"point": 2,
|
||||||
|
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"ele": "",
|
||||||
|
"search": "달리는 기차를 보며",
|
||||||
|
"type": "video.StartTime",
|
||||||
|
"value": 170,
|
||||||
|
"point": 2,
|
||||||
|
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"ele": "",
|
||||||
|
"search": "달리는 기차를 보며",
|
||||||
|
"type": "video.Length",
|
||||||
|
"value": 150,
|
||||||
|
"point": 2,
|
||||||
|
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute",
|
||||||
|
"type": "Mute",
|
||||||
|
"media": "동영상.mp4",
|
||||||
|
"value": "1",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
|
||||||
|
"type": "imageLength",
|
||||||
|
"media": "이미지1.jpg",
|
||||||
|
"value": 150,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"14": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "imageOverlay",
|
||||||
|
"media": "이미지1.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "125",
|
||||||
|
"VID101": "8"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
|
||||||
|
},
|
||||||
|
"15": {
|
||||||
|
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
|
||||||
|
"type": "clipTransition",
|
||||||
|
"media": "이미지1.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "96",
|
||||||
|
"Range": "390:480",
|
||||||
|
"Type": "2"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버랩일 경우 Type속성값 16으로 변경"
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
|
||||||
|
"type": "imageLength",
|
||||||
|
"media": "이미지2.jpg",
|
||||||
|
"value": 150,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"17": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "imageOverlay",
|
||||||
|
"media": "이미지2.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "99",
|
||||||
|
"VID100": "50"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
|
||||||
|
},
|
||||||
|
"18": {
|
||||||
|
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
|
||||||
|
"type": "clipTransition",
|
||||||
|
"media": "이미지2.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "35",
|
||||||
|
"Range": "600:660",
|
||||||
|
"Type": "16"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버랩일 경우 Type속성값 16으로 변경"
|
||||||
|
},
|
||||||
|
"19": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
|
||||||
|
"type": "imageLength",
|
||||||
|
"media": "이미지3.jpg",
|
||||||
|
"value": 180,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"20": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "imageOverlay",
|
||||||
|
"media": "이미지3.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "102",
|
||||||
|
"VID101": "8"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
|
||||||
|
},
|
||||||
|
"21": {
|
||||||
|
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
|
||||||
|
"type": "clipTransition",
|
||||||
|
"media": "이미지3.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "1",
|
||||||
|
"Range": "780:810",
|
||||||
|
"Type": "2"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버랩일 경우 Type속성값 16으로 변경"
|
||||||
|
},
|
||||||
|
"22": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "기차 여행 Train Travel",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"23": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "궁서체",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"24": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "130",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"25": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "video.Text.Color",
|
||||||
|
"value": "0300f0",
|
||||||
|
"point": 2,
|
||||||
|
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
|
||||||
|
},
|
||||||
|
"26": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "video.Text.Outline",
|
||||||
|
"value": {
|
||||||
|
"width": "35",
|
||||||
|
"color": "bcebf7"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
|
||||||
|
},
|
||||||
|
"27": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "opening.Text.FadeInEffect",
|
||||||
|
"value": {
|
||||||
|
"VID505": "3",
|
||||||
|
"VID507": "2"
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
|
||||||
|
},
|
||||||
|
"28": {
|
||||||
|
"ele": "",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "opening.StartTime",
|
||||||
|
"value": 0,
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오프닝자막의 시작시간 value 속성만 수정"
|
||||||
|
},
|
||||||
|
"29": {
|
||||||
|
"ele": "",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "opening.Length",
|
||||||
|
"value": 120,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"30": {
|
||||||
|
"ele": "",
|
||||||
|
"type": "audio.StartTime",
|
||||||
|
"media": "음악.mp3",
|
||||||
|
"value": 0,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"31": {
|
||||||
|
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
|
||||||
|
"type": "audio.EndTime",
|
||||||
|
"media": "음악.mp3",
|
||||||
|
"value": 740,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"32": {
|
||||||
|
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "audio.Effect",
|
||||||
|
"media": "음악.mp3",
|
||||||
|
"value": {
|
||||||
|
"ID": "1",
|
||||||
|
"Duration": "60"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "ID속성-페이드인:0 / 페이드아웃: 1"
|
||||||
|
},
|
||||||
|
"33": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"1": {
|
||||||
|
"type": "canvas.Size",
|
||||||
|
"ele": "//Document/Width/@value | //Document/Height/@value",
|
||||||
|
"value": ["650", "350"],
|
||||||
|
"point": 5,
|
||||||
|
"desc": "캔버스 사이즈 650*350"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 5,
|
||||||
|
"desc": "자유 변형 문항은 채점 불가"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"type": "layer.exists",
|
||||||
|
"ele": "//Layer/Name/@value",
|
||||||
|
"value": "Valley",
|
||||||
|
"point": 5,
|
||||||
|
"desc": "Valley 레이어가 있는지 여부 체크"
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"type": "layer.Effects",
|
||||||
|
"ele": "//Layer/Effects/Item",
|
||||||
|
"ele_temp": "//Layer[Name[@value='{search}']]/Effects/Item",
|
||||||
|
"search": "Valley",
|
||||||
|
"value": {
|
||||||
|
"name": "선명하게",
|
||||||
|
"option": {
|
||||||
|
"양": "7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"point": 5,
|
||||||
|
"desc": {
|
||||||
|
"흑백": "강도",
|
||||||
|
"밝기/대비": ["밝기", "대비"],
|
||||||
|
"노출": "노출",
|
||||||
|
"색조/채도": ["색조", "채도", "명도"],
|
||||||
|
"감마": ["리프트", "감마", "게인"],
|
||||||
|
"세피아": ["U", "V"],
|
||||||
|
"생동감": "생동감",
|
||||||
|
"흐리게": "반경",
|
||||||
|
"글로우": ["반경", "밝기", "대비"],
|
||||||
|
"픽셀효과": "셀크기",
|
||||||
|
"선명하게": "양"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "올가미 도구/이미지 문항은 채점 불가"
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/Effects/Item/Name/@value",
|
||||||
|
"value": "세피아",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "세피아 효과가 있는지 여부 체크"
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/Shapes/Shape/shape_type/@value",
|
||||||
|
"value": "RECTANGLE",
|
||||||
|
"point": 3,
|
||||||
|
"desc": {
|
||||||
|
"모서리가 둥근 사각형": "ROUNDED_RECTANGLE",
|
||||||
|
"사각형": "RECTANGLE",
|
||||||
|
"타원": "ELLIPSE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"type": "shape.size",
|
||||||
|
"ele": "//Layer//op_points",
|
||||||
|
"value": {
|
||||||
|
"width": 335,
|
||||||
|
"height": 35
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"type": "shape.color",
|
||||||
|
"ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value",
|
||||||
|
"value": "46A64A",
|
||||||
|
"point": 6,
|
||||||
|
"desc": ""
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"type": "layer.blend.opacity",
|
||||||
|
"ele": "//Layer",
|
||||||
|
"value": {
|
||||||
|
"BlendOp": "중첩",
|
||||||
|
"Opacity": "80"
|
||||||
|
},
|
||||||
|
"point": 6
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "기본설정"
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"1": {
|
||||||
|
"type": "canvas.Size",
|
||||||
|
"ele": "//Document/Width/@value | //Document/Height/@value",
|
||||||
|
"value": ["650", "450"],
|
||||||
|
"point": 5,
|
||||||
|
"desc": "캔버스 사이즈 650*450"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 5,
|
||||||
|
"desc": "배경색 문항은 채점 불가"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/MaskOpType/@value",
|
||||||
|
"value": "Layering",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "레이어 마스크 설정 확인"
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "가로방향 흐릿하게 문항은 채점 불가"
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//shape_type/@value",
|
||||||
|
"value": "ROUNDED_RECTANGLE",
|
||||||
|
"point": 3,
|
||||||
|
"desc": "모서리가 둥근 사각형 : ROUNDED_RECTANGLE / 사각형 : RECTANGLE"
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"type": "shape.size",
|
||||||
|
"ele": "//Layer//op_points",
|
||||||
|
"value": {
|
||||||
|
"width": 400,
|
||||||
|
"height": 50
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"type": "gradient.color",
|
||||||
|
"ele": "//Layer/Shapes/Shape",
|
||||||
|
"startColor": "gradient_start_color/@value",
|
||||||
|
"endColor": "gradient_end_color/@value",
|
||||||
|
"value": {
|
||||||
|
"startColor": "3CB241",
|
||||||
|
"endColor": "931FAD"
|
||||||
|
},
|
||||||
|
"point": 6
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"type": "text.exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value",
|
||||||
|
"value": "도깨비골 스카이밸리",
|
||||||
|
"point": 5
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value",
|
||||||
|
"value": "돋움",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value",
|
||||||
|
"style": "Italic",
|
||||||
|
"value": "True",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value",
|
||||||
|
"value": "24",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"type": "text.color",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value",
|
||||||
|
"value": "AA2318",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value",
|
||||||
|
"value": "5",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"14": {
|
||||||
|
"type": "text.color",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value",
|
||||||
|
"value": "FFFFFF",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"15": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/MaskOpType/@value",
|
||||||
|
"value": "Clipping",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함"
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/Shapes/Shape/shape_type/@value",
|
||||||
|
"value": "ELLIPSE",
|
||||||
|
"point": 3,
|
||||||
|
"desc": {
|
||||||
|
"사각형": "RECTANGLE",
|
||||||
|
"원형/타원형": "ELLIPSE",
|
||||||
|
"17~20 문항 option값 변경": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"17": {
|
||||||
|
"type": "clipping.size",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='{option}']//op_points",
|
||||||
|
"option": "ELLIPSE",
|
||||||
|
"value": {
|
||||||
|
"width": 170,
|
||||||
|
"height": 170
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
|
||||||
|
},
|
||||||
|
"18": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value",
|
||||||
|
"option": "ELLIPSE",
|
||||||
|
"value": "3",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"19": {
|
||||||
|
"type": "clipping.color",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value",
|
||||||
|
"option": "ELLIPSE",
|
||||||
|
"value": "4B7E5C",
|
||||||
|
"point": 3,
|
||||||
|
"desc": "채우기:secondary_color, 외곽선:primary_color"
|
||||||
|
},
|
||||||
|
"20": {
|
||||||
|
"type": "shadow",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='{option}']",
|
||||||
|
"option": "ELLIPSE",
|
||||||
|
"value": {
|
||||||
|
"shadow": true,
|
||||||
|
"width": "5",
|
||||||
|
"distance": "2",
|
||||||
|
"blur": "1",
|
||||||
|
"angle": "320"
|
||||||
|
},
|
||||||
|
"point": 5,
|
||||||
|
"desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점"
|
||||||
|
},
|
||||||
|
"21": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "기본설정"
|
||||||
|
},
|
||||||
|
"22": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
740
DIC_2522B.json
Normal file
740
DIC_2522B.json
Normal file
@@ -0,0 +1,740 @@
|
|||||||
|
{
|
||||||
|
"0": {
|
||||||
|
"1": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"ele": "$[?(@.width == 65 && @.height == 45)]",
|
||||||
|
"type": "size",
|
||||||
|
"value": {
|
||||||
|
"width": 65,
|
||||||
|
"height": 45
|
||||||
|
},
|
||||||
|
"point": 4
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"1": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"ele": "$.children[?(@.name=='시장')].name",
|
||||||
|
"value": "시장",
|
||||||
|
"point": 4
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"ele": "$.children[?(@.name=='Pattaya Floating Market')].name",
|
||||||
|
"value": "Pattaya Floating Market",
|
||||||
|
"point": 4
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"ele": "$.children[?(@.name=='Pattaya Floating Market')].text.font.names[0]",
|
||||||
|
"type": "font",
|
||||||
|
"value": "Arial",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"ele": "$.children[?(@.name=='Pattaya Floating Market')].text.font.names[0]",
|
||||||
|
"value": "Arial-BoldItalicMT",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"ele": "$.children[?(@.name=='Pattaya Floating Market')].text.font.sizes[0]",
|
||||||
|
"value": 40,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"ele": "$.children[?(@.name=='Pattaya Floating Market')].text.font.colors[0]",
|
||||||
|
"type": "color",
|
||||||
|
"value": "efe109",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"14": {
|
||||||
|
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].name",
|
||||||
|
"value": "파타야 수상시장 놀러오세요.",
|
||||||
|
"point": 4
|
||||||
|
},
|
||||||
|
"15": {
|
||||||
|
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.names[0]",
|
||||||
|
"type": "font",
|
||||||
|
"value": "Gungsuh",
|
||||||
|
"point": 2,
|
||||||
|
"desc": {
|
||||||
|
"돋움체": "DotumChe",
|
||||||
|
"궁서체": "GungsuhChe",
|
||||||
|
"굴림체": "GulimChe",
|
||||||
|
"휴먼옛체": "YetR"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.sizes[0]",
|
||||||
|
"value": 24,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"17": {
|
||||||
|
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.colors[0]",
|
||||||
|
"type": "color",
|
||||||
|
"value": "fc07a8",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"18": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"19": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"20": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"21": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"22": {
|
||||||
|
"ele": "$.children[?(@.name=='나무배')].name",
|
||||||
|
"value": "나무배",
|
||||||
|
"point": 4
|
||||||
|
},
|
||||||
|
"23": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"24": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"25": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0
|
||||||
|
},
|
||||||
|
"26": {
|
||||||
|
"ele": "$[?(@.width == 65 && @.height == 35)]",
|
||||||
|
"type": "size",
|
||||||
|
"value": {
|
||||||
|
"width": 65,
|
||||||
|
"height": 35
|
||||||
|
},
|
||||||
|
"point": 5
|
||||||
|
},
|
||||||
|
"27": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"1": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
|
||||||
|
"type": "mediaOrder",
|
||||||
|
"value": ["동영상.mp4", "이미지2.jpg", "이미지1.jpg", "이미지3.jpg"],
|
||||||
|
"point": 4,
|
||||||
|
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
|
||||||
|
"type": "oneAnswer",
|
||||||
|
"value": {
|
||||||
|
"speed": "150"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "100당 1배속 / 130 = 1.3배속"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
|
||||||
|
"type": "startEnd",
|
||||||
|
"media": "동영상.mp4",
|
||||||
|
"value": {
|
||||||
|
"start": "0",
|
||||||
|
"end": "410"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다."
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "effect",
|
||||||
|
"media": "동영상.mp4",
|
||||||
|
"value": {
|
||||||
|
"ID": "44",
|
||||||
|
"VID100": "10",
|
||||||
|
"VID103": "0.80000001"
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
|
||||||
|
"search": "태국문화 엿보기",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "태국문화 엿보기",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
|
||||||
|
"search": "태국문화 엿보기",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "바탕체",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
|
||||||
|
"search": "태국문화 엿보기",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "110",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
|
||||||
|
"search": "태국문화 엿보기",
|
||||||
|
"type": "video.Text.Color",
|
||||||
|
"value": "c00712",
|
||||||
|
"point": 2,
|
||||||
|
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
|
||||||
|
"search": "태국문화 엿보기",
|
||||||
|
"type": "video.Location",
|
||||||
|
"value": ["0.34270835", "0.92962962"],
|
||||||
|
"point": 2,
|
||||||
|
"desc": [
|
||||||
|
"정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다",
|
||||||
|
"CRCUnitArr의 VID600이 X좌표, VID601이 Y좌표"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"ele": "",
|
||||||
|
"search": "태국문화 엿보기",
|
||||||
|
"type": "video.StartTime",
|
||||||
|
"value": 150,
|
||||||
|
"point": 2,
|
||||||
|
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"ele": "",
|
||||||
|
"search": "태국문화 엿보기",
|
||||||
|
"type": "video.Length",
|
||||||
|
"value": 150,
|
||||||
|
"point": 2,
|
||||||
|
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute",
|
||||||
|
"type": "Mute",
|
||||||
|
"media": "동영상.mp4",
|
||||||
|
"value": "1",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
|
||||||
|
"type": "imageLength",
|
||||||
|
"media": "이미지2.jpg",
|
||||||
|
"value": 150,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"14": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "imageOverlay",
|
||||||
|
"media": "이미지2.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "102",
|
||||||
|
"VID101": "7"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
|
||||||
|
},
|
||||||
|
"15": {
|
||||||
|
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
|
||||||
|
"type": "clipTransition",
|
||||||
|
"media": "이미지2.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "0",
|
||||||
|
"Range": "530:560",
|
||||||
|
"Type": "2"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버랩일 경우 Type속성값 16으로 변경"
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
|
||||||
|
"type": "imageLength",
|
||||||
|
"media": "이미지1.jpg",
|
||||||
|
"value": 150,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"17": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "imageOverlay",
|
||||||
|
"media": "이미지1.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "128",
|
||||||
|
"VID101": "2"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
|
||||||
|
},
|
||||||
|
"18": {
|
||||||
|
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
|
||||||
|
"type": "clipTransition",
|
||||||
|
"media": "이미지1.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "14",
|
||||||
|
"Range": "650:710",
|
||||||
|
"Type": "2"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버랩일 경우 Type속성값 16으로 변경"
|
||||||
|
},
|
||||||
|
"19": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
|
||||||
|
"type": "imageLength",
|
||||||
|
"media": "이미지3.jpg",
|
||||||
|
"value": 150,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"20": {
|
||||||
|
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "imageOverlay",
|
||||||
|
"media": "이미지3.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "173",
|
||||||
|
"VID102": "220"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
|
||||||
|
},
|
||||||
|
"21": {
|
||||||
|
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
|
||||||
|
"type": "clipTransition",
|
||||||
|
"media": "이미지3.jpg",
|
||||||
|
"value": {
|
||||||
|
"ID": "19",
|
||||||
|
"Range": "830:860",
|
||||||
|
"Type": "2"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오버랩일 경우 Type속성값 16으로 변경"
|
||||||
|
},
|
||||||
|
"22": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
|
||||||
|
"search": "로컬시장 투어 Local market tour",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "로컬시장 투어 Local market tour",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"23": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
|
||||||
|
"search": "로컬시장 투어 Local market tour",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "궁서",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"24": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
|
||||||
|
"search": "로컬시장 투어 Local market tour",
|
||||||
|
"type": "video.Text",
|
||||||
|
"value": "150",
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"25": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
|
||||||
|
"search": "로컬시장 투어 Local market tour",
|
||||||
|
"type": "video.Text.Color",
|
||||||
|
"value": "1a237e",
|
||||||
|
"point": 2,
|
||||||
|
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
|
||||||
|
},
|
||||||
|
"26": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
|
||||||
|
"search": "로컬시장 투어 Local market tour",
|
||||||
|
"type": "video.Text.Outline",
|
||||||
|
"value": {
|
||||||
|
"width": "20",
|
||||||
|
"color": "1976d2"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
|
||||||
|
},
|
||||||
|
"27": {
|
||||||
|
"ele": "//CROwneUnit[{index}]/CRCUnitArr",
|
||||||
|
"search": "로컬시장 투어 Local market tour",
|
||||||
|
"type": "opening.Text.FadeInEffect",
|
||||||
|
"value": {
|
||||||
|
"VID505": "1",
|
||||||
|
"VID507": "2"
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
|
||||||
|
},
|
||||||
|
"28": {
|
||||||
|
"ele": "",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "opening.StartTime",
|
||||||
|
"value": 0,
|
||||||
|
"point": 2,
|
||||||
|
"desc": "오프닝자막의 시작시간 value 속성만 수정"
|
||||||
|
},
|
||||||
|
"29": {
|
||||||
|
"ele": "",
|
||||||
|
"search": "기차 여행 Train Travel",
|
||||||
|
"type": "opening.Length",
|
||||||
|
"value": 120,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"30": {
|
||||||
|
"ele": "",
|
||||||
|
"type": "audio.StartTime",
|
||||||
|
"media": "음악.mp3",
|
||||||
|
"value": 0,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"31": {
|
||||||
|
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
|
||||||
|
"type": "audio.EndTime",
|
||||||
|
"media": "음악.mp3",
|
||||||
|
"value": 840,
|
||||||
|
"point": 2
|
||||||
|
},
|
||||||
|
"32": {
|
||||||
|
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
|
||||||
|
"type": "audio.Effect",
|
||||||
|
"media": "음악.mp3",
|
||||||
|
"value": {
|
||||||
|
"ID": "1",
|
||||||
|
"Duration": "90"
|
||||||
|
},
|
||||||
|
"point": 2,
|
||||||
|
"desc": "ID속성-페이드인:0 / 페이드아웃: 1"
|
||||||
|
},
|
||||||
|
"33": {
|
||||||
|
"ele": "none",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"1": {
|
||||||
|
"type": "canvas.Size",
|
||||||
|
"ele": "//Document/Width/@value | //Document/Height/@value",
|
||||||
|
"value": ["650", "350"],
|
||||||
|
"point": 5,
|
||||||
|
"desc": "캔버스 사이즈 650*350"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 5,
|
||||||
|
"desc": "자유 변형 문항은 채점 불가"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"type": "layer.exists",
|
||||||
|
"ele": "//Layer/Name/@value",
|
||||||
|
"value": "Flower",
|
||||||
|
"point": 5,
|
||||||
|
"desc": "Flower 레이어가 있는지 여부 체크"
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"type": "layer.Effects",
|
||||||
|
"ele": "//Layer[Name[@value='{search}']]/Effects/Item",
|
||||||
|
"search": "Flower",
|
||||||
|
"value": {
|
||||||
|
"name": "생동감",
|
||||||
|
"option": {
|
||||||
|
"생동감": "40"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"point": 5,
|
||||||
|
"desc": {
|
||||||
|
"흑백": "강도",
|
||||||
|
"밝기/대비": ["밝기", "대비"],
|
||||||
|
"노출": "노출",
|
||||||
|
"색조/채도": ["색조", "채도", "명도"],
|
||||||
|
"감마": ["리프트", "감마", "게인"],
|
||||||
|
"세피아": ["U", "V"],
|
||||||
|
"생동감": "생동감"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "올가미 도구/이미지 문항은 채점 불가"
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/Effects/Item/Name/@value",
|
||||||
|
"value": "세피아",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "세피아 효과가 있는지 여부 체크"
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/Shapes/Shape/shape_type/@value",
|
||||||
|
"value": "ELLIPSE",
|
||||||
|
"point": 3,
|
||||||
|
"desc": "레이어 쉐이프 타입이 타원인지 체크"
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"type": "shape.size",
|
||||||
|
"ele": "//Layer//op_points",
|
||||||
|
"value": {
|
||||||
|
"width": 120,
|
||||||
|
"height": 120
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"type": "shape.color",
|
||||||
|
"ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value",
|
||||||
|
"value": "7097BB",
|
||||||
|
"point": 6,
|
||||||
|
"desc": ""
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"type": "layer.blend.opacity",
|
||||||
|
"ele": "//Layer",
|
||||||
|
"value": {
|
||||||
|
"BlendOp": "반사",
|
||||||
|
"Opacity": "80"
|
||||||
|
},
|
||||||
|
"point": 6
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "기본설정"
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"1": {
|
||||||
|
"type": "canvas.Size",
|
||||||
|
"ele": "//Document/Width/@value | //Document/Height/@value",
|
||||||
|
"value": ["650", "450"],
|
||||||
|
"point": 5,
|
||||||
|
"desc": "캔버스 사이즈 650*450"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 5,
|
||||||
|
"desc": "배경색 문항은 채점 불가"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/MaskOpType/@value",
|
||||||
|
"value": "Layering",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "레이어 마스크 설정 확인"
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "가로방향 흐릿하게 문항은 채점 불가"
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//shape_type/@value",
|
||||||
|
"value": "ROUNDED_RECTANGLE",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"type": "shape.size",
|
||||||
|
"ele": "//Layer//op_points",
|
||||||
|
"value": {
|
||||||
|
"width": 400,
|
||||||
|
"height": 60
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"type": "gradient.color",
|
||||||
|
"ele": "//Layer/Shapes/Shape",
|
||||||
|
"startColor": "gradient_start_color/@value",
|
||||||
|
"endColor": "gradient_end_color/@value",
|
||||||
|
"value": {
|
||||||
|
"startColor": "ffe000",
|
||||||
|
"endColor": "34A159"
|
||||||
|
},
|
||||||
|
"point": 6
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"type": "text.exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value",
|
||||||
|
"value": "흰 꽃 사이 노란 꽃",
|
||||||
|
"point": 5
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value",
|
||||||
|
"value": "맑은 고딕",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value",
|
||||||
|
"style": "Italic",
|
||||||
|
"value": "True",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value",
|
||||||
|
"value": "30",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"type": "text.color",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value",
|
||||||
|
"value": "b46Ef8",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value",
|
||||||
|
"value": "7",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"14": {
|
||||||
|
"type": "text.color",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value",
|
||||||
|
"value": "ffffff",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"15": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/MaskOpType/@value",
|
||||||
|
"value": "Clipping",
|
||||||
|
"point": 6,
|
||||||
|
"desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함"
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer/Shapes/Shape/shape_type/@value",
|
||||||
|
"value": "RECTANGLE",
|
||||||
|
"point": 3,
|
||||||
|
"desc": {
|
||||||
|
"사각형": "RECTANGLE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"17": {
|
||||||
|
"type": "clipping.size",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='{option}']//op_points",
|
||||||
|
"option": "RECTANGLE",
|
||||||
|
"value": {
|
||||||
|
"width": 150,
|
||||||
|
"height": 150
|
||||||
|
},
|
||||||
|
"point": 3,
|
||||||
|
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
|
||||||
|
},
|
||||||
|
"18": {
|
||||||
|
"type": "exists",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value",
|
||||||
|
"option": "RECTANGLE",
|
||||||
|
"value": "7",
|
||||||
|
"point": 3
|
||||||
|
},
|
||||||
|
"19": {
|
||||||
|
"type": "clipping.color",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value",
|
||||||
|
"option": "RECTANGLE",
|
||||||
|
"value": "e8e88e",
|
||||||
|
"point": 3,
|
||||||
|
"desc": "채우기:secondary_color, 외곽선:primary_color"
|
||||||
|
},
|
||||||
|
"20": {
|
||||||
|
"type": "shadow",
|
||||||
|
"ele": "//Layer//Shape[shape_type/@value='{option}']",
|
||||||
|
"option": "RECTANGLE",
|
||||||
|
"value": {
|
||||||
|
"shadow": true,
|
||||||
|
"width": "3",
|
||||||
|
"distance": "5",
|
||||||
|
"blur": "1",
|
||||||
|
"angle": "320"
|
||||||
|
},
|
||||||
|
"point": 5,
|
||||||
|
"desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점"
|
||||||
|
},
|
||||||
|
"21": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "기본설정"
|
||||||
|
},
|
||||||
|
"22": {
|
||||||
|
"type": "none",
|
||||||
|
"ele": "",
|
||||||
|
"point": 0,
|
||||||
|
"desc": "파일명 확인"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -666,7 +666,7 @@
|
|||||||
"point": 3
|
"point": 3
|
||||||
},
|
},
|
||||||
"15": {
|
"15": {
|
||||||
"type": "exists",
|
"type": "hasClippingMask.exists",
|
||||||
"ele": "//Layer/MaskOpType/@value",
|
"ele": "//Layer/MaskOpType/@value",
|
||||||
"value": "Clipping",
|
"value": "Clipping",
|
||||||
"point": 6,
|
"point": 6,
|
||||||
|
|||||||
87
git_branch_manage.md
Normal file
87
git_branch_manage.md
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
# GIT branch
|
||||||
|
|
||||||
|
## 📌 장기간 개발용 브랜치 전략
|
||||||
|
|
||||||
|
### 1. 메인(main) 브랜치
|
||||||
|
|
||||||
|
* 항상 **안정된 코드**
|
||||||
|
* 실제 서비스/라이브에서 사용하는 코드
|
||||||
|
* 여기서는 직접 실험하지 않음
|
||||||
|
|
||||||
|
### 2. 기능(feature) 브랜치
|
||||||
|
|
||||||
|
* 장기간 개발할 기능을 위한 브랜치
|
||||||
|
* 예시: `feature/new-parser`, `feature/ui-redesign`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📌 워크플로우
|
||||||
|
|
||||||
|
### 1. 기능 브랜치 생성
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull origin main # 최신화
|
||||||
|
git checkout -b feature/new-parser
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 기능 개발 (여러 번 커밋)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 코드 수정
|
||||||
|
git add .
|
||||||
|
git commit -m "초기 버전: XML 파서 구조 추가"
|
||||||
|
```
|
||||||
|
|
||||||
|
* 계속 개발하면서 커밋 누적
|
||||||
|
* 필요하면 `git push origin feature/new-parser` 해서 원격에도 올려두기 (백업용)
|
||||||
|
|
||||||
|
### 3. 장기간 개발 중 main 따라가기 (동기화)
|
||||||
|
|
||||||
|
* main 브랜치가 바뀌면, 기능 브랜치로 가져와야 충돌 줄임
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
git checkout feature/new-parser
|
||||||
|
git merge main # main의 최신 내용 병합
|
||||||
|
```
|
||||||
|
|
||||||
|
⚡ 이 과정을 정기적으로 하면 `feature` 브랜치가 main과 멀어지지 않음
|
||||||
|
|
||||||
|
### 4. 기능 완료 → main에 병합
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
git merge feature/new-parser
|
||||||
|
git push origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 필요 시 브랜치 삭제
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git branch -d feature/new-parser
|
||||||
|
git push origin --delete feature/new-parser
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📌 네이밍 규칙 (혼자 관리할 때도 편리)
|
||||||
|
|
||||||
|
* `feature/기능명` : 장기간 개발용 (예: `feature/new-ui`)
|
||||||
|
* `fix/버그명` : 버그 수정용 (예: `fix/xml-encoding`)
|
||||||
|
* `test/실험명` : 단기 테스트용 (예: `test/xpath`)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
✅ 정리
|
||||||
|
|
||||||
|
* **main = 안정 코드**
|
||||||
|
* **feature 브랜치 = 장기간 개발용** (필요할 때 main과 동기화)
|
||||||
|
* 완료되면 main에 병합 → 안정화
|
||||||
|
* 이렇게 하면 실험/개발/운영 코드가 깔끔하게 분리됨
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
👉 기능 브랜치 개발 중에, **main 브랜치 변경분을 가져올 때** `merge` 방식이 편할까요, 아니면 `rebase` 로 깔끔하게 이력을 유지하는 게 좋을까요?
|
||||||
@@ -132,10 +132,20 @@ function getGpdpScore(gpdpData, scoringJson, index) {
|
|||||||
|
|
||||||
let totalScore = 0;
|
let totalScore = 0;
|
||||||
|
|
||||||
|
// 15번 문항의 정답 여부를 추적할 상태 플래그를 선언합니다.
|
||||||
|
let hasClippingMask = false;
|
||||||
|
// 15번 문항에 종속적인 문항들의 키 목록을 정의합니다.
|
||||||
|
const clippingMaskKeys = ['16', '17', '18', '19', '20'];
|
||||||
|
|
||||||
// 채점기준표 문항별 분류
|
// 채점기준표 문항별 분류
|
||||||
for (const key in scoringData) {
|
for (const key in scoringData) {
|
||||||
console.log(`❔❔ 문제번호 : [${index}-${key}]`)
|
console.log(`❔❔ 문제번호 : [${index}-${key}]`)
|
||||||
|
|
||||||
|
if ( clippingMaskKeys.includes(key) && !hasClippingMask ) {
|
||||||
|
console.log("❌ 오답: 클리핑 마스크 미적용(15번 문항 오답)이므로 오답처리 ")
|
||||||
|
scoringResult[key] = 0;
|
||||||
|
continue; // 현재 문항 채점을 건너뛰고 다음 문항으로 넘어갑니다.
|
||||||
|
}
|
||||||
let ele = scoringData[key].ele;
|
let ele = scoringData[key].ele;
|
||||||
let ele2 = scoringData[key].ele2;
|
let ele2 = scoringData[key].ele2;
|
||||||
const rightAnswer = scoringData[key].value;
|
const rightAnswer = scoringData[key].value;
|
||||||
@@ -309,7 +319,6 @@ function getGpdpScore(gpdpData, scoringJson, index) {
|
|||||||
|
|
||||||
for (const v of existsValues) {
|
for (const v of existsValues) {
|
||||||
userAnswer = v.value;
|
userAnswer = v.value;
|
||||||
|
|
||||||
if (type.includes('layer') || type.includes('text')) {
|
if (type.includes('layer') || type.includes('text')) {
|
||||||
|
|
||||||
// 공백, 대소문자 무시
|
// 공백, 대소문자 무시
|
||||||
@@ -338,6 +347,9 @@ function getGpdpScore(gpdpData, scoringJson, index) {
|
|||||||
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
|
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( type.includes('hasClippingMask') && scoringResult[key] > 0 ) {
|
||||||
|
hasClippingMask = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,12 +17,11 @@ const codeTypes = [
|
|||||||
// 'DIC',
|
// 'DIC',
|
||||||
'DPI',
|
'DPI',
|
||||||
];
|
];
|
||||||
// const DICorDPI = 'DIC'
|
|
||||||
// const DICorDPI = 'DPI'
|
|
||||||
const examTypes = [
|
const examTypes = [
|
||||||
'A',
|
// 'A',
|
||||||
'B',
|
'B',
|
||||||
'C',
|
// 'C',
|
||||||
// 'D'
|
// 'D'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -295,7 +295,7 @@
|
|||||||
"media": "이미지1.jpg",
|
"media": "이미지1.jpg",
|
||||||
"value": {
|
"value": {
|
||||||
"ID": "125",
|
"ID": "125",
|
||||||
"VID102": "8"
|
"VID101": "8"
|
||||||
},
|
},
|
||||||
"point": 2,
|
"point": 2,
|
||||||
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
|
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
|
||||||
@@ -337,7 +337,7 @@
|
|||||||
"value": {
|
"value": {
|
||||||
"ID": "35",
|
"ID": "35",
|
||||||
"Range": "600:660",
|
"Range": "600:660",
|
||||||
"Type": "2"
|
"Type": "16"
|
||||||
},
|
},
|
||||||
"point": 2,
|
"point": 2,
|
||||||
"desc": "오버랩일 경우 Type속성값 16으로 변경"
|
"desc": "오버랩일 경우 Type속성값 16으로 변경"
|
||||||
|
|||||||
@@ -105,12 +105,12 @@
|
|||||||
"point": 0
|
"point": 0
|
||||||
},
|
},
|
||||||
"14": {
|
"14": {
|
||||||
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요')].name",
|
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].name",
|
||||||
"value": "파타야 수상시장 놀러오세요",
|
"value": "파타야 수상시장 놀러오세요.",
|
||||||
"point": 4
|
"point": 4
|
||||||
},
|
},
|
||||||
"15": {
|
"15": {
|
||||||
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요')].text.font.names[0]",
|
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.names[0]",
|
||||||
"type": "font",
|
"type": "font",
|
||||||
"value": "GungsuhChe",
|
"value": "GungsuhChe",
|
||||||
"point": 2,
|
"point": 2,
|
||||||
@@ -122,12 +122,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"16": {
|
"16": {
|
||||||
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요')].text.font.sizes[0]",
|
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.sizes[0]",
|
||||||
"value": 24,
|
"value": 24,
|
||||||
"point": 2
|
"point": 2
|
||||||
},
|
},
|
||||||
"17": {
|
"17": {
|
||||||
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요')].text.font.colors[0]",
|
"ele": "$.children[?(@.name=='파타야 수상시장 놀러오세요.')].text.font.colors[0]",
|
||||||
"type": "color",
|
"type": "color",
|
||||||
"value": "fc07a8",
|
"value": "fc07a8",
|
||||||
"point": 2
|
"point": 2
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user