Exemple #1
0
def md_convert(projectName, url):

    resp = requests.get(url)

    content = resp.text
    # conText = cc.convert(conText)
    # conText = translator.translate(conText, src='en',dest='zh-tw').text

    if not os.path.isdir("output/makecode/" + projectName):
        os.mkdir("output/makecode/" + projectName)

    pages = content.split("## Part")

    step = 0
    scriptIdx = 0
    for p in pages:
        templete = junyiJSONgenerate.JSON_open('src\Templete\JSONempty')
        content = p.replace("\n", "\\n")
        content = content.replace('"', '\\"')
        content = "#" + content
        iframeIdx = 0
        iframeBlock = ''
        while 1:
            if (content.find("```") == -1):
                break
            pre = content.find("```", 0)
            content = content.replace("```", "", 1)
            bac = content.find("```", 0)
            content = content.replace("```", "", 1)
            # script = content[pre:bac]
            try:
                content = content[:
                                  pre] + "[[☃ iframe %s]]\\n\\n[[☃ iframe %s]]" % (
                                      iframeIdx * 2 + 1,
                                      iframeIdx * 2 + 2) + content[bac:]
                scriptIdx += 1
                iframeUrl = "https://jerry914.github.io/arcade-test/" + projectName + "/" + str(
                    scriptIdx) + ".html"
                ifTemplete = junyiJSONgenerate.JSON_open(
                    'src\Templete\JSONiframe')
                iframeBlock += ifTemplete.replace(
                    "https://ys-fang.github.io/Linkit7697Learning-Resources/bubble/ROUTE/BUBBLEIDX.html",
                    iframeUrl)
                iframeBlock = iframeBlock.replace("IFRAMEIDX",
                                                  str(iframeIdx * 2 + 2))
                iframeIdx += 1
            except Exception as e:
                print(e)
        content = content.replace("`", "")
        while 1:
            if (content.find("|") == -1):
                break
            pre = content.find("|", 0)
            content = content.replace("|", "", 1)
            if (content[pre] == '|'):
                content = content.replace("|", "", 1)
            bac = content.find("|", 0)
            content = content.replace("|", "", 1)
            if (content[bac] == '|'):
                content = content.replace("|", "", 1)
            tag = content[pre:bac].split(":")[0]
            try:
                keyword = content[pre:bac].split(":")[1]
                content = content[:pre] + addColor(tag,
                                                   keyword) + content[bac:]
            except Exception as e:
                print(e)
        content = content.replace('"', '\\"')
        output = templete.replace("CONTENT", content)
        if (output.find("iframe") == -1):
            output = output.replace("WIDGETS", "")
        else:
            output = output.replace("WIDGETS", iframeBlock[:-1])
        junyiJSONgenerate.JSON_write(
            output, "output/makecode/" + projectName + "/" + str(step))
        step += 1
        output = output.replace("\n", "")
        with open('output/junyi.csv', 'a+', newline='',
                  encoding='utf8') as csvfile:
            writer = csv.writer(csvfile)
            writer.writerow(
                ['0', 'False', '電腦科學', '', projectName, '1', output, '', ''])
        csvfile.close()
