MediaWiki API result

This is the HTML representation of the JSON format. HTML is good for debugging, but is unsuitable for application use.

Specify the format parameter to change the output format. To see the non-HTML representation of the JSON format, set format=json.

See the complete documentation, or the API help for more information.

{
    "batchcomplete": "",
    "continue": {
        "gapcontinue": "RetroSecton",
        "continue": "gapcontinue||"
    },
    "warnings": {
        "main": {
            "*": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/postorius/lists/mediawiki-api-announce.lists.wikimedia.org/> for notice of API deprecations and breaking changes."
        },
        "revisions": {
            "*": "Because \"rvslots\" was not specified, a legacy format has been used for the output. This format is deprecated, and in the future the new format will always be used."
        }
    },
    "query": {
        "pages": {
            "105": {
                "pageid": 105,
                "ns": 0,
                "title": "Redmine gitolite doxygen",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": ";Redmine\uacfc gitolite\ub97c \uc774\uc6a9\ud558\ub294\uacbd\uc6b0 doxygen \uc744 \uc790\ub3d9\ud654\ud558\ub294 \ubc29\ubc95\n\n\n==\uad00\ub828\uc790\ub8cc==\n\n* redmine :: http://www.redmine.org\n* gitolite :: http://github.com/sitaramc/gitolite\n* doxygen :: http://www.doxygen.org\n\n\n\n==\uac1c\uc694==\n\nredmine\uacfc gitolite\ub97c \uc0ac\uc6a9\ud574\uc11c git\ub97c \uc5f0\ub3d9\ud558\ub294 \ubc29\ubc95\uc740 [[gentoo_redmine_nginix_git|\uc5ec\uae30]] \uc5d0 \uc774\ubbf8 \uc124\uba85\ub418\uc5b4 \uc788\ub2e4. \uc774 \ubb38\uc11c\uc5d0\uc11c\ub294 \uc774\ub807\uac8c \uc5f0\ub3d9\ub41c gitolite \uc758 \uc800\uc7a5\uc18c\uc5d0 file\uc774 commit \ub420\ub54c\ub9c8\ub2e4 gitolite \uc5d0\uc11c \uc81c\uacf5\ud558\ub294 hook \uae30\ub2a5\uc744 \uc774\uc6a9\ud574\uc11c \uc790\ub3d9\uc73c\ub85c doxygen \uc73c\ub85c \ubb38\uc11c\ub97c \ub9cc\ub4e4\uace0 \ud655\uc778\ud558\ub294 \uacfc\uc815\uae4c\uc9c0\ub97c \uc124\uba85\ud55c\ub2e4.\n\n\n\n==\uc791\ub3d9\uc21c\uc11c==\n\n\uae30\ubcf8\uc801\uc73c\ub85c \uc791\ub3d9\ub418\ub294 \uc21c\uc11c\ub97c \uc124\uba85\ud558\uace0 \uac01 \uc21c\uc11c\ub300\ub85c \ud544\uc694\ud55c \uacfc\uc815\ub4e4\uc744 \uc21c\uc11c\ub300\ub85c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud55c\ub2e4.\n\n# redmine\uc5d0\uc11c \uad00\ub9ac\ub418\ub294 repository \uc5d0 \ud30c\uc77c\uc774 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0\ub97c \uac00\uc815\ud55c\ub2e4\n# \ud2b9\uc815\ud55c \uacc4\uc815\uc744 \uc2dc\uc2a4\ud15c\uc5d0 \ub9cc\ub4e4\uace0 \ud574\ub2f9\ub418\ub294 \uacc4\uc815\uc5d0 virtual hosting\uc744 \uac74\ub2e4\n# \ud574\ub2f9\ub418\ub294 \uacc4\uc815\uc5d0\uc11c '''git checkout ''', '''doxygen\ubb38\uc11c\ub9cc\ub4e4\uae30''', '''\ub4b7\ucc98\ub9ac''' \ub97c \ud558\ub294 shell script\ub97c \ub9cc\ub4e0\ub2e4\n# redmine\uc758 \uacc4\uc815\uc5d0\uc11c post-action \uc744 \uc6d0\ud558\ub294 repository \uc5d0 event \uc5d0\uc11c \uc791\ub3d9\ud558\ub294 \uc2a4\ud06c\ub9bd\ud2b8 \uc791\uc5c5\uc744 \ud55c\ub2e4\n# \uc791\uc5c5\uc774 \ub2e4 \ub418\uace0\ub098\uba74 \uc791\ub3d9\uc744 \ud14c\uc2a4\ud2b8\ud574\uc11c doxygen \uc73c\ub85c \uc0dd\uc131\ub41c \ubb38\uc11c\uac00 web\uc73c\ub85c \uc81c\ub300\ub85c \ubcf4\uc774\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4\n\n\n\n==\uc0ac\uc804\uc8fc\uc758\uc0ac\ud56d==\n\n# \uc774 \ubb38\uc11c\ub294 \uc11c\ubc84\uac00 gentoo \ub77c\ub294\uac83\uc744 \uc804\uc81c\ub85c \ud55c\ub2e4\n# \uc774 \ubb38\uc11c\uc5d0\uc11c \uc5b8\uae09\ub418\ub294 web daemon \uc740 nginx \uc774\ub2e4\n# system \uc5d0 sudo \uac00 \uc124\uce58\ub418\uc5b4 \uc788\uc5b4\uc57c \ud55c\ub2e4\n# doxygen\uc5d0 \ub300\ud55c \ubd80\ubd84\uc740 [[Doxygen_with_PHP|\uc5ec\uae30]] \ub97c \ucc38\uace0\ud574\uc11c \uc11c\ubc84\uc0c1\uc5d0\uc11c \ubbf8\ub9ac \uc791\ub3d9\ub418\uac8c \ub9cc\ub4e4\uc5b4\ub193\uc544\uc57c \ud55c\ub2e4\n# redmine \ub4f1\uc740 portage \ub85c \uc124\uce58\ub97c \ud588\ub2e4\ub294\uac83\uc744 \uac00\uc815\ud55c\ub2e4\n# doxygen \uc791\uc5c5\uc744 \uc9c4\ud589\ud560 \uacc4\uc815\uc740 \ubbf8\ub9ac \ucd94\uac00\ud574\ub193\ub3c4\ub85d \ud55c\ub2e4\n# gitolite \ub294 gitolite v2 \ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc73c\ub85c \uae30\uc900\ud55c\ub2e4.\n\n\n\n==\uc791\uc5c5\ub0b4\uc6a9==\n\n===Level1::repository\ud655\uc778===\n\n\uc2dc\uc2a4\ud15c\uc0c1 \uc544\ub798\uc758 \ub514\ub809\ud1a0\ub9ac\ub85c \uac00\uc11c \uc791\uc5c5\ub300\uc0c1\uc774 \ub420 repository \ub97c \ubbf8\ub9ac \ud655\uc778\ud558\ub3c4\ub85d \ud55c\ub2e4\n\n<syntaxhighlight lang=\"bash\">\n$ ls -al /var/lib/redmine/repositories/\nor \n$ ls -al ~/repositories/\n</syntaxhighlight>\n\n\uc6d0\ud558\ub294 repository \uac00 \uc874\uc7ac\ud55c\ub2e4\uba74 \ub2e4\uc74c \uc791\uc5c5\uc744 \uc9c4\ud589\ud574\ub3c4 \ub41c\ub2e4.\n\n\n\n===Level2::virtual hosting===\n\n\uc791\uc5c5\uc744 \uc9c4\ud589\ud558\uae30 \uc704\ud574 \ubbf8\ub9ac \uc900\ube44\ud55c \uacc4\uc815\uc5d0 nginx virtual hosting \uc744 \uc124\uc815\ud558\ub3c4\ub85d \ud55c\ub2e4.\n\n<syntaxhighlight lang=\"bash\">\nserver {\n                server_name web\uc5d0\uc11c\uc811\uadfc\ud560\ub3c4\uba54\uc778\uc774\ub984;\n                root /home/doxygen\uc744\uc0ac\uc6a9\ud560\uacc4\uc815\uc774\ub984/public_html/;\n\n                if ($host ~ \"^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$\") {\n                        return 444;\n                }\n\n                location ~* \\.(jpg|jpeg|gif|png|js)$ {\n                        access_log      off;\n                        error_log      off;\n                        expires         30d;\n                }\n}\n</syntaxhighlight>\n\n\n\ud574\ub2f9\ub418\ub294 \uacc4\uc815\uc5d0\uc11c public_html \uc774\ub77c\ub294 \ub514\ub809\ud1a0\ub9ac\ub97c \ub9cc\ub4e4\uba74 virtual hosting \uc744 \ud560 \uc900\ube44\ub294 \ub05d\ub098\uac8c \ub41c\ub2e4.\n\n\ub54c\uc5d0 \ub530\ub77c\uc11c index.html \uc744 \ub123\uc5b4\uc11c \uc81c\ub300\ub85c \ub3d9\uc791\ud558\ub294\uc9c0 \ud655\uc778\ud558\uba74 \uc88b\ub2e4.\n\n\n\n===Level3::doxygen \uc744 \uc704\ud55c \uc900\ube44\uc791\uc5c5===\n\n\uc900\ube44\ub41c \uacc4\uc815\uc5d0\uc11c \ub2e4\uc74c\uacfc\uac19\uc740 doxygen \uc124\uc815\ud30c\uc77c\uc740 \ubbf8\ub9ac \uc900\ube44\ud574\ub193\uace0 script\ub97c \ub2e4\uc74c\uacfc\uac19\uc740 \ub0b4\uc6a9\uc744 \uc791\uc131\ud55c\ub2e4. \ubb3c\ub860 \ub0b4\uc6a9\uc740 \uc0ac\uc6a9\uc790\uc758 \uc6a9\ub3c4\uc5d0 \ub9de\uac8c \ud3b8\uc9d1\ud558\uba74 \ub41c\ub2e4.\n\n<syntaxhighlight lang=\"bash\">\n#!/bin/sh\ncd ~/\nrm -rf ~/repository\uc774\ub984\nrm -rf ~/public_html/*\ngit clone ssh://repository\uc8fc\uc18c/repository\uc774\ub984.git\ncd repository\uc774\ub984\ngit checkout branch\uc774\ub984\ncd application\ncp ~/doxygen\uc124\uc815\ud30c\uc77c ./\ndoxygen doxygen\uc124\uc815\ud30c\uc77c\nmv html/* ~/public_html/\nrm -rf html\nrm -rf doxygen\uc124\uc815\ud30c\uc77c\ncd ~/\n</syntaxhighlight>\n\n\nscript \ub97c \uc791\ub3d9\uc2dc\ucf1c\uc11c doxygen \uc744 \uc774\uc6a9\ud574\uc11c \ubb38\uc11c\ub97c \ub9cc\ub4e4\uc5b4 \uadf8\uac8c \uc81c\ub300\ub85c public_html \ub85c \ub4e4\uc5b4\uac00\ub294\uc9c0\ub97c \ud655\uc778\ud558\uba74 \ub41c\ub2e4.\n\nscript \ub294 '''~/ ''' \uc5d0 \uc704\uce58\uc2dc\ud0a4\ub3c4\ub85d \ud55c\ub2e4.\n\n\n\n===Level4::Redmine \uacc4\uc815\uc5d0\uc11c repository \uc5d0 post-action \uc124\uc815\uc744 \uc704\ud55c \uc0ac\uc804\uc900\ube44===\n\n'''visudo''' \ub77c\ub294 \uba85\ub839\uc744 \uce58\uba74 sudo \uc5d0 \ub300\ud55c \uad8c\ud55c\uc744 \uc9c0\uc815\ud560\uc218 \uc788\ub294 \uc0c1\ud0dc\uac00 \ub41c\ub2e4. \ud30c\uc77c\uc5d0\uc11c \uc81c\uc77c \uc544\ub7ab\uc904\uc5d0 \ub2e4\uc74c\uacfc\uac19\uc740 \ub0b4\uc6a9\uc744 \ucd94\uac00\ud55c\ub2e4.\n\n<syntaxhighlight lang=\"bash\">\nredmine\uacc4\uc815 ALL=(\uc900\ube44\ub41c\uacc4\uc815) NOPASSWD: /home/\uc900\ube44\ub41c\uacc4\uc815/doxygen_shellscript_name\n</syntaxhighlight>\n\n\n\uc704\uc640 \uac19\uc740 \ub0b4\uc6a9\uc744 \ucd94\uac00\ud55c \ud6c4 \uc800\uc7a5\ud558\uba74 '''sudo''' \ub97c \uc774\uc6a9\ud574\uc11c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uac8c \ud560 \uc900\ube44\ub294 \ub05d\ub09c\ub2e4.\n\n\n\n===Level5::Redmine \uacc4\uc815\uc5d0\uc11c repository \uc5d0 post-action \uc124\uc815\ud558\uae30===\n\nredmine\uc744 \uc6b4\uc601\ud558\ub294 \uacc4\uc815\uc73c\ub85c login \ud55c\ub2e4\uc74c \uad00\ub9ac\ud558\ub294 repository \ub97c \ud558\ub098 \ub300\uc0c1\uc73c\ub85c \uc7a1\uace0 \ub2e4\uc74c\uc758 folder \ub85c \uc774\ub3d9\ud55c\ub2e4\n\n<syntaxhighlight lang=\"bash\">\ncd ~/repositories/projectname.git/hooks/\n</syntaxhighlight>\n\n\n\uc704\uc758 \ub514\ub809\ud1a0\ub9ac\uc5d0\uc11c '''post-update.sample''' \uc774\ub77c\ub294 \ud30c\uc77c\uc744 '''post-update''' \ub85c \ubc14\uafb8\uace0 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc73c\ub85c \ud3b8\uc9d1\ud574\uc11c \uc800\uc7a5\ud55c\ub2e4.\n\n<syntaxhighlight lang=\"bash\">\n#!/bin/sh\n#\n# An example hook script to prepare a packed repository for use over\n# dumb transports.\n#\n# To enable this hook, rename this file to \"post-update\".\n\nsudo -u \uc900\ube44\ub41c\uacc4\uc815 /home/\uc900\ube44\ub41c\uacc4\uc815/doxygen_shellscript_name\n</syntaxhighlight>\n\n\ud3b8\uc9d1\uc774 \uc885\ub8cc\ub41c '''post-update''' \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc11c \uc2a4\ud06c\ub9bd\ud2b8\ub85c \uc778\ud55c \uacb0\uacfc\uac00 doxygen \uacb0\uacfc\ub97c \ucc98\ub9ac\ud558\ub294 \uacc4\uc815\uc5d0\uc11c \uc81c\ub300\ub85c \ucc98\ub9ac\ub418\ub294\uc9c0\ub97c \ud655\uc778\ud55c\ub2e4.\n\n\n\n===Level6::\uacb0\uacfc\ud14c\uc2a4\ud2b8===\n\n\ucd5c\uc885\ud14c\uc2a4\ud2b8\ub97c \uc9c4\ud589\ud558\ub294\uac83\uc740 \uacb0\ucf54 \ubcf5\uc7a1\ud558\uc9c0 \uc54a\ub2e4.\n\n\ud3c9\uc0c1\uc2dc git \ub97c \uc774\uc6a9\ud574\uc11c \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uc9c4\ud589\ud558\ub294 \uc791\uc5c5\uacc4\uc815\uc73c\ub85c git commit \ubc0f git push \ub97c \uc9c4\ud589\ud558\uba74 \uc11c\ubc84\uc5d0\uc11c \ud574\ub2f9\ub418\ub294 \uc791\uc5c5\uc774 \uc9c4\ud589\ub418\uc5b4 doxygen \uc73c\ub85c \uc778\ud55c document \uac00 \uc0dd\uc131\ub418\uba74 \ub41c\ub2e4.\n\n\uc0dd\uc131\ub41c \uacb0\uacfc\ubb3c\uc744 web browser\ub85c \ud655\uc778\ud574\uc11c \uc791\uc5c5\uc774 \uc790\ub3d9\uc73c\ub85c \uc9c4\ud589\ub418\ub294\uac83\uc744 \ud655\uc778\ud55c\ub2e4.\n\n\n\n==\uc8fc\uc758\uc0ac\ud56d==\n\n* \uc774 \ubb38\uc11c\ub294 gitolite v2\ub97c \ub300\uc0c1\uc73c\ub85c \ud55c \ubb38\uc11c\uc774\ub2e4. \uc65c\ub0d0\ud558\uba74 redmine\uacfc \uc5f0\ub3d9\ub418\ub294 gitolite plugin\uc774 gitolite v2\ub97c \uc694\uad6c\ud558\uae30 \ub54c\ubb38\uc774\ub2e4. gitolite v3\ub97c \uc4f0\uac8c\ub418\uba74 redmine \ubc84\uc804\uc744 2.0 \uc774\uc0c1\uc73c\ub85c \uc62c\ub824\uc57c\ud55c\ub2e4.\n* gitolite v3 \ub294 \uc544\ub798\ucabd \ucc38\uace0\uc790\ub8cc\uc5d0 \uc788\ub294 Link\ub97c \ucc38\uace0\ud558\ub3c4\ub85d \ud55c\ub2e4.\n* doxygen \uc6a9\uc73c\ub85c \uc0ac\uc6a9\ud558\uae30\ub294 \ud588\uc9c0\ub9cc \ub2e4\ub978\uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud574\ub3c4 \uc0c1\uad00\uc740 \uc5c6\ub2e4. \uad00\ub828\ub41c script\ub9cc \uc798 \uc9dc\uc8fc\uba74 \ub41c\ub2e4.\n\n\n\n==\ucc38\uace0\uc790\ub8cc==\n\n* Gitolite\uc5d0 \ub300\ud55c \ud6c4\ud0b9 \uc2dc\uc2a4\ud15c for gitolite v3-\ucd08\ubc8c\ubc88\uc5ed :: [[gitolite_and_hook|Gitolite\uc5d0 \ub300\ud55c \ud6c4\ud0b9 \uc2dc\uc2a4\ud15c]] [http://demonastery.org/2012/09/a-hooking-system-for-gitolite/ \uc6d0\ubcf8\ubb38\uc11c]]\n* gitolite v2 \uc5d0\uc11c hook \ub514\ub809\ud1a0\ub9ac\uc5d0 \ub300\ud55c \uc9c8\ubb38\uacfc \ub2f5\ubcc0 :: http://stackoverflow.com/questions/11054194/per-branch-per-repo-commit-hook-in-gitolite\n* gitolite v2 \uc5d0\uc11c\uc758 hook \uba54\ucee4\ub2c8\uc998\uc5d0 \ub300\ud55c \ub0b4\uc6a9 :: http://gitolite.com/gitolite/g2/hooks.html#hookchaining\n* linux \uc5d0\uc11c \uc77c\ubc18\uc0ac\uc6a9\uc7901\uc774 \uc77c\ubc18\uc0ac\uc6a9\uc7902\uc758 \uad8c\ud55c\uc73c\ub85c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\ub824\uace0 \ud560\ub54c :: http://stackoverflow.com/questions/6905697/how-to-run-script-as-another-user-without-password"
                    }
                ]
            },
            "217": {
                "pageid": 217,
                "ns": 0,
                "title": "Redmine ultraviolet plugin debug",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": ";redmine_ultraviolet \uc2e4\ud328\ud55c \ub514\ubc84\uae45\ub178\ud2b8\n\n\n\n==\uc2dc\uc791\uc740 \uc774\ub7ac\ub2e4==\n\nredmine \uc5d0\uc11c \uc800\uc7a5\uc18c \ubcf4\uae30 > \ud30c\uc77c\ubcf4\uae30 \ub97c \ub204\ub974\ub294 \uacbd\uc6b0. \uc6f9\ud398\uc774\uc9c0\uc5d0\uc11c....\n\n<syntaxhighlight lang=\"ruby\">\nInternal error\n\nAn error occurred on the page you were trying to access.\nIf you continue to experience problems please contact your Redmine administrator for assistance.\n\nIf you are the Redmine administrator, check your log files for details about the error.\n\nBack\n</syntaxhighlight>\n\n\uc704\uc640\uac19\uc740 \uc5d0\ub7ec\uac00 \ub098\uc628\ub2e4. \ubb54\uac00 \uc774\uc0c1\ud574\uc11c redmine\uc758 log\ub97c \ub4a4\uc9c0\uae30 \uc2dc\uc791. \ubcf8\uc778\uc758 \uacbd\uc6b0\ub294 production.log \ud30c\uc77c\uc774\uc5c8\uc74c. \n\n\n\uc704\uc758 \uc5d0\ub7ec\uc5d0\uc11c refresh \ub97c \ud558\uba74 \uc544\ub798\uc640 \uac19\uc740 \uc5d0\ub7ec\uac00 \ub098\uc634.\n\n<syntaxhighlight lang=\"bash\">\nProcessing RepositoriesController#entry (for 180.191.6.73 at 2013-05-05 22:00:10) [GET]\n  Parameters: {\"id\"=>\"yourID\", \"action\"=>\"entry\", \"controller\"=>\"repositories\", \"rev\"=>\"ktour_dev\", \"path\"=>[\"composer.json\"]}\nRendering template within layouts/base\nRendering repositories/entry\n\nActionView::TemplateError (Output for xhtml in  style is not yet implemented) on line #15 of vendor/plugins/redmine_ultraviolet/app/views/common/_file.rhtml:\n12: </style>\n13: \n14: <div class=\"uv-file\">\n15:   <%= syntax_highlight( filename, Redmine::CodesetUtil.to_utf8_by_setting(content) ) %>\n16: </div>\n17: \n18: <% content_for :header_tags do %>\n\n    ultraviolet (1.0.0) lib/uv/render_processor.rb:14:in `load'\n    ultraviolet (1.0.0) lib/uv.rb:84:in `parse'\n    vendor/plugins/redmine_ultraviolet/app/views/common/_file.rhtml:15:in `_run_rhtml_vendor47plugins47redmine_ultraviolet47app47views47common47_file46rhtml_locals_content_file_filename_object'\n    app/views/repositories/entry.html.erb:11\n    thin (1.3.1) lib/thin/connection.rb:80:in `pre_process'\n    thin (1.3.1) lib/thin/connection.rb:78:in `catch'\n    thin (1.3.1) lib/thin/connection.rb:78:in `pre_process'\n    thin (1.3.1) lib/thin/connection.rb:53:in `process'\n    thin (1.3.1) lib/thin/connection.rb:38:in `receive_data'\n    eventmachine (0.12.10) lib/eventmachine.rb:256:in `run_machine'\n    eventmachine (0.12.10) lib/eventmachine.rb:256:in `run'\n    thin (1.3.1) lib/thin/backends/base.rb:61:in `start'\n    thin (1.3.1) lib/thin/server.rb:159:in `start'\n    thin (1.3.1) lib/thin/controllers/controller.rb:86:in `start'\n    thin (1.3.1) lib/thin/runner.rb:185:in `send'\n    thin (1.3.1) lib/thin/runner.rb:185:in `run_command'\n    thin (1.3.1) lib/thin/runner.rb:151:in `run!'\n    thin (1.3.1) bin/thin:6\n    /usr/bin/thin:8:in `load'\n    /usr/bin/thin:8\n\nRendering /var/lib/redmine/public/500.html (500 Internal Server Error)\n</syntaxhighlight>\n\n\n\uc624\ud638\ub77c....... \uadf8\ub7fc \uc9c0\uae08\ubd80\ud130 \uc5d0\ub7ec\uc758 \ub0b4\uc6a9\uc744 \ub530\ub77c \uad00\ub828\ub41c \ud30c\uc77c\ub4e4\uc744 \uc0b4\ud3b4\ubcf4\uae30\ub85c \ud55c\ub2e4\n\n\n\n==\uc5d0\ub7ec\ucc98\ub9ac\ub97c \uc704\ud55c \ub514\ubc84\uae45==\n\n\uc800 \uc5d0\ub7ec\uc5d0\uc11c \ubcf4\uba74 '''ultraviolet (1.0.0) lib/uv/render_processor.rb:14:in `load'''' \ubd80\ubd84\uc774 \uc788\ub2e4.\n\n\uadf8\ub798\uc11c '''/usr/lib64/ruby/gems/1.8/gems/ultraviolet-1.0.0/lib/uv/render_processor.rb''' \ud30c\uc77c\uc744 \uc0b4\ud3b4\ubcf4\uae30\ub85c \ud588\ub2e4.\n\n\uadf8\ub7ac\ub354\ub2c8 13\ubc88\uc9f8 \uc904\uc5d0\n\n<syntaxhighlight lang=\"ruby\">\nrenderer = File.join( Uv.render_path, output,\"#{style}.render\")\nraise( ArgumentError, \"Output for #{output} in #{style} style is not yet implemented\" ) unless File.exists?(renderer)\n</syntaxhighlight>\n\n\uc704\uc640\uac19\uc740 \ubd80\ubd84\uc774 \uc788\ub2e4.\n\n\n\uc5d0\ub7ec\uba54\uc138\uc9c0\ub97c \ub2e4\uc2dc \uc0b4\ud3b4\ubcf4\ub3c4\ub85d \ud55c\ub2e4.\n\n<syntaxhighlight lang=\"ruby\">\nOutput for xhtml in  style is not yet implemented\n</syntaxhighlight>\n\n\uc704\uc758\uc640\uac19\uc740 \ubd80\ubd84\uc744 \ubd84\uba85\ud788 \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \uc544\ub9c8\ub3c4 #{style} \uc5d0 \ud574\ub2f9\ud558\ub294 \ubd80\ubd84\uc774 \uc548\ub118\uc5b4\uac00\ub294\ub4ef?<ref name=\"\uc8fc\uc11d1\">Ruby \uc5d0\uc11c\ub294 \ubb38\uc790\uc5f4(String) \uc744 ' ' \ub610\ub294 \" \" \uc73c\ub85c \ud45c\ud604\uc744 \ud558\ub294\ub370 \uc774 \" \" \uc548\ucabd\uc5d0 \ubcc0\uc218\ub97c \uc9d1\uc5b4\ub123\uc73c\ub824\uba74 \ubcc0\uc218\ub97c #{} \ubb38\ubc95 \uc548\uc5d0 \ub123\uc73c\uba74 \ub41c\ub2e4. \"abcd #{\ubcc0\uc218\uba85}\" \uac19\uc740 \uc0ac\uc6a9\ubc95\uc774\ub77c\uace0 \ubcf4\uba74 \ub41c\ub2e4. \ub9c8\uce58 shell script \ucc98\ub7fc \ub3d9\uc791\ud55c\ub2e4\uace0 \uc0dd\uac01\ud558\uba74 \ub41c\ub2e4.</ref>\n\n\n\uc774\uc81c \ub2e4\uc2dc redmine \uc548\uc758 '''~/vendor/plugins/redmine_ultraviolet/app/views/common/_file.rhtml''' \ud30c\uc77c\uc744 \uc0b4\ud3b4\ubcf4\uc790.\n\n<syntaxhighlight lang=\"html4strict\">\n<style>\n.uv-file pre {\n  font-size: 12px;\n  margin: 0 0 0 0;\n  padding: none;\n}\n\n.uv-file {\n  overflow-x: auto;\n  border: 4px solid black;\n}\n</style>\n\n<div class=\"uv-file\">\n  <%= syntax_highlight( filename, Redmine::CodesetUtil.to_utf8_by_setting(content) ) %>\n</div>\n\n<% content_for :header_tags do %>\n  <%= stylesheet_link_tag \"uv_themes/#{@uv_theme_name}\", :plugin => 'redmine_ultraviolet' %>\n<% end %>\n</syntaxhighlight>\n\n\n\ub0b4\uc6a9\uc740 \uc774\ub807\uac8c \ub41c\ub2e4... \uc5b4? style\uc744 \ubc1b\uae30\ub294 \ubc1b\ub294\ub370 \ubb54\uac00 \uc880 \ub3d9\uc791\uc774 \uc774\uc0c1\ud55c \ub290\ub08c\uc774 \ub4e0\ub2e4.\n\n\ub2e4\uc2dc '''~/vendor/plugins/redmine_ultraviolet/lib/ultraviolet_syntax_patch.rb''' \ud30c\uc77c\uc744 \uc0b4\ud3b4\ubcf4\uc790. 100\ubc88 \uc904\uc5d0 \uc774\ub7f0\uac8c \uc788\uc74c\n\n<syntaxhighlight lang=\"ruby\">\n# Usage: Uv.parse(text, output=\"xhtml\", syntax_name=nil, line_numbers=false, render_style=\"classic\", headers=false)\nreturn Uv.parse(content, \"xhtml\", syntax_name, true, @uv_theme_name)\n</syntaxhighlight>\n\n\n\uc5b4.. \ubb54\uac00 \uc774\uc0c1\ud558\ub2e4... \uc544\ubb34\ub798\ub3c4 render_processor.rb \ud30c\uc77c\uc758 self.load \uad00\ub828\ub41c \ubd80\ubd84\uc778\uac70\uac19\uc740\ub370.. \uc800 syntax_name \uc744 \ub118\uae30\ub294 \ubd80\ubd84\uc774 \uc560\ub9e4\ud55c \ub290\ub08c\uc774 \ub4e0\ub2e4.\n\n\uad00\ub828\ub41c \uc6a9\ubc95\uc744 \ucc3e\uc544\ubcf4\ub2c8.... \uc774\uac70\uc774\uac70...\n\n:http://blog.alno.name/en/2009/02/code-highlighters-ruby\n\n\uc704\uc758 \ub9c1\ud06c\ubd80\ubd84\uc744 \uc0b4\ud3b4\ubcf4\uba74 \ub2e4\uc74c\uacfc\uac19\uc740 \uc6a9\ubc95\uc774 \uc788\ub2e4.\n\n<syntaxhighlight lang=\"ruby\">\nresult = Uv.parse( text, \"xhtml\", \"ruby\", true, \"amy\")\n</syntaxhighlight>\n\n\uc5b4? \ud30c\uc77c\uba85\uc744 \uae30\uc900\uc73c\ub85c \ubb54\uac00\ub97c \ub118\uae30\ub294\ub370 \uc544\ub9c8\ub3c4 \uc9c0\uae08\uc758 \uc5d0\ub7ec\ub294 \"ruby\" \uc5d0 \ud574\ub2f9\ub418\ub294 \ubd80\ubd84\uc774 \ub611\ubc14\ub85c \uc548\ub118\uc5b4\uac00\uc11c \uc0dd\uae30\ub294 \ubb38\uc81c\uc778\uac70\uac19\ub2e4.\n\n\n\n==\uae09\ud55c\ub300\ub85c \ubb38\uc81c\ud574\uacb0==\n\n\uc815\uc2e0\ucc28\ub9ac\uace0\n\n:'''~/vendor/plugins/redmine_ultraviolet/lib/ultraviolet_syntax_patch.rb'''\n\n\uc704\uc758 \ud30c\uc77c\uc744 \ub2e4\uc2dc \ubcf4\uba74 \uc774\ub7f0 \ub0b4\uc6a9\uc774 \uc788\ub2e4.\n\n<syntaxhighlight lang=\"ruby\">\n    def syntax_highlight_with_uv_syntax_highlight(name, content)\n      ## See: http://ultraviolet.rubyforge.org/svn/lib/uv.rb \n      ## See: http://ultraviolet.rubyforge.org/themes.xhtml\n\n      ## User selection of UV Theme\n      selected_theme = User.current.custom_value_for(CustomField.first(:conditions => {:name => 'Ultraviolet Theme'}))\n      @uv_theme_name = selected_theme || Uv::DEFAULT_THEME\n\n      syntaxes = Uv.syntax_for_file(name, content)\n\n      if syntaxes.empty?\n        syntax_name = \"plain_text\"\n      else\n        syntax_name = syntaxes.first.first\n      end\n\n      # Usage: Uv.parse(text, output=\"xhtml\", syntax_name=nil, line_numbers=false, render_style=\"classic\", headers=false)\n      return Uv.parse(content, \"xhtml\", syntax_name, true, @uv_theme_name)\n    end\n</syntaxhighlight>\n\n\uc624\ud638\ub77c... syntax_name \uc774\ub77c\ub294 \ubcc0\uc218\uc5d0 \uac12\uc774 \ub611\ubc14\ub85c \uc548\ub4e4\uc5b4\uac00\ub294\ub4ef \ud558\ub2e4.. \uadf8\ub7fc \uc774\uac78 \uac15\uc81c\ub85c plain_text \ub85c \uc9c0\uc815\ud574\uc8fc\uba74 \uc5b4\ub5a8\uae4c?\n\n...........\n\n\uc624\ud638 \uc548\ub418\ub294\uad70\uc694..(\uc820\uc7a5)\n\n\n\uc5b4\ub77c.. \uc18c\uc2a4\ub97c \uc798 \ubcf4\ub2c8\uae50.... @uv_theme_name \uc774 \ubd80\ubd84\uc774 \ubb38\uc81c\uc778\uac70\uac19\ub124\uc694.\n\nultraviolet \uc774 \uc124\uce58\ub41c\uacf3\uc744 \ucc3e\uc544\ubcf4\ub2c8\n\n\n:'''/usr/lib64/ruby/gems/1.8/gems/ultraviolet-1.0.0/render/xhtml/'''\n\n\n\uc774\ub7f0 \ub514\ub809\ud1a0\ub9ac\uac00 \uc788\ub124\uc694. \uc774\uc911\uc5d0\uc11c cobalt \ub77c\ub294\uac8c \uc77c\ub2e8 \ub208\uc5d0 \ub744\ub294\uac70\uac19\uc73c\ub2c8 \ub2e4\uc74c\uacfc\uac19\uc774 \uc138\ud305\ud574\ubcf4\ub3c4\ub85d \ud558\uc790\n\n<syntaxhighlight lang=\"ruby\">\nreturn Uv.parse(content, \"xhtml\", syntax_name, true, \"cobalt\")\n</syntaxhighlight>\n\n\uc774\ubc88\uc5d0\ub294 \ub420\ub824\ub098....\n\n\n\uc5d0\ub7ec\uba54\uc138\uc9c0\uac00 \ubc14\uaf08\uad70. \ubc14\ub010 \uc5d0\ub7ec\uba54\uc2dc\uc9c0\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.\n\n<syntaxhighlight lang=\"bash\">\nActionView::TemplateError (No syntax found for plain_text) on line #15 of vendor/plugins/redmine_ultraviolet/app/views/common/_file.rhtml:\n12: </style>\n13: \n14: <div class=\"uv-file\">\n15:   <%= syntax_highlight( filename, Redmine::CodesetUtil.to_utf8_by_setting(content) ) %>\n16: </div>\n17: \n18: <% content_for :header_tags do %>\n\n    ultraviolet (1.0.0) lib/uv.rb:28:in `syntax_node_for'\n    ultraviolet (1.0.0) lib/uv.rb:85:in `parse'\n    ultraviolet (1.0.0) lib/uv/render_processor.rb:17:in `load'\n    ultraviolet (1.0.0) lib/uv.rb:84:in `parse'\n</syntaxhighlight>\n\n\n\uc6c5? \uc774\ubc88\uc5d0\ub294 plain_text \ub77c\ub294 \uac15\uc870\ubb38\ubc95\uc744 \ubabb\ucc3e\uc558\ub2e4\uace0 \ub098\uc624\ub294\uad70.\n\n\uadf8\ub798 \ub204\uac00 \uc774\uae30\ub098 \ud574\ubcf4\uc790....\n\n\n\n\uc774\ubc88\uc5d0\ub294 \uc5d0\ub7ec\uac00 \ub098\ub294 \uc704\uce58\uac00 \ubc14\uaf08\uc2b5\ub2c8\ub2e4?\n\n:'''/usr/lib64/ruby/gems/1.8/gems/ultraviolet-1.0.0/lib/uv.rb'''\n\n\uc704 \ud30c\uc77c\uc758 28\ubc88\uc9f8 \uc904\uc744 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc74c.\n\n<syntaxhighlight lang=\"ruby\">\n@syntaxes[syntax] = Textpow.syntax(syntax) || raise(ArgumentError, \"No syntax found for #{syntax}\")\n</syntaxhighlight> \n \n\uc624\ud638 \uc5b4\ub5a4 \ubb38\ubc95\uc778\uc9c0\uc5d0 \ub300\ud55c \ud310\ub2e8\uc740 Textpow \ub77c\ub294\ub188\uc774 \ud558\ub294\uac70\uac19\ub124.... gems\ub97c \ub4a4\uc9c0\uace0 \ub4a4\uc9c0\ub2e4\ubcf4\uba74 \ub2e4\uc74c\uacfc\uac19\uc740 \ub514\ub809\ud1a0\ub9ac\ub97c \ucc3e\uc744 \uc218 \uc788\uc9c0. (\uc544\uc2f8)\n\n\n: '''/usr/lib64/ruby/gems/1.8/gems/textpow-1.3.0/lib/textpow/syntax'''\n\n\n\uc704\uc758  \ub514\ub809\ud1a0\ub9ac\uc758 \ud30c\uc77c\ub4e4\uc744 \ub300\ub7b5 \ubcf4\uba74 \ub9d0\uc774\uc8e0....\n\n\ud30c\uc77c\uc758 type\uc744 \ud310\uba85\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0\uc5d0\ub294 \uac15\uc81c\ub85c plain \uc774\ub77c\ub294\uac78 \uc4f0\uba74 \ub420\uac70\uac19\uc740 \ub290\ub08c\uc774 \ub4dc\ub124?\n\n\n'''~/vendor/plugins/redmine_ultraviolet/lib/ultraviolet_syntax_patch.rb'''\n\n\n\uc704\uc758 \ud30c\uc77c\ub0b4\uc5d0\uc11c \ub2e4\uc74c\uc758 \ubd80\ubd84\uc744 \uc0b4\ud3b4\ubd05\uc2dc\ub2e4?\n\n<syntaxhighlight lang=\"ruby\">\n      if syntaxes.empty?\n        syntax_name = \"plain_text\"\n      else\n        syntax_name = syntaxes.first.first\n      end\n</syntaxhighlight> \n\n\ub290\ub08c \uc624\ub124\uc694. \uc870\uc544\uc4f0 plain_text \ubd80\ubd84\uc744 plain \uc73c\ub85c \ud55c\ubc88 \ubc14\uafd4\ubcfc\uae4c\uc694?\n\n\n\uc5b4.......\n\n\n\uc798\ub41c\ub2e4...? (\ubb50 \uc77c\ub2e8 \uc5d0\ub7ec\uac00 \uc548\ub09c\ub2e4\ub294 \uc815\ub3c4\uc9c0\ub9cc....)\n\n\uc5ec\uae30\uc11c \uc0bd\uc9c8\uc744 \uc77c\ub2e8\ub77d \ud560\uae4c \ud588\uc73c\ub098........\n\n\n\n===\ud558\ub2e4\uac00\ub9cc \ucd94\uac00\uc0bd\uc9c8===\n\n\ud30c\uc77c\uc758 \ud655\uc7a5\uc790\uc5d0 \ub530\ub978 \ubd80\ubd84\uc774 \uc81c\ub300\ub85c \ubc18\ud658\uc774 \uc548\ub418\ub294\ub4ef \ud558\ub2e4. \uadf8\ub7fc \uc774\uc81c\ubd80\ud130 \ubcc0\uc218\ub97c \uc2ac\uc2ac \ub514\ubc84\uae45\ud574\ubcf4\ub3c4\ub85d \ud55c\ub2e4.\n\n\n:'''~/vendor/plugins/redmine_ultraviolet/lib/ultraviolet_syntax_patch.rb'''\n\n\ubb38\uc81c\uac00 \ub418\ub294 \ubd80\ubd84\uc740 \uc704\uc758 \ud30c\uc77c\uc5d0\uc11c\n\n<syntaxhighlight lang=\"ruby\">\nsyntaxes = Uv.syntax_for_file(name, content)\n</syntaxhighlight>\n\n\uc774 return \uac12\uc774 \uc81c\ub300\ub85c \uc548\ub418\ub294\uac8c \ubb38\uc81c. \uc774\uc81c\ubd80\ud130 \uc608\uc81c\ub97c \ub9cc\ub4e4\uc5b4\uc11c Uv.syntax_for_file \uc774 \uc5b4\ub5a4\uc2dd\uc73c\ub85c \ub3d9\uc791\ud558\ub294\uc9c0\ub97c \uc0b4\ud3b4\ubcf4\ub3c4\ub85d \ud55c\ub2e4.\n\nthin/redmine \uc758 plugin \ub0b4\uc5d0\uc11c\ub294 \uc81c\ub300\ub85c log\uac00 \ucc0d\ud788\uc9c0 \uc54a\ub294\ub2e4. (10\ubc88 refresh \ud558\uba74 3\ubc88\uc815\ub3c4 log\uc5d0 \ucc0d\ud788\ub2c8 \uc6d0....)\n\n\uc77c\ub2e8 \uc704\uc758 \uba54\uc11c\ub4dc \uc0ac\uc6a9\uc5d0\uc11c name\uc740 \ud30c\uc77c\uc774\ub984, content \ub294 \ud30c\uc77c\uc758 \ub0b4\uc6a9\uc73c\ub85c \ubcf4\uba74 \ub418\uaca0\ub2e4.\n\n\n\uc6ec\uc9c0\ub294 \ubaa8\ub974\uaca0\uc9c0\ub9cc puts \ub85c \ubcc0\uc218\ub97c \ucc0d\uc73c\uba74 thin\uc758 log\uc5d0 '''\uac04\ud5d0\uc801''' \uc73c\ub85c\ub9cc \ub098\uc628\ub2e4.\n\n(\uc774\uc81c\ubd80\ud130 \ub8e8\ube44\ub97c \ub208\uaf3d\ub9cc\ud07c \uc54c\uc544\uc57c \ud558\ub294 \ud544\uc694\uac00 \uc788\uc74c)\n\n# sample\uc744 \ub9cc\ub4e4\uace0\n# method \uc758 return \uac12\uc774 \uc5b4\ub5a4 \ud0c0\uc785\uc778\uc9c0\ub97c \ud655\uc778\ud55c\ub2e4\uc74c\n# return \uac12\uc744 \ucd9c\ub825\ud574\ubcf4\uace0 \ud568\uc218\uc758 \ub3d9\uc791\uc744 \uc774\ud574\ud55c\ub2e4\n\n\n\uc77c\ub2e8 UltraViolet \uc758 '''/usr/lib64/ruby/gems/1.8/gems/ultraviolet-1.0.0/lib/uv.rb''' \ud30c\uc77c\uc744 \uc0b4\ud3b4\ubcf8\ub2e4.\n\n\uadf8\ub9ac\uace0 \ud14c\uc2a4\ud2b8\uc6a9 \ub8e8\ube44\ud504\ub85c\uadf8\ub7a8\uc744 \uc9dc\uc11c \ud574\ubcf4\ub294\ub370.......\uc5b4\ub77c \ubb54\uac00 \uc774\uc0c1\ud558\ub2e4.\n\n<syntaxhighlight lang=\"ruby\">\ndef self.syntax_for_file(file_name)\n</syntaxhighlight>\n\n\uba54\uc11c\ub4dc \uc120\uc5b8\ubd80\ubd84\uc744 \ubcf4\uba74..... \uc778\uc218\uac00 \ud558\ub098\ub124? (\uc0ac\uc2e4 \uc774\ub54c \uc774\ubbf8 \uc54c\uc558\uc5b4\uc57c \ud588\ub2e4)\n\n\n\uc774\ud6c4 \uc774\ub7f0\uc800\ub7f0 \ub514\ubc84\uae45\uc744 \ud574\ubd24\ub294\ub370 \uae30\ubcf8\uc801\uc778\uac78 \uc78a\uace0\uc788\uc5c8\ub2e4. \ub2e4\uc2dc\ud55c\ubc88 \uc544\ub798\uc758 \ud30c\uc77c\uc744 \uc804\ubd80 \uc0b4\ud3b4\ubcf8\ub2e4.\n\n\n:'''~/vendor/plugins/redmine_ultraviolet/lib/ultraviolet_syntax_patch.rb'''\n\n<syntaxhighlight lang=\"ruby\">\nrequire_dependency 'application_helper'\n\n#\n# Monkeypatches for the Ultraviolet (Uv) module:\n# * Allow Uv.syntax_for_file to handle blobs of content (without existing files)\n# * Add THEMES and DEFAULT_THEME\n#\nmodule Uv\n\n  DEFAULT_THEME = \"pastels_on_dark\"\n  THEMES = %w[\n    active4d\n    all_hallows_eve\n    amy\n    blackboard\n    brilliance_black\n    brilliance_dull\n    cobalt\n    dawn\n    eiffel\n    espresso_libre\n    idle\n    iplastic\n    lazy\n    mac_classic\n    magicwb_amiga\n    pastels_on_dark\n    slush_poppies\n    spacecadet\n    sunburst\n    twilight\n    zenburnesque\n  ]\n\n  def Uv.syntax_for_file file_name, content=nil\n    init_syntaxes unless @syntaxes\n\n    f = content ? StringIO.new(content) : open(file_name)\n    first_line = f.find { |line| line.strip.size > 0 }  # first non-empty line\n    f.close\n\n    result = []\n\n    @syntaxes.each do |key, value|\n      assigned = false\n\n      if value.fileTypes\n        value.fileTypes.each do |t|\n          if t == File.basename( file_name ) || t == File.extname( file_name )[1..-1]\n            result << [key, value]\n            assigned = true\n            break\n          end\n        end\n      end\n\n      unless assigned\n        if value.firstLineMatch && value.firstLineMatch =~ first_line\n          result << [key, value]\n        end\n      end\n    end\n\n    result\n  end\n\nend\n\n#\n# UV Syntax highlighting for Redmine\n#\nmodule UltravioletSyntaxPatch\n\n  def self.included(base) # :nodoc:\n    base.send(:include, InstanceMethods)\n\n    base.class_eval do\n      alias_method_chain :syntax_highlight, :uv_syntax_highlight\n    end\n  end\n\n  module InstanceMethods\n\n    def syntax_highlight_with_uv_syntax_highlight(name, content)\n      ## See: http://ultraviolet.rubyforge.org/svn/lib/uv.rb \n      ## See: http://ultraviolet.rubyforge.org/themes.xhtml\n\n      ## User selection of UV Theme\n      selected_theme = User.current.custom_value_for(CustomField.first(:conditions => {:name => 'Ultraviolet Theme'}))\n      @uv_theme_name = selected_theme || Uv::DEFAULT_THEME\n\n      syntaxes = Uv.syntax_for_file(name, content)\n\n\n      if syntaxes.empty?\n        syntax_name = \"plain\"\n      else\n        syntax_name = syntaxes.first.first\n      end\n\n      puts \"name is #{name} \\n\";\n      #puts \"content is #{content} \\n\";\n      puts \"syntaxes is #{syntaxes.first.first} \\n\";\n\n      # Usage: Uv.parse(text, output=\"xhtml\", syntax_name=nil, line_numbers=false, render_style=\"classic\", headers=false)\n      # return Uv.parse(content, \"xhtml\", syntax_name, true, @uv_theme_name)\n      return Uv.parse(content, \"xhtml\", syntax_name, true, \"cobalt\")\n    end\n\n  end\nend\n\nApplicationHelper.send(:include, UltravioletSyntaxPatch)\n</syntaxhighlight>\n\n\n\ub0b4\uc6a9\uc740 \uc880 \uae38\uc9c0\ub9cc... \uc0ac\uc2e4 \uc911\uc694\ud55c\uac74 \ub2e4\ub978\uac8c \uc544\ub2c8\ub77c \ub2e4\uc74c\uc758 \ud55c\uc904\uc774\ub2e4.\n\n<syntaxhighlight lang=\"pascal\">\ndef Uv.syntax_for_file file_name, content=nil\n</syntaxhighlight>\n\n\n\uc751? \uc5b4\uc774.. \uc774\ubd10\uc694... \uc0c8\ub85c class \ub97c \uc120\uc5b8\ud574\ubc84\ub9b0\uac81\ub2c8\uae4c...?...... \uc778\uc218\uc758 \uac1c\uc218\uac00 \ud2c0\ub9ac\ub124?\n\n\n\uc790 \uc774\uc81c \uc774 class\uc758 \uc774\ub984\uc744 \uc0b4\uc9dd \ubc14\uafd4\uc11c \ud30c\uc77c\uc744 \ub85c\ub529\ud55c\ub2e4\uc74c \uba54\uc11c\ub4dc\ub97c \uc2e4\uc81c\ub85c \uc791\ub3d9\uc2dc\ud0a4\ub294 Sample \uc744 \ub2e4\uc2dc \ub9cc\ub4e4\uc5b4\uc11c \ub0b4\uc6a9\uc744 \ud14c\uc2a4\ud2b8\ud574\ubcf4\uaca0\ub2e4.\n\n(\uc774\uc81c\ubd80\ud130\ub294 \uac04\ub2e8\ud788 \uc544\ub294 \uc218\uc900\uc744 \uc880 \ub118\uac8c\ub418\ub294\uac70\uac19\ub124?)\n\n\n\uc77c\ub2e8 \uac04\ub2e8\ud55c \ud30c\uc77c \uc785\ucd9c\ub825 \uc608\uc81c\ub97c \ub9cc\ub4e4\uc5b4\uc11c \uc6d0\ub798 plugin \uc5d0\uc11c \uc0ac\uc6a9\ud558\ub358 contents \uc5d0 \ud574\ub2f9\ud558\ub294 \ubcc0\uc218\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\ub3c4\ub85d \ud55c\ub2e4.\n\n<syntaxhighlight lang=\"ruby\">\nfile_name = \"\ud30c\uc77c\uc774\ub984\"\n\n# aFile = File.new(\"filename\", \"mode\")\naFile = File.new(file_name, \"r\")\n\ntemp_string = \"\"\n\nif aFile\n    aFile.each do | ch |\n        temp_string = \"#{temp_string}\" + \"#{ch}\"\n    end\nelse\n    puts 'Unable open file'\nend\n\naFile.close\n</syntaxhighlight>\n\n\n\uc624\ud638.. \ud30c\uc77c\uc758 \uc774\ub984\uc744 \uc77d\uc5b4\ub4e4\uc5ec \ud654\uba74\uc0c1\uc5d0 puts \ub85c \ud45c\uc2dc\ud558\ub294\uac8c \uc798\ub41c\ub2e4.\n\n\uc0ac\uc2e4.. \uadf8\ub798\uc11c '''~/vendor/plugins/redmine_ultraviolet/lib/ultraviolet_syntax_patch.rb''' \ud30c\uc77c\uc5d0 \uc788\ub294 \uba54\uc11c\ub4dc \uc120\uc5b8 \ubd80\ubd84\ub9cc \uc0c8\ub85c \ubcf5\uc0ac\ud574\uc11c...\n\n\uc608\uc81c \ud30c\uc77c\uc744 \ub9cc\ub4e4\uc5b4\ubd24\uc73c\ub098.. \uacb0\uad6d\uc740 \uc544\ub798\uc640 \uac19\uc740 \uba54\uc138\uc9c0\uac00 \ub098\uc624\uba70 \uc2e4\ud328\ub418\uc5c8\ub2e4.\n\n<syntaxhighlight lang=\"bash\">\n# ruby ./sample.rb \n./sample.rb:31:in `syntax_for_file': undefined local variable or method `init_syntaxes' for Uv:Module (NameError)\n\tfrom ./sample.rb:82\n</syntaxhighlight>\n\n\n\uc5d0\uc774........... \uc774\uc81c\ub294 \ubaa8\ub974\uaca0\ub2e4......\n\n\ubb54\uac00 \ub8e8\ube44 \ubb38\ubc95\uc744 \ub354 \uc54c\uba74 \ub420\uac70\uac19\uc740\ub370... \ub098\ub294 \uc5ec\uae30\uc11c \uadf8\ub9cc \uc0bd\uc9c8\uc744 \uc811\uae30\ub85c \ud588\ub2e4.\n\n\uc544\ub798\ucabd\uc5d0 \uc0bd\uc9c8\ud55c \uc608\uc81c\ud504\ub85c\uadf8\ub7a8\uc758 \uc804\ubb38\uc744 \uc62c\ub9b0\ub2e4.\n\n<syntaxhighlight lang=\"ruby\">\n#!/usr/bin/ruby\n\nmodule Uv\n\n  DEFAULT_THEME = \"pastels_on_dark\"\n  THEMES = %w[\n    active4d\n    all_hallows_eve\n    amy\n    blackboard\n    brilliance_black\n    brilliance_dull\n    cobalt\n    dawn\n    eiffel\n    espresso_libre\n    idle\n    iplastic\n    lazy\n    mac_classic\n    magicwb_amiga\n    pastels_on_dark\n    slush_poppies\n    spacecadet\n    sunburst\n    twilight\n    zenburnesque\n  ]\n\n  def Uv.syntax_for_file file_name, content=nil\n    init_syntaxes unless @syntaxes\n\n    f = content ? StringIO.new(content) : open(file_name)\n    first_line = f.find { |line| line.strip.size > 0 }  # first non-empty line\n    f.close\n\n    result = []\n\n    @syntaxes.each do |key, value|\n      assigned = false\n\n      if value.fileTypes\n        value.fileTypes.each do |t|\n          if t == File.basename( file_name ) || t == File.extname( file_name )[1..-1]\n            result << [key, value]\n            assigned = true\n            break\n          end\n        end\n      end\n\n      unless assigned\n        if value.firstLineMatch && value.firstLineMatch =~ first_line\n          result << [key, value]\n        end\n      end\n    end\n\n    result\n  end\n\nend\n\nfile_name = \"/root/test/sample.php\"\n\n# aFile = File.new(\"filename\", \"mode\")\naFile = File.new(file_name, \"r\")\n\ntemp_string = \"\"\n\nif aFile\n    aFile.each do | ch |\n        temp_string = \"#{temp_string}\" + \"#{ch}\"\n    end\nelse\n    puts 'Unable open file'\nend\n\naFile.close\n\n\nsyntaxes = Uv.syntax_for_file(file_name, temp_string)\n\n\nputs syntaxes.class\n</syntaxhighlight>\n\n\n\n==\ucc38\uace0\uc0ac\ud56d==\n\n# \uc608\uc81c\ub97c Plugin \ud30c\uc77c\uacfc \uac19\uc740 \uad6c\uc870\ub3c4 \ub9cc\ub4e4\uc5c8\ub294\ub370\ub3c4 \uc548\ub418\ub294\uac74 \uc608\uc81c\uc5d0 \uc788\ub294 \ubb54\uac00\uac00 \uc548\ub418\ub294\uac70\uac19\ub2e4\n# \uc0ac\uc2e4.. Uv \ub9d0\uace0 \uadf8\ub0e5 textpow\ub97c \uc368\ub3c4 \ub420\uac70\uac19\ub2e4. \uadf8\ub7f0\ub370...... \uac70\uae30\uae4c\uc9c0 \uc190\ub300\uae30\uc5d0\ub294 \uc815\uc2e0\uc774 \ud63c\ubbf8\ud574\uc11c \ud3ec\uae30\n# \ub610 \ud558\ub098 \uc8fc\uc758\ud560\uac8c redmine_ultraviolet \ud50c\ub7ec\uadf8\uc778\uc774 redmine 1.3 \uc5d0 \ub9de\ucdb0\uc838 \uc788\uc5b4\uc11c \uadf8\ub7f0\uac70\uac19\uae30\ub3c4 \ud558\ub2e4. (\uc99d\uc0c1\uc744 \ubcf4\uba74 \uac4d \ubb38\uc81c\uc778\uac70\uac19\uc9c0\ub9cc...)\n\n\n\n==\ucc38\uace0\ubb38\uc11c==\n\n* http://www.ruby-lang.org/ko/documentation/\n** https://docs.google.com/document/d/15yEpi2ZMB2Lld5lA1TANt13SJ_cKygP314cqyKhELwQ/preview?pli=1\n* http://synch3d.com/wiki/moin/moin.cgi/_c7_c1_b7_ce_b1_d7_b7_a1_b9_d6_20_b7_e7_ba_f1#line305\n* http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Ruby\n** http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Ruby/Tutorial01\n** http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Ruby/Tutorial02\n** http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Ruby/File\n\n\n==Notes==\n\n<references />"
                    }
                ]
            }
        }
    }
}