1 °³¿ä
C/C++·Î ¾²¿©Áø Äڵ带 Perl, Python°ú °°Àº ÇÏÀÌ·¹º§ ¾ð¾î¿¡¼ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ·¡ÆÛ Äڵ带 »ý¼ºÇØÁÖ´Â À¯Æ¿¸®Æ¼.
2 ¼³Ä¡ (À©µµ¿ìÁî)
¹èÆ÷º»À» ´Ù¿î·Îµå¹Þ¾Æ Àû´çÇÑ °÷¿¡´Ù Ç®°í µð·ºÅ丮 À̸§À» ¼³Á¤ÇÑ´Ù. (¼³Ä¡ ÇÁ·Î±×·¥ÀÌ µû·Î ¾ø´Ù.) ÀÌ µð·ºÅ丮¸¦ $(SWIG)¶ó°í ÇÏÀÚ.
- $(SWIG) µð·ºÅ丮¸¦ ÆÐ½º¿¡´Ù Ãß°¡ÇÑ´Ù. ¹°·Ð ¸Å¹ø ½ÇÇà ÆÄÀÏÀÇ ÆÐ½º¸¦ ÁöÁ¤ÇÒ °ÍÀ̶ó¸é »ó°ü¾ø´Ù.
- PYTHON_INCLUDE ¹× PYTHON_LIB ȯ°æ º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.
PYTHON_INCLUDE = C:\python23\include
PYTHON_LIB = C:\python23\libs\python23.lib
3 »ùÇÃ
·¹Æ÷Æ®·Î ³Â´ø °Í...
Template2doc ¶óÀ̺귯¸®¸¦ ÆÄÀ̽ã¿ëÀ¸·Î Æ÷ÆÃÇϱâ.
´ÙÀ½ÀÇ Å×½ºÆ® Äڵ带 ¸¸Á·Çϵµ·Ï template2doc.i ÆÄÀÏÀ» ¼öÁ¤ÇÏ°í ½ÇÇàÇϽÿÀ. »õ·Î¿î typemapÀ» Á¤ÀÇÇÏ¿©¾ß ÇÕ´Ï´Ù.
import unittest
import template2doc as t2d
class ReplaceWordsTestCase(unittest.TestCase):
def test_simple_case(self):
s = t2d.replaceWords("My name is $NAME", ["$NAME"], ["Gang Seong Lee"])
self.assertEquals(s, "My name is Gang Seong Lee")
def test_complicated_case(self):
s = t2d.replaceWords("My name is $NAME and phone number is $PHONE.", ["$NAME", "$PHONE"], ["Gang Seong Lee", "02-940-5284"])
self.assertEquals(s, "My name is Gang Seong Lee and phone number is 02-940-5284.")
def test_when_size_does_not_match(self):
s = t2d.replaceWords("My name is $NAME and phone number is $PHONE.", ["$NAME", "$PHONE", "$GARBAGE"], ["Gang Seong Lee", "02-940-5284"])
self.assertEquals(s, "My name is Gang Seong Lee and phone number is 02-940-5284.")
def test_when_size_does_not_match_02(self):
s = t2d.replaceWords("My name is $NAME and phone number is $PHONE.", ["$NAME"], ["Gang Seong Lee", "02-940-5284"])
self.assertEquals(s, "My name is Gang Seong Lee and phone number is $PHONE.")
def test_when_no_keyword(self):
s = t2d.replaceWords("My name is $NAME and phone number is $PHONE.", ["$NAME"], ["Gang Seong Lee"])
self.assertEquals(s, "My name is Gang Seong Lee and phone number is $PHONE.")
class InsertTableDataTestCase(unittest.TestCase):
def test_simple_case(self):
template = """
$DATA
...
$NAME $EMAIL
$NAME $EMAIL
...
$DATA
"""
out_template = """
...
Gang Seong Lee gslee@mail.kw.ac.kr
...
"""
fieldMarker = ["$NAME", "$EMAIL"]
tableData = (
("Gang Seong Lee", "gslee@mail.kw.ac.kr"),
)
s = t2d.insertTableData(template, "$DATA", fieldMarker, tableData)
self.assertEquals(s.split(), out_template.split())
def test_more_data(self):
template = """
$DATA
...
$NAME $EMAIL
$NAME $EMAIL
...
$DATA
"""
out_template = """
...
Gang Seong Lee gslee@mail.kw.ac.kr
Sunny gslee@mail.kw.ac.kr
Sora gslee@mail.kw.ac.kr
Bada gslee@mail.kw.ac.kr
...
"""
fieldMarker = ["$NAME", "$EMAIL"]
tableData = (
("Gang Seong Lee", "gslee@mail.kw.ac.kr"),
("Sunny", "gslee@mail.kw.ac.kr"),
("Sora", "gslee@mail.kw.ac.kr"),
("Bada", "gslee@mail.kw.ac.kr"),
)
s = t2d.insertTableData(template, "$DATA", fieldMarker, tableData)
self.assertEquals(s.split(), out_template.split())
class TestAllTestCase(unittest.TestCase):
def test_more_data(self):
template = """
$DATA
...
$NAME $EMAIL
$NAME $EMAIL
...
$DATA
$COPYRIGHT
"""
out_template = """
...
Gang Seong Lee gslee@mail.kw.ac.kr
Sunny gslee@mail.kw.ac.kr
Sora gslee@mail.kw.ac.kr
Bada gslee@mail.kw.ac.kr
...
Copyright (C) gslee
"""
template2 = t2d.replaceWords(template, ["$COPYRIGHT"], ["Copyright (C) gslee"])
fieldMarker = ["$NAME", "$EMAIL"]
tableData = (
("Gang Seong Lee", "gslee@mail.kw.ac.kr"),
("Sunny", "gslee@mail.kw.ac.kr"),
("Sora", "gslee@mail.kw.ac.kr"),
("Bada", "gslee@mail.kw.ac.kr"),
)
s = t2d.insertTableData(template2, "$DATA", fieldMarker, tableData)
self.assertEquals(s.split(), out_template.split())
if __name__ == '__main__':
unittest.main(argv=('', '-v'))
template2doc.i
%module template2doc
%{
#include "template2doc.h"
#include "smartalloc.h"
%}
%{
int i;
int j;
%}
%typemap(in) char ** {
if (!PySequence_Check($input)) {
PyErr_SetString(PyExc_TypeError, "not a sequence");
return NULL;
}
$1 = (char **)malloc((PySequence_Size($input)+1) * sizeof(char*));
for (i=0; i < PySequence_Size($input); i++) {
PyObject* o = PySequence_GetItem($input, i);
if (!PyString_Check(o)) {
PyErr_SetString(PyExc_TypeError, "not a string");
return NULL;
}
$1[i] = PyString_AsString(o);
}
$1[i] = NULL;
}
// Free the list
%typemap(freearg) char ** {
free($1);
}
%typemap(in) char *** {
if (!PySequence_Check($input)) {
PyErr_SetString(PyExc_TypeError, "not a sequence");
return NULL;
}
$1 = (char ***)malloc((PySequence_Size($input)+1) * sizeof(char**));
for (i=0; i < PySequence_Size($input); i++)
{
PyObject* o1 = PySequence_GetItem($input, i);
if (!PySequence_Check(o1)) {
PyErr_SetString(PyExc_TypeError, "not a sequence");
return NULL;
}
$1[i] = (char **)malloc((PySequence_Size(o1)+1) * sizeof(char*));
for (j=0; j < PySequence_Size(o1); j++)
{
PyObject* o2 = PySequence_GetItem(o1, j);
if (!PyString_Check(o2))
{
PyErr_SetString(PyExc_TypeError, "not a string");
return NULL;
}
$1[i][j] = PyString_AsString(o2);
}
$1[i][j] = NULL;
}
$1[i] = NULL;
}
// Free the list
%typemap(freearg) char *** {
free($1);
}
%include "template2doc.h"
%include "smartalloc.h"
4 ¸µÅ©
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)