def addAuth(projectName, step):
    content = junyiJSONgenerate.JSON_open("output/raspberrypilearning/" +
                                          projectName + "/" + projectName +
                                          "-" + step)
    if (step == str(1)):
        content = content.replace(
            "[[☃ article-block 1]]",
            "[[☃ article-block 1]]\\n---\\n#### **#致謝與授權**\\n####本課程係由均一教育平台(Junyi Academy)進行中文化翻譯與衍生創作,採用[創用 CC 姓名標示 4.0 國際](https://creativecommons.org/licenses/by/4.0/deed.zh_TW \\\"\\\"\\\"\\\" \\\"\\\"_blank\\\"\\\") 授權條款釋出。內容源自CC授權課程:["
            + exportCSV.getdata(projectName).name +
            " (CodeClub)](https://projects.raspberrypi.org/en/projects/" +
            projectName +
            " \\\"\\\"\\\"\\\" \\\"\\\"_blank\\\"\\\") 。\\n\\n####CodeClub 是由 Raspberry Pi Foundation 主持的一個計畫,也是一個位於英國的非營利組織。CodeClub是正在成長的全球性運動的一部分,目標是將運算思維與數位創作能力帶到世界上每一個人的手中。\\n[[☃ image 1]]",
            1)
        content = content.replace(
            '"widgets": {', '''"widgets": {"image 1": {
                "type": "image",
                "graded": true,
                "options": {
                    "range": [
                        [
                            0,
                            10
                        ],
                        [
                            0,
                            10
                        ]
                    ],
                    "box": [
                        75,
                        26
                    ],
                    "useBoxSize": true,
                    "backgroundImage": {
                        "url": "https://ys-fang.github.io/cc_logos/by-sa.png",
                        "width": 75,
                        "height": 26
                    },
                    "labels": [],
                    "maxImageSize": 435,
                    "aspectRatio": 0.34987593052109184
                },
                "version": {
                    "major": 0,
                    "minor": 0
                }
            },''', 1)
    else:
        content = content.replace(
            "[[☃ article-block 1]]",
            "[[☃ article-block 1]]\\n\\n[[☃ explanation 1]]", 1)
        content = content.replace(
            '"widgets": {', '''"widgets": {"explanation 1": {
                "type": "explanation",
                "graded": false,
                "options": {
                    "showPrompt": "關於課程",
                    "hidePrompt": "隱藏說明",
                    "explanation": "---\\n#### **#致謝與授權**\\n####本課程係由均一教育平台(Junyi Academy)進行中文化翻譯與衍生創作,採用[創用 CC 姓名標示 4.0 國際](https://creativecommons.org/licenses/by/4.0/deed.zh_TW \\\"\\\"\\\"\\\" \\\"\\\"_blank\\\"\\\") 授權條款釋出。內容源自CC授權課程:[%s (CodeClub)](https://projects.raspberrypi.org/en/projects/%s \\\"\\\"\\\"\\\" \\\"\\\"_blank\\\"\\\") 。\\n\\n####CodeClub 是由 Raspberry Pi Foundation 主持的一個計畫,也是一個位於英國的非營利組織。CodeClub是正在成長的全球性運動的一部分,目標是將運算思維與數位創作能力帶到世界上每一個人的手中。\\n[[☃ image 1]]",
                    "widgets": {
                        "image 1": {
                            "id": "image 1",
                            "type": "image",
                            "graded": true,
                            "options": {
                                "range": [
                                    [
                                        0,
                                        10
                                    ],
                                    [
                                        0,
                                        10
                                    ]
                                ],
                                "box": [
                                    75,
                                    26
                                ],
                                "useBoxSize": true,
                                "backgroundImage": {
                                    "url": "https://ys-fang.github.io/cc_logos/by-sa.png",
                                    "width": 75,
                                    "height": 26
                                },
                                "labels": [],
                                "maxImageSize": 435,
                                "aspectRatio": 0.34987593052109184
                            },
                            "version": {
                                "major": 0,
                                "minor": 0
                            }
                        }
                    }
                },
                "version": {
                    "major": 0,
                    "minor": 0
                }
            },''' % (exportCSV.getdata(projectName).name, projectName), 1)
    junyiJSONgenerate.JSON_write(
        content, "output/raspberrypilearning/" + projectName + "/" +
        projectName + "-" + step)
    return content
Exemple #3
0
def md_convert(projectName,step):

    url = 'https://raw.githubusercontent.com/raspberrypilearning/'+projectName+'/master/en/step_'+step+'.md'
    resp = requests.get(url)
    # mark = marko.convert(resp.text)
    # mark = resp.text
    # soup = BeautifulSoup(mark, 'html.parser')

    conText = resp.text
    # conText = cc.convert(conText)
    # conText = translator.translate(conText, src='en',dest='zh-tw').text
    iframeBlock = ""
    
    try:
        content = conText[:conText.index('<div')]+conText[conText.index('</div'):]
        content = content.replace("</div>","[[☃ iframe 1]]",1)
        content = content.replace("</div>","")
        iframeUrl = get_tag(url,'iframe')['src']
        # micro bit spacail 
        # iframeID = get_tag(url,'iframe')['src'].split("id=")[1]
        # iframeUrl = "https://ys-fang.github.io/msmc/player.html?id="+iframeID

        ifTemplete = junyiJSONgenerate.JSON_open('src\Templete\JSONiframe')
        iframeBlock = ifTemplete.replace("https://ys-fang.github.io/Linkit7697Learning-Resources/bubble/ROUTE/BUBBLEIDX.html",iframeUrl)
        iframeBlock = iframeBlock.replace("IFRAMEIDX",str(1))
    except Exception as e:
        content = conText
        print(e)

    imgIdx = 0
    while(content.find("![screenshot]",0)>0):
        imgIdx+=1
        content = content.replace("![screenshot]","[[☃ image "+str(imgIdx)+"]]",1)
    content = content.replace("(images/","(https://raw.githubusercontent.com/raspberrypilearning/"+projectName+"/master/en/images/")
    imgLink = re.findall(r'[(](https://raw.*?)[)]', content)
    content = re.sub(r'[(](https://raw.*?)[)]', "", content)
    while(imgIdx>0):
        templete = junyiJSONgenerate.JSON_open('src\Templete\JSONimage')
        string = templete.replace("IMGBLOCKINDEX",str(imgIdx))
        string = string.replace("https://ys-fang.github.io/Linkit7697Learning-Resources/img/ROUTE/IMGIDX.gif",imgLink[imgIdx-1])
        string = string.replace("IMAGEWIDTH",str(imgDownload.search_img_width(imgLink[imgIdx-1]).width))
        string = string.replace("IMAGEHEIGHT",str(imgDownload.search_img_width(imgLink[imgIdx-1]).height))
        imgIdx-=1
        iframeBlock += string
    iframeBlock = iframeBlock[:-1]
    
    while 1:
        if(content.find('<a')>=0):
            try:
                a_link = get_tag(url,'a')
                content = content[:content.index('<a')]+"["+a_link.text+"](\""+a_link["href"]+"\",\" \" \"_blank\")"+content[content.index('</a>')+4:]
            except Exception as e:
                break
        else:
            break
    content = content.replace("){:target=\"_blank\"}"," \"_blank\" \"title\")")
    content = content.replace("--- no-print ---","")
    content = content.replace("--- /no-print ---","")
    # content = translator.translate(content, src='en',dest='zh-tw').text
    # content = content.replace("# "," **")
    articleBlockIdx = 1
    articleBlockContent = ""
    while 1:
        tempCont = content
        if(tempCont.find('--- collapse ---')>0): 
            content = tempCont[:tempCont.index('--- collapse ---')]+"[[☃ article-block "+str(articleBlockIdx)+"]]"+tempCont[tempCont.index('--- /collapse ---')+17:]
            arTemplete = junyiJSONgenerate.JSON_open('src\Templete\JSONartblo')
            artTemp = (tempCont[tempCont.index('--- collapse ---')+17:tempCont.index('--- /collapse ---')]).replace('"','\\"')
            title = artTemp[artTemp.find("---")+3:artTemp.find("---",1)]
            artTemp = artTemp.replace("\n","\\n")
            title = title.replace("\n","")
            artTemp = artTemp.replace(title,"")
            articleBlock = arTemplete.replace("CONTENT",artTemp)
            articleBlock = articleBlock.replace("TITLE",title.replace("title:","📍"))
            articleBlock = articleBlock.replace("ARTICLEIDX",str(articleBlockIdx))
            articleBlockContent+=articleBlock
            articleBlockIdx+=1
        elif(tempCont.find('--- hints ---')>0):
            content = tempCont[:tempCont.index('--- hints ---')]+"[[☃ article-block "+str(articleBlockIdx)+"]]"+tempCont[tempCont.index('--- /hints ---')+17:]
            arTemplete = junyiJSONgenerate.JSON_open('src\Templete\JSONartblo')
            artTemp = (tempCont[tempCont.index('--- hints ---')+17:tempCont.index('--- /hints ---')]).replace('"','\\"')
            # title = artTemp[artTemp.find("---")+3:artTemp.find("---",1)]
            artTemp = artTemp.replace("\n","\\n")
            artTemp = artTemp.replace("--- hint ---","")
            artTemp = artTemp.replace("--- /hint ---","")
            # title = title.replace("\n","")
            # artTemp = artTemp.replace(title,"")
            articleBlock = arTemplete.replace("CONTENT",artTemp)
            articleBlock = articleBlock.replace("TITLE",r"💡 我需要一點提示")
            articleBlock = articleBlock.replace("#fee","#ffe7c9")
            articleBlock = articleBlock.replace("ARTICLEIDX",str(articleBlockIdx))
            articleBlockContent+=articleBlock
            articleBlockIdx+=1
        elif(tempCont.find('--- task ---')>0):
            content = tempCont[:tempCont.index('--- task ---')]+"[[☃ article-block "+str(articleBlockIdx)+"]]"+tempCont[tempCont.index('--- /task ---')+13:]
            arTemplete = junyiJSONgenerate.JSON_open('src\Templete\JSONartblo')
            artTemp = (tempCont[tempCont.index('--- task ---')+13:tempCont.index('--- /task ---')]).replace('"','\\"')
            artTemp = artTemp.replace("\n","\\n")
            artTemp = artTemp.replace("--- hint ---","")
            artTemp = artTemp.replace("--- /hint ---","")
            articleBlock = arTemplete.replace("CONTENT",artTemp)
            articleBlock = articleBlock.replace("TITLE","")
            articleBlock = articleBlock.replace("#fee","#eafaec")
            articleBlock = articleBlock.replace("ARTICLEIDX",str(articleBlockIdx))
            articleBlock = articleBlock.replace("expandable\": true","expandable\": false")
            articleBlockContent+=articleBlock
            articleBlockIdx+=1
        else:
            break
    

    # print(get_tag_text(url,'h2'))
    # print(get_tag(url,'a'))
    # print(get_tag_text(url,'li'))

    templete = junyiJSONgenerate.JSON_open('src\Templete\JSONempty')
    content = content.replace("\n","\\n")
    content = content.replace('"','\\"')
    output = templete.replace("CONTENT",content)
    output = output.replace("WIDGETS",iframeBlock+articleBlockContent[:-1])
    print(projectName+str(stepIdx)+"finish!"+stepIdx*"🧨🧨")
    output = output.replace("}\"article-block","},\"article-block")
    output = output.replace("	","")
    RC = output.replace("/master",'')
    RC = RC.replace("https://raw.githubusercontent.com/raspberrypilearning","https://raw.githubusercontent.com/ys-fang/Code-Club-Learning-Resources/master")
    RC = RC.replace("/tree",'')
    RC = RC.replace("/blob",'')
    RC = RC.replace("/en/","/zh-CN/")
    output = RC.replace("https://github.com/raspberrypilearning","https://github.com/ys-fang/Code-Club-Learning-Resources/blob/master")
    if not os.path.isdir("output/raspberrypilearning/"+projectName):
        os.mkdir("output/raspberrypilearning/"+projectName)
    junyiJSONgenerate.JSON_write(output,"output/raspberrypilearning/"+projectName+"/"+projectName+"-"+step)
def md_convert(projectName, stepIdx):
    step = str(stepIdx)
    url = 'https://raw.githubusercontent.com/jerry914/Code-Club-Learning-Resources/master/' + projectName + '/zh-TW/step_' + step + '.md'
    resp = requests.get(url)

    conText = resp.text

    iframeBlock = ""
    try:
        content = conText[:conText.index('<div')] + conText[conText.
                                                            index('</div'):]
        content = content.replace("</div>", "[[☃ iframe 1]]", 1)
        content = content.replace("</div>", "")
        iframeUrl = get_tag(url, 'iframe')['src']
        if (iframeUrl.find("https") == -1):
            iframeUrl = "https:" + iframeUrl

        # micro bit spacail
        # iframeID = get_tag(url,'iframe')['src'].split("id=")[1]
        # iframeUrl = "https://ys-fang.github.io/msmc/player.html?id="+iframeID

        ifTemplete = junyiJSONgenerate.JSON_open(r'src\Templete\JSONiframe')
        iframeBlock = ifTemplete.replace(
            "https://ys-fang.github.io/Linkit7697Learning-Resources/bubble/ROUTE/BUBBLEIDX.html",
            iframeUrl)
        iframeBlock = iframeBlock.replace("IFRAMEIDX", str(1))
        iframeBlock = iframeBlock.replace("320", str(480))
    except Exception as e:
        content = conText
        print(e)

    while 1:
        if (content.find('<a') >= 0):
            try:
                a_link = get_tag(url, 'a')
                content = content[:content.index(
                    '<a')] + "[" + a_link.text + "](\"" + a_link[
                        "href"] + "\",\" \" \"_blank\")" + content[
                            content.index('</a>') + 4:]
            except Exception as e:
                break
        else:
            break

    content = keyDelet(content)
    content = content.replace("){:target=\"_blank\"}",
                              " \"_blank\" \"title\")")
    content = content.replace(r"## \--- collapse \---", "--- collapse ---")
    content = content.replace(r"\--- /collapse \---", "--- /collapse ---")

    content = content.replace("<kbd>", "`")
    content = content.replace("</kbd>", "`")
    content = content.replace(
        "(resources",
        "(https://github.com/ys-fang/Code-Club-Learning-Resources/tree/master/"
        + projectName + "/zh-TW/resources/")
    if (step == '1'):
        content = content.replace(" \"_blank\" \"title\"", "")
        content = content.replace(")", " \"_blank\" \"title\")")

    content = content.replace("	+", "tab&mark")
    content = content.replace("+ ", "\\n---\\n$\\\\\\\$\\n\\n+ ✅ ")
    content = content.replace("tab&mark", "	+")

    # title modify
    collTitle = []
    try:
        h1Title = get_tag_text(url, 'h2')
        for h1 in h1Title:
            if (h1.text.find("collapse") == -1):
                content = content.replace("## " + h1.text,
                                          "# **" + h1.text + "**")
                collTitle.append(h1.text)
    except Exception as e:
        print(h1Title)
    try:
        h2Title = get_tag_text(url, 'h3')
        for h2 in h2Title:
            content = content.replace("### " + h2.text,
                                      "## **" + h2.text + "**")
    except Exception as e:
        print(e)
    try:
        h3Title = get_tag_text(url, 'h4')
        for h3 in h3Title:
            content = content.replace("### " + h3.text,
                                      "### **" + h3.text + "**")
    except Exception as e:
        print(e)

    articleBlockIdx = 1
    articleBlockContent = ""

    titleIdx = 1

    while 1:
        tempCont = content
        if (tempCont.find('--- collapse ---') > 0):
            content = tempCont[:tempCont.index(
                '--- collapse ---')] + "[[☃ article-block " + str(
                    articleBlockIdx
                ) + "]]" + tempCont[tempCont.index('--- /collapse ---') + 17:]
            arTemplete = junyiJSONgenerate.JSON_open(
                r'src\Templete\JSONartblo')
            artTemp = (
                tempCont[tempCont.index('--- collapse ---') +
                         17:tempCont.index('--- /collapse ---')]).replace(
                             '"', '\\"')
            # title = artTemp[artTemp.find("---")+3:artTemp.find("---",1)]
            title = collTitle[titleIdx]
            titleIdx = titleIdx + 1

            artTemp = artTemp.replace("\n", "\\n")
            title = title.replace("\n", "")
            artTemp = artTemp.replace(title, "")
            articleBlock = arTemplete.replace("CONTENT", artTemp)
            articleBlock = articleBlock.replace("TITLE",
                                                title.replace("title:", "📍"))
            articleBlock = articleBlock.replace("ARTICLEIDX",
                                                str(articleBlockIdx))
            articleBlockContent += articleBlock
            articleBlockIdx += 1
        elif (tempCont.find('--- print-only ---') > 0):
            content = tempCont[:tempCont.
                               index('--- print-only ---')] + tempCont[
                                   tempCont.index('--- /print-only ---') + 19:]
        elif (tempCont.find('--- task ---') > 0):
            content = tempCont[:tempCont.index(
                '--- task ---')] + "[[☃ article-block " + str(
                    articleBlockIdx
                ) + "]]" + tempCont[tempCont.index('--- /task ---') + 13:]
            arTemplete = junyiJSONgenerate.JSON_open(
                r'src\Templete\JSONartblo')
            articleBlock = arTemplete.replace("expandable\": true",
                                              "expandable\": false")
            artTemp = (tempCont[tempCont.index('--- task ---') +
                                13:tempCont.index('--- /task ---')]).replace(
                                    '"', '\\"')
            artTemp = artTemp.replace("\n", "\\n")
            artTemp = artTemp.replace("--- task ---", "")
            artTemp = artTemp.replace("--- /task ---", "")
            wigTemp, artTemp = imgAdd(projectName, artTemp)
            wigTemp, artTemp = scratchAdd(wigTemp, artTemp, projectName)
            articleBlock = articleBlock.replace("CONTENT", artTemp)
            articleBlock = articleBlock.replace("widgets\": {",
                                                "widgets\": {" + wigTemp)
            articleBlock = articleBlock.replace("TITLE", "")
            articleBlock = articleBlock.replace("#fee", "#eafaec")
            articleBlock = articleBlock.replace("ARTICLEIDX",
                                                str(articleBlockIdx))

            articleBlockContent += articleBlock
            articleBlockIdx += 1
        elif (tempCont.find('--- hints ---') > 0):
            content = tempCont[:tempCont.index(
                '--- hints ---')] + "[[☃ article-block " + str(
                    articleBlockIdx
                ) + "]]" + tempCont[tempCont.index('--- /hints ---') + 14:]
            arTemplete = junyiJSONgenerate.JSON_open(
                r'src\Templete\JSONartblo')
            artTemp = (tempCont[tempCont.index('--- hints ---') +
                                14:tempCont.index('--- /hints ---')]).replace(
                                    '"', '\\"')
            # title = artTemp[artTemp.find("---")+3:artTemp.find("---",1)]
            artTemp = artTemp.replace("\n", "\\n")
            artTemp = artTemp.replace("--- hint ---", "")
            artTemp = artTemp.replace("--- /hint ---", "")
            wigTemp, artTemp = imgAdd(projectName, artTemp)
            articleBlock = arTemplete.replace("CONTENT", artTemp)
            articleBlock = articleBlock.replace("widgets\": {",
                                                "widgets\": {" + wigTemp)
            # title = title.replace("\n","")
            # artTemp = artTemp.replace(title,"")
            articleBlock = articleBlock.replace("TITLE", r"💡 我需要一點提示")
            articleBlock = articleBlock.replace("#fee", "#ffe7c9")
            articleBlock = articleBlock.replace("ARTICLEIDX",
                                                str(articleBlockIdx))
            articleBlockContent += articleBlock
            articleBlockIdx += 1
        else:
            break

    tempBlock, content = imgAdd(projectName, content)
    tempBlock, content = scratchAdd(tempBlock, content, projectName)
    iframeBlock += tempBlock

    templete = junyiJSONgenerate.JSON_open(r'src\Templete\JSONempty')
    content = content.replace("\n", "\\n")
    content = content.replace('"', '\\"')
    content = content.replace("\\)", ")")

    output = templete.replace("CONTENT", content)
    output = output.replace("WIDGETS", iframeBlock + articleBlockContent[:-1])
    print(projectName + step + "finish! step- " + step)
    output = output.replace("}\"article-block", "},\"article-block")
    output = output.replace("	", "")
    output = output.replace("},}", "}}")
    if not os.path.isdir("output/raspberrypilearning/" + projectName):
        os.mkdir("output/raspberrypilearning/" + projectName)

    junyiJSONgenerate.JSON_write(
        output, "output/raspberrypilearning/" + projectName + "/" +
        projectName + "-" + step)
    output = addAuth(projectName, step)
    output = addBanner(output)
    junyiJSONgenerate.JSON_write(
        output, "output/raspberrypilearning/" + projectName + "/" +
        projectName + "-" + step)
Exemple #5
0
projectName = 'block-out'
url = "https://arcade.makecode.com/lessons/" + projectName
resp = requests.get(url)
soup = BeautifulSoup(resp.text, 'html.parser')
content = soup.text
pointer = 0

codeBlock = soup.find_all("code", class_="lang-blocks")

sctIdx = 0
for b in codeBlock:
    sctIdx += 1
    sct = str(b.text)
    with open("D:/workspace/arcade-test/" + projectName + "/" + str(sctIdx) +
              ".html",
              'w',
              encoding='utf8') as f:
        f.write(
            junyiJSONgenerate.JSON_open("src/Templete/script").replace(
                "SCRIPT", sct))
        f.close()

junyiJSONgenerate.JSON_write(content, "output/makecode/" + projectName)

# part = content.split("Part")
# partIdx = 0
# for p in part:
#     junyiJSONgenerate.JSON_write(p,"output/makecode/"+projectName+p[:3].replace("\n",""))
#     # junyiJSONgenerate.JSON_write(p,"output/makecode/"+str(partIdx))
#     partIdx +=